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

Commit 286682ec authored by SongFerng Wang's avatar SongFerng Wang Committed by Android (Google) Code Review
Browse files

Merge "[BT Broadcast Sink] Add the function for leave and scan QRcode buttons" into tm-dev

parents 6e4579a8 e8bb9c9b
Loading
Loading
Loading
Loading
+36 −4
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
    CachedBluetoothDevice mCachedDevice;
    @VisibleForTesting
    PreferenceCategory mBroadcastSourceListCategory;
    BluetoothFindBroadcastsHeaderController mBluetoothFindBroadcastsHeaderController;
    private LocalBluetoothLeBroadcastAssistant mLeBroadcastAssistant;
    private BluetoothBroadcastSourcePreference mSelectedPreference;
    private Executor mExecutor;
@@ -93,7 +94,6 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
                @Override
                public void onSearchStartFailed(int reason) {
                    Log.d(TAG, "onSearchStartFailed: " + reason);

                }

                @Override
@@ -240,6 +240,28 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
        return SettingsEnums.PAGE_UNKNOWN;
    }

    /**
     * Starts to scan broadcast source by the BluetoothLeBroadcastAssistant.
     */
    public void scanBroadcastSource() {
        if (mLeBroadcastAssistant == null) {
            Log.w(TAG, "scanBroadcastSource: LeBroadcastAssistant is null!");
            return;
        }
        mLeBroadcastAssistant.startSearchingForSources(getScanFilter());
    }

    /**
     * Leaves the broadcast source by the BluetoothLeBroadcastAssistant.
     */
    public void leaveBroadcastSession() {
        if (mLeBroadcastAssistant == null || mCachedDevice == null) {
            Log.w(TAG, "leaveBroadcastSession: LeBroadcastAssistant or CachedDevice is null!");
            return;
        }
        mLeBroadcastAssistant.removeSource(mCachedDevice.getDevice(), getSourceId());
    }

    @Override
    protected String getLogTag() {
        return TAG;
@@ -256,13 +278,18 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment

        if (mCachedDevice != null) {
            Lifecycle lifecycle = getSettingsLifecycle();
            controllers.add(new BluetoothFindBroadcastsHeaderController(context, this,
                    mCachedDevice, lifecycle, mManager));
            mBluetoothFindBroadcastsHeaderController = new BluetoothFindBroadcastsHeaderController(
                    context, this, mCachedDevice, lifecycle, mManager);
            controllers.add(mBluetoothFindBroadcastsHeaderController);
        }
        return controllers;
    }

    private LocalBluetoothLeBroadcastAssistant getLeBroadcastAssistant() {
    /**
     * Gets the LocalBluetoothLeBroadcastAssistant
     * @return the LocalBluetoothLeBroadcastAssistant
     */
    public LocalBluetoothLeBroadcastAssistant getLeBroadcastAssistant() {
        if (mManager == null) {
            Log.w(TAG, "getLeBroadcastAssistant: LocalBluetoothManager is null!");
            return null;
@@ -292,6 +319,11 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
        }
        item.updateMetadataAndRefreshUi(source, isConnected);
        item.setOrder(isConnected ? 0 : 1);

        //refresh the header
        if (mBluetoothFindBroadcastsHeaderController != null) {
            mBluetoothFindBroadcastsHeaderController.refreshUi();
        }
    }

    private BluetoothBroadcastSourcePreference createBluetoothBroadcastSourcePreference(
+42 −11
Original line number Diff line number Diff line
@@ -16,22 +16,24 @@

package com.android.settings.bluetooth;

import android.bluetooth.BluetoothProfile;
import android.content.Context;
import android.util.Log;
import android.content.Intent;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;

import androidx.preference.PreferenceCategory;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;

import com.android.settings.R;
import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.qrcode.QrCodeScanModeActivity;
import com.android.settingslib.widget.LayoutPreference;

/**
@@ -52,11 +54,12 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon
    LinearLayout mBtnBroadcastLayout;
    Button mBtnLeaveBroadcast;
    Button mBtnScanQrCode;

    BluetoothFindBroadcastsFragment mBluetoothFindBroadcastsFragment;
    public BluetoothFindBroadcastsHeaderController(Context context,
            PreferenceFragmentCompat fragment, CachedBluetoothDevice device, Lifecycle lifecycle,
            LocalBluetoothManager bluetoothManager) {
            BluetoothFindBroadcastsFragment fragment, CachedBluetoothDevice device,
            Lifecycle lifecycle, LocalBluetoothManager bluetoothManager) {
        super(context, fragment, device, lifecycle);
        mBluetoothFindBroadcastsFragment = fragment;
    }

    @Override
@@ -101,20 +104,41 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon
            mBtnFindBroadcast.setVisibility(View.VISIBLE);
            mBtnBroadcastLayout.setVisibility(View.GONE);
        }

        mBtnLeaveBroadcast.setEnabled(false);
        if (mBluetoothFindBroadcastsFragment != null && mCachedDevice != null) {
            LocalBluetoothLeBroadcastAssistant broadcastAssistant =
                    mBluetoothFindBroadcastsFragment.getLeBroadcastAssistant();
            if (broadcastAssistant != null
                    && broadcastAssistant.getConnectionStatus(mCachedDevice.getDevice())
                    == BluetoothProfile.STATE_CONNECTED) {
                mBtnLeaveBroadcast.setEnabled(true);
            }
        }
    }

    private void scanBroadcastSource() {
        // TODO(b/228258236) : Call the LocalBluetoothLeBroadcastAssistant
        //  to start searching for source
        // TODO(b/231543455) : Using the BluetoothDeviceUpdater to refactor it.
        if (mBluetoothFindBroadcastsFragment == null) {
            return;
        }
        mBluetoothFindBroadcastsFragment.scanBroadcastSource();
    }

    private void leaveBroadcastSession() {
        // TODO(b/228258236) : Call the LocalBluetoothLeBroadcastAssistant
        //  to leave the broadcast session
        if (mBluetoothFindBroadcastsFragment == null) {
            return;
        }
        mBluetoothFindBroadcastsFragment.leaveBroadcastSession();
    }

    private void launchQrCodeScanner() {
        // TODO(b/228259065) : Launch the QR code scanner page by intent
        final Intent intent = new Intent(mContext, QrCodeScanModeActivity.class);
        intent.setAction(BluetoothBroadcastUtils.ACTION_BLUETOOTH_LE_AUDIO_QR_CODE_SCANNER)
                .putExtra(BluetoothBroadcastUtils.EXTRA_BLUETOOTH_SINK_IS_GROUP, false)
                .putExtra(BluetoothBroadcastUtils.EXTRA_BLUETOOTH_DEVICE_SINK,
                        mCachedDevice.getDevice());
        mContext.startActivity(intent);
    }

    @Override
@@ -128,4 +152,11 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon
    public String getPreferenceKey() {
        return KEY_BROADCAST_HEADER;
    }

    /**
     * Updates the UI
     */
    public void refreshUi() {
        updateHeaderLayout();
    }
}