package com.simplemobiletools.smsmessenger.activities import android.annotation.TargetApi import android.content.Intent import android.os.Build import android.os.Bundle import android.view.Menu import com.simplemobiletools.commons.activities.ManageBlockedNumbersActivity import com.simplemobiletools.commons.dialogs.ChangeDateTimeFormatDialog import com.simplemobiletools.commons.dialogs.RadioGroupDialog import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.* import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.extensions.config import com.simplemobiletools.smsmessenger.helpers.* import kotlinx.android.synthetic.main.activity_settings.* import java.util.* class SettingsActivity : SimpleActivity() { private var blockedNumbersAtPause = -1 override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_settings) } override fun onResume() { super.onResume() setupPurchaseThankYou() setupCustomizeColors() setupCustomizeNotifications() setupUseEnglish() setupManageBlockedNumbers() setupChangeDateTimeFormat() setupFontSize() setupShowCharacterCounter() setupUseSimpleCharacters() setupEnableDeliveryReports() setupSendLongMessageAsMMS() setupLockScreenVisibility() setupMMSFileSizeLimit() updateTextColors(settings_scrollview) if (blockedNumbersAtPause != -1 && blockedNumbersAtPause != getBlockedNumbers().hashCode()) { refreshMessages() } arrayOf(settings_color_customization_label, settings_general_settings_label, settings_outgoing_messages_label, settings_notifications_label).forEach { it.setTextColor(getProperPrimaryColor()) } arrayOf( settings_color_customization_holder, settings_general_settings_holder, settings_outgoing_messages_holder, settings_notifications_holder ).forEach { it.background.applyColorFilter(getProperBackgroundColor().getContrastColor()) } } override fun onPause() { super.onPause() blockedNumbersAtPause = getBlockedNumbers().hashCode() } override fun onCreateOptionsMenu(menu: Menu): Boolean { updateMenuItemColors(menu) return super.onCreateOptionsMenu(menu) } private fun setupPurchaseThankYou() { settings_purchase_thank_you_holder.beGoneIf(isOrWasThankYouInstalled()) // make sure the corners at ripple fit the stroke rounded corners if (settings_purchase_thank_you_holder.isGone()) { settings_use_english_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) } settings_purchase_thank_you_holder.setOnClickListener { launchPurchaseThankYouIntent() } } private fun setupCustomizeColors() { settings_customize_colors_label.text = getCustomizeColorsString() settings_customize_colors_holder.setOnClickListener { handleCustomizeColorsClick() } } private fun setupCustomizeNotifications() { settings_customize_notifications_holder.beVisibleIf(isOreoPlus()) if (settings_customize_notifications_holder.isGone()) { settings_lock_screen_visibility_holder.background = resources.getDrawable(R.drawable.ripple_all_corners, theme) } settings_customize_notifications_holder.setOnClickListener { launchCustomizeNotificationsIntent() } } private fun setupUseEnglish() { settings_use_english_holder.beVisibleIf(config.wasUseEnglishToggled || Locale.getDefault().language != "en") settings_use_english.isChecked = config.useEnglish if (settings_use_english_holder.isGone() && settings_purchase_thank_you_holder.isGone()) { settings_change_date_time_format_holder.background = resources.getDrawable(R.drawable.ripple_top_corners, theme) } settings_use_english_holder.setOnClickListener { settings_use_english.toggle() config.useEnglish = settings_use_english.isChecked System.exit(0) } } // support for device-wise blocking came on Android 7, rely only on that @TargetApi(Build.VERSION_CODES.N) private fun setupManageBlockedNumbers() { settings_manage_blocked_numbers_holder.beVisibleIf(isNougatPlus()) settings_manage_blocked_numbers_holder.setOnClickListener { startActivity(Intent(this, ManageBlockedNumbersActivity::class.java)) } } private fun setupChangeDateTimeFormat() { settings_change_date_time_format_holder.setOnClickListener { ChangeDateTimeFormatDialog(this) { refreshMessages() } } } private fun setupFontSize() { settings_font_size.text = getFontSizeText() settings_font_size_holder.setOnClickListener { val items = arrayListOf( RadioItem(FONT_SIZE_SMALL, getString(R.string.small)), RadioItem(FONT_SIZE_MEDIUM, getString(R.string.medium)), RadioItem(FONT_SIZE_LARGE, getString(R.string.large)), RadioItem(FONT_SIZE_EXTRA_LARGE, getString(R.string.extra_large)) ) RadioGroupDialog(this@SettingsActivity, items, config.fontSize) { config.fontSize = it as Int settings_font_size.text = getFontSizeText() } } } private fun setupShowCharacterCounter() { settings_show_character_counter.isChecked = config.showCharacterCounter settings_show_character_counter_holder.setOnClickListener { settings_show_character_counter.toggle() config.showCharacterCounter = settings_show_character_counter.isChecked } } private fun setupUseSimpleCharacters() { settings_use_simple_characters.isChecked = config.useSimpleCharacters settings_use_simple_characters_holder.setOnClickListener { settings_use_simple_characters.toggle() config.useSimpleCharacters = settings_use_simple_characters.isChecked } } private fun setupEnableDeliveryReports() { settings_enable_delivery_reports.isChecked = config.enableDeliveryReports settings_enable_delivery_reports_holder.setOnClickListener { settings_enable_delivery_reports.toggle() config.enableDeliveryReports = settings_enable_delivery_reports.isChecked } } private fun setupSendLongMessageAsMMS() { settings_send_long_message_mms.isChecked = config.sendLongMessageMMS settings_send_long_message_mms_holder.setOnClickListener { settings_send_long_message_mms.toggle() config.sendLongMessageMMS = settings_send_long_message_mms.isChecked } } private fun setupLockScreenVisibility() { settings_lock_screen_visibility.text = getLockScreenVisibilityText() settings_lock_screen_visibility_holder.setOnClickListener { val items = arrayListOf( RadioItem(LOCK_SCREEN_SENDER_MESSAGE, getString(R.string.sender_and_message)), RadioItem(LOCK_SCREEN_SENDER, getString(R.string.sender_only)), RadioItem(LOCK_SCREEN_NOTHING, getString(R.string.nothing)), ) RadioGroupDialog(this@SettingsActivity, items, config.lockScreenVisibilitySetting) { config.lockScreenVisibilitySetting = it as Int settings_lock_screen_visibility.text = getLockScreenVisibilityText() } } } private fun getLockScreenVisibilityText() = getString( when (config.lockScreenVisibilitySetting) { LOCK_SCREEN_SENDER_MESSAGE -> R.string.sender_and_message LOCK_SCREEN_SENDER -> R.string.sender_only else -> R.string.nothing } ) private fun setupMMSFileSizeLimit() { settings_mms_file_size_limit.text = getMMSFileLimitText() settings_mms_file_size_limit_holder.setOnClickListener { val items = arrayListOf( RadioItem(1, getString(R.string.mms_file_size_limit_100kb), FILE_SIZE_100_KB), RadioItem(2, getString(R.string.mms_file_size_limit_200kb), FILE_SIZE_200_KB), RadioItem(3, getString(R.string.mms_file_size_limit_300kb), FILE_SIZE_300_KB), RadioItem(4, getString(R.string.mms_file_size_limit_600kb), FILE_SIZE_600_KB), RadioItem(5, getString(R.string.mms_file_size_limit_1mb), FILE_SIZE_1_MB), RadioItem(6, getString(R.string.mms_file_size_limit_2mb), FILE_SIZE_2_MB), RadioItem(7, getString(R.string.mms_file_size_limit_none), FILE_SIZE_NONE), ) val checkedItemId = items.find { it.value == config.mmsFileSizeLimit }?.id ?: 7 RadioGroupDialog(this@SettingsActivity, items, checkedItemId) { config.mmsFileSizeLimit = it as Long settings_mms_file_size_limit.text = getMMSFileLimitText() } } } private fun getMMSFileLimitText() = getString( when (config.mmsFileSizeLimit) { FILE_SIZE_100_KB -> R.string.mms_file_size_limit_100kb FILE_SIZE_200_KB -> R.string.mms_file_size_limit_200kb FILE_SIZE_300_KB -> R.string.mms_file_size_limit_300kb FILE_SIZE_600_KB -> R.string.mms_file_size_limit_600kb FILE_SIZE_1_MB -> R.string.mms_file_size_limit_1mb FILE_SIZE_2_MB -> R.string.mms_file_size_limit_2mb else -> R.string.mms_file_size_limit_none } ) }