Rearrange bluetooth device details fragment according to config
BUG: 343317785 Test: atest DeviceDetailsFragmentFormatterTest Flag: com.android.settings.flags.enable_bluetooth_device_details_polish Change-Id: I440f85b2c402920e851915ff56fa7b3f5356e807
This commit is contained in:
@@ -43,10 +43,12 @@ import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.view.ViewTreeObserver;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
|
||||
import com.android.settings.R;
|
||||
import com.android.settings.bluetooth.ui.view.DeviceDetailsFragmentFormatter;
|
||||
import com.android.settings.connecteddevice.stylus.StylusDevicesController;
|
||||
import com.android.settings.core.SettingsUIDeviceConfig;
|
||||
import com.android.settings.dashboard.RestrictedDashboardFragment;
|
||||
@@ -60,9 +62,11 @@ import com.android.settingslib.bluetooth.LocalBluetoothManager;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
|
||||
import com.android.settingslib.core.lifecycle.Lifecycle;
|
||||
import com.android.settingslib.core.lifecycle.LifecycleObserver;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment {
|
||||
public static final String KEY_DEVICE_ADDRESS = "device_address";
|
||||
@@ -98,6 +102,8 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
@VisibleForTesting
|
||||
CachedBluetoothDevice mCachedDevice;
|
||||
BluetoothAdapter mBluetoothAdapter;
|
||||
@VisibleForTesting
|
||||
DeviceDetailsFragmentFormatter mFormatter;
|
||||
|
||||
@Nullable
|
||||
InputDevice mInputDevice;
|
||||
@@ -214,18 +220,29 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
finish();
|
||||
return;
|
||||
}
|
||||
use(AdvancedBluetoothDetailsHeaderController.class).init(mCachedDevice, this);
|
||||
use(LeAudioBluetoothDetailsHeaderController.class).init(mCachedDevice, mManager, this);
|
||||
use(KeyboardSettingsPreferenceController.class).init(mCachedDevice);
|
||||
getController(
|
||||
AdvancedBluetoothDetailsHeaderController.class,
|
||||
controller -> controller.init(mCachedDevice, this));
|
||||
getController(
|
||||
LeAudioBluetoothDetailsHeaderController.class,
|
||||
controller -> controller.init(mCachedDevice, mManager, this));
|
||||
getController(
|
||||
KeyboardSettingsPreferenceController.class,
|
||||
controller -> controller.init(mCachedDevice));
|
||||
|
||||
final BluetoothFeatureProvider featureProvider =
|
||||
FeatureFactory.getFeatureFactory().getBluetoothFeatureProvider();
|
||||
final boolean sliceEnabled = DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_SETTINGS_UI,
|
||||
SettingsUIDeviceConfig.BT_SLICE_SETTINGS_ENABLED, true);
|
||||
|
||||
use(BlockingPrefWithSliceController.class).setSliceUri(sliceEnabled
|
||||
? featureProvider.getBluetoothDeviceSettingsUri(mCachedDevice.getDevice())
|
||||
: null);
|
||||
getController(
|
||||
BlockingPrefWithSliceController.class,
|
||||
controller ->
|
||||
controller.setSliceUri(
|
||||
sliceEnabled
|
||||
? featureProvider.getBluetoothDeviceSettingsUri(
|
||||
mCachedDevice.getDevice())
|
||||
: null));
|
||||
|
||||
mManager.getEventManager().registerCallback(mBluetoothCallback);
|
||||
mBluetoothAdapter.addOnMetadataChangedListener(
|
||||
@@ -257,21 +274,35 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
}
|
||||
}
|
||||
mExtraControlUriLoaded |= controlUri != null;
|
||||
final SlicePreferenceController slicePreferenceController = use(
|
||||
SlicePreferenceController.class);
|
||||
slicePreferenceController.setSliceUri(sliceEnabled ? controlUri : null);
|
||||
slicePreferenceController.onStart();
|
||||
slicePreferenceController.displayPreference(getPreferenceScreen());
|
||||
|
||||
Uri finalControlUri = controlUri;
|
||||
getController(SlicePreferenceController.class, controller -> {
|
||||
controller.setSliceUri(sliceEnabled ? finalControlUri : null);
|
||||
controller.onStart();
|
||||
controller.displayPreference(getPreferenceScreen());
|
||||
});
|
||||
|
||||
|
||||
// Temporarily fix the issue that the page will be automatically scrolled to a wrong
|
||||
// position when entering the page. This will make sure the bluetooth header is shown on top
|
||||
// of the page.
|
||||
use(LeAudioBluetoothDetailsHeaderController.class).displayPreference(
|
||||
getPreferenceScreen());
|
||||
use(AdvancedBluetoothDetailsHeaderController.class).displayPreference(
|
||||
getPreferenceScreen());
|
||||
use(BluetoothDetailsHeaderController.class).displayPreference(
|
||||
getPreferenceScreen());
|
||||
getController(
|
||||
LeAudioBluetoothDetailsHeaderController.class,
|
||||
controller -> controller.displayPreference(getPreferenceScreen()));
|
||||
getController(
|
||||
AdvancedBluetoothDetailsHeaderController.class,
|
||||
controller -> controller.displayPreference(getPreferenceScreen()));
|
||||
getController(
|
||||
BluetoothDetailsHeaderController.class,
|
||||
controller -> controller.displayPreference(getPreferenceScreen()));
|
||||
}
|
||||
|
||||
protected <T extends AbstractPreferenceController> void getController(Class<T> clazz,
|
||||
Consumer<T> action) {
|
||||
T controller = use(clazz);
|
||||
if (controller != null) {
|
||||
action.accept(controller);
|
||||
}
|
||||
}
|
||||
|
||||
private final ViewTreeObserver.OnGlobalLayoutListener mOnGlobalLayoutListener =
|
||||
@@ -308,6 +339,14 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
return view;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(@NonNull Bundle savedInstanceState, @NonNull String rootKey) {
|
||||
super.onCreatePreferences(savedInstanceState, rootKey);
|
||||
if (Flags.enableBluetoothDeviceDetailsPolish()) {
|
||||
mFormatter.updateLayout();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
super.onResume();
|
||||
@@ -358,8 +397,30 @@ public class BluetoothDeviceDetailsFragment extends RestrictedDashboardFragment
|
||||
return super.onOptionsItemSelected(menuItem);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void addPreferenceController(AbstractPreferenceController controller) {
|
||||
if (Flags.enableBluetoothDeviceDetailsPolish()) {
|
||||
List<String> keys = mFormatter.getVisiblePreferenceKeysForMainPage();
|
||||
Lifecycle lifecycle = getSettingsLifecycle();
|
||||
if (keys == null || keys.contains(controller.getPreferenceKey())) {
|
||||
super.addPreferenceController(controller);
|
||||
} else if (controller instanceof LifecycleObserver) {
|
||||
lifecycle.removeObserver((LifecycleObserver) controller);
|
||||
}
|
||||
} else {
|
||||
super.addPreferenceController(controller);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
|
||||
if (Flags.enableBluetoothDeviceDetailsPolish()) {
|
||||
mFormatter =
|
||||
FeatureFactory.getFeatureFactory()
|
||||
.getBluetoothFeatureProvider()
|
||||
.getDeviceDetailsFragmentFormatter(
|
||||
requireContext(), this, mBluetoothAdapter, mCachedDevice);
|
||||
}
|
||||
ArrayList<AbstractPreferenceController> controllers = new ArrayList<>();
|
||||
|
||||
if (mCachedDevice != null) {
|
||||
|
Reference in New Issue
Block a user