Disable mirror toggle if feature turned off
If the content mode management feature is disabled, the mirror display toggle should be disabled, and instead reflect the inverse of the "force desktop on external displays" system property. Flag: com.android.settings.flags.display_topology_pane_in_display_list Test: manual with and without toggle user-changeable Bug: b/396116157 Change-Id: I550fc918aaebab7129a559c0e49b88c8da7bc00d
This commit is contained in:
@@ -35,6 +35,7 @@ import android.os.Bundle;
|
||||
import android.view.Display;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
import android.window.DesktopExperienceFlags;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -66,7 +67,7 @@ import java.util.List;
|
||||
public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmentBase {
|
||||
@VisibleForTesting enum PrefBasics {
|
||||
DISPLAY_TOPOLOGY(10, "display_topology_preference", null),
|
||||
MIRROR(20, "mirror_preference", null),
|
||||
MIRROR(20, "mirror_preference", R.string.external_display_mirroring_title),
|
||||
|
||||
// If shown, use toggle should be before other per-display settings.
|
||||
EXTERNAL_DISPLAY_USE(30, "external_display_use_preference",
|
||||
@@ -133,8 +134,6 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
||||
@Nullable
|
||||
private Preference mDisplayTopologyPreference;
|
||||
@Nullable
|
||||
private Preference mMirrorPreference;
|
||||
@Nullable
|
||||
private PreferenceCategory mBuiltinDisplayPreference;
|
||||
@Nullable
|
||||
private Preference mBuiltinDisplaySizeAndTextPreference;
|
||||
@@ -357,12 +356,14 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
||||
return mDisplayTopologyPreference;
|
||||
}
|
||||
|
||||
@NonNull Preference getMirrorPreference(@NonNull Context context) {
|
||||
if (mMirrorPreference == null) {
|
||||
mMirrorPreference = new MirrorPreference(context);
|
||||
PrefBasics.MIRROR.apply(mMirrorPreference);
|
||||
private void addMirrorPreference(Context context, PrefRefresh refresh) {
|
||||
Preference pref = refresh.findUnusedPreference(PrefBasics.MIRROR.key);
|
||||
if (pref == null) {
|
||||
pref = new MirrorPreference(context,
|
||||
DesktopExperienceFlags.ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT.isTrue());
|
||||
PrefBasics.MIRROR.apply(pref);
|
||||
}
|
||||
return mMirrorPreference;
|
||||
refresh.addPreference(pref);
|
||||
}
|
||||
|
||||
@NonNull
|
||||
@@ -520,7 +521,7 @@ public class ExternalDisplayPreferenceFragment extends SettingsPreferenceFragmen
|
||||
private void maybeAddV2Components(Context context, PrefRefresh screen) {
|
||||
if (isTopologyPaneEnabled(mInjector)) {
|
||||
screen.addPreference(getDisplayTopologyPreference(context));
|
||||
screen.addPreference(getMirrorPreference(context));
|
||||
addMirrorPreference(context, screen);
|
||||
|
||||
// If topology is shown, we also show a preference for the built-in display for
|
||||
// consistency with the topology.
|
||||
|
@@ -23,26 +23,32 @@ import androidx.preference.SwitchPreferenceCompat
|
||||
|
||||
import com.android.settings.R
|
||||
|
||||
const val MIRROR_SETTING = Settings.Secure.MIRROR_BUILT_IN_DISPLAY
|
||||
|
||||
/**
|
||||
* A switch preference which is backed by the MIRROR_BUILT_IN_DISPLAY global setting.
|
||||
*/
|
||||
class MirrorPreference(context: Context): SwitchPreferenceCompat(context) {
|
||||
init {
|
||||
setTitle(R.string.external_display_mirroring_title)
|
||||
|
||||
isPersistent = false
|
||||
}
|
||||
|
||||
class MirrorPreference(context: Context, val contentModeEnabled: Boolean):
|
||||
SwitchPreferenceCompat(context) {
|
||||
override fun onAttached() {
|
||||
super.onAttached()
|
||||
setChecked(0 != Settings.Secure.getInt(
|
||||
context.contentResolver, Settings.Secure.MIRROR_BUILT_IN_DISPLAY, 0))
|
||||
|
||||
isEnabled = contentModeEnabled
|
||||
if (contentModeEnabled) {
|
||||
setChecked(0 != Settings.Secure.getInt(context.contentResolver, MIRROR_SETTING, 0))
|
||||
} else {
|
||||
setChecked(0 == Settings.Global.getInt(
|
||||
context.contentResolver,
|
||||
Settings.Global.DEVELOPMENT_FORCE_DESKTOP_MODE_ON_EXTERNAL_DISPLAYS, 0))
|
||||
}
|
||||
}
|
||||
|
||||
override fun onClick() {
|
||||
super.onClick()
|
||||
Settings.Secure.putInt(
|
||||
context.contentResolver, Settings.Secure.MIRROR_BUILT_IN_DISPLAY,
|
||||
if (isChecked()) 1 else 0)
|
||||
|
||||
if (contentModeEnabled) {
|
||||
Settings.Secure.putInt(
|
||||
context.contentResolver, MIRROR_SETTING, if (isChecked()) 1 else 0)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user