From 377a388d1ff129483536d56b000c97ba28a144d0 Mon Sep 17 00:00:00 2001 From: Makoto Onuki Date: Tue, 13 Oct 2020 23:32:18 +0000 Subject: [PATCH] Revert "Expose the HomeVisibilityListener API" Revert "Add CTS for HomeVisibilityListener" Revert submission 12775890-home-vis-listener Reason for revert: broke build, b/170776449 Reverted Changes: I8e6de3267:Add CTS for HomeVisibilityListener I33d943603:Follow rename of HomeVisibilityObserver I5d99f2bad:Expose the HomeVisibilityListener API Change-Id: I9483fac8cf40ecfa6f80f6f66068978ebe493258 --- api/module-lib-current.txt | 10 --- api/test-current.txt | 7 --- core/java/android/app/ActivityManager.java | 37 ++++------- ...tener.java => HomeVisibilityObserver.java} | 63 +++++++------------ non-updatable-api/module-lib-current.txt | 10 --- 5 files changed, 36 insertions(+), 91 deletions(-) rename core/java/android/app/{HomeVisibilityListener.java => HomeVisibilityObserver.java} (57%) diff --git a/api/module-lib-current.txt b/api/module-lib-current.txt index 2a831fded92c6..3801e1d34b063 100644 --- a/api/module-lib-current.txt +++ b/api/module-lib-current.txt @@ -1,20 +1,10 @@ // Signature format: 2.0 package android.app { - public class ActivityManager { - method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener); - method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener); - } - public class AppOpsManager { field public static final String OPSTR_NO_ISOLATED_STORAGE = "android:no_isolated_storage"; } - public abstract class HomeVisibilityListener { - ctor public HomeVisibilityListener(); - method public abstract void onHomeVisibilityChanged(boolean); - } - public class NotificationManager { method public boolean hasEnabledNotificationListener(@NonNull String, @NonNull android.os.UserHandle); field public static final String ACTION_NOTIFICATION_LISTENER_ENABLED_CHANGED = "android.app.action.NOTIFICATION_LISTENER_ENABLED_CHANGED"; diff --git a/api/test-current.txt b/api/test-current.txt index ed385e6db5cee..68d28233ade04 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -77,7 +77,6 @@ package android.app { } public class ActivityManager { - method @RequiresPermission("android.permission.SET_ACTIVITY_WATCHER") public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener); method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void addOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener, int); method public void alwaysShowUnsupportedCompileSdkWarning(android.content.ComponentName); method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void forceStopPackage(String); @@ -87,7 +86,6 @@ package android.app { method @RequiresPermission("android.permission.INJECT_EVENTS") public void holdLock(int); method public static boolean isHighEndGfx(); method @RequiresPermission(android.Manifest.permission.FORCE_STOP_PACKAGES) public void killProcessesWhenImperceptible(@NonNull int[], @NonNull String); - method @RequiresPermission("android.permission.SET_ACTIVITY_WATCHER") public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener); method @RequiresPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) public void removeOnUidImportanceListener(android.app.ActivityManager.OnUidImportanceListener); method @RequiresPermission(android.Manifest.permission.RESET_APP_ERRORS) public void resetAppErrors(); method public static void resumeAppSwitches() throws android.os.RemoteException; @@ -458,11 +456,6 @@ package android.app { method @RequiresPermission("android.permission.WRITE_DREAM_STATE") public void stopDream(); } - public abstract class HomeVisibilityListener { - ctor public HomeVisibilityListener(); - method public abstract void onHomeVisibilityChanged(boolean); - } - public final class NotificationChannel implements android.os.Parcelable { method public int getOriginalImportance(); method public boolean isBlockable(); diff --git a/core/java/android/app/ActivityManager.java b/core/java/android/app/ActivityManager.java index 30efb48cc1880..e75d2f60bb87f 100644 --- a/core/java/android/app/ActivityManager.java +++ b/core/java/android/app/ActivityManager.java @@ -100,7 +100,6 @@ import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Locale; -import java.util.concurrent.Executor; /** *

