diff --git a/mobile/src/main/java/net/activitywatch/android/AWPreferences.kt b/mobile/src/main/java/net/activitywatch/android/AWPreferences.kt index e1195357..3c528068 100644 --- a/mobile/src/main/java/net/activitywatch/android/AWPreferences.kt +++ b/mobile/src/main/java/net/activitywatch/android/AWPreferences.kt @@ -8,6 +8,7 @@ class AWPreferences(context: Context) { context.getSharedPreferences("AWPreferences", Context.MODE_PRIVATE) // To check if it is the first time the app is being run + // Set to false when user finishes onboarding fun isFirstTime(): Boolean { return sharedPreferences.getBoolean("isFirstTime", true) } diff --git a/mobile/src/main/java/net/activitywatch/android/MainActivity.kt b/mobile/src/main/java/net/activitywatch/android/MainActivity.kt index 5fa10ce8..d422465d 100644 --- a/mobile/src/main/java/net/activitywatch/android/MainActivity.kt +++ b/mobile/src/main/java/net/activitywatch/android/MainActivity.kt @@ -46,7 +46,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte // If first time, or usage not allowed, show onboarding activity val prefs = AWPreferences(this) - if (prefs.isFirstTime() || UsageStatsWatcher.isUsageAllowed(this)) { + if (prefs.isFirstTime() || !UsageStatsWatcher.isUsageAllowed(this)) { Log.i(TAG, "First time or usage not allowed, starting onboarding activity") val intent = Intent(this, OnboardingActivity::class.java) startActivity(intent) diff --git a/mobile/src/main/java/net/activitywatch/android/OnboardingActivity.kt b/mobile/src/main/java/net/activitywatch/android/OnboardingActivity.kt index ab61e3df..bc5f01a3 100644 --- a/mobile/src/main/java/net/activitywatch/android/OnboardingActivity.kt +++ b/mobile/src/main/java/net/activitywatch/android/OnboardingActivity.kt @@ -52,6 +52,7 @@ class OnboardingActivity : AppCompatActivity() { // Handle finish button click (e.g., navigate to the main activity) // First, check if the user has granted the usage permission if(UsageStatsWatcher.isUsageAllowed(this)) { + AWPreferences(this).setFirstTimeRunFlag() finish() } else { // Show a snackbar and don't finish the activity diff --git a/mobile/src/main/java/net/activitywatch/android/models/Event.kt b/mobile/src/main/java/net/activitywatch/android/models/Event.kt index addec645..86769379 100644 --- a/mobile/src/main/java/net/activitywatch/android/models/Event.kt +++ b/mobile/src/main/java/net/activitywatch/android/models/Event.kt @@ -3,6 +3,7 @@ package net.activitywatch.android.models import android.app.usage.UsageEvents import android.content.Context import android.content.pm.PackageManager +import android.util.Log import org.json.JSONObject import org.threeten.bp.DateTimeUtils import org.threeten.bp.Instant @@ -13,9 +14,9 @@ data class Event(val timestamp: Instant, val duration: Double = 0.0, val data: J val timestamp = DateTimeUtils.toInstant(java.util.Date(usageEvent.timeStamp)) val pm = context.packageManager val appName = try { - pm.getApplicationLabel(pm.getApplicationInfo(usageEvent.packageName, PackageManager.GET_META_DATA)) + pm.getApplicationLabel(pm.getApplicationInfo(usageEvent.packageName, PackageManager.GET_META_DATA or PackageManager.MATCH_UNINSTALLED_PACKAGES)) } catch(e: PackageManager.NameNotFoundException) { - "Unknown" + "Unknown (${usageEvent.packageName})" } // Construct the data object in an exception-safe manner