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

Commit 9999a7d9 authored by William Escande's avatar William Escande
Browse files

Framework: unify callback execution

Bug: 373976275
Fix: 373976275
Test: m Bluetooth
Flag: Exempt refactor
Change-Id: If79f1b9f4f42fef19173e6493e657bc695da8304
parent 86d0ed11
Loading
Loading
Loading
Loading
+15 −21
Original line number Diff line number Diff line
@@ -24,6 +24,8 @@ import static android.Manifest.permission.BLUETOOTH_PRIVILEGED;
import static android.Manifest.permission.BLUETOOTH_SCAN;
import static android.Manifest.permission.LOCAL_MAC_ADDRESS;
import static android.Manifest.permission.MODIFY_PHONE_STATE;
import static android.bluetooth.BluetoothStatusCodes.FEATURE_NOT_SUPPORTED;
import static android.bluetooth.BluetoothUtils.executeFromBinder;

import static java.util.Objects.requireNonNull;

@@ -937,7 +939,8 @@ public final class BluetoothAdapter {
                        for (Pair<OnMetadataChangedListener, Executor> pair : list) {
                            OnMetadataChangedListener listener = pair.first;
                            Executor executor = pair.second;
                            executor.execute(
                            executeFromBinder(
                                    executor,
                                    () -> {
                                        listener.onMetadataChanged(device, key, value);
                                    });
@@ -1016,18 +1019,13 @@ public final class BluetoothAdapter {
                mExecutor = null;
                mCallback = null;
            }
            final long identity = Binder.clearCallingIdentity();
            try {
            if (info == null) {
                    executor.execute(
                            () ->
                                    callback.onBluetoothActivityEnergyInfoError(
                                            BluetoothStatusCodes.FEATURE_NOT_SUPPORTED));
                executeFromBinder(
                        executor,
                        () -> callback.onBluetoothActivityEnergyInfoError(FEATURE_NOT_SUPPORTED));
            } else {
                    executor.execute(() -> callback.onBluetoothActivityEnergyInfoAvailable(info));
                }
            } finally {
                Binder.restoreCallingIdentity(identity);
                executeFromBinder(
                        executor, () -> callback.onBluetoothActivityEnergyInfoAvailable(info));
            }
        }

@@ -1045,12 +1043,8 @@ public final class BluetoothAdapter {
                mExecutor = null;
                mCallback = null;
            }
            final long identity = Binder.clearCallingIdentity();
            try {
                executor.execute(() -> callback.onBluetoothActivityEnergyInfoError(errorCode));
            } finally {
                Binder.restoreCallingIdentity(identity);
            }
            executeFromBinder(
                    executor, () -> callback.onBluetoothActivityEnergyInfoError(errorCode));
        }
    }

@@ -3969,11 +3963,11 @@ public final class BluetoothAdapter {
        }

        public void onOobData(@Transport int transport, @NonNull OobData oobData) {
            mExecutor.execute(() -> mCallback.onOobData(transport, oobData));
            executeFromBinder(mExecutor, () -> mCallback.onOobData(transport, oobData));
        }

        public void onError(@OobError int errorCode) {
            mExecutor.execute(() -> mCallback.onError(errorCode));
            executeFromBinder(mExecutor, () -> mCallback.onError(errorCode));
        }
    }

+3 −1
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.bluetooth;

import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.Manifest.permission.BLUETOOTH_PRIVILEGED;
import static android.bluetooth.BluetoothUtils.executeFromBinder;

import android.annotation.CallbackExecutor;
import android.annotation.IntDef;
@@ -105,7 +106,8 @@ public final class BluetoothCsipSetCoordinator implements BluetoothProfile, Auto
        @Override
        @RequiresNoPermission
        public void onGroupLockSet(int groupId, int opStatus, boolean isLocked) {
            mExecutor.execute(() -> mCallback.onGroupLockSet(groupId, opStatus, isLocked));
            executeFromBinder(
                    mExecutor, () -> mCallback.onGroupLockSet(groupId, opStatus, isLocked));
        }
    }
    ;
+9 −42
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package android.bluetooth;

import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.Manifest.permission.BLUETOOTH_PRIVILEGED;
import static android.bluetooth.BluetoothUtils.executeFromBinder;

