From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Tad <tad@spotco.us>
Date: Sat, 21 Oct 2017 09:05:09 -0400
Subject: [PATCH] Reduced Resolution Feature 1/2

Change-Id: I925a23e61ebf3ce06dc78898952085d87ad10410
---
 res/values/strings.xml                          |  3 +++
 res/xml/perf_profile_settings.xml               |  6 ++++++
 .../cmparts/power/PerfProfileSettings.java      | 17 +++++++++++++++++
 3 files changed, 26 insertions(+)

diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9cba5f2..e05168f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -574,6 +574,9 @@
     <string name="power_save_category_title">Battery saving</string>
     <string name="power_save_title">Extreme power saver</string>
     <string name="power_save_summary">Restrict device performance and background activity to save power</string>
+    <string name="reduce_resolution_title">Reduce screen resolution</string>
+    <string name="reduce_resolution_summary">Lowers the screen resolution to save power</string>
+    <string name="reduce_resolution_fail_toast">Unable to set a lower screen resolution</string>
     <string name="auto_power_save_title">Automatic power saver</string>
     <string name="auto_power_save_summary_on">Automatically enable power save mode at %s battery</string>
     <string name="auto_power_save_summary_off">Do not enable power save mode automatically</string>
diff --git a/res/xml/perf_profile_settings.xml b/res/xml/perf_profile_settings.xml
index 3585cb7..ce99c6c 100644
--- a/res/xml/perf_profile_settings.xml
+++ b/res/xml/perf_profile_settings.xml
@@ -34,6 +34,12 @@
             android:title="@string/auto_power_save_title"
             android:persistent="false" />
 
+        <SwitchPreference
+            android:key="reduce_resolution"
+            android:title="@string/reduce_resolution_title"
+            android:summary="@string/reduce_resolution_summary"
+            android:persistent="false" />
+
     </PreferenceCategory>
 
     <PreferenceCategory
diff --git a/src/org/cyanogenmod/cmparts/power/PerfProfileSettings.java b/src/org/cyanogenmod/cmparts/power/PerfProfileSettings.java
index ec2138d..5fdc8f1 100644
--- a/src/org/cyanogenmod/cmparts/power/PerfProfileSettings.java
+++ b/src/org/cyanogenmod/cmparts/power/PerfProfileSettings.java
@@ -56,11 +56,13 @@ public class PerfProfileSettings extends SettingsPreferenceFragment
     private static final String KEY_PERF_PROFILE_CATEGORY = "perf_profile_category";
     private static final String KEY_AUTO_POWER_SAVE  = "auto_power_save";
     private static final String KEY_POWER_SAVE       = "power_save";
+    private static final String KEY_REDUCE_RESOLUTION = "reduce_resolution";
     private static final String KEY_PER_APP_PROFILES = "app_perf_profiles_enabled";
     private static final String KEY_PERF_SEEKBAR     = "perf_seekbar";
 
     private ListPreference mAutoPowerSavePref;
     private SwitchPreference   mPowerSavePref;
+    private SwitchPreference   mReduceResolutionPref;
 
     private SeekBarPreference        mPerfSeekBar;
     private StopMotionVectorDrawable mPerfDrawable;
@@ -90,6 +92,7 @@ public class PerfProfileSettings extends SettingsPreferenceFragment
         mPerfSeekBar = (SeekBarPreference) findPreference(KEY_PERF_SEEKBAR);
         mAutoPowerSavePref = (ListPreference) findPreference(KEY_AUTO_POWER_SAVE);
         mPowerSavePref = (SwitchPreference) findPreference(KEY_POWER_SAVE);
+        mReduceResolutionPref = (SwitchPreference) findPreference(KEY_REDUCE_RESOLUTION);
         mPerAppProfilesPref = (SwitchPreference) findPreference(KEY_PER_APP_PROFILES);
 
         mPowerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
@@ -124,6 +127,8 @@ public class PerfProfileSettings extends SettingsPreferenceFragment
         updateAutoPowerSaveValue();
         mAutoPowerSavePref.setOnPreferenceChangeListener(this);
         mPowerSavePref.setOnPreferenceChangeListener(this);
+        mReduceResolutionPref.setOnPreferenceChangeListener(this);
+        updateReduceResolutionValue();
     }
 
 
@@ -245,6 +250,14 @@ public class PerfProfileSettings extends SettingsPreferenceFragment
             final int level = Integer.parseInt((String) newValue);
             Global.putInt(getContentResolver(), Global.LOW_POWER_MODE_TRIGGER_LEVEL, level);
             updateAutoPowerSaveSummary(level);
+        } else if (preference == mReduceResolutionPref) {
+            if (!mPowerManager.setReducedResolution((boolean) newValue)) {
+                // Don't just fail silently, inform the user as well
+                Toast.makeText(getActivity(),
+                        R.string.reduce_resolution_fail_toast, Toast.LENGTH_SHORT).show();
+                return false;
+            }
+            updateReduceResolutionValue();
         }
         return true;
     }
@@ -262,6 +275,10 @@ public class PerfProfileSettings extends SettingsPreferenceFragment
         PartsUpdater.notifyChanged(getActivity(), getPreferenceScreen().getKey());
     }
 
+    private void updateReduceResolutionValue() {
+	mReduceResolutionPref.setChecked(mPowerManager.isReducedResolution());
+    }
+
     private void updateAutoPowerSaveValue() {
         final int level = Global.getInt(
                 getContentResolver(), Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0);
