diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index e25e374122cf2..449729e18376f 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -5124,7 +5124,7 @@ public class ActivityManager { Preconditions.checkNotNull(listener); Preconditions.checkNotNull(executor); try { - listener.init(mContext, executor, this); + listener.init(mContext, executor); getService().registerProcessObserver(listener.mObserver); // Notify upon first registration. executor.execute(() -> diff --git a/core/java/android/app/HomeVisibilityListener.java b/core/java/android/app/HomeVisibilityListener.java index 57d868b2b969d..ca20648a871aa 100644 --- a/core/java/android/app/HomeVisibilityListener.java +++ b/core/java/android/app/HomeVisibilityListener.java @@ -16,16 +16,17 @@ package android.app; +import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; +import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; +import static android.view.Display.DEFAULT_DISPLAY; + import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.annotation.TestApi; -import android.content.ComponentName; import android.content.Context; import android.os.Binder; -import java.util.ArrayList; import java.util.List; -import java.util.Objects; import java.util.concurrent.Executor; /** @@ -39,20 +40,21 @@ import java.util.concurrent.Executor; @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) @TestApi public abstract class HomeVisibilityListener { - private Context mContext; - private ActivityManager mActivityManager; + private ActivityTaskManager mActivityTaskManager; private Executor mExecutor; + private int mMaxScanTasksForHomeVisibility; /** @hide */ android.app.IProcessObserver.Stub mObserver; /** @hide */ boolean mIsHomeActivityVisible; /** @hide */ - void init(Context context, Executor executor, ActivityManager activityManager) { - mContext = context; - mActivityManager = activityManager; - mIsHomeActivityVisible = isHomeActivityVisible(); + void init(Context context, Executor executor) { + mActivityTaskManager = ActivityTaskManager.getInstance(); mExecutor = executor; + mMaxScanTasksForHomeVisibility = context.getResources().getInteger( + com.android.internal.R.integer.config_maxScanTasksForHomeVisibility); + mIsHomeActivityVisible = isHomeActivityVisible(); } /** @@ -91,22 +93,21 @@ public abstract class HomeVisibilityListener { } private boolean isHomeActivityVisible() { - List tasks = mActivityManager.getRunningTasks(1); - if (tasks == null || tasks.isEmpty()) { + List tasksTopToBottom = mActivityTaskManager.getTasks( + mMaxScanTasksForHomeVisibility, /* filterOnlyVisibleRecents= */ true, + /* keepIntentExtra= */ false, DEFAULT_DISPLAY); + if (tasksTopToBottom == null || tasksTopToBottom.isEmpty()) { return false; } - String top = tasks.get(0).topActivity.getPackageName(); - if (top == null) { - return false; + for (int i = 0, taskSize = tasksTopToBottom.size(); i < taskSize; ++i) { + ActivityManager.RunningTaskInfo task = tasksTopToBottom.get(i); + if (!task.isVisible() + || (task.baseIntent.getFlags() & FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) != 0) { + continue; + } + return task.getActivityType() == ACTIVITY_TYPE_HOME; } - - // We can assume that the screen is idle if the home application is in the foreground. - ComponentName defaultHomeComponent = mContext.getPackageManager() - .getHomeActivities(new ArrayList<>()); - if (defaultHomeComponent == null) return false; - - String defaultHomePackage = defaultHomeComponent.getPackageName(); - return Objects.equals(top, defaultHomePackage); + return false; } } diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index b63d1c2a183b9..8b551357a031e 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -5838,4 +5838,7 @@ true + + + 10 diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 5143853f4411f..4e42064c5342d 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -3967,6 +3967,8 @@ + +