Commit 55667fde authored by Evan Stade's avatar Evan Stade Committed by Commit Bot

WebLayer: move bring-tab-to-front intent to IntentUtils.java

In addition to MediaStream, it's needed by MediaSession. Chrome's
equivalent, ChromeIntentUtil#bringTabToFront, is used by half a dozen
clients, so I suspect we'll have additional clients in WebLayer as
well. It seems best to place it in a generic intent utility file.

Bug: 1066263
Change-Id: I8765f21628ae48a4bdf55ac23eb788abc6f5365e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2220554Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Evan Stade <estade@chromium.org>
Cr-Commit-Position: refs/heads/master@{#773514}
parent 507c2f17
...@@ -79,6 +79,7 @@ android_library("java") { ...@@ -79,6 +79,7 @@ android_library("java") {
"org/chromium/weblayer_private/FragmentAndroidPermissionDelegate.java", "org/chromium/weblayer_private/FragmentAndroidPermissionDelegate.java",
"org/chromium/weblayer_private/FragmentWindowAndroid.java", "org/chromium/weblayer_private/FragmentWindowAndroid.java",
"org/chromium/weblayer_private/FullscreenCallbackProxy.java", "org/chromium/weblayer_private/FullscreenCallbackProxy.java",
"org/chromium/weblayer_private/IntentUtils.java",
"org/chromium/weblayer_private/InterceptNavigationDelegateClientImpl.java", "org/chromium/weblayer_private/InterceptNavigationDelegateClientImpl.java",
"org/chromium/weblayer_private/LocaleChangedBroadcastReceiver.java", "org/chromium/weblayer_private/LocaleChangedBroadcastReceiver.java",
"org/chromium/weblayer_private/MediaStreamManager.java", "org/chromium/weblayer_private/MediaStreamManager.java",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.weblayer_private;
import android.content.Intent;
import android.os.RemoteException;
import android.util.AndroidRuntimeException;
/** A utility class for creating and handling common intents. */
public class IntentUtils {
private static final String sExtraTabId = "TAB_ID";
private static final String sActivateTabAction =
"org.chromium.weblayer.intent_utils.ACTIVATE_TAB";
/**
* Handles an intent generated by this class.
* @return true if the intent was handled, or false if the intent wasn't generated by this
* class.
*/
public static boolean handleIntent(Intent intent) {
if (!intent.getAction().equals(sActivateTabAction)) return false;
int tabId = intent.getIntExtra(sExtraTabId, -1);
TabImpl tab = TabImpl.getTabById(tabId);
if (tab == null) return true;
try {
tab.getClient().bringTabToFront();
} catch (RemoteException e) {
throw new AndroidRuntimeException(e);
}
return true;
}
/**
* Creates an intent to bring a tab to the foreground.
* This intent should also bring the app to the foreground.
* @param tabId the identifier for the tab.
*/
public static Intent createBringTabToFrontIntent(int tabId) {
Intent intent = WebLayerImpl.createIntent();
intent.putExtra(sExtraTabId, tabId);
intent.setAction(sActivateTabAction);
return intent;
}
};
...@@ -65,6 +65,7 @@ public class MediaStreamManager { ...@@ -65,6 +65,7 @@ public class MediaStreamManager {
/** /**
* @return a string that prefixes all intents that can be handled by {@link forwardIntent}. * @return a string that prefixes all intents that can be handled by {@link forwardIntent}.
* @Deprecated in M85+, this class does not handle intents. Remove in M88.
*/ */
public static String getIntentPrefix() { public static String getIntentPrefix() {
return WEBRTC_PREFIX; return WEBRTC_PREFIX;
...@@ -73,6 +74,7 @@ public class MediaStreamManager { ...@@ -73,6 +74,7 @@ public class MediaStreamManager {
/** /**
* Handles an intent coming from a media streaming notification. * Handles an intent coming from a media streaming notification.
* @param intent the intent which was previously posted via {@link update}. * @param intent the intent which was previously posted via {@link update}.
* @Deprecated in M85+, this class does not handle intents. Remove in M88.
*/ */
public static void forwardIntent(Intent intent) { public static void forwardIntent(Intent intent) {
assert intent.getAction().equals(ACTIVATE_TAB_INTENT); assert intent.getAction().equals(ACTIVATE_TAB_INTENT);
...@@ -208,9 +210,14 @@ public class MediaStreamManager { ...@@ -208,9 +210,14 @@ public class MediaStreamManager {
} }
Context appContext = ContextUtils.getApplicationContext(); Context appContext = ContextUtils.getApplicationContext();
Intent intent = WebLayerImpl.createIntent(); Intent intent = null;
intent.putExtra(EXTRA_TAB_ID, mNotificationId); if (WebLayerFactoryImpl.getClientMajorVersion() >= 85) {
intent.setAction(ACTIVATE_TAB_INTENT); intent = IntentUtils.createBringTabToFrontIntent(mNotificationId);
} else {
intent = WebLayerImpl.createIntent();
intent.putExtra(EXTRA_TAB_ID, mNotificationId);
intent.setAction(ACTIVATE_TAB_INTENT);
}
PendingIntentProvider contentIntent = PendingIntentProvider contentIntent =
PendingIntentProvider.getBroadcast(appContext, mNotificationId, intent, 0); PendingIntentProvider.getBroadcast(appContext, mNotificationId, intent, 0);
......
...@@ -321,6 +321,9 @@ public final class WebLayerImpl extends IWebLayer.Stub { ...@@ -321,6 +321,9 @@ public final class WebLayerImpl extends IWebLayer.Stub {
public void onReceivedBroadcast(IObjectWrapper appContextWrapper, Intent intent) { public void onReceivedBroadcast(IObjectWrapper appContextWrapper, Intent intent) {
StrictModeWorkaround.apply(); StrictModeWorkaround.apply();
Context context = ObjectWrapper.unwrap(appContextWrapper, Context.class); Context context = ObjectWrapper.unwrap(appContextWrapper, Context.class);
if (IntentUtils.handleIntent(intent)) return;
if (intent.getAction().startsWith(DownloadImpl.getIntentPrefix())) { if (intent.getAction().startsWith(DownloadImpl.getIntentPrefix())) {
DownloadImpl.forwardIntent(context, intent, mProfileManager); DownloadImpl.forwardIntent(context, intent, mProfileManager);
} else if (intent.getAction().startsWith(MediaStreamManager.getIntentPrefix())) { } else if (intent.getAction().startsWith(MediaStreamManager.getIntentPrefix())) {
......
...@@ -68,7 +68,10 @@ ...@@ -68,7 +68,10 @@
<action android:name="org.chromium.weblayer.downloads.PAUSE"/> <action android:name="org.chromium.weblayer.downloads.PAUSE"/>
<action android:name="org.chromium.weblayer.downloads.RESUME"/> <action android:name="org.chromium.weblayer.downloads.RESUME"/>
<action android:name="org.chromium.weblayer.downloads.CANCEL"/> <action android:name="org.chromium.weblayer.downloads.CANCEL"/>
<!-- this needs to be in sync with IntentUtils.java-->
<action android:name="org.chromium.weblayer.intent_utils.ACTIVATE_TAB"/>
<!-- this needs to be in sync with MediaStreamManager.java--> <!-- this needs to be in sync with MediaStreamManager.java-->
<!-- TODO(estade): deprecated, remove in M88. -->
<action android:name="org.chromium.weblayer.webrtc.ACTIVATE_TAB"/> <action android:name="org.chromium.weblayer.webrtc.ACTIVATE_TAB"/>
</intent-filter> </intent-filter>
</receiver> </receiver>
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
package org.chromium.weblayer.shell; package org.chromium.weblayer.shell;
import android.app.Activity;
import android.content.ClipData; import android.content.ClipData;
import android.content.ClipboardManager; import android.content.ClipboardManager;
import android.content.Context; import android.content.Context;
...@@ -385,10 +386,10 @@ public class WebLayerShellActivity extends FragmentActivity { ...@@ -385,10 +386,10 @@ public class WebLayerShellActivity extends FragmentActivity {
public void bringTabToFront() { public void bringTabToFront() {
tab.getBrowser().setActiveTab(tab); tab.getBrowser().setActiveTab(tab);
Context context = WebLayerShellActivity.this; Activity activity = WebLayerShellActivity.this;
Intent intent = new Intent(context, WebLayerShellActivity.class); Intent intent = new Intent(activity, WebLayerShellActivity.class);
intent.setAction(Intent.ACTION_MAIN); intent.setAction(Intent.ACTION_MAIN);
context.getApplicationContext().startActivity(intent); activity.startActivity(intent);
} }
}); });
tab.getNavigationController().registerNavigationCallback(new NavigationCallback() { tab.getNavigationController().registerNavigationCallback(new NavigationCallback() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment