This commit is contained in:
Hamza-Ayed
2026-05-14 18:24:32 +03:00
commit 8272065938
646 changed files with 50360 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

Binary file not shown.

View File

@@ -0,0 +1,2 @@
#Thu May 14 15:33:55 EET 2026
gradle.version=8.7

Binary file not shown.

View File

@@ -0,0 +1,2 @@
#Thu May 14 16:37:37 EET 2026
java.home=/Applications/Android Studio.app/Contents/jbr/Contents/Home

BIN
.gradle/file-system.probe Normal file

Binary file not shown.

View File

3
.idea/.gitignore generated vendored Normal file
View File

@@ -0,0 +1,3 @@
# Default ignored files
/shelf/
/workspace.xml

1
.idea/.name generated Normal file
View File

@@ -0,0 +1 @@
JordanBot

6
.idea/AndroidProjectSystem.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="AndroidProjectSystem">
<option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
</component>
</project>

6
.idea/compiler.xml generated Normal file
View File

@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<bytecodeTargetLevel target="21" />
</component>
</project>

10
.idea/deploymentTargetSelector.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

18
.idea/gradle.xml generated Normal file
View File

@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GradleSettings">
<option name="linkedExternalProjectsSettings">
<GradleProjectSettings>
<option name="testRunner" value="CHOOSE_PER_TEST" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="$PROJECT_DIR$" />
<option value="$PROJECT_DIR$/app" />
</set>
</option>
</GradleProjectSettings>
</option>
</component>
</project>

10
.idea/migrations.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

10
.idea/misc.xml generated Normal file
View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
<option name="id" value="Android" />
</component>
</project>

17
.idea/runConfigurations.xml generated Normal file
View File

@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RunConfigurationProducerService">
<option name="ignoredProducers">
<set>
<option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
<option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
<option value="com.intellij.execution.junit.PatternConfigurationProducer" />
<option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
<option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
<option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
<option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
</set>
</option>
</component>
</project>

83
app/build.gradle.kts Normal file
View File

