|
@@ -0,0 +1,405 @@
|
|
|
+package com.sikey.commonservice.model
|
|
|
+
|
|
|
+import android.os.SystemProperties
|
|
|
+import com.sikey.commonservice.model.Config.PROTOCOL_VERSION
|
|
|
+import com.sikey.commonservice.model.Config.SK_PROTOCOL_VERSION
|
|
|
+
|
|
|
+object Config {
|
|
|
+ const val LOCAL_RECEIVER_PERMISSION = "com.xplora.receiver"
|
|
|
+
|
|
|
+ /**
|
|
|
+ * test server: "https://htk-start-dev.myxplora.com"
|
|
|
+ * mp server: "https://htk.myxplora.com"
|
|
|
+ **/
|
|
|
+ const val INIT_URL = "https://htk.myxplora.com"
|
|
|
+ const val INIT_URL_TEST = "https://htk.staging.myxplora.com"
|
|
|
+ const val BASE_DOWNLOAD_URL = "https://xplora-images.s3.eu-central-1.amazonaws.com/"
|
|
|
+ const val INIT_PORT = 443
|
|
|
+ const val PROTOCOL_VERSION = "/v2"
|
|
|
+
|
|
|
+ // Sikey Urls
|
|
|
+ const val SK_URL = "http://api.sikey.com.cn"//"https://sgp.tecanswer.com/"
|
|
|
+ const val SK_PROTOCOL_VERSION = "/api/v2"//"/w/api/v2"
|
|
|
+ const val SK_TOOL_URL = "http://api.tools.sikey.com.cn"
|
|
|
+ const val WS_URL = "ws://api.sikey.com.cn/api/v2/gatewayctx/connect/websocket"//"wss://sgp.tecanswer.com/w/api/v2/gatewayctx/connect/websocket"
|
|
|
+
|
|
|
+ //test keys
|
|
|
+ const val DEFAULT_SN = "112GX110e100000"
|
|
|
+ const val BACK_DOOR = "62a58828255d54c190bf92b2b3542e0ef9285fa479d0595c92c357d53513d0bb"
|
|
|
+ const val TEST_IMEI = "867245070123388"
|
|
|
+ const val TEST_SECRET_KEY_IMEI = "241d017f9d835a9db3ae8a46311bee17"
|
|
|
+ const val TEST_HC = "HC_dT7ezBQWZ2yQIfQgmU2dziROyK"
|
|
|
+ const val TEST_AES_KEY = "SOlpotPE2Dtef1Uf"
|
|
|
+ const val TEST_TICKET = "TK_dRnWFal0bf"
|
|
|
+ //test keys end
|
|
|
+
|
|
|
+ val INIT_SECRET = if (SystemProperties.getBoolean(
|
|
|
+ "ro.product.support.esim",
|
|
|
+ false
|
|
|
+ )
|
|
|
+ ) "91a837b21efe5aedadbd9b2b55d0d41b" else "3472ee0e78e85a9ab0075e2ca61b6d38"
|
|
|
+ val INIT_KEY = if (SystemProperties.getBoolean(
|
|
|
+ "ro.product.support.esim",
|
|
|
+ false
|
|
|
+ )
|
|
|
+ ) "ad4267b6f85655eca414672cc7a82ef3" else "b05a400d116b582c9b4742a50dcc5f48"
|
|
|
+ const val VENDOR = "sikey"
|
|
|
+ const val DEFAULT_CONTENT_TYPE = "application/json; charset=utf-8"
|
|
|
+ const val TYPE = "1"
|
|
|
+ const val REQUEST_QUERY = "tid"
|
|
|
+ val MODEL =
|
|
|
+ if (SystemProperties.getBoolean("ro.product.support.esim", false)) "X6E" else "X6"
|
|
|
+ val DEVICE_ATTRIBUTE =
|
|
|
+ if (SystemProperties.getBoolean("ro.product.support.esim", false)) "S200" else "S100"
|
|
|
+ val DEVICE_TYPE =
|
|
|
+ if (SystemProperties.getBoolean("ro.product.support.esim", false)) "122" else "102"
|
|
|
+ val IMEI: String = SystemProperties.get("persist.zs.imei.number", "")
|
|
|
+ val HC: String = SystemProperties.get("persist.sikey.hardcode", "")
|
|
|
+
|
|
|
+ //THRESHOLD
|
|
|
+ const val POSITIONING_DURATION: Long = 60 * 1000
|
|
|
+ const val POSITION_FREQ = 5 //Minute
|
|
|
+ const val LIVE_TRACKING_FREQ = 24 //Second
|
|
|
+ const val POSITIONING_STEP_THRESHOLD = 180
|
|
|
+ const val POSITIONING_TIME_THRESHOLD = 2 * 60 * 60 * 1000
|
|
|
+ const val STEP_REPORT_TIME_THRESHOLD = 1 * 60 * 60 * 1000
|
|
|
+ const val FORECAST_WEATHER_UPDATE_THRESHOLD = 6 * 60 * 60 * 1000
|
|
|
+ const val CURRENT_WEATHER_UPDATE_THRESHOLD = 60 * 60 * 1000
|
|
|
+
|
|
|
+ val LOW_BATTERY_NOTIFY_NODE = listOf(0, 5, 10, 15, 20)
|
|
|
+
|
|
|
+ //THRESHOLD end
|
|
|
+
|
|
|
+ // sms decrypt key
|
|
|
+ const val SMS_DECRYPT_KEY = "20b36f8b"
|
|
|
+}
|
|
|
+
|
|
|
+object CkError {
|
|
|
+ const val SUCCESS = "S000001"
|
|
|
+ const val ERROR_UNKNOWN = "E000001"
|
|
|
+ const val ERROR_NEED_RESET = "E100015"
|
|
|
+}
|
|
|
+
|
|
|
+object CkMessage {
|
|
|
+ const val SUCCESS = "SUCCESS"
|
|
|
+ const val ERROR_UNKNOWN = "Failure. Failure not specifically defined."
|
|
|
+}
|
|
|
+
|
|
|
+object SKHttpApi {
|
|
|
+ const val ADD_FRIEND = "$SK_PROTOCOL_VERSION/userctx/user/child/contacts/wristwatch/friend/add"
|
|
|
+ const val GENERATE_FRIEND_CODE = "$SK_PROTOCOL_VERSION/userctx/user/child/contacts/wristwatch/friend/generate-code"
|
|
|
+ const val GET_WRIST_WATCH_CONTACT_PERSON = "$SK_PROTOCOL_VERSION/userctx/user/child/contacts/wristwatch/get"
|
|
|
+ const val DEVICE_WRIST_WATCH_EXCHANGE = "$SK_PROTOCOL_VERSION/userctx/user/child/device/wristwatch/exchange"
|
|
|
+ const val DEVICE_WRIST_WATCH_BINDING = "$SK_PROTOCOL_VERSION/userctx/user/child/device/wristwatch/binding"
|
|
|
+ const val GET_ALL_WRISTWATCH_ALARM_CLOCK = "$SK_PROTOCOL_VERSION/userctx/user/alarm-clock/wristwatch/getall"
|
|
|
+ const val GET_ALL_WRISTWATCH_SCHOOL_DISABLE = "$SK_PROTOCOL_VERSION/userctx/user/child/school-disable/wristwatch/getall"
|
|
|
+ const val GET_BLOCK_UNKNOWN_CALL = "$SK_PROTOCOL_VERSION/userctx/user/child/block-unknown-call/get"
|
|
|
+ const val UPLOAD_FILE = "$SK_PROTOCOL_VERSION/userctx/file/upload"
|
|
|
+
|
|
|
+ const val CHAT_TEXT = "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/chat/text"
|
|
|
+ const val CHAT_VIDEO = "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/chat/video"
|
|
|
+ const val CHAT_VOICE = "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/chat/voice"
|
|
|
+ const val CHAT_EMOJI = "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/chat/emoji"
|
|
|
+ const val CHAT_IMAGE = "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/chat/image"
|
|
|
+
|
|
|
+ const val VIDEO_CALL_DIAL = "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/video-call/dial"
|
|
|
+ const val VIDEO_CALL_HANGUP= "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/video-call/hangup"
|
|
|
+
|
|
|
+ const val PUSH_ACK= "$SK_PROTOCOL_VERSION/messagectx/messaging/publish/ack"
|
|
|
+
|
|
|
+ const val WRISTWATCH_SESSION= "$SK_PROTOCOL_VERSION/messagectx/history/wristwatch/session"
|
|
|
+
|
|
|
+ const val POSITION_IOT = "$SK_PROTOCOL_VERSION/locatectx/location/iot"
|
|
|
+
|
|
|
+ const val VIDEO_GENERATE_TOKEN = "/token/generate"
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+object HttpApi {
|
|
|
+ const val INIT = "$PROTOCOL_VERSION/init"
|
|
|
+
|
|
|
+ const val PUSH_RESULT = "$PROTOCOL_VERSION/fcm/result"
|
|
|
+
|
|
|
+ object Location {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/location"
|
|
|
+ const val GPS = "$PREFIX/gps"
|
|
|
+ const val CELL = "$PREFIX/cell"
|
|
|
+ const val MULTI = "$PREFIX/multi"
|
|
|
+ const val TRACKING_STATUS = "$PREFIX/tracking/status"
|
|
|
+ const val COMBAIN = PREFIX
|
|
|
+ }
|
|
|
+
|
|
|
+ object Battery {
|
|
|
+ const val PERCENT = "$PROTOCOL_VERSION/battery/percent"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Call {
|
|
|
+ const val LOG = "$PROTOCOL_VERSION/call/log"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Step {
|
|
|
+ const val COUNT = "$PROTOCOL_VERSION/step/count"
|
|
|
+ const val COUNT_TOTAL = "$COUNT/total"
|
|
|
+ const val COUNT_HISTORY = "$COUNT/history"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Watch {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/watch"
|
|
|
+
|
|
|
+ object Status {
|
|
|
+ private const val STATUS_PREFIX = "$PREFIX/status"
|
|
|
+ const val GET = "$STATUS_PREFIX/get"
|
|
|
+ const val SET = "$STATUS_PREFIX/set"
|
|
|
+ const val INFO = "$STATUS_PREFIX/info"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Factory {
|
|
|
+ const val RESET = "$PREFIX/factory/reset"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Power {
|
|
|
+ const val SET = "$PREFIX/power/set"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Network {
|
|
|
+ private const val NETWORK_STATUS_PREFIX = "$PREFIX/network/status"
|
|
|
+ const val SET = "$NETWORK_STATUS_PREFIX/set"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Log {
|
|
|
+ private const val LOG_PREFIX = "$PREFIX/log"
|
|
|
+ const val SAVE = "$LOG_PREFIX/save"
|
|
|
+ }
|
|
|
+
|
|
|
+ const val SIM = "$PREFIX/updateSIM"
|
|
|
+
|
|
|
+ const val WIFI = "$PREFIX/wifi/get"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Etc {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/etc"
|
|
|
+ const val GUARDIANS = "$PREFIX/guardians"
|
|
|
+ const val SOS = "$PREFIX/sos"
|
|
|
+ const val FirmwareVersion = "$PREFIX/watch/firmware/version"
|
|
|
+ const val XCoin = "$PREFIX/coin/count"
|
|
|
+
|
|
|
+ object Model {
|
|
|
+ const val GET = "${PREFIX}/watch/model/get"
|
|
|
+ const val SET = "${PREFIX}/watch/model/set"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ object Alarm {
|
|
|
+ const val LIST = "$PROTOCOL_VERSION/alarm/list"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Silent {
|
|
|
+ const val LIST = "$PROTOCOL_VERSION/silent/list"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Contact {
|
|
|
+ const val LIST = "$PROTOCOL_VERSION/contact/list"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Friend {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/friend"
|
|
|
+ const val CODE = "$PREFIX/code"
|
|
|
+ const val ADD = "$PREFIX/add"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Emoji {
|
|
|
+ const val LIST = "$PROTOCOL_VERSION/emoji/list"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Weather {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/weather"
|
|
|
+ const val CURRENT = "$PREFIX/current"
|
|
|
+ const val FORECAST = "$PREFIX/forecast"
|
|
|
+ const val CITYID = "$PREFIX/cityid"
|
|
|
+
|
|
|
+ object CityId {
|
|
|
+ const val ALL = "$CITYID/all"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ object File {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/file"
|
|
|
+ const val UPLOAD = "$PREFIX/upload"
|
|
|
+
|
|
|
+ object Separate {
|
|
|
+ private const val SEPARATE_PREFIX = "$PREFIX/separate"
|
|
|
+ const val SEPARATE_UPLOAD = "$SEPARATE_PREFIX/upload"
|
|
|
+ const val SEPARATE_START = "$UPLOAD/start"
|
|
|
+ const val SEPARATE_END = "$UPLOAD/end"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ object Chat {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/chat"
|
|
|
+ const val VOICE = "$PREFIX/voice"
|
|
|
+ const val TEXT = "$PREFIX/text"
|
|
|
+ const val EMOJI = "$PREFIX/emoji"
|
|
|
+ const val PHOTO = "$PREFIX/photo"
|
|
|
+ const val VIDEO = "$PREFIX/video"
|
|
|
+ const val MUSIC = "$PREFIX/music"
|
|
|
+ const val SMS = "$PREFIX/sms"
|
|
|
+ const val MSG = "$PREFIX/msg"
|
|
|
+
|
|
|
+ object Msg {
|
|
|
+ const val STATE = "$MSG/state"
|
|
|
+ const val LIST = "$MSG/list"
|
|
|
+
|
|
|
+ const val UNREAD = "$MSG/count/unread"
|
|
|
+ const val UNREAD_ALL = "$UNREAD/all"
|
|
|
+
|
|
|
+ const val READ = "$MSG/read"
|
|
|
+ const val READ_ALL = "$READ/all"
|
|
|
+
|
|
|
+ const val REMOVE = "$MSG/remove"
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ object PowerSaving {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/mode/power/saving"
|
|
|
+ const val GET = "$PREFIX/get"
|
|
|
+ const val SET = "$PREFIX/set"
|
|
|
+ const val INFO = "$PREFIX/info"
|
|
|
+ }
|
|
|
+
|
|
|
+ object APN {
|
|
|
+ const val DATA = "$PROTOCOL_VERSION/apn/data"
|
|
|
+ }
|
|
|
+
|
|
|
+ object Content {
|
|
|
+ private const val PREFIX = "$PROTOCOL_VERSION/content"
|
|
|
+ const val GET = "${PREFIX}/get"
|
|
|
+ const val RESULT = "${PREFIX}/download/result"
|
|
|
+ }
|
|
|
+
|
|
|
+ object MqttCode {
|
|
|
+ const val REQUEST_UPLOAD_LOCATION = 1000
|
|
|
+ const val REQUEST_UPLOAD_LOCATION_CONTINUOUS = 1010
|
|
|
+ const val REQUEST_UPLOAD_BATTERY = 1020
|
|
|
+ const val REQUEST_CURRENT_TOTAL_STEP = 1030
|
|
|
+ const val NOTIFY_STATUS_UPDATED = 1040
|
|
|
+ const val REQUEST_STATUS = 1050
|
|
|
+ const val NOTIFY_FACTORY_RESET = 1060
|
|
|
+ const val REQUEST_POWER_STATUS = 1070
|
|
|
+ const val NOTIFY_TURN_OFF = 1080
|
|
|
+ const val NOTIFY_REBOOT = 1090
|
|
|
+ const val NOTIFY_ALARM_UPDATED = 1100
|
|
|
+ const val NOTIFY_SILENT_MODE_UPDATED = 1110
|
|
|
+ const val NOTIFY_CONTACT_UPDATED = 1120
|
|
|
+ const val NOTIFY_EMOJI_UPDATED = 1130
|
|
|
+ const val NOTIFY_NEW_MSG = 1150
|
|
|
+ const val NOTIFY_SENT_MSG_STATUS = 1160
|
|
|
+ const val NOTIFY_DELETE_MSG = 1170
|
|
|
+ const val NOTIFY_GROUP_CHAT_UPDATED = 1180
|
|
|
+ const val NOTIFY_NEW_GROUP_MSG = 1190
|
|
|
+ const val NOTIFY_RECEIVED_GROUP_MSG_STATUS = 1200
|
|
|
+ const val NOTIFY_GROUP_MSG_DELETE = 1210
|
|
|
+ const val NOTIFY_POWER_SAVING_MODE = 1220
|
|
|
+ const val REQUEST_UPLOAD_POWER_SAVING_MODE = 1230
|
|
|
+ const val NOTIFY_APN_UPDATE = 1240
|
|
|
+ const val NOTIFY_SERVER_INFO_UPDATE = 1250
|
|
|
+ const val REQUEST_WATCH_MODEL = 1260
|
|
|
+ const val REQUEST_UPLOAD_DAILY_STEP = 1270
|
|
|
+ const val REQUEST_UPLOAD_VERSION = 1280
|
|
|
+ const val REQUEST_START_LOCATION_TRACKING = 1290
|
|
|
+ const val REQUEST_STOP_LOCATION_TRACKING = 1300
|
|
|
+ const val REQUEST_UPLOAD_LOCATION_TRACKING_STATUS = 1310
|
|
|
+ const val NOTIFY_PRE_DEFINED_PHRASE_UPDATE = 1320
|
|
|
+ const val REQUEST_NET_STATUS = 1330
|
|
|
+ const val NOTIFY_WIFI_UPDATE = 1360
|
|
|
+ const val NOTIFY_CONTENT_DOWNLOAD = 1500
|
|
|
+ const val NOTIFY_XCOIN_COST = 1510
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+object ChatMsgState {
|
|
|
+ const val MESSAGE_STATE_UNREAD = 0
|
|
|
+ const val MESSAGE_STATE_READ = 1
|
|
|
+ const val MESSAGE_STATE_SEND_ING = 2
|
|
|
+ const val MESSAGE_STATE_SEND_SUCCESS = 3
|
|
|
+ const val MESSAGE_STATE_SEND_FAIL = 4
|
|
|
+ const val MESSAGE_STATE_DELETE = 5
|
|
|
+ const val MESSAGE_STATE_UNKNOWN = 99
|
|
|
+}
|
|
|
+
|
|
|
+object ChatMsgType {
|
|
|
+ const val TEXT = 20
|
|
|
+ const val VIDEO = 21
|
|
|
+ const val VOICE = 22
|
|
|
+ const val EMOJI = 23
|
|
|
+ const val PHOTO = 24
|
|
|
+
|
|
|
+ const val MP3 = 104
|
|
|
+ const val SMS = 106
|
|
|
+}
|
|
|
+
|
|
|
+enum class ChatFileType(private val desc: String) {
|
|
|
+ UNKNOWN("UNKNOWN"),
|
|
|
+ PHOTO("PHOTO"),
|
|
|
+ VOICE("VOICE"),
|
|
|
+ COVER("COVER"),
|
|
|
+ VIDEO("VIDEO"),
|
|
|
+ MUSIC("MUSIC"),
|
|
|
+ LOG("LOG");
|
|
|
+
|
|
|
+ override fun toString(): String {
|
|
|
+ return desc
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+enum class NetworkType(private val desc: String) {
|
|
|
+ NETWORK_WIFI("WiFi"),
|
|
|
+ NETWORK_4G("4G"),
|
|
|
+ NETWORK_2G("2G"),
|
|
|
+ NETWORK_3G("3G"),
|
|
|
+ NETWORK_UNKNOWN("Unknown"),
|
|
|
+ NETWORK_NO("No network");
|
|
|
+
|
|
|
+ override fun toString(): String {
|
|
|
+ return desc
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+enum class HighTempStatus {
|
|
|
+ OFF, DISABLE, SHUTDOWN
|
|
|
+}
|
|
|
+
|
|
|
+enum class MusicDownloadStatus {
|
|
|
+ NEW, DOWNLOADING, DONE, Failed
|
|
|
+}
|
|
|
+
|
|
|
+enum class REASON {
|
|
|
+ FAILED, LOW_MEMORY, NO_NETWORK, SUCCESS, DELETE
|
|
|
+}
|
|
|
+
|
|
|
+object LocalActions {
|
|
|
+ const val ACTION_ADD_FRIEND = "com.xplora.action.ADD_FRIEND"
|
|
|
+ const val ACTION_POWER_STATUS = "com.xplora.action.POWER_STATUS"
|
|
|
+ const val ACTION_REFRESH_CHAT_LIST = "com.xplora.action.REFRESH_CHAT_LIST"
|
|
|
+ const val ACTION_SILENT_BEGIN = "com.xplora.action.SILENT_BEGIN"
|
|
|
+ const val ACTION_SILENT_END = "com.xplora.action.SILENT_END"
|
|
|
+ const val ACTION_RESET_STEP = "com.xplora.action.RESET_STEP"
|
|
|
+ const val ACTION_POSITION = "com.xplora.action.POSITION"
|
|
|
+ const val ACTION_LIVE_TRACKING = "com.xplora.action.LIVE_TRACKING"
|
|
|
+ const val ACTION_ALARM = "com.xplora.action.ALARM"
|
|
|
+ const val ACTION_OTA = "com.xplora.action.OTA"
|
|
|
+ const val ACTION_OTA_CHECK = "com.xplora.action.OTA_CHECK"
|
|
|
+ const val ACTION_CALL_LOG = "com.xplora.call_log"
|
|
|
+ const val ACTION_SOS = "com.xplora.call.sos"
|
|
|
+ const val ACTION_DELETE_CONTENT = "com.xplora.action.DELETE_CONTENT"
|
|
|
+
|
|
|
+ const val NOTIFICATION_CHAT = "com.xplora.notification.Chat"
|
|
|
+ const val NOTIFICATION_MISSED_CALL = "com.xplora.notification.Missed_call"
|
|
|
+ const val NOTIFICATION_RINGTONE = "com.xplora.notification.Ringtone"
|
|
|
+ const val NOTIFICATION_WATCHFACE = "com.xplora.notification.Watchface"
|
|
|
+ const val NOTIFICATION_MUSIC_DOWNLOADING = "com.xplora.notification.Music_Downloading"
|
|
|
+ const val NOTIFICATION_MUSIC_DOWNLOADED = "com.xplora.notification.Music_Downloaded"
|
|
|
+ const val NOTIFICATION_DIAGNOSTIC = "com.xplora.notification.Diagnostic"
|
|
|
+ const val NOTIFICATION_CHAT_FAIL = "com.xplora.notification.ChatFail"
|
|
|
+
|
|
|
+ const val ACTION_SIM_STATE_CHANGED = "android.intent.action.SIM_STATE_CHANGED"
|
|
|
+}
|