Update: 2026-05-14 19:26:32
This commit is contained in:
@@ -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() {
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user