OSDN Git Service

Removing historical tasks when packages are uninstalled.
authorWinson Chung <winsonc@google.com>
Fri, 11 Dec 2015 15:25:57 +0000 (10:25 -0500)
committerWinson Chung <winsonc@google.com>
Mon, 14 Dec 2015 15:39:05 +0000 (10:39 -0500)
Change-Id: I9eb1307264fab8dcace732af2290ca419fcc548a

packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryAdapter.java
packages/SystemUI/src/com/android/systemui/recents/history/RecentsHistoryView.java

index 2eee1da..06265bd 100644 (file)
@@ -110,7 +110,9 @@ public class RecentsHistoryAdapter extends RecyclerView.Adapter<RecentsHistoryAd
         }
     }
 
+    private Context mContext;
     private LayoutInflater mLayoutInflater;
+    private final List<Task> mTasks = new ArrayList<>();
     private final List<Row> mRows = new ArrayList<>();
 
     public RecentsHistoryAdapter(Context context) {
@@ -121,6 +123,10 @@ public class RecentsHistoryAdapter extends RecyclerView.Adapter<RecentsHistoryAd
      * Updates this adapter with the given tasks.
      */
     public void updateTasks(Context context, List<Task> tasks) {
+        mContext = context;
+        mTasks.clear();
+        mTasks.addAll(tasks);
+
         final Locale l = context.getResources().getConfiguration().locale;
         final String dateFormatStr = DateFormat.getBestDateTimePattern(l, "EEEEMMMMd");
         final List<Task> tasksMostRecent = new ArrayList<>(tasks);
@@ -144,6 +150,24 @@ public class RecentsHistoryAdapter extends RecyclerView.Adapter<RecentsHistoryAd
         notifyDataSetChanged();
     }
 
+    /**
+     * Removes historical tasks beloning to the specified package and user.
+     */
+    public void removeTasks(String packageName, int userId) {
+        boolean packagesRemoved = false;
+        for (int i = mTasks.size() - 1; i >= 0; i--) {
+            Task task = mTasks.get(i);
+            String taskPackage = task.key.getComponent().getPackageName();
+            if (task.key.userId == userId && taskPackage.equals(packageName)) {
+                mTasks.remove(i);
+                packagesRemoved = true;
+            }
+        }
+        if (packagesRemoved) {
+            updateTasks(mContext, new ArrayList<Task>(mTasks));
+        }
+    }
+
     @Override
     public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
index 5851111..7755dab 100644 (file)
@@ -16,6 +16,7 @@
 
 package com.android.systemui.recents.history;
 
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Rect;
@@ -29,9 +30,18 @@ import android.view.animation.Interpolator;
 import android.widget.LinearLayout;
 import com.android.systemui.R;
 import com.android.systemui.recents.Recents;
+import com.android.systemui.recents.RecentsActivity;
 import com.android.systemui.recents.RecentsConfiguration;
+import com.android.systemui.recents.events.EventBus;
+import com.android.systemui.recents.events.activity.PackagesChangedEvent;
 import com.android.systemui.recents.misc.ReferenceCountedTrigger;
+import com.android.systemui.recents.misc.SystemServicesProxy;
+import com.android.systemui.recents.model.Task;
 import com.android.systemui.recents.model.TaskStack;
+import com.android.systemui.recents.views.TaskView;
+
+import java.util.ArrayList;
+import java.util.HashSet;
 
 /**
  * A list of the recent tasks that are not in the stack.
@@ -165,8 +175,27 @@ public class RecentsHistoryView extends LinearLayout {
     }
 
     @Override
+    protected void onAttachedToWindow() {
+        SystemServicesProxy ssp = Recents.getSystemServices();
+        EventBus.getDefault().register(this, RecentsActivity.EVENT_BUS_PRIORITY + 1);
+        super.onAttachedToWindow();
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        EventBus.getDefault().unregister(this);
+    }
+
+    @Override
     public WindowInsets onApplyWindowInsets(WindowInsets insets) {
         setSystemInsets(insets.getSystemWindowInsets());
         return insets;
     }
+
+    /**** EventBus Events ****/
+
+    public final void onBusEvent(PackagesChangedEvent event) {
+        mAdapter.removeTasks(event.packageName, event.userId);
+    }
 }