Index: chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/WebappManagedActivity.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/WebappManagedActivity.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/WebappManagedActivity.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..13798645afd2f6e947b93ad1d0c87495ef619cf3 |
--- /dev/null |
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/webapps/WebappManagedActivity.java |
@@ -0,0 +1,56 @@ |
+// Copyright 2015 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.chrome.browser.webapps; |
+ |
+import java.io.File; |
+ |
+/** |
+ * Type of WebappActivity that has the ability to swap out the webapp it is currently showing for a |
+ * new one. This is necessary on Android versions older than L because the framework had no way of |
+ * allowing multiple instances of an Activity to be launched and show up as different tasks. |
+ * Anything extending this class must be named WebappActivity0, WebappActivity1, etc. |
+ */ |
+public abstract class WebappManagedActivity extends WebappActivity { |
+ private final int mActivityIndex; |
+ |
+ public WebappManagedActivity() { |
+ mActivityIndex = getActivityIndex(); |
+ } |
+ |
+ @Override |
+ public void onStartWithNative() { |
+ super.onStartWithNative(); |
+ |
+ if (!isFinishing()) { |
+ markActivityUsed(); |
+ } |
+ } |
+ |
+ @Override |
+ protected File getActivityDirectory() { |
+ return WebappDirectoryManager.getWebappDirectory(String.valueOf(mActivityIndex)); |
+ } |
+ |
+ /** |
+ * Marks that this WebappActivity is recently used to prevent other webapps from using it. |
+ */ |
+ private void markActivityUsed() { |
+ ActivityAssigner.instance(this).markActivityUsed(mActivityIndex, getWebappInfo().id()); |
+ } |
+ |
+ /** |
+ * Pulls out the index of the WebappActivity subclass that is being used. |
+ * e.g. WebappActivity0.getActivityIndex() will return 0. |
+ * @return The index corresponding to this WebappActivity. |
+ */ |
+ private int getActivityIndex() { |
+ // Cull out the activity index from the class name. |
+ String baseClassName = WebappActivity.class.getSimpleName(); |
+ String className = this.getClass().getSimpleName(); |
+ assert className.matches("^" + baseClassName + "[0-9]+$"); |
+ String indexString = className.substring(baseClassName.length()); |
+ return Integer.parseInt(indexString); |
+ } |
+} |