Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
P
PDF Viewer Scanner White ago
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
kuxulei
PDF Viewer Scanner White ago
Commits
e7797a5c
Commit
e7797a5c
authored
Oct 08, 2024
by
wanglei
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
...
parent
124d0255
Hide whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
545 additions
and
61 deletions
+545
-61
build.gradle.kts
app/build.gradle.kts
+7
-3
google-services.json
app/google-services.json
+6
-6
AndroidManifest.xml
app/src/main/AndroidManifest.xml
+25
-0
FirebaseDatabase.kt
...va/com/base/pdfviewerscannerwhite/ads/FirebaseDatabase.kt
+162
-0
FCMManager.java
...n/java/com/base/pdfviewerscannerwhite/fcm/FCMManager.java
+49
-0
FcmReceiver.java
.../java/com/base/pdfviewerscannerwhite/fcm/FcmReceiver.java
+15
-0
MessagingService.java
.../com/base/pdfviewerscannerwhite/fcm/MessagingService.java
+26
-0
ConfigHelper.kt
...ava/com/base/pdfviewerscannerwhite/helper/ConfigHelper.kt
+1
-1
MyApplication.kt
...va/com/base/pdfviewerscannerwhite/helper/MyApplication.kt
+7
-0
StayNotificationService.kt
.../pdfviewerscannerwhite/service/StayNotificationService.kt
+189
-0
MainActivity.kt
...va/com/base/pdfviewerscannerwhite/ui/main/MainActivity.kt
+4
-0
activity_feedback.xml
app/src/main/res/layout/activity_feedback.xml
+2
-2
activity_main.xml
app/src/main/res/layout/activity_main.xml
+2
-2
activity_main2.xml
app/src/main/res/layout/activity_main2.xml
+6
-6
activity_pdf.xml
app/src/main/res/layout/activity_pdf.xml
+3
-3
activity_pdf_merge.xml
app/src/main/res/layout/activity_pdf_merge.xml
+3
-3
activity_pdf_select.xml
app/src/main/res/layout/activity_pdf_select.xml
+1
-1
dialog_document_home_more.xml
app/src/main/res/layout/dialog_document_home_more.xml
+1
-1
dialog_pdf_home_more.xml
app/src/main/res/layout/dialog_pdf_home_more.xml
+3
-3
fragment_tool.xml
app/src/main/res/layout/fragment_tool.xml
+1
-1
stay_notification_big.xml
app/src/main/res/layout/stay_notification_big.xml
+16
-0
strings.xml
app/src/main/res/values/strings.xml
+16
-29
No files found.
app/build.gradle.kts
View file @
e7797a5c
...
@@ -13,7 +13,7 @@ android {
...
@@ -13,7 +13,7 @@ android {
compileSdk
=
34
compileSdk
=
34
defaultConfig
{
defaultConfig
{
applicationId
=
"com.
base.pdfviewerscannerwhit
e"
applicationId
=
"com.
ttesst.gododo.redaus
e"
minSdk
=
24
minSdk
=
24
targetSdk
=
34
targetSdk
=
34
versionCode
=
2
versionCode
=
2
...
@@ -22,23 +22,27 @@ android {
...
@@ -22,23 +22,27 @@ android {
testInstrumentationRunner
=
"androidx.test.runner.AndroidJUnitRunner"
testInstrumentationRunner
=
"androidx.test.runner.AndroidJUnitRunner"
fun
Long
.
toFormatTime3
():
String
{
fun
Long
.
toFormatTime3
():
String
{
return
SimpleDateFormat
(
"yyyy-MM-dd
HH-mm-ss"
,
Locale
.
ENGLISH
).
format
(
this
)
return
SimpleDateFormat
(
"yyyy-MM-dd
-
HH-mm-ss"
,
Locale
.
ENGLISH
).
format
(
this
)
}
}
setProperty
(
"archivesBaseName"
,
"pdf-v${System.currentTimeMillis().toFormatTime3()}"
)
setProperty
(
"archivesBaseName"
,
"pdf-v${System.currentTimeMillis().toFormatTime3()}"
)
signingConfigs
{
signingConfigs
{
create
(
"release"
)
{
create
(
"release"
)
{
//E6:A2:DD:0A:E6:73:22:32:4E:98:08:78:73:29:01:C4:8D:A0:38:DB:D8:B2:DD:B9:AC:55:69:B2:6B:DF:B0:B4
storeFile
=
file
(
"../smartcl.jks"
)
storeFile
=
file
(
"../smartcl.jks"
)
storePassword
=
"123456"
storePassword
=
"123456"
keyAlias
=
"key0"
keyAlias
=
"key0"
keyPassword
=
"123456"
keyPassword
=
"123456"
}
}
}
}
}
}
buildTypes
{
buildTypes
{
debug
{
signingConfig
=
signingConfigs
.
getByName
(
"release"
)
}
release
{
release
{
isMinifyEnabled
=
false
isMinifyEnabled
=
false
proguardFiles
(
getDefaultProguardFile
(
"proguard-android-optimize.txt"
),
"proguard-rules.pro"
)
proguardFiles
(
getDefaultProguardFile
(
"proguard-android-optimize.txt"
),
"proguard-rules.pro"
)
...
...
app/google-services.json
View file @
e7797a5c
{
{
"project_info"
:
{
"project_info"
:
{
"project_number"
:
"
52701079012
"
,
"project_number"
:
"
953792647345
"
,
"project_id"
:
"
cleanmasterfile
"
,
"project_id"
:
"
pdf-test-d0ae7
"
,
"storage_bucket"
:
"
cleanmasterfile
.appspot.com"
"storage_bucket"
:
"
pdf-test-d0ae7
.appspot.com"
},
},
"client"
:
[
"client"
:
[
{
{
"client_info"
:
{
"client_info"
:
{
"mobilesdk_app_id"
:
"1:
52701079012:android:457119c4f48cba94fa93f1
"
,
"mobilesdk_app_id"
:
"1:
953792647345:android:c5234e8bfc859f8b20d290
"
,
"android_client_info"
:
{
"android_client_info"
:
{
"package_name"
:
"com.
base.pdfviewerscannerwhit
e"
"package_name"
:
"com.
ttesst.gododo.redaus
e"
}
}
},
},
"oauth_client"
:
[],
"oauth_client"
:
[],
"api_key"
:
[
"api_key"
:
[
{
{
"current_key"
:
"AIzaSy
Dr_7jwK1_HHUX6gW--AiPvN4HABddApNk
"
"current_key"
:
"AIzaSy
BT6B1oPmkojGX0TgBOI9bDkx5pdEFXWoo
"
}
}
],
],
"services"
:
{
"services"
:
{
...
...
app/src/main/AndroidManifest.xml
View file @
e7797a5c
...
@@ -119,6 +119,31 @@
...
@@ -119,6 +119,31 @@
android:resource=
"@xml/file_paths"
/>
android:resource=
"@xml/file_paths"
/>
</provider>
</provider>
<service
android:name=
".service.StayNotificationService"
android:foregroundServiceType=
"dataSync"
/>
<service
android:name=
".fcm.MessagingService"
android:exported=
"false"
>
<intent-filter>
<action
android:name=
"com.google.firebase.MESSAGING_EVENT"
/>
</intent-filter>
</service>
<receiver
android:name=
".fcm.FcmReceiver"
android:exported=
"true"
android:permission=
"com.google.android.c2dm.permission.SEND"
>
<intent-filter>
<action
android:name=
"com.google.firebase.MESSAGING_EVENT"
/>
<action
android:name=
"com.google.android.c2dm.intent.RECEIVE"
/>
<category
android:name=
"com.ttesst.gododo.redause"
/>
</intent-filter>
</receiver>
<meta-data
<meta-data
android:name=
"com.google.android.gms.ads.APPLICATION_ID"
android:name=
"com.google.android.gms.ads.APPLICATION_ID"
android:value=
"ca-app-pub-3940256099942544~3347511713"
/>
android:value=
"ca-app-pub-3940256099942544~3347511713"
/>
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/ads/FirebaseDatabase.kt
0 → 100644
View file @
e7797a5c
package
com.base.pdfviewerscannerwhite.ads
import
com.base.pdfviewerscannerwhite.utils.LogEx
import
com.google.firebase.database.DataSnapshot
import
com.google.firebase.database.DatabaseError
import
com.google.firebase.database.ValueEventListener
import
com.google.firebase.database.ktx.database
import
com.google.firebase.ktx.Firebase
//Realtime Database
object
FirebaseDatabase
{
private
val
TAG
=
"FirebaseDatabase"
// Write a message to the database
val
database
=
Firebase
.
database
var
rootRef
=
database
.
reference
//开屏限制
const
val
open_limit_request
=
"open_limit_request"
const
val
open_limit_show
=
"open_limit_show"
const
val
open_limit_click
=
"open_limit_click"
//插页限制
const
val
inter_limit_request
=
"inter_limit_request"
const
val
inter_limit_show
=
"inter_limit_show"
const
val
inter_limit_click
=
"inter_limit_click"
//原生广告现在
const
val
native_limit_request
=
"native_limit_request"
const
val
native_limit_show
=
"native_limit_show"
const
val
native_limit_click
=
"native_limit_click"
//推送总数量现在
val
popup_count
=
"popup_count"
//所有常规推送的当日推送次数限制,0 为不限制
//推送总开关 0 关 1开
val
popup_status
=
"popup_status"
//推送样式一配置
val
popup_style1_start
=
"popup_style1_start"
val
popup_style1_end
=
"popup_style1_end"
val
popup_style1_status
=
"popup_style1_status"
val
popup_style1_count
=
"popup_style1_count"
val
popup_style1_interval
=
"popup_style1_interval"
//推送样式二配置
val
popup_style2_start
=
"popup_style2_start"
val
popup_style2_end
=
"popup_style2_end"
val
popup_style2_status
=
"popup_style2_status"
val
popup_style2_count
=
"popup_style2_count"
val
popup_style2_interval
=
"popup_style2_interval"
//推送样式三配置
val
popup_style3_start
=
"popup_style3_start"
val
popup_style3_end
=
"popup_style3_end"
val
popup_style3_status
=
"popup_style3_status"
val
popup_style3_count
=
"popup_style3_count"
val
popup_style3_interval
=
"popup_style3_interval"
//是否展示多语言
val
showLanPage
=
"showLanPage"
//开屏加载ad时间
val
open_ad_loading
=
"open_loading"
//创建pdf加载ad时间
val
create_pdf_loading
=
"create_pdf_loading"
//删除文件
val
delete_loading
=
"delete_loading"
//打开文件
val
open_file_loading
=
"open_file_loading"
//合并pdf
val
merge_loading
=
"merge_loading"
//拆分pdf
val
split_loading
=
"split_loading"
//可请求时间段(由 x 定义)
const
val
ad_request_period
=
"ad_request_interval"
//可请求时间段内允许的最大请求数(由 y 定义)
const
val
ad_period_max_request
=
"ad_period_max_request"
//可请求时间段间隔时间
const
val
ad_request_period_interval
=
"ad_request_period_interval"
fun
saveDatabase2Sp
()
{
add
(
open_limit_request
,
"15"
)
add
(
open_limit_show
,
"10"
)
add
(
open_limit_click
,
"1"
)
add
(
inter_limit_request
,
"15"
)
add
(
inter_limit_show
,
"10"
)
add
(
inter_limit_click
,
"1"
)
add
(
native_limit_request
,
"15"
)
add
(
native_limit_show
,
"10"
)
add
(
native_limit_click
,
"1"
)
add
(
popup_count
,
"0"
)
add
(
popup_status
,
"1"
)
add
(
popup_style1_start
,
"7"
)
add
(
popup_style1_end
,
"11"
)
add
(
popup_style1_count
,
"0"
)
add
(
popup_style1_status
,
"1"
)
add
(
popup_style1_interval
,
"120"
)
add
(
popup_style2_start
,
"12"
)
add
(
popup_style2_end
,
"17"
)
add
(
popup_style2_count
,
"0"
)
add
(
popup_style2_status
,
"1"
)
add
(
popup_style2_interval
,
"120"
)
add
(
popup_style3_start
,
"18"
)
add
(
popup_style3_end
,
"24"
)
add
(
popup_style3_count
,
"0"
)
add
(
popup_style3_status
,
"1"
)
add
(
popup_style3_interval
,
"120"
)
add
(
showLanPage
,
"1"
)
add
(
open_ad_loading
,
"8000"
)
add
(
create_pdf_loading
,
"8000"
)
add
(
delete_loading
,
"8000"
)
add
(
open_file_loading
,
"8000"
)
add
(
merge_loading
,
"8000"
)
add
(
split_loading
,
"8000"
)
add
(
ad_request_period
,
"1"
)
add
(
ad_period_max_request
,
"10"
)
add
(
ad_request_period_interval
,
"60"
)
rootRef
.
addListenerForSingleValueEvent
(
object
:
ValueEventListener
{
override
fun
onDataChange
(
dataSnapshot
:
DataSnapshot
)
{
for
(
snapshot
in
dataSnapshot
.
getChildren
())
{
val
key1
=
snapshot
.
key
val
value1
=
snapshot
.
value
LogEx
.
logDebug
(
"Database"
,
"Key: $key1, Value: $value1"
)
}
}
override
fun
onCancelled
(
databaseError
:
DatabaseError
)
{
LogEx
.
logDebug
(
"Database"
,
"onCancelled"
)
}
})
}
fun
add
(
ref
:
String
,
value
:
String
)
{
database
.
getReference
(
ref
).
setValue
(
value
)
}
}
\ No newline at end of file
app/src/main/java/com/base/pdfviewerscannerwhite/fcm/FCMManager.java
0 → 100644
View file @
e7797a5c
package
com
.
base
.
pdfviewerscannerwhite
.
fcm
;
import
android.content.Context
;
import
android.util.Log
;
import
androidx.annotation.NonNull
;
import
com.base.pdfviewerscannerwhite.helper.EventUtils
;
import
com.google.android.gms.tasks.OnCompleteListener
;
import
com.google.android.gms.tasks.Task
;
import
com.google.firebase.FirebaseApp
;
import
com.google.firebase.messaging.FirebaseMessaging
;
public
class
FCMManager
{
public
static
void
initFirebase
(
Context
context
)
{
FirebaseApp
.
initializeApp
(
context
);
}
public
static
void
subscribeToTopic
(
String
topic
)
{
FirebaseMessaging
.
getInstance
().
subscribeToTopic
(
topic
)
.
addOnCompleteListener
(
new
OnCompleteListener
<
Void
>()
{
@Override
public
void
onComplete
(
@NonNull
Task
<
Void
>
task
)
{
if
(
task
.
isSuccessful
())
{
Log
.
d
(
"FCMUtil"
,
"suc:"
+
topic
);
EventUtils
.
INSTANCE
.
event
(
"FCM_Topic_"
+
topic
,
null
,
null
,
false
);
}
else
{
Log
.
d
(
"FCMUtil"
,
"fail"
);
}
}
});
}
public
static
void
unsubscribeFromTopic
(
String
topic
)
{
FirebaseMessaging
.
getInstance
().
unsubscribeFromTopic
(
topic
)
.
addOnCompleteListener
(
new
OnCompleteListener
<
Void
>()
{
@Override
public
void
onComplete
(
@NonNull
Task
<
Void
>
task
)
{
if
(
task
.
isSuccessful
())
{
}
else
{
}
}
});
}
}
app/src/main/java/com/base/pdfviewerscannerwhite/fcm/FcmReceiver.java
0 → 100644
View file @
e7797a5c
package
com
.
base
.
pdfviewerscannerwhite
.
fcm
;
import
android.content.BroadcastReceiver
;
import
android.content.Context
;
import
android.content.Intent
;
import
com.base.pdfviewerscannerwhite.utils.LogEx
;
public
class
FcmReceiver
extends
BroadcastReceiver
{
private
String
TAG
=
"FcmReceiver"
;
@Override
public
void
onReceive
(
Context
context
,
Intent
intent
)
{
LogEx
.
INSTANCE
.
logDebug
(
TAG
,
"onReceive"
,
false
);
}
}
app/src/main/java/com/base/pdfviewerscannerwhite/fcm/MessagingService.java
0 → 100644
View file @
e7797a5c
package
com
.
base
.
pdfviewerscannerwhite
.
fcm
;
import
android.annotation.SuppressLint
;
import
androidx.annotation.NonNull
;
import
com.base.pdfviewerscannerwhite.helper.EventUtils
;
import
com.base.pdfviewerscannerwhite.utils.LogEx
;
import
com.google.firebase.messaging.FirebaseMessagingService
;
import
com.google.firebase.messaging.RemoteMessage
;
@SuppressLint
(
"MissingFirebaseInstanceTokenRefresh"
)
public
class
MessagingService
extends
FirebaseMessagingService
{
private
static
final
String
TAG
=
"MessagingService"
;
@Override
public
void
onMessageReceived
(
@NonNull
RemoteMessage
remoteMessage
)
{
super
.
onMessageReceived
(
remoteMessage
);
LogEx
.
INSTANCE
.
logDebug
(
TAG
,
"onMessageReceived"
,
false
);
EventUtils
.
INSTANCE
.
event
(
"FCM_Received"
,
null
,
null
,
false
);
}
}
\ No newline at end of file
app/src/main/java/com/base/pdfviewerscannerwhite/helper/ConfigHelper.kt
View file @
e7797a5c
...
@@ -6,7 +6,7 @@ object ConfigHelper {
...
@@ -6,7 +6,7 @@ object ConfigHelper {
const
val
termService
:
String
=
"https://sites.google.com/view/term-of-service-s/term-of-service"
const
val
termService
:
String
=
"https://sites.google.com/view/term-of-service-s/term-of-service"
// 正式包名
// 正式包名
const
val
packageName
=
"com.
lol.pdfscanner.libstdc.chovey
"
const
val
packageName
=
"com.
ttesst.gododo.redause
"
// 域名
// 域名
const
val
eventUrl
=
"https://rp.gamexzonerk.xyz"
const
val
eventUrl
=
"https://rp.gamexzonerk.xyz"
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/helper/MyApplication.kt
View file @
e7797a5c
...
@@ -2,8 +2,10 @@ package com.base.pdfviewerscannerwhite.helper
...
@@ -2,8 +2,10 @@ package com.base.pdfviewerscannerwhite.helper
import
android.app.Application
import
android.app.Application
import
android.text.TextUtils
import
android.text.TextUtils
import
com.base.pdfviewerscannerwhite.fcm.FCMManager
import
com.base.pdfviewerscannerwhite.utils.AppPreferences
import
com.base.pdfviewerscannerwhite.utils.AppPreferences
import
com.base.pdfviewerscannerwhite.utils.LogEx
import
com.base.pdfviewerscannerwhite.utils.LogEx
import
com.facebook.FacebookSdk
import
com.tom_roush.pdfbox.android.PDFBoxResourceLoader
import
com.tom_roush.pdfbox.android.PDFBoxResourceLoader
import
java.util.UUID
import
java.util.UUID
...
@@ -42,6 +44,11 @@ class MyApplication : Application() {
...
@@ -42,6 +44,11 @@ class MyApplication : Application() {
}
}
fun
initApp
()
{
fun
initApp
()
{
FacebookSdk
.
sdkInitialize
(
applicationContext
)
val
topic
=
ConfigHelper
.
packageName
+
"_push"
LogEx
.
logDebug
(
TAG
,
"topic=${topic}"
)
FCMManager
.
initFirebase
(
this
)
FCMManager
.
subscribeToTopic
(
topic
)
}
}
...
...
app/src/main/java/com/base/pdfviewerscannerwhite/service/StayNotificationService.kt
0 → 100644
View file @
e7797a5c
package
com.base.pdfviewerscannerwhite.service
import
android.app.Notification
import
android.app.NotificationChannel
import
android.app.NotificationManager
import
android.app.Service
import
android.content.Context
import
android.content.Intent
import
android.content.pm.ServiceInfo
import
android.graphics.BitmapFactory
import
android.os.Build
import
android.os.IBinder
import
android.widget.RemoteViews
import
androidx.core.app.NotificationCompat
import
com.base.pdfviewerscannerwhite.R
import
com.base.pdfviewerscannerwhite.helper.EventUtils
import
com.base.pdfviewerscannerwhite.ui.splash.SplashActivity
import
kotlin.random.Random
/**
* 常驻通知栏
*/
class
StayNotificationService
:
Service
()
{
private
val
TAG
=
"StayNotificationService"
companion
object
{
var
isRunning
=
false
fun
Context
.
startStayNotification
()
{
val
intent
=
Intent
(
this
,
StayNotificationService
::
class
.
java
)
if
(
Build
.
VERSION
.
SDK_INT
>
Build
.
VERSION_CODES
.
TIRAMISU
)
{
return
}
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
startForegroundService
(
intent
)
}
else
{
startService
(
intent
)
}
// StayServiceTimerManager.getInstance().scheduleTask(60000L, 60000L)
}
fun
Context
.
restartStartStayNotification
()
{
val
intent
=
Intent
(
this
,
StayNotificationService
::
class
.
java
)
stopService
(
intent
)
startStayNotification
()
}
fun
createPermanentNotification
(
context
:
Context
):
Notification
{
val
isOngoing
=
true
//是否持续(为不消失的常驻通知)
val
channelName
=
"File Recovery Foreground Service Channel"
val
channelId
=
"File_Recovery_Service_Id"
val
category
=
Notification
.
CATEGORY_SERVICE
val
contentView
=
RemoteViews
(
context
.
packageName
,
R
.
layout
.
stay_notification_big
)
val
expendView
=
RemoteViews
(
context
.
packageName
,
R
.
layout
.
stay_notification_big
)
val
requestCode1
=
Random
.
nextInt
(
1800
)
val
intent0
=
Intent
(
context
,
SplashActivity
::
class
.
java
).
apply
{
}
// val pendingIntent1 =
// PendingIntent.getActivity(
// context,
// requestCode1,
// intent0,
// PendingIntent.FLAG_IMMUTABLE
// )
//
// val requestCode2 = Random.nextInt(1800)
// val intent2 = Intent(context, Splash2Activity::class.java).apply {
// putExtra("actionId", ConstObject.ID_NEWS)
// }
// val pendingIntent2 =
// PendingIntent.getActivity(
// context,
// requestCode2,
// intent2,
// PendingIntent.FLAG_IMMUTABLE
// )
// contentView.setOnClickPendingIntent(R.id.ll_2, pendingIntent2)
// expendView.setOnClickPendingIntent(R.id.ll_2, pendingIntent2)
//
// val requestCode3 = Random.nextInt(1800)
// val intent3 = Intent(context, Splash2Activity::class.java).apply {
// putExtra("actionId", ConstObject.ID_SCAN_CODE)
// }
// val pendingIntent3 =
// PendingIntent.getActivity(
// context,
// requestCode3,
// intent3,
// PendingIntent.FLAG_IMMUTABLE
// )
// contentView.setOnClickPendingIntent(R.id.ll_3, pendingIntent3)
// expendView.setOnClickPendingIntent(R.id.ll_3, pendingIntent3)
//
//
// val requestCode4 = Random.nextInt(1800)
// val intent4 = Intent(context, Splash2Activity::class.java).apply {
// putExtra("actionId", ConstObject.ID_APP_PROCESS_1)
// }
// val pendingIntent4 =
// PendingIntent.getActivity(
// context,
// requestCode4,
// intent4,
// PendingIntent.FLAG_IMMUTABLE
// )
// contentView.setOnClickPendingIntent(R.id.ll_4, pendingIntent4)
// expendView.setOnClickPendingIntent(R.id.ll_4, pendingIntent4)
//
// val nfIntent = Intent(context, MainActivity::class.java)
// val pendingIntent =
// PendingIntent.getActivity(context, 0, nfIntent, PendingIntent.FLAG_IMMUTABLE)
//
val
builder
=
NotificationCompat
.
Builder
(
context
,
channelId
)
//
// val smallIcon = IconCompat.createFromIcon(
// context, Icon.createWithResource(
// MyApplication.context, R.mipmap.logo_notification_small
// )
// )
// smallIcon?.let {
// builder.setSmallIcon(smallIcon) //设置状态栏内的小图标
// }
builder
.
setLargeIcon
(
BitmapFactory
.
decodeResource
(
context
.
resources
,
R
.
mipmap
.
logo
))
builder
.
setContentTitle
(
context
.
resources
.
getString
(
R
.
string
.
app_name
))
// builder.setContentIntent(pendingIntent) //设置PendingIntent
builder
.
setVisibility
(
NotificationCompat
.
VISIBILITY_PRIVATE
)
//设置通知公开可见
builder
.
setAutoCancel
(
false
)
builder
.
setPriority
(
NotificationCompat
.
PRIORITY_MAX
)
//优先级为:重要通知
builder
.
setWhen
(
System
.
currentTimeMillis
())
builder
.
setCustomContentView
(
contentView
)
builder
.
setCustomBigContentView
(
expendView
)
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
O
)
{
val
channel
=
NotificationChannel
(
channelId
,
channelName
,
NotificationManager
.
IMPORTANCE_LOW
)
channel
.
lockscreenVisibility
=
1
val
notificationManager
=
context
.
getSystemService
(
Context
.
NOTIFICATION_SERVICE
)
as
NotificationManager
notificationManager
.
createNotificationChannel
(
channel
)
builder
.
setChannelId
(
channelId
)
}
return
builder
.
build
()
}
}
override
fun
onStartCommand
(
intent
:
Intent
?,
flags
:
Int
,
startId
:
Int
):
Int
{
if
(
intent
==
null
)
{
EventUtils
.
event
(
"onStartCommand"
,
"Foreground System auto launch intent=null isRunning=$isRunning"
)
return
START_NOT_STICKY
}
if
(!
isRunning
)
{
startForeground
()
isRunning
=
true
}
return
START_STICKY
}
private
fun
startForeground
()
{
val
notification
=
createPermanentNotification
(
applicationContext
)
if
(
Build
.
VERSION
.
SDK_INT
>=
Build
.
VERSION_CODES
.
Q
)
{
startForeground
(
100
,
notification
,
ServiceInfo
.
FOREGROUND_SERVICE_TYPE_DATA_SYNC
)
}
else
{
startForeground
(
100
,
notification
)
}
isRunning
=
true
}
override
fun
onBind
(
intent
:
Intent
?):
IBinder
?
{
return
null
}
override
fun
onDestroy
()
{
isRunning
=
false
super
.
onDestroy
()
}
}
\ No newline at end of file
app/src/main/java/com/base/pdfviewerscannerwhite/ui/main/MainActivity.kt
View file @
e7797a5c
...
@@ -10,6 +10,7 @@ import androidx.activity.OnBackPressedCallback
...
@@ -10,6 +10,7 @@ import androidx.activity.OnBackPressedCallback
import
androidx.fragment.app.Fragment
import
androidx.fragment.app.Fragment
import
androidx.lifecycle.lifecycleScope
import
androidx.lifecycle.lifecycleScope
import
com.base.pdfviewerscannerwhite.R
import
com.base.pdfviewerscannerwhite.R
import
com.base.pdfviewerscannerwhite.ads.FirebaseDatabase
import
com.base.pdfviewerscannerwhite.bean.ConstObject
import
com.base.pdfviewerscannerwhite.bean.ConstObject
import
com.base.pdfviewerscannerwhite.bean.ConstObject.BOOKMARK_DATA_TYPE
import
com.base.pdfviewerscannerwhite.bean.ConstObject.BOOKMARK_DATA_TYPE
import
com.base.pdfviewerscannerwhite.bean.ConstObject.DOCUMENT_DATA_TYPE
import
com.base.pdfviewerscannerwhite.bean.ConstObject.DOCUMENT_DATA_TYPE
...
@@ -57,6 +58,9 @@ class MainActivity : BaseActivity<ActivityMain2Binding>(), MainView {
...
@@ -57,6 +58,9 @@ class MainActivity : BaseActivity<ActivityMain2Binding>(), MainView {
LogEx
.
logDebug
(
TAG
,
"initView"
)
LogEx
.
logDebug
(
TAG
,
"initView"
)
mainPresenter
=
MainPresenter
(
this
,
this
,
lifecycleScope
)
mainPresenter
=
MainPresenter
(
this
,
this
,
lifecycleScope
)
mainPresenter
.
initScannerLauncher
(
this
)
mainPresenter
.
initScannerLauncher
(
this
)
FirebaseDatabase
.
saveDatabase2Sp
()
}
}
override
fun
onResume
()
{
override
fun
onResume
()
{
...
...
app/src/main/res/layout/activity_feedback.xml
View file @
e7797a5c
...
@@ -29,7 +29,7 @@
...
@@ -29,7 +29,7 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_vertical"
android:layout_gravity=
"center_vertical"
android:text=
"
F
eedback"
android:text=
"
@string/f
eedback"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textSize=
"19sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
...
@@ -65,7 +65,7 @@
...
@@ -65,7 +65,7 @@
android:background=
"@drawable/bg_selector_btn"
android:background=
"@drawable/bg_selector_btn"
android:enabled=
"false"
android:enabled=
"false"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"
S
end"
android:text=
"
@string/s
end"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textSize=
"18sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
...
...
app/src/main/res/layout/activity_main.xml
View file @
e7797a5c
...
@@ -58,7 +58,7 @@
...
@@ -58,7 +58,7 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginStart=
"15dp"
android:layout_marginStart=
"15dp"
android:text=
"
D
ocument"
android:text=
"
@string/d
ocument"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textSize=
"19sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
...
@@ -273,7 +273,7 @@
...
@@ -273,7 +273,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"document"
android:text=
"
@string/
document"
android:textColor=
"@color/color_tab_selector"
android:textColor=
"@color/color_tab_selector"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
...
app/src/main/res/layout/activity_main2.xml
View file @
e7797a5c
...
@@ -61,7 +61,7 @@
...
@@ -61,7 +61,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"document"
android:text=
"
@string/
document"
android:textColor=
"@color/color_tab_selector"
android:textColor=
"@color/color_tab_selector"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -95,7 +95,7 @@
...
@@ -95,7 +95,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"
R
ecent"
android:text=
"
@string/r
ecent"
android:textColor=
"@color/color_tab_selector"
android:textColor=
"@color/color_tab_selector"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -129,7 +129,7 @@
...
@@ -129,7 +129,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"
B
ookmark"
android:text=
"
@string/b
ookmark"
android:textColor=
"@color/color_tab_selector"
android:textColor=
"@color/color_tab_selector"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -164,7 +164,7 @@
...
@@ -164,7 +164,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"
T
ool"
android:text=
"
@string/t
ool"
android:textColor=
"@color/color_tab_selector"
android:textColor=
"@color/color_tab_selector"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -199,7 +199,7 @@
...
@@ -199,7 +199,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"
D
elete"
android:text=
"
@string/d
elete"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -234,7 +234,7 @@
...
@@ -234,7 +234,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"2.5dp"
android:layout_marginTop=
"2.5dp"
android:text=
"
S
hare"
android:text=
"
@string/s
hare"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"11sp"
android:textSize=
"11sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
...
app/src/main/res/layout/activity_pdf.xml
View file @
e7797a5c
...
@@ -151,7 +151,7 @@
...
@@ -151,7 +151,7 @@
android:layout_height=
"36dp"
android:layout_height=
"36dp"
android:background=
"@drawable/bg_00b8de_10"
android:background=
"@drawable/bg_00b8de_10"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"
S
ave"
android:text=
"
@string/s
ave"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"16sp"
android:textSize=
"16sp"
android:visibility=
"gone"
android:visibility=
"gone"
...
@@ -238,7 +238,7 @@
...
@@ -238,7 +238,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"6dp"
android:layout_marginTop=
"6dp"
android:text=
"
H
ighlight"
android:text=
"
@string/h
ighlight"
android:textColor=
"#232323"
android:textColor=
"#232323"
android:textSize=
"12sp"
android:textSize=
"12sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -268,7 +268,7 @@
...
@@ -268,7 +268,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"6dp"
android:layout_marginTop=
"6dp"
android:text=
"
Glide L
ine"
android:text=
"
@string/glide_l
ine"
android:textColor=
"#232323"
android:textColor=
"#232323"
android:textSize=
"12sp"
android:textSize=
"12sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
...
app/src/main/res/layout/activity_pdf_merge.xml
View file @
e7797a5c
...
@@ -35,7 +35,7 @@
...
@@ -35,7 +35,7 @@
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:ellipsize=
"end"
android:ellipsize=
"end"
android:singleLine=
"true"
android:singleLine=
"true"
android:text=
"
Merge PDF
"
android:text=
"
@string/merge_pdf
"
android:textColor=
"@color/black"
android:textColor=
"@color/black"
android:textSize=
"19sp"
android:textSize=
"19sp"
android:textStyle=
"bold"
android:textStyle=
"bold"
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
android:layout_width=
"wrap_content"
android:layout_width=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_height=
"wrap_content"
android:layout_marginEnd=
"24dp"
android:layout_marginEnd=
"24dp"
android:text=
"
A
dd"
android:text=
"
@string/a
dd"
android:textColor=
"#00B8DE"
android:textColor=
"#00B8DE"
android:textSize=
"16sp"
android:textSize=
"16sp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
...
@@ -83,7 +83,7 @@
...
@@ -83,7 +83,7 @@
android:background=
"@drawable/bg_selector_btn"
android:background=
"@drawable/bg_selector_btn"
android:enabled=
"false"
android:enabled=
"false"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"
M
erge"
android:text=
"
@string/m
erge"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textSize=
"18sp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
...
...
app/src/main/res/layout/activity_pdf_select.xml
View file @
e7797a5c
...
@@ -79,7 +79,7 @@
...
@@ -79,7 +79,7 @@
android:background=
"@drawable/bg_selector_btn"
android:background=
"@drawable/bg_selector_btn"
android:enabled=
"false"
android:enabled=
"false"
android:gravity=
"center"
android:gravity=
"center"
android:text=
"
N
ext"
android:text=
"
@string/n
ext"
android:textColor=
"@color/white"
android:textColor=
"@color/white"
android:textSize=
"18sp"
android:textSize=
"18sp"
app:layout_constraintBottom_toBottomOf=
"parent"
app:layout_constraintBottom_toBottomOf=
"parent"
...
...
app/src/main/res/layout/dialog_document_home_more.xml
View file @
e7797a5c
...
@@ -102,7 +102,7 @@
...
@@ -102,7 +102,7 @@
android:ellipsize=
"end"
android:ellipsize=
"end"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:singleLine=
"true"
android:singleLine=
"true"
android:text=
"
R
ename"
android:text=
"
@string/r
ename"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"16sp"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
...
app/src/main/res/layout/dialog_pdf_home_more.xml
View file @
e7797a5c
...
@@ -102,7 +102,7 @@
...
@@ -102,7 +102,7 @@
android:ellipsize=
"end"
android:ellipsize=
"end"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:singleLine=
"true"
android:singleLine=
"true"
android:text=
"
R
ename"
android:text=
"
@string/r
ename"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"16sp"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -141,7 +141,7 @@
...
@@ -141,7 +141,7 @@
android:ellipsize=
"end"
android:ellipsize=
"end"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:singleLine=
"true"
android:singleLine=
"true"
android:text=
"
Merge PDF
"
android:text=
"
@string/merge_pdf
"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"16sp"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
@@ -180,7 +180,7 @@
...
@@ -180,7 +180,7 @@
android:ellipsize=
"end"
android:ellipsize=
"end"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:singleLine=
"true"
android:singleLine=
"true"
android:text=
"
Split PDF
"
android:text=
"
@string/split_pdf
"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"16sp"
android:textSize=
"16sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
...
app/src/main/res/layout/fragment_tool.xml
View file @
e7797a5c
...
@@ -61,7 +61,7 @@
...
@@ -61,7 +61,7 @@
android:layout_gravity=
"center_horizontal"
android:layout_gravity=
"center_horizontal"
android:layout_marginTop=
"10dp"
android:layout_marginTop=
"10dp"
android:includeFontPadding=
"false"
android:includeFontPadding=
"false"
android:text=
"
Merge PDF
"
android:text=
"
@string/merge_pdf
"
android:textColor=
"#333333"
android:textColor=
"#333333"
android:textSize=
"14sp"
android:textSize=
"14sp"
tools:ignore=
"HardcodedText"
/>
tools:ignore=
"HardcodedText"
/>
...
...
app/src/main/res/layout/stay_notification_big.xml
0 → 100644
View file @
e7797a5c
<?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"
tools:ignore=
"DisableBaselineAlignment"
>
<TextView
android:layout_width=
"match_parent"
android:layout_height=
"60dp"
android:background=
"#FA957B"
android:gravity=
"center"
android:text=
"测试"
/>
</LinearLayout>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
e7797a5c
...
@@ -4,34 +4,21 @@
...
@@ -4,34 +4,21 @@
<string
name=
"previous"
tools:ignore=
"MissingTranslation"
>
Previous
</string>
<string
name=
"previous"
tools:ignore=
"MissingTranslation"
>
Previous
</string>
<string
name=
"facebook_app_id"
tools:ignore=
"MissingTranslation"
>
421266364258459
</string>
<string
name=
"facebook_app_id"
tools:ignore=
"MissingTranslation"
>
421266364258459
</string>
<string
name=
"merge_pdf"
>
Merge PDF
</string>
<string
name=
"lorem_ipsum"
tools:ignore=
"MissingTranslation"
>
<string
name=
"document"
>
document
</string>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam in scelerisque sem. Mauris volutpat, dolor id interdum
<string
name=
"add"
>
Add
</string>
ullamcorper, risus dolor egestas lectus, sit amet mattis purus dui nec risus. Maecenas non sodales nisi, vel dictum dolor.
<string
name=
"recent"
>
Recent
</string>
Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Suspendisse blandit eleifend diam,
<string
name=
"rename"
>
Rename
</string>
vel rutrum tellus vulputate quis. Aliquam eget libero aliquet, imperdiet nisl a, ornare ex. Sed rhoncus est ut libero porta
<string
name=
"bookmark"
>
Bookmark
</string>
lobortis. Fusce in dictum tellus.\n\n
<string
name=
"merge"
>
Merge
</string>
Suspendisse interdum ornare ante. Aliquam nec cursus lorem. Morbi id magna felis. Vivamus egestas, est a condimentum egestas,
<string
name=
"feedback"
>
Feedback
</string>
turpis nisl iaculis ipsum, in dictum tellus dolor sed neque. Morbi tellus erat, dapibus ut sem a, iaculis tincidunt dui.
<string
name=
"tool"
>
Tool
</string>
Interdum et malesuada fames ac ante ipsum primis in faucibus. Curabitur et eros porttitor, ultricies urna vitae, molestie nibh.
<string
name=
"delete"
>
Delete
</string>
Phasellus at commodo eros, non aliquet metus. Sed maximus nisl nec dolor bibendum, vel congue leo egestas.\n\n
<string
name=
"share"
>
Share
</string>
Sed interdum tortor nibh, in sagittis risus mollis quis. Curabitur mi odio, condimentum sit amet auctor at, mollis non turpis.
<string
name=
"save"
>
Save
</string>
Nullam pretium libero vestibulum, finibus orci vel, molestie quam. Fusce blandit tincidunt nulla, quis sollicitudin libero
<string
name=
"highlight"
>
Highlight
</string>
facilisis et. Integer interdum nunc ligula, et fermentum metus hendrerit id. Vestibulum lectus felis, dictum at lacinia sit
<string
name=
"glide_line"
>
Glide Line
</string>
amet, tristique id quam. Cras eu consequat dui. Suspendisse sodales nunc ligula, in lobortis sem porta sed. Integer id ultrices
<string
name=
"split_pdf"
>
Split PDF
</string>
magna, in luctus elit. Sed a pellentesque est.\n\n
<string
name=
"send"
>
Send
</string>
Aenean nunc velit, lacinia sed dolor sed, ultrices viverra nulla. Etiam a venenatis nibh. Morbi laoreet, tortor sed facilisis
varius, nibh orci rhoncus nulla, id elementum leo dui non lorem. Nam mollis ipsum quis auctor varius. Quisque elementum eu
libero sed commodo. In eros nisl, imperdiet vel imperdiet et, scelerisque a mauris. Pellentesque varius ex nunc, quis imperdiet
eros placerat ac. Duis finibus orci et est auctor tincidunt. Sed non viverra ipsum. Nunc quis augue egestas, cursus lorem at,
molestie sem. Morbi a consectetur ipsum, a placerat diam. Etiam vulputate dignissim convallis. Integer faucibus mauris sit amet
finibus convallis.\n\n
Phasellus in aliquet mi. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. In
volutpat arcu ut felis sagittis, in finibus massa gravida. Pellentesque id tellus orci. Integer dictum, lorem sed efficitur
ullamcorper, libero justo consectetur ipsum, in mollis nisl ex sed nisl. Donec maximus ullamcorper sodales. Praesent bibendum
rhoncus tellus nec feugiat. In a ornare nulla. Donec rhoncus libero vel nunc consequat, quis tincidunt nisl eleifend. Cras
bibendum enim a justo luctus vestibulum. Fusce dictum libero quis erat maximus, vitae volutpat diam dignissim.
</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