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

Commit c511e019 authored by Fabian Kozynski's avatar Fabian Kozynski
Browse files

Make API one-way

Convert the return values to values that will be returned through the
callback. Separate the ranges by SUCCESS of the request or ERROR.

Test: CTS tests
Fixes: 199829900
Change-Id: If32083e52ed87a79953c952bbaadd8d977e0226c
parent ee089dd1
Loading
Loading
Loading
Loading
+6 −7
Original line number Diff line number Diff line
@@ -6698,13 +6698,12 @@ package android.app {
  }
  public class StatusBarManager {
    method public int requestAddTileService(@NonNull android.content.ComponentName, @NonNull CharSequence, @NonNull android.graphics.drawable.Icon, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
    field public static final int TILE_ADD_REQUEST_ANSWER_FAILED_BAD_COMPONENT = 3; // 0x3
    field public static final int TILE_ADD_REQUEST_ANSWER_FAILED_MISMATCHED_PACKAGE = 1; // 0x1
    field public static final int TILE_ADD_REQUEST_ANSWER_FAILED_NOT_CURRENT_USER = 4; // 0x4
    field public static final int TILE_ADD_REQUEST_ANSWER_FAILED_REQUEST_IN_PROGRESS = 2; // 0x2
    field public static final int TILE_ADD_REQUEST_ANSWER_FAILED_UNKNOWN_REASON = 5; // 0x5
    field public static final int TILE_ADD_REQUEST_ANSWER_SUCCESS = 0; // 0x0
    method public void requestAddTileService(@NonNull android.content.ComponentName, @NonNull CharSequence, @NonNull android.graphics.drawable.Icon, @NonNull java.util.concurrent.Executor, @NonNull java.util.function.Consumer<java.lang.Integer>);
    field public static final int TILE_ADD_REQUEST_ERROR_BAD_COMPONENT = 1002; // 0x3ea
    field public static final int TILE_ADD_REQUEST_ERROR_MISMATCHED_PACKAGE = 1000; // 0x3e8
    field public static final int TILE_ADD_REQUEST_ERROR_NOT_CURRENT_USER = 1003; // 0x3eb
    field public static final int TILE_ADD_REQUEST_ERROR_NO_STATUS_BAR_SERVICE = 1004; // 0x3ec
    field public static final int TILE_ADD_REQUEST_ERROR_REQUEST_IN_PROGRESS = 1001; // 0x3e9
    field public static final int TILE_ADD_REQUEST_RESULT_TILE_ADDED = 2; // 0x2
    field public static final int TILE_ADD_REQUEST_RESULT_TILE_ALREADY_ADDED = 1; // 0x1
    field public static final int TILE_ADD_REQUEST_RESULT_TILE_NOT_ADDED = 0; // 0x0
+30 −33
Original line number Diff line number Diff line
@@ -228,55 +228,53 @@ public class StatusBarManager {
    /** @hide */
    public static final int TILE_ADD_REQUEST_RESULT_DIALOG_DISMISSED = 3;

    /** @hide */
    @IntDef(prefix = {"TILE_ADD_REQUEST_RESULT_"}, value = {
            TILE_ADD_REQUEST_RESULT_TILE_NOT_ADDED,
            TILE_ADD_REQUEST_RESULT_TILE_ALREADY_ADDED,
            TILE_ADD_REQUEST_RESULT_TILE_ADDED,
            TILE_ADD_REQUEST_RESULT_DIALOG_DISMISSED
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface RequestResult {}

    /**
     * Indicates that the request was sent successfully. Does not indicate that the user
     * has accepted the request.
     * Values greater or equal to this value indicate an error in the request.
     */
    public static final int TILE_ADD_REQUEST_ANSWER_SUCCESS = 0;
    private static final int TILE_ADD_REQUEST_FIRST_ERROR_CODE = 1000;

    /**
     * Indicates that this package does not match that of the
     * {@link android.service.quicksettings.TileService}.
     */
    public static final int TILE_ADD_REQUEST_ANSWER_FAILED_MISMATCHED_PACKAGE = 1;
    public static final int TILE_ADD_REQUEST_ERROR_MISMATCHED_PACKAGE =
            TILE_ADD_REQUEST_FIRST_ERROR_CODE;
    /**
     * Indicates that there's a request in progress for this package.
     */
    public static final int TILE_ADD_REQUEST_ANSWER_FAILED_REQUEST_IN_PROGRESS = 2;
    public static final int TILE_ADD_REQUEST_ERROR_REQUEST_IN_PROGRESS =
            TILE_ADD_REQUEST_FIRST_ERROR_CODE + 1;
    /**
     * Indicates that the component does not match an enabled
     * {@link android.service.quicksettings.TileService} for the current user.
     */
    public static final int TILE_ADD_REQUEST_ANSWER_FAILED_BAD_COMPONENT = 3;
    public static final int TILE_ADD_REQUEST_ERROR_BAD_COMPONENT =
            TILE_ADD_REQUEST_FIRST_ERROR_CODE + 2;
    /**
     * Indicates that the user is not the current user.
     */
    public static final int TILE_ADD_REQUEST_ANSWER_FAILED_NOT_CURRENT_USER = 4;
    public static final int TILE_ADD_REQUEST_ERROR_NOT_CURRENT_USER =
            TILE_ADD_REQUEST_FIRST_ERROR_CODE + 3;
    /**
     * The request could not be processed due to an unkonwn reason.
     * The request could not be processed because no fulfilling service was found. This could be
     * a temporary issue (for example, SystemUI has crashed).
     */
    public static final int TILE_ADD_REQUEST_ANSWER_FAILED_UNKNOWN_REASON = 5;
    public static final int TILE_ADD_REQUEST_ERROR_NO_STATUS_BAR_SERVICE =
            TILE_ADD_REQUEST_FIRST_ERROR_CODE + 4;

    /** @hide */
    @IntDef(prefix = {"TILE_ADD_REQUEST_ANSWER_"}, value = {
            TILE_ADD_REQUEST_ANSWER_SUCCESS,
            TILE_ADD_REQUEST_ANSWER_FAILED_MISMATCHED_PACKAGE,
            TILE_ADD_REQUEST_ANSWER_FAILED_REQUEST_IN_PROGRESS,
            TILE_ADD_REQUEST_ANSWER_FAILED_BAD_COMPONENT,
            TILE_ADD_REQUEST_ANSWER_FAILED_NOT_CURRENT_USER,
            TILE_ADD_REQUEST_ANSWER_FAILED_UNKNOWN_REASON
    @IntDef(prefix = {"TILE_ADD_REQUEST"}, value = {
            TILE_ADD_REQUEST_RESULT_TILE_NOT_ADDED,
            TILE_ADD_REQUEST_RESULT_TILE_ALREADY_ADDED,
            TILE_ADD_REQUEST_RESULT_TILE_ADDED,
            TILE_ADD_REQUEST_ERROR_MISMATCHED_PACKAGE,
            TILE_ADD_REQUEST_ERROR_REQUEST_IN_PROGRESS,
            TILE_ADD_REQUEST_ERROR_BAD_COMPONENT,
            TILE_ADD_REQUEST_ERROR_NOT_CURRENT_USER,
            TILE_ADD_REQUEST_ERROR_NO_STATUS_BAR_SERVICE
    })
    @Retention(RetentionPolicy.SOURCE)
    public @interface RequestAnswer {}
    public @interface RequestResult {}

    @UnsupportedAppUsage
    private Context mContext;
@@ -626,12 +624,10 @@ public class StatusBarManager {
     * @param icon icon to use in the tile shown to the user.
     * @param resultExecutor an executor to run the callback on
     * @param resultCallback callback to indicate the {@link RequestResult}.
     * @return whether the request was successfully sent.
     *
     * @see android.service.quicksettings.TileService
     */
    @RequestAnswer
    public int requestAddTileService(
    public void requestAddTileService(
            @NonNull ComponentName tileServiceComponentName,
            @NonNull CharSequence tileLabel,
            @NonNull Icon icon,
@@ -644,14 +640,16 @@ public class StatusBarManager {
        Objects.requireNonNull(resultExecutor);
        Objects.requireNonNull(resultCallback);
        if (!tileServiceComponentName.getPackageName().equals(mContext.getPackageName())) {
            return TILE_ADD_REQUEST_ANSWER_FAILED_MISMATCHED_PACKAGE;
            resultExecutor.execute(
                    () -> resultCallback.accept(TILE_ADD_REQUEST_ERROR_MISMATCHED_PACKAGE));
            return;
        }
        int userId = mContext.getUserId();
        RequestResultCallback callbackProxy = new RequestResultCallback(resultExecutor,
                resultCallback);
        IStatusBarService svc = getService();
        try {
            return svc.requestAddTile(
            svc.requestAddTile(
                    tileServiceComponentName,
                    tileLabel,
                    icon,
@@ -661,7 +659,6 @@ public class StatusBarManager {
        } catch (RemoteException ex) {
            ex.rethrowFromSystemServer();
        }
        return TILE_ADD_REQUEST_ANSWER_FAILED_UNKNOWN_REASON;
    }

    /** @hide */
+1 −1
Original line number Diff line number Diff line
@@ -160,5 +160,5 @@ interface IStatusBarService
     */
    void suppressAmbientDisplay(boolean suppress);

    int requestAddTile(in ComponentName componentName, in CharSequence label, in Icon icon, int userId, in IAddTileResultCallback callback);
    void requestAddTile(in ComponentName componentName, in CharSequence label, in Icon icon, int userId, in IAddTileResultCallback callback);
}
+1 −1
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@ class TileServiceRequestController constructor(
        internal const val DONT_ADD_TILE = StatusBarManager.TILE_ADD_REQUEST_RESULT_TILE_NOT_ADDED
        internal const val TILE_ALREADY_ADDED =
                StatusBarManager.TILE_ADD_REQUEST_RESULT_TILE_ALREADY_ADDED
        internal const val DISMISSED = 3
        internal const val DISMISSED = StatusBarManager.TILE_ADD_REQUEST_RESULT_DIALOG_DISMISSED
    }

    private val commandQueueCallback = object : CommandQueue.Callbacks {
+19 −5
Original line number Diff line number Diff line
@@ -1689,7 +1689,7 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
    }

    @Override
    public int requestAddTile(
    public void requestAddTile(
            @NonNull ComponentName componentName,
            @NonNull CharSequence label,
            @NonNull Icon icon,
@@ -1710,13 +1710,23 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D

        // Check current user
        if (userId != currentUser) {
            return StatusBarManager.TILE_ADD_REQUEST_ANSWER_FAILED_NOT_CURRENT_USER;
            try {
                callback.onTileRequest(StatusBarManager.TILE_ADD_REQUEST_ERROR_NOT_CURRENT_USER);
            } catch (RemoteException e) {
                Slog.e(TAG, "requestAddTile", e);
            }
            return;
        }

        // We've checked that the package, component name and uid all match.
        ResolveInfo r = isComponentValidTileService(componentName, userId);
        if (r == null) {
            return StatusBarManager.TILE_ADD_REQUEST_ANSWER_FAILED_BAD_COMPONENT;
            try {
                callback.onTileRequest(StatusBarManager.TILE_ADD_REQUEST_ERROR_BAD_COMPONENT);
            } catch (RemoteException e) {
                Slog.e(TAG, "requestAddTile", e);
            }
            return;
        }

        IAddTileResultCallback proxyCallback = new IAddTileResultCallback.Stub() {
@@ -1734,12 +1744,16 @@ public class StatusBarManagerService extends IStatusBarService.Stub implements D
        if (mBar != null) {
            try {
                mBar.requestAddTile(componentName, appName, label, icon, proxyCallback);
                return StatusBarManager.TILE_ADD_REQUEST_ANSWER_SUCCESS;
            } catch (RemoteException e) {
                Slog.e(TAG, "requestAddTile", e);
            }
            return;
        }
        try {
            callback.onTileRequest(StatusBarManager.TILE_ADD_REQUEST_ERROR_NO_STATUS_BAR_SERVICE);
        } catch (RemoteException e) {
            Slog.e(TAG, "requestAddTile", e);
        }
        return StatusBarManager.TILE_ADD_REQUEST_ANSWER_FAILED_UNKNOWN_REASON;
    }

    public String[] getStatusBarIcons() {