Commit a91b8262 by zhangchengbo

fix:加入/移出[黑名单]功能

parent 028f112d
......@@ -56,8 +56,8 @@ import com.secspace.sms.extensions.*
import com.secspace.sms.helpers.*
import com.secspace.sms.messaging.*
import com.secspace.sms.models.*
import com.secspace.sms.util.AES
import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FeatureLockedDialog
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.*
......@@ -65,7 +65,6 @@ import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.PhoneNumber
import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.models.SimpleContact
import com.simplemobiletools.commons.util.GsonUtil
import com.simplemobiletools.commons.views.MyRecyclerView
import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe
......@@ -137,14 +136,9 @@ class ThreadActivity : SimpleActivity() {
}
threadId = intent.getLongExtra(THREAD_ID, 0L)
/* intent.getStringExtra(THREAD_TITLE)?.let {
binding.threadToolbar.title = it
android.util.Log.d(TAG, " OnCreate title = $it")
}*/
isRecycleBin = intent.getBooleanExtra(IS_RECYCLE_BIN, false)
wasProtectionHandled = intent.getBooleanExtra(WAS_PROTECTION_HANDLED, false)
// Log.d(TAG,"OnCreate threadId:$threadId THREAD_TITLE:${intent.getStringExtra(THREAD_TITLE)} isRecycleBin:$isRecycleBin wasProtectionHandled:$wasProtectionHandled ")
bus = EventBus.getDefault()
bus!!.register(this)
......@@ -250,8 +244,28 @@ class ThreadActivity : SimpleActivity() {
}
private fun refreshMenuItems() {
// val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value
// val archiveAvailable = config.isArchiveAvailable
val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value
Log.d(TAG, "refreshMenuItems: firstPhoneNumber = $firstPhoneNumber")
val blockedNumbers = getBlockedNumbers().map { it.number }
Log.d(TAG, "refreshMenuItems: blockedNumbers = $blockedNumbers ")
var encryptNumber = ""
var isContainsNumber = false
val isSFNumber = conversation?.isSFNumber ?: false
Log.d(TAG, "refreshMenuItems: isSFNumber =$isSFNumber ")
if (isSFNumber) {
encryptNumber = AES.encrypt(firstPhoneNumber)
Log.d(TAG, "refreshMenuItems: encryptNumber = $encryptNumber ")
isContainsNumber = blockedNumbers.contains(encryptNumber)
} else {
isContainsNumber = blockedNumbers.contains(firstPhoneNumber)
}
Log.d(TAG, "refreshMenuItems: isContainsNumber = $isContainsNumber ")
Log.d(TAG, "refreshMenuItems: 获取手机号码 = ${Gson().toJson(conversation)}")
binding.threadToolbar.menu.apply {
findItem(R.id.delete).isVisible = threadItems.isNotEmpty()
findItem(R.id.restore).isVisible = /*threadItems.isNotEmpty() && isRecycleBin*/ false
......@@ -259,7 +273,8 @@ class ThreadActivity : SimpleActivity() {
findItem(R.id.unarchive).isVisible = /*threadItems.isNotEmpty() && conversation?.isArchived == true && !isRecycleBin && archiveAvailable*/false
findItem(R.id.rename_conversation).isVisible = /*participants.size > 1 && conversation != null && !isRecycleBin*/ false
findItem(R.id.conversation_details).isVisible = /*conversation != null && !isRecycleBin*/ false
findItem(R.id.block_number).title = addLockedLabelIfNeeded(com.simplemobiletools.commons.R.string.block_number)
findItem(R.id.block_number).title =
if (blockedNumbers.isNotEmpty() && isContainsNumber) addLockedLabelIfNeeded(R.string.remove_block_number) else addLockedLabelIfNeeded(R.string.join_block_number)
findItem(R.id.block_number).isVisible = isNougatPlus() && !isRecycleBin
findItem(R.id.dial_number).isVisible = /*participants.size == 1 && !isSpecialNumber() && !isRecycleBin*/ false
findItem(R.id.manage_people).isVisible = /*!isSpecialNumber() && !isRecycleBin */false
......@@ -278,10 +293,42 @@ class ThreadActivity : SimpleActivity() {
return@setOnMenuItemClickListener true
}
val firstPhoneNumber = participants.firstOrNull()?.phoneNumbers?.firstOrNull()?.value
Log.d(TAG, "setupOptionsMenu: firstPhoneNumber = $firstPhoneNumber")
val blockedNumbers = getBlockedNumbers().map { it.number }
Log.d(TAG, "setupOptionsMenu: blockedNumbers = $blockedNumbers ")
var encryptNumber = ""
var isContainsNumber = false
val isSFNumber = conversation?.isSFNumber ?: false
Log.d(TAG, "setupOptionsMenu: isSFNumber =$isSFNumber ")
if (isSFNumber) {
encryptNumber = AES.encrypt(firstPhoneNumber)
Log.d(TAG, "setupOptionsMenu: encryptNumber = $encryptNumber ")
isContainsNumber = blockedNumbers.contains(encryptNumber)
} else {
isContainsNumber = blockedNumbers.contains(firstPhoneNumber)
}
Log.d(TAG, "setupOptionsMenu: isContainsNumber = $isContainsNumber ")
Log.d(TAG, "setupOptionsMenu: 获取手机号码 = ${Gson().toJson(conversation)}")
when (menuItem.itemId) {
R.id.delete -> askConfirmDelete()
R.id.block_number -> tryBlocking()
/* R.id.restore -> askConfirmRestoreAll()
R.id.block_number -> {
if (blockedNumbers.isNotEmpty() && isContainsNumber) {
if (isSFNumber) {
deleteBlockedNumber(encryptNumber)
} else {
if (firstPhoneNumber != null) {
deleteBlockedNumber(firstPhoneNumber)
}
}
} else {
tryBlocking(isSFNumber, encryptNumber)
}
refreshMenuItems()//不刷新 黑名单的状态不正确
}/* R.id.restore -> askConfirmRestoreAll()
R.id.archive -> archiveConversation()
R.id.unarchive -> unarchiveConversation()
R.id.rename_conversation -> renameConversation()
......@@ -427,27 +474,19 @@ class ThreadActivity : SimpleActivity() {
}
private fun setupThreadTitle() {
// Log.d(TAG,"--ThreadActivity--setupThreadTitle-- conversation:${Gson().toJson(conversation)} binding.threadToolbar.title = ${binding.threadToolbar.title}")
val title = intent.getStringExtra(THREAD_TITLE) ?: ""
val title = participants.getThreadTitle() ?: ""
Log.d(TAG, "setupThreadTitle: title = $title ")
binding.threadToolbar.title = if (!title.isNullOrEmpty()) {
// Log.d(TAG,"--ThreadActivity--setupThreadTitle---1 THREAD_NUMBER:$title")
// "$title ${conversation?.phoneNumber}"
title
} else {
val title = conversation?.title
if (!title.isNullOrEmpty()) {
binding.threadToolbar.title = title
val conversationTitle = conversation?.title
Log.d(TAG, "setupThreadTitle: conversationTitle = $conversationTitle ")
if (!conversationTitle.isNullOrEmpty()) {
binding.threadToolbar.title = conversationTitle
return
}
// Log.d(TAG,"--ThreadActivity--setupThreadTitle---2 THREAD_NUMBER:${intent.getStringExtra(THREAD_NUMBER)} title = $title")
val phoneNUmber = intent.getStringExtra(THREAD_NUMBER)
/*phoneNUmber?.let {
binding.threadToolbar.title =it.replace(" ","")
}*/
// participants.getThreadTitle()
phoneNUmber?.replace(" ", "")
}
}
......@@ -455,13 +494,11 @@ class ThreadActivity : SimpleActivity() {
private fun getOrCreateThreadAdapter(): ThreadAdapter {
var currAdapter = binding.threadMessagesList.adapter
if (currAdapter == null) {
currAdapter = ThreadAdapter(
activity = this,
currAdapter = ThreadAdapter(activity = this,
recyclerView = binding.threadMessagesList,
itemClick = { handleItemClick(it) },
isRecycleBin = isRecycleBin,
deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) }
)
deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) })
binding.threadMessagesList.adapter = currAdapter
binding.threadMessagesList.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
......@@ -477,7 +514,7 @@ class ThreadActivity : SimpleActivity() {
private fun setupAdapter() {
threadItems = getThreadItems()
Log.d(TAG, "setupAdapter: threadItems = $threadItems")
// Log.d(TAG, "setupAdapter: threadItems = $threadItems")
runOnUiThread {
refreshMenuItems()
......@@ -487,7 +524,7 @@ class ThreadActivity : SimpleActivity() {
val lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
val shouldScrollToBottom: Boolean = currentList.lastOrNull() != threadItems.lastOrNull() && lastPosition - lastVisiblePosition == 1
updateMessages(threadItems, if (shouldScrollToBottom) lastPosition else -1)
Log.d(TAG, "setupAdapter: threadItems = $threadItems")
// Log.d(TAG, "setupAdapter: threadItems = $threadItems")
}
}
......@@ -619,8 +656,7 @@ class ThreadActivity : SimpleActivity() {
loadingOlderMessages = true
ensureBackgroundThread {
val olderMessages = getMessages(threadId, true, oldestMessageDate)
.filter { message -> !messages.contains(message) }
val olderMessages = getMessages(threadId, true, oldestMessageDate).filter { message -> !messages.contains(message) }
messages.addAll(0, olderMessages)
allMessagesFetched = olderMessages.isEmpty()
......@@ -861,8 +897,7 @@ class ThreadActivity : SimpleActivity() {
applyColorFilter(textColor)
setOnClickListener {
InvalidNumberDialog(
activity = this@ThreadActivity,
text = getString(R.string.invalid_short_code_desc)
activity = this@ThreadActivity, text = getString(R.string.invalid_short_code_desc)
)
}
if (isOreoPlus()) {
......@@ -946,30 +981,37 @@ class ThreadActivity : SimpleActivity() {
return userPreferredSimIdx ?: senderPreferredSimIdx ?: systemPreferredSimIdx ?: 0
}
private fun tryBlocking() {
// if (isOrWasThankYouInstalled()) {
blockNumber()
// } else {
// FeatureLockedDialog(this) { }
// }
}
private fun tryBlocking(isSFNumber: Boolean, encryptNumber: String) {
var numbersString = ""
val userName = conversation?.userName ?: ""
private fun blockNumber() {
val numbers = participants.getAddresses()
val numbersString = TextUtils.join(", ", numbers)
if (userName.isNotEmpty()) {
numbersString = userName
} else {
val numbers = participants.getAddresses()
numbersString = TextUtils.join(", ", numbers)
}
val question = String.format(resources.getString(com.simplemobiletools.commons.R.string.block_confirmation), numbersString)
// val numbers = participants.getAddresses()
Log.d(TAG, "tryBlocking: question = $question")
ConfirmationDialog(this, question) {
ensureBackgroundThread {
numbers.forEach {
addBlockedNumber(it)
// numbers.forEach {
// Log.d(TAG, "tryBlocking: phoneNumber = $phoneNumber")
if (isSFNumber) {
addBlockedNumber(encryptNumber)
} else {
addBlockedNumber(conversation?.phoneNumber ?: "")
}
// }
refreshMessages()
finish()
}
}
}
private fun askConfirmDelete() {
val confirmationMessage = R.string.delete_whole_conversation_confirmation
ConfirmationDialog(this, getString(confirmationMessage)) {
......@@ -982,10 +1024,10 @@ class ThreadActivity : SimpleActivity() {
if (listMessageData.isNotEmpty()) {
val listContains: List<Message> = listMessageData.filter { msg -> msg.body.contains("\u200B") }
var listMsgIdAll: String? = Config.newInstance(this@ThreadActivity).listDeleteMsgIdAllData
android.util.Log.d(TAG, "ThreadActivity askConfirmDelete: 获取云备份 记录的数据集合 = $listMsgIdAll")
if(listMsgIdAll.isNullOrEmpty()){
Log.d(TAG, "ThreadActivity askConfirmDelete: 获取云备份 记录的数据集合 = $listMsgIdAll")
if (listMsgIdAll.isNullOrEmpty()) {
Config.newInstance(this@ThreadActivity).listDeleteMsgIdAllData = "${it.title},"
}else {
} else {
val listMsgIdAllResult: List<String> = listMsgIdAll.split(",")
if (listContains.isNotEmpty() && !listMsgIdAllResult.contains(it.title) && !it.title.contains("*")) {
listMsgIdAll += "${it.title},"
......@@ -1272,25 +1314,16 @@ class ThreadActivity : SimpleActivity() {
var adapter = getAttachmentsAdapter()
if (adapter == null) {
adapter = AttachmentsAdapter(
activity = this,
recyclerView = binding.messageHolder.threadAttachmentsRecyclerview,
onAttachmentsRemoved = {
binding.messageHolder.threadAttachmentsRecyclerview.beGone()
checkSendMessageAvailability()
},
onReady = { checkSendMessageAvailability() }
)
adapter = AttachmentsAdapter(activity = this, recyclerView = binding.messageHolder.threadAttachmentsRecyclerview, onAttachmentsRemoved = {
binding.messageHolder.threadAttachmentsRecyclerview.beGone()
checkSendMessageAvailability()
}, onReady = { checkSendMessageAvailability() })
binding.messageHolder.threadAttachmentsRecyclerview.adapter = adapter
}
binding.messageHolder.threadAttachmentsRecyclerview.beVisible()
val attachment = AttachmentSelection(
id = id,
uri = uri,
mimetype = mimeType,
filename = getFilenameFromUri(uri),
isPending = isImage && !isGif
id = id, uri = uri, mimetype = mimeType, filename = getFilenameFromUri(uri), isPending = isImage && !isGif
)
adapter.addAttachment(attachment)
checkSendMessageAvailability()
......@@ -1354,8 +1387,7 @@ class ThreadActivity : SimpleActivity() {
private fun sendScheduledMessage(text: String, subscriptionId: Int) {
if (scheduledDateTime.millis < System.currentTimeMillis() + 1000L) {
toast(
R
.string.must_pick_time_in_the_future
R.string.must_pick_time_in_the_future
)
launchScheduleSendDialog(scheduledDateTime)
return
......@@ -1398,8 +1430,8 @@ class ThreadActivity : SimpleActivity() {
sendMessageCompat(text, addresses, subscriptionId, attachments, messageToResend)
ensureBackgroundThread {
val messageIds = messages.map { it.id }
val messages: List<Message> = getMessages(threadId, getImageResolutions = true, limit = maxOf(1, attachments.size))
.filter { it.id !in messageIds }
val messages: List<Message> =
getMessages(threadId, getImageResolutions = true, limit = maxOf(1, attachments.size)).filter { it.id !in messageIds }
for (message in messages) {
insertOrUpdateMessage(message)
}
......@@ -1563,8 +1595,7 @@ class ThreadActivity : SimpleActivity() {
}
messages = newMessages.apply {
val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId)
.filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() }
val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId).filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() }
addAll(scheduledMessages)
if (config.useRecycleBin) {
val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet()
......@@ -1732,9 +1763,8 @@ class ThreadActivity : SimpleActivity() {
)
}
private fun buildMessageAttachments(messageId: Long = -1L) = getAttachmentSelections()
.map { Attachment(null, messageId, it.uri.toString(), it.mimetype, 0, 0, it.filename) }
.toArrayList()
private fun buildMessageAttachments(messageId: Long = -1L) =
getAttachmentSelections().map { Attachment(null, messageId, it.uri.toString(), it.mimetype, 0, 0, it.filename) }.toArrayList()
private fun setupAttachmentPickerView() = binding.messageHolder.attachmentPicker.apply {
val buttonColors = arrayOf(
......@@ -1748,14 +1778,7 @@ class ThreadActivity : SimpleActivity() {
com.simplemobiletools.commons.R.color.md_blue_500
).map { ResourcesCompat.getColor(resources, it, theme) }
arrayOf(
choosePhotoIcon,
chooseVideoIcon,
takePhotoIcon,
recordVideoIcon,
recordAudioIcon,
pickFileIcon,
pickContactIcon,
scheduleMessageIcon
choosePhotoIcon, chooseVideoIcon, takePhotoIcon, recordVideoIcon, recordAudioIcon, pickFileIcon, pickContactIcon, scheduleMessageIcon
).forEachIndexed { index, icon ->
val iconColor = buttonColors[index]
icon.background.applyColorFilter(iconColor)
......@@ -1764,14 +1787,7 @@ class ThreadActivity : SimpleActivity() {
val textColor = getProperTextColor()
arrayOf(
choosePhotoText,
chooseVideoText,
takePhotoText,
recordVideoText,
recordAudioText,
pickFileText,
pickContactText,
scheduleMessageText
choosePhotoText, chooseVideoText, takePhotoText, recordVideoText, recordAudioText, pickFileText, pickContactText, scheduleMessageText
).forEach { it.setTextColor(textColor) }
choosePhoto.setOnClickListener {
......@@ -1828,11 +1844,7 @@ class ThreadActivity : SimpleActivity() {
}
private fun animateAttachmentButton(rotation: Float) {
binding.messageHolder.threadAddAttachment.animate()
.rotation(rotation)
.setDuration(500L)
.setInterpolator(OvershootInterpolator())
.start()
binding.messageHolder.threadAddAttachment.animate().rotation(rotation).setDuration(500L).setInterpolator(OvershootInterpolator()).start()
}
private fun setupKeyboardListener() {
......
......@@ -134,9 +134,23 @@
<string name="faq_3_title">Does the app support scheduled messages?</string>
<string name="faq_3_text">Yes, you can schedule messages to be sent in the future by long pressing the Send button and picking the desired date and time.</string>
<string name="new_tips_notif">您收到一条新的消息!</string>
<string name="new_tips_notif">You have received a new message!</string>
<string name="shortcuts_back_short_label">Log export</string>
<string name="add_succeed_tips">add_succeed</string>
<string name="take_photo">拍照</string>
<string name="choose_photo">选择照片</string>
<string name="choose_video">选择视频</string>
<string name="choose_contact">选择联系人</string>
<string name="choose_file">选择文件</string>
<string name="record_audio">录音</string>
<string name="record_video">录像</string>
<string name="join_block_number">加入黑名单</string>
<string name="remove_block_number">移除黑名单</string>
<string name="shortcuts_back_short_label">日志导出</string>
<!--
Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment