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 Original line Diff line number Diff line
@@ -19,7 +19,6 @@ package android.app.supervision;
/**
/**
 * @hide
 * @hide
 */
 */
interface ISupervisionAppService {
oneway interface ISupervisionListener {
    void onEnabled();
    oneway void onSetSupervisionEnabled(int userId, boolean enabled);
    void onDisabled();
}
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -17,6 +17,7 @@
package android.app.supervision;
package android.app.supervision;


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


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


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

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


    @Nullable
    @Nullable
+68 −0
Original line number Original line 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 static android.permission.flags.Flags.FLAG_ENABLE_SYSTEM_SUPERVISION_ROLE_BEHAVIOR;


import android.annotation.FlaggedApi;
import android.annotation.FlaggedApi;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
import android.annotation.SystemApi;
@@ -44,6 +45,41 @@ import android.os.RemoteException;
@SystemApi
@SystemApi
@FlaggedApi(Flags.FLAG_SUPERVISION_MANAGER_APIS)
@FlaggedApi(Flags.FLAG_SUPERVISION_MANAGER_APIS)
public class SupervisionManager {
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;
    private final Context mContext;
    @Nullable private final ISupervisionManager mService;
    @Nullable private final ISupervisionManager mService;


@@ -263,4 +299,36 @@ public class SupervisionManager {
        }
        }
        return false;
        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 Original line Diff line number Diff line
@@ -17,7 +17,7 @@ package com.android.server.appbinding.finders;


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


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


    private final RoleManager mRoleManager;
    private final RoleManager mRoleManager;


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


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


    @Nullable
    @Nullable
Loading