diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-20 16:11:09 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2022-06-20 16:11:09 +0000 |
commit | c9abd0d5b3f8f2f6de30df25b7e1b57eb3c3b4c3 (patch) | |
tree | 96ff9815ce75fcad0867435e3e83fb023776ee6e | |
parent | 8ef70be298d319b1075cef079c03ce1c25a9ea79 (diff) | |
parent | 09d75678dab6b290e82f003816a38d925572a7c1 (diff) | |
download | TvSettings-c9abd0d5b3f8f2f6de30df25b7e1b57eb3c3b4c3.tar.gz |
Snap for 8746144 from 09d75678dab6b290e82f003816a38d925572a7c1 to mainline-os-statsd-release
Change-Id: I5f6cbdacf706269f8e85d21ec74056aa2583753a
-rw-r--r-- | Settings/AndroidManifest.xml | 1 | ||||
-rw-r--r-- | Settings/com.android.tv.settings.xml | 1 | ||||
-rw-r--r-- | Settings/res/xml/development_prefs.xml | 1 | ||||
-rw-r--r-- | Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java | 11 | ||||
-rw-r--r-- | Settings/src/com/android/tv/settings/vendor/DisplayPreviewFragment.java | 59 |
5 files changed, 72 insertions, 1 deletions
diff --git a/Settings/AndroidManifest.xml b/Settings/AndroidManifest.xml index 588f69ad9..3502483ed 100644 --- a/Settings/AndroidManifest.xml +++ b/Settings/AndroidManifest.xml @@ -72,6 +72,7 @@ <uses-permission android:name="com.google.android.assistant.WRITE_HOTWORD_STATE"/> <uses-permission android:name="android.permission.MANAGE_SLICE_PERMISSIONS"/> <uses-permission android:name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/> + <uses-permission android:name="android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS"/> <application android:name=".TvSettingsApplication" diff --git a/Settings/com.android.tv.settings.xml b/Settings/com.android.tv.settings.xml index 5b65009ca..109245878 100644 --- a/Settings/com.android.tv.settings.xml +++ b/Settings/com.android.tv.settings.xml @@ -35,5 +35,6 @@ <permission name="android.permission.WRITE_MEDIA_STORAGE"/> <permission name="android.permission.WRITE_SECURE_SETTINGS"/> <permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/> + <permission name="android.permission.SET_UNRESTRICTED_KEEP_CLEAR_AREAS"/> </privapp-permissions> </permissions> diff --git a/Settings/res/xml/development_prefs.xml b/Settings/res/xml/development_prefs.xml index b720b9d80..56f79ee3e 100644 --- a/Settings/res/xml/development_prefs.xml +++ b/Settings/res/xml/development_prefs.xml @@ -94,6 +94,7 @@ <Preference android:key="toggle_adb_wireless" android:title="@string/enable_adb_wireless" + android:summary="@string/connectivity_summary_no_network_connected" android:fragment="com.android.tv.settings.system.development.WirelessDebuggingFragment" /> <com.android.tv.settings.widget.SwitchWithSoundPreference diff --git a/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java b/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java index 76351085c..3a6d0ebb6 100644 --- a/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java +++ b/Settings/src/com/android/tv/settings/SettingsPreferenceFragment.java @@ -29,6 +29,7 @@ import android.animation.AnimatorInflater; import android.annotation.CallSuper; import android.app.tvsettings.TvSettingsEnums; import android.content.Context; +import android.graphics.Rect; import android.os.Bundle; import android.view.Gravity; import android.view.KeyEvent; @@ -59,6 +60,8 @@ import com.android.tv.settings.widget.SettingsViewModel; import com.android.tv.settings.widget.TsPreference; import com.android.tv.twopanelsettings.TwoPanelSettingsFragment; +import java.util.Collections; + /** * A {@link LeanbackPreferenceFragmentCompat} that has hooks to observe fragment lifecycle events * and allow for instrumentation. @@ -137,6 +140,14 @@ public abstract class SettingsPreferenceFragment extends LeanbackPreferenceFragm getActivity().getWindow().setTitle(getPreferenceScreen().getTitle()); view.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED); } + + // Only the one-panel settings should be set as unrestricted keep-clear areas + // because they are a side panel, so the PiP can be moved next to it. + view.addOnLayoutChangeListener((v, l, t, r, b, oldL, oldT, oldR, oldB) -> { + view.setUnrestrictedPreferKeepClearRects( + Collections.singletonList(new Rect(0, 0, r - l, b - t))); + }); + } removeAnimationClipping(view); } diff --git a/Settings/src/com/android/tv/settings/vendor/DisplayPreviewFragment.java b/Settings/src/com/android/tv/settings/vendor/DisplayPreviewFragment.java index 59dfcde87..4c69ca93c 100644 --- a/Settings/src/com/android/tv/settings/vendor/DisplayPreviewFragment.java +++ b/Settings/src/com/android/tv/settings/vendor/DisplayPreviewFragment.java @@ -16,18 +16,75 @@ package com.android.tv.settings.vendor; +import android.hardware.display.DisplayManager; import android.os.Bundle; +import android.view.Display; import androidx.annotation.Keep; +import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; import com.android.tv.settings.R; import com.android.tv.settings.SettingsPreferenceFragment; +import com.android.tv.settings.util.ResolutionSelectionUtils; + +import java.util.Objects; /** A vendor sample of display preview settings. */ @Keep -public class DisplayPreviewFragment extends SettingsPreferenceFragment { +public class DisplayPreviewFragment extends SettingsPreferenceFragment implements + DisplayManager.DisplayListener { + private DisplayManager mDisplayManager; + private Display.Mode mCurrentMode = null; + private static final String KEY_RESOLUTION_TITLE = "resolution_selection"; + @Override public void onCreatePreferences(Bundle bundle, String s) { setPreferencesFromResource(R.xml.preview_display_vendor, null); + mDisplayManager = getDisplayManager(); + Display display = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); + if (display.getSystemPreferredDisplayMode() != null) { + mDisplayManager.registerDisplayListener(this, null); + mCurrentMode = mDisplayManager.getGlobalUserPreferredDisplayMode(); + updateResolutionTitleDescription(ResolutionSelectionUtils.modeToString( + mCurrentMode, getContext())); + } else { + removeResolutionPreference(); + } + } + + @VisibleForTesting + DisplayManager getDisplayManager() { + return getContext().getSystemService(DisplayManager.class); + } + + @Override + public void onDisplayAdded(int displayId) {} + + @Override + public void onDisplayRemoved(int displayId) {} + + @Override + public void onDisplayChanged(int displayId) { + Display.Mode newMode = mDisplayManager.getGlobalUserPreferredDisplayMode(); + if (!Objects.equals(mCurrentMode, newMode)) { + updateResolutionTitleDescription( + ResolutionSelectionUtils.modeToString(newMode, getContext())); + mCurrentMode = newMode; + } + } + + private void updateResolutionTitleDescription(String summary) { + Preference titlePreference = findPreference(KEY_RESOLUTION_TITLE); + if (titlePreference != null) { + titlePreference.setSummary(summary); + } + } + + private void removeResolutionPreference() { + Preference resolutionPreference = findPreference(KEY_RESOLUTION_TITLE); + if (resolutionPreference != null) { + getPreferenceScreen().removePreference(resolutionPreference); + } } } |