Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
Simple-Sms
Project
Overview
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
zhangchengbo
Simple-Sms
Commits
e4214c5c
Commit
e4214c5c
authored
Aug 05, 2025
by
zhangchengbo
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix:1.添加手机号类型判断 2.对顺丰号码回复短信进行脱敏操作
parent
e5636151
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
61 additions
and
22 deletions
+61
-22
MainActivity.kt
...c/main/kotlin/com/secspace/sms/activities/MainActivity.kt
+10
-4
ThreadActivity.kt
...main/kotlin/com/secspace/sms/activities/ThreadActivity.kt
+46
-15
BaseConversationsAdapter.kt
...lin/com/secspace/sms/adapters/BaseConversationsAdapter.kt
+5
-3
No files found.
app/src/main/kotlin/com/secspace/sms/activities/MainActivity.kt
View file @
e4214c5c
...
@@ -99,8 +99,16 @@ class MainActivity : SimpleActivity() {
...
@@ -99,8 +99,16 @@ class MainActivity : SimpleActivity() {
override
fun
onResume
()
{
override
fun
onResume
()
{
super
.
onResume
()
super
.
onResume
()
/* ensureBackgroundThread {
val allConversations = conversationsDB.getNonArchived()
if(allConversations.isEmpty()) return@ensureBackgroundThread
com.secspace.log.Log.d(TAG, "获取所有 是否是顺丰号码 = ${allConversations[0].isSFNumber} 是否包含 isContains = ${allConversations[0].snippet.contains("\u200B")}")
val results: Conversation = allConversations.last()
com.secspace.log.Log.d(TAG, "获取最后一条body = ${GsonUtil.parseBeanToJson(results)}")
}*/
//是否拥有通知使用权
val
result
=
isNotificationAccessEnabled
()
val
result
=
isNotificationAccessEnabled
()
com
.
secspace
.
log
.
Log
.
d
(
TAG
,
"是否拥有通知使用权 = $result"
)
if
(!
result
){
if
(!
result
){
val
intent
=
Intent
(
"android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
)
val
intent
=
Intent
(
"android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"
)
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
)
intent
.
addFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
)
...
@@ -479,8 +487,6 @@ class MainActivity : SimpleActivity() {
...
@@ -479,8 +487,6 @@ class MainActivity : SimpleActivity() {
// Log.d(TAG, " MainActivity getMessages() firstConversation 数据库 =:${GsonUtil.parseBeanToJson(firstConversation)} ")
// Log.d(TAG, " MainActivity getMessages() firstConversation 数据库 =:${GsonUtil.parseBeanToJson(firstConversation)} ")
conversationsDB
.
insertOrUpdate
(
firstConversation
)
conversationsDB
.
insertOrUpdate
(
firstConversation
)
// Log.d(TAG, " MainActivity getMessages() lastMsg 数据库 =:${GsonUtil.parseBeanToJson(lastMsg)} ")
// messagesDB.insertOrUpdate(lastMsg)
}
}
}
}
...
@@ -551,7 +557,7 @@ class MainActivity : SimpleActivity() {
...
@@ -551,7 +557,7 @@ class MainActivity : SimpleActivity() {
private
fun
handleConversationClick
(
any
:
Any
)
{
private
fun
handleConversationClick
(
any
:
Any
)
{
Intent
(
this
,
ThreadActivity
::
class
.
java
).
apply
{
Intent
(
this
,
ThreadActivity
::
class
.
java
).
apply
{
val
conversation
=
any
as
Conversation
val
conversation
=
any
as
Conversation
if
(
conversation
.
snippet
.
contains
(
"\u200B"
))
{
if
(
conversation
.
snippet
.
contains
(
"\u200B"
)
||
conversation
.
isSFNumber
)
{
val
phoneNumber
=
conversation
.
title
val
phoneNumber
=
conversation
.
title
if
(
phoneNumber
.
contains
(
"+86"
))
{
if
(
phoneNumber
.
contains
(
"+86"
))
{
phoneNumber
.
replace
(
"+86"
,
""
)
phoneNumber
.
replace
(
"+86"
,
""
)
...
...
app/src/main/kotlin/com/secspace/sms/activities/ThreadActivity.kt
View file @
e4214c5c
...
@@ -43,7 +43,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
...
@@ -43,7 +43,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
com.google.gson.Gson
import
com.google.gson.Gson
import
com.google.gson.reflect.TypeToken
import
com.google.gson.reflect.TypeToken
import
com.secspace.log.Log
import
com.secspace.sms.R
import
com.secspace.sms.R
import
com.secspace.sms.adapters.AttachmentsAdapter
import
com.secspace.sms.adapters.AttachmentsAdapter
import
com.secspace.sms.adapters.AutoCompleteTextViewAdapter
import
com.secspace.sms.adapters.AutoCompleteTextViewAdapter
...
@@ -137,10 +136,10 @@ class ThreadActivity : SimpleActivity() {
...
@@ -137,10 +136,10 @@ class ThreadActivity : SimpleActivity() {
}
}
threadId
=
intent
.
getLongExtra
(
THREAD_ID
,
0L
)
threadId
=
intent
.
getLongExtra
(
THREAD_ID
,
0L
)
/* intent.getStringExtra(THREAD_TITLE)?.let {
/* intent.getStringExtra(THREAD_TITLE)?.let {
binding.threadToolbar.title = it
binding.threadToolbar.title = it
android.util.Log.d(TAG, " OnCreate title = $it")
android.util.Log.d(TAG, " OnCreate title = $it")
}*/
}*/
isRecycleBin
=
intent
.
getBooleanExtra
(
IS_RECYCLE_BIN
,
false
)
isRecycleBin
=
intent
.
getBooleanExtra
(
IS_RECYCLE_BIN
,
false
)
wasProtectionHandled
=
intent
.
getBooleanExtra
(
WAS_PROTECTION_HANDLED
,
false
)
wasProtectionHandled
=
intent
.
getBooleanExtra
(
WAS_PROTECTION_HANDLED
,
false
)
...
@@ -430,7 +429,7 @@ class ThreadActivity : SimpleActivity() {
...
@@ -430,7 +429,7 @@ class ThreadActivity : SimpleActivity() {
// Log.d(TAG,"--ThreadActivity--setupThreadTitle-- conversation:${Gson().toJson(conversation)} binding.threadToolbar.title = ${binding.threadToolbar.title}")
// Log.d(TAG,"--ThreadActivity--setupThreadTitle-- conversation:${Gson().toJson(conversation)} binding.threadToolbar.title = ${binding.threadToolbar.title}")
val
title
=
intent
.
getStringExtra
(
THREAD_TITLE
)
?:
""
val
title
=
intent
.
getStringExtra
(
THREAD_TITLE
)
?:
""
binding
.
threadToolbar
.
title
=
if
(!
title
.
isNullOrEmpty
())
{
binding
.
threadToolbar
.
title
=
if
(!
title
.
isNullOrEmpty
())
{
// Log.d(TAG,"--ThreadActivity--setupThreadTitle---1 THREAD_NUMBER:$title")
// Log.d(TAG,"--ThreadActivity--setupThreadTitle---1 THREAD_NUMBER:$title")
...
@@ -438,17 +437,17 @@ class ThreadActivity : SimpleActivity() {
...
@@ -438,17 +437,17 @@ class ThreadActivity : SimpleActivity() {
title
title
}
else
{
}
else
{
val
title
=
conversation
?.
title
val
title
=
conversation
?.
title
if
(!
title
.
isNullOrEmpty
())
{
if
(!
title
.
isNullOrEmpty
())
{
binding
.
threadToolbar
.
title
=
title
binding
.
threadToolbar
.
title
=
title
return
return
}
}
// Log.d(TAG,"--ThreadActivity--setupThreadTitle---2 THREAD_NUMBER:${intent.getStringExtra(THREAD_NUMBER)} title = $title")
// Log.d(TAG,"--ThreadActivity--setupThreadTitle---2 THREAD_NUMBER:${intent.getStringExtra(THREAD_NUMBER)} title = $title")
val
phoneNUmber
=
intent
.
getStringExtra
(
THREAD_NUMBER
)
val
phoneNUmber
=
intent
.
getStringExtra
(
THREAD_NUMBER
)
/*phoneNUmber?.let {
/*phoneNUmber?.let {
binding.threadToolbar.title =it.replace(" ","")
binding.threadToolbar.title =it.replace(" ","")
}*/
}*/
// participants.getThreadTitle()
// participants.getThreadTitle()
phoneNUmber
?.
replace
(
" "
,
""
)
phoneNUmber
?.
replace
(
" "
,
""
)
}
}
}
}
...
@@ -686,12 +685,12 @@ class ThreadActivity : SimpleActivity() {
...
@@ -686,12 +685,12 @@ class ThreadActivity : SimpleActivity() {
sendMessage
()
sendMessage
()
}
}
threadSendMessage
.
setOnLongClickListener
{
/*
threadSendMessage.setOnLongClickListener {
/*
if (!isScheduledMessage) {
if (!isScheduledMessage) {
launchScheduleSendDialog()
launchScheduleSendDialog()
}
*/
}
true
true
}
}
*/
threadSendMessage
.
isClickable
=
false
threadSendMessage
.
isClickable
=
false
threadTypeMessage
.
onTextChangeListener
{
threadTypeMessage
.
onTextChangeListener
{
...
@@ -1368,18 +1367,50 @@ class ThreadActivity : SimpleActivity() {
...
@@ -1368,18 +1367,50 @@ class ThreadActivity : SimpleActivity() {
private
fun
sendNormalMessage
(
text
:
String
,
subscriptionId
:
Int
)
{
private
fun
sendNormalMessage
(
text
:
String
,
subscriptionId
:
Int
)
{
val
addresses
=
participants
.
getAddresses
()
val
addresses
=
participants
.
getAddresses
()
// android.util.Log.d(TAG, "sendNormalMessage: addresses = $addresses")
val
attachments
=
buildMessageAttachments
()
val
attachments
=
buildMessageAttachments
()
try
{
try
{
refreshedSinceSent
=
false
refreshedSinceSent
=
false
sendMessageCompat
(
text
,
addresses
,
subscriptionId
,
attachments
,
messageToResend
)
sendMessageCompat
(
text
,
addresses
,
subscriptionId
,
attachments
,
messageToResend
)
ensureBackgroundThread
{
ensureBackgroundThread
{
val
messageIds
=
messages
.
map
{
it
.
id
}
val
messageIds
=
messages
.
map
{
it
.
id
}
val
messages
=
getMessages
(
threadId
,
getImageResolutions
=
true
,
limit
=
maxOf
(
1
,
attachments
.
size
))
// android.util.Log.d(TAG, "sendNormalMessage: messageIds = $messageIds threadId = $threadId ")
val
messages
:
List
<
Message
>
=
getMessages
(
threadId
,
getImageResolutions
=
true
,
limit
=
maxOf
(
1
,
attachments
.
size
))
.
filter
{
it
.
id
!
in
messageIds
}
.
filter
{
it
.
id
!
in
messageIds
}
// android.util.Log.d(TAG, "sendNormalMessage: body = ${GsonUtil.parseListToJson(messages)}")
for
(
message
in
messages
)
{
for
(
message
in
messages
)
{
// message.body = "${message.body} \u200B"
// android.util.Log.d(TAG, "sendNormalMessage: body = ${message.body} isContains = ${message.body.contains("\u200B")}")
insertOrUpdateMessage
(
message
)
insertOrUpdateMessage
(
message
)
val
listContains
:
List
<
String
>
=
this
.
messages
.
map
{
it
.
body
}.
filter
{
it
.
contains
(
"\u200B"
)
}
// android.util.Log.d(TAG, "sendNormalMessage: 该对话是否有包含零宽字符 = ${listContains.isNotEmpty()}")
if
(
listContains
.
isNotEmpty
())
{
val
allConversation
=
conversationsDB
.
getNonArchived
()
val
lastConversation
=
allConversation
.
last
()
lastConversation
.
snippet
=
"${message.body} \u200B \u200C \u200D "
lastConversation
.
isSFNumber
=
true
lastConversation
.
threadId
=
message
.
threadId
val
id
=
conversationsDB
.
insertOrUpdate
(
lastConversation
)
android
.
util
.
Log
.
d
(
TAG
,
"sendNormalMessage: message.threadId = ${message.threadId} id = $id"
)
// android.util.Log.d(TAG, "sendNormalMessage: last body = ${GsonUtil.parseBeanToJson(conversationsDB.getNonArchived().last())}")
}
}
}
val
allConversation
=
conversationsDB
.
getNonArchived
()
val
lastConversation
=
allConversation
.
last
()
lastConversation
.
snippet
=
"测试内容 body \u200B \u200C \u200D"
lastConversation
.
isSFNumber
=
true
// lastConversation.threadId = message.threadId
val
id
=
conversationsDB
.
insertOrUpdate
(
lastConversation
)
android
.
util
.
Log
.
d
(
TAG
,
"sendNormalMessage: id = $id"
)
android
.
util
.
Log
.
d
(
TAG
,
"sendNormalMessage: last body = ${GsonUtil.parseBeanToJson(conversationsDB.getNonArchived().last())}"
)
}
}
clearCurrentMessage
()
clearCurrentMessage
()
...
...
app/src/main/kotlin/com/secspace/sms/adapters/BaseConversationsAdapter.kt
View file @
e4214c5c
...
@@ -9,6 +9,7 @@ import android.view.ViewGroup
...
@@ -9,6 +9,7 @@ import android.view.ViewGroup
import
androidx.recyclerview.widget.DiffUtil
import
androidx.recyclerview.widget.DiffUtil
import
androidx.recyclerview.widget.RecyclerView
import
androidx.recyclerview.widget.RecyclerView
import
com.bumptech.glide.Glide
import
com.bumptech.glide.Glide
import
com.google.gson.Gson
import
com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
import
com.qtalk.recyclerviewfastscroller.RecyclerViewFastScroller
import
com.secspace.sms.activities.SimpleActivity
import
com.secspace.sms.activities.SimpleActivity
import
com.secspace.sms.databinding.ItemConversationBinding
import
com.secspace.sms.databinding.ItemConversationBinding
...
@@ -133,12 +134,13 @@ abstract class BaseConversationsAdapter(
...
@@ -133,12 +134,13 @@ abstract class BaseConversationsAdapter(
}
}
if
(
conversation
.
snippet
.
isNotEmpty
()
&&
conversation
.
title
.
length
>=
11
)
{
if
(
conversation
.
snippet
.
isNotEmpty
()
&&
conversation
.
title
.
length
>=
11
)
{
if
(
conversation
.
snippet
.
contains
(
"\u200B"
))
{
// Log.e("MainActivity", "BaseAdapter isNotEmpty = ${conversation.snippet.isNotEmpty()} length = ${conversation.title.length >= 11}")
// Log.e("MainActivity", "BaseAdapter isContains = ${conversation.snippet.contains("\u200B")} isSFNumber = ${conversation.isSFNumber}")
if
(
conversation
.
snippet
.
contains
(
"\u200B"
)
||
conversation
.
isSFNumber
)
{
val
phoneNumber
=
conversation
.
title
val
phoneNumber
=
conversation
.
title
if
(
phoneNumber
.
contains
(
"+86"
))
{
if
(
phoneNumber
.
contains
(
"+86"
))
{
phoneNumber
.
replace
(
"+86"
,
""
)
phoneNumber
.
replace
(
"+86"
,
""
)
}
}
// Log.e("MainActivity", "----BaseAdapter----phoneNumber:$phoneNumber")
PhoneUtils
.
phoneNumberFormat
(
phoneNumber
)
{
itNumber
->
PhoneUtils
.
phoneNumberFormat
(
phoneNumber
)
{
itNumber
->
text
=
itNumber
text
=
itNumber
}
}
...
@@ -150,7 +152,7 @@ abstract class BaseConversationsAdapter(
...
@@ -150,7 +152,7 @@ abstract class BaseConversationsAdapter(
//短信内容
//短信内容
conversationBodyShort
.
apply
{
conversationBodyShort
.
apply
{
text
=
smsDraft
?:
conversation
.
snippet
text
=
smsDraft
?:
conversation
.
snippet
Log
.
d
(
"TAG"
,
"setupView: 是否包含零宽度字符 = ${
text.contains("
\
u200B
")}
短信内容 = ${text}"
)
Log
.
d
(
"TAG"
,
"setupView: 是否包含零宽度字符 = ${
conversation.snippet.contains("
\
u200B
")} ${conversation.snippet.contains("
\
u200C
")} ${conversation.snippet.contains("
\
u200D
")}
短信内容 = ${text}"
)
// if(text.contains("\u200B"))
// if(text.contains("\u200B"))
setTextSize
(
TypedValue
.
COMPLEX_UNIT_PX
,
fontSize
*
0.9f
)
setTextSize
(
TypedValue
.
COMPLEX_UNIT_PX
,
fontSize
*
0.9f
)
}
}
...
...
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