mirror of
https://github.com/mueller-ma/PrepaidBalance.git
synced 2024-09-20 00:12:15 +02:00
parent
ccf29821ec
commit
862516ab08
@ -21,7 +21,13 @@
|
||||
</intent-filter>
|
||||
</activity>
|
||||
|
||||
<activity android:name="com.github.muellerma.prepaidbalance.ui.PreferenceActivity" />
|
||||
<activity
|
||||
android:name="com.github.muellerma.prepaidbalance.ui.PreferenceActivity"
|
||||
android:exported="false" />
|
||||
|
||||
<receiver
|
||||
android:name=".work.RetryBroadcastReceiver"
|
||||
android:exported="false" />
|
||||
</application>
|
||||
|
||||
</manifest>
|
@ -1,17 +1,19 @@
|
||||
package com.github.muellerma.prepaidbalance.ui
|
||||
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.os.Bundle
|
||||
import android.text.InputType
|
||||
import android.util.Log
|
||||
import android.view.MenuItem
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.core.content.edit
|
||||
import androidx.fragment.app.commit
|
||||
import androidx.preference.EditTextPreference
|
||||
import androidx.preference.Preference
|
||||
import androidx.preference.PreferenceFragmentCompat
|
||||
import androidx.work.Constraints
|
||||
import androidx.work.ExistingPeriodicWorkPolicy
|
||||
import androidx.work.PeriodicWorkRequest
|
||||
import androidx.work.WorkManager
|
||||
import com.github.muellerma.prepaidbalance.R
|
||||
import com.github.muellerma.prepaidbalance.databinding.ActivityPreferenceBinding
|
||||
@ -22,15 +24,6 @@ import com.github.muellerma.prepaidbalance.work.CheckBalanceWorker
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import java.time.Duration
|
||||
import android.R.attr.label
|
||||
|
||||
import android.content.ClipData
|
||||
import android.content.ClipboardManager
|
||||
import android.util.Log
|
||||
import android.widget.Toast
|
||||
import androidx.core.content.edit
|
||||
import androidx.preference.ListPreference
|
||||
|
||||
|
||||
class PreferenceActivity : AppCompatActivity() {
|
||||
@ -80,23 +73,14 @@ class PreferenceActivity : AppCompatActivity() {
|
||||
|
||||
val workPref = getPreference("periodic_checks")
|
||||
workPref.setOnPreferenceChangeListener { _, newValue ->
|
||||
WorkManager.getInstance(preferenceManager.context).apply {
|
||||
if (newValue as Boolean) {
|
||||
val request = PeriodicWorkRequest.Builder(
|
||||
CheckBalanceWorker::class.java,
|
||||
Duration.ofHours(12)
|
||||
)
|
||||
.setConstraints(Constraints.NONE)
|
||||
.build()
|
||||
val context = preferenceManager.context
|
||||
|
||||
enqueueUniquePeriodicWork(
|
||||
"work",
|
||||
ExistingPeriodicWorkPolicy.REPLACE,
|
||||
request
|
||||
)
|
||||
} else {
|
||||
cancelAllWork()
|
||||
}
|
||||
if (newValue as Boolean) {
|
||||
CheckBalanceWorker.enqueue(context)
|
||||
} else {
|
||||
WorkManager
|
||||
.getInstance(preferenceManager.context)
|
||||
.cancelAllWork()
|
||||
}
|
||||
|
||||
true
|
||||
|
@ -1,7 +1,9 @@
|
||||
package com.github.muellerma.prepaidbalance.work
|
||||
|
||||
import android.Manifest
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.pm.PackageManager
|
||||
import android.os.Handler
|
||||
import android.os.Looper
|
||||
@ -10,8 +12,7 @@ import android.util.Log
|
||||
import androidx.annotation.StringRes
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.edit
|
||||
import androidx.work.Worker
|
||||
import androidx.work.WorkerParameters
|
||||
import androidx.work.*
|
||||
import com.github.muellerma.prepaidbalance.R
|
||||
import com.github.muellerma.prepaidbalance.room.AppDatabase
|
||||
import com.github.muellerma.prepaidbalance.room.BalanceEntry
|
||||
@ -25,6 +26,7 @@ import com.github.muellerma.prepaidbalance.utils.NotificationUtils.Companion.get
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.launch
|
||||
import java.time.Duration
|
||||
|
||||
class CheckBalanceWorker(
|
||||
private val context: Context,
|
||||
@ -44,8 +46,21 @@ class CheckBalanceWorker(
|
||||
}
|
||||
|
||||
errorMessage?.let {
|
||||
val retryIntent = Intent(context, RetryBroadcastReceiver::class.java)
|
||||
val retryPendingIntent = PendingIntent.getBroadcast(
|
||||
context,
|
||||
0,
|
||||
retryIntent,
|
||||
PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT
|
||||
)
|
||||
|
||||
val notification = getBaseNotification(context, CHANNEL_ID_ERROR)
|
||||
.setContentTitle(context.getString(errorMessage))
|
||||
.addAction(
|
||||
R.drawable.ic_baseline_refresh_24,
|
||||
context.getString(R.string.retry),
|
||||
retryPendingIntent
|
||||
)
|
||||
|
||||
NotificationUtils.createChannels(context)
|
||||
NotificationUtils
|
||||
@ -60,6 +75,23 @@ class CheckBalanceWorker(
|
||||
companion object {
|
||||
private val TAG = CheckBalanceWorker::class.java.simpleName
|
||||
|
||||
fun enqueue(context: Context) {
|
||||
WorkManager.getInstance(context).apply {
|
||||
val request = PeriodicWorkRequest.Builder(
|
||||
CheckBalanceWorker::class.java,
|
||||
Duration.ofHours(12)
|
||||
)
|
||||
.setConstraints(Constraints.NONE)
|
||||
.build()
|
||||
|
||||
enqueueUniquePeriodicWork(
|
||||
"work",
|
||||
ExistingPeriodicWorkPolicy.REPLACE,
|
||||
request
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
fun checkBalance(context: Context, callback: (CheckResult, String?) -> Unit) {
|
||||
CoroutineScope(Dispatchers.IO).launch {
|
||||
Log.d(TAG, "Remove entries older than 6 months")
|
||||
|
@ -0,0 +1,23 @@
|
||||
package com.github.muellerma.prepaidbalance.work
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.util.Log
|
||||
import com.github.muellerma.prepaidbalance.utils.NotificationUtils
|
||||
|
||||
class RetryBroadcastReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
Log.d(TAG, "onReceive()")
|
||||
|
||||
NotificationUtils
|
||||
.manager(context)
|
||||
.cancel(NotificationUtils.NOTIFICATION_ID_ERROR)
|
||||
|
||||
CheckBalanceWorker.enqueue(context)
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val TAG = RetryBroadcastReceiver::class.java.simpleName
|
||||
}
|
||||
}
|
10
app/src/main/res/drawable/ic_baseline_refresh_24.xml
Normal file
10
app/src/main/res/drawable/ic_baseline_refresh_24.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M17.65,6.35C16.2,4.9 14.21,4 12,4c-4.42,0 -7.99,3.58 -7.99,8s3.57,8 7.99,8c3.73,0 6.84,-2.55 7.73,-6h-2.08c-0.82,2.33 -3.04,4 -5.65,4 -3.31,0 -6,-2.69 -6,-6s2.69,-6 6,-6c1.66,0 3.14,0.69 4.22,1.78L13,11h7V4l-2.35,2.35z"/>
|
||||
</vector>
|
@ -33,4 +33,5 @@
|
||||
<string name="debug_last_ussd_response_none">No request has been made yet</string>
|
||||
<string name="debug_last_ussd_response_invalid">Last request failed with code %d</string>
|
||||
<string name="copied_to_clipboard">Copied to clipboard</string>
|
||||
<string name="retry">Retry</string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user