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

Commit 48a96760 authored by Lucy Miyuki Narita's avatar Lucy Miyuki Narita
Browse files

Create supervision state changes listener.

Bug: 392923452
Test: atest SupervisionServiceTest
Flag: android.app.supervision.flags.enable_supervision_app_service
Change-Id: Ibb136521ffd664a54675a8c6140cab5eb201d745
parent 9ee7999e
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