Use dialog for notification permisions

This commit is contained in:
M66B 2023-08-03 18:57:58 +02:00
parent f3b404e9c8
commit c5662d05d2
4 changed files with 59 additions and 24 deletions

View File

@ -0,0 +1,42 @@
package eu.faircode.email;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.preference.PreferenceManager;
public class FragmentDialogNotifications extends FragmentDialogBase {
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
final Context context = getContext();
return new AlertDialog.Builder(context)
.setIcon(R.drawable.twotone_notifications_off_24)
.setTitle(R.string.title_hint_notifications)
.setMessage(R.string.title_hint_notifications_remark)
.setPositiveButton(R.string.title_fix, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent intent = new Intent(context, ActivitySetup.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
}
})
.setNegativeButton(R.string.title_dismiss, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putBoolean("notifications_reminder", false).apply();
}
})
.create();
}
}

View File

@ -647,9 +647,7 @@ public class FragmentMessages extends FragmentBase
tvNotifications.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(v.getContext(), ActivitySetup.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
v.getContext().startActivity(intent);
new FragmentDialogNotifications().show(getParentFragmentManager(), "notifications");
}
});
@ -5145,11 +5143,6 @@ public class FragmentMessages extends FragmentBase
updateAirplaneMode(ConnectionHelper.airplaneMode(context));
context.registerReceiver(airplanemode, new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED));
boolean canNotify =
(Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
hasPermission(Manifest.permission.POST_NOTIFICATIONS));
grpNotifications.setVisibility(canNotify ? View.GONE : View.VISIBLE);
boolean isIgnoring = !Boolean.FALSE.equals(Helper.isIgnoringOptimizations(context));
//boolean canSchedule = AlarmManagerCompatEx.canScheduleExactAlarms(context);
boolean enabled = prefs.getBoolean("enabled", true);
@ -5174,6 +5167,7 @@ public class FragmentMessages extends FragmentBase
;
prefs.registerOnSharedPreferenceChangeListener(this);
onSharedPreferenceChanged(prefs, "notifications_reminder");
onSharedPreferenceChanged(prefs, "pro");
if (viewType == AdapterMessage.ViewType.UNIFIED || viewType == AdapterMessage.ViewType.FOLDER) {
@ -5229,6 +5223,16 @@ public class FragmentMessages extends FragmentBase
@Override
public void onSharedPreferenceChanged(SharedPreferences prefs, String key) {
if (grpNotifications != null && "notifications_reminder".equals(key)) {
boolean canNotify =
(Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
hasPermission(Manifest.permission.POST_NOTIFICATIONS));
if (canNotify)
prefs.edit().remove("notifications_reminder").apply();
boolean notifications_reminder = prefs.getBoolean("notifications_reminder", true);
grpNotifications.setVisibility(canNotify || !notifications_reminder ? View.GONE : View.VISIBLE);
}
if (grpSupport != null &&
("pro".equals(key) || "banner_hidden".equals(key))) {
boolean pro = ActivityBilling.isPro(getContext());

View File

@ -328,7 +328,8 @@ public class FragmentOptionsMisc extends FragmentBase implements SharedPreferenc
"redmi_note",
"accept_space", "accept_unsupported",
"junk_hint",
"last_update_check", "last_announcement_check"
"last_update_check", "last_announcement_check",
"notifications_reminder"
};
@Override

View File

@ -50,7 +50,7 @@
android:drawableStart="@drawable/twotone_notifications_off_24"
android:drawablePadding="6dp"
android:paddingHorizontal="12dp"
android:paddingTop="6dp"
android:paddingVertical="6dp"
android:text="@string/title_hint_notifications"
android:textAppearance="@style/TextAppearance.AppCompat.Medium"
app:drawableTint="?android:attr/textColorSecondary"
@ -58,25 +58,13 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/vSeparatorAirplane" />
<TextView
android:id="@+id/tvNotificationsRemark"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:padding="6dp"
android:text="@string/title_hint_notifications_remark"
android:textAppearance="@style/TextAppearance.AppCompat.Small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvNotifications" />
<View
android:id="@+id/vSeparatorNotifications"
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="?attr/colorSeparator"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvNotificationsRemark" />
app:layout_constraintTop_toBottomOf="@id/tvNotifications" />
<TextView
android:id="@+id/tvBatteryOptimizations"
@ -500,7 +488,7 @@
android:id="@+id/grpNotifications"
android:layout_width="0dp"
android:layout_height="0dp"
app:constraint_referenced_ids="tvNotifications,tvNotificationsRemark,vSeparatorNotifications" />
app:constraint_referenced_ids="tvNotifications,vSeparatorNotifications" />
<androidx.constraintlayout.widget.Group
android:id="@+id/grpBatteryOptimizations"