summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/applications/ExpandedDesktopExtraPrefs.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/settings/applications/ExpandedDesktopExtraPrefs.java')
-rw-r--r--src/com/android/settings/applications/ExpandedDesktopExtraPrefs.java155
1 files changed, 155 insertions, 0 deletions
diff --git a/src/com/android/settings/applications/ExpandedDesktopExtraPrefs.java b/src/com/android/settings/applications/ExpandedDesktopExtraPrefs.java
new file mode 100644
index 0000000..f709a98
--- /dev/null
+++ b/src/com/android/settings/applications/ExpandedDesktopExtraPrefs.java
@@ -0,0 +1,155 @@
+/*
+ * Copyright (C) 2015 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.applications;
+
+import android.app.Activity;
+import android.content.ContentResolver;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Bundle;
+
+import android.os.Handler;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import android.provider.Settings;
+import android.view.WindowManager;
+import android.view.WindowManagerPolicyControl;
+
+import com.android.internal.logging.MetricsLogger;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.R;
+
+public class ExpandedDesktopExtraPrefs extends SettingsPreferenceFragment
+ implements Preference.OnPreferenceChangeListener{
+ private static final String KEY_EXPANDED_DESKTOP_STYLE = "expanded_desktop_style";
+
+ private ListPreference mExpandedDesktopStylePref;
+ private int mExpandedDesktopStyle;
+ private final Handler mHandler = new Handler();
+ private final SettingsObserver mSettingsObserver = new SettingsObserver();
+
+ public static ExpandedDesktopExtraPrefs newInstance() {
+ ExpandedDesktopExtraPrefs expandedDesktopExtraPrefs = new ExpandedDesktopExtraPrefs();
+ return expandedDesktopExtraPrefs;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.expanded_desktop_prefs);
+ mExpandedDesktopStyle = getExpandedDesktopStyle();
+ createPreferences();
+ }
+
+ @Override
+ protected int getMetricsCategory() {
+ return MetricsLogger.DISPLAY;
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ mSettingsObserver.register(true);
+ }
+
+ @Override
+ public void onPause() {
+ mSettingsObserver.register(false);
+ super.onPause();
+ }
+
+ public void createPreferences() {
+ mExpandedDesktopStylePref = (ListPreference) findPreference(KEY_EXPANDED_DESKTOP_STYLE);
+ mExpandedDesktopStylePref.setOnPreferenceChangeListener(this);
+ updateExpandedDesktopStyle();
+ }
+
+ private void updateExpandedDesktopStyle() {
+ if (mExpandedDesktopStylePref == null) {
+ return;
+ }
+ mExpandedDesktopStyle = getExpandedDesktopStyle();
+ mExpandedDesktopStylePref.setValueIndex(mExpandedDesktopStyle);
+ mExpandedDesktopStylePref.setSummary(getDesktopSummary(mExpandedDesktopStyle));
+ // We need to visually show the change
+ // TODO: This is hacky, but it works
+ writeValue("");
+ writeValue("immersive.full=*");
+ }
+
+ private int getDesktopSummary(int state) {
+ switch (state) {
+ case WindowManagerPolicyControl.ImmersiveDefaultStyles.IMMERSIVE_STATUS:
+ return R.string.expanded_hide_status;
+ case WindowManagerPolicyControl.ImmersiveDefaultStyles.IMMERSIVE_NAVIGATION:
+ return R.string.expanded_hide_navigation;
+ case WindowManagerPolicyControl.ImmersiveDefaultStyles.IMMERSIVE_FULL:
+ default:
+ return R.string.expanded_hide_both;
+ }
+ }
+
+ private int getExpandedDesktopStyle() {
+ return Settings.Global.getInt(getContentResolver(),
+ Settings.Global.POLICY_CONTROL_STYLE,
+ WindowManagerPolicyControl.ImmersiveDefaultStyles.IMMERSIVE_FULL);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object value) {
+ final int val = Integer.valueOf((String) value);
+ WindowManagerPolicyControl.saveStyleToSettings(getActivity(), val);
+ return false;
+ }
+
+ private void writeValue(String value) {
+ Settings.Global.putString(getContentResolver(), Settings.Global.POLICY_CONTROL, value);
+ }
+
+ // === Window Policy Style Callbacks ===
+
+ private final class SettingsObserver extends ContentObserver {
+ private final Uri DEFAULT_WINDOW_POLICY_STYLE =
+ Settings.Global.getUriFor(Settings.Global.POLICY_CONTROL_STYLE);
+
+ public SettingsObserver() {
+ super(mHandler);
+ }
+
+ public void register(boolean register) {
+ final ContentResolver cr = getContentResolver();
+ if (register) {
+ cr.registerContentObserver(DEFAULT_WINDOW_POLICY_STYLE, false, this);
+ } else {
+ cr.unregisterContentObserver(this);
+ }
+ }
+
+ @Override
+ public void onChange(boolean selfChange, Uri uri) {
+ super.onChange(selfChange, uri);
+ if (DEFAULT_WINDOW_POLICY_STYLE.equals(uri)) {
+ updateExpandedDesktopStyle();
+ }
+ }
+ }
+}