Reopen properly when we select launcher icon.

* Reopen properly when we select launcher icon.

* Reduce noise
This commit is contained in:
Alex Hart
2020-12-19 16:54:00 -04:00
committed by Alan Evans
parent 6bab6c2454
commit b7477d287b
20 changed files with 72 additions and 34 deletions

View File

@@ -225,6 +225,17 @@
<category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" /> <category android:name="android.intent.category.MULTIWINDOW_LAUNCHER" />
</intent-filter> </intent-filter>
<meta-data android:name="com.sec.minimode.icon.portrait.normal"
android:resource="@mipmap/ic_launcher" />
<meta-data android:name="com.sec.minimode.icon.landscape.normal"
android:resource="@mipmap/ic_launcher" />
</activity-alias>
<activity android:name=".deeplinks.DeepLinkEntryActivity"
android:noHistory="true"
android:theme="@style/Signal.Transparent">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.VIEW" /> <action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
@@ -241,13 +252,7 @@
<data android:scheme="https" <data android:scheme="https"
android:host="signal.group"/> android:host="signal.group"/>
</intent-filter> </intent-filter>
</activity>
<meta-data android:name="com.sec.minimode.icon.portrait.normal"
android:resource="@mipmap/ic_launcher" />
<meta-data android:name="com.sec.minimode.icon.landscape.normal"
android:resource="@mipmap/ic_launcher" />
</activity-alias>
<activity android:name=".conversation.ConversationActivity" <activity android:name=".conversation.ConversationActivity"
android:windowSoftInputMode="stateUnchanged" android:windowSoftInputMode="stateUnchanged"
@@ -504,7 +509,6 @@
<activity android:name=".MainActivity" <activity android:name=".MainActivity"
android:theme="@style/Theme.Signal.DayNight.NoActionBar" android:theme="@style/Theme.Signal.DayNight.NoActionBar"
android:launchMode="singleTask"
android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" /> android:configChanges="touchscreen|keyboard|keyboardHidden|orientation|screenLayout|screenSize" />
<activity android:name=".pin.PinRestoreActivity" <activity android:name=".pin.PinRestoreActivity"

View File

@@ -150,7 +150,7 @@ public class DatabaseMigrationActivity extends PassphraseRequiredActivity {
startActivity((Intent)getIntent().getParcelableExtra("next_intent")); startActivity((Intent)getIntent().getParcelableExtra("next_intent"));
} else { } else {
// TODO [greyson] Navigation // TODO [greyson] Navigation
startActivity(new Intent(this, MainActivity.class)); startActivity(MainActivity.clearTop(this));
} }
} }

View File

