Added External Display settings page
Settings page to show rotation, resolution, enable/disable display settings for external and overlay displays. In case persist.demo.userrotation.package_name sysprop is set, then the virtual display with this will also be shown. In case there is only one allowed display available, then this display will be shown right away. When there are more than 1 displays available, then the list of displays will be shown. Change-Id: I186667aaba94ed6befec3a98f4a87f2b2d1f1859 Test: atest ExternalDisplayUpdaterTest Test: atest ExternalDisplayPreferenceFragmentTest Test: atest ResolutionPreferenceFragmentTest Test: atest ConnectedDeviceGroupControllerTest Bug: 340218151 Bug: 294015706 Bug: 253296253 Flag: com.android.settings.flags.rotation_connected_display_setting Flag: com.android.settings.flags.resolution_and_enable_connected_display_setting
This commit is contained in:
@@ -15,6 +15,8 @@
|
||||
*/
|
||||
package com.android.settings.connecteddevice;
|
||||
|
||||
import static com.android.settings.connecteddevice.display.ExternalDisplaySettingsConfiguration.isExternalDisplaySettingsPageEnabled;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.hardware.input.InputManager;
|
||||
@@ -22,6 +24,8 @@ import android.util.FeatureFlagUtils;
|
||||
import android.util.Log;
|
||||
import android.view.InputDevice;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.annotation.VisibleForTesting;
|
||||
import androidx.preference.Preference;
|
||||
import androidx.preference.PreferenceGroup;
|
||||
@@ -31,12 +35,15 @@ import com.android.settings.R;
|
||||
import com.android.settings.bluetooth.BluetoothDeviceUpdater;
|
||||
import com.android.settings.bluetooth.ConnectedBluetoothDeviceUpdater;
|
||||
import com.android.settings.bluetooth.Utils;
|
||||
import com.android.settings.connecteddevice.display.ExternalDisplayUpdater;
|
||||
import com.android.settings.connecteddevice.dock.DockUpdater;
|
||||
import com.android.settings.connecteddevice.stylus.StylusDeviceUpdater;
|
||||
import com.android.settings.connecteddevice.usb.ConnectedUsbDeviceUpdater;
|
||||
import com.android.settings.core.BasePreferenceController;
|
||||
import com.android.settings.core.PreferenceControllerMixin;
|
||||
import com.android.settings.dashboard.DashboardFragment;
|
||||
import com.android.settings.flags.FeatureFlags;
|
||||
import com.android.settings.flags.FeatureFlagsImpl;
|
||||
import com.android.settings.flags.Flags;
|
||||
import com.android.settings.overlay.DockUpdaterFeatureProvider;
|
||||
import com.android.settings.overlay.FeatureFactory;
|
||||
@@ -64,6 +71,8 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
|
||||
@VisibleForTesting
|
||||
PreferenceGroup mPreferenceGroup;
|
||||
@Nullable
|
||||
private ExternalDisplayUpdater mExternalDisplayUpdater;
|
||||
private BluetoothDeviceUpdater mBluetoothDeviceUpdater;
|
||||
private ConnectedUsbDeviceUpdater mConnectedUsbDeviceUpdater;
|
||||
private DockUpdater mConnectedDockUpdater;
|
||||
@@ -71,6 +80,8 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
private final PackageManager mPackageManager;
|
||||
private final InputManager mInputManager;
|
||||
private final LocalBluetoothManager mLocalBluetoothManager;
|
||||
@NonNull
|
||||
private final FeatureFlags mFeatureFlags = new FeatureFlagsImpl();
|
||||
|
||||
public ConnectedDeviceGroupController(Context context) {
|
||||
super(context, KEY);
|
||||
@@ -81,6 +92,10 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
|
||||
@Override
|
||||
public void onStart() {
|
||||
if (mExternalDisplayUpdater != null) {
|
||||
mExternalDisplayUpdater.registerCallback();
|
||||
}
|
||||
|
||||
if (mBluetoothDeviceUpdater != null) {
|
||||
mBluetoothDeviceUpdater.registerCallback();
|
||||
mBluetoothDeviceUpdater.refreshPreference();
|
||||
@@ -101,6 +116,10 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
|
||||
@Override
|
||||
public void onStop() {
|
||||
if (mExternalDisplayUpdater != null) {
|
||||
mExternalDisplayUpdater.unregisterCallback();
|
||||
}
|
||||
|
||||
if (mBluetoothDeviceUpdater != null) {
|
||||
mBluetoothDeviceUpdater.unregisterCallback();
|
||||
}
|
||||
@@ -127,6 +146,10 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
|
||||
if (isAvailable()) {
|
||||
final Context context = screen.getContext();
|
||||
if (mExternalDisplayUpdater != null) {
|
||||
mExternalDisplayUpdater.initPreference(context);
|
||||
}
|
||||
|
||||
if (mBluetoothDeviceUpdater != null) {
|
||||
mBluetoothDeviceUpdater.setPrefContext(context);
|
||||
mBluetoothDeviceUpdater.forceUpdate();
|
||||
@@ -150,7 +173,8 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
|
||||
@Override
|
||||
public int getAvailabilityStatus() {
|
||||
return (hasBluetoothFeature()
|
||||
return (hasExternalDisplayFeature()
|
||||
|| hasBluetoothFeature()
|
||||
|| hasUsbFeature()
|
||||
|| hasUsiStylusFeature()
|
||||
|| mConnectedDockUpdater != null)
|
||||
@@ -180,11 +204,13 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
}
|
||||
|
||||
@VisibleForTesting
|
||||
void init(BluetoothDeviceUpdater bluetoothDeviceUpdater,
|
||||
void init(@Nullable ExternalDisplayUpdater externalDisplayUpdater,
|
||||
BluetoothDeviceUpdater bluetoothDeviceUpdater,
|
||||
ConnectedUsbDeviceUpdater connectedUsbDeviceUpdater,
|
||||
DockUpdater connectedDockUpdater,
|
||||
StylusDeviceUpdater connectedStylusDeviceUpdater) {
|
||||
|
||||
mExternalDisplayUpdater = externalDisplayUpdater;
|
||||
mBluetoothDeviceUpdater = bluetoothDeviceUpdater;
|
||||
mConnectedUsbDeviceUpdater = connectedUsbDeviceUpdater;
|
||||
mConnectedDockUpdater = connectedDockUpdater;
|
||||
@@ -197,7 +223,10 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
FeatureFactory.getFeatureFactory().getDockUpdaterFeatureProvider();
|
||||
final DockUpdater connectedDockUpdater =
|
||||
dockUpdaterFeatureProvider.getConnectedDockUpdater(context, this);
|
||||
init(hasBluetoothFeature()
|
||||
init(hasExternalDisplayFeature()
|
||||
? new ExternalDisplayUpdater(this, fragment.getMetricsCategory())
|
||||
: null,
|
||||
hasBluetoothFeature()
|
||||
? new ConnectedBluetoothDeviceUpdater(context, this,
|
||||
fragment.getMetricsCategory())
|
||||
: null,
|
||||
@@ -210,6 +239,19 @@ public class ConnectedDeviceGroupController extends BasePreferenceController
|
||||
: null);
|
||||
}
|
||||
|
||||
/**
|
||||
* @return trunk stable feature flags.
|
||||
*/
|
||||
@VisibleForTesting
|
||||
@NonNull
|
||||
public FeatureFlags getFeatureFlags() {
|
||||
return mFeatureFlags;
|
||||
}
|
||||
|
||||
private boolean hasExternalDisplayFeature() {
|
||||
return isExternalDisplaySettingsPageEnabled(getFeatureFlags());
|
||||
}
|
||||
|
||||
private boolean hasBluetoothFeature() {
|
||||
return mPackageManager.hasSystemFeature(PackageManager.FEATURE_BLUETOOTH);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user