diff options
| -rw-r--r-- | api/module-lib-current.txt | 10 | ||||
| -rw-r--r-- | api/test-current.txt | 7 | ||||
| -rw-r--r-- | core/java/android/app/ActivityManager.java | 37 | ||||
| -rw-r--r-- | core/java/android/app/HomeVisibilityObserver.java (renamed from core/java/android/app/HomeVisibilityListener.java) | 63 | ||||
| -rw-r--r-- | non-updatable-api/module-lib-current.txt | 10 |
5 files changed, 36 insertions, 91 deletions
diff --git a/api/module-lib-current.txt b/api/module-lib-current.txt index b8b66879dbae..dc92b52dc466 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 85be4ec74bae..18320cd21078 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -79,7 +79,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); @@ -89,7 +88,6 @@ package android.app { method @RequiresPermission(android.Manifest.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; @@ -460,11 +458,6 @@ package android.app { method @RequiresPermission(android.Manifest.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 30efb48cc188..e75d2f60bb87 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; /** * <p> @@ -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 index c6e5699c5fe2..8422c6f6f872 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 e135a3b734cf..b19ce4886589 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"; |