From f770234b3e7a206e35d96864e483d65785c8b556 Mon Sep 17 00:00:00 2001 From: Serhii Selyvon Date: Mon, 9 Jun 2025 10:04:24 +0000 Subject: [PATCH] Add package name constructor to TwaLauncher --- .../trusted/LauncherActivity.java | 3 +- .../trusted/SessionStore.java | 34 ++++++++++++++ .../trusted/TwaLauncher.java | 46 ++++++++----------- 3 files changed, 56 insertions(+), 27 deletions(-) create mode 100644 androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/SessionStore.java diff --git a/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/LauncherActivity.java b/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/LauncherActivity.java index 8aa9aba7..f55fa4d6 100644 --- a/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/LauncherActivity.java +++ b/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/LauncherActivity.java @@ -268,7 +268,8 @@ protected CustomTabsCallback getCustomTabsCallback() { } protected TwaLauncher createTwaLauncher() { - return new TwaLauncher(this, getTaskId()); + return new TwaLauncher(this, null, SessionStore.makeSessionId(getTaskId()), + new SharedPreferencesTokenStore(this)); } private boolean splashScreenNeeded() { diff --git a/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/SessionStore.java b/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/SessionStore.java new file mode 100644 index 00000000..461a15eb --- /dev/null +++ b/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/SessionStore.java @@ -0,0 +1,34 @@ +package com.google.androidbrowserhelper.trusted; + +import androidx.annotation.Nullable; + +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +/** + * Manages and persists session IDs for given task IDs. + */ +public class SessionStore { + private static final Map mTaskIdToSessionId = new HashMap<>(); + + /** + * Gets or creates a session ID for a given task ID. If the task ID is null, + * returns {Integer.MAX_VALUE}. + * + * @param taskId The unique ID for the task, may be null. + * @return The corresponding session ID, or {Integer.MAX_VALUE} if taskId is null. + */ + public static Integer makeSessionId(@Nullable Integer taskId) { + if(taskId == null) return Integer.MAX_VALUE; + + Integer sessionId = mTaskIdToSessionId.get(taskId); + if(sessionId == null) { + Random random = new Random(); + sessionId = random.nextInt(Integer.MAX_VALUE); + mTaskIdToSessionId.put(taskId, sessionId); + } + + return sessionId; + } +} diff --git a/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/TwaLauncher.java b/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/TwaLauncher.java index e5e97ab3..7635d9b3 100644 --- a/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/TwaLauncher.java +++ b/androidbrowserhelper/src/main/java/com/google/androidbrowserhelper/trusted/TwaLauncher.java @@ -37,10 +37,6 @@ import com.google.androidbrowserhelper.BuildConfig; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - /** * Encapsulates the steps necessary to launch a Trusted Web Activity, such as establishing a * connection with {@link CustomTabsService}. @@ -48,7 +44,7 @@ public class TwaLauncher { private static final String TAG = "TwaLauncher"; - private static final Map mTaskIdToSessionId = new HashMap<>(); + private static final int DEFAULT_SESSION_ID = 96375; private static final String EXTRA_STARTUP_UPTIME_MILLIS = "org.chromium.chrome.browser.customtabs.trusted.STARTUP_UPTIME_MILLIS"; @@ -118,23 +114,34 @@ void launch(Context context, * If no browser supports TWA, will launch a usual Custom Tab (see {@link TwaProviderPicker}. */ public TwaLauncher(Context context) { - this(context, null); + this(context, (String) null); + } + + /** + * Same as above, but also allows to specify a browser to launch. If specified, it is assumed to + * support TWAs. + */ + public TwaLauncher(Context context, @Nullable String providerPackage) { + this(context, providerPackage, DEFAULT_SESSION_ID, + new SharedPreferencesTokenStore(context)); } /** - * Same as above, but also allows to specify a task id to distinguish several sessions running - * for the same TWA app. + * @deprecated This method is no longer recommended for use since TwaLauncher is rolling back to + * sessionId instead of taskId. */ + @Deprecated(forRemoval = true) public TwaLauncher(Context context, @Nullable Integer taskId) { this(context, null, taskId); } /** - * Same as above, but also allows to specify a browser to launch. If specified, it is assumed to - * support TWAs. + * @deprecated This method is no longer recommended for use since TwaLauncher is rolling back to + * sessionId instead of taskId. */ + @Deprecated(forRemoval = true) public TwaLauncher(Context context, @Nullable String providerPackage, @Nullable Integer taskId) { - this(context, providerPackage, taskId, + this(context, providerPackage, SessionStore.makeSessionId(taskId), new SharedPreferencesTokenStore(context)); } @@ -142,10 +149,10 @@ public TwaLauncher(Context context, @Nullable String providerPackage, @Nullable * Same as above, but also accepts a session id. This allows to launch multiple TWAs in the same * task. */ - public TwaLauncher(Context context, @Nullable String providerPackage, @Nullable Integer taskId, + public TwaLauncher(Context context, @Nullable String providerPackage, @Nullable Integer sessionId, TokenStore tokenStore) { mContext = context; - mSessionId = makeSessionId(taskId); + mSessionId = sessionId; mTokenStore = tokenStore; if (providerPackage == null) { TwaProviderPicker.Action action = @@ -158,19 +165,6 @@ public TwaLauncher(Context context, @Nullable String providerPackage, @Nullable } } - private static Integer makeSessionId(@Nullable Integer taskId) { - if(taskId == null) return Integer.MAX_VALUE; - - Integer sessionId = mTaskIdToSessionId.get(taskId); - if(sessionId == null) { - Random random = new Random(); - sessionId = random.nextInt(Integer.MAX_VALUE); - mTaskIdToSessionId.put(taskId, sessionId); - } - - return sessionId; - } - /** * Opens the specified url in a TWA. * When TWA is already running in the current task, the url will be opened in existing TWA,