alert trigger
This commit is contained in:
parent
f1a2707190
commit
92a24851f1
@ -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
|
||||
@ -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" />
|
||||
|
||||
@ -39,7 +40,7 @@
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.MOBPOS">
|
||||
<receiver android:name=".auto_settlement.AlarmReceiver" android:exported="false"/>
|
||||
<service android:name=".auto_settlement.AutoSettleService" android:exported="false" android:foregroundServiceType="dataSync"/>
|
||||
<service android:name=".auto_settlement.AutoSettleService" android:exported="false" android:foregroundServiceType="dataSync" />
|
||||
<activity
|
||||
android:name="com.mob.utsmyanmar.MainActivity"
|
||||
android:exported="true"
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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")
|
||||
}
|
||||
}
|
||||
@ -5,32 +5,35 @@ 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(){
|
||||
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()
|
||||
}
|
||||
|
||||
@RequiresApi(Build.VERSION_CODES.N)
|
||||
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
|
||||
if(!SystemParamsOperation.getInstance().settlementStatus){
|
||||
if (!SystemParamsOperation.getInstance().settlementStatus) {
|
||||
stopSelf()
|
||||
return START_NOT_STICKY
|
||||
}
|
||||
@ -41,17 +44,25 @@ class AutoSettleService : Service(){
|
||||
return START_NOT_STICKY
|
||||
}
|
||||
|
||||
override fun onBind(intent: Intent?): IBinder? = null
|
||||
override fun onBind(intent: Intent?): IBinder? = null
|
||||
|
||||
@SuppressLint("ForegroundServiceType")
|
||||
private fun startForegroundNotification(){
|
||||
val manager = ContextCompat.getSystemService(this, NotificationManager::class.java)
|
||||
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
|
||||
private fun startForegroundNotification() {
|
||||
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)
|
||||
|
||||
@ -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)
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user