Update: 2026-05-16 19:26:42
This commit is contained in:
@@ -57,6 +57,7 @@ class SubscriptionActivity : AppCompatActivity() {
|
||||
val plan = SubscriptionManager.currentPlan
|
||||
val limit = SubscriptionManager.ridesLimit
|
||||
val today = SubscriptionManager.ridesToday
|
||||
val missed = SubscriptionManager.missedRidesToday
|
||||
|
||||
val planText = when(plan) {
|
||||
"basic" -> "أساسي (3 تطبيقات)"
|
||||
@@ -64,7 +65,16 @@ class SubscriptionActivity : AppCompatActivity() {
|
||||
else -> "مجاني (تطبيق واحد)"
|
||||
}
|
||||
|
||||
tvStatus.text = "الخطة الحالية: $planText\nاستهلاك اليوم: $today / $limit"
|
||||
var statusText = "الخطة الحالية: $planText\nاستهلاك اليوم: $today / $limit"
|
||||
|
||||
// FOMO counter: show missed rides to free users
|
||||
if (missed > 0 && (plan == "free" || plan == "")) {
|
||||
val estimatedLoss = missed * 2.5 // Average ride ~2.5 JOD
|
||||
statusText += "\n\n⚠️ طلبات فاتتك اليوم بسبب الحد المجاني: $missed طلب"
|
||||
statusText += "\n💸 خسارة تقديرية: ~${String.format("%.1f", estimatedLoss)} دينار"
|
||||
}
|
||||
|
||||
tvStatus.text = statusText
|
||||
}
|
||||
|
||||
private fun startPaymentFlow(plan: String, amount: Double) {
|
||||
|
||||
@@ -170,6 +170,7 @@ class RideAccessibilityService : AccessibilityService() {
|
||||
}
|
||||
} else {
|
||||
Log.w("JordanBot", "⚠️ Ride matches filters but DAILY LIMIT REACHED. Upgrade required.")
|
||||
SubscriptionManager.recordMissedRide(this@RideAccessibilityService)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,11 +14,14 @@ object SubscriptionManager {
|
||||
private const val KEY_CAN_ACCEPT = "can_accept"
|
||||
private const val KEY_RIDES_TODAY = "rides_today"
|
||||
private const val KEY_RIDES_LIMIT = "rides_limit"
|
||||
private const val KEY_MISSED_RIDES = "missed_rides_today"
|
||||
private const val KEY_MISSED_DATE = "missed_date"
|
||||
|
||||
var currentPlan: String = "free"
|
||||
var canAcceptRides: Boolean = true
|
||||
var ridesToday: Int = 0
|
||||
var ridesLimit: Int = 1
|
||||
var missedRidesToday: Int = 0
|
||||
|
||||
fun loadLocalCache(context: Context) {
|
||||
val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
|
||||
@@ -26,6 +29,31 @@ object SubscriptionManager {
|
||||
canAcceptRides = prefs.getBoolean(KEY_CAN_ACCEPT, true)
|
||||
ridesToday = prefs.getInt(KEY_RIDES_TODAY, 0)
|
||||
ridesLimit = prefs.getInt(KEY_RIDES_LIMIT, 1)
|
||||
|
||||
// Reset missed rides counter if it's a new day
|
||||
val today = java.text.SimpleDateFormat("yyyy-MM-dd", java.util.Locale.US).format(java.util.Date())
|
||||
val savedDate = prefs.getString(KEY_MISSED_DATE, "") ?: ""
|
||||
if (savedDate == today) {
|
||||
missedRidesToday = prefs.getInt(KEY_MISSED_RIDES, 0)
|
||||
} else {
|
||||
missedRidesToday = 0
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when a ride matches filters but was blocked due to quota limit.
|
||||
* This powers the FOMO counter that drives free users to subscribe.
|
||||
*/
|
||||
fun recordMissedRide(context: Context) {
|
||||
missedRidesToday++
|
||||
val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
|
||||
val today = java.text.SimpleDateFormat("yyyy-MM-dd", java.util.Locale.US).format(java.util.Date())
|
||||
prefs.edit().apply {
|
||||
putInt(KEY_MISSED_RIDES, missedRidesToday)
|
||||
putString(KEY_MISSED_DATE, today)
|
||||
apply()
|
||||
}
|
||||
Log.w("JordanBot", "⚠️ FOMO: Missed ride #$missedRidesToday today due to quota limit")
|
||||
}
|
||||
|
||||
suspend fun checkSubscription(context: Context): Boolean {
|
||||
@@ -59,3 +87,4 @@ object SubscriptionManager {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user