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

Commit 4107895f authored by chelseahao's avatar chelseahao
Browse files

Start scanning with filter when entering WAIT_FOR_SYNC state, then restart...

Start scanning with filter when entering WAIT_FOR_SYNC state, then restart scan without filter when exiting.

Flag: com.android.settingslib.flags.audio_stream_scan_with_filter
Test: atest
Bug: 395978182
Change-Id: I1c1d26c8a8a14a023fd8817cbc1a274ab9d48e57
parent 52ba7e4d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -40,10 +40,11 @@ class AddSourceBadCodeState extends SyncedState {
    }

    @Override
    void performAction(
    void onEnter(
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {
            AudioStreamsHelper helper,
            AudioStreamScanHelper scanHelper) {
        mMetricsFeatureProvider.action(
                preference.getContext(),
                SettingsEnums.ACTION_AUDIO_STREAM_JOIN_FAILED_BAD_CODE,
+3 −2
Original line number Diff line number Diff line
@@ -40,10 +40,11 @@ class AddSourceFailedState extends SyncedState {
    }

    @Override
    void performAction(
    void onEnter(
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {
            AudioStreamsHelper helper,
            AudioStreamScanHelper scanHelper) {
        mMetricsFeatureProvider.action(
                preference.getContext(),
                SettingsEnums.ACTION_AUDIO_STREAM_JOIN_FAILED_OTHER,
+3 −2
Original line number Diff line number Diff line
@@ -47,10 +47,11 @@ class AddSourceWaitForResponseState extends AudioStreamStateHandler {
    }

    @Override
    void performAction(
    void onEnter(
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {
            AudioStreamsHelper helper,
            AudioStreamScanHelper scanHelper) {
        mHandler.removeCallbacksAndMessages(preference);
        var metadata = preference.getAudioStreamMetadata();
        if (metadata != null) {
+16 −4
Original line number Diff line number Diff line
@@ -48,9 +48,11 @@ class AudioStreamStateHandler {
    AudioStreamStateHandler() {}

    void handleStateChange(
            @Nullable AudioStreamStateHandler prevStateHandler,
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {
            AudioStreamsHelper helper,
            AudioStreamScanHelper scanHelper) {
        var newState = getStateEnum();
        if (preference.getAudioStreamState() == newState) {
            return;
@@ -67,9 +69,13 @@ class AudioStreamStateHandler {
                            + " to state : "
                            + newState);
        }
        if (prevStateHandler != null) {
            prevStateHandler.onExit(scanHelper);
        }

        preference.setAudioStreamState(newState);

        performAction(preference, controller, helper);
        onEnter(preference, controller, helper, scanHelper);

        // Update UI
        ThreadUtils.postOnMainThread(
@@ -114,10 +120,16 @@ class AudioStreamStateHandler {
     * be optionally overridden by subclasses to provide custom behavior based on the audio stream
     * state change.
     */
    void performAction(
    void onEnter(
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {}
            AudioStreamsHelper helper,
            AudioStreamScanHelper scanHelper) {}

    /**
     * Perform action when exiting one state.
     */
    void onExit(AudioStreamScanHelper scanHelper) {}

    /**
     * The preference summary for the audio stream state (e.g, Scanning...) This method is intended
+27 −16
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ public class AudioStreamsProgressCategoryController extends BasePreferenceContro
        DefaultLifecycleObserver, AudioStreamsProgressCategoryCallback.SourceStateListener {
    private static final String TAG = "AudioStreamsProgressCategoryController";
    private static final boolean DEBUG = BluetoothUtils.D;
    @VisibleForTesting static final int UNSET_BROADCAST_ID = -1;
    static final int UNSET_BROADCAST_ID = -1;

    @VisibleForTesting
    final BluetoothCallback mBluetoothCallback =
@@ -734,21 +734,14 @@ public class AudioStreamsProgressCategoryController extends BasePreferenceContro

    @VisibleForTesting
    void moveToState(AudioStreamPreference preference, AudioStreamState state) {
        AudioStreamStateHandler stateHandler =
                switch (state) {
                    case SYNCED -> SyncedState.getInstance();
                    case WAIT_FOR_SYNC -> WaitForSyncState.getInstance();
                    case ADD_SOURCE_WAIT_FOR_RESPONSE ->
                            AddSourceWaitForResponseState.getInstance();
                    case ADD_SOURCE_BAD_CODE -> AddSourceBadCodeState.getInstance();
                    case ADD_SOURCE_FAILED -> AddSourceFailedState.getInstance();
                    case SOURCE_PRESENT -> SourcePresentState.getInstance();
                    case SOURCE_ADDED -> SourceAddedState.getInstance();
                    case SOURCE_LOST -> SourceLostState.getInstance();
                    default -> throw new IllegalArgumentException("Unsupported state: " + state);
                };
        AudioStreamStateHandler stateHandler = getStateHandler(state);
        AudioStreamStateHandler prevStateHandler = getStateHandler(
                preference.getAudioStreamState());

        stateHandler.handleStateChange(preference, this, mAudioStreamsHelper);
        if (stateHandler != null) {
            stateHandler.handleStateChange(prevStateHandler, preference, this, mAudioStreamsHelper,
                mScanHelper);
        }

        // Update UI with the updated preference
        AudioSharingUtils.postOnMainThread(
@@ -760,6 +753,24 @@ public class AudioStreamsProgressCategoryController extends BasePreferenceContro
                });
    }

    private static @Nullable AudioStreamStateHandler getStateHandler(AudioStreamState stateEnum) {
        var state = switch (stateEnum) {
            case SYNCED -> SyncedState.getInstance();
            case WAIT_FOR_SYNC -> WaitForSyncState.getInstance();
            case ADD_SOURCE_WAIT_FOR_RESPONSE -> AddSourceWaitForResponseState.getInstance();
            case ADD_SOURCE_BAD_CODE -> AddSourceBadCodeState.getInstance();
            case ADD_SOURCE_FAILED -> AddSourceFailedState.getInstance();
            case SOURCE_PRESENT -> SourcePresentState.getInstance();
            case SOURCE_ADDED -> SourceAddedState.getInstance();
            case SOURCE_LOST -> SourceLostState.getInstance();
            default -> null;
        };
        if (state == null) {
            Log.d(TAG, "Unsupported state:" + stateEnum);
        }
        return state;
    }

    private AudioStreamsDialogFragment.DialogBuilder getNoLeDeviceDialog() {
        return new AudioStreamsDialogFragment.DialogBuilder(mContext)
                .setTitle(mContext.getString(R.string.audio_streams_dialog_no_le_device_title))
Loading