diff --git a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java index 53e4a1961..c70ae2119 100644 --- a/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java +++ b/src/main/java/org/thoughtcrime/securesms/WelcomeActivity.java @@ -35,6 +35,7 @@ import org.thoughtcrime.securesms.qr.QrCodeHandler; import org.thoughtcrime.securesms.qr.RegistrationQrActivity; import org.thoughtcrime.securesms.service.GenericForegroundService; import org.thoughtcrime.securesms.service.NotificationController; +import org.thoughtcrime.securesms.util.Prefs; import org.thoughtcrime.securesms.util.StorageUtil; import org.thoughtcrime.securesms.util.StreamUtil; import org.thoughtcrime.securesms.util.Util; @@ -76,8 +77,7 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen .setNegativeButton(R.string.cancel, null) .create(); view.findViewById(R.id.add_as_second_device_button).setOnClickListener((v) -> { - startAddAsSecondDeviceActivity(); - signInDialog.dismiss(); + showSignInDialogWithPermission(signInDialog); }); view.findViewById(R.id.backup_button).setOnClickListener((v) -> { startImportBackup(); @@ -93,6 +93,28 @@ public class WelcomeActivity extends BaseActionBarActivity implements DcEventCen DcHelper.maybeShowMigrationError(this); } + private void showSignInDialogWithPermission(AlertDialog signInDialog) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU + && !Prefs.getBooleanPreference(this, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, false)) { + Prefs.setBooleanPreference(this, Prefs.ASKED_FOR_NOTIFICATION_PERMISSION, true); + Permissions.with(this) + .request(Manifest.permission.POST_NOTIFICATIONS) + .ifNecessary() + .onAllGranted(() -> { + startAddAsSecondDeviceActivity(); + signInDialog.dismiss(); + }) + .onAnyDenied(() -> { + startAddAsSecondDeviceActivity(); + signInDialog.dismiss(); + }) + .execute(); + } else { + startAddAsSecondDeviceActivity(); + signInDialog.dismiss(); + } + } + protected void initializeActionBar() { ActionBar supportActionBar = getSupportActionBar(); if (supportActionBar == null) throw new AssertionError();