Skip to content

Commit d365907

Browse files
authored
Merge pull request #137 from tom93/fix-import-binary-mime-type
Allow importing files with MIME type "application/octet-stream"
2 parents c7aaa9e + 29520d5 commit d365907

File tree

1 file changed

+120
-32
lines changed

1 file changed

+120
-32
lines changed

app/src/main/kotlin/org/fossify/messages/activities/SettingsActivity.kt

+120-32
Original file line numberDiff line numberDiff line change
@@ -9,25 +9,71 @@ import androidx.activity.result.contract.ActivityResultContracts
99
import kotlinx.serialization.encodeToString
1010
import kotlinx.serialization.json.Json
1111
import org.fossify.commons.activities.ManageBlockedNumbersActivity
12-
import org.fossify.commons.dialogs.*
13-
import org.fossify.commons.extensions.*
14-
import org.fossify.commons.helpers.*
12+
import org.fossify.commons.dialogs.ChangeDateTimeFormatDialog
13+
import org.fossify.commons.dialogs.ConfirmationDialog
14+
import org.fossify.commons.dialogs.FeatureLockedDialog
15+
import org.fossify.commons.dialogs.RadioGroupDialog
16+
import org.fossify.commons.dialogs.SecurityDialog
17+
import org.fossify.commons.extensions.addLockedLabelIfNeeded
18+
import org.fossify.commons.extensions.beGoneIf
19+
import org.fossify.commons.extensions.beVisibleIf
20+
import org.fossify.commons.extensions.getBlockedNumbers
21+
import org.fossify.commons.extensions.getCustomizeColorsString
22+
import org.fossify.commons.extensions.getFontSizeText
23+
import org.fossify.commons.extensions.getProperPrimaryColor
24+
import org.fossify.commons.extensions.isOrWasThankYouInstalled
25+
import org.fossify.commons.extensions.launchPurchaseThankYouIntent
26+
import org.fossify.commons.extensions.showErrorToast
27+
import org.fossify.commons.extensions.toast
28+
import org.fossify.commons.extensions.updateTextColors
29+
import org.fossify.commons.extensions.viewBinding
30+
import org.fossify.commons.helpers.FONT_SIZE_EXTRA_LARGE
31+
import org.fossify.commons.helpers.FONT_SIZE_LARGE
32+
import org.fossify.commons.helpers.FONT_SIZE_MEDIUM
33+
import org.fossify.commons.helpers.FONT_SIZE_SMALL
34+
import org.fossify.commons.helpers.NavigationIcon
35+
import org.fossify.commons.helpers.PROTECTION_FINGERPRINT
36+
import org.fossify.commons.helpers.SHOW_ALL_TABS
37+
import org.fossify.commons.helpers.ensureBackgroundThread
38+
import org.fossify.commons.helpers.isNougatPlus
39+
import org.fossify.commons.helpers.isOreoPlus
40+
import org.fossify.commons.helpers.isPiePlus
41+
import org.fossify.commons.helpers.isTiramisuPlus
1542
import org.fossify.commons.models.RadioItem
1643
import org.fossify.messages.R
1744
import org.fossify.messages.databinding.ActivitySettingsBinding
1845
import org.fossify.messages.dialogs.ExportMessagesDialog
1946
import org.fossify.messages.extensions.config
2047
import org.fossify.messages.extensions.emptyMessagesRecycleBin
2148
import org.fossify.messages.extensions.messagesDB
22-
import org.fossify.messages.helpers.*
49+
import org.fossify.messages.helpers.FILE_SIZE_100_KB
50+
import org.fossify.messages.helpers.FILE_SIZE_1_MB
51+
import org.fossify.messages.helpers.FILE_SIZE_200_KB
52+
import org.fossify.messages.helpers.FILE_SIZE_2_MB
53+
import org.fossify.messages.helpers.FILE_SIZE_300_KB
54+
import org.fossify.messages.helpers.FILE_SIZE_600_KB
55+
import org.fossify.messages.helpers.FILE_SIZE_NONE
56+
import org.fossify.messages.helpers.LOCK_SCREEN_NOTHING
57+
import org.fossify.messages.helpers.LOCK_SCREEN_SENDER
58+
import org.fossify.messages.helpers.LOCK_SCREEN_SENDER_MESSAGE
59+
import org.fossify.messages.helpers.MessagesImporter
60+
import org.fossify.messages.helpers.MessagesReader
61+
import org.fossify.messages.helpers.refreshMessages
2362
import java.util.Locale
2463
import kotlin.system.exitProcess
2564

2665
class SettingsActivity : SimpleActivity() {
2766
private var blockedNumbersAtPause = -1
2867
private var recycleBinMessages = 0
2968
private val messagesFileType = "application/json"
30-
private val messageImportFileTypes = listOf("application/json", "application/xml", "text/xml")
69+
private val messageImportFileTypes = buildList {
70+
add("application/json")
71+
add("application/xml")
72+
add("text/xml")
73+
if (!isPiePlus()) {
74+
add("application/octet-stream")
75+
}
76+
}
3177

3278
private val binding by viewBinding(ActivitySettingsBinding::inflate)
3379

@@ -42,7 +88,10 @@ class SettingsActivity : SimpleActivity() {
4288
useTransparentNavigation = true,
4389
useTopSearchMenu = false
4490
)
45-
setupMaterialScrollListener(scrollingView = binding.settingsNestedScrollview, toolbar = binding.settingsToolbar)
91+
setupMaterialScrollListener(
92+
scrollingView = binding.settingsNestedScrollview,
93+
toolbar = binding.settingsToolbar
94+
)
4695
}
4796

4897
override fun onResume() {
@@ -73,7 +122,9 @@ class SettingsActivity : SimpleActivity() {
73122
setupMessagesImport()
74123
updateTextColors(binding.settingsNestedScrollview)
75124

76-
if (blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()) {
125+
if (
126+
blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()
127+
) {
77128
refreshMessages()
78129
}
79130

@@ -90,18 +141,20 @@ class SettingsActivity : SimpleActivity() {
90141
}
91142
}
92143

93-
private val getContent = registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri ->
94-
if (uri != null) {
95-
MessagesImporter(this).importMessages(uri)
144+
private val getContent =
145+
registerForActivityResult(ActivityResultContracts.OpenDocument()) { uri ->
146+
if (uri != null) {
147+
MessagesImporter(this).importMessages(uri)
148+
}
96149
}
97-
}
98150

99-
private val saveDocument = registerForActivityResult(ActivityResultContracts.CreateDocument(messagesFileType)) { uri ->
100-
if (uri != null) {
101-
toast(org.fossify.commons.R.string.exporting)
102-
exportMessages(uri)
151+
private val saveDocument =
152+
registerForActivityResult(ActivityResultContracts.CreateDocument(messagesFileType)) { uri ->
153+
if (uri != null) {
154+
toast(org.fossify.commons.R.string.exporting)
155+
exportMessages(uri)
156+
}
103157
}
104-
}
105158

106159
private fun setupMessagesExport() {
107160
binding.settingsExportMessagesHolder.setOnClickListener {
@@ -120,7 +173,10 @@ class SettingsActivity : SimpleActivity() {
120173
private fun exportMessages(uri: Uri) {
121174
ensureBackgroundThread {
122175
try {
123-
MessagesReader(this).getMessagesToExport(config.exportSms, config.exportMms) { messagesToExport ->
176+
MessagesReader(this).getMessagesToExport(
177+
config.exportSms,
178+
config.exportMms
179+
) { messagesToExport ->
124180
if (messagesToExport.isEmpty()) {
125181
toast(org.fossify.commons.R.string.no_entries_for_exporting)
126182
return@getMessagesToExport
@@ -167,7 +223,10 @@ class SettingsActivity : SimpleActivity() {
167223
}
168224

169225
private fun setupUseEnglish() = binding.apply {
170-
settingsUseEnglishHolder.beVisibleIf((config.wasUseEnglishToggled || Locale.getDefault().language != "en") && !isTiramisuPlus())
226+
settingsUseEnglishHolder.beVisibleIf(
227+
(config.wasUseEnglishToggled || Locale.getDefault().language != "en")
228+
&& !isTiramisuPlus()
229+
)
171230
settingsUseEnglish.isChecked = config.useEnglish
172231
settingsUseEnglishHolder.setOnClickListener {
173232
settingsUseEnglish.toggle()
@@ -187,7 +246,8 @@ class SettingsActivity : SimpleActivity() {
187246
// support for device-wise blocking came on Android 7, rely only on that
188247
@TargetApi(Build.VERSION_CODES.N)
189248
private fun setupManageBlockedNumbers() = binding.apply {
190-
settingsManageBlockedNumbers.text = addLockedLabelIfNeeded(org.fossify.commons.R.string.manage_blocked_numbers)
249+
settingsManageBlockedNumbers.text =
250+
addLockedLabelIfNeeded(org.fossify.commons.R.string.manage_blocked_numbers)
191251
settingsManageBlockedNumbersHolder.beVisibleIf(isNougatPlus())
192252

193253
settingsManageBlockedNumbersHolder.setOnClickListener {
@@ -202,7 +262,8 @@ class SettingsActivity : SimpleActivity() {
202262
}
203263

204264
private fun setupManageBlockedKeywords() = binding.apply {
205-
settingsManageBlockedKeywords.text = addLockedLabelIfNeeded(R.string.manage_blocked_keywords)
265+
settingsManageBlockedKeywords.text =
266+
addLockedLabelIfNeeded(R.string.manage_blocked_keywords)
206267

207268
settingsManageBlockedKeywordsHolder.setOnClickListener {
208269
if (isOrWasThankYouInstalled()) {
@@ -230,7 +291,10 @@ class SettingsActivity : SimpleActivity() {
230291
RadioItem(FONT_SIZE_SMALL, getString(org.fossify.commons.R.string.small)),
231292
RadioItem(FONT_SIZE_MEDIUM, getString(org.fossify.commons.R.string.medium)),
232293
RadioItem(FONT_SIZE_LARGE, getString(org.fossify.commons.R.string.large)),
233-
RadioItem(FONT_SIZE_EXTRA_LARGE, getString(org.fossify.commons.R.string.extra_large))
294+
RadioItem(
295+
FONT_SIZE_EXTRA_LARGE,
296+
getString(org.fossify.commons.R.string.extra_large)
297+
)
234298
)
235299

236300
RadioGroupDialog(this@SettingsActivity, items, config.fontSize) {
@@ -352,7 +416,11 @@ class SettingsActivity : SimpleActivity() {
352416
recycleBinMessages = messagesDB.getArchivedCount()
353417
runOnUiThread {
354418
settingsEmptyRecycleBinSize.text =
355-
resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages)
419+
resources.getQuantityString(
420+
R.plurals.delete_messages,
421+
recycleBinMessages,
422+
recycleBinMessages
423+
)
356424
}
357425
}
358426

@@ -372,7 +440,11 @@ class SettingsActivity : SimpleActivity() {
372440
}
373441
recycleBinMessages = 0
374442
settingsEmptyRecycleBinSize.text =
375-
resources.getQuantityString(R.plurals.delete_messages, recycleBinMessages, recycleBinMessages)
443+
resources.getQuantityString(
444+
R.plurals.delete_messages,
445+
recycleBinMessages,
446+
recycleBinMessages
447+
)
376448
}
377449
}
378450
}
@@ -381,8 +453,17 @@ class SettingsActivity : SimpleActivity() {
381453
private fun setupAppPasswordProtection() = binding.apply {
382454
settingsAppPasswordProtection.isChecked = config.isAppPasswordProtectionOn
383455
settingsAppPasswordProtectionHolder.setOnClickListener {
384-
val tabToShow = if (config.isAppPasswordProtectionOn) config.appProtectionType else SHOW_ALL_TABS
385-
SecurityDialog(this@SettingsActivity, config.appPasswordHash, tabToShow) { hash, type, success ->
456+
val tabToShow = if (config.isAppPasswordProtectionOn) {
457+
config.appProtectionType
458+
} else {
459+
SHOW_ALL_TABS
460+
}
461+
462+
SecurityDialog(
463+
activity = this@SettingsActivity,
464+
requiredHash = config.appPasswordHash,
465+
showTabIndex = tabToShow
466+
) { hash, type, success ->
386467
if (success) {
387468
val hasPasswordProtection = config.isAppPasswordProtectionOn
388469
settingsAppPasswordProtection.isChecked = !hasPasswordProtection
@@ -391,13 +472,20 @@ class SettingsActivity : SimpleActivity() {
391472
config.appProtectionType = type
392473

393474
if (config.isAppPasswordProtectionOn) {
394-
val confirmationTextId = if (config.appProtectionType == PROTECTION_FINGERPRINT) {
395-
org.fossify.commons.R.string.fingerprint_setup_successfully
396-
} else {
397-
org.fossify.commons.R.string.protection_setup_successfully
398-
}
399-
400-
ConfirmationDialog(this@SettingsActivity, "", confirmationTextId, org.fossify.commons.R.string.ok, 0) { }
475+
val confirmationTextId =
476+
if (config.appProtectionType == PROTECTION_FINGERPRINT) {
477+
org.fossify.commons.R.string.fingerprint_setup_successfully
478+
} else {
479+
org.fossify.commons.R.string.protection_setup_successfully
480+
}
481+
482+
ConfirmationDialog(
483+
activity = this@SettingsActivity,
484+
message = "",
485+
messageId = confirmationTextId,
486+
positive = org.fossify.commons.R.string.ok,
487+
negative = 0
488+
) { }
401489
}
402490
}
403491
}

0 commit comments

Comments
 (0)