Merge "Revert "Expose the HomeVisibilityListener API""
This commit is contained in:
@@ -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";
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user