diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index 11dc1904e..45b0ac03f 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -1395,6 +1395,13 @@ public class LinphoneActivity extends LinphoneGenericActivity "[Linphone Activity] Device has been restricted by user (Android 9+), push notifications won't work !"); } + int bucket = DeviceUtils.getAppStandbyBucket(this); + if (bucket > 0) { + Log.w( + "[Linphone Activity] Device is in bucket " + + Compatibility.getAppStandbyBucketNameFromValue(bucket)); + } + IntentUtils.handleIntent(this, getIntent()); } diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java index a37fbfbcc..13e89dfef 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java @@ -26,6 +26,7 @@ import android.app.ActivityManager; import android.app.Notification; import android.app.PendingIntent; import android.app.Person; +import android.app.usage.UsageStatsManager; import android.content.Context; import android.graphics.Bitmap; import android.graphics.drawable.Icon; @@ -85,4 +86,24 @@ class ApiTwentyEightPlus { (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); return activityManager.isBackgroundRestricted(); } + + public static int getAppStandbyBucket(Context context) { + UsageStatsManager usageStatsManager = + (UsageStatsManager) context.getSystemService(Context.USAGE_STATS_SERVICE); + return usageStatsManager.getAppStandbyBucket(); + } + + public static String getAppStandbyBucketNameFromValue(int bucket) { + switch (bucket) { + case UsageStatsManager.STANDBY_BUCKET_ACTIVE: + return "STANDBY_BUCKET_ACTIVE"; + case UsageStatsManager.STANDBY_BUCKET_FREQUENT: + return "STANDBY_BUCKET_FREQUENT"; + case UsageStatsManager.STANDBY_BUCKET_RARE: + return "STANDBY_BUCKET_RARE"; + case UsageStatsManager.STANDBY_BUCKET_WORKING_SET: + return "STANDBY_BUCKET_WORKING_SET"; + } + return null; + } } diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.java b/app/src/main/java/org/linphone/compatibility/Compatibility.java index 170ea9195..4e76e49d2 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.java +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.java @@ -210,4 +210,18 @@ public class Compatibility { } return false; } + + public static int getAppStandbyBucket(Context context) { + if (Version.sdkAboveOrEqual(Version.API28_PIE_90)) { + return ApiTwentyEightPlus.getAppStandbyBucket(context); + } + return 0; + } + + public static String getAppStandbyBucketNameFromValue(int bucket) { + if (Version.sdkAboveOrEqual(Version.API28_PIE_90)) { + return ApiTwentyEightPlus.getAppStandbyBucketNameFromValue(bucket); + } + return null; + } } diff --git a/app/src/main/java/org/linphone/utils/DeviceUtils.java b/app/src/main/java/org/linphone/utils/DeviceUtils.java index ea7cb0db6..776f9850a 100644 --- a/app/src/main/java/org/linphone/utils/DeviceUtils.java +++ b/app/src/main/java/org/linphone/utils/DeviceUtils.java @@ -125,6 +125,10 @@ public class DeviceUtils { return Compatibility.isAppUserRestricted(context); } + public static int getAppStandbyBucket(Context context) { + return Compatibility.getAppStandbyBucket(context); + } + public static void displayDialogIfDeviceHasPowerManagerThatCouldPreventPushNotifications( final Context context) { for (final Intent intent : POWERMANAGER_INTENTS) {