alert trigger

This commit is contained in:
moon 2026-07-22 10:40:56 +06:30
parent f1a2707190
commit 92a24851f1
6 changed files with 122 additions and 14 deletions

View File

@ -8,3 +8,7 @@
* fixed recent transaction only working for top 3
* routed to dashboard after printing receipt
* receipt printing animation re-scale
*
### version 3.4
* disable display always on
* auto-settlement

View File

@ -19,6 +19,7 @@
<uses-permission android:name="com.sunmi.perm.SECURITY" />
<uses-permission android:name="com.sunmi.perm.CONTACTLESS_CARD" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.CAMERA" />

View File

@ -1,26 +1,28 @@
package com.mob.utsmyanmar
import android.Manifest
import android.os.Build
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.annotation.RequiresApi
import androidx.annotation.RequiresPermission
import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat
import androidx.core.view.WindowInsetsControllerCompat
import androidx.navigation.compose.rememberNavController
import com.mob.utsmyanmar.auto_settlement.SettlementScheduler
import com.mob.utsmyanmar.ui.navigation.AppNavGraph
import com.mob.utsmyanmar.ui.theme.MOBPOSTheme
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class MainActivity : ComponentActivity() {
@RequiresPermission(Manifest.permission.SCHEDULE_EXACT_ALARM)
@RequiresApi(Build.VERSION_CODES.N)
override fun onCreate(savedInstanceState: Bundle?) {
if (intent.getBooleanExtra("AUTO_SETTLEMENT", false)) {
print("auto Settlement will run here")
}
SettlementScheduler.schedule(this)
// installSplashScreen()
super.onCreate(savedInstanceState)
enableEdgeToEdge()

View File

@ -5,17 +5,22 @@ import android.content.Context
import android.content.Intent
import androidx.core.content.ContextCompat
import dagger.hilt.android.AndroidEntryPoint
import sunmi.sunmiui.utils.LogUtil
@AndroidEntryPoint
class AlarmReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val serviceIntent = Intent(context, AutoSettleService::class.java)
LogUtil.d(AlarmReceiver::class.java.simpleName, "Alert service")
if (context != null) {
ContextCompat.startForegroundService(
context,
serviceIntent
)
}
LogUtil.d(AlarmReceiver::class.java.simpleName, "Foreground service")
}
}

View File

@ -5,26 +5,29 @@ import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.Service
import android.content.Intent
import android.media.AudioAttributes
import android.media.RingtoneManager
import android.os.Build
import android.os.IBinder
import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat
import androidx.core.content.ContextCompat
import com.mob.utsmyanmar.MainActivity
import com.mob.utsmyanmar.R
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation
import dagger.hilt.android.AndroidEntryPoint
import sunmi.sunmiui.utils.LogUtil
@AndroidEntryPoint
class AutoSettleService : Service() {
companion object {
const val CHANNEL_ID = "auto_settlement_channel"
const val NOTIFICATION_ID = 1002
const val NOTIFICATION_ID = 1001
}
override fun onCreate() {
super.onCreate()
LogUtil.d(AutoSettleService::class.java.simpleName, "auto settle service called")
startForegroundNotification()
}
@ -45,13 +48,21 @@ class AutoSettleService : Service(){
@SuppressLint("ForegroundServiceType")
private fun startForegroundNotification() {
val manager = ContextCompat.getSystemService(this, NotificationManager::class.java)
LogUtil.d(AutoSettleService::class.java.simpleName, "foreground noti called")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val channel = NotificationChannel(
CHANNEL_ID,
"AUTO SETTLEMENT",
NotificationManager.IMPORTANCE_LOW
NotificationManager.IMPORTANCE_HIGH
)
channel.description = "Auto Settlement notification"
channel.enableVibration(true)
channel.setSound(
RingtoneManager.getDefaultUri(
RingtoneManager.TYPE_NOTIFICATION
), AudioAttributes.Builder().setUsage(AudioAttributes.USAGE_NOTIFICATION).build()
)
val manager = getSystemService(NotificationManager::class.java)
manager?.createNotificationChannel(channel)
}
@ -59,6 +70,7 @@ class AutoSettleService : Service(){
.setSmallIcon(R.drawable.logo_mob)
.setContentTitle("Auto Settlement")
.setContentText("Processing...")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.build()
startForeground(NOTIFICATION_ID, notification)

View File

@ -0,0 +1,84 @@
package com.mob.utsmyanmar.auto_settlement
import android.Manifest
import android.annotation.SuppressLint
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import androidx.annotation.RequiresPermission
import java.util.Calendar
object SettlementScheduler {
@RequiresPermission(Manifest.permission.SCHEDULE_EXACT_ALARM)
fun schedule(context: Context) {
val calendar = Calendar.getInstance().apply {
// Auto settlement time
set(Calendar.HOUR_OF_DAY, 1)
set(Calendar.MINUTE, 10)
set(Calendar.SECOND, 0)
if (before(Calendar.getInstance())) {
add(Calendar.DAY_OF_MONTH, 1)
}
}
val alarmManager =
context.getSystemService(Context.ALARM_SERVICE)
as AlarmManager
val intent = Intent(
context,
AlarmReceiver::class.java
)
val pendingIntent = PendingIntent.getBroadcast(
context,
100,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or
PendingIntent.FLAG_IMMUTABLE
)
alarmManager.setExactAndAllowWhileIdle(
AlarmManager.RTC_WAKEUP,
calendar.timeInMillis,
pendingIntent
)
}
@SuppressLint("ServiceCast")
fun cancel(context: Context) {
val alarmManager =
context.getSystemService(Context.ALARM_SERVICE)
as AlarmManager
val intent = Intent(
context,
AlarmReceiver::class.java
)
val pendingIntent = PendingIntent.getBroadcast(
context,
100,
intent,
PendingIntent.FLAG_UPDATE_CURRENT or
PendingIntent.FLAG_IMMUTABLE
)
alarmManager.cancel(pendingIntent)
}
}