@@ -1,6 +1,7 @@
package org.thoughtcrime.securesms; package org.thoughtcrime.securesms;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
@@ -22,6 +23,16 @@ public class MainActivity extends PassphraseRequiredActivity {
private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme();
private final MainNavigator navigator = new MainNavigator(this); private final MainNavigator navigator = new MainNavigator(this);
public static @NonNull Intent clearTop(@NonNull Context context) {
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
return intent;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState, boolean ready) { protected void onCreate(Bundle savedInstanceState, boolean ready) {
super.onCreate(savedInstanceState, ready); super.onCreate(savedInstanceState, ready);

View File

@@ -221,7 +221,7 @@ public abstract class PassphraseRequiredActivity extends BaseActivity implements
private Intent getConversationListIntent() { private Intent getConversationListIntent() {
// TODO [greyson] Navigation // TODO [greyson] Navigation
return new Intent(this, MainActivity.class); return MainActivity.clearTop(this);
} }
private void initializeClearKeyReceiver() { private void initializeClearKeyReceiver() {

View File

@@ -35,7 +35,7 @@ public class ShortcutLauncherActivity extends AppCompatActivity {
if (rawId == null) { if (rawId == null) {
Toast.makeText(this, R.string.ShortcutLauncherActivity_invalid_shortcut, Toast.LENGTH_SHORT).show(); Toast.makeText(this, R.string.ShortcutLauncherActivity_invalid_shortcut, Toast.LENGTH_SHORT).show();
// TODO [greyson] Navigation // TODO [greyson] Navigation
startActivity(new Intent(this, MainActivity.class)); startActivity(MainActivity.clearTop(this));
finish(); finish();
return; return;
} }
@@ -43,7 +43,7 @@ public class ShortcutLauncherActivity extends AppCompatActivity {
Recipient recipient = Recipient.live(RecipientId.from(rawId)).get(); Recipient recipient = Recipient.live(RecipientId.from(rawId)).get();
// TODO [greyson] Navigation // TODO [greyson] Navigation
TaskStackBuilder backStack = TaskStackBuilder.create(this) TaskStackBuilder backStack = TaskStackBuilder.create(this)
.addNextIntent(new Intent(this, MainActivity.class)); .addNextIntent(MainActivity.clearTop(this));
CommunicationActions.startConversation(this, recipient, null, backStack); CommunicationActions.startConversation(this, recipient, null, backStack);
finish(); finish();

View File

@@ -22,7 +22,7 @@ public class SystemSmsImportReminder extends Reminder {
context.startService(intent); context.startService(intent);
// TODO [greyson] Navigation // TODO [greyson] Navigation
Intent nextIntent = new Intent(context, MainActivity.class); Intent nextIntent = MainActivity.clearTop(context);
Intent activityIntent = new Intent(context, DatabaseMigrationActivity.class); Intent activityIntent = new Intent(context, DatabaseMigrationActivity.class);
activityIntent.putExtra("next_intent", nextIntent); activityIntent.putExtra("next_intent", nextIntent);
context.startActivity(activityIntent); context.startActivity(activityIntent);

View File

@@ -409,7 +409,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
if (ConversationIntents.isInvalid(getIntent())) { if (ConversationIntents.isInvalid(getIntent())) {
Log.w(TAG, "[onCreate] Missing recipientId!"); Log.w(TAG, "[onCreate] Missing recipientId!");
// TODO [greyson] Navigation // TODO [greyson] Navigation
startActivity(new Intent(this, MainActivity.class)); startActivity(MainActivity.clearTop(this));
finish(); finish();
return; return;
} }
@@ -488,7 +488,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
if (ConversationIntents.isInvalid(intent)) { if (ConversationIntents.isInvalid(intent)) {
Log.w(TAG, "[onNewIntent] Missing recipientId!"); Log.w(TAG, "[onNewIntent] Missing recipientId!");
// TODO [greyson] Navigation // TODO [greyson] Navigation
startActivity(new Intent(this, MainActivity.class)); startActivity(MainActivity.clearTop(this));
finish(); finish();
return; return;
} }
@@ -1982,7 +1982,7 @@ public class ConversationActivity extends PassphraseRequiredActivity
if (isInBubble()) { if (isInBubble()) {
supportActionBar.setHomeAsUpIndicator(ContextCompat.getDrawable(this, R.drawable.ic_notification)); supportActionBar.setHomeAsUpIndicator(ContextCompat.getDrawable(this, R.drawable.ic_notification));
toolbar.setNavigationOnClickListener(unused -> startActivity(new Intent(Intent.ACTION_MAIN).setClass(this, MainActivity.class))); toolbar.setNavigationOnClickListener(unused -> startActivity(MainActivity.clearTop(this)));
} }
} }

View File

@@ -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);
}
}

View File

@@ -112,7 +112,7 @@ public final class ChooseNewAdminActivity extends PassphraseRequiredActivity {
if (updateResult.isSuccess()) { if (updateResult.isSuccess()) {
String title = Recipient.externalGroupExact(this, groupId).getDisplayName(this); String title = Recipient.externalGroupExact(this, groupId).getDisplayName(this);
Toast.makeText(this, getString(R.string.ChooseNewAdminActivity_you_left, title), Toast.LENGTH_LONG).show(); 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(); finish();
} else { } else {
done.setClickable(true); done.setClickable(true);

View File

@@ -264,7 +264,7 @@ public class ManageGroupFragment extends LoggingFragment {
}); });
leaveGroup.setVisibility(groupId.isPush() ? View.VISIBLE : View.GONE); 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)); viewModel.getDisappearingMessageTimer().observe(getViewLifecycleOwner(), string -> disappearingMessages.setText(string));

View File

@@ -146,7 +146,7 @@ public final class PushDecryptMessageJob extends BaseJob {
.setCategory(NotificationCompat.CATEGORY_MESSAGE) .setCategory(NotificationCompat.CATEGORY_MESSAGE)
.setContentTitle(context.getString(R.string.PushDecryptJob_new_locked_message)) .setContentTitle(context.getString(R.string.PushDecryptJob_new_locked_message))
.setContentText(context.getString(R.string.PushDecryptJob_unlock_to_view_pending_messages)) .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) .setDefaults(NotificationCompat.DEFAULT_SOUND | NotificationCompat.DEFAULT_VIBRATE)
.build()); .build());

View File

@@ -30,7 +30,7 @@ public class MultipleRecipientNotificationBuilder extends AbstractNotificationBu
setSmallIcon(R.drawable.ic_notification); setSmallIcon(R.drawable.ic_notification);
setContentTitle(context.getString(R.string.app_name)); setContentTitle(context.getString(R.string.app_name));
// TODO [greyson] Navigation // 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); setCategory(NotificationCompat.CATEGORY_MESSAGE);
setGroupSummary(true); setGroupSummary(true);

View File

@@ -18,9 +18,6 @@ public class PendingMessageNotificationBuilder extends AbstractNotificationBuild
public PendingMessageNotificationBuilder(Context context, NotificationPrivacyPreference privacy) { public PendingMessageNotificationBuilder(Context context, NotificationPrivacyPreference privacy) {
super(context, privacy); super(context, privacy);
// TODO [greyson] Navigation
Intent intent = new Intent(context, MainActivity.class);
setSmallIcon(R.drawable.ic_notification); setSmallIcon(R.drawable.ic_notification);
setColor(context.getResources().getColor(R.color.core_ultramarine)); setColor(context.getResources().getColor(R.color.core_ultramarine));
setCategory(NotificationCompat.CATEGORY_MESSAGE); 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)); 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)); 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); setAutoCancel(true);
setAlarms(null, RecipientDatabase.VibrateState.DEFAULT); setAlarms(null, RecipientDatabase.VibrateState.DEFAULT);

