11package com.httpsms
22
33import android.Manifest
4+ import android.annotation.SuppressLint
45import android.app.NotificationChannel
56import android.app.NotificationManager
67import android.content.Context
78import android.content.Intent
89import android.content.IntentFilter
910import android.content.pm.PackageManager
11+ import android.net.Uri
1012import android.os.Build
1113import android.os.Bundle
14+ import android.os.PowerManager
15+ import android.provider.Settings as ProviderSettings
1216import android.telephony.PhoneNumberUtils
1317import android.view.View
18+ import android.widget.LinearLayout
1419import android.widget.TextView
1520import android.widget.Toast
1621import androidx.activity.result.contract.ActivityResultContracts
1722import androidx.appcompat.app.AppCompatActivity
1823import androidx.core.app.ActivityCompat
1924import androidx.lifecycle.MutableLiveData
25+ import androidx.work.Constraints
2026import androidx.work.ExistingPeriodicWorkPolicy
27+ import androidx.work.NetworkType
2128import androidx.work.PeriodicWorkRequestBuilder
2229import androidx.work.WorkManager
2330import 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 }
0 commit comments