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

Commit c5b8b092 authored by Lucy Miyuki Narita's avatar Lucy Miyuki Narita Committed by Android (Google) Code Review
Browse files

Merge "Create supervision state changes listener." into main

parents b664a9c9 48a96760
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -19,7 +19,6 @@ package android.app.supervision;
/**
 * @hide
 */
interface ISupervisionAppService {
    void onEnabled();
    void onDisabled();
oneway interface ISupervisionListener {
    oneway void onSetSupervisionEnabled(int userId, boolean enabled);
}
+3 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package android.app.supervision;

import android.content.Intent;
import android.app.supervision.ISupervisionListener;
import android.app.supervision.SupervisionRecoveryInfo;

/**
@@ -33,4 +34,6 @@ interface ISupervisionManager {
    oneway void setSupervisionRecoveryInfo(in SupervisionRecoveryInfo recoveryInfo);
    SupervisionRecoveryInfo getSupervisionRecoveryInfo();
    boolean hasSupervisionCredentials();
    oneway void registerSupervisionListener(in ISupervisionListener listener);
    oneway void unregisterSupervisionListener(in ISupervisionListener listener);
}
+8 −9
Original line number Diff line number Diff line
@@ -45,17 +45,16 @@ public class SupervisionAppService extends Service {
    public static final String ACTION_SUPERVISION_APP_SERVICE =
            "android.app.action.SUPERVISION_APP_SERVICE";

    private final ISupervisionAppService mBinder =
            new ISupervisionAppService.Stub() {
    private final ISupervisionListener mBinder =
            new ISupervisionListener.Stub() {
                @Override
                public void onEnabled() {
                public void onSetSupervisionEnabled(int userId, boolean enabled) {
                    if (enabled) {
                        SupervisionAppService.this.onEnabled();
                }

                @Override
                public void onDisabled() {
                    } else {
                        SupervisionAppService.this.onDisabled();
                    }
                }
            };

    @Nullable
+68 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import static android.Manifest.permission.QUERY_USERS;
import static android.permission.flags.Flags.FLAG_ENABLE_SYSTEM_SUPERVISION_ROLE_BEHAVIOR;

import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
@@ -44,6 +45,41 @@ import android.os.RemoteException;
@SystemApi
@FlaggedApi(Flags.FLAG_SUPERVISION_MANAGER_APIS)
public class SupervisionManager {
    /**
     * Listener for supervision state changes.
     *
     * @hide
     */
    public abstract static class SupervisionListener {
        protected final ISupervisionListener mListener =
                new ISupervisionListener.Stub() {
                    @Override
                    public void onSetSupervisionEnabled(int userId, boolean enabled) {
                        if (enabled) {
                            onSupervisionEnabled(userId);
                        } else {
                            onSupervisionDisabled(userId);
                        }
                    }
                };

        /**
         * Called after supervision has been enabled for a given user.
         *
         * @param userId Int ID of the user for whom supervision was enabled.
         * @hide
         */
        public abstract void onSupervisionEnabled(@UserIdInt int userId);

        /**
         * Called after supervision has been enabled for a given user.
         *
         * @param userId Int ID of the user for whom supervision was enabled.
         * @hide
         */
        public abstract void onSupervisionDisabled(@UserIdInt int userId);
    }

    private final Context mContext;
    @Nullable private final ISupervisionManager mService;

@@ -263,4 +299,36 @@ public class SupervisionManager {
        }
        return false;
    }

    /**
     * Registers a listener to be notified on supervision state changes.
     *
     * @param listener Listener to be registered. Can't be null.
     * @hide
     */
    public void registerSupervisionListener(@NonNull SupervisionListener listener) {
        if (mService != null) {
            try {
                mService.registerSupervisionListener(listener.mListener);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }
    }

    /**
     * Unregisters a listener that was previously registered.
     *
     * @param listener Listener to be unregistered. Can't be null.
     * @hide
     */
    public void unregisterSupervisionListener(@NonNull SupervisionListener listener) {
        if (mService != null) {
            try {
                mService.unregisterSupervisionListener(listener.mListener);
            } catch (RemoteException e) {
                throw e.rethrowFromSystemServer();
            }
        }
    }
}
+4 −4
Original line number Diff line number Diff line
@@ -17,7 +17,7 @@ package com.android.server.appbinding.finders;

import android.app.role.OnRoleHoldersChangedListener;
import android.app.role.RoleManager;
import android.app.supervision.ISupervisionAppService;
import android.app.supervision.ISupervisionListener;
import android.app.supervision.SupervisionAppService;
import android.app.supervision.flags.Flags;
import android.content.Context;
@@ -37,7 +37,7 @@ import java.util.function.BiConsumer;

/** Finds the @{link SupervisionAppService} implementation within the supervision app. */
public class SupervisionAppServiceFinder
        extends AppServiceFinder<SupervisionAppService, ISupervisionAppService> {
        extends AppServiceFinder<SupervisionAppService, ISupervisionListener> {

    private final RoleManager mRoleManager;

@@ -66,8 +66,8 @@ public class SupervisionAppServiceFinder
    }

    @Override
    public ISupervisionAppService asInterface(IBinder obj) {
        return ISupervisionAppService.Stub.asInterface(obj);
    public ISupervisionListener asInterface(IBinder obj) {
        return ISupervisionListener.Stub.asInterface(obj);
    }

    @Nullable
Loading