Format code

This commit is contained in:
Naveen Singh 2024-12-25 21:35:29 +05:30
parent 025a3a2729
commit 5683087ca0
No known key found for this signature in database
GPG key ID: AF5D43C216778C0B
4 changed files with 115 additions and 54 deletions

View file

@ -9,8 +9,24 @@ import androidx.activity.result.contract.ActivityResultContracts
import org.fossify.commons.activities.BaseSimpleActivity import org.fossify.commons.activities.BaseSimpleActivity
import org.fossify.commons.dialogs.ExportBlockedNumbersDialog import org.fossify.commons.dialogs.ExportBlockedNumbersDialog
import org.fossify.commons.dialogs.FilePickerDialog import org.fossify.commons.dialogs.FilePickerDialog
import org.fossify.commons.extensions.* import org.fossify.commons.extensions.beVisibleIf
import org.fossify.commons.helpers.* import org.fossify.commons.extensions.getFileOutputStream
import org.fossify.commons.extensions.getProperPrimaryColor
import org.fossify.commons.extensions.getTempFile
import org.fossify.commons.extensions.showErrorToast
import org.fossify.commons.extensions.toFileDirItem
import org.fossify.commons.extensions.toast
import org.fossify.commons.extensions.underlineText
import org.fossify.commons.extensions.updateTextColors
import org.fossify.commons.extensions.viewBinding
import org.fossify.commons.helpers.APP_ICON_IDS
import org.fossify.commons.helpers.APP_LAUNCHER_NAME
import org.fossify.commons.helpers.ExportResult
import org.fossify.commons.helpers.NavigationIcon
import org.fossify.commons.helpers.PERMISSION_READ_STORAGE
import org.fossify.commons.helpers.PERMISSION_WRITE_STORAGE
import org.fossify.commons.helpers.ensureBackgroundThread
import org.fossify.commons.helpers.isQPlus
import org.fossify.commons.interfaces.RefreshRecyclerViewListener import org.fossify.commons.interfaces.RefreshRecyclerViewListener
import org.fossify.messages.R import org.fossify.messages.R
import org.fossify.messages.databinding.ActivityManageBlockedKeywordsBinding import org.fossify.messages.databinding.ActivityManageBlockedKeywordsBinding
@ -45,7 +61,10 @@ class ManageBlockedKeywordsActivity : BaseSimpleActivity(), RefreshRecyclerViewL
useTransparentNavigation = true, useTransparentNavigation = true,
useTopSearchMenu = false useTopSearchMenu = false
) )
setupMaterialScrollListener(scrollingView = binding.manageBlockedKeywordsList, toolbar = binding.blockKeywordsToolbar) setupMaterialScrollListener(
scrollingView = binding.manageBlockedKeywordsList,
toolbar = binding.blockKeywordsToolbar
)
updateTextColors(binding.manageBlockedKeywordsWrapper) updateTextColors(binding.manageBlockedKeywordsWrapper)
binding.manageBlockedKeywordsPlaceholder2.apply { binding.manageBlockedKeywordsPlaceholder2.apply {
@ -85,27 +104,28 @@ class ManageBlockedKeywordsActivity : BaseSimpleActivity(), RefreshRecyclerViewL
} }
} }
private val exportActivityResultLauncher = registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { uri -> private val exportActivityResultLauncher =
try { registerForActivityResult(ActivityResultContracts.CreateDocument("text/plain")) { uri ->
val outputStream = uri?.let { contentResolver.openOutputStream(it) } try {
if (outputStream != null) { val outputStream = uri?.let { contentResolver.openOutputStream(it) }
exportBlockedKeywordsTo(outputStream) if (outputStream != null) {
exportBlockedKeywordsTo(outputStream)
}
} catch (e: Exception) {
showErrorToast(e)
} }
} catch (e: Exception) {
showErrorToast(e)
} }
}
private val importActivityResultLauncher = registerForActivityResult(ActivityResultContracts.GetContent()) { uri -> private val importActivityResultLauncher =
try { registerForActivityResult(ActivityResultContracts.GetContent()) { uri ->
if (uri != null) { try {
tryImportBlockedKeywordsFromFile(uri) if (uri != null) {
tryImportBlockedKeywordsFromFile(uri)
}
} catch (e: Exception) {
showErrorToast(e)
} }
} catch (e: Exception) {
showErrorToast(e)
} }
}
private fun tryImportBlockedKeywords() { private fun tryImportBlockedKeywords() {
if (isQPlus()) { if (isQPlus()) {
@ -202,7 +222,10 @@ class ManageBlockedKeywordsActivity : BaseSimpleActivity(), RefreshRecyclerViewL
try { try {
exportActivityResultLauncher.launch(file.name) exportActivityResultLauncher.launch(file.name)
} catch (e: ActivityNotFoundException) { } catch (e: ActivityNotFoundException) {
toast(org.fossify.commons.R.string.system_service_disabled, Toast.LENGTH_LONG) toast(
org.fossify.commons.R.string.system_service_disabled,
Toast.LENGTH_LONG
)
} catch (e: Exception) { } catch (e: Exception) {
showErrorToast(e) showErrorToast(e)
} }
@ -211,7 +234,11 @@ class ManageBlockedKeywordsActivity : BaseSimpleActivity(), RefreshRecyclerViewL
} else { } else {
handlePermission(PERMISSION_WRITE_STORAGE) { isAllowed -> handlePermission(PERMISSION_WRITE_STORAGE) { isAllowed ->
if (isAllowed) { if (isAllowed) {
ExportBlockedNumbersDialog(this, config.lastBlockedKeywordExportPath, false) { file -> ExportBlockedNumbersDialog(
this,
config.lastBlockedKeywordExportPath,
false
) { file ->
getFileOutputStream(file.toFileDirItem(this), true) { out -> getFileOutputStream(file.toFileDirItem(this), true) { out ->
exportBlockedKeywordsTo(out) exportBlockedKeywordsTo(out)
} }
@ -229,7 +256,12 @@ class ManageBlockedKeywordsActivity : BaseSimpleActivity(), RefreshRecyclerViewL
ensureBackgroundThread { ensureBackgroundThread {
val blockedKeywords = config.blockedKeywords.sorted().toArrayList() val blockedKeywords = config.blockedKeywords.sorted().toArrayList()
runOnUiThread { runOnUiThread {
ManageBlockedKeywordsAdapter(this, blockedKeywords, this, binding.manageBlockedKeywordsList) { ManageBlockedKeywordsAdapter(
activity = this,
blockedKeywords = blockedKeywords,
listener = this,
recyclerView = binding.manageBlockedKeywordsList
) {
addOrEditBlockedKeyword(it as String) addOrEditBlockedKeyword(it as String)
}.apply { }.apply {
binding.manageBlockedKeywordsList.adapter = this binding.manageBlockedKeywordsList.adapter = this
@ -241,7 +273,7 @@ class ManageBlockedKeywordsActivity : BaseSimpleActivity(), RefreshRecyclerViewL
} }
} }
fun addOrEditBlockedKeyword(keyword: String? = null) { private fun addOrEditBlockedKeyword(keyword: String? = null) {
AddBlockedKeywordDialog(this, keyword) { AddBlockedKeywordDialog(this, keyword) {
updateBlockedKeywords() updateBlockedKeywords()
} }

View file

@ -3,7 +3,17 @@ package org.fossify.messages.dialogs
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import org.fossify.commons.activities.BaseSimpleActivity import org.fossify.commons.activities.BaseSimpleActivity
import org.fossify.commons.dialogs.FilePickerDialog import org.fossify.commons.dialogs.FilePickerDialog
import org.fossify.commons.extensions.* import org.fossify.commons.extensions.beGone
import org.fossify.commons.extensions.getAlertDialogBuilder
import org.fossify.commons.extensions.getCurrentFormattedDateTime
import org.fossify.commons.extensions.getParentPath
import org.fossify.commons.extensions.humanizePath
import org.fossify.commons.extensions.internalStoragePath
import org.fossify.commons.extensions.isAValidFilename
import org.fossify.commons.extensions.setupDialogStuff
import org.fossify.commons.extensions.showKeyboard
import org.fossify.commons.extensions.toast
import org.fossify.commons.extensions.value
import org.fossify.commons.helpers.ensureBackgroundThread import org.fossify.commons.helpers.ensureBackgroundThread
import org.fossify.messages.R import org.fossify.messages.R
import org.fossify.messages.databinding.DialogExportBlockedKeywordsBinding import org.fossify.messages.databinding.DialogExportBlockedKeywordsBinding
@ -21,42 +31,49 @@ class ExportBlockedKeywordsDialog(
private val config = activity.config private val config = activity.config
init { init {
val view = DialogExportBlockedKeywordsBinding.inflate(activity.layoutInflater, null, false).apply { val view =
exportBlockedKeywordsFolder.text = activity.humanizePath(realPath) DialogExportBlockedKeywordsBinding.inflate(activity.layoutInflater, null, false).apply {
exportBlockedKeywordsFilename.setText("${activity.getString(R.string.blocked_keywords)}_${activity.getCurrentFormattedDateTime()}") exportBlockedKeywordsFolder.text = activity.humanizePath(realPath)
exportBlockedKeywordsFilename.setText("${activity.getString(R.string.blocked_keywords)}_${activity.getCurrentFormattedDateTime()}")
if (hidePath) { if (hidePath) {
exportBlockedKeywordsFolderLabel.beGone() exportBlockedKeywordsFolderLabel.beGone()
exportBlockedKeywordsFolder.beGone() exportBlockedKeywordsFolder.beGone()
} else { } else {
exportBlockedKeywordsFolder.setOnClickListener { exportBlockedKeywordsFolder.setOnClickListener {
FilePickerDialog(activity, realPath, false, showFAB = true) { FilePickerDialog(activity, realPath, false, showFAB = true) {
exportBlockedKeywordsFolder.text = activity.humanizePath(it) exportBlockedKeywordsFolder.text = activity.humanizePath(it)
realPath = it realPath = it
}
} }
} }
} }
}
activity.getAlertDialogBuilder() activity.getAlertDialogBuilder()
.setPositiveButton(org.fossify.commons.R.string.ok, null) .setPositiveButton(org.fossify.commons.R.string.ok, null)
.setNegativeButton(org.fossify.commons.R.string.cancel, null) .setNegativeButton(org.fossify.commons.R.string.cancel, null)
.apply { .apply {
activity.setupDialogStuff(view.root, this, R.string.export_blocked_keywords) { alertDialog -> activity.setupDialogStuff(
view = view.root,
dialog = this,
titleId = R.string.export_blocked_keywords
) { alertDialog ->
alertDialog.showKeyboard(view.exportBlockedKeywordsFilename) alertDialog.showKeyboard(view.exportBlockedKeywordsFilename)
alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener { alertDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener {
val filename = view.exportBlockedKeywordsFilename.value val filename = view.exportBlockedKeywordsFilename.value
when { when {
filename.isEmpty() -> activity.toast(org.fossify.commons.R.string.empty_name) filename.isEmpty() -> activity.toast(org.fossify.commons.R.string.empty_name)
filename.isAValidFilename() -> { filename.isAValidFilename() -> {
val file = File(realPath, "$filename$BLOCKED_KEYWORDS_EXPORT_EXTENSION") val file =
File(realPath, "$filename$BLOCKED_KEYWORDS_EXPORT_EXTENSION")
if (!hidePath && file.exists()) { if (!hidePath && file.exists()) {
activity.toast(org.fossify.commons.R.string.name_taken) activity.toast(org.fossify.commons.R.string.name_taken)
return@setOnClickListener return@setOnClickListener
} }
ensureBackgroundThread { ensureBackgroundThread {
config.lastBlockedKeywordExportPath = file.absolutePath.getParentPath() config.lastBlockedKeywordExportPath =
file.absolutePath.getParentPath()
callback(file) callback(file)
alertDialog.dismiss() alertDialog.dismiss()
} }

View file

@ -2,7 +2,6 @@ package org.fossify.messages.helpers
import android.content.Context import android.content.Context
import org.fossify.commons.helpers.BaseConfig import org.fossify.commons.helpers.BaseConfig
import org.fossify.commons.helpers.LAST_BLOCKED_NUMBERS_EXPORT_PATH
import org.fossify.messages.extensions.getDefaultKeyboardHeight import org.fossify.messages.extensions.getDefaultKeyboardHeight
import org.fossify.messages.models.Conversation import org.fossify.messages.models.Conversation
@ -19,11 +18,13 @@ class Config(context: Context) : BaseConfig(context) {
var showCharacterCounter: Boolean var showCharacterCounter: Boolean
get() = prefs.getBoolean(SHOW_CHARACTER_COUNTER, false) get() = prefs.getBoolean(SHOW_CHARACTER_COUNTER, false)
set(showCharacterCounter) = prefs.edit().putBoolean(SHOW_CHARACTER_COUNTER, showCharacterCounter).apply() set(showCharacterCounter) = prefs.edit()
.putBoolean(SHOW_CHARACTER_COUNTER, showCharacterCounter).apply()
var useSimpleCharacters: Boolean var useSimpleCharacters: Boolean
get() = prefs.getBoolean(USE_SIMPLE_CHARACTERS, false) get() = prefs.getBoolean(USE_SIMPLE_CHARACTERS, false)
set(useSimpleCharacters) = prefs.edit().putBoolean(USE_SIMPLE_CHARACTERS, useSimpleCharacters).apply() set(useSimpleCharacters) = prefs.edit()
.putBoolean(USE_SIMPLE_CHARACTERS, useSimpleCharacters).apply()
var sendOnEnter: Boolean var sendOnEnter: Boolean
get() = prefs.getBoolean(SEND_ON_ENTER, false) get() = prefs.getBoolean(SEND_ON_ENTER, false)
@ -31,19 +32,23 @@ class Config(context: Context) : BaseConfig(context) {
var enableDeliveryReports: Boolean var enableDeliveryReports: Boolean
get() = prefs.getBoolean(ENABLE_DELIVERY_REPORTS, false) get() = prefs.getBoolean(ENABLE_DELIVERY_REPORTS, false)
set(enableDeliveryReports) = prefs.edit().putBoolean(ENABLE_DELIVERY_REPORTS, enableDeliveryReports).apply() set(enableDeliveryReports) = prefs.edit()
.putBoolean(ENABLE_DELIVERY_REPORTS, enableDeliveryReports).apply()
var sendLongMessageMMS: Boolean var sendLongMessageMMS: Boolean
get() = prefs.getBoolean(SEND_LONG_MESSAGE_MMS, false) get() = prefs.getBoolean(SEND_LONG_MESSAGE_MMS, false)
set(sendLongMessageMMS) = prefs.edit().putBoolean(SEND_LONG_MESSAGE_MMS, sendLongMessageMMS).apply() set(sendLongMessageMMS) = prefs.edit().putBoolean(SEND_LONG_MESSAGE_MMS, sendLongMessageMMS)
.apply()
var sendGroupMessageMMS: Boolean var sendGroupMessageMMS: Boolean
get() = prefs.getBoolean(SEND_GROUP_MESSAGE_MMS, false) get() = prefs.getBoolean(SEND_GROUP_MESSAGE_MMS, false)
set(sendGroupMessageMMS) = prefs.edit().putBoolean(SEND_GROUP_MESSAGE_MMS, sendGroupMessageMMS).apply() set(sendGroupMessageMMS) = prefs.edit()
.putBoolean(SEND_GROUP_MESSAGE_MMS, sendGroupMessageMMS).apply()
var lockScreenVisibilitySetting: Int var lockScreenVisibilitySetting: Int
get() = prefs.getInt(LOCK_SCREEN_VISIBILITY, LOCK_SCREEN_SENDER_MESSAGE) get() = prefs.getInt(LOCK_SCREEN_VISIBILITY, LOCK_SCREEN_SENDER_MESSAGE)
set(lockScreenVisibilitySetting) = prefs.edit().putInt(LOCK_SCREEN_VISIBILITY, lockScreenVisibilitySetting).apply() set(lockScreenVisibilitySetting) = prefs.edit()
.putInt(LOCK_SCREEN_VISIBILITY, lockScreenVisibilitySetting).apply()
var mmsFileSizeLimit: Long var mmsFileSizeLimit: Long
get() = prefs.getLong(MMS_FILE_SIZE_LIMIT, FILE_SIZE_600_KB) get() = prefs.getLong(MMS_FILE_SIZE_LIMIT, FILE_SIZE_600_KB)
@ -51,7 +56,8 @@ class Config(context: Context) : BaseConfig(context) {
var pinnedConversations: Set<String> var pinnedConversations: Set<String>
get() = prefs.getStringSet(PINNED_CONVERSATIONS, HashSet<String>())!! get() = prefs.getStringSet(PINNED_CONVERSATIONS, HashSet<String>())!!
set(pinnedConversations) = prefs.edit().putStringSet(PINNED_CONVERSATIONS, pinnedConversations).apply() set(pinnedConversations) = prefs.edit()
.putStringSet(PINNED_CONVERSATIONS, pinnedConversations).apply()
fun addPinnedConversationByThreadId(threadId: Long) { fun addPinnedConversationByThreadId(threadId: Long) {
pinnedConversations = pinnedConversations.plus(threadId.toString()) pinnedConversations = pinnedConversations.plus(threadId.toString())
@ -66,7 +72,8 @@ class Config(context: Context) : BaseConfig(context) {
} }
fun removePinnedConversations(conversations: List<Conversation>) { fun removePinnedConversations(conversations: List<Conversation>) {
pinnedConversations = pinnedConversations.minus(conversations.map { it.threadId.toString() }) pinnedConversations =
pinnedConversations.minus(conversations.map { it.threadId.toString() })
} }
var blockedKeywords: Set<String> var blockedKeywords: Set<String>
@ -111,15 +118,18 @@ class Config(context: Context) : BaseConfig(context) {
var lastRecycleBinCheck: Long var lastRecycleBinCheck: Long
get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L) get() = prefs.getLong(LAST_RECYCLE_BIN_CHECK, 0L)
set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck).apply() set(lastRecycleBinCheck) = prefs.edit().putLong(LAST_RECYCLE_BIN_CHECK, lastRecycleBinCheck)
.apply()
var isArchiveAvailable: Boolean var isArchiveAvailable: Boolean
get() = prefs.getBoolean(IS_ARCHIVE_AVAILABLE, true) get() = prefs.getBoolean(IS_ARCHIVE_AVAILABLE, true)
set(isArchiveAvailable) = prefs.edit().putBoolean(IS_ARCHIVE_AVAILABLE, isArchiveAvailable).apply() set(isArchiveAvailable) = prefs.edit().putBoolean(IS_ARCHIVE_AVAILABLE, isArchiveAvailable)
.apply()
var customNotifications: Set<String> var customNotifications: Set<String>
get() = prefs.getStringSet(CUSTOM_NOTIFICATIONS, HashSet<String>())!! get() = prefs.getStringSet(CUSTOM_NOTIFICATIONS, HashSet<String>())!!
set(customNotifications) = prefs.edit().putStringSet(CUSTOM_NOTIFICATIONS, customNotifications).apply() set(customNotifications) = prefs.edit()
.putStringSet(CUSTOM_NOTIFICATIONS, customNotifications).apply()
fun addCustomNotificationsByThreadId(threadId: Long) { fun addCustomNotificationsByThreadId(threadId: Long) {
customNotifications = customNotifications.plus(threadId.toString()) customNotifications = customNotifications.plus(threadId.toString())
@ -131,5 +141,6 @@ class Config(context: Context) : BaseConfig(context) {
var lastBlockedKeywordExportPath: String var lastBlockedKeywordExportPath: String
get() = prefs.getString(LAST_BLOCKED_KEYWORD_EXPORT_PATH, "")!! get() = prefs.getString(LAST_BLOCKED_KEYWORD_EXPORT_PATH, "")!!
set(lastBlockedNumbersExportPath) = prefs.edit().putString(LAST_BLOCKED_KEYWORD_EXPORT_PATH, lastBlockedNumbersExportPath).apply() set(lastBlockedNumbersExportPath) = prefs.edit()
.putString(LAST_BLOCKED_KEYWORD_EXPORT_PATH, lastBlockedNumbersExportPath).apply()
} }

View file

@ -26,8 +26,6 @@ const val SEND_GROUP_MESSAGE_MMS = "send_group_message_mms"
const val MMS_FILE_SIZE_LIMIT = "mms_file_size_limit" const val MMS_FILE_SIZE_LIMIT = "mms_file_size_limit"
const val PINNED_CONVERSATIONS = "pinned_conversations" const val PINNED_CONVERSATIONS = "pinned_conversations"
const val BLOCKED_KEYWORDS = "blocked_keywords" const val BLOCKED_KEYWORDS = "blocked_keywords"
const val BLOCKED_KEYWORDS_EXPORT_DELIMITER = ","
const val BLOCKED_KEYWORDS_EXPORT_EXTENSION = ".txt"
const val LAST_BLOCKED_KEYWORD_EXPORT_PATH = "last_blocked_keyword_export_path" const val LAST_BLOCKED_KEYWORD_EXPORT_PATH = "last_blocked_keyword_export_path"
const val EXPORT_SMS = "export_sms" const val EXPORT_SMS = "export_sms"
const val EXPORT_MMS = "export_mms" const val EXPORT_MMS = "export_mms"
@ -92,6 +90,9 @@ const val CAPTURE_AUDIO_INTENT = 46
const val PICK_DOCUMENT_INTENT = 47 const val PICK_DOCUMENT_INTENT = 47
const val PICK_CONTACT_INTENT = 48 const val PICK_CONTACT_INTENT = 48
const val BLOCKED_KEYWORDS_EXPORT_DELIMITER = ","
const val BLOCKED_KEYWORDS_EXPORT_EXTENSION = ".txt"
fun refreshMessages() { fun refreshMessages() {
EventBus.getDefault().post(Events.RefreshMessages()) EventBus.getDefault().post(Events.RefreshMessages())
} }