View File

@@ -29,7 +29,7 @@ public final class PinRestoreActivity extends AppCompatActivity {
} }
void navigateToPinCreation() { void navigateToPinCreation() {
final Intent main = new Intent(this, MainActivity.class); final Intent main = MainActivity.clearTop(this);
final Intent createPin = CreateKbsPinActivity.getIntentForPinCreate(this); final Intent createPin = CreateKbsPinActivity.getIntentForPinCreate(this);
final Intent chained = PassphraseRequiredActivity.chainIntent(createPin, main); final Intent chained = PassphraseRequiredActivity.chainIntent(createPin, main);

View File

@@ -231,7 +231,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
Activity activity = requireActivity(); Activity activity = requireActivity();
if (Recipient.self().getProfileName().isEmpty() || !AvatarHelper.hasAvatar(activity, Recipient.self().getId())) { 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); final Intent profile = EditProfileActivity.getIntentForUserProfile(activity);
profile.putExtra("next_intent", main); profile.putExtra("next_intent", main);
@@ -239,7 +239,7 @@ public class PinRestoreEntryFragment extends LoggingFragment {
} else { } else {
RegistrationUtil.maybeMarkRegistrationComplete(requireContext()); RegistrationUtil.maybeMarkRegistrationComplete(requireContext());
ApplicationDependencies.getJobManager().add(new ProfileUploadJob()); ApplicationDependencies.getJobManager().add(new ProfileUploadJob());
startActivity(new Intent(activity, MainActivity.class)); startActivity(MainActivity.clearTop(activity));
} }
activity.finish(); activity.finish();

View File

@@ -35,7 +35,7 @@ public final class RegistrationCompleteFragment extends BaseRegistrationFragment
if (SignalStore.storageServiceValues().needsAccountRestore()) { if (SignalStore.storageServiceValues().needsAccountRestore()) {
activity.startActivity(new Intent(activity, PinRestoreActivity.class)); activity.startActivity(new Intent(activity, PinRestoreActivity.class));
} else if (!isReregister()) { } else if (!isReregister()) {
final Intent main = new Intent(activity, MainActivity.class); final Intent main = MainActivity.clearTop(activity);
final Intent profile = EditProfileActivity.getIntentForUserProfile(activity); final Intent profile = EditProfileActivity.getIntentForUserProfile(activity);
Intent kbs = CreateKbsPinActivity.getIntentForPinCreate(requireContext()); Intent kbs = CreateKbsPinActivity.getIntentForPinCreate(requireContext());

View File

@@ -136,7 +136,7 @@ public class ApplicationMigrationService extends Service
builder.setOngoing(true); builder.setOngoing(true);
builder.setProgress(100, 0, false); builder.setProgress(100, 0, false);
// TODO [greyson] Navigation // 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); stopForeground(true);
startForeground(NotificationIds.APPLICATION_MIGRATION, builder.build()); 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.setContentTitle(context.getString(R.string.ApplicationMigrationService_import_complete));
builder.setContentText(context.getString(R.string.ApplicationMigrationService_system_database_import_is_complete)); builder.setContentText(context.getString(R.string.ApplicationMigrationService_system_database_import_is_complete));
// TODO [greyson] Navigation // 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.setWhen(System.currentTimeMillis());
builder.setDefaults(Notification.DEFAULT_VIBRATE); builder.setDefaults(Notification.DEFAULT_VIBRATE);
builder.setAutoCancel(true); builder.setAutoCancel(true);

View File

@@ -108,7 +108,7 @@ public final class GenericForegroundService extends Service {
.setSmallIcon(active.iconRes) .setSmallIcon(active.iconRes)
.setContentTitle(active.title) .setContentTitle(active.title)
.setProgress(active.progressMax, active.progress, active.indeterminate) .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()); .build());
} }

View File

@@ -287,9 +287,7 @@ public class KeyCachingService extends Service {
private PendingIntent buildLaunchIntent() { private PendingIntent buildLaunchIntent() {
// TODO [greyson] Navigation // TODO [greyson] Navigation
Intent intent = new Intent(this, MainActivity.class); return PendingIntent.getActivity(getApplicationContext(), 0, MainActivity.clearTop(this), 0);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
return PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
} }
private static PendingIntent buildExpirationPendingIntent(@NonNull Context context) { private static PendingIntent buildExpirationPendingIntent(@NonNull Context context) {

View File

@@ -2,6 +2,15 @@
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<style name="Signal.Transparent" parent="Theme.AppCompat">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:backgroundDimEnabled">false</item>
</style>
<style name="Theme.Signal.DayNight.NoActionBar" parent="TextSecure.LightNoActionBar"> <style name="Theme.Signal.DayNight.NoActionBar" parent="TextSecure.LightNoActionBar">
</style> </style>