Skip to content

Commit ce72469

Browse files
committed
Add battery optimization disable button
1 parent 10d703f commit ce72469

File tree

4 files changed

+61
-1
lines changed

4 files changed

+61
-1
lines changed

android/app/src/main/AndroidManifest.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
1515
<uses-permission android:name="android.permission.WAKE_LOCK" />
1616
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
17+
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
1718

1819
<application
1920
android:allowBackup="true"

android/app/src/main/java/com/httpsms/MainActivity.kt

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,30 @@
11
package com.httpsms
22

33
import android.Manifest
4+
import android.annotation.SuppressLint
45
import android.app.NotificationChannel
56
import android.app.NotificationManager
67
import android.content.Context
78
import android.content.Intent
89
import android.content.IntentFilter
910
import android.content.pm.PackageManager
11+
import android.net.Uri
1012
import android.os.Build
1113
import android.os.Bundle
14+
import android.os.PowerManager
15+
import android.provider.Settings as ProviderSettings
1216
import android.telephony.PhoneNumberUtils
1317
import android.view.View
18+
import android.widget.LinearLayout
1419
import android.widget.TextView
1520
import android.widget.Toast
1621
import androidx.activity.result.contract.ActivityResultContracts
1722
import androidx.appcompat.app.AppCompatActivity
1823
import androidx.core.app.ActivityCompat
1924
import androidx.lifecycle.MutableLiveData
25+
import androidx.work.Constraints
2026
import androidx.work.ExistingPeriodicWorkPolicy
27+
import androidx.work.NetworkType
2128
import androidx.work.PeriodicWorkRequestBuilder
2229
import androidx.work.WorkManager
2330
import com.google.android.material.button.MaterialButton
@@ -62,6 +69,7 @@ class MainActivity : AppCompatActivity() {
6269
setLastHeartbeatTimestamp(this)
6370
setVersion()
6471
setHeartbeatListener(this)
72+
setBatteryOptimizationListener()
6573
registerReceivers()
6674
}
6775

@@ -72,6 +80,7 @@ class MainActivity : AppCompatActivity() {
7280
setOwner(getPhoneNumber(this))
7381
refreshToken(this)
7482
setLastHeartbeatTimestamp(this)
83+
setBatteryOptimizationListener()
7584
}
7685

7786
private fun setLastHeartbeatTimestamp(context: Context) {
@@ -99,8 +108,13 @@ class MainActivity : AppCompatActivity() {
99108
private fun scheduleHeartbeatWorker(context: Context) {
100109
val tag = "TAG_HEARTBEAT_WORKER"
101110

111+
val constraints = Constraints.Builder()
112+
.setRequiredNetworkType(NetworkType.CONNECTED)
113+
.build()
114+
102115
val heartbeatWorker =
103116
PeriodicWorkRequestBuilder<HeartbeatWorker>(15, TimeUnit.MINUTES)
117+
.setConstraints(constraints)
104118
.addTag(tag)
105119
.build()
106120

@@ -290,6 +304,23 @@ class MainActivity : AppCompatActivity() {
290304
Timber.d("creating permissions launcher")
291305
}
292306

307+
@SuppressLint("BatteryLife")
308+
private fun setBatteryOptimizationListener() {
309+
val pm = getSystemService(POWER_SERVICE) as PowerManager
310+
if (!pm.isIgnoringBatteryOptimizations(packageName)) {
311+
val button = findViewById<MaterialButton>(R.id.batteryOptimizationButtonButton)
312+
button.setOnClickListener {
313+
val intent = Intent()
314+
intent.action = ProviderSettings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS
315+
intent.data = Uri.parse("package:$packageName")
316+
startActivity(intent)
317+
}
318+
} else {
319+
val layout = findViewById<LinearLayout>(R.id.batteryOptimizationLinearLayout)
320+
layout.visibility = View.GONE
321+
}
322+
}
323+
293324
private fun setHeartbeatListener(context: Context) {
294325
findViewById<MaterialButton>(R.id.mainHeartbeatButton).setOnClickListener{onHeartbeatClick(context)}
295326
}

android/app/src/main/res/layout/activity_main.xml

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@
8585
</com.google.android.material.card.MaterialCardView>
8686

8787
<LinearLayout
88-
android:id="@+id/linearLayout"
88+
android:id="@+id/batteryOptimizationLinearLayout"
8989
android:layout_width="match_parent"
9090
android:layout_height="wrap_content"
9191
android:layout_marginTop="16dp"
@@ -95,6 +95,33 @@
9595
app:layout_constraintStart_toStartOf="parent"
9696
app:layout_constraintTop_toBottomOf="@+id/mainPhoneCard">
9797

98+
<com.google.android.material.button.MaterialButton
99+
android:id="@+id/batteryOptimizationButtonButton"
100+
style="@style/Widget.MaterialComponents.Button.Icon"
101+
android:layout_width="match_parent"
102+
android:layout_height="wrap_content"
103+
android:backgroundTint="@color/pink_500"
104+
android:drawableTint="@color/white"
105+
android:padding="10dp"
106+
app:icon="@android:drawable/ic_lock_idle_low_battery"
107+
android:text="@string/disable_battery_optimization"
108+
android:textColor="@color/white"
109+
android:textSize="16sp"
110+
app:iconTint="@color/white"
111+
tools:ignore="TextContrastCheck" />
112+
</LinearLayout>
113+
114+
<LinearLayout
115+
android:id="@+id/linearLayout"
116+
android:layout_width="match_parent"
117+
android:layout_height="wrap_content"
118+
android:layout_marginTop="16dp"
119+
android:layout_weight="50"
120+
android:orientation="vertical"
121+
app:layout_constraintEnd_toEndOf="parent"
122+
app:layout_constraintStart_toStartOf="parent"
123+
app:layout_constraintTop_toBottomOf="@+id/batteryOptimizationLinearLayout">
124+
98125
<com.google.android.material.button.MaterialButton
99126
android:id="@+id/mainHeartbeatButton"
100127
style="@style/Widget.MaterialComponents.Button.Icon"

android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,4 +16,5 @@
1616
<string name="server_url">Server URL</string>
1717
<string name="default_server_url">https://api.httpsms.com</string>
1818
<string name="app_version">httpsms.com - %s</string>
19+
<string name="disable_battery_optimization">Disable Battery Optimization</string>
1920
</resources>

0 commit comments

Comments
 (0)