diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java index 1d9d21c53e..e4f60e663d 100644 --- a/app/src/main/java/eu/faircode/email/FragmentSetup.java +++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java @@ -88,6 +88,7 @@ public class FragmentSetup extends FragmentBase { private TextView tvDozeDone; private Button btnDoze; + private Button btnInexactAlarms; private Button btnBackgroundRestricted; private Button btnDataSaver; @@ -96,6 +97,7 @@ public class FragmentSetup extends FragmentBase { private Button btnInbox; + private Group grpInexactAlarms; private Group grpBackgroundRestricted; private Group grpDataSaver; @@ -146,6 +148,7 @@ public class FragmentSetup extends FragmentBase { tvDozeDone = view.findViewById(R.id.tvDozeDone); btnDoze = view.findViewById(R.id.btnDoze); + btnInexactAlarms = view.findViewById(R.id.btnInexactAlarms); btnBackgroundRestricted = view.findViewById(R.id.btnBackgroundRestricted); btnDataSaver = view.findViewById(R.id.btnDataSaver); @@ -154,6 +157,7 @@ public class FragmentSetup extends FragmentBase { btnInbox = view.findViewById(R.id.btnInbox); + grpInexactAlarms = view.findViewById(R.id.grpInexactAlarms); grpBackgroundRestricted = view.findViewById(R.id.grpBackgroundRestricted); grpDataSaver = view.findViewById(R.id.grpDataSaver); @@ -396,6 +400,20 @@ public class FragmentSetup extends FragmentBase { PackageManager pm = getContext().getPackageManager(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + final Intent settings = new Intent( + Settings.ACTION_REQUEST_SCHEDULE_EXACT_ALARM, + Uri.parse("package:" + BuildConfig.APPLICATION_ID)); + + btnInexactAlarms.setEnabled(settings.resolveActivity(pm) != null); // system whitelisted + btnInexactAlarms.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(settings); + } + }); + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { final Intent settings = new Intent( Settings.ACTION_APPLICATION_DETAILS_SETTINGS, @@ -447,6 +465,7 @@ public class FragmentSetup extends FragmentBase { btnInbox.setEnabled(false); + grpInexactAlarms.setVisibility(View.GONE); grpBackgroundRestricted.setVisibility(View.GONE); grpDataSaver.setVisibility(View.GONE); @@ -549,6 +568,10 @@ public class FragmentSetup extends FragmentBase { tvDozeDone.setTypeface(null, ignoring == null || ignoring ? Typeface.NORMAL : Typeface.BOLD); tvDozeDone.setCompoundDrawablesWithIntrinsicBounds(ignoring == null || ignoring ? check : null, null, null, null); + grpInexactAlarms.setVisibility( + !AlarmManagerCompatEx.canScheduleExactAlarms(getContext()) + ? View.VISIBLE : View.GONE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { ActivityManager am = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); diff --git a/app/src/main/res/layout/fragment_setup.xml b/app/src/main/res/layout/fragment_setup.xml index ba064c6ee5..dd587ffea9 100644 --- a/app/src/main/res/layout/fragment_setup.xml +++ b/app/src/main/res/layout/fragment_setup.xml @@ -631,6 +631,29 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/btnDoze" /> + + +