From b0f0169b66156af2a75a90d3d90a8e024a0ba867 Mon Sep 17 00:00:00 2001 From: Tyler Nijmeh Date: Wed, 31 Mar 2021 12:21:28 -0700 Subject: Add broadcast receiver for handling profile changes Signed-off-by: Tyler Nijmeh --- .../draco/buoy/fragments/MainPreferenceFragment.kt | 53 +++++++++++----------- .../buoy/models/BatterySaverConstantsConfig.kt | 4 +- .../buoy/receivers/ExternalProfileReceiver.kt | 35 ++++++++++++++ .../buoy/repositories/BatterySaverConstants.kt | 22 --------- .../BatterySaverConstantsConfigProfiles.kt | 52 --------------------- .../repositories/BatterySaverSecureSettings.kt | 26 ----------- .../buoy/repositories/PowerManagerLocationModes.kt | 34 -------------- .../constants/BatterySaverConstants.kt | 22 +++++++++ .../constants/BatterySaverSecureSettings.kt | 26 +++++++++++ .../ExternalProfileReceiverIntentConstants.kt | 6 +++ .../constants/PowerManagerLocationModes.kt | 34 ++++++++++++++ .../BatterySaverConstantsConfigProfiles.kt | 53 ++++++++++++++++++++++ .../com/draco/buoy/utils/BatterySaverManager.kt | 26 ++++++++++- 13 files changed, 229 insertions(+), 164 deletions(-) create mode 100644 app/src/main/java/com/draco/buoy/receivers/ExternalProfileReceiver.kt delete mode 100644 app/src/main/java/com/draco/buoy/repositories/BatterySaverConstants.kt delete mode 100644 app/src/main/java/com/draco/buoy/repositories/BatterySaverConstantsConfigProfiles.kt delete mode 100644 app/src/main/java/com/draco/buoy/repositories/BatterySaverSecureSettings.kt delete mode 100644 app/src/main/java/com/draco/buoy/repositories/PowerManagerLocationModes.kt create mode 100644 app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverConstants.kt create mode 100644 app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverSecureSettings.kt create mode 100644 app/src/main/java/com/draco/buoy/repositories/constants/ExternalProfileReceiverIntentConstants.kt create mode 100644 app/src/main/java/com/draco/buoy/repositories/constants/PowerManagerLocationModes.kt create mode 100644 app/src/main/java/com/draco/buoy/repositories/profiles/BatterySaverConstantsConfigProfiles.kt (limited to 'app/src/main/java/com') diff --git a/app/src/main/java/com/draco/buoy/fragments/MainPreferenceFragment.kt b/app/src/main/java/com/draco/buoy/fragments/MainPreferenceFragment.kt index 778f144..0a0f923 100644 --- a/app/src/main/java/com/draco/buoy/fragments/MainPreferenceFragment.kt +++ b/app/src/main/java/com/draco/buoy/fragments/MainPreferenceFragment.kt @@ -8,7 +8,7 @@ import android.os.Bundle import androidx.preference.* import com.draco.buoy.R import com.draco.buoy.models.BatterySaverConstantsConfig -import com.draco.buoy.repositories.BatterySaverConstantsConfigProfiles +import com.draco.buoy.repositories.profiles.BatterySaverConstantsConfigProfiles import com.draco.buoy.utils.BatterySaverManager import com.google.android.gms.oss.licenses.OssLicensesMenuActivity import com.google.android.material.snackbar.Snackbar @@ -37,12 +37,12 @@ class MainPreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnS override fun onActivityCreated(savedInstanceState: Bundle?) { super.onActivityCreated(savedInstanceState) - loadSettings() + refreshSettings() findPreference(getString(R.string.pref_key_import))?.let { it.setOnPreferenceChangeListener { _, newValue -> batterySaverManager.setConstantsString(newValue as String) - loadSettings() + refreshSettings() return@setOnPreferenceChangeListener true } } @@ -50,11 +50,26 @@ class MainPreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnS override fun onPreferenceTreeClick(preference: Preference): Boolean { when (preference.key) { - getString(R.string.pref_profile_key_reset) -> resetProfile() - getString(R.string.pref_profile_key_light) -> applyProfile(BatterySaverConstantsConfigProfiles.LIGHT) - getString(R.string.pref_profile_key_moderate) -> applyProfile(BatterySaverConstantsConfigProfiles.MODERATE) - getString(R.string.pref_profile_key_high) -> applyProfile(BatterySaverConstantsConfigProfiles.HIGH) - getString(R.string.pref_profile_key_extreme) -> applyProfile(BatterySaverConstantsConfigProfiles.EXTREME) + getString(R.string.pref_profile_key_reset) -> { + batterySaverManager.reset() + refreshSettings() + } + getString(R.string.pref_profile_key_light) -> { + batterySaverManager.apply(BatterySaverConstantsConfigProfiles.LIGHT) + refreshSettings() + } + getString(R.string.pref_profile_key_moderate) -> { + batterySaverManager.apply(BatterySaverConstantsConfigProfiles.MODERATE) + refreshSettings() + } + getString(R.string.pref_profile_key_high) -> { + batterySaverManager.apply(BatterySaverConstantsConfigProfiles.HIGH) + refreshSettings() + } + getString(R.string.pref_profile_key_extreme) -> { + batterySaverManager.apply(BatterySaverConstantsConfigProfiles.EXTREME) + refreshSettings() + } getString(R.string.pref_key_export) -> exportSettings() getString(R.string.pref_key_import) -> (preference as EditTextPreference).text = batterySaverManager.getConstantsString() @@ -80,7 +95,7 @@ class MainPreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnS startActivity(chooser) } - private fun loadSettings() { + private fun refreshSettings() { val currentProfileString = batterySaverManager.getConstantsString() val currentProfile = BatterySaverConstantsConfig().also { if (currentProfileString != null) @@ -128,24 +143,8 @@ class MainPreferenceFragment : PreferenceFragmentCompat(), SharedPreferences.OnS !findPreference(getString(R.string.pref_config_key_aod_enabled))!!.isChecked, findPreference(getString(R.string.pref_config_key_quick_doze_enabled))!!.isChecked ) - batterySaverManager.setConstantsConfig(config) - applyProfile(config) - } - - private fun applyProfile(profile: BatterySaverConstantsConfig) { - batterySaverManager.setConstantsConfig(profile) - batterySaverManager.setLowPower(true) - batterySaverManager.setLowPowerSticky(true) - batterySaverManager.setLowPowerStickyAutoDisableEnabled(false) - loadSettings() - } - - private fun resetProfile() { - batterySaverManager.resetConstants() - batterySaverManager.setLowPower(false) - batterySaverManager.setLowPowerSticky(false) - batterySaverManager.setLowPowerStickyAutoDisableEnabled(true) - loadSettings() + batterySaverManager.apply(config) + refreshSettings() } private fun openURL(url: String) { diff --git a/app/src/main/java/com/draco/buoy/models/BatterySaverConstantsConfig.kt b/app/src/main/java/com/draco/buoy/models/BatterySaverConstantsConfig.kt index c26ab01..83ec46b 100644 --- a/app/src/main/java/com/draco/buoy/models/BatterySaverConstantsConfig.kt +++ b/app/src/main/java/com/draco/buoy/models/BatterySaverConstantsConfig.kt @@ -1,7 +1,7 @@ package com.draco.buoy.models -import com.draco.buoy.repositories.BatterySaverConstants -import com.draco.buoy.repositories.PowerManagerLocationModes +import com.draco.buoy.repositories.constants.BatterySaverConstants +import com.draco.buoy.repositories.constants.PowerManagerLocationModes data class BatterySaverConstantsConfig( var advertiseIsEnabled: Boolean = true, diff --git a/app/src/main/java/com/draco/buoy/receivers/ExternalProfileReceiver.kt b/app/src/main/java/com/draco/buoy/receivers/ExternalProfileReceiver.kt new file mode 100644 index 0000000..c93e563 --- /dev/null +++ b/app/src/main/java/com/draco/buoy/receivers/ExternalProfileReceiver.kt @@ -0,0 +1,35 @@ +package com.draco.buoy.receivers + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.draco.buoy.R +import com.draco.buoy.repositories.constants.ExternalProfileReceiverIntentConstants +import com.draco.buoy.repositories.profiles.BatterySaverConstantsConfigProfiles +import com.draco.buoy.utils.BatterySaverManager + +class ExternalProfileReceiver : BroadcastReceiver() { + private lateinit var batterySaverManager: BatterySaverManager + + override fun onReceive(context: Context, intent: Intent) { + batterySaverManager = BatterySaverManager(context.contentResolver) + + val profileName = intent.getStringExtra(ExternalProfileReceiverIntentConstants.KEY_PROFILE_NAME) + val constants = intent.getStringExtra(ExternalProfileReceiverIntentConstants.KEY_CONSTANTS) + + profileName?.let { + when (it) { + context.getString(R.string.pref_profile_key_light) -> batterySaverManager.apply(BatterySaverConstantsConfigProfiles.LIGHT) + context.getString(R.string.pref_profile_key_moderate) -> batterySaverManager.apply(BatterySaverConstantsConfigProfiles.MODERATE) + context.getString(R.string.pref_profile_key_high) -> batterySaverManager.apply(BatterySaverConstantsConfigProfiles.HIGH) + context.getString(R.string.pref_profile_key_extreme) -> batterySaverManager.apply(BatterySaverConstantsConfigProfiles.EXTREME) + } + } + + constants?.let { + batterySaverManager.apply(it) + } + + resultData = batterySaverManager.getConstantsString() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstants.kt b/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstants.kt deleted file mode 100644 index f8ca29c..0000000 --- a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstants.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.draco.buoy.repositories - -object BatterySaverConstants { - const val ADVERTISE_IS_ENABLED = "advertise_is_enabled" - const val DATASAVER_DISABLED = "datasaver_disabled" - const val ENABLE_NIGHT_MODE = "enable_night_mode" - const val LAUNCH_BOOST_DISABLED = "launch_boost_disabled" - const val VIBRATION_DISABLED = "vibration_disabled" - const val ANIMATION_DISABLED = "animation_disabled" - const val SOUNDTRIGGER_DISABLED = "soundtrigger_disabled" - const val FULLBACKUP_DEFERRED = "fullbackup_deferred" - const val KEYVALUEBACKUP_DEFERRED = "keyvaluebackup_deferred" - const val FIREWALL_DISABLED = "firewall_disabled" - const val GPS_MODE = "gps_mode" - const val ADJUST_BRIGHTNESS_DISABLED = "adjust_brightness_disabled" - const val ADJUST_BRIGHTNESS_FACTOR = "adjust_brightness_factor" - const val FORCE_ALL_APPS_STANDBY = "force_all_apps_standby" - const val FORCE_BACKGROUND_CHECK = "force_background_check" - const val OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled" - const val AOD_DISABLED = "aod_disabled" - const val QUICK_DOZE_ENABLED = "quick_doze_enabled" -} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstantsConfigProfiles.kt b/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstantsConfigProfiles.kt deleted file mode 100644 index 75a5228..0000000 --- a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstantsConfigProfiles.kt +++ /dev/null @@ -1,52 +0,0 @@ -package com.draco.buoy.repositories - -import com.draco.buoy.models.BatterySaverConstantsConfig - -object BatterySaverConstantsConfigProfiles { - /** - * Keep the system running smoothly with some idle tweaks - */ - val LIGHT = BatterySaverConstantsConfig( - advertiseIsEnabled = false, - enableNightMode = false, - launchBoostDisabled = false, - vibrationDisabled = false, - soundTriggerDisabled = false, - fireWallDisabled = false, - gpsMode = PowerManagerLocationModes.THROTTLE_SCREEN_OFF, - forceAllAppsStandby = false, - forceBackgroundCheck = false, - aodDisabled = false - ) - - /** - * Start using some mildly intrusive tweaks to save power - */ - val MODERATE = BatterySaverConstantsConfig( - launchBoostDisabled = false, - vibrationDisabled = false, - soundTriggerDisabled = false, - fireWallDisabled = false, - gpsMode = PowerManagerLocationModes.THROTTLE_SCREEN_OFF, - forceAllAppsStandby = false, - forceBackgroundCheck = false, - ) - - /** - * Sacrifice performance for some extra battery life - */ - val HIGH = BatterySaverConstantsConfig( - dataSaverDisabled = false, - adjustBrightnessDisabled = false, - adjustBrightnessFactor = 0.75f - ) - - /** - * The most we can possibly do to save power - */ - val EXTREME = BatterySaverConstantsConfig( - dataSaverDisabled = false, - animationDisabled = true, - adjustBrightnessDisabled = false - ) -} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/BatterySaverSecureSettings.kt b/app/src/main/java/com/draco/buoy/repositories/BatterySaverSecureSettings.kt deleted file mode 100644 index e381081..0000000 --- a/app/src/main/java/com/draco/buoy/repositories/BatterySaverSecureSettings.kt +++ /dev/null @@ -1,26 +0,0 @@ -package com.draco.buoy.repositories - -/** - * Expose secure settings hidden in the Android APIs - */ -object BatterySaverSecureSettings { - /** - * Parameters for low power mode - */ - const val BATTERY_SAVER_CONSTANTS = "battery_saver_constants" - - /** - * Low power mode toggle - */ - const val LOW_POWER = "low_power" - - /** - * Re-enable low power mode on reboots / unplugs - */ - const val LOW_POWER_STICKY = "low_power_sticky" - - /** - * Battery percentage to auto-disable low power mode - */ - const val LOW_POWER_STICKY_AUTO_DISABLE_ENABLED = "low_power_sticky_auto_disable_enabled" -} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/PowerManagerLocationModes.kt b/app/src/main/java/com/draco/buoy/repositories/PowerManagerLocationModes.kt deleted file mode 100644 index 98b5b03..0000000 --- a/app/src/main/java/com/draco/buoy/repositories/PowerManagerLocationModes.kt +++ /dev/null @@ -1,34 +0,0 @@ -package com.draco.buoy.repositories - -import android.os.PowerManager - -/** - * A rip from android.os.PowerManager LOCATION_MODE constants, as - * PowerManager requires Android P APIs - */ -object PowerManagerLocationModes { - /** - * Default behavior - */ - const val NO_CHANGE = 0 - - /** - * Disable just GPS when the screen is off - */ - const val GPS_DISABLED_SCREEN_OFF = 1 - - /** - * Disable all location providers when the screen is off - */ - const val ALL_DISABLED_SCREEN_OFF = 2 - - /** - * Only foreground apps can query new locations - */ - const val FOREGROUND_ONLY = 3 - - /** - * Throttle requests when the screen is off - */ - const val THROTTLE_SCREEN_OFF = 4 -} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverConstants.kt b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverConstants.kt new file mode 100644 index 0000000..33d0b3d --- /dev/null +++ b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverConstants.kt @@ -0,0 +1,22 @@ +package com.draco.buoy.repositories.constants + +object BatterySaverConstants { + const val ADVERTISE_IS_ENABLED = "advertise_is_enabled" + const val DATASAVER_DISABLED = "datasaver_disabled" + const val ENABLE_NIGHT_MODE = "enable_night_mode" + const val LAUNCH_BOOST_DISABLED = "launch_boost_disabled" + const val VIBRATION_DISABLED = "vibration_disabled" + const val ANIMATION_DISABLED = "animation_disabled" + const val SOUNDTRIGGER_DISABLED = "soundtrigger_disabled" + const val FULLBACKUP_DEFERRED = "fullbackup_deferred" + const val KEYVALUEBACKUP_DEFERRED = "keyvaluebackup_deferred" + const val FIREWALL_DISABLED = "firewall_disabled" + const val GPS_MODE = "gps_mode" + const val ADJUST_BRIGHTNESS_DISABLED = "adjust_brightness_disabled" + const val ADJUST_BRIGHTNESS_FACTOR = "adjust_brightness_factor" + const val FORCE_ALL_APPS_STANDBY = "force_all_apps_standby" + const val FORCE_BACKGROUND_CHECK = "force_background_check" + const val OPTIONAL_SENSORS_DISABLED = "optional_sensors_disabled" + const val AOD_DISABLED = "aod_disabled" + const val QUICK_DOZE_ENABLED = "quick_doze_enabled" +} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverSecureSettings.kt b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverSecureSettings.kt new file mode 100644 index 0000000..72573a2 --- /dev/null +++ b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverSecureSettings.kt @@ -0,0 +1,26 @@ +package com.draco.buoy.repositories.constants + +/** + * Expose secure settings hidden in the Android APIs + */ +object BatterySaverSecureSettings { + /** + * Parameters for low power mode + */ + const val BATTERY_SAVER_CONSTANTS = "battery_saver_constants" + + /** + * Low power mode toggle + */ + const val LOW_POWER = "low_power" + + /** + * Re-enable low power mode on reboots / unplugs + */ + const val LOW_POWER_STICKY = "low_power_sticky" + + /** + * Battery percentage to auto-disable low power mode + */ + const val LOW_POWER_STICKY_AUTO_DISABLE_ENABLED = "low_power_sticky_auto_disable_enabled" +} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/constants/ExternalProfileReceiverIntentConstants.kt b/app/src/main/java/com/draco/buoy/repositories/constants/ExternalProfileReceiverIntentConstants.kt new file mode 100644 index 0000000..6de06cc --- /dev/null +++ b/app/src/main/java/com/draco/buoy/repositories/constants/ExternalProfileReceiverIntentConstants.kt @@ -0,0 +1,6 @@ +package com.draco.buoy.repositories.constants + +object ExternalProfileReceiverIntentConstants { + const val KEY_PROFILE_NAME = "profile_name" + const val KEY_CONSTANTS = "constants" +} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/constants/PowerManagerLocationModes.kt b/app/src/main/java/com/draco/buoy/repositories/constants/PowerManagerLocationModes.kt new file mode 100644 index 0000000..35e5713 --- /dev/null +++ b/app/src/main/java/com/draco/buoy/repositories/constants/PowerManagerLocationModes.kt @@ -0,0 +1,34 @@ +package com.draco.buoy.repositories.constants + +import android.os.PowerManager + +/** + * A rip from android.os.PowerManager LOCATION_MODE constants, as + * PowerManager requires Android P APIs + */ +object PowerManagerLocationModes { + /** + * Default behavior + */ + const val NO_CHANGE = 0 + + /** + * Disable just GPS when the screen is off + */ + const val GPS_DISABLED_SCREEN_OFF = 1 + + /** + * Disable all location providers when the screen is off + */ + const val ALL_DISABLED_SCREEN_OFF = 2 + + /** + * Only foreground apps can query new locations + */ + const val FOREGROUND_ONLY = 3 + + /** + * Throttle requests when the screen is off + */ + const val THROTTLE_SCREEN_OFF = 4 +} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/repositories/profiles/BatterySaverConstantsConfigProfiles.kt b/app/src/main/java/com/draco/buoy/repositories/profiles/BatterySaverConstantsConfigProfiles.kt new file mode 100644 index 0000000..bae82b8 --- /dev/null +++ b/app/src/main/java/com/draco/buoy/repositories/profiles/BatterySaverConstantsConfigProfiles.kt @@ -0,0 +1,53 @@ +package com.draco.buoy.repositories.profiles + +import com.draco.buoy.models.BatterySaverConstantsConfig +import com.draco.buoy.repositories.constants.PowerManagerLocationModes + +object BatterySaverConstantsConfigProfiles { + /** + * Keep the system running smoothly with some idle tweaks + */ + val LIGHT = BatterySaverConstantsConfig( + advertiseIsEnabled = false, + enableNightMode = false, + launchBoostDisabled = false, + vibrationDisabled = false, + soundTriggerDisabled = false, + fireWallDisabled = false, + gpsMode = PowerManagerLocationModes.THROTTLE_SCREEN_OFF, + forceAllAppsStandby = false, + forceBackgroundCheck = false, + aodDisabled = false + ) + + /** + * Start using some mildly intrusive tweaks to save power + */ + val MODERATE = BatterySaverConstantsConfig( + launchBoostDisabled = false, + vibrationDisabled = false, + soundTriggerDisabled = false, + fireWallDisabled = false, + gpsMode = PowerManagerLocationModes.THROTTLE_SCREEN_OFF, + forceAllAppsStandby = false, + forceBackgroundCheck = false, + ) + + /** + * Sacrifice performance for some extra battery life + */ + val HIGH = BatterySaverConstantsConfig( + dataSaverDisabled = false, + adjustBrightnessDisabled = false, + adjustBrightnessFactor = 0.75f + ) + + /** + * The most we can possibly do to save power + */ + val EXTREME = BatterySaverConstantsConfig( + dataSaverDisabled = false, + animationDisabled = true, + adjustBrightnessDisabled = false + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/draco/buoy/utils/BatterySaverManager.kt b/app/src/main/java/com/draco/buoy/utils/BatterySaverManager.kt index f63b681..d9ba9be 100644 --- a/app/src/main/java/com/draco/buoy/utils/BatterySaverManager.kt +++ b/app/src/main/java/com/draco/buoy/utils/BatterySaverManager.kt @@ -3,7 +3,7 @@ package com.draco.buoy.utils import android.content.ContentResolver import android.provider.Settings import com.draco.buoy.models.BatterySaverConstantsConfig -import com.draco.buoy.repositories.BatterySaverSecureSettings +import com.draco.buoy.repositories.constants.BatterySaverSecureSettings class BatterySaverManager(private val contentResolver: ContentResolver) { /** @@ -80,4 +80,28 @@ class BatterySaverManager(private val contentResolver: ContentResolver) { fun setConstantsConfig(config: BatterySaverConstantsConfig) { setConstantsString(config.toString()) } + + /** + * Quick way to apply either type of config + */ + fun apply(config: Any) { + when (config) { + is String -> setConstantsString(config) + is BatterySaverConstantsConfig -> setConstantsConfig(config) + } + + setLowPower(true) + setLowPowerSticky(true) + setLowPowerStickyAutoDisableEnabled(false) + } + + /** + * Quick way to reset everything + */ + fun reset() { + resetConstants() + setLowPower(false) + setLowPowerSticky(false) + setLowPowerStickyAutoDisableEnabled(true) + } } \ No newline at end of file -- cgit v1.2.3