Merge "[Audiosharing] Move entry preference out of group category" into main

This commit is contained in:
Yiyi Shen
2025-01-22 01:09:08 -08:00
committed by Android (Google) Code Review
5 changed files with 187 additions and 48 deletions

View File

@@ -78,8 +78,6 @@ public class AudioSharingDevicePreferenceController extends BasePreferenceContro
private static final String TAG = "AudioSharingDevicePrefController";
private static final String KEY = "audio_sharing_device_list";
private static final String KEY_AUDIO_SHARING_SETTINGS =
"connected_device_audio_sharing_settings";
@Nullable private final LocalBluetoothManager mBtManager;
@Nullable private final CachedBluetoothDeviceManager mDeviceManager;
@@ -89,7 +87,6 @@ public class AudioSharingDevicePreferenceController extends BasePreferenceContro
private final Executor mExecutor;
private final MetricsFeatureProvider mMetricsFeatureProvider;
@Nullable private PreferenceGroup mPreferenceGroup;
@Nullable private Preference mAudioSharingSettingsPreference;
@Nullable private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
@Nullable private DashboardFragment mFragment;
@Nullable private AudioSharingDialogHandler mDialogHandler;
@@ -280,13 +277,8 @@ public class AudioSharingDevicePreferenceController extends BasePreferenceContro
super.displayPreference(screen);
mPreferenceGroup = screen.findPreference(KEY);
if (mPreferenceGroup != null) {
mAudioSharingSettingsPreference =
mPreferenceGroup.findPreference(KEY_AUDIO_SHARING_SETTINGS);
mPreferenceGroup.setVisible(false);
}
if (mAudioSharingSettingsPreference != null) {
mAudioSharingSettingsPreference.setVisible(false);
}
if (isAvailable()) {
if (mBluetoothDeviceUpdater != null) {
@@ -320,11 +312,8 @@ public class AudioSharingDevicePreferenceController extends BasePreferenceContro
@Override
public void onDeviceAdded(Preference preference) {
if (mPreferenceGroup != null) {
if (mPreferenceGroup.getPreferenceCount() == 1) {
if (mPreferenceGroup.getPreferenceCount() == 0) {
mPreferenceGroup.setVisible(true);
if (mAudioSharingSettingsPreference != null) {
mAudioSharingSettingsPreference.setVisible(true);
}
}
mPreferenceGroup.addPreference(preference);
}
@@ -334,11 +323,8 @@ public class AudioSharingDevicePreferenceController extends BasePreferenceContro
public void onDeviceRemoved(Preference preference) {
if (mPreferenceGroup != null) {
mPreferenceGroup.removePreference(preference);
if (mPreferenceGroup.getPreferenceCount() == 1) {
if (mPreferenceGroup.getPreferenceCount() == 0) {
mPreferenceGroup.setVisible(false);
if (mAudioSharingSettingsPreference != null) {
mAudioSharingSettingsPreference.setVisible(false);
}
}
}
}

View File

@@ -45,6 +45,9 @@ import java.util.concurrent.Executors;
public class AudioSharingPreferenceController extends BasePreferenceController
implements DefaultLifecycleObserver, BluetoothCallback {
private static final String TAG = "AudioSharingPreferenceController";
private static final String CONNECTED_DEVICES_PREF_KEY =
"connected_device_audio_sharing_settings";
private static final String CONNECTION_PREFERENCES_PREF_KEY = "audio_sharing_settings";
@Nullable private final LocalBluetoothManager mBtManager;
@Nullable private final BluetoothEventManager mEventManager;
@@ -57,7 +60,7 @@ public class AudioSharingPreferenceController extends BasePreferenceController
new BluetoothLeBroadcast.Callback() {
@Override
public void onBroadcastStarted(int reason, int broadcastId) {
refreshSummary();
refreshPreference();
}
@Override
@@ -69,7 +72,7 @@ public class AudioSharingPreferenceController extends BasePreferenceController
@Override
public void onBroadcastStopped(int reason, int broadcastId) {
refreshSummary();
refreshPreference();
}
@Override
@@ -111,6 +114,7 @@ public class AudioSharingPreferenceController extends BasePreferenceController
}
mEventManager.registerCallback(this);
mBroadcast.registerServiceCallBack(mExecutor, mBroadcastCallback);
updateVisibility();
}
@Override
@@ -131,6 +135,13 @@ public class AudioSharingPreferenceController extends BasePreferenceController
public void displayPreference(@NonNull PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
// super.displayPreference set the visibility based on isAvailable()
// immediately set the preference invisible on Connected devices page to avoid the audio
// sharing entrance being shown before updateVisibility(need binder call) take effects.
if (mPreference != null && CONNECTED_DEVICES_PREF_KEY.equals(getPreferenceKey())) {
mPreference.setVisible(false);
}
updateVisibility();
}
@Override
@@ -141,14 +152,51 @@ public class AudioSharingPreferenceController extends BasePreferenceController
@Override
public CharSequence getSummary() {
return BluetoothUtils.isBroadcasting(mBtManager)
? mContext.getString(R.string.audio_sharing_summary_on)
: mContext.getString(R.string.audio_sharing_summary_off);
return switch (getPreferenceKey()) {
case CONNECTION_PREFERENCES_PREF_KEY -> BluetoothUtils.isBroadcasting(mBtManager)
? mContext.getString(R.string.audio_sharing_summary_on)
: mContext.getString(R.string.audio_sharing_summary_off);
default -> "";
};
}
@Override
public void onBluetoothStateChanged(@AdapterState int bluetoothState) {
refreshSummary();
refreshPreference();
}
private void refreshPreference() {
switch (getPreferenceKey()) {
// Audio sharing entrance on Connected devices page has no summary, but its visibility
// will change based on audio sharing state
case CONNECTED_DEVICES_PREF_KEY -> updateVisibility();
// Audio sharing entrance on Connection preferences page always show up, but its summary
// will change based on audio sharing state
case CONNECTION_PREFERENCES_PREF_KEY -> refreshSummary();
}
}
private void updateVisibility() {
if (mPreference == null) {
return;
}
switch (getPreferenceKey()) {
case CONNECTED_DEVICES_PREF_KEY -> {
var unused =
ThreadUtils.postOnBackgroundThread(
() -> {
boolean visible = BluetoothUtils.isBroadcasting(mBtManager);
AudioSharingUtils.postOnMainThread(
mContext,
() -> {
// Check nullability to pass NullAway check
if (mPreference != null) {
mPreference.setVisible(visible);
}
});
});
}
}
}
private void refreshSummary() {