@@ -14,15 +14,12 @@ import android.content.Intent
1414import android.content.pm.PackageManager
1515import android.os.Bundle
1616import android.os.Looper
17- import android.os.PowerManager
18- import android.provider.Settings
1917import android.text.TextUtils
2018import android.view.Menu
2119import android.view.MenuItem
2220import android.view.View
2321import androidx.annotation.VisibleForTesting
2422import androidx.appcompat.app.AlertDialog
25- import androidx.core.net.toUri
2623import androidx.drawerlayout.widget.DrawerLayout
2724import androidx.lifecycle.Lifecycle
2825import androidx.lifecycle.lifecycleScope
@@ -36,10 +33,10 @@ import com.nextcloud.client.jobs.MediaFoldersDetectionWork
3633import com.nextcloud.client.jobs.NotificationWork
3734import com.nextcloud.client.jobs.upload.FileUploadWorker
3835import com.nextcloud.client.preferences.SubFolderRule
36+ import com.nextcloud.utils.BatteryOptimizationHelper
3937import com.nextcloud.utils.extensions.getParcelableArgument
4038import com.nextcloud.utils.extensions.isDialogFragmentReady
4139import com.nextcloud.utils.extensions.setVisibleIf
42- import com.owncloud.android.BuildConfig
4340import com.owncloud.android.MainApp
4441import com.owncloud.android.R
4542import com.owncloud.android.databinding.StoragePermissionWarningBannerBinding
@@ -576,7 +573,7 @@ class SyncedFoldersActivity :
576573 }
577574 if (syncedFolderDisplayItem.isEnabled) {
578575 backgroundJobManager.startAutoUploadImmediately(syncedFolderDisplayItem, overridePowerSaving = false )
579- showBatteryOptimizationInfo ()
576+ showBatteryOptimizationDialogIfNeeded ()
580577 }
581578 }
582579
@@ -710,7 +707,7 @@ class SyncedFoldersActivity :
710707 }
711708 dialogFragment = null
712709 if (syncedFolder.isEnabled) {
713- showBatteryOptimizationInfo ()
710+ showBatteryOptimizationDialogIfNeeded ()
714711 }
715712 }
716713
@@ -834,44 +831,35 @@ class SyncedFoldersActivity :
834831 }
835832 }
836833
837- private fun showBatteryOptimizationInfo () {
838- if (checkIfBatteryOptimizationEnabled()) {
839- val alertDialogBuilder = MaterialAlertDialogBuilder (this , R .style.Theme_ownCloud_Dialog )
840- .setTitle(getString(R .string.battery_optimization_title))
841- .setMessage(getString(R .string.battery_optimization_message))
842- .setPositiveButton(getString(R .string.battery_optimization_disable)) { _, _ ->
843- // show instant upload
844- @SuppressLint(" BatteryLife" )
845- val intent = Intent (
846- Settings .ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS ,
847- (" package:" + BuildConfig .APPLICATION_ID ).toUri()
848- )
849- if (intent.resolveActivity(packageManager) != null ) {
850- startActivity(intent)
851- }
852- }
853- .setNeutralButton(getString(R .string.battery_optimization_close)) { dialog, _ -> dialog.dismiss() }
854- .setIcon(R .drawable.ic_battery_alert)
855- if (lifecycle.currentState.isAtLeast(Lifecycle .State .RESUMED )) {
856- val alertDialog = alertDialogBuilder.show()
857- viewThemeUtils.platform.colorTextButtons(
858- alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ),
859- alertDialog.getButton(AlertDialog .BUTTON_NEUTRAL )
860- )
861- }
834+ private fun showBatteryOptimizationDialogIfNeeded () {
835+ if (! BatteryOptimizationHelper .isBatteryOptimizationEnabled(this )) {
836+ Log_OC .d(TAG , " battery optimization is disabled" )
837+ return
862838 }
839+
840+ showBatteryOptimizationDialog()
863841 }
864842
865- /* *
866- * Check if battery optimization is enabled. If unknown, fallback to true.
867- *
868- * @return true if battery optimization is enabled
869- */
870- private fun checkIfBatteryOptimizationEnabled (): Boolean {
871- val powerManager = getSystemService(POWER_SERVICE ) as PowerManager ?
872- return when {
873- powerManager != null -> ! powerManager.isIgnoringBatteryOptimizations(BuildConfig .APPLICATION_ID )
874- else -> ! appInfo.isDebugBuild
843+ private fun showBatteryOptimizationDialog () {
844+ if (! lifecycle.currentState.isAtLeast(Lifecycle .State .RESUMED )) {
845+ Log_OC .w(TAG , " Activity not resumed, skipping battery dialog" )
846+ return
875847 }
848+
849+ val dialog = MaterialAlertDialogBuilder (this , R .style.Theme_ownCloud_Dialog )
850+ .setTitle(R .string.battery_optimization_title)
851+ .setMessage(R .string.battery_optimization_message)
852+ .setPositiveButton(R .string.battery_optimization_disable) { _, _ ->
853+ BatteryOptimizationHelper .openBatteryOptimizationSettings(this )
854+ }
855+ .setNeutralButton(R .string.battery_optimization_close, null )
856+ .setIcon(R .drawable.ic_battery_alert)
857+
858+ val alertDialog = dialog.show()
859+
860+ viewThemeUtils.platform.colorTextButtons(
861+ alertDialog.getButton(AlertDialog .BUTTON_POSITIVE ),
862+ alertDialog.getButton(AlertDialog .BUTTON_NEUTRAL )
863+ )
876864 }
877865}
0 commit comments