Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -358,10 +358,6 @@
android:windowSoftInputMode="adjustResize|stateAlwaysHidden"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Blur" />
<activity
android:name=".ui.common.BatteryOptimizationDialogActivity"
android:launchMode="singleTop"
android:theme="@style/AppTheme.Music" />
<activity
android:name=".ui.imageeditor.ImageEditorActivity"
android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation"
Expand Down
73 changes: 49 additions & 24 deletions app/src/main/java/one/mixin/android/extension/ContextExtension.kt
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ import android.os.Build
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.os.PowerManager
import android.os.VibrationEffect
import android.os.VibrationEffect.EFFECT_CLICK
import android.os.VibrationEffect.EFFECT_DOUBLE_CLICK
Expand Down Expand Up @@ -1278,40 +1279,64 @@ fun Context.getStringDeviceId(): String {
return getStringDeviceId(contentResolver)
}

fun Context.handleIgnoreBatteryOptimization(newTask: Boolean = false) {
if (Build.MANUFACTURER.equalsIgnoreCase("google") || Build.MANUFACTURER.equalsIgnoreCase("samsung")) {
requestIgnoreBatteryOptimization(newTask)
fun Context.isBatteryOptimizationRestricted(): Boolean {
return isSystemBatteryOptimizationRestricted()
}

private fun Context.isSystemBatteryOptimizationRestricted(): Boolean {
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && !RomUtil.isEmui) {
getSystemService<ActivityManager>()?.isBackgroundRestricted == true
} else {
openIgnoreBatteryOptimizationSetting(newTask)
getSystemService<PowerManager>()?.isIgnoringBatteryOptimizations(packageName) == false
}
}

fun Context.requestIgnoreBatteryOptimization(newTask: Boolean = false) {
Intent().apply {
action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
data = Uri.parse("package:$packageName")
if (newTask) {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
@SuppressLint("BatteryLife")
fun Context.openBatteryOptimizationSetting() {
val appDetailsIntent =
Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
data = Uri.parse("package:$packageName")
}
try {
startActivity(this)
} catch (e: ActivityNotFoundException) {
Timber.w("Battery optimization activity not found")
val requestIntent =
Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS).apply {
data = Uri.parse("package:$packageName")
}
val intents =
if (RomUtil.isOneUi) {
listOf(appDetailsIntent, requestIntent)
} else if (
Build.MANUFACTURER.equals("google", ignoreCase = true) ||
Build.MANUFACTURER.equals("samsung", ignoreCase = true) ||
Build.MANUFACTURER.equals("huawei", ignoreCase = true) ||
Build.MANUFACTURER.equals("honor", ignoreCase = true)
) {
listOf(requestIntent, appDetailsIntent)
} else {
listOf(appDetailsIntent, requestIntent)
}

if (!intents.any(::tryStartActivity)) {
Timber.w("Battery optimization page activity not found")
}
}

fun Context.openIgnoreBatteryOptimizationSetting(newTask: Boolean = false) {
Intent().apply {
action = Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS
if (newTask) {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
try {
startActivity(this)
} catch (e: ActivityNotFoundException) {
Timber.w("Power setting activity not found")
private fun Context.tryStartActivity(intent: Intent): Boolean {
val launchIntent =
Intent(intent).apply {
if (this@tryStartActivity !is Activity) {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}
}
if (launchIntent.resolveActivity(packageManager) == null) {
return false
}
return try {
startActivity(launchIntent)
true
} catch (e: ActivityNotFoundException) {
false
} catch (e: SecurityException) {
false
}
}

Expand Down
18 changes: 2 additions & 16 deletions app/src/main/java/one/mixin/android/job/BlazeMessageService.kt
Original file line number Diff line number Diff line change
@@ -1,18 +1,14 @@
package one.mixin.android.job

import android.annotation.SuppressLint
import android.app.ActivityManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.content.pm.ServiceInfo
import android.os.Build
import android.os.IBinder
import android.os.PowerManager
import androidx.core.app.NotificationCompat
import androidx.core.app.ServiceCompat
import androidx.core.content.ContextCompat
import androidx.core.content.getSystemService
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleService
import androidx.lifecycle.lifecycleScope
Expand Down Expand Up @@ -53,6 +49,7 @@ import one.mixin.android.db.pending.PendingDatabase
import one.mixin.android.event.ExpiredEvent
import one.mixin.android.extension.base64Encode
import one.mixin.android.extension.currentTimeSeconds
import one.mixin.android.extension.isBatteryOptimizationRestricted
import one.mixin.android.extension.networkConnected
import one.mixin.android.extension.notificationManager
import one.mixin.android.extension.supportsOreo
Expand All @@ -65,11 +62,9 @@ import one.mixin.android.messenger.Hedwig
import one.mixin.android.messenger.HedwigImp
import one.mixin.android.receiver.ExitBroadcastReceiver
import one.mixin.android.session.Session
import one.mixin.android.ui.common.BatteryOptimizationDialogActivity
import one.mixin.android.ui.home.MainActivity
import one.mixin.android.util.ChannelManager.Companion.createNodeChannel
import one.mixin.android.util.GsonHelper
import one.mixin.android.util.RomUtil
import one.mixin.android.util.reportException
import one.mixin.android.vo.CallStateLiveData
import one.mixin.android.vo.MessageStatus
Expand Down Expand Up @@ -170,8 +165,6 @@ class BlazeMessageService : LifecycleService(), NetworkEventProvider.Listener, C
private val accountId = Session.getAccountId()
private val gson = GsonHelper.customGson

private val powerManager by lazy { getSystemService<PowerManager>() }
private val activityManager by lazy { getSystemService<ActivityManager>() }
private var isIgnoringBatteryOptimizations = false
private var disposable: Disposable? = null
private val destroyScope = scope(Lifecycle.Event.ON_DESTROY)
Expand Down Expand Up @@ -241,9 +234,6 @@ class BlazeMessageService : LifecycleService(), NetworkEventProvider.Listener, C

if (intent.action == ACTION_TO_BACKGROUND) {
stopForeground(STOP_FOREGROUND_REMOVE)
if (!isIgnoringBatteryOptimizations) {
BatteryOptimizationDialogActivity.show(this, true)
}
return START_STICKY
}

Expand Down Expand Up @@ -288,11 +278,7 @@ class BlazeMessageService : LifecycleService(), NetworkEventProvider.Listener, C
}

private fun updateIgnoringBatteryOptimizations() {
isIgnoringBatteryOptimizations = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && !RomUtil.isEmui) {
activityManager?.isBackgroundRestricted?.not()
} else {
powerManager?.isIgnoringBatteryOptimizations(packageName)
} ?: false
isIgnoringBatteryOptimizations = !applicationContext.isBatteryOptimizationRestricted()
}

@SuppressLint("NewApi")
Expand Down

This file was deleted.

28 changes: 0 additions & 28 deletions app/src/main/java/one/mixin/android/ui/home/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,13 @@ package one.mixin.android.ui.home
import android.Manifest
import android.annotation.SuppressLint
import android.app.Activity
import android.app.ActivityManager
import android.app.Dialog
import android.app.NotificationManager
import android.content.Context
import android.content.Intent
import android.content.IntentSender
import android.os.Build
import android.os.Bundle
import android.os.PowerManager
import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.content.getSystemService
import androidx.fragment.app.DialogFragment
Expand Down Expand Up @@ -50,7 +48,6 @@ import one.mixin.android.Constants
import one.mixin.android.Constants.APP_VERSION
import one.mixin.android.Constants.Account
import one.mixin.android.Constants.Account.PREF_BACKUP
import one.mixin.android.Constants.Account.PREF_BATTERY_OPTIMIZE
import one.mixin.android.Constants.Account.PREF_CHECK_STORAGE
import one.mixin.android.Constants.Account.PREF_DEVICE_SDK
import one.mixin.android.Constants.Account.PREF_LOGIN_OR_SIGN_UP
Expand Down Expand Up @@ -130,7 +127,6 @@ import one.mixin.android.tip.wc.WCEvent
import one.mixin.android.tip.wc.WalletConnect
import one.mixin.android.tip.wc.WalletConnectV2
import one.mixin.android.ui.common.BaseFragment
import one.mixin.android.ui.common.BatteryOptimizationDialogActivity
import one.mixin.android.ui.common.BlazeBaseActivity
import one.mixin.android.ui.common.LoginVerifyBottomSheetDialogFragment
import one.mixin.android.ui.common.NavigationController
Expand Down Expand Up @@ -171,7 +167,6 @@ import one.mixin.android.util.BiometricUtil
import one.mixin.android.util.ErrorHandler
import one.mixin.android.util.ErrorHandler.Companion.SERVER
import one.mixin.android.util.GsonHelper
import one.mixin.android.util.RomUtil
import one.mixin.android.util.RootUtil
import one.mixin.android.util.analytics.AnalyticsTracker
import one.mixin.android.util.reportException
Expand Down Expand Up @@ -471,7 +466,6 @@ class MainActivity : BlazeBaseActivity(), WalletMissingBtcAddressFragment.Callba
refreshStickerAlbum()
refreshExternalSchemes()
cleanCache()
checkBatteryOptimization()

if (!defaultSharedPreferences.getBoolean(PREF_SYNC_CIRCLE, false)) {
jobManager.addJobInBackground(RefreshCircleJob())
Expand Down Expand Up @@ -613,28 +607,6 @@ class MainActivity : BlazeBaseActivity(), WalletMissingBtcAddressFragment.Callba
return currentVersion > MINI_VERSION && CURRENT_VERSION != currentVersion
}

@SuppressLint("BatteryLife")
private fun checkBatteryOptimization() {
val batteryOptimize = defaultSharedPreferences.getLong(PREF_BATTERY_OPTIMIZE, 0)
val cur = System.currentTimeMillis()
if (cur - batteryOptimize > INTERVAL_24_HOURS) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && !RomUtil.isEmui) {
getSystemService<ActivityManager>()?.let { am ->
if (am.isBackgroundRestricted) {
BatteryOptimizationDialogActivity.show(this)
}
}
} else {
getSystemService<PowerManager>()?.let { pm ->
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
BatteryOptimizationDialogActivity.show(this)
}
}
}
defaultSharedPreferences.putLong(PREF_BATTERY_OPTIMIZE, cur)
}
}

private fun delayShowModifyMobile() =
lifecycleScope.launch {
delay(2000)
Expand Down
Loading
Loading