summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoey Grover <joeygrover@gmail.com>2020-09-30 11:23:29 -0400
committerJoey Grover <joeygrover@gmail.com>2020-09-30 11:23:29 -0400
commitf8c61b9ea79c97432993ed8cddbabd97ee1832f5 (patch)
treea82603a7cf10daf493e8329fff7b3229fa66f773
parent0624a2af0d63be6f5d448899c6e06396c9d1c484 (diff)
downloadsdl_android-f8c61b9ea79c97432993ed8cddbabd97ee1832f5.tar.gz
Prevent multiple startActivity calls for same intent
-rw-r--r--android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java68
1 files changed, 41 insertions, 27 deletions
diff --git a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java
index 105396fa2..d96ba00d0 100644
--- a/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java
+++ b/android/sdl_android/src/main/java/com/smartdevicelink/managers/lockscreen/LockScreenManager.java
@@ -69,6 +69,7 @@ import java.lang.ref.WeakReference;
public class LockScreenManager extends BaseSubManager {
private static final String TAG = "LockScreenManager";
+ private final Object LOCKSCREEN_LAUNCH_LOCK = new Object();
private final WeakReference<Context> context;
HMILevel hmiLevel;
private OnRPCNotificationListener systemRequestListener, ddListener, hmiListener;
@@ -89,6 +90,7 @@ public class LockScreenManager extends BaseSubManager {
private String mLockscreenWarningMsg;
private BroadcastReceiver mLockscreenDismissedReceiver;
private final LockScreenDeviceIconManager mLockScreenDeviceIconManager;
+ private String lastIntentUsed;
public LockScreenManager(LockScreenConfig lockScreenConfig, Context context, ISdl internalInterface) {
@@ -258,6 +260,7 @@ public class LockScreenManager extends BaseSubManager {
@androidx.lifecycle.OnLifecycleEvent(androidx.lifecycle.Lifecycle.Event.ON_STOP)
public void onMoveToBackground() {
isApplicationForegrounded = false;
+ lastIntentUsed = null;
}
};
@@ -273,6 +276,7 @@ public class LockScreenManager extends BaseSubManager {
public void onReceive(Context context, Intent intent) {
if (SDLLockScreenActivity.KEY_LOCKSCREEN_DISMISSED.equals(intent.getAction())) {
mLockScreenHasBeenDismissed = true;
+ lastIntentUsed = null;
}
}
};
@@ -290,34 +294,43 @@ public class LockScreenManager extends BaseSubManager {
* X. If the status is set to OFF, Send broadcast to close lock screen if it is open
*/
private void launchLockScreenActivity() {
- // If the user has dismissed the lockscreen for this run or has disabled it, do not show it
- if (mLockScreenHasBeenDismissed || displayMode == LockScreenConfig.DISPLAY_MODE_NEVER) {
- return;
- }
- // intent to open SDLLockScreenActivity
- // pass in icon, background color, and custom view
- if (lockScreenEnabled && isApplicationForegrounded && context.get() != null) {
- if (mIsLockscreenDismissible && !lockscreenDismissReceiverRegistered) {
- context.get().registerReceiver(mLockscreenDismissedReceiver, new IntentFilter(SDLLockScreenActivity.KEY_LOCKSCREEN_DISMISSED));
- lockscreenDismissReceiverRegistered = true;
-
+ synchronized (LOCKSCREEN_LAUNCH_LOCK) {
+ // If the user has dismissed the lockscreen for this run or has disabled it, do not show it
+ if (mLockScreenHasBeenDismissed || displayMode == LockScreenConfig.DISPLAY_MODE_NEVER) {
+ return;
}
- LockScreenStatus status = getLockScreenStatus();
- if (status == LockScreenStatus.REQUIRED || displayMode == LockScreenConfig.DISPLAY_MODE_ALWAYS || (status == LockScreenStatus.OPTIONAL && displayMode == LockScreenConfig.DISPLAY_MODE_OPTIONAL_OR_REQUIRED)) {
- Intent showLockScreenIntent = new Intent(context.get(), SDLLockScreenActivity.class);
- showLockScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-
- // Extra parameters for customization of the lock screen view
- showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_ICON_EXTRA, lockScreenIcon);
- showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_COLOR_EXTRA, lockScreenColor);
- showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_CUSTOM_VIEW_EXTRA, customView);
- showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_DEVICE_LOGO_EXTRA, deviceLogoEnabled);
- showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_DEVICE_LOGO_BITMAP, deviceLogo);
- showLockScreenIntent.putExtra(SDLLockScreenActivity.KEY_LOCKSCREEN_DISMISSIBLE, mIsLockscreenDismissible);
- showLockScreenIntent.putExtra(SDLLockScreenActivity.KEY_LOCKSCREEN_WARNING_MSG, mLockscreenWarningMsg);
- context.get().startActivity(showLockScreenIntent);
- } else if (status == LockScreenStatus.OFF) {
- closeLockScreenActivity();
+ // intent to open SDLLockScreenActivity
+ // pass in icon, background color, and custom view
+ if (lockScreenEnabled && isApplicationForegrounded && context.get() != null) {
+ if (mIsLockscreenDismissible && !lockscreenDismissReceiverRegistered) {
+ context.get().registerReceiver(mLockscreenDismissedReceiver, new IntentFilter(SDLLockScreenActivity.KEY_LOCKSCREEN_DISMISSED));
+ lockscreenDismissReceiverRegistered = true;
+
+ }
+ LockScreenStatus status = getLockScreenStatus();
+ if (status == LockScreenStatus.REQUIRED || displayMode == LockScreenConfig.DISPLAY_MODE_ALWAYS || (status == LockScreenStatus.OPTIONAL && displayMode == LockScreenConfig.DISPLAY_MODE_OPTIONAL_OR_REQUIRED)) {
+ Intent showLockScreenIntent = new Intent(context.get(), SDLLockScreenActivity.class);
+ showLockScreenIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+
+ // Extra parameters for customization of the lock screen view
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_ICON_EXTRA, lockScreenIcon);
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_COLOR_EXTRA, lockScreenColor);
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_CUSTOM_VIEW_EXTRA, customView);
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_DEVICE_LOGO_EXTRA, deviceLogoEnabled);
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.LOCKSCREEN_DEVICE_LOGO_BITMAP, deviceLogo);
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.KEY_LOCKSCREEN_DISMISSIBLE, mIsLockscreenDismissible);
+ showLockScreenIntent.putExtra(SDLLockScreenActivity.KEY_LOCKSCREEN_WARNING_MSG, mLockscreenWarningMsg);
+
+ if (lastIntentUsed != null && lastIntentUsed.equals(showLockScreenIntent.toUri(0))) {
+ DebugTool.logInfo(TAG, "Not restarting lockscreen with same intent");
+ return;
+ } else {
+ context.get().startActivity(showLockScreenIntent);
+ lastIntentUsed = showLockScreenIntent.toUri(0);
+ }
+ } else if (status == LockScreenStatus.OFF) {
+ closeLockScreenActivity();
+ }
}
}
}
@@ -334,6 +347,7 @@ public class LockScreenManager extends BaseSubManager {
context.get().sendBroadcast(new Intent(SDLLockScreenActivity.CLOSE_LOCK_SCREEN_ACTION));
}
}
+ lastIntentUsed = null;
}
////