@@ -4753,43 +4752,31 @@ public class ActivityManager { } /** - * Register to be notified when the visibility of the home screen changes. - * - * @param executor The executor on which the listener should be called. - * @param listener The listener that is called when home visibility changes. + * Register with {@link HomeVisibilityObserver} with ActivityManager. + * TODO: b/144351078 expose as SystemApi * @hide */ - @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) - @TestApi - @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) - public void addHomeVisibilityListener(@NonNull Executor executor, - @NonNull HomeVisibilityListener listener) { - Preconditions.checkNotNull(listener); - Preconditions.checkNotNull(executor); + public void registerHomeVisibilityObserver(@NonNull HomeVisibilityObserver observer) { + Preconditions.checkNotNull(observer); try { - listener.init(mContext, executor, this); - getService().registerProcessObserver(listener.mObserver); + observer.init(mContext, this); + getService().registerProcessObserver(observer.mObserver); // Notify upon first registration. - executor.execute(() -> - listener.onHomeVisibilityChanged(listener.mIsHomeActivityVisible)); + observer.onHomeVisibilityChanged(observer.mIsHomeActivityVisible); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** - * Removes a listener that was previously added with {@link #addHomeVisibilityListener}. - * - * @param listener The listener that was previously added. + * Unregister with {@link HomeVisibilityObserver} with ActivityManager. + * TODO: b/144351078 expose as SystemApi * @hide */ - @SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) - @TestApi - @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) - public void removeHomeVisibilityListener(@NonNull HomeVisibilityListener listener) { - Preconditions.checkNotNull(listener); + public void unregisterHomeVisibilityObserver(@NonNull HomeVisibilityObserver observer) { + Preconditions.checkNotNull(observer); try { - getService().unregisterProcessObserver(listener.mObserver); + getService().unregisterProcessObserver(observer.mObserver); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } diff --git a/core/java/android/app/HomeVisibilityListener.java b/core/java/android/app/HomeVisibilityObserver.java similarity index 57% rename from core/java/android/app/HomeVisibilityListener.java rename to core/java/android/app/HomeVisibilityObserver.java index c6e5699c5fe2d..8422c6f6f8729 100644 --- a/core/java/android/app/HomeVisibilityListener.java +++ b/core/java/android/app/HomeVisibilityObserver.java @@ -16,56 +16,49 @@ package android.app; -import android.annotation.SuppressLint; -import android.annotation.SystemApi; -import android.annotation.TestApi; import android.content.Context; -import android.os.Binder; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; -import java.util.ArrayList; import java.util.List; -import java.util.Objects; -import java.util.concurrent.Executor; /** - * A listener that will be invoked when the visibility of the home screen changes. - * Register this callback via {@link ActivityManager#addHomeVisibilityListener} + * An observer / callback to create and register by + * {@link ActivityManager#registerHomeVisibilityObserver} so that it's triggered when + * visibility of home page changes. + * TODO: b/144351078 expose as SystemApi * @hide */ -// This is a single-method listener that needs a bunch of supporting code, so it can't be an -// interface -@SuppressLint("ListenerInterface") -@SystemApi(client = SystemApi.Client.MODULE_LIBRARIES) -@TestApi -public abstract class HomeVisibilityListener { +public abstract class HomeVisibilityObserver { private Context mContext; private ActivityManager mActivityManager; - private Executor mExecutor; /** @hide */ - android.app.IProcessObserver.Stub mObserver; + IProcessObserver.Stub mObserver; /** @hide */ boolean mIsHomeActivityVisible; /** @hide */ - void init(Context context, Executor executor, ActivityManager activityManager) { + void init(Context context, ActivityManager activityManager) { mContext = context; mActivityManager = activityManager; mIsHomeActivityVisible = isHomeActivityVisible(); - mExecutor = executor; } /** - * Called when the visibility of the home screen changes. - * - * @param isHomeActivityVisible Whether the home screen activity is now visible. + * The API that needs implemented and will be triggered when activity on home page changes. */ public abstract void onHomeVisibilityChanged(boolean isHomeActivityVisible); - public HomeVisibilityListener() { - mObserver = new android.app.IProcessObserver.Stub() { + public HomeVisibilityObserver() { + mObserver = new IProcessObserver.Stub() { @Override public void onForegroundActivitiesChanged(int pid, int uid, boolean fg) { - refreshHomeVisibility(); + boolean isHomeActivityVisible = isHomeActivityVisible(); + if (mIsHomeActivityVisible != isHomeActivityVisible) { + mIsHomeActivityVisible = isHomeActivityVisible; + onHomeVisibilityChanged(mIsHomeActivityVisible); + } } @Override @@ -74,17 +67,6 @@ public abstract class HomeVisibilityListener { @Override public void onProcessDied(int pid, int uid) { - refreshHomeVisibility(); - } - - private void refreshHomeVisibility() { - boolean isHomeActivityVisible = isHomeActivityVisible(); - if (mIsHomeActivityVisible != isHomeActivityVisible) { - mIsHomeActivityVisible = isHomeActivityVisible; - Binder.withCleanCallingIdentity(() -> - mExecutor.execute(() -> - onHomeVisibilityChanged(mIsHomeActivityVisible))); - } } }; } @@ -101,9 +83,12 @@ public abstract class HomeVisibilityListener { } // We can assume that the screen is idle if the home application is in the foreground. - String defaultHomePackage = mContext.getPackageManager() - .getHomeActivities(new ArrayList<>()).getPackageName(); - if (Objects.equals(top, defaultHomePackage)) { + final Intent intent = new Intent(Intent.ACTION_MAIN, null); + intent.addCategory(Intent.CATEGORY_HOME); + + ResolveInfo info = mContext.getPackageManager().resolveActivity(intent, + PackageManager.MATCH_DEFAULT_ONLY); + if (info != null && top.equals(info.activityInfo.packageName)) { return true; } diff --git a/non-updatable-api/module-lib-current.txt b/non-updatable-api/module-lib-current.txt index a5d8493f37bf0..003a36316c9b8 100644 --- a/non-updatable-api/module-lib-current.txt +++ b/non-updatable-api/module-lib-current.txt @@ -1,20 +1,10 @@ // Signature format: 2.0 package android.app { - public class ActivityManager { - method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void addHomeVisibilityListener(@NonNull java.util.concurrent.Executor, @NonNull android.app.HomeVisibilityListener); - method @RequiresPermission(android.Manifest.permission.SET_ACTIVITY_WATCHER) public void removeHomeVisibilityListener(@NonNull android.app.HomeVisibilityListener); - } - public class AppOpsManager { field public static final String OPSTR_NO_ISOLATED_STORAGE = "android:no_isolated_storage"; } - public abstract class HomeVisibilityListener { - ctor public HomeVisibilityListener(); - method public abstract void onHomeVisibilityChanged(boolean); - } - public class NotificationManager { method public boolean hasEnabledNotificationListener(@NonNull String, @NonNull android.os.UserHandle); field public static final String ACTION_NOTIFICATION_LISTENER_ENABLED_CHANGED = "android.app.action.NOTIFICATION_LISTENER_ENABLED_CHANGED";