| // 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; |
| |
| /** |
| * 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 String getId() { |
| return String.valueOf(mActivityIndex); |
| } |
| |
| /** |
| * Marks that this WebappActivity is recently used to prevent other webapps from using it. |
| */ |
| private void markActivityUsed() { |
| ActivityAssigner.instance(getWebappInfo().id()).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); |
| } |
| } |