import android.annotation.NonNull;
import android.annotation.RequiresNoPermission;
@@ -368,78 +369,44 @@ public final class BluetoothHidDevice implements BluetoothProfile {
        @Override
        public void onAppStatusChanged(BluetoothDevice pluggedDevice, boolean registered) {
            Attributable.setAttributionSource(pluggedDevice, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onAppStatusChanged(pluggedDevice, registered));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(
                    mExecutor, () -> mCallback.onAppStatusChanged(pluggedDevice, registered));
        }

        @Override
        public void onConnectionStateChanged(BluetoothDevice device, int state) {
            Attributable.setAttributionSource(device, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onConnectionStateChanged(device, state));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(mExecutor, () -> mCallback.onConnectionStateChanged(device, state));
        }

        @Override
        public void onGetReport(BluetoothDevice device, byte type, byte id, int bufferSize) {
            Attributable.setAttributionSource(device, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onGetReport(device, type, id, bufferSize));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(mExecutor, () -> mCallback.onGetReport(device, type, id, bufferSize));
        }

        @Override
        public void onSetReport(BluetoothDevice device, byte type, byte id, byte[] data) {
            Attributable.setAttributionSource(device, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onSetReport(device, type, id, data));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(mExecutor, () -> mCallback.onSetReport(device, type, id, data));
        }

        @Override
        public void onSetProtocol(BluetoothDevice device, byte protocol) {
            Attributable.setAttributionSource(device, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onSetProtocol(device, protocol));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(mExecutor, () -> mCallback.onSetProtocol(device, protocol));
        }

        @Override
        public void onInterruptData(BluetoothDevice device, byte reportId, byte[] data) {
            Attributable.setAttributionSource(device, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onInterruptData(device, reportId, data));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(mExecutor, () -> mCallback.onInterruptData(device, reportId, data));
        }

        @Override
        public void onVirtualCableUnplug(BluetoothDevice device) {
            Attributable.setAttributionSource(device, mAttributionSource);
            final long token = clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onVirtualCableUnplug(device));
            } finally {
                restoreCallingIdentity(token);
            }
            executeFromBinder(mExecutor, () -> mCallback.onVirtualCableUnplug(device));
        }
    }

+9 −37
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ package android.bluetooth;

import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.Manifest.permission.BLUETOOTH_PRIVILEGED;
import static android.bluetooth.BluetoothUtils.executeFromBinder;

import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -29,7 +30,6 @@ import android.annotation.SuppressLint;
import android.bluetooth.annotations.RequiresBluetoothConnectPermission;
import android.content.AttributionSource;
import android.content.Context;
import android.os.Binder;
import android.os.IBinder;
import android.os.ParcelUuid;
import android.os.RemoteException;
@@ -306,52 +306,29 @@ public final class BluetoothLeCallControl implements BluetoothProfile {

        @Override
        public void onAcceptCall(int requestId, ParcelUuid uuid) {
            final long identityToken = Binder.clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onAcceptCall(requestId, uuid.getUuid()));
            } finally {
                Binder.restoreCallingIdentity(identityToken);
            }
            executeFromBinder(mExecutor, () -> mCallback.onAcceptCall(requestId, uuid.getUuid()));
        }

        @Override
        public void onTerminateCall(int requestId, ParcelUuid uuid) {
            final long identityToken = Binder.clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onTerminateCall(requestId, uuid.getUuid()));
            } finally {
                Binder.restoreCallingIdentity(identityToken);
            }
            executeFromBinder(
                    mExecutor, () -> mCallback.onTerminateCall(requestId, uuid.getUuid()));
        }

        @Override
        public void onHoldCall(int requestId, ParcelUuid uuid) {
            final long identityToken = Binder.clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onHoldCall(requestId, uuid.getUuid()));
            } finally {
                Binder.restoreCallingIdentity(identityToken);
            }
            executeFromBinder(mExecutor, () -> mCallback.onHoldCall(requestId, uuid.getUuid()));
        }

        @Override
        public void onUnholdCall(int requestId, ParcelUuid uuid) {
            final long identityToken = Binder.clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onUnholdCall(requestId, uuid.getUuid()));
            } finally {
                Binder.restoreCallingIdentity(identityToken);
            }
            executeFromBinder(mExecutor, () -> mCallback.onUnholdCall(requestId, uuid.getUuid()));
        }

        @Override
        public void onPlaceCall(int requestId, ParcelUuid uuid, String uri) {
            final long identityToken = Binder.clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onPlaceCall(requestId, uuid.getUuid(), uri));
            } finally {
                Binder.restoreCallingIdentity(identityToken);
            }
            executeFromBinder(
                    mExecutor, () -> mCallback.onPlaceCall(requestId, uuid.getUuid(), uri));
        }

        @Override
@@ -361,12 +338,7 @@ public final class BluetoothLeCallControl implements BluetoothProfile {
                uuids.add(parcelUuid.getUuid());
            }

            final long identityToken = Binder.clearCallingIdentity();
            try {
                mExecutor.execute(() -> mCallback.onJoinCalls(requestId, uuids));
            } finally {
                Binder.restoreCallingIdentity(identityToken);
            }
            executeFromBinder(mExecutor, () -> mCallback.onJoinCalls(requestId, uuids));
        }
    }
    ;
+3 −2
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import static android.Manifest.permission.BLUETOOTH_CONNECT;
import static android.Manifest.permission.BLUETOOTH_PRIVILEGED;
import static android.Manifest.permission.TETHER_PRIVILEGED;
import static android.annotation.SystemApi.Client.MODULE_LIBRARIES;
import static android.bluetooth.BluetoothUtils.executeFromBinder;

import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -552,13 +553,13 @@ public final class BluetoothPan implements BluetoothProfile {
                        @Override
                        @RequiresNoPermission
                        public void onAvailable(String iface) {
                            executor.execute(() -> callback.onAvailable(iface));
                            executeFromBinder(executor, () -> callback.onAvailable(iface));
                        }

                        @Override
                        @RequiresNoPermission
                        public void onUnavailable() {
                            executor.execute(() -> callback.onUnavailable());
                            executeFromBinder(executor, () -> callback.onUnavailable());
                        }
                    };
            try {
Loading