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

Commit a3b1638c authored by chelseahao's avatar chelseahao Committed by Chelsea Hao
Browse files

[Audiosharing] Add logging 2.

Test: atest -c com.android.settings.connecteddevice.audiosharing.audiostreams
Bug: 308368124
Change-Id: I50fc57427aa135a13566c4627ba193aed9d73e0d
parent f017332c
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.connecteddevice.audiosharing.audiostreams;

import android.app.settings.SettingsEnums;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

@@ -37,6 +39,17 @@ class AddSourceBadCodeState extends SyncedState {
        return sInstance;
    }

    @Override
    void performAction(
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {
        mMetricsFeatureProvider.action(
                preference.getContext(),
                SettingsEnums.ACTION_AUDIO_STREAM_JOIN_FAILED_BAD_CODE,
                preference.getSourceOriginForLogging().ordinal());
    }

    @Override
    int getSummary() {
        return AUDIO_STREAM_ADD_SOURCE_BAD_CODE_STATE_SUMMARY;
+13 −0
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.settings.connecteddevice.audiosharing.audiostreams;

import android.app.settings.SettingsEnums;

import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

@@ -37,6 +39,17 @@ class AddSourceFailedState extends SyncedState {
        return sInstance;
    }

    @Override
    void performAction(
            AudioStreamPreference preference,
            AudioStreamsProgressCategoryController controller,
            AudioStreamsHelper helper) {
        mMetricsFeatureProvider.action(
                preference.getContext(),
                SettingsEnums.ACTION_AUDIO_STREAM_JOIN_FAILED_OTHER,
                preference.getSourceOriginForLogging().ordinal());
    }

    @Override
    int getSummary() {
        return AUDIO_STREAM_ADD_SOURCE_FAILED_STATE_SUMMARY;
+9 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.settings.connecteddevice.audiosharing.audiostreams;

import android.app.AlertDialog;
import android.app.settings.SettingsEnums;
import android.content.Context;

import androidx.annotation.Nullable;
@@ -52,6 +53,10 @@ class AddSourceWaitForResponseState extends AudioStreamStateHandler {
        var metadata = preference.getAudioStreamMetadata();
        if (metadata != null) {
            helper.addSource(metadata);
            mMetricsFeatureProvider.action(
                    preference.getContext(),
                    SettingsEnums.ACTION_AUDIO_STREAM_JOIN,
                    preference.getSourceOriginForLogging().ordinal());
            // Cache the metadata that used for add source, if source is added successfully, we
            // will save it persistently.
            mAudioStreamsRepository.cacheMetadata(metadata);
@@ -66,6 +71,10 @@ class AddSourceWaitForResponseState extends AudioStreamStateHandler {
                                && preference.getAudioStreamState() == getStateEnum()) {
                            controller.handleSourceFailedToConnect(
                                    preference.getAudioStreamBroadcastId());
                            mMetricsFeatureProvider.action(
                                    preference.getContext(),
                                    SettingsEnums.ACTION_AUDIO_STREAM_JOIN_FAILED_TIMEOUT,
                                    preference.getSourceOriginForLogging().ordinal());
                            ThreadUtils.postOnMainThread(
                                    () -> {
                                        if (controller.getFragment() != null) {
+82 −48
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settings.connecteddevice.audiosharing.audiostreams;

import android.app.settings.SettingsEnums;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothLeBroadcastAssistant;
import android.bluetooth.BluetoothLeBroadcastMetadata;
@@ -33,7 +34,9 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.bluetooth.Utils;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.ThreadUtils;
import com.android.settingslib.widget.ActionButtonsPreference;

@@ -44,6 +47,7 @@ public class AudioStreamButtonController extends BasePreferenceController
        implements DefaultLifecycleObserver {
    private static final String TAG = "AudioStreamButtonController";
    private static final String KEY = "audio_stream_button";
    private static final int SOURCE_ORIGIN_REPOSITORY = SourceOriginForLogging.REPOSITORY.ordinal();
    private final BluetoothLeBroadcastAssistant.Callback mBroadcastAssistantCallback =
            new AudioStreamsBroadcastAssistantCallback() {
                @Override
@@ -56,6 +60,8 @@ public class AudioStreamButtonController extends BasePreferenceController
                public void onSourceRemoveFailed(BluetoothDevice sink, int sourceId, int reason) {
                    super.onSourceRemoveFailed(sink, sourceId, reason);
                    updateButton();
                    mMetricsFeatureProvider.action(
                            mContext, SettingsEnums.ACTION_AUDIO_STREAM_LEAVE_FAILED);
                }

                @Override
@@ -66,6 +72,10 @@ public class AudioStreamButtonController extends BasePreferenceController
                    super.onReceiveStateChanged(sink, sourceId, state);
                    if (AudioStreamsHelper.isConnected(state)) {
                        updateButton();
                        mMetricsFeatureProvider.action(
                                mContext,
                                SettingsEnums.ACTION_AUDIO_STREAM_JOIN_SUCCEED,
                                SOURCE_ORIGIN_REPOSITORY);
                    }
                }

@@ -74,6 +84,10 @@ public class AudioStreamButtonController extends BasePreferenceController
                        BluetoothDevice sink, BluetoothLeBroadcastMetadata source, int reason) {
                    super.onSourceAddFailed(sink, source, reason);
                    updateButton();
                    mMetricsFeatureProvider.action(
                            mContext,
                            SettingsEnums.ACTION_AUDIO_STREAM_JOIN_FAILED_OTHER,
                            SOURCE_ORIGIN_REPOSITORY);
                }

                @Override
@@ -88,6 +102,7 @@ public class AudioStreamButtonController extends BasePreferenceController
    private final Executor mExecutor;
    private final AudioStreamsHelper mAudioStreamsHelper;
    private final @Nullable LocalBluetoothLeBroadcastAssistant mLeBroadcastAssistant;
    private final MetricsFeatureProvider mMetricsFeatureProvider;
    private @Nullable ActionButtonsPreference mPreference;
    private int mBroadcastId = -1;

@@ -96,6 +111,7 @@ public class AudioStreamButtonController extends BasePreferenceController
        mExecutor = Executors.newSingleThreadExecutor();
        mAudioStreamsHelper = new AudioStreamsHelper(Utils.getLocalBtManager(context));
        mLeBroadcastAssistant = mAudioStreamsHelper.getLeBroadcastAssistant();
        mMetricsFeatureProvider = FeatureFactory.getFeatureFactory().getMetricsFeatureProvider();
    }

    @Override
@@ -124,10 +140,34 @@ public class AudioStreamButtonController extends BasePreferenceController
    }

    private void updateButton() {
        if (mPreference != null) {
            if (mAudioStreamsHelper.getAllConnectedSources().stream()
        if (mPreference == null) {
            Log.w(TAG, "updateButton(): preference is null!");
            return;
        }
        boolean isConnected =
                mAudioStreamsHelper.getAllConnectedSources().stream()
                        .map(BluetoothLeBroadcastReceiveState::getBroadcastId)
                    .anyMatch(connectedBroadcastId -> connectedBroadcastId == mBroadcastId)) {
                        .anyMatch(connectedBroadcastId -> connectedBroadcastId == mBroadcastId);

        View.OnClickListener onClickListener;

        if (isConnected) {
            onClickListener =
                    unused ->
                            ThreadUtils.postOnBackgroundThread(
                                    () -> {
                                        mAudioStreamsHelper.removeSource(mBroadcastId);
                                        mMetricsFeatureProvider.action(
                                                mContext,
                                                SettingsEnums
                                                        .ACTION_AUDIO_STREAM_LEAVE_BUTTON_CLICK);
                                        ThreadUtils.postOnMainThread(
                                                () -> {
                                                    if (mPreference != null) {
                                                        mPreference.setButton1Enabled(false);
                                                    }
                                                });
                                    });
            ThreadUtils.postOnMainThread(
                    () -> {
                        if (mPreference != null) {
@@ -136,17 +176,11 @@ public class AudioStreamButtonController extends BasePreferenceController
                                    .setButton1Text(R.string.audio_streams_disconnect)
                                    .setButton1Icon(
                                            com.android.settings.R.drawable.ic_settings_close)
                                        .setButton1OnClickListener(
                                                unused -> {
                                                    if (mPreference != null) {
                                                        mPreference.setButton1Enabled(false);
                                                    }
                                                    mAudioStreamsHelper.removeSource(mBroadcastId);
                                                });
                                    .setButton1OnClickListener(onClickListener);
                        }
                    });
        } else {
                View.OnClickListener clickToRejoin =
            onClickListener =
                    unused ->
                            ThreadUtils.postOnBackgroundThread(
                                    () -> {
@@ -155,11 +189,14 @@ public class AudioStreamButtonController extends BasePreferenceController
                                                        mContext, mBroadcastId);
                                        if (metadata != null) {
                                            mAudioStreamsHelper.addSource(metadata);
                                            mMetricsFeatureProvider.action(
                                                    mContext,
                                                    SettingsEnums.ACTION_AUDIO_STREAM_JOIN,
                                                    SOURCE_ORIGIN_REPOSITORY);
                                            ThreadUtils.postOnMainThread(
                                                    () -> {
                                                        if (mPreference != null) {
                                                                mPreference.setButton1Enabled(
                                                                        false);
                                                            mPreference.setButton1Enabled(false);
                                                        }
                                                    });
                                        }
@@ -171,13 +208,10 @@ public class AudioStreamButtonController extends BasePreferenceController
                            mPreference
                                    .setButton1Text(R.string.audio_streams_connect)
                                    .setButton1Icon(com.android.settings.R.drawable.ic_add_24dp)
                                        .setButton1OnClickListener(clickToRejoin);
                                    .setButton1OnClickListener(onClickListener);
                        }
                    });
        }
        } else {
            Log.w(TAG, "updateButton(): preference is null!");
        }
    }

    @Override
+19 −3
Original line number Diff line number Diff line
@@ -107,6 +107,12 @@ class AudioStreamPreference extends TwoTargetPreference {
                : AudioStreamsProgressCategoryController.AudioStreamState.UNKNOWN;
    }

    SourceOriginForLogging getSourceOriginForLogging() {
        return mAudioStream != null
                ? mAudioStream.getSourceOriginForLogging()
                : SourceOriginForLogging.UNKNOWN;
    }

    @Override
    protected boolean shouldHideSecondTarget() {
        return mIsConnected || !mIsEncrypted;
@@ -130,11 +136,13 @@ class AudioStreamPreference extends TwoTargetPreference {
    }

    static AudioStreamPreference fromMetadata(
            Context context, BluetoothLeBroadcastMetadata source) {
            Context context,
            BluetoothLeBroadcastMetadata source,
            SourceOriginForLogging sourceOriginForLogging) {
        AudioStreamPreference preference = new AudioStreamPreference(context, /* attrs= */ null);
        preference.setIsEncrypted(source.isEncrypted());
        preference.setTitle(AudioStreamsHelper.getBroadcastName(source));
        preference.setAudioStream(new AudioStream(source));
        preference.setAudioStream(new AudioStream(source, sourceOriginForLogging));
        return preference;
    }

@@ -158,11 +166,15 @@ class AudioStreamPreference extends TwoTargetPreference {
        private static final int UNAVAILABLE = -1;
        @Nullable private BluetoothLeBroadcastMetadata mMetadata;
        @Nullable private BluetoothLeBroadcastReceiveState mReceiveState;
        private SourceOriginForLogging mSourceOriginForLogging = SourceOriginForLogging.UNKNOWN;
        private AudioStreamsProgressCategoryController.AudioStreamState mState =
                AudioStreamsProgressCategoryController.AudioStreamState.UNKNOWN;

        private AudioStream(BluetoothLeBroadcastMetadata metadata) {
        private AudioStream(
                BluetoothLeBroadcastMetadata metadata,
                SourceOriginForLogging sourceOriginForLogging) {
            mMetadata = metadata;
            mSourceOriginForLogging = sourceOriginForLogging;
        }

        private AudioStream(BluetoothLeBroadcastReceiveState receiveState) {
@@ -191,6 +203,10 @@ class AudioStreamPreference extends TwoTargetPreference {
            return mState;
        }

        private SourceOriginForLogging getSourceOriginForLogging() {
            return mSourceOriginForLogging;
        }

        @Nullable
        private BluetoothLeBroadcastMetadata getMetadata() {
            return mMetadata;
Loading