Commit a91b8262 by zhangchengbo

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

parent 028f112d
...@@ -56,8 +56,8 @@ import com.secspace.sms.extensions.* ...@@ -56,8 +56,8 @@ import com.secspace.sms.extensions.*
import com.secspace.sms.helpers.* import com.secspace.sms.helpers.*
import com.secspace.sms.messaging.* import com.secspace.sms.messaging.*
import com.secspace.sms.models.* import com.secspace.sms.models.*
import com.secspace.sms.util.AES
import com.simplemobiletools.commons.dialogs.ConfirmationDialog import com.simplemobiletools.commons.dialogs.ConfirmationDialog
import com.simplemobiletools.commons.dialogs.FeatureLockedDialog
import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog import com.simplemobiletools.commons.dialogs.PermissionRequiredDialog
import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog
import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.extensions.*
...@@ -65,7 +65,6 @@ import com.simplemobiletools.commons.helpers.* ...@@ -65,7 +65,6 @@ import com.simplemobiletools.commons.helpers.*
import com.simplemobiletools.commons.models.PhoneNumber import com.simplemobiletools.commons.models.PhoneNumber
import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.commons.models.RadioItem
import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.commons.models.SimpleContact
import com.simplemobiletools.commons.util.GsonUtil
import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.commons.views.MyRecyclerView
import org.greenrobot.eventbus.EventBus import org.greenrobot.eventbus.EventBus
import org.greenrobot.eventbus.Subscribe import org.greenrobot.eventbus.Subscribe
...@@ -137,14 +136,9 @@ class ThreadActivity : SimpleActivity() { ...@@ -137,14 +136,9 @@ class ThreadActivity : SimpleActivity() {
} }
threadId = intent.getLongExtra(THREAD_ID, 0L) 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) isRecycleBin = intent.getBooleanExtra(IS_RECYCLE_BIN, false)
wasProtectionHandled = intent.getBooleanExtra(WAS_PROTECTION_HANDLED, 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 = EventBus.getDefault()
bus!!.register(this) bus!!.register(this)
...@@ -250,8 +244,28 @@ class ThreadActivity : SimpleActivity() { ...@@ -250,8 +244,28 @@ class ThreadActivity : SimpleActivity() {
} }
private fun refreshMenuItems() { 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 { binding.threadToolbar.menu.apply {
findItem(R.id.delete).isVisible = threadItems.isNotEmpty() findItem(R.id.delete).isVisible = threadItems.isNotEmpty()
findItem(R.id.restore).isVisible = /*threadItems.isNotEmpty() && isRecycleBin*/ false findItem(R.id.restore).isVisible = /*threadItems.isNotEmpty() && isRecycleBin*/ false
...@@ -259,7 +273,8 @@ class ThreadActivity : SimpleActivity() { ...@@ -259,7 +273,8 @@ class ThreadActivity : SimpleActivity() {
findItem(R.id.unarchive).isVisible = /*threadItems.isNotEmpty() && conversation?.isArchived == true && !isRecycleBin && archiveAvailable*/false 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.rename_conversation).isVisible = /*participants.size > 1 && conversation != null && !isRecycleBin*/ false
findItem(R.id.conversation_details).isVisible = /*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.block_number).isVisible = isNougatPlus() && !isRecycleBin
findItem(R.id.dial_number).isVisible = /*participants.size == 1 && !isSpecialNumber() && !isRecycleBin*/ false findItem(R.id.dial_number).isVisible = /*participants.size == 1 && !isSpecialNumber() && !isRecycleBin*/ false
findItem(R.id.manage_people).isVisible = /*!isSpecialNumber() && !isRecycleBin */false findItem(R.id.manage_people).isVisible = /*!isSpecialNumber() && !isRecycleBin */false
...@@ -278,10 +293,42 @@ class ThreadActivity : SimpleActivity() { ...@@ -278,10 +293,42 @@ class ThreadActivity : SimpleActivity() {
return@setOnMenuItemClickListener true 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) { when (menuItem.itemId) {
R.id.delete -> askConfirmDelete() R.id.delete -> askConfirmDelete()
R.id.block_number -> tryBlocking() R.id.block_number -> {
/* R.id.restore -> askConfirmRestoreAll() 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.archive -> archiveConversation()
R.id.unarchive -> unarchiveConversation() R.id.unarchive -> unarchiveConversation()
R.id.rename_conversation -> renameConversation() R.id.rename_conversation -> renameConversation()
...@@ -427,27 +474,19 @@ class ThreadActivity : SimpleActivity() { ...@@ -427,27 +474,19 @@ class ThreadActivity : SimpleActivity() {
} }
private fun setupThreadTitle() { private fun setupThreadTitle() {
// Log.d(TAG,"--ThreadActivity--setupThreadTitle-- conversation:${Gson().toJson(conversation)} binding.threadToolbar.title = ${binding.threadToolbar.title}") val title = participants.getThreadTitle() ?: ""
Log.d(TAG, "setupThreadTitle: title = $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")
// "$title ${conversation?.phoneNumber}"
title title
} else { } else {
val title = conversation?.title val conversationTitle = conversation?.title
if (!title.isNullOrEmpty()) { Log.d(TAG, "setupThreadTitle: conversationTitle = $conversationTitle ")
binding.threadToolbar.title = title if (!conversationTitle.isNullOrEmpty()) {
binding.threadToolbar.title = conversationTitle
return return
} }
// 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 {
binding.threadToolbar.title =it.replace(" ","")
}*/
// participants.getThreadTitle()
phoneNUmber?.replace(" ", "") phoneNUmber?.replace(" ", "")
} }
} }
...@@ -455,13 +494,11 @@ class ThreadActivity : SimpleActivity() { ...@@ -455,13 +494,11 @@ class ThreadActivity : SimpleActivity() {
private fun getOrCreateThreadAdapter(): ThreadAdapter { private fun getOrCreateThreadAdapter(): ThreadAdapter {
var currAdapter = binding.threadMessagesList.adapter var currAdapter = binding.threadMessagesList.adapter
if (currAdapter == null) { if (currAdapter == null) {
currAdapter = ThreadAdapter( currAdapter = ThreadAdapter(activity = this,
activity = this,
recyclerView = binding.threadMessagesList, recyclerView = binding.threadMessagesList,
itemClick = { handleItemClick(it) }, itemClick = { handleItemClick(it) },
isRecycleBin = isRecycleBin, isRecycleBin = isRecycleBin,
deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) } deleteMessages = { messages, toRecycleBin, fromRecycleBin -> deleteMessages(messages, toRecycleBin, fromRecycleBin) })
)
binding.threadMessagesList.adapter = currAdapter binding.threadMessagesList.adapter = currAdapter
binding.threadMessagesList.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener { binding.threadMessagesList.endlessScrollListener = object : MyRecyclerView.EndlessScrollListener {
...@@ -477,7 +514,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -477,7 +514,7 @@ class ThreadActivity : SimpleActivity() {
private fun setupAdapter() { private fun setupAdapter() {
threadItems = getThreadItems() threadItems = getThreadItems()
Log.d(TAG, "setupAdapter: threadItems = $threadItems") // Log.d(TAG, "setupAdapter: threadItems = $threadItems")
runOnUiThread { runOnUiThread {
refreshMenuItems() refreshMenuItems()
...@@ -487,7 +524,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -487,7 +524,7 @@ class ThreadActivity : SimpleActivity() {
val lastVisiblePosition = layoutManager.findLastVisibleItemPosition() val lastVisiblePosition = layoutManager.findLastVisibleItemPosition()
val shouldScrollToBottom: Boolean = currentList.lastOrNull() != threadItems.lastOrNull() && lastPosition - lastVisiblePosition == 1 val shouldScrollToBottom: Boolean = currentList.lastOrNull() != threadItems.lastOrNull() && lastPosition - lastVisiblePosition == 1
updateMessages(threadItems, if (shouldScrollToBottom) lastPosition else -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() { ...@@ -619,8 +656,7 @@ class ThreadActivity : SimpleActivity() {
loadingOlderMessages = true loadingOlderMessages = true
ensureBackgroundThread { ensureBackgroundThread {
val olderMessages = getMessages(threadId, true, oldestMessageDate) val olderMessages = getMessages(threadId, true, oldestMessageDate).filter { message -> !messages.contains(message) }
.filter { message -> !messages.contains(message) }
messages.addAll(0, olderMessages) messages.addAll(0, olderMessages)
allMessagesFetched = olderMessages.isEmpty() allMessagesFetched = olderMessages.isEmpty()
...@@ -861,8 +897,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -861,8 +897,7 @@ class ThreadActivity : SimpleActivity() {
applyColorFilter(textColor) applyColorFilter(textColor)
setOnClickListener { setOnClickListener {
InvalidNumberDialog( InvalidNumberDialog(
activity = this@ThreadActivity, activity = this@ThreadActivity, text = getString(R.string.invalid_short_code_desc)
text = getString(R.string.invalid_short_code_desc)
) )
} }
if (isOreoPlus()) { if (isOreoPlus()) {
...@@ -946,30 +981,37 @@ class ThreadActivity : SimpleActivity() { ...@@ -946,30 +981,37 @@ class ThreadActivity : SimpleActivity() {
return userPreferredSimIdx ?: senderPreferredSimIdx ?: systemPreferredSimIdx ?: 0 return userPreferredSimIdx ?: senderPreferredSimIdx ?: systemPreferredSimIdx ?: 0
} }
private fun tryBlocking() { private fun tryBlocking(isSFNumber: Boolean, encryptNumber: String) {
// if (isOrWasThankYouInstalled()) {
blockNumber() var numbersString = ""
// } else { val userName = conversation?.userName ?: ""
// FeatureLockedDialog(this) { }
// }
}
private fun blockNumber() { if (userName.isNotEmpty()) {
val numbers = participants.getAddresses() numbersString = userName
val numbersString = TextUtils.join(", ", numbers) } else {
val numbers = participants.getAddresses()
numbersString = TextUtils.join(", ", numbers)
}
val question = String.format(resources.getString(com.simplemobiletools.commons.R.string.block_confirmation), numbersString) 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) { ConfirmationDialog(this, question) {
ensureBackgroundThread { ensureBackgroundThread {
numbers.forEach { // numbers.forEach {
addBlockedNumber(it) // Log.d(TAG, "tryBlocking: phoneNumber = $phoneNumber")
if (isSFNumber) {
addBlockedNumber(encryptNumber)
} else {
addBlockedNumber(conversation?.phoneNumber ?: "")
} }
// }
refreshMessages() refreshMessages()
finish()
} }
} }
} }
private fun askConfirmDelete() { private fun askConfirmDelete() {
val confirmationMessage = R.string.delete_whole_conversation_confirmation val confirmationMessage = R.string.delete_whole_conversation_confirmation
ConfirmationDialog(this, getString(confirmationMessage)) { ConfirmationDialog(this, getString(confirmationMessage)) {
...@@ -982,10 +1024,10 @@ class ThreadActivity : SimpleActivity() { ...@@ -982,10 +1024,10 @@ class ThreadActivity : SimpleActivity() {
if (listMessageData.isNotEmpty()) { if (listMessageData.isNotEmpty()) {
val listContains: List<Message> = listMessageData.filter { msg -> msg.body.contains("\u200B") } val listContains: List<Message> = listMessageData.filter { msg -> msg.body.contains("\u200B") }
var listMsgIdAll: String? = Config.newInstance(this@ThreadActivity).listDeleteMsgIdAllData var listMsgIdAll: String? = Config.newInstance(this@ThreadActivity).listDeleteMsgIdAllData
android.util.Log.d(TAG, "ThreadActivity askConfirmDelete: 获取云备份 记录的数据集合 = $listMsgIdAll") Log.d(TAG, "ThreadActivity askConfirmDelete: 获取云备份 记录的数据集合 = $listMsgIdAll")
if(listMsgIdAll.isNullOrEmpty()){ if (listMsgIdAll.isNullOrEmpty()) {
Config.newInstance(this@ThreadActivity).listDeleteMsgIdAllData = "${it.title}," Config.newInstance(this@ThreadActivity).listDeleteMsgIdAllData = "${it.title},"
}else { } else {
val listMsgIdAllResult: List<String> = listMsgIdAll.split(",") val listMsgIdAllResult: List<String> = listMsgIdAll.split(",")
if (listContains.isNotEmpty() && !listMsgIdAllResult.contains(it.title) && !it.title.contains("*")) { if (listContains.isNotEmpty() && !listMsgIdAllResult.contains(it.title) && !it.title.contains("*")) {
listMsgIdAll += "${it.title}," listMsgIdAll += "${it.title},"
...@@ -1272,25 +1314,16 @@ class ThreadActivity : SimpleActivity() { ...@@ -1272,25 +1314,16 @@ class ThreadActivity : SimpleActivity() {
var adapter = getAttachmentsAdapter() var adapter = getAttachmentsAdapter()
if (adapter == null) { if (adapter == null) {
adapter = AttachmentsAdapter( adapter = AttachmentsAdapter(activity = this, recyclerView = binding.messageHolder.threadAttachmentsRecyclerview, onAttachmentsRemoved = {
activity = this, binding.messageHolder.threadAttachmentsRecyclerview.beGone()
recyclerView = binding.messageHolder.threadAttachmentsRecyclerview, checkSendMessageAvailability()
onAttachmentsRemoved = { }, onReady = { checkSendMessageAvailability() })
binding.messageHolder.threadAttachmentsRecyclerview.beGone()
checkSendMessageAvailability()
},
onReady = { checkSendMessageAvailability() }
)
binding.messageHolder.threadAttachmentsRecyclerview.adapter = adapter binding.messageHolder.threadAttachmentsRecyclerview.adapter = adapter
} }
binding.messageHolder.threadAttachmentsRecyclerview.beVisible() binding.messageHolder.threadAttachmentsRecyclerview.beVisible()
val attachment = AttachmentSelection( val attachment = AttachmentSelection(
id = id, id = id, uri = uri, mimetype = mimeType, filename = getFilenameFromUri(uri), isPending = isImage && !isGif
uri = uri,
mimetype = mimeType,
filename = getFilenameFromUri(uri),
isPending = isImage && !isGif
) )
adapter.addAttachment(attachment) adapter.addAttachment(attachment)
checkSendMessageAvailability() checkSendMessageAvailability()
...@@ -1354,8 +1387,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -1354,8 +1387,7 @@ class ThreadActivity : SimpleActivity() {
private fun sendScheduledMessage(text: String, subscriptionId: Int) { private fun sendScheduledMessage(text: String, subscriptionId: Int) {
if (scheduledDateTime.millis < System.currentTimeMillis() + 1000L) { if (scheduledDateTime.millis < System.currentTimeMillis() + 1000L) {
toast( toast(
R R.string.must_pick_time_in_the_future
.string.must_pick_time_in_the_future
) )
launchScheduleSendDialog(scheduledDateTime) launchScheduleSendDialog(scheduledDateTime)
return return
...@@ -1398,8 +1430,8 @@ class ThreadActivity : SimpleActivity() { ...@@ -1398,8 +1430,8 @@ class ThreadActivity : SimpleActivity() {
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: List<Message> = getMessages(threadId, getImageResolutions = true, limit = maxOf(1, attachments.size)) val messages: List<Message> =
.filter { it.id !in messageIds } getMessages(threadId, getImageResolutions = true, limit = maxOf(1, attachments.size)).filter { it.id !in messageIds }
for (message in messages) { for (message in messages) {
insertOrUpdateMessage(message) insertOrUpdateMessage(message)
} }
...@@ -1563,8 +1595,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -1563,8 +1595,7 @@ class ThreadActivity : SimpleActivity() {
} }
messages = newMessages.apply { messages = newMessages.apply {
val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId) val scheduledMessages = messagesDB.getScheduledThreadMessages(threadId).filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() }
.filterNot { it.isScheduled && it.millis() < System.currentTimeMillis() }
addAll(scheduledMessages) addAll(scheduledMessages)
if (config.useRecycleBin) { if (config.useRecycleBin) {
val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet() val recycledMessages = messagesDB.getThreadMessagesFromRecycleBin(threadId).toSet()
...@@ -1732,9 +1763,8 @@ class ThreadActivity : SimpleActivity() { ...@@ -1732,9 +1763,8 @@ class ThreadActivity : SimpleActivity() {
) )
} }
private fun buildMessageAttachments(messageId: Long = -1L) = getAttachmentSelections() private fun buildMessageAttachments(messageId: Long = -1L) =
.map { Attachment(null, messageId, it.uri.toString(), it.mimetype, 0, 0, it.filename) } getAttachmentSelections().map { Attachment(null, messageId, it.uri.toString(), it.mimetype, 0, 0, it.filename) }.toArrayList()
.toArrayList()
private fun setupAttachmentPickerView() = binding.messageHolder.attachmentPicker.apply { private fun setupAttachmentPickerView() = binding.messageHolder.attachmentPicker.apply {
val buttonColors = arrayOf( val buttonColors = arrayOf(
...@@ -1748,14 +1778,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -1748,14 +1778,7 @@ class ThreadActivity : SimpleActivity() {
com.simplemobiletools.commons.R.color.md_blue_500 com.simplemobiletools.commons.R.color.md_blue_500
).map { ResourcesCompat.getColor(resources, it, theme) } ).map { ResourcesCompat.getColor(resources, it, theme) }
arrayOf( arrayOf(
choosePhotoIcon, choosePhotoIcon, chooseVideoIcon, takePhotoIcon, recordVideoIcon, recordAudioIcon, pickFileIcon, pickContactIcon, scheduleMessageIcon
chooseVideoIcon,
takePhotoIcon,
recordVideoIcon,
recordAudioIcon,
pickFileIcon,
pickContactIcon,
scheduleMessageIcon
).forEachIndexed { index, icon -> ).forEachIndexed { index, icon ->
val iconColor = buttonColors[index] val iconColor = buttonColors[index]
icon.background.applyColorFilter(iconColor) icon.background.applyColorFilter(iconColor)
...@@ -1764,14 +1787,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -1764,14 +1787,7 @@ class ThreadActivity : SimpleActivity() {
val textColor = getProperTextColor() val textColor = getProperTextColor()
arrayOf( arrayOf(
choosePhotoText, choosePhotoText, chooseVideoText, takePhotoText, recordVideoText, recordAudioText, pickFileText, pickContactText, scheduleMessageText
chooseVideoText,
takePhotoText,
recordVideoText,
recordAudioText,
pickFileText,
pickContactText,
scheduleMessageText
).forEach { it.setTextColor(textColor) } ).forEach { it.setTextColor(textColor) }
choosePhoto.setOnClickListener { choosePhoto.setOnClickListener {
...@@ -1828,11 +1844,7 @@ class ThreadActivity : SimpleActivity() { ...@@ -1828,11 +1844,7 @@ class ThreadActivity : SimpleActivity() {
} }
private fun animateAttachmentButton(rotation: Float) { private fun animateAttachmentButton(rotation: Float) {
binding.messageHolder.threadAddAttachment.animate() binding.messageHolder.threadAddAttachment.animate().rotation(rotation).setDuration(500L).setInterpolator(OvershootInterpolator()).start()
.rotation(rotation)
.setDuration(500L)
.setInterpolator(OvershootInterpolator())
.start()
} }
private fun setupKeyboardListener() { private fun setupKeyboardListener() {
......
...@@ -134,9 +134,23 @@ ...@@ -134,9 +134,23 @@
<string name="faq_3_title">Does the app support scheduled messages?</string> <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="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 Haven't found some strings? There's more at
https://github.com/SimpleMobileTools/Simple-Commons/tree/master/commons/src/main/res 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