diff --git a/app/src/main/java/eu/faircode/email/FragmentDialogStill.java b/app/src/main/java/eu/faircode/email/FragmentDialogStill.java
index 9eb58518b4..5ef927b37d 100644
--- a/app/src/main/java/eu/faircode/email/FragmentDialogStill.java
+++ b/app/src/main/java/eu/faircode/email/FragmentDialogStill.java
@@ -27,6 +27,7 @@ import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.Paint;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -46,6 +47,8 @@ public class FragmentDialogStill extends FragmentDialogBase {
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
final Context context = getContext();
View dview = LayoutInflater.from(context).inflate(R.layout.dialog_setup, null);
+ TextView tvContactPermissions = dview.findViewById(R.id.tvContactPermissions);
+ TextView tvNotificationPermissions = dview.findViewById(R.id.tvNotificationPermissions);
TextView tvDozeDevice = dview.findViewById(R.id.tvDozeDevice);
TextView tvDozeAndroid12 = dview.findViewById(R.id.tvDozeAndroid12);
CheckBox cbNotAgain = dview.findViewById(R.id.cbNotAgain);
@@ -68,14 +71,22 @@ public class FragmentDialogStill extends FragmentDialogBase {
}
});
- boolean hasPermissions = Helper.hasPermission(context, Manifest.permission.READ_CONTACTS);
+ boolean hasContactPermissions =
+ Helper.hasPermission(context, Manifest.permission.READ_CONTACTS);
+ boolean hasNotificationPermissions =
+ (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
+ Helper.hasPermission(context, Manifest.permission.POST_NOTIFICATIONS));
boolean isIgnoring = !Boolean.FALSE.equals(Helper.isIgnoringOptimizations(context));
boolean canScheduleExact = AlarmManagerCompatEx.canScheduleExactAlarms(getContext());
+ tvContactPermissions.setVisibility(hasContactPermissions ? View.GONE : View.VISIBLE);
+ tvNotificationPermissions.setVisibility(hasNotificationPermissions ? View.GONE : View.VISIBLE);
tvDozeDevice.setVisibility(Helper.isKilling() && !isIgnoring ? View.VISIBLE : View.GONE);
tvDozeAndroid12.setVisibility(!canScheduleExact && !isIgnoring ? View.VISIBLE : View.GONE);
- grp2.setVisibility(hasPermissions ? View.GONE : View.VISIBLE);
+ grp2.setVisibility(
+ hasContactPermissions && hasNotificationPermissions
+ ? View.GONE : View.VISIBLE);
grp3.setVisibility(isIgnoring ? View.GONE : View.VISIBLE);
AlertDialog.Builder builder = new AlertDialog.Builder(context)
diff --git a/app/src/main/java/eu/faircode/email/FragmentOptions.java b/app/src/main/java/eu/faircode/email/FragmentOptions.java
index e9b51e1ef7..7200103eb9 100644
--- a/app/src/main/java/eu/faircode/email/FragmentOptions.java
+++ b/app/src/main/java/eu/faircode/email/FragmentOptions.java
@@ -29,6 +29,7 @@ import android.database.Cursor;
import android.database.MatrixCursor;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
+import android.os.Build;
import android.os.Bundle;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
@@ -486,10 +487,15 @@ public class FragmentOptions extends FragmentBase {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getContext());
boolean setup_reminder = prefs.getBoolean("setup_reminder", true);
- boolean hasPermissions = hasPermission(Manifest.permission.READ_CONTACTS);
+ boolean hasContactPermissions =
+ hasPermission(Manifest.permission.READ_CONTACTS);
+ boolean hasNotificationPermissions =
+ (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
+ hasPermission(Manifest.permission.POST_NOTIFICATIONS));
boolean isIgnoring = !Boolean.FALSE.equals(Helper.isIgnoringOptimizations(getContext()));
- if (!setup_reminder || (hasPermissions && isIgnoring))
+ if (!setup_reminder ||
+ (hasContactPermissions && hasNotificationPermissions && isIgnoring))
super.finish();
else {
FragmentDialogStill fragment = new FragmentDialogStill();
diff --git a/app/src/main/java/eu/faircode/email/FragmentSetup.java b/app/src/main/java/eu/faircode/email/FragmentSetup.java
index 5971adc6b4..a3a18117d2 100644
--- a/app/src/main/java/eu/faircode/email/FragmentSetup.java
+++ b/app/src/main/java/eu/faircode/email/FragmentSetup.java
@@ -99,6 +99,7 @@ public class FragmentSetup extends FragmentBase {
private TextView tvFree;
private TextView tvNoComposable;
+ private TextView tvNotificationPermissions;
private TextView tvPermissionsDone;
private Button btnPermissions;
private TextView tvPermissionsWhy;
@@ -176,6 +177,7 @@ public class FragmentSetup extends FragmentBase {
tvFree = view.findViewById(R.id.tvFree);
tvNoComposable = view.findViewById(R.id.tvNoComposable);
+ tvNotificationPermissions = view.findViewById(R.id.tvNotificationPermissions);
tvPermissionsDone = view.findViewById(R.id.tvPermissionsDone);
btnPermissions = view.findViewById(R.id.btnPermissions);
tvPermissionsWhy = view.findViewById(R.id.tvPermissionsWhy);
@@ -685,6 +687,9 @@ public class FragmentSetup extends FragmentBase {
btnIdentity.setEnabled(false);
tvNoComposable.setVisibility(View.GONE);
+ tvNotificationPermissions.setVisibility(
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU
+ ? View.GONE : View.VISIBLE);
tvPermissionsDone.setText(null);
tvPermissionsDone.setCompoundDrawables(null, null, null, null);
diff --git a/app/src/main/res/layout/dialog_setup.xml b/app/src/main/res/layout/dialog_setup.xml
index 0bce1e32b5..e3d6dd6171 100644
--- a/app/src/main/res/layout/dialog_setup.xml
+++ b/app/src/main/res/layout/dialog_setup.xml
@@ -46,7 +46,7 @@
app:layout_constraintTop_toTopOf="@id/two" />
+
+
+ app:constraint_referenced_ids="two,title2" />
+
+
+ app:layout_constraintTop_toBottomOf="@id/tvNotificationPermissions" />
Grant permissions
To access contact information (optional)
Contact permissions are required to look up contact info and to suggest contacts
+ To show new messages notifications (optional)
+ Notification permissions are required to display new message status bar notifications
Which permissions are needed and why?
How can I import contacts?
Disable battery optimizations