diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 264132de25..e6eecda51b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -12,6 +12,7 @@ + diff --git a/app/src/main/java/info/nightscout/androidaps/MainActivity.java b/app/src/main/java/info/nightscout/androidaps/MainActivity.java index 1595e6cb02..844f218803 100644 --- a/app/src/main/java/info/nightscout/androidaps/MainActivity.java +++ b/app/src/main/java/info/nightscout/androidaps/MainActivity.java @@ -326,6 +326,7 @@ public class MainActivity extends AppCompatActivity { case AndroidPermission.CASE_LOCATION: case AndroidPermission.CASE_SMS: case AndroidPermission.CASE_BATTERY: + case AndroidPermission.CASE_PHONESTATE: break; } } diff --git a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java index f6f291ddc2..0a055d7ae6 100644 --- a/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java +++ b/app/src/main/java/info/nightscout/androidaps/plugins/Overview/notifications/Notification.java @@ -71,6 +71,7 @@ public class Notification { public static final int DEVICENOTPAIRED = 43; public static final int MEDTRONIC_PUMP_ALARM = 44; public static final int RILEYLINK_CONNECTION = 45; + public static final int PERMISSION_PHONESTATE = 46; public int id; diff --git a/app/src/main/java/info/nightscout/utils/AndroidPermission.java b/app/src/main/java/info/nightscout/utils/AndroidPermission.java index 6759bf5c96..c2a572ff4f 100644 --- a/app/src/main/java/info/nightscout/utils/AndroidPermission.java +++ b/app/src/main/java/info/nightscout/utils/AndroidPermission.java @@ -21,6 +21,7 @@ public class AndroidPermission { public static final int CASE_SMS = 0x2; public static final int CASE_LOCATION = 0x3; public static final int CASE_BATTERY = 0x4; + public static final int CASE_PHONESTATE = 0x5; public static void askForPermission(Activity activity, String[] permission, Integer requestCode) { boolean test = false; @@ -55,6 +56,16 @@ public class AndroidPermission { } else MainApp.bus().post(new EventDismissNotification(Notification.PERMISSION_SMS)); } + // Following is a bug in Android 8 + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.O) { + if (!checkForPermission(activity, Manifest.permission.READ_PHONE_STATE)) { + NotificationWithAction notification = new NotificationWithAction(Notification.PERMISSION_PHONESTATE, MainApp.gs(R.string.smscommunicator_missingphonestatepermission), Notification.URGENT); + notification.action(MainApp.gs(R.string.request), () -> + AndroidPermission.askForPermission(activity, new String[]{Manifest.permission.READ_PHONE_STATE}, AndroidPermission.CASE_PHONESTATE)); + MainApp.bus().post(new EventNewNotification(notification)); + } else + MainApp.bus().post(new EventDismissNotification(Notification.PERMISSION_PHONESTATE)); + } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0bde7cfbb7..215666b3f1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -610,6 +610,7 @@ Bluetooth status About Missing SMS permission + Missing phone state permission xDrip Status (watch) xDrip Statusline (watch) xds