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:
parent
b2ddf10041
commit
0e2aa7a264
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue