Update: 2026-05-14 19:26:32

This commit is contained in:
Hamza-Ayed
2026-05-14 19:26:32 +03:00
parent 8272065938
commit 22433b040e
431 changed files with 17953 additions and 11833 deletions

View File

@@ -1,9 +1,12 @@
package com.jordanbot.autoride
import android.Manifest
import android.accessibilityservice.AccessibilityServiceInfo
import android.content.Context
import android.content.Intent
import android.content.pm.PackageManager
import android.graphics.Color
import android.os.Build
import android.os.Bundle
import android.provider.Settings
import android.view.View
@@ -12,7 +15,9 @@ import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationManagerCompat
import androidx.core.content.ContextCompat
import com.jordanbot.autoride.service.BotForegroundService
import com.jordanbot.autoride.service.OverlayService
@@ -46,6 +51,11 @@ class MainActivity : AppCompatActivity() {
}
}
// Location and Notification Permission Request
findViewById<Button>(R.id.btn_location).setOnClickListener {
requestPermissions()
}
btnStart.setOnClickListener {
if (checkAllPermissions()) {
startBot()
@@ -59,6 +69,21 @@ class MainActivity : AppCompatActivity() {
}
}
private fun requestPermissions() {
val permissions = mutableListOf(
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION
)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
permissions.add(Manifest.permission.POST_NOTIFICATIONS)
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
permissions.add(Manifest.permission.FOREGROUND_SERVICE_LOCATION)
}
ActivityCompat.requestPermissions(this, permissions.toTypedArray(), 1001)
}
override fun onResume() {
super.onResume()
updateStatusUI()
@@ -68,6 +93,9 @@ class MainActivity : AppCompatActivity() {
val notificationEnabled = NotificationManagerCompat.getEnabledListenerPackages(this).contains(packageName)
val overlayEnabled = Settings.canDrawOverlays(this)
// Location Permission Check
val fineLocationGranted = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED
// Check Accessibility
var accessibilityEnabled = false
val am = getSystemService(Context.ACCESSIBILITY_SERVICE) as AccessibilityManager
@@ -79,7 +107,7 @@ class MainActivity : AppCompatActivity() {
}
}
return notificationEnabled && overlayEnabled && accessibilityEnabled
return notificationEnabled && overlayEnabled && accessibilityEnabled && fineLocationGranted
}
private fun updateStatusUI() {

View File

@@ -1,7 +1,7 @@
package com.jordanbot.autoride.api
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonGsonConverterFactory
import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.Body
import retrofit2.http.POST
@@ -44,7 +44,7 @@ interface BackendApiService {
object ApiClient {
// Replace with your actual server URL
private const val BASE_URL = "https://lawer.tripz-egypt.com/jordan_bot/"
private const val BASE_URL = "https://lawer.tripz-egypt.com/jordan_bot/backend/"
val service: BackendApiService by lazy {
Retrofit.Builder()

View File

@@ -25,7 +25,7 @@ class BotForegroundService : Service() {
private lateinit var fusedLocationClient: FusedLocationProviderClient
private val locationBuffer = mutableListOf<LocationPoint>()
private val UPLOAD_INTERVAL_MS = TimeUnit.MINUTES.toMillis(5)
private val UPLOAD_INTERVAL_MS = TimeUnit.SECONDS.toMillis(30)
private val TRACK_INTERVAL_MS = TimeUnit.SECONDS.toMillis(3)
private val locationCallback = object : LocationCallback() {

View File

@@ -32,17 +32,32 @@ class RideNotificationListener : NotificationListenerService() {
}
override fun onNotificationPosted(sbn: StatusBarNotification) {
val packageName = sbn.packageName
val parser = parsers.find { it.packageName == packageName } ?: return
var packageName = sbn.packageName
Log.d("JordanBot", "Received notification from: $packageName")
// TEMPORARY: Allow Shell notifications for testing
if (packageName == "com.android.shell") {
Log.d("JordanBot", "Testing mode: Treating Shell notification as Uber")
packageName = "com.ubercab.driver"
}
val parser = parsers.find { it.packageName == packageName }
if (parser == null) {
Log.d("JordanBot", "No parser found for package: $packageName")
return
}
val notification = sbn.notification
val extras = notification.extras
val title = extras.getString(Notification.EXTRA_TITLE) ?: ""
val text = extras.getCharSequence(Notification.EXTRA_TEXT)?.toString() ?: ""
Log.d("JordanBot", "Notification from $packageName: $title - $text")
Log.d("JordanBot", "Notification Content: $title | $text")
val rideRequest = parser.parse(title, text)
if (rideRequest == null) {
Log.d("JordanBot", "Parser failed to extract ride info from: $title | $text")
}
if (rideRequest != null) {
val isAccepted = filterEngine.evaluate(rideRequest)
@@ -62,11 +77,11 @@ class RideNotificationListener : NotificationListenerService() {
private fun sendLogToBackend(ride: com.jordanbot.autoride.model.RideRequest, isAccepted: Boolean, rawText: String) {
val logRequest = RideLogRequest(
platform = ride.platform,
price = ride.price,
pickupDistance = ride.pickupDistance,
dropoffDistance = ride.dropoffDistance,
timeToPickup = ride.timeToPickup,
platform = ride.appPackage,
price = ride.priceJod ?: 0.0,
pickupDistance = ride.distanceKm?.toString() ?: "Unknown",
dropoffDistance = "Unknown",
timeToPickup = ride.minutesAway?.toString() ?: "Unknown",
isAccepted = isAccepted,
rawText = rawText,
fingerprint = DeviceUtils.getDeviceFingerprint(this)