@@ -0,0 +1,83 @@
plugins {
id("com.android.application")
id("org.jetbrains.kotlin.android")
}
android {
namespace = "com.jordanbot.autoride"
compileSdk = 34
defaultConfig {
applicationId = "com.jordanbot.autoride"
minSdk = 26
targetSdk = 34
versionCode = 1
versionName = "1.0.0"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro"
)
}
debug {
isMinifyEnabled = false
applicationIdSuffix = ".debug"
}
}
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
viewBinding = true
buildConfig = true
}
}
dependencies {
// Core Android
implementation("androidx.core:core-ktx:1.13.1")
implementation("androidx.appcompat:appcompat:1.7.0")
implementation("com.google.android.material:material:1.12.0")
implementation("androidx.constraintlayout:constraintlayout:2.1.4")
// Lifecycle
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.4")
implementation("androidx.lifecycle:lifecycle-service:2.8.4")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.4")
// Coroutines
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1")
// DataStore (preferences)
implementation("androidx.datastore:datastore-preferences:1.1.1")
// Networking (for future license API)
implementation("com.squareup.retrofit2:retrofit:2.11.0")
implementation("com.squareup.retrofit2:converter-gson:2.11.0")
implementation("com.squareup.okhttp3:okhttp:4.12.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
implementation("com.google.code.gson:gson:2.11.0")
// Location
implementation("com.google.android.gms:play-services-location:21.3.0")
// Testing
testImplementation("junit:junit:4.13.2")
androidTestImplementation("androidx.test.ext:junit:1.2.1")
androidTestImplementation("androidx.test.espresso:espresso-core:3.6.1")
}

View File

@@ -0,0 +1,133 @@
// Generated by view binder compiler. Do not edit!
package com.jordanbot.autoride.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.jordanbot.autoride.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class ActivityMainBinding implements ViewBinding {
@NonNull
private final ScrollView rootView;
@NonNull
public final Button btnAccessibility;
@NonNull
public final Button btnNotification;
@NonNull
public final Button btnOverlay;
@NonNull
public final Button btnStart;
@NonNull
public final Button btnStop;
@NonNull
public final LinearLayout mainLayout;
@NonNull
public final TextView tvStatus;
private ActivityMainBinding(@NonNull ScrollView rootView, @NonNull Button btnAccessibility,
@NonNull Button btnNotification, @NonNull Button btnOverlay, @NonNull Button btnStart,
@NonNull Button btnStop, @NonNull LinearLayout mainLayout, @NonNull TextView tvStatus) {
this.rootView = rootView;
this.btnAccessibility = btnAccessibility;
this.btnNotification = btnNotification;
this.btnOverlay = btnOverlay;
this.btnStart = btnStart;
this.btnStop = btnStop;
this.mainLayout = mainLayout;
this.tvStatus = tvStatus;
}
@Override
@NonNull
public ScrollView getRoot() {
return rootView;
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static ActivityMainBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.activity_main, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static ActivityMainBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.btn_accessibility;
Button btnAccessibility = ViewBindings.findChildViewById(rootView, id);
if (btnAccessibility == null) {
break missingId;
}
id = R.id.btn_notification;
Button btnNotification = ViewBindings.findChildViewById(rootView, id);
if (btnNotification == null) {
break missingId;
}
id = R.id.btn_overlay;
Button btnOverlay = ViewBindings.findChildViewById(rootView, id);
if (btnOverlay == null) {
break missingId;
}
id = R.id.btn_start;
Button btnStart = ViewBindings.findChildViewById(rootView, id);
if (btnStart == null) {
break missingId;
}
id = R.id.btn_stop;
Button btnStop = ViewBindings.findChildViewById(rootView, id);
if (btnStop == null) {
break missingId;
}
id = R.id.main_layout;
LinearLayout mainLayout = ViewBindings.findChildViewById(rootView, id);
if (mainLayout == null) {
break missingId;
}
id = R.id.tv_status;
TextView tvStatus = ViewBindings.findChildViewById(rootView, id);
if (tvStatus == null) {
break missingId;
}
return new ActivityMainBinding((ScrollView) rootView, btnAccessibility, btnNotification,
btnOverlay, btnStart, btnStop, mainLayout, tvStatus);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,103 @@
// Generated by view binder compiler. Do not edit!
package com.jordanbot.autoride.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Switch;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.jordanbot.autoride.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class OverlayExpandedBinding implements ViewBinding {
@NonNull
private final LinearLayout rootView;
@NonNull
public final Button btnSaveClose;
@NonNull
public final EditText etMaxMinutes;
@NonNull
public final EditText etMinPrice;
@NonNull
public final Switch switchBotStatus;
private OverlayExpandedBinding(@NonNull LinearLayout rootView, @NonNull Button btnSaveClose,
@NonNull EditText etMaxMinutes, @NonNull EditText etMinPrice,
@NonNull Switch switchBotStatus) {
this.rootView = rootView;
this.btnSaveClose = btnSaveClose;
this.etMaxMinutes = etMaxMinutes;
this.etMinPrice = etMinPrice;
this.switchBotStatus = switchBotStatus;
}
@Override
@NonNull
public LinearLayout getRoot() {
return rootView;
}
@NonNull
public static OverlayExpandedBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static OverlayExpandedBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.overlay_expanded, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static OverlayExpandedBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.btn_save_close;
Button btnSaveClose = ViewBindings.findChildViewById(rootView, id);
if (btnSaveClose == null) {
break missingId;
}
id = R.id.et_max_minutes;
EditText etMaxMinutes = ViewBindings.findChildViewById(rootView, id);
if (etMaxMinutes == null) {
break missingId;
}
id = R.id.et_min_price;
EditText etMinPrice = ViewBindings.findChildViewById(rootView, id);
if (etMinPrice == null) {
break missingId;
}
id = R.id.switch_bot_status;
Switch switchBotStatus = ViewBindings.findChildViewById(rootView, id);
if (switchBotStatus == null) {
break missingId;
}
return new OverlayExpandedBinding((LinearLayout) rootView, btnSaveClose, etMaxMinutes,
etMinPrice, switchBotStatus);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,68 @@
// Generated by view binder compiler. Do not edit!
package com.jordanbot.autoride.databinding;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.viewbinding.ViewBinding;
import androidx.viewbinding.ViewBindings;
import com.jordanbot.autoride.R;
import java.lang.NullPointerException;
import java.lang.Override;
import java.lang.String;
public final class OverlayFloatingBinding implements ViewBinding {
@NonNull
private final FrameLayout rootView;
@NonNull
public final TextView tvBubble;
private OverlayFloatingBinding(@NonNull FrameLayout rootView, @NonNull TextView tvBubble) {
this.rootView = rootView;
this.tvBubble = tvBubble;
}
@Override
@NonNull
public FrameLayout getRoot() {
return rootView;
}
@NonNull
public static OverlayFloatingBinding inflate(@NonNull LayoutInflater inflater) {
return inflate(inflater, null, false);
}
@NonNull
public static OverlayFloatingBinding inflate(@NonNull LayoutInflater inflater,
@Nullable ViewGroup parent, boolean attachToParent) {
View root = inflater.inflate(R.layout.overlay_floating, parent, false);
if (attachToParent) {
parent.addView(root);
}
return bind(root);
}
@NonNull
public static OverlayFloatingBinding bind(@NonNull View rootView) {
// The body of this method is generated in a way you would not otherwise write.
// This is done to optimize the compiled bytecode for size and performance.
int id;
missingId: {
id = R.id.tv_bubble;
TextView tvBubble = ViewBindings.findChildViewById(rootView, id);
if (tvBubble == null) {
break missingId;
}
return new OverlayFloatingBinding((FrameLayout) rootView, tvBubble);
}
String missingId = rootView.getResources().getResourceName(id);
throw new NullPointerException("Missing required view with ID: ".concat(missingId));
}
}

View File

@@ -0,0 +1,12 @@
/**
* Automatically generated file. DO NOT MODIFY
*/
package com.jordanbot.autoride;
public final class BuildConfig {
public static final boolean DEBUG = Boolean.parseBoolean("true");
public static final String APPLICATION_ID = "com.jordanbot.autoride.debug";
public static final String BUILD_TYPE = "debug";
public static final int VERSION_CODE = 1;
public static final String VERSION_NAME = "1.0.0";
}

Binary file not shown.

View File

@@ -0,0 +1,21 @@
{
"version": 3,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "com.jordanbot.autoride.debug",
"variantName": "debug",
"elements": [
{
"type": "SINGLE",
"filters": [],
"attributes": [],
"versionCode": 1,
"versionName": "1.0.0",
"outputFile": "app-debug.apk"
}
],
"elementType": "File",
"minSdkVersionForDexing": 26
}

View File

@@ -0,0 +1,2 @@
#- File Locator -
listingFile=../../../apk/debug/output-metadata.json

View File

@@ -0,0 +1,2 @@
appMetadataVersion=1.1
androidGradlePluginVersion=8.5.2

View File

@@ -0,0 +1,10 @@
{
"version": 3,
"artifactType": {
"type": "COMPATIBLE_SCREEN_MANIFEST",
"kind": "Directory"
},
"applicationId": "com.jordanbot.autoride.debug",
"variantName": "debug",
"elements": []
}

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.jordanbot.autoride" filePath="app/src/main/res/layout/activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_main_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="210" endOffset="12"/></Target><Target id="@+id/main_layout" view="LinearLayout"><Expressions/><location startLine="7" startOffset="4" endLine="209" endOffset="18"/></Target><Target id="@+id/tv_status" view="TextView"><Expressions/><location startLine="43" startOffset="12" endLine="50" endOffset="42"/></Target><Target id="@+id/btn_notification" view="Button"><Expressions/><location startLine="86" startOffset="12" endLine="94" endOffset="41"/></Target><Target id="@+id/btn_accessibility" view="Button"><Expressions/><location startLine="122" startOffset="12" endLine="130" endOffset="41"/></Target><Target id="@+id/btn_overlay" view="Button"><Expressions/><location startLine="158" startOffset="12" endLine="166" endOffset="41"/></Target><Target id="@+id/btn_start" view="Button"><Expressions/><location startLine="170" startOffset="8" endLine="179" endOffset="48"/></Target><Target id="@+id/btn_stop" view="Button"><Expressions/><location startLine="181" startOffset="8" endLine="189" endOffset="39"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="overlay_expanded" modulePackage="com.jordanbot.autoride" filePath="app/src/main/res/layout/overlay_expanded.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.LinearLayout"><Targets><Target tag="layout/overlay_expanded_0" view="LinearLayout"><Expressions/><location startLine="1" startOffset="0" endLine="58" endOffset="14"/></Target><Target id="@+id/switch_bot_status" view="Switch"><Expressions/><location startLine="18" startOffset="4" endLine="24" endOffset="44"/></Target><Target id="@+id/et_min_price" view="EditText"><Expressions/><location startLine="31" startOffset="4" endLine="37" endOffset="44"/></Target><Target id="@+id/et_max_minutes" view="EditText"><Expressions/><location startLine="44" startOffset="4" endLine="50" endOffset="44"/></Target><Target id="@+id/btn_save_close" view="Button"><Expressions/><location startLine="52" startOffset="4" endLine="56" endOffset="35"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="overlay_floating" modulePackage="com.jordanbot.autoride" filePath="app/src/main/res/layout/overlay_floating.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/overlay_floating_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="16" endOffset="13"/></Target><Target id="@+id/tv_bubble" view="TextView"><Expressions/><location startLine="5" startOffset="4" endLine="15" endOffset="33"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="activity_main" modulePackage="com.jordanbot.autoride" filePath="app/src/main/res/layout/activity_main.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.ScrollView"><Targets><Target tag="layout/activity_main_0" view="ScrollView"><Expressions/><location startLine="1" startOffset="0" endLine="210" endOffset="12"/></Target><Target id="@+id/main_layout" view="LinearLayout"><Expressions/><location startLine="7" startOffset="4" endLine="209" endOffset="18"/></Target><Target id="@+id/tv_status" view="TextView"><Expressions/><location startLine="43" startOffset="12" endLine="50" endOffset="42"/></Target><Target id="@+id/btn_notification" view="Button"><Expressions/><location startLine="86" startOffset="12" endLine="94" endOffset="41"/></Target><Target id="@+id/btn_accessibility" view="Button"><Expressions/><location startLine="122" startOffset="12" endLine="130" endOffset="41"/></Target><Target id="@+id/btn_overlay" view="Button"><Expressions/><location startLine="158" startOffset="12" endLine="166" endOffset="41"/></Target><Target id="@+id/btn_start" view="Button"><Expressions/><location startLine="170" startOffset="8" endLine="179" endOffset="48"/></Target><Target id="@+id/btn_stop" view="Button"><Expressions/><location startLine="181" startOffset="8" endLine="189" endOffset="39"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="overlay_expanded" modulePackage="com.jordanbot.autoride" filePath="app/src/main/res/layout/overlay_expanded.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.LinearLayout"><Targets><Target tag="layout/overlay_expanded_0" view="LinearLayout"><Expressions/><location startLine="1" startOffset="0" endLine="58" endOffset="14"/></Target><Target id="@+id/switch_bot_status" view="Switch"><Expressions/><location startLine="18" startOffset="4" endLine="24" endOffset="44"/></Target><Target id="@+id/et_min_price" view="EditText"><Expressions/><location startLine="31" startOffset="4" endLine="37" endOffset="44"/></Target><Target id="@+id/et_max_minutes" view="EditText"><Expressions/><location startLine="44" startOffset="4" endLine="50" endOffset="44"/></Target><Target id="@+id/btn_save_close" view="Button"><Expressions/><location startLine="52" startOffset="4" endLine="56" endOffset="35"/></Target></Targets></Layout>

View File

@@ -0,0 +1 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?><Layout layout="overlay_floating" modulePackage="com.jordanbot.autoride" filePath="app/src/main/res/layout/overlay_floating.xml" directory="layout" isMerge="false" isBindingData="false" rootNodeType="android.widget.FrameLayout"><Targets><Target tag="layout/overlay_floating_0" view="FrameLayout"><Expressions/><location startLine="1" startOffset="0" endLine="16" endOffset="13"/></Target><Target id="@+id/tv_bubble" view="TextView"><Expressions/><location startLine="5" startOffset="4" endLine="15" endOffset="33"/></Target></Targets></Layout>

Some files were not shown because too many files have changed in this diff Show More