From c5f12c67fbd8aeba8b0bb948f0eb2c100c340bfe Mon Sep 17 00:00:00 2001 From: Hayoung Jeong Date: Fri, 21 Feb 2025 10:53:13 +0900 Subject: [PATCH 1/3] fix: Prevent null eventSink crash in onSharedPreferenceChanged (#449) - Added null check before calling `eventSink.success(result)` - Fixes intermittent crashes when reloading the app - Resolves #449 --- .../ActivityRecognitionFlutterPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java index 6df5f1cd3..5579d8bc2 100644 --- a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java +++ b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java @@ -168,7 +168,7 @@ public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, Strin // Log.d("onSharedPreferenceChange", result); if (key!= null && key.equals(DETECTED_ACTIVITY)) { // Log.d(TAG, "Detected activity: " + result); - eventSink.success(result); + if (eventSink != null) eventSink.success(result); } } } From 8ce1c545221cf9565b4c5509db044fe61f5eac35 Mon Sep 17 00:00:00 2001 From: Hayoung Jeong Date: Fri, 21 Feb 2025 10:54:14 +0900 Subject: [PATCH 2/3] fix: Prevent null result crash in onHandleIntent (#488, #580) - Added null checks for `ActivityRecognitionResult`, `getProbableActivities()`, and `SharedPreferences` - Prevents potential NullPointerException in `onHandleIntent` - Resolves #488, #580 --- .../ActivityRecognizedService.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognizedService.java b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognizedService.java index be4e3b273..9fb0718a7 100644 --- a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognizedService.java +++ b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognizedService.java @@ -33,7 +33,10 @@ protected void onHandleWork(@Nullable Intent intent) { // remove override and make onHandleIntent private. private void onHandleIntent(@Nullable Intent intent) { ActivityRecognitionResult result = ActivityRecognitionResult.extractResult(intent); + if (result == null) return; + List activities = result.getProbableActivities(); + if (activities == null || activities.isEmpty()) return; DetectedActivity mostLikely = activities.get(0); @@ -54,6 +57,7 @@ private void onHandleIntent(@Nullable Intent intent) { SharedPreferences preferences = getApplicationContext().getSharedPreferences( ActivityRecognitionFlutterPlugin.ACTIVITY_RECOGNITION, MODE_PRIVATE); + if (preferences == null) return; preferences.edit().clear() .putString( From 4a3dd23eedfecf50d4aed3a7a9b6fb3cde5eba95 Mon Sep 17 00:00:00 2001 From: David Jeong Date: Sun, 2 Nov 2025 15:47:13 +0900 Subject: [PATCH 3/3] fix: replace internal Google Play Services drawable with Android SDK default - Replace R.drawable.common_full_open_on_phone with android.R.drawable.ic_dialog_info - Use Android SDK built-in icon instead of internal Play Services resource - Fix compilation error without adding extra dependencies --- .../ActivityRecognitionFlutterPlugin.java | 2 +- .../cachet/activity_recognition_flutter/ForegroundService.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java index 5579d8bc2..c16f24c63 100644 --- a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java +++ b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ActivityRecognitionFlutterPlugin.java @@ -108,7 +108,7 @@ void startForegroundService() { // Pass the notification title/text/icon to the service intent.putExtra("title", "MonsensoMonitor") .putExtra("text", "Monsenso Foreground Service") - .putExtra("icon", R.drawable.common_full_open_on_phone) + .putExtra("icon", android.R.drawable.ic_dialog_info) .putExtra("importance", 3) .putExtra("id", 10); diff --git a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ForegroundService.java b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ForegroundService.java index 05b9a07dc..d818476be 100644 --- a/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ForegroundService.java +++ b/packages/activity_recognition_flutter/android/src/main/java/dk/cachet/activity_recognition_flutter/ForegroundService.java @@ -66,7 +66,7 @@ private void startPluginForegroundService(Bundle extras) { // Get notification icon // int icon = getResources().getIdentifier((String) extras.get("icon"), "drawable", context.getPackageName()); - int icon = R.drawable.common_full_open_on_phone; + int icon = android.R.drawable.ic_dialog_info; // Make notification Notification notification = new Notification.Builder(context, "foreground.service.channel")