[BT Broadcast Sink] Add the function for leave and scan QRcode buttons
Add function for 'leave broadcast' button Add function for 'Scan QR code' button Set 'level broadcast' button gray out when device does not have broadcast source Bug: 228259065 Test: build pass and manually test Change-Id: Iab4a45e73f49c3f755b95ea3fa38872daac7e745
This commit is contained in:
@@ -75,6 +75,7 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
|
|||||||
CachedBluetoothDevice mCachedDevice;
|
CachedBluetoothDevice mCachedDevice;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
PreferenceCategory mBroadcastSourceListCategory;
|
PreferenceCategory mBroadcastSourceListCategory;
|
||||||
|
BluetoothFindBroadcastsHeaderController mBluetoothFindBroadcastsHeaderController;
|
||||||
private LocalBluetoothLeBroadcastAssistant mLeBroadcastAssistant;
|
private LocalBluetoothLeBroadcastAssistant mLeBroadcastAssistant;
|
||||||
private BluetoothBroadcastSourcePreference mSelectedPreference;
|
private BluetoothBroadcastSourcePreference mSelectedPreference;
|
||||||
private Executor mExecutor;
|
private Executor mExecutor;
|
||||||
@@ -93,7 +94,6 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
|
|||||||
@Override
|
@Override
|
||||||
public void onSearchStartFailed(int reason) {
|
public void onSearchStartFailed(int reason) {
|
||||||
Log.d(TAG, "onSearchStartFailed: " + reason);
|
Log.d(TAG, "onSearchStartFailed: " + reason);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -240,6 +240,28 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
|
|||||||
return SettingsEnums.PAGE_UNKNOWN;
|
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
|
@Override
|
||||||
protected String getLogTag() {
|
protected String getLogTag() {
|
||||||
return TAG;
|
return TAG;
|
||||||
@@ -256,13 +278,18 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
|
|||||||
|
|
||||||
if (mCachedDevice != null) {
|
if (mCachedDevice != null) {
|
||||||
Lifecycle lifecycle = getSettingsLifecycle();
|
Lifecycle lifecycle = getSettingsLifecycle();
|
||||||
controllers.add(new BluetoothFindBroadcastsHeaderController(context, this,
|
mBluetoothFindBroadcastsHeaderController = new BluetoothFindBroadcastsHeaderController(
|
||||||
mCachedDevice, lifecycle, mManager));
|
context, this, mCachedDevice, lifecycle, mManager);
|
||||||
|
controllers.add(mBluetoothFindBroadcastsHeaderController);
|
||||||
}
|
}
|
||||||
return controllers;
|
return controllers;
|
||||||
}
|
}
|
||||||
|
|
||||||
private LocalBluetoothLeBroadcastAssistant getLeBroadcastAssistant() {
|
/**
|
||||||
|
* Gets the LocalBluetoothLeBroadcastAssistant
|
||||||
|
* @return the LocalBluetoothLeBroadcastAssistant
|
||||||
|
*/
|
||||||
|
public LocalBluetoothLeBroadcastAssistant getLeBroadcastAssistant() {
|
||||||
if (mManager == null) {
|
if (mManager == null) {
|
||||||
Log.w(TAG, "getLeBroadcastAssistant: LocalBluetoothManager is null!");
|
Log.w(TAG, "getLeBroadcastAssistant: LocalBluetoothManager is null!");
|
||||||
return null;
|
return null;
|
||||||
@@ -292,6 +319,11 @@ public class BluetoothFindBroadcastsFragment extends RestrictedDashboardFragment
|
|||||||
}
|
}
|
||||||
item.updateMetadataAndRefreshUi(source, isConnected);
|
item.updateMetadataAndRefreshUi(source, isConnected);
|
||||||
item.setOrder(isConnected ? 0 : 1);
|
item.setOrder(isConnected ? 0 : 1);
|
||||||
|
|
||||||
|
//refresh the header
|
||||||
|
if (mBluetoothFindBroadcastsHeaderController != null) {
|
||||||
|
mBluetoothFindBroadcastsHeaderController.refreshUi();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private BluetoothBroadcastSourcePreference createBluetoothBroadcastSourcePreference(
|
private BluetoothBroadcastSourcePreference createBluetoothBroadcastSourcePreference(
|
||||||
|
@@ -16,22 +16,24 @@
|
|||||||
|
|
||||||
package com.android.settings.bluetooth;
|
package com.android.settings.bluetooth;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothProfile;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.content.Intent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import androidx.preference.PreferenceCategory;
|
import androidx.preference.PreferenceCategory;
|
||||||
import androidx.preference.PreferenceFragmentCompat;
|
|
||||||
import androidx.preference.PreferenceScreen;
|
import androidx.preference.PreferenceScreen;
|
||||||
|
|
||||||
import com.android.settings.R;
|
import com.android.settings.R;
|
||||||
|
import com.android.settingslib.bluetooth.BluetoothBroadcastUtils;
|
||||||
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
|
||||||
|
import com.android.settingslib.bluetooth.LocalBluetoothLeBroadcastAssistant;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||||
import com.android.settingslib.bluetooth.LocalBluetoothProfileManager;
|
|
||||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||||
|
import com.android.settingslib.qrcode.QrCodeScanModeActivity;
|
||||||
import com.android.settingslib.widget.LayoutPreference;
|
import com.android.settingslib.widget.LayoutPreference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -52,11 +54,12 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon
|
|||||||
LinearLayout mBtnBroadcastLayout;
|
LinearLayout mBtnBroadcastLayout;
|
||||||
Button mBtnLeaveBroadcast;
|
Button mBtnLeaveBroadcast;
|
||||||
Button mBtnScanQrCode;
|
Button mBtnScanQrCode;
|
||||||
|
BluetoothFindBroadcastsFragment mBluetoothFindBroadcastsFragment;
|
||||||
public BluetoothFindBroadcastsHeaderController(Context context,
|
public BluetoothFindBroadcastsHeaderController(Context context,
|
||||||
PreferenceFragmentCompat fragment, CachedBluetoothDevice device, Lifecycle lifecycle,
|
BluetoothFindBroadcastsFragment fragment, CachedBluetoothDevice device,
|
||||||
LocalBluetoothManager bluetoothManager) {
|
Lifecycle lifecycle, LocalBluetoothManager bluetoothManager) {
|
||||||
super(context, fragment, device, lifecycle);
|
super(context, fragment, device, lifecycle);
|
||||||
|
mBluetoothFindBroadcastsFragment = fragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -101,20 +104,41 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon
|
|||||||
mBtnFindBroadcast.setVisibility(View.VISIBLE);
|
mBtnFindBroadcast.setVisibility(View.VISIBLE);
|
||||||
mBtnBroadcastLayout.setVisibility(View.GONE);
|
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() {
|
private void scanBroadcastSource() {
|
||||||
// TODO(b/228258236) : Call the LocalBluetoothLeBroadcastAssistant
|
// TODO(b/231543455) : Using the BluetoothDeviceUpdater to refactor it.
|
||||||
// to start searching for source
|
if (mBluetoothFindBroadcastsFragment == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mBluetoothFindBroadcastsFragment.scanBroadcastSource();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void leaveBroadcastSession() {
|
private void leaveBroadcastSession() {
|
||||||
// TODO(b/228258236) : Call the LocalBluetoothLeBroadcastAssistant
|
if (mBluetoothFindBroadcastsFragment == null) {
|
||||||
// to leave the broadcast session
|
return;
|
||||||
|
}
|
||||||
|
mBluetoothFindBroadcastsFragment.leaveBroadcastSession();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void launchQrCodeScanner() {
|
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
|
@Override
|
||||||
@@ -128,4 +152,11 @@ public class BluetoothFindBroadcastsHeaderController extends BluetoothDetailsCon
|
|||||||
public String getPreferenceKey() {
|
public String getPreferenceKey() {
|
||||||
return KEY_BROADCAST_HEADER;
|
return KEY_BROADCAST_HEADER;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Updates the UI
|
||||||
|
*/
|
||||||
|
public void refreshUi() {
|
||||||
|
updateHeaderLayout();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user