Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(712)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/document/DocumentUtils.java

Issue 1044513002: Add method for killing Tasks with the same Tab ID (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/android/java/src/org/chromium/chrome/browser/document/DocumentUtils.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentUtils.java
index e62d51490dd5e1ea30b7aabb3824d0a17bad9b90..8a32d785404ee2906e9ffe0ff364d1b0a9ce1e65 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/document/DocumentUtils.java
@@ -22,6 +22,8 @@ import android.util.Log;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.ApplicationStatus;
+import org.chromium.chrome.browser.Tab;
+import org.chromium.chrome.browser.tabmodel.document.ActivityDelegate;
import java.util.ArrayList;
import java.util.List;
@@ -50,6 +52,38 @@ public class DocumentUtils {
}
/**
+ * Finishes tasks other than the one with the given task ID that were started with the given
+ * tabId, leaving a unique task to own a Tab with that particular ID.
+ * @param tabId ID of the tab to remove duplicates for.
+ * @param canonicalTaskId ID of the task will be the only one left with the ID.
+ * @return Intent of one of the tasks that were finished.
+ */
+ public static Intent finishOtherTasksWithTabID(int tabId, int canonicalTaskId) {
+ if (tabId == Tab.INVALID_TAB_ID || Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
+ return null;
+ }
+
+ Context context = ApplicationStatus.getApplicationContext();
+
+ ActivityManager manager =
+ (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+ List<ActivityManager.AppTask> tasksToFinish = new ArrayList<ActivityManager.AppTask>();
+ for (ActivityManager.AppTask task : manager.getAppTasks()) {
+ RecentTaskInfo taskInfo = getTaskInfoFromTask(task);
+ if (taskInfo == null) continue;
+ int taskId = taskInfo.id;
+
+ Intent baseIntent = taskInfo.baseIntent;
+ int otherTabId = ActivityDelegate.getTabIdFromIntent(baseIntent);
+
+ if (otherTabId == tabId && (taskId == -1 || taskId != canonicalTaskId)) {
+ tasksToFinish.add(task);
+ }
+ }
+ return finishAndRemoveTasks(tasksToFinish);
+ }
+
+ /**
* Finishes tasks other than the one with the given ID that were started with the given data
* in the Intent, removing those tasks from Recents and leaving a unique task with the data.
* @param data Passed in as part of the Intent's data when starting the Activity.
@@ -73,16 +107,19 @@ public class DocumentUtils {
Intent baseIntent = taskInfo.baseIntent;
String taskData = baseIntent == null ? null : taskInfo.baseIntent.getDataString();
- if (!TextUtils.equals(dataString, taskData)) continue;
- if (taskId == -1 || taskId != canonicalTaskId) {
+ if (TextUtils.equals(dataString, taskData)
+ && (taskId == -1 || taskId != canonicalTaskId)) {
tasksToFinish.add(task);
}
}
+ return finishAndRemoveTasks(tasksToFinish);
+ }
+ private static Intent finishAndRemoveTasks(List<ActivityManager.AppTask> tasksToFinish) {
Intent removedIntent = null;
for (ActivityManager.AppTask task : tasksToFinish) {
+ Log.d(TAG, "Removing task with duplicated data: " + task);
removedIntent = getBaseIntentFromTask(task);
- Log.d(TAG, "Removing duplicated task: " + task);
task.finishAndRemoveTask();
}
return removedIntent;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698