diff options
10 files changed, 103 insertions, 34 deletions
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f0e401..b72fa01 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -25,6 +25,10 @@ <activity android:name=".views.PermissionActivity" android:label="@string/title_permission"/> + + <receiver android:name=".receivers.ExternalProfileReceiver" + android:exported="true" + tools:ignore="ExportedReceiver" /> </application> </manifest>
\ No newline at end of file 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<EditTextPreference>(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<SwitchPreference>(getString(R.string.pref_config_key_aod_enabled))!!.isChecked, findPreference<SwitchPreference>(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/constants/BatterySaverConstants.kt index f8ca29c..33d0b3d 100644 --- a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstants.kt +++ b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverConstants.kt @@ -1,4 +1,4 @@ -package com.draco.buoy.repositories +package com.draco.buoy.repositories.constants object BatterySaverConstants { const val ADVERTISE_IS_ENABLED = "advertise_is_enabled" diff --git a/app/src/main/java/com/draco/buoy/repositories/BatterySaverSecureSettings.kt b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverSecureSettings.kt index e381081..72573a2 100644 --- a/app/src/main/java/com/draco/buoy/repositories/BatterySaverSecureSettings.kt +++ b/app/src/main/java/com/draco/buoy/repositories/constants/BatterySaverSecureSettings.kt @@ -1,4 +1,4 @@ -package com.draco.buoy.repositories +package com.draco.buoy.repositories.constants /** * Expose secure settings hidden in the Android APIs 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/PowerManagerLocationModes.kt b/app/src/main/java/com/draco/buoy/repositories/constants/PowerManagerLocationModes.kt index 98b5b03..35e5713 100644 --- a/app/src/main/java/com/draco/buoy/repositories/PowerManagerLocationModes.kt +++ b/app/src/main/java/com/draco/buoy/repositories/constants/PowerManagerLocationModes.kt @@ -1,4 +1,4 @@ -package com.draco.buoy.repositories +package com.draco.buoy.repositories.constants import android.os.PowerManager diff --git a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstantsConfigProfiles.kt b/app/src/main/java/com/draco/buoy/repositories/profiles/BatterySaverConstantsConfigProfiles.kt index 75a5228..bae82b8 100644 --- a/app/src/main/java/com/draco/buoy/repositories/BatterySaverConstantsConfigProfiles.kt +++ b/app/src/main/java/com/draco/buoy/repositories/profiles/BatterySaverConstantsConfigProfiles.kt @@ -1,6 +1,7 @@ -package com.draco.buoy.repositories +package com.draco.buoy.repositories.profiles import com.draco.buoy.models.BatterySaverConstantsConfig +import com.draco.buoy.repositories.constants.PowerManagerLocationModes object BatterySaverConstantsConfigProfiles { /** 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 |