Index: chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java |
index 983145b737f6b0f70f0c9a98c415438ba83d1cc8..484cd251b749a1aac9c672af750bc3573b7681fd 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/multiwindow/MultiWindowUtils.java |
@@ -23,6 +23,7 @@ import org.chromium.chrome.browser.ChromeTabbedActivity; |
import org.chromium.chrome.browser.ChromeTabbedActivity2; |
import org.chromium.chrome.browser.IntentHandler; |
import org.chromium.chrome.browser.document.ChromeLauncherActivity; |
+import org.chromium.chrome.browser.tab.Tab; |
import org.chromium.chrome.browser.util.IntentUtils; |
import java.lang.ref.WeakReference; |
@@ -44,8 +45,7 @@ public class MultiWindowUtils implements ActivityStateListener { |
// against N. |
public static final int FLAG_ACTIVITY_LAUNCH_ADJACENT = 0x00001000; |
- private static AtomicReference<MultiWindowUtils> sInstance = |
- new AtomicReference<MultiWindowUtils>(); |
+ private static AtomicReference<MultiWindowUtils> sInstance = new AtomicReference<>(); |
// Used to keep track of whether ChromeTabbedActivity2 is running. A tri-state Boolean is |
// used in case both activities die in the background and MultiWindowUtils is recreated. |
@@ -147,8 +147,7 @@ public class MultiWindowUtils implements ActivityStateListener { |
@Override |
public void onActivityStateChange(Activity activity, int newState) { |
if (newState == ActivityState.RESUMED && activity instanceof ChromeTabbedActivity) { |
- mLastResumedTabbedActivity = |
- new WeakReference<ChromeTabbedActivity>((ChromeTabbedActivity) activity); |
+ mLastResumedTabbedActivity = new WeakReference<>((ChromeTabbedActivity) activity); |
} |
} |
@@ -275,6 +274,34 @@ public class MultiWindowUtils implements ActivityStateListener { |
return activityState == ActivityState.RESUMED || activityState == ActivityState.PAUSED; |
} |
+ /** |
+ * Moves a Tab to the other MultiWindow window. |
+ * @param activity An Activity to use for context. |
+ * @param tab The Tab to move. |
+ */ |
+ public static void moveTabToOtherWindow(Activity activity, Tab tab) { |
+ moveTabToActivity( |
+ activity, tab, getInstance().getOpenInOtherWindowActivity(activity), false); |
+ } |
+ |
+ /** |
+ * Moves a Tab to a specific Activity. |
+ * @param activity An Activity to use for context. |
+ * @param tab The Tab to move. |
+ * @param targetActivity The Activity to move the Tab to. |
Bernhard Bauer
2017/04/07 20:08:59
It's the Activity Class, no? You could also wrap t
PEConn
2017/04/11 00:54:46
Done.
|
+ * @param pendingFullscreen The fullscreen mode for the Tab to change to after being moved. |
+ * Null if no change is required. |
+ */ |
+ public static void moveTabToActivity(Activity activity, Tab tab, |
+ Class<? extends Activity> targetActivity, @Nullable Boolean pendingFullscreen) { |
+ if (targetActivity == null) return; |
+ |
+ Intent intent = new Intent(activity, targetActivity); |
+ MultiWindowUtils.setOpenInOtherWindowIntentExtras(intent, activity, targetActivity); |
+ MultiWindowUtils.onMultiInstanceModeStarted(); |
+ tab.detachAndStartReparenting(intent, null, null, pendingFullscreen); |
+ } |
+ |
@VisibleForTesting |
public Boolean getTabbedActivity2TaskRunning() { |
return mTabbedActivity2TaskRunning; |