Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
S
Scan QR Code Barcode Reader
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wanglei
Scan QR Code Barcode Reader
Commits
dbea0a0b
Commit
dbea0a0b
authored
Dec 30, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
a79b8e88
Show whitespace changes
Inline
Side-by-side
Showing
14 changed files
with
230 additions
and
15 deletions
+230
-15
build.gradle.kts
app/build.gradle.kts
+4
-0
MyApplication.kt
app/src/main/java/com/base/scanqr/MyApplication.kt
+4
-0
NotificationSendBean.kt
...rc/main/java/com/base/scanqr/bean/NotificationSendBean.kt
+10
-2
NotificationManager.kt
...a/com/base/scanqr/fcm/notification/NotificationManager.kt
+24
-1
NotificationUiUtil.kt
...va/com/base/scanqr/fcm/notification/NotificationUiUtil.kt
+88
-0
ScreenStatusReceiver.kt
...java/com/base/scanqr/fcm/receiver/ScreenStatusReceiver.kt
+10
-6
StayNotification.kt
...src/main/java/com/base/scanqr/service/StayNotification.kt
+2
-2
MainActivity.kt
app/src/main/java/com/base/scanqr/ui/main/MainActivity.kt
+2
-2
StartActivity.kt
app/src/main/java/com/base/scanqr/ui/start/StartActivity.kt
+2
-2
bg_8559ea_6672f7.xml
app/src/main/res/drawable/bg_8559ea_6672f7.xml
+9
-0
stay_notification_big_scan.xml
app/src/main/res/layout/stay_notification_big_scan.xml
+43
-0
stay_notification_small_scan.xml
app/src/main/res/layout/stay_notification_small_scan.xml
+28
-0
tu_product.png
app/src/main/res/mipmap-xxhdpi/tu_product.png
+0
-0
strings.xml
app/src/main/res/values/strings.xml
+4
-0
No files found.
app/build.gradle.kts
View file @
dbea0a0b
...
@@ -141,5 +141,9 @@ dependencies {
...
@@ -141,5 +141,9 @@ dependencies {
//冲突版本确定版本
//冲突版本确定版本
implementation
(
"com.google.guava:guava:29.0-android"
)
implementation
(
"com.google.guava:guava:29.0-android"
)
//work 请使用最新版本
implementation
(
"androidx.work:work-runtime-ktx:2.7.1"
)
}
}
app/src/main/java/com/base/scanqr/MyApplication.kt
View file @
dbea0a0b
...
@@ -15,6 +15,7 @@ import com.base.scanqr.bean.config.ConfigBean
...
@@ -15,6 +15,7 @@ import com.base.scanqr.bean.config.ConfigBean
import
com.base.scanqr.bean.config.PopupConfigBean
import
com.base.scanqr.bean.config.PopupConfigBean
import
com.base.scanqr.fcm.FCMManager
import
com.base.scanqr.fcm.FCMManager
import
com.base.scanqr.fcm.TimerManager.Companion.changeTimer
import
com.base.scanqr.fcm.TimerManager.Companion.changeTimer
import
com.base.scanqr.fcm.notification.NotificationManager
import
com.base.scanqr.fcm.receiver.BatteryStatusReceiver
import
com.base.scanqr.fcm.receiver.BatteryStatusReceiver
import
com.base.scanqr.fcm.receiver.PackageStatusReceiver
import
com.base.scanqr.fcm.receiver.PackageStatusReceiver
import
com.base.scanqr.fcm.receiver.ScreenStatusReceiver
import
com.base.scanqr.fcm.receiver.ScreenStatusReceiver
...
@@ -143,6 +144,9 @@ class MyApplication : Application() {
...
@@ -143,6 +144,9 @@ class MyApplication : Application() {
// startAlarm(appContext, 24)
// startAlarm(appContext, 24)
// startAlarm(appContext, 48)
// startAlarm(appContext, 48)
// startAlarm(appContext, 72)
// startAlarm(appContext, 72)
//开启上报队列
NotificationManager
.
startNotificationQueue
()
}
}
...
...
app/src/main/java/com/base/scanqr/bean/NotificationSendBean.kt
View file @
dbea0a0b
package
com.base.scanqr.bean
package
com.base.scanqr.bean
import
android.content.Context
import
android.content.Context
import
android.content.Intent
import
android.widget.RemoteViews
class
NotificationSendBean
(
class
NotificationSendBean
(
val
context
:
Context
,
val
context
:
Context
,
val
actionId
:
String
=
""
,
val
where
:
String
=
""
,
val
where
:
String
=
""
,
val
canSend
:
()
->
Boolean
=
{
true
},
//是否可以发送
val
canSend
:
()
->
Boolean
=
{
true
},
//是否可以发送
var
sendSuccess
:
(()
->
Unit
)?
=
null
,
//发送成功回调
var
sendSuccess
:
(()
->
Unit
)?
=
null
,
//发送成功回调
var
valueMap
:
HashMap
<
String
,
Any
>
=
hashMapOf
()
//发送通知可能携带的参数
var
valueMap
:
HashMap
<
String
,
Any
>
=
hashMapOf
()
//发送通知可能携带的参数
)
{
)
{
var
actionId
:
String
=
""
var
bigRemoteViews
:
RemoteViews
?
=
null
var
smallRemoteViews
:
RemoteViews
?
=
null
var
intent
:
Intent
?
=
null
var
notificationId
:
Int
=
1999
companion
object
{
companion
object
{
const
val
POPUP_WHERE_TIMBER
=
"Timer"
const
val
POPUP_WHERE_TIMBER
=
"Timer"
...
@@ -23,6 +30,7 @@ class NotificationSendBean(
...
@@ -23,6 +30,7 @@ class NotificationSendBean(
const
val
POPUP_WHERE_FILE_JOB
=
"FileJob"
const
val
POPUP_WHERE_FILE_JOB
=
"FileJob"
const
val
ACTION_ID_SCAN
=
"action_id_scan"
const
val
ACTION_ID_STAY_SCAN
=
"action_id_scan_1"
const
val
ACTION_ID_SCAN
=
"action_id_scan_2"
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/fcm/notification/NotificationManager.kt
View file @
dbea0a0b
...
@@ -3,6 +3,8 @@ package com.base.scanqr.fcm.notification
...
@@ -3,6 +3,8 @@ package com.base.scanqr.fcm.notification
import
android.content.Context
import
android.content.Context
import
com.base.scanqr.BuildConfig
import
com.base.scanqr.BuildConfig
import
com.base.scanqr.bean.NotificationSendBean
import
com.base.scanqr.bean.NotificationSendBean
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import
com.base.scanqr.bean.NotificationSendBean.Companion.POPUP_WHERE_LOCK
import
com.base.scanqr.bean.NotificationSendBean.Companion.POPUP_WHERE_TIMBER
import
com.base.scanqr.bean.NotificationSendBean.Companion.POPUP_WHERE_TIMBER
import
com.base.scanqr.bean.config.PopupConfigBean.Companion.popupConfigBean
import
com.base.scanqr.bean.config.PopupConfigBean.Companion.popupConfigBean
import
com.base.scanqr.helper.EventUtils
import
com.base.scanqr.helper.EventUtils
...
@@ -28,7 +30,28 @@ object NotificationManager {
...
@@ -28,7 +30,28 @@ object NotificationManager {
private
var
sendBeanBlockingQueue
=
ArrayBlockingQueue
<
NotificationSendBean
>(
10
)
private
var
sendBeanBlockingQueue
=
ArrayBlockingQueue
<
NotificationSendBean
>(
10
)
private
val
looper_actionId
=
listOf
(
ACTION_ID_SCAN
,
)
private
var
actionIdList
=
arrayListOf
<
String
>()
private
fun
getNextActionId
():
String
{
if
(
actionIdList
.
isEmpty
())
{
actionIdList
.
addAll
(
looper_actionId
)
}
val
next
=
actionIdList
[
0
]
actionIdList
.
removeAt
(
0
)
if
(
BuildConfig
.
DEBUG
)
{
// return NOTIFICATION_ACTION_WEATHER
}
return
next
}
fun
submitSendBean
(
bean
:
NotificationSendBean
)
{
fun
submitSendBean
(
bean
:
NotificationSendBean
)
{
if
(
bean
.
actionId
.
isEmpty
())
{
val
actionId
=
getNextActionId
()
bean
.
actionId
=
actionId
}
try
{
try
{
sendBeanBlockingQueue
.
put
(
bean
)
sendBeanBlockingQueue
.
put
(
bean
)
}
catch
(
e
:
Exception
)
{
}
catch
(
e
:
Exception
)
{
...
@@ -157,6 +180,6 @@ object NotificationManager {
...
@@ -157,6 +180,6 @@ object NotificationManager {
* 只测某些类型
* 只测某些类型
*/
*/
private
var
testWhere
=
listOf
(
private
var
testWhere
=
listOf
(
POPUP_WHERE_
TIMBER
POPUP_WHERE_
LOCK
)
)
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/fcm/notification/NotificationUiUtil.kt
View file @
dbea0a0b
package
com.base.scanqr.fcm.notification
package
com.base.scanqr.fcm.notification
import
android.app.NotificationChannel
import
android.app.NotificationManager
import
android.app.PendingIntent
import
android.content.Context
import
android.content.Intent
import
android.graphics.drawable.Icon
import
android.os.Build
import
android.widget.RemoteViews
import
androidx.core.app.NotificationCompat
import
androidx.core.graphics.drawable.IconCompat
import
com.base.scanqr.MyApplication
import
com.base.scanqr.R
import
com.base.scanqr.bean.NotificationSendBean
import
com.base.scanqr.bean.NotificationSendBean
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import
com.base.scanqr.ui.start.StartActivity
import
kotlin.random.Random
/**
/**
* 发送通知UI部分
* 发送通知UI部分
*/
*/
object
NotificationUiUtil
{
object
NotificationUiUtil
{
private
val
CHANNEL_ID
=
"San Qr Channel"
private
val
CHANNEL_NAME
=
"San Qr Channel NAME"
fun
setNotification
(
sendBean
:
NotificationSendBean
)
{
fun
setNotification
(
sendBean
:
NotificationSendBean
)
{
when
(
sendBean
.
actionId
)
{
ACTION_ID_SCAN
->
{
sendBean
.
bigRemoteViews
=
RemoteViews
(
MyApplication
.
appContext
.
packageName
,
R
.
layout
.
stay_notification_big_scan
)
sendBean
.
smallRemoteViews
=
RemoteViews
(
MyApplication
.
appContext
.
packageName
,
R
.
layout
.
stay_notification_small_scan
)
val
intent
=
Intent
(
sendBean
.
context
,
StartActivity
::
class
.
java
)
intent
.
putExtra
(
"actionId"
,
sendBean
.
actionId
)
sendBean
.
intent
=
intent
}
}
sendCustomNotification
(
sendBean
)
}
private
fun
sendCustomNotification
(
sendBean
:
NotificationSendBean
)
{
val
notificationManager
=
sendBean
.
context
.
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)
as
NotificationManager
val
context
=
sendBean
.
context
//创建channel
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
val
channel
=
NotificationChannel
(
CHANNEL_ID
,
CHANNEL_NAME
,
NotificationManager
.
IMPORTANCE_HIGH
)
channel
.
lockscreenVisibility
=
NotificationCompat
.
VISIBILITY_PUBLIC
channel
.
enableVibration
(
false
)
channel
.
vibrationPattern
=
longArrayOf
(
0
)
notificationManager
.
createNotificationChannel
(
channel
)
}
// Create the notification
val
builder
:
NotificationCompat
.
Builder
=
NotificationCompat
.
Builder
(
context
,
CHANNEL_ID
)
//设置状态栏内的小图标
val
smallIcon
=
IconCompat
.
createFromIcon
(
context
,
Icon
.
createWithResource
(
context
,
R
.
mipmap
.
logo
)
)
smallIcon
?.
let
{
builder
.
setSmallIcon
(
smallIcon
)
}
builder
.
setContentTitle
(
sendBean
.
context
.
resources
.
getString
(
R
.
string
.
app_name
))
// .setContentText("notification")
val
requestCode
=
Random
.
nextInt
(
1000
)
val
pendingIntent
=
PendingIntent
.
getActivity
(
context
,
requestCode
,
sendBean
.
intent
,
PendingIntent
.
FLAG_IMMUTABLE
)
builder
.
setContentIntent
(
pendingIntent
)
.
setPriority
(
NotificationCompat
.
PRIORITY_MAX
)
.
setAutoCancel
(
true
)
var
small
:
RemoteViews
?
=
sendBean
.
bigRemoteViews
//Android 12以下需要适配小RemoteViews
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
S
)
{
small
=
sendBean
.
smallRemoteViews
}
// 设置小视图
sendBean
.
smallRemoteViews
?.
let
{
builder
.
setCustomContentView
(
it
)
}
// 设置悬浮通知视图(Android 12 及以上)
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
S
)
{
sendBean
.
smallRemoteViews
.
let
{
builder
.
setCustomHeadsUpContentView
(
it
)
}
}
// 设置大视图
sendBean
.
bigRemoteViews
?.
let
{
builder
.
setCustomBigContentView
(
it
)
}
notificationManager
.
notify
(
sendBean
.
notificationId
,
builder
.
build
())
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/fcm/receiver/ScreenStatusReceiver.kt
View file @
dbea0a0b
...
@@ -5,8 +5,10 @@ import android.content.Context
...
@@ -5,8 +5,10 @@ import android.content.Context
import
android.content.Intent
import
android.content.Intent
import
android.content.IntentFilter
import
android.content.IntentFilter
import
android.os.Build
import
android.os.Build
import
com.base.scanqr.bean.NotificationSendBean
import
com.base.scanqr.bean.NotificationSendBean.Companion.POPUP_WHERE_LOCK
import
com.base.scanqr.bean.NotificationSendBean.Companion.POPUP_WHERE_LOCK
import
com.base.scanqr.bean.config.PopupConfigBean.Companion.popupConfigBean
import
com.base.scanqr.bean.config.PopupConfigBean.Companion.popupConfigBean
import
com.base.scanqr.fcm.notification.NotificationManager
import
com.base.scanqr.helper.EventUtils
import
com.base.scanqr.helper.EventUtils
import
com.base.scanqr.utils.AppPreferences
import
com.base.scanqr.utils.AppPreferences
import
com.base.scanqr.utils.KotlinExt.currentDate
import
com.base.scanqr.utils.KotlinExt.currentDate
...
@@ -15,8 +17,10 @@ import java.util.Objects
...
@@ -15,8 +17,10 @@ import java.util.Objects
class
ScreenStatusReceiver
:
BroadcastReceiver
()
{
class
ScreenStatusReceiver
:
BroadcastReceiver
()
{
private
val
TAG
=
"ScreenStatusReceiver"
override
fun
onReceive
(
context
:
Context
,
intent
:
Intent
)
{
override
fun
onReceive
(
context
:
Context
,
intent
:
Intent
)
{
LogEx
.
logDebug
(
TAG
,
"onReceive"
)
val
action
=
intent
.
action
val
action
=
intent
.
action
when
(
Objects
.
requireNonNull
<
String
?>(
action
))
{
when
(
Objects
.
requireNonNull
<
String
?>(
action
))
{
Intent
.
ACTION_SCREEN_ON
->
isDeviceInteractive
=
true
Intent
.
ACTION_SCREEN_ON
->
isDeviceInteractive
=
true
...
@@ -29,7 +33,9 @@ class ScreenStatusReceiver : BroadcastReceiver() {
...
@@ -29,7 +33,9 @@ class ScreenStatusReceiver : BroadcastReceiver() {
isSecureLockActive
=
false
isSecureLockActive
=
false
if
(
isDeviceInteractive
&&
!
isSecureLockActive
)
{
if
(
isDeviceInteractive
&&
!
isSecureLockActive
)
{
if
(
popupConfigBean
.
screenS
)
{
if
(
popupConfigBean
.
screenS
)
{
// sendNotificationIfCan(context, POPUP_WHERE_LOCK, null)
LogEx
.
logDebug
(
TAG
,
"onReceive submitSendBean"
)
val
sendBean
=
NotificationSendBean
(
context
,
POPUP_WHERE_LOCK
,
canSend
=
{
true
},
sendSuccess
=
{})
NotificationManager
.
submitSendBean
(
sendBean
)
}
}
}
}
}
}
...
@@ -118,12 +124,10 @@ class ScreenStatusReceiver : BroadcastReceiver() {
...
@@ -118,12 +124,10 @@ class ScreenStatusReceiver : BroadcastReceiver() {
/**
/**
* 推送成功后保存值
* 推送成功后保存值
*/
*/
fun
saveScreenPushedData
(
where
:
String
,
actionId
:
String
)
{
fun
saveScreenPushedData
()
{
if
(
where
==
POPUP_WHERE_LOCK
)
{
todayScreenPush
+=
1
todayScreenPush
+=
1
screenLastPushTime
=
System
.
currentTimeMillis
()
screenLastPushTime
=
System
.
currentTimeMillis
()
}
}
}
}
}
}
}
\ No newline at end of file
app/src/main/java/com/base/scanqr/service/StayNotification.kt
View file @
dbea0a0b
...
@@ -13,7 +13,7 @@ import android.widget.RemoteViews
...
@@ -13,7 +13,7 @@ import android.widget.RemoteViews
import
androidx.core.app.NotificationCompat
import
androidx.core.app.NotificationCompat
import
androidx.core.graphics.drawable.IconCompat
import
androidx.core.graphics.drawable.IconCompat
import
com.base.scanqr.R
import
com.base.scanqr.R
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_S
TAY_S
CAN
import
com.base.scanqr.service.StayJobService.Companion.NOTIFICATION_STAY_ID
import
com.base.scanqr.service.StayJobService.Companion.NOTIFICATION_STAY_ID
import
com.base.scanqr.ui.main.MainActivity
import
com.base.scanqr.ui.main.MainActivity
import
com.base.scanqr.ui.start.StartActivity
import
com.base.scanqr.ui.start.StartActivity
...
@@ -25,7 +25,7 @@ object StayNotification {
...
@@ -25,7 +25,7 @@ object StayNotification {
private
fun
customRemoteViews
(
context
:
Context
,
contentView
:
RemoteViews
,
expendView
:
RemoteViews
)
{
private
fun
customRemoteViews
(
context
:
Context
,
contentView
:
RemoteViews
,
expendView
:
RemoteViews
)
{
val
requestCode1
=
Random
.
nextInt
(
1800
)
val
requestCode1
=
Random
.
nextInt
(
1800
)
val
intent1
=
Intent
(
context
,
StartActivity
::
class
.
java
).
apply
{
val
intent1
=
Intent
(
context
,
StartActivity
::
class
.
java
).
apply
{
putExtra
(
"actionId"
,
ACTION_ID_SCAN
)
putExtra
(
"actionId"
,
ACTION_ID_S
TAY_S
CAN
)
}
}
val
pendingIntent1
=
val
pendingIntent1
=
PendingIntent
.
getActivity
(
PendingIntent
.
getActivity
(
...
...
app/src/main/java/com/base/scanqr/ui/main/MainActivity.kt
View file @
dbea0a0b
...
@@ -12,7 +12,7 @@ import com.base.scanqr.ads.AdsMgr
...
@@ -12,7 +12,7 @@ import com.base.scanqr.ads.AdsMgr
import
com.base.scanqr.base.BaseActivity
import
com.base.scanqr.base.BaseActivity
import
com.base.scanqr.bean.ConstObject.mainStartTimes
import
com.base.scanqr.bean.ConstObject.mainStartTimes
import
com.base.scanqr.bean.HomeTabUIBean
import
com.base.scanqr.bean.HomeTabUIBean
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_S
TAY_S
CAN
import
com.base.scanqr.databinding.ActivityMainBinding
import
com.base.scanqr.databinding.ActivityMainBinding
import
com.base.scanqr.databinding.ItemHomeTabBinding
import
com.base.scanqr.databinding.ItemHomeTabBinding
import
com.base.scanqr.qr.CameraUtils
import
com.base.scanqr.qr.CameraUtils
...
@@ -96,7 +96,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
...
@@ -96,7 +96,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>(ActivityMainBinding::infl
val
actionId
=
intent
.
extras
?.
getString
(
"actionId"
)
val
actionId
=
intent
.
extras
?.
getString
(
"actionId"
)
LogEx
.
logDebug
(
TAG
,
"actionId=$actionId"
)
LogEx
.
logDebug
(
TAG
,
"actionId=$actionId"
)
when
(
actionId
)
{
when
(
actionId
)
{
ACTION_ID_SCAN
->
{
ACTION_ID_S
TAY_S
CAN
->
{
val
defaultTab
=
binding
.
tabLayout
.
getTabAt
(
1
)
val
defaultTab
=
binding
.
tabLayout
.
getTabAt
(
1
)
defaultTab
?.
select
()
defaultTab
?.
select
()
defaultTab
?.
setSelected
()
defaultTab
?.
setSelected
()
...
...
app/src/main/java/com/base/scanqr/ui/start/StartActivity.kt
View file @
dbea0a0b
...
@@ -8,7 +8,7 @@ import com.base.scanqr.ads.AdsShowCallBack
...
@@ -8,7 +8,7 @@ import com.base.scanqr.ads.AdsShowCallBack
import
com.base.scanqr.base.BaseActivity
import
com.base.scanqr.base.BaseActivity
import
com.base.scanqr.bean.ConstObject
import
com.base.scanqr.bean.ConstObject
import
com.base.scanqr.bean.ConstObject.isFirstLauncher
import
com.base.scanqr.bean.ConstObject.isFirstLauncher
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_SCAN
import
com.base.scanqr.bean.NotificationSendBean.Companion.ACTION_ID_S
TAY_S
CAN
import
com.base.scanqr.databinding.ActivityStartBinding
import
com.base.scanqr.databinding.ActivityStartBinding
import
com.base.scanqr.service.StayJobService.Companion.startJob
import
com.base.scanqr.service.StayJobService.Companion.startJob
import
com.base.scanqr.ui.language.LanguageActivity
import
com.base.scanqr.ui.language.LanguageActivity
...
@@ -110,7 +110,7 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
...
@@ -110,7 +110,7 @@ class StartActivity : BaseActivity<ActivityStartBinding>(ActivityStartBinding::i
val
actionId
=
intent
.
extras
?.
getString
(
"actionId"
)
val
actionId
=
intent
.
extras
?.
getString
(
"actionId"
)
LogEx
.
logDebug
(
TAG
,
"actionId=$actionId"
)
LogEx
.
logDebug
(
TAG
,
"actionId=$actionId"
)
when
(
actionId
)
{
when
(
actionId
)
{
ACTION_ID_SCAN
->
{
ACTION_ID_S
TAY_S
CAN
->
{
}
}
}
}
...
...
app/src/main/res/drawable/bg_8559ea_6672f7.xml
0 → 100644
View file @
dbea0a0b
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android=
"http://schemas.android.com/apk/res/android"
>
<gradient
android:angle=
"-90"
android:endColor=
"#6672F7"
android:startColor=
"#8559EA"
/>
<corners
android:radius=
"80dp"
/>
</shape>
\ No newline at end of file
app/src/main/res/layout/stay_notification_big_scan.xml
0 → 100644
View file @
dbea0a0b
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginVertical=
"8dp"
android:background=
"@mipmap/tu_product"
android:gravity=
"center"
android:orientation=
"horizontal"
tools:ignore=
"DisableBaselineAlignment"
>
<LinearLayout
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_marginVertical=
"16dp"
android:orientation=
"vertical"
tools:ignore=
"UselessParent"
>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:text=
"@string/what_products"
android:textColor=
"@color/black"
android:textSize=
"13sp"
android:textStyle=
"bold"
/>
<TextView
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"16dp"
android:layout_marginTop=
"8dp"
android:background=
"@drawable/bg_8559ea_6672f7"
android:gravity=
"center"
android:includeFontPadding=
"false"
android:paddingHorizontal=
"14dp"
android:paddingVertical=
"4dp"
android:text=
"@string/find_now"
android:textColor=
"@color/white"
/>
</LinearLayout>
</FrameLayout>
\ No newline at end of file
app/src/main/res/layout/stay_notification_small_scan.xml
0 → 100644
View file @
dbea0a0b
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android=
"http://schemas.android.com/apk/res/android"
xmlns:tools=
"http://schemas.android.com/tools"
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:gravity=
"center"
android:orientation=
"vertical"
android:paddingVertical=
"16dp"
tools:ignore=
"DisableBaselineAlignment"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:text=
"@string/search_for_product_information"
android:textColor=
"@color/black"
android:textSize=
"15sp"
android:textStyle=
"bold"
/>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"wrap_content"
android:layout_marginTop=
"2dp"
android:text=
"@string/new_product"
android:textColor=
"#666666"
android:textSize=
"12sp"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/mipmap-xxhdpi/tu_product.png
0 → 100644
View file @
dbea0a0b
43.1 KB
app/src/main/res/values/strings.xml
View file @
dbea0a0b
...
@@ -71,5 +71,9 @@
...
@@ -71,5 +71,9 @@
<string
name=
"yes"
>
Yes
</string>
<string
name=
"yes"
>
Yes
</string>
<string
name=
"no"
>
No
</string>
<string
name=
"no"
>
No
</string>
<string
name=
"search_for_products"
>
Search for products
</string>
<string
name=
"search_for_products"
>
Search for products
</string>
<string
name=
"search_for_product_information"
>
Search for product information
</string>
<string
name=
"new_product"
>
New feature! Search for information about the product.
</string>
<string
name=
"what_products"
>
What products are you\nlooking for today?
</string>
<string
name=
"find_now"
>
Find Now
</string>
</resources>
</resources>
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment