Construct import mime type based on API level

Format code.
This commit is contained in:
Naveen Singh 2024-12-25 18:01:03 +05:30
parent 8d306941a0
commit 29520d5a2d
No known key found for this signature in database
GPG key ID: AF5D43C216778C0B

View file

@ -9,9 +9,36 @@ import androidx.activity.result.contract.ActivityResultContracts
import kotlinx.serialization.encodeToString import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json import kotlinx.serialization.json.Json
import org.fossify.commons.activities.ManageBlockedNumbersActivity import org.fossify.commons.activities.ManageBlockedNumbersActivity
import org.fossify.commons.dialogs.* import org.fossify.commons.dialogs.ChangeDateTimeFormatDialog
import org.fossify.commons.extensions.* import org.fossify.commons.dialogs.ConfirmationDialog
import org.fossify.commons.helpers.* import org.fossify.commons.dialogs.FeatureLockedDialog
import org.fossify.commons.dialogs.RadioGroupDialog
import org.fossify.commons.dialogs.SecurityDialog
import org.fossify.commons.extensions.addLockedLabelIfNeeded
import org.fossify.commons.extensions.beGoneIf
import org.fossify.commons.extensions.beVisibleIf
import org.fossify.commons.extensions.getBlockedNumbers
import org.fossify.commons.extensions.getCustomizeColorsString
import org.fossify.commons.extensions.getFontSizeText
import org.fossify.commons.extensions.getProperPrimaryColor
import org.fossify.commons.extensions.isOrWasThankYouInstalled
import org.fossify.commons.extensions.launchPurchaseThankYouIntent
import org.fossify.commons.extensions.showErrorToast
import org.fossify.commons.extensions.toast
import org.fossify.commons.extensions.updateTextColors
import org.fossify.commons.extensions.viewBinding
import org.fossify.commons.helpers.FONT_SIZE_EXTRA_LARGE
import org.fossify.commons.helpers.FONT_SIZE_LARGE
import org.fossify.commons.helpers.FONT_SIZE_MEDIUM
import org.fossify.commons.helpers.FONT_SIZE_SMALL
import org.fossify.commons.helpers.NavigationIcon
import org.fossify.commons.helpers.PROTECTION_FINGERPRINT
import org.fossify.commons.helpers.SHOW_ALL_TABS
import org.fossify.commons.helpers.ensureBackgroundThread
import org.fossify.commons.helpers.isNougatPlus
import org.fossify.commons.helpers.isOreoPlus
import org.fossify.commons.helpers.isPiePlus
import org.fossify.commons.helpers.isTiramisuPlus
import org.fossify.commons.models.RadioItem import org.fossify.commons.models.RadioItem
import org.fossify.messages.R import org.fossify.messages.R
import org.fossify.messages.databinding.ActivitySettingsBinding import org.fossify.messages.databinding.ActivitySettingsBinding
@ -19,7 +46,19 @@ import org.fossify.messages.dialogs.ExportMessagesDialog
import org.fossify.messages.extensions.config import org.fossify.messages.extensions.config
import org.fossify.messages.extensions.emptyMessagesRecycleBin import org.fossify.messages.extensions.emptyMessagesRecycleBin
import org.fossify.messages.extensions.messagesDB import org.fossify.messages.extensions.messagesDB
import org.fossify.messages.helpers.* import org.fossify.messages.helpers.FILE_SIZE_100_KB
import org.fossify.messages.helpers.FILE_SIZE_1_MB
import org.fossify.messages.helpers.FILE_SIZE_200_KB
import org.fossify.messages.helpers.FILE_SIZE_2_MB
import org.fossify.messages.helpers.FILE_SIZE_300_KB
import org.fossify.messages.helpers.FILE_SIZE_600_KB
import org.fossify.messages.helpers.FILE_SIZE_NONE
import org.fossify.messages.helpers.LOCK_SCREEN_NOTHING
import org.fossify.messages.helpers.LOCK_SCREEN_SENDER
import org.fossify.messages.helpers.LOCK_SCREEN_SENDER_MESSAGE
import org.fossify.messages.helpers.MessagesImporter
import org.fossify.messages.helpers.MessagesReader
import org.fossify.messages.helpers.refreshMessages
import java.util.Locale import java.util.Locale
import kotlin.system.exitProcess import kotlin.system.exitProcess
@ -27,7 +66,14 @@ class SettingsActivity : SimpleActivity() {
private var blockedNumbersAtPause = -1 private var blockedNumbersAtPause = -1
private var recycleBinMessages = 0 private var recycleBinMessages = 0
private val messagesFileType = "application/json" private val messagesFileType = "application/json"
private val messageImportFileTypes = listOf("application/json", "application/xml", "text/xml", "application/octet-stream") private val messageImportFileTypes = buildList {
add("application/json")
add("application/xml")
add("text/xml")
if (!isPiePlus()) {
add("application/octet-stream")
}
}
private val binding by viewBinding(ActivitySettingsBinding::inflate) private val binding by viewBinding(ActivitySettingsBinding::inflate)
@ -42,7 +88,10 @@ class SettingsActivity : SimpleActivity() {
useTransparentNavigation = true, useTransparentNavigation = true,
useTopSearchMenu = false useTopSearchMenu = false
) )
setupMaterialScrollListener(scrollingView = binding.settingsNestedScrollview, toolbar = binding.settingsToolbar) setupMaterialScrollListener(
scrollingView = binding.settingsNestedScrollview,
toolbar = binding.settingsToolbar
)
} }
override fun onResume() { override fun onResume() {
@ -73,7 +122,9 @@ class SettingsActivity : SimpleActivity() {
setupMessagesImport() setupMessagesImport()
updateTextColors(binding.settingsNestedScrollview) updateTextColors(binding.settingsNestedScrollview)
if (blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()) { if (
blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()
) {
refreshMessages() refreshMessages()
} }
@ -90,13 +141,15 @@ class SettingsActivity : SimpleActivity() {
} }
} }
private val getContent = registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri -> private val getContent =
registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri ->
if (uri != null) { if (uri != null) {
MessagesImporter(this).importMessages(uri) MessagesImporter(this).importMessages(uri)
} }
} }
private val saveDocument = registerForActivityResult(ActivityResultContracts.CreateDocument(messagesFileType)) { uri -> private val saveDocument =
registerForActivityResult(ActivityResultContracts.CreateDocument(messagesFileType)) { uri ->
if (uri != null) { if (uri != null) {
toast(org.fossify.commons.R.string.exporting) toast(org.fossify.commons.R.string.exporting)
exportMessages(uri) exportMessages(uri)
@ -120,7 +173,10 @@ class SettingsActivity : SimpleActivity() {
private fun exportMessages(uri: Uri) { private fun exportMessages(uri: Uri) {
ensureBackgroundThread { ensureBackgroundThread {
try { try {
MessagesReader(this).getMessagesToExport(config.exportSms, config.exportMms) { messagesToExport -> MessagesReader(this).getMessagesToExport(
config.exportSms,
config.exportMms
) { messagesToExport ->
if (messagesToExport.isEmpty()) { if (messagesToExport.isEmpty()) {
toast(org.fossify.commons.R.string.no_entries_for_exporting) toast(org.fossify.commons.R.string.no_entries_for_exporting)
return@getMessagesToExport return@getMessagesToExport
@ -167,7 +223,10 @@ class SettingsActivity : SimpleActivity() {
} }
private fun setupUseEnglish() = binding.apply { private fun setupUseEnglish() = binding.apply {
settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus()) settingsUseEnglishHolder.beVisibleIf(
(config.wasUseEnglishToggled || Locale.getDefault().language != "en")
&& !isTiramisuPlus()
)
settingsUseEnglish.isChecked = config.useEnglish settingsUseEnglish.isChecked = config.useEnglish
settingsUseEnglishHolder.setOnClickListener { settingsUseEnglishHolder.setOnClickListener {
settingsUseEnglish.toggle() settingsUseEnglish.toggle()
@ -187,7 +246,8 @@ class SettingsActivity : SimpleActivity() {
// support for device-wise blocking came on Android 7, rely only on that // support for device-wise blocking came on Android 7, rely only on that
@TargetApi(Build.VERSION_CODES.N) @TargetApi(Build.VERSION_CODES.N)
private fun setupManageBlockedNumbers() = binding.apply { private fun setupManageBlockedNumbers() = binding.apply {
settingsManageBlockedNumbers.text = addLockedLabelIfNeeded(org.fossify.commons.R.string.manage_blocked_numbers) settingsManageBlockedNumbers.text =
addLockedLabelIfNeeded(org.fossify.commons.R.string.manage_blocked_numbers)
settingsManageBlockedNumbersHolder.beVisibleIf(isNougatPlus()) settingsManageBlockedNumbersHolder.beVisibleIf(isNougatPlus())
settingsManageBlockedNumbersHolder.setOnClickListener { settingsManageBlockedNumbersHolder.setOnClickListener {
@ -202,7 +262,8 @@ class SettingsActivity : SimpleActivity() {
} }
private fun setupManageBlockedKeywords() = binding.apply { private fun setupManageBlockedKeywords() = binding.apply {
settingsManageBlockedKeywords.text = addLockedLabelIfNeeded(R.string.manage_blocked_keywords) settingsManageBlockedKeywords.text =
addLockedLabelIfNeeded(R.string.manage_blocked_keywords)
settingsManageBlockedKeywordsHolder.setOnClickListener { settingsManageBlockedKeywordsHolder.setOnClickListener {
if (isOrWasThankYouInstalled()) { if (isOrWasThankYouInstalled()) {
@ -230,7 +291,10 @@ class SettingsActivity : SimpleActivity() {
RadioItem(FONT_SIZE_SMALL, getString(org.fossify.commons.R.string.small)), RadioItem(FONT_SIZE_SMALL, getString(org.fossify.commons.R.string.small)),
RadioItem(FONT_SIZE_MEDIUM, getString(org.fossify.commons.R.string.medium)), RadioItem(FONT_SIZE_MEDIUM, getString(org.fossify.commons.R.string.medium)),
RadioItem(FONT_SIZE_LARGE, getString(org.fossify.commons.R.string.large)), RadioItem(FONT_SIZE_LARGE, getString(org.fossify.commons.R.string.large)),
RadioItem(FONT_SIZE_EXTRA_LARGE, getString(org.fossify.commons.R.string.extra_large)) RadioItem(
FONT_SIZE_EXTRA_LARGE,
getString(org.fossify.commons.R.string.extra_large)
)
) )
RadioGroupDialog(this@SettingsActivity, items, config.fontSize) { RadioGroupDialog(this@SettingsActivity, items, config.fontSize) {
@ -352,7 +416,11 @@ class SettingsActivity : SimpleActivity() {
recycleBinMessages = messagesDB.getArchivedCount() recycleBinMessages = messagesDB.getArchivedCount()
runOnUiThread { runOnUiThread {
settingsEmptyRecycleBinSize.text = settingsEmptyRecycleBinSize.text =
resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages) resources.getQuantityString(
R.plurals.delete_messages,
recycleBinMessages,
recycleBinMessages
)
} }
} }
@ -372,7 +440,11 @@ class SettingsActivity : SimpleActivity() {
} }
recycleBinMessages = 0 recycleBinMessages = 0
settingsEmptyRecycleBinSize.text = settingsEmptyRecycleBinSize.text =
resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages) resources.getQuantityString(
R.plurals.delete_messages,
recycleBinMessages,
recycleBinMessages
)
} }
} }
} }
@ -381,8 +453,17 @@ class SettingsActivity : SimpleActivity() {
private fun setupAppPasswordProtection() = binding.apply { private fun setupAppPasswordProtection() = binding.apply {
settingsAppPasswordProtection.isChecked = config.isAppPasswordProtectionOn settingsAppPasswordProtection.isChecked = config.isAppPasswordProtectionOn
settingsAppPasswordProtectionHolder.setOnClickListener { settingsAppPasswordProtectionHolder.setOnClickListener {
val tabToShow = if (config.isAppPasswordProtectionOn) config.appProtectionType else SHOW_ALL_TABS val tabToShow = if (config.isAppPasswordProtectionOn) {
SecurityDialog(this@SettingsActivity, config.appPasswordHash, tabToShow) { hash, type, success -> config.appProtectionType
} else {
SHOW_ALL_TABS
}
SecurityDialog(
activity = this@SettingsActivity,
requiredHash = config.appPasswordHash,
showTabIndex = tabToShow
) { hash, type, success ->
if (success) { if (success) {
val hasPasswordProtection = config.isAppPasswordProtectionOn val hasPasswordProtection = config.isAppPasswordProtectionOn
settingsAppPasswordProtection.isChecked = !hasPasswordProtection settingsAppPasswordProtection.isChecked = !hasPasswordProtection
@ -391,13 +472,20 @@ class SettingsActivity : SimpleActivity() {
config.appProtectionType = type config.appProtectionType = type
if (config.isAppPasswordProtectionOn) { if (config.isAppPasswordProtectionOn) {
val confirmationTextId = if (config.appProtectionType == PROTECTION_FINGERPRINT) { val confirmationTextId =
if (config.appProtectionType == PROTECTION_FINGERPRINT) {
org.fossify.commons.R.string.fingerprint_setup_successfully org.fossify.commons.R.string.fingerprint_setup_successfully
} else { } else {
org.fossify.commons.R.string.protection_setup_successfully org.fossify.commons.R.string.protection_setup_successfully
} }
ConfirmationDialog(this@SettingsActivity, "", confirmationTextId, org.fossify.commons.R.string.ok, 0) { } ConfirmationDialog(
activity = this@SettingsActivity,
message = "",
messageId = confirmationTextId,
positive = org.fossify.commons.R.string.ok,
negative = 0
) { }
} }
} }
} }