Only remove task if it was uninstalled or removed from the recents list

- Was missing additional checks and unconditionally removing the task
  whenever the task was removed from the active tasks in AM. Instead, check
  that the app still exists both in the system and in the recents list
  before removing.

Bug: 79698015
Test: a) get incoming call, go to overview, end call and ensure removed
      b) install app, open app, go to overview, uninstall app and ensure removed

Change-Id: I8901cb232ef7ff0759923d6a98f65df4e4adf88b
This commit is contained in:
Winson Chung 2018-05-17 14:32:48 -07:00
parent b2ddf10041
commit 0e2aa7a264
1 changed files with 36 additions and 4 deletions

View File

@ -39,6 +39,8 @@ import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Handler;
import android.os.UserHandle;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
@ -78,6 +80,8 @@ import com.android.systemui.shared.recents.model.Task;
import com.android.systemui.shared.recents.model.TaskStack;
import com.android.systemui.shared.recents.model.ThumbnailData;
import com.android.systemui.shared.system.ActivityManagerWrapper;
import com.android.systemui.shared.system.BackgroundExecutor;
import com.android.systemui.shared.system.PackageManagerWrapper;
import com.android.systemui.shared.system.TaskStackChangeListener;
import java.util.ArrayList;
@ -166,10 +170,38 @@ public abstract class RecentsView<T extends BaseActivity> extends PagedView impl
if (!mHandleTaskStackChanges) {
return;
}
TaskView taskView = getTaskView(taskId);
if (taskView != null) {
dismissTask(taskView, true /* animate */, false /* removeTask */);
}
BackgroundExecutor.get().submit(() -> {
TaskView taskView = getTaskView(taskId);
if (taskView == null) {
return;
}
Handler handler = taskView.getHandler();
if (handler == null) {
return;
}
// TODO: Add callbacks from AM reflecting adding/removing from the recents list, and
// remove all these checks
Task.TaskKey taskKey = taskView.getTask().key;
if (PackageManagerWrapper.getInstance().getActivityInfo(taskKey.getComponent(),
taskKey.userId) == null) {
// The package was uninstalled
handler.post(() ->
dismissTask(taskView, true /* animate */, false /* removeTask */));
} else {
RecentsTaskLoadPlan loadPlan = new RecentsTaskLoadPlan(getContext());
RecentsTaskLoadPlan.PreloadOptions opts =
new RecentsTaskLoadPlan.PreloadOptions();
opts.loadTitles = false;
loadPlan.preloadPlan(opts, mModel.getRecentsTaskLoader(), -1,
UserHandle.myUserId());
if (loadPlan.getTaskStack().findTaskWithId(taskId) == null) {
// The task was removed from the recents list
handler.post(() ->
dismissTask(taskView, true /* animate */, false /* removeTask */));
}
}
});
}
@Override