diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a784f1a0d2..7606e5809a 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -225,6 +225,17 @@
+
+
+
+
+
+
+
@@ -241,13 +252,7 @@
-
-
-
-
-
+
startActivity(new Intent(Intent.ACTION_MAIN).setClass(this, MainActivity.class)));
+ toolbar.setNavigationOnClickListener(unused -> startActivity(MainActivity.clearTop(this)));
}
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/deeplinks/DeepLinkEntryActivity.java b/app/src/main/java/org/thoughtcrime/securesms/deeplinks/DeepLinkEntryActivity.java
new file mode 100644
index 0000000000..7a17c29fe7
--- /dev/null
+++ b/app/src/main/java/org/thoughtcrime/securesms/deeplinks/DeepLinkEntryActivity.java
@@ -0,0 +1,18 @@
+package org.thoughtcrime.securesms.deeplinks;
+
+import android.content.Intent;
+import android.net.Uri;
+import android.os.Bundle;
+
+import org.thoughtcrime.securesms.MainActivity;
+import org.thoughtcrime.securesms.PassphraseRequiredActivity;
+
+public class DeepLinkEntryActivity extends PassphraseRequiredActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState, boolean ready) {
+ Intent intent = MainActivity.clearTop(this);
+ Uri data = getIntent().getData();
+ intent.setData(data);
+ startActivity(intent);
+ }
+}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java
index 9762e8da03..7820d734e5 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/chooseadmin/ChooseNewAdminActivity.java
@@ -112,7 +112,7 @@ public final class ChooseNewAdminActivity extends PassphraseRequiredActivity {
if (updateResult.isSuccess()) {
String title = Recipient.externalGroupExact(this, groupId).getDisplayName(this);
Toast.makeText(this, getString(R.string.ChooseNewAdminActivity_you_left, title), Toast.LENGTH_LONG).show();
- startActivity(new Intent(this, MainActivity.class));
+ startActivity(MainActivity.clearTop(this));
finish();
} else {
done.setClickable(true);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java
index 66dc49eecb..64117b5060 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/groups/ui/managegroup/ManageGroupFragment.java
@@ -264,7 +264,7 @@ public class ManageGroupFragment extends LoggingFragment {
});
leaveGroup.setVisibility(groupId.isPush() ? View.VISIBLE : View.GONE);
- leaveGroup.setOnClickListener(v -> LeaveGroupDialog.handleLeavePushGroup(requireActivity(), groupId.requirePush(), () -> startActivity(new Intent(requireActivity(), MainActivity.class))));
+ leaveGroup.setOnClickListener(v -> LeaveGroupDialog.handleLeavePushGroup(requireActivity(), groupId.requirePush(), () -> startActivity(MainActivity.clearTop(context))));
viewModel.getDisappearingMessageTimer().observe(getViewLifecycleOwner(), string -> disappearingMessages.setText(string));
diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java
index 27984b8b5f..3240a13f64 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/PushDecryptMessageJob.java
@@ -146,7 +146,7 @@ public final class PushDecryptMessageJob extends BaseJob {
.setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setContentTitle(context.getString(R.string.PushDecryptJob_new_locked_message))
.setContentText(context.getString(R.string.PushDecryptJob_unlock_to_view_pending_messages))
- .setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0))
+ .setContentIntent(PendingIntent.getActivity(context, 0, MainActivity.clearTop(context), 0))
.setDefaults(NotificationCompat.DEFAULT_SOUND | NotificationCompat.DEFAULT_VIBRATE)
.build());
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java
index 3fbe38a3c2..f9ebfa8304 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/MultipleRecipientNotificationBuilder.java
@@ -30,7 +30,7 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
setSmallIcon(R.drawable.ic_notification);
setContentTitle(context.getString(R.string.app_name));
// TODO [greyson] Navigation
- setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0));
+ setContentIntent(PendingIntent.getActivity(context, 0, MainActivity.clearTop(context), 0));
setCategory(NotificationCompat.CATEGORY_MESSAGE);
setGroupSummary(true);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java b/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java
index 4bb6c21a11..c07230d8fe 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/notifications/PendingMessageNotificationBuilder.java
@@ -18,9 +18,6 @@ public class PendingMessageNotificationBuilder extends AbstractNotificationBuild
public PendingMessageNotificationBuilder(Context context, NotificationPrivacyPreference privacy) {
super(context, privacy);
- // TODO [greyson] Navigation
- Intent intent = new Intent(context, MainActivity.class);
-
setSmallIcon(R.drawable.ic_notification);
setColor(context.getResources().getColor(R.color.core_ultramarine));
setCategory(NotificationCompat.CATEGORY_MESSAGE);
@@ -29,7 +26,8 @@ public class PendingMessageNotificationBuilder extends AbstractNotificationBuild
setContentText(context.getString(R.string.MessageNotifier_open_signal_to_check_for_recent_notifications));
setTicker(context.getString(R.string.MessageNotifier_open_signal_to_check_for_recent_notifications));
- setContentIntent(PendingIntent.getActivity(context, 0, intent, 0));
+ // TODO [greyson] Navigation
+ setContentIntent(PendingIntent.getActivity(context, 0, MainActivity.clearTop(context), 0));
setAutoCancel(true);
setAlarms(null, RecipientDatabase.VibrateState.DEFAULT);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreActivity.java b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreActivity.java
index f871a7f51e..0b1e9da179 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreActivity.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreActivity.java
@@ -29,7 +29,7 @@ public final class PinRestoreActivity extends AppCompatActivity {
}
void navigateToPinCreation() {
- final Intent main = new Intent(this, MainActivity.class);
+ final Intent main = MainActivity.clearTop(this);
final Intent createPin = CreateKbsPinActivity.getIntentForPinCreate(this);
final Intent chained = PassphraseRequiredActivity.chainIntent(createPin, main);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java
index f78c92c788..356b106d3e 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/pin/PinRestoreEntryFragment.java
@@ -231,7 +231,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
Activity activity = requireActivity();
if (Recipient.self().getProfileName().isEmpty() || !AvatarHelper.hasAvatar(activity, Recipient.self().getId())) {
- final Intent main = new Intent(activity, MainActivity.class);
+ final Intent main = MainActivity.clearTop(activity);
final Intent profile = EditProfileActivity.getIntentForUserProfile(activity);
profile.putExtra("next_intent", main);
@@ -239,7 +239,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
} else {
RegistrationUtil.maybeMarkRegistrationComplete(requireContext());
ApplicationDependencies.getJobManager().add(new ProfileUploadJob());
- startActivity(new Intent(activity, MainActivity.class));
+ startActivity(MainActivity.clearTop(activity));
}
activity.finish();
diff --git a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java
index d87ced1787..17fc98a524 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/registration/fragments/RegistrationCompleteFragment.java
@@ -35,7 +35,7 @@ public final class RegistrationCompleteFragment extends BaseRegistrationFragment
if (SignalStore.storageServiceValues().needsAccountRestore()) {
activity.startActivity(new Intent(activity, PinRestoreActivity.class));
} else if (!isReregister()) {
- final Intent main = new Intent(activity, MainActivity.class);
+ final Intent main = MainActivity.clearTop(activity);
final Intent profile = EditProfileActivity.getIntentForUserProfile(activity);
Intent kbs = CreateKbsPinActivity.getIntentForPinCreate(requireContext());
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/ApplicationMigrationService.java b/app/src/main/java/org/thoughtcrime/securesms/service/ApplicationMigrationService.java
index 0f63c9501c..81e9184976 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/ApplicationMigrationService.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/ApplicationMigrationService.java
@@ -136,7 +136,7 @@ public class ApplicationMigrationService extends Service
builder.setOngoing(true);
builder.setProgress(100, 0, false);
// TODO [greyson] Navigation
- builder.setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0));
+ builder.setContentIntent(PendingIntent.getActivity(this, 0, MainActivity.clearTop(this), 0));
stopForeground(true);
startForeground(NotificationIds.APPLICATION_MIGRATION, builder.build());
@@ -188,7 +188,7 @@ public class ApplicationMigrationService extends Service
builder.setContentTitle(context.getString(R.string.ApplicationMigrationService_import_complete));
builder.setContentText(context.getString(R.string.ApplicationMigrationService_system_database_import_is_complete));
// TODO [greyson] Navigation
- builder.setContentIntent(PendingIntent.getActivity(context, 0, new Intent(context, MainActivity.class), 0));
+ builder.setContentIntent(PendingIntent.getActivity(context, 0, MainActivity.clearTop(context), 0));
builder.setWhen(System.currentTimeMillis());
builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setAutoCancel(true);
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.java b/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.java
index cfc0599b68..69098fea89 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/GenericForegroundService.java
@@ -108,7 +108,7 @@ public final class GenericForegroundService extends Service {
.setSmallIcon(active.iconRes)
.setContentTitle(active.title)
.setProgress(active.progressMax, active.progress, active.indeterminate)
- .setContentIntent(PendingIntent.getActivity(this, 0, new Intent(this, MainActivity.class), 0))
+ .setContentIntent(PendingIntent.getActivity(this, 0, MainActivity.clearTop(this), 0))
.build());
}
diff --git a/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java b/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java
index 24156bec5d..8b415c78fd 100644
--- a/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java
+++ b/app/src/main/java/org/thoughtcrime/securesms/service/KeyCachingService.java
@@ -287,9 +287,7 @@ public class KeyCachingService extends Service {
private PendingIntent buildLaunchIntent() {
// TODO [greyson] Navigation
- Intent intent = new Intent(this, MainActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- return PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
+ return PendingIntent.getActivity(getApplicationContext(), 0, MainActivity.clearTop(this), 0);
}
private static PendingIntent buildExpirationPendingIntent(@NonNull Context context) {
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 2c60ca3594..4d15cd5f65 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,6 +2,15 @@
+
+