alert trigger
This commit is contained in:
parent
f1a2707190
commit
92a24851f1
@ -8,3 +8,7 @@
|
|||||||
* fixed recent transaction only working for top 3
|
* fixed recent transaction only working for top 3
|
||||||
* routed to dashboard after printing receipt
|
* routed to dashboard after printing receipt
|
||||||
* receipt printing animation re-scale
|
* 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.SECURITY" />
|
||||||
<uses-permission android:name="com.sunmi.perm.CONTACTLESS_CARD" />
|
<uses-permission android:name="com.sunmi.perm.CONTACTLESS_CARD" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
|
||||||
|
|||||||
@ -1,26 +1,28 @@
|
|||||||
package com.mob.utsmyanmar
|
package com.mob.utsmyanmar
|
||||||
|
|
||||||
|
import android.Manifest
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import androidx.activity.ComponentActivity
|
import androidx.activity.ComponentActivity
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.activity.enableEdgeToEdge
|
import androidx.activity.enableEdgeToEdge
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
|
import androidx.annotation.RequiresPermission
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
import androidx.core.view.WindowInsetsCompat
|
||||||
import androidx.core.view.WindowInsetsControllerCompat
|
import androidx.core.view.WindowInsetsControllerCompat
|
||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
|
import com.mob.utsmyanmar.auto_settlement.SettlementScheduler
|
||||||
import com.mob.utsmyanmar.ui.navigation.AppNavGraph
|
import com.mob.utsmyanmar.ui.navigation.AppNavGraph
|
||||||
import com.mob.utsmyanmar.ui.theme.MOBPOSTheme
|
import com.mob.utsmyanmar.ui.theme.MOBPOSTheme
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class MainActivity : ComponentActivity() {
|
class MainActivity : ComponentActivity() {
|
||||||
|
@RequiresPermission(Manifest.permission.SCHEDULE_EXACT_ALARM)
|
||||||
@RequiresApi(Build.VERSION_CODES.N)
|
@RequiresApi(Build.VERSION_CODES.N)
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
if (intent.getBooleanExtra("AUTO_SETTLEMENT", false)) {
|
SettlementScheduler.schedule(this)
|
||||||
print("auto Settlement will run here")
|
|
||||||
}
|
|
||||||
// installSplashScreen()
|
// installSplashScreen()
|
||||||
super.onCreate(savedInstanceState)
|
super.onCreate(savedInstanceState)
|
||||||
enableEdgeToEdge()
|
enableEdgeToEdge()
|
||||||
|
|||||||
@ -5,17 +5,22 @@ import android.content.Context
|
|||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.core.content.ContextCompat
|
import androidx.core.content.ContextCompat
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import sunmi.sunmiui.utils.LogUtil
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class AlarmReceiver : BroadcastReceiver() {
|
class AlarmReceiver : BroadcastReceiver() {
|
||||||
override fun onReceive(context: Context?, intent: Intent?) {
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
val serviceIntent = Intent(context, AutoSettleService::class.java)
|
val serviceIntent = Intent(context, AutoSettleService::class.java)
|
||||||
|
|
||||||
|
LogUtil.d(AlarmReceiver::class.java.simpleName, "Alert service")
|
||||||
|
|
||||||
if (context != null) {
|
if (context != null) {
|
||||||
ContextCompat.startForegroundService(
|
ContextCompat.startForegroundService(
|
||||||
context,
|
context,
|
||||||
serviceIntent
|
serviceIntent
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LogUtil.d(AlarmReceiver::class.java.simpleName, "Foreground service")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -5,26 +5,29 @@ import android.app.NotificationChannel
|
|||||||
import android.app.NotificationManager
|
import android.app.NotificationManager
|
||||||
import android.app.Service
|
import android.app.Service
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
|
import android.media.AudioAttributes
|
||||||
|
import android.media.RingtoneManager
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.IBinder
|
import android.os.IBinder
|
||||||
import androidx.annotation.RequiresApi
|
import androidx.annotation.RequiresApi
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
import androidx.core.content.ContextCompat
|
|
||||||
import com.mob.utsmyanmar.MainActivity
|
import com.mob.utsmyanmar.MainActivity
|
||||||
import com.mob.utsmyanmar.R
|
import com.mob.utsmyanmar.R
|
||||||
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation
|
import com.utsmyanmar.paylibs.utils.core_utils.SystemParamsOperation
|
||||||
import dagger.hilt.android.AndroidEntryPoint
|
import dagger.hilt.android.AndroidEntryPoint
|
||||||
|
import sunmi.sunmiui.utils.LogUtil
|
||||||
|
|
||||||
@AndroidEntryPoint
|
@AndroidEntryPoint
|
||||||
class AutoSettleService : Service() {
|
class AutoSettleService : Service() {
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
const val CHANNEL_ID = "auto_settlement_channel"
|
const val CHANNEL_ID = "auto_settlement_channel"
|
||||||
const val NOTIFICATION_ID = 1002
|
const val NOTIFICATION_ID = 1001
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onCreate() {
|
override fun onCreate() {
|
||||||
super.onCreate()
|
super.onCreate()
|
||||||
|
LogUtil.d(AutoSettleService::class.java.simpleName, "auto settle service called")
|
||||||
startForegroundNotification()
|
startForegroundNotification()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,13 +48,21 @@ class AutoSettleService : Service(){
|
|||||||
|
|
||||||
@SuppressLint("ForegroundServiceType")
|
@SuppressLint("ForegroundServiceType")
|
||||||
private fun startForegroundNotification() {
|
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) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
val channel = NotificationChannel(
|
val channel = NotificationChannel(
|
||||||
CHANNEL_ID,
|
CHANNEL_ID,
|
||||||
"AUTO SETTLEMENT",
|
"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)
|
manager?.createNotificationChannel(channel)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,6 +70,7 @@ class AutoSettleService : Service(){
|
|||||||
.setSmallIcon(R.drawable.logo_mob)
|
.setSmallIcon(R.drawable.logo_mob)
|
||||||
.setContentTitle("Auto Settlement")
|
.setContentTitle("Auto Settlement")
|
||||||
.setContentText("Processing...")
|
.setContentText("Processing...")
|
||||||
|
.setPriority(NotificationCompat.PRIORITY_HIGH)
|
||||||
.build()
|
.build()
|
||||||
|
|
||||||
startForeground(NOTIFICATION_ID, notification)
|
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