Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c48de401 authored by Makoto Onuki's avatar Makoto Onuki Committed by Android (Google) Code Review
Browse files

Merge "Revert "Expose the HomeVisibilityListener API""

parents 7a8eb0a7 377a388d
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
// 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";
+0 −7
Original line number Diff line number Diff line
@@ -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();
+12 −25
Original line number Diff line number Diff line
@@ -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();
        }
+24 −39
Original line number Diff line number Diff line
@@ -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;
        }

+0 −10
Original line number Diff line number Diff line
// 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";