Implemented displaying that automaticallyUpdateAccountsAfterMinutes and lockAppAfterMinutes can be set, but they have no functionality yet
This commit is contained in:
parent
5a4f962293
commit
6c17449fc4
|
@ -52,9 +52,11 @@ open class SettingsDialog : SettingsDialogBase() {
|
||||||
banksAdapter.onClickListener = { navigationToBankSettingsDialog(it.bank) }
|
banksAdapter.onClickListener = { navigationToBankSettingsDialog(it.bank) }
|
||||||
banksAdapter.itemDropped = { oldPosition, oldItem, newPosition, newItem -> reorderedBanks(oldPosition, oldItem.bank, newPosition, newItem.bank) }
|
banksAdapter.itemDropped = { oldPosition, oldItem, newPosition, newItem -> reorderedBanks(oldPosition, oldItem.bank, newPosition, newItem.bank) }
|
||||||
|
|
||||||
swtchUpdateAccountsAutomatically.isChecked = presenter.appSettings.updateAccountsAutomatically
|
swtchAutomaticallyUpdateAccounts.isChecked = presenter.appSettings.automaticallyUpdateAccounts
|
||||||
|
selectUpdateAccountsAfter.periodInMinutes = presenter.appSettings.automaticallyUpdateAccountsAfterMinutes
|
||||||
|
|
||||||
btnSetAppProtection.setOnClickListener { navigateToProtectAppSettingsDialog() }
|
btnSetAppProtection.setOnClickListener { navigateToProtectAppSettingsDialog() }
|
||||||
|
selectLockAppAfter.periodInMinutes = presenter.appSettings.lockAppAfterMinutes
|
||||||
|
|
||||||
// on Pre Lollipop devices setting vector drawables in xml is not supported -> set left drawable here
|
// on Pre Lollipop devices setting vector drawables in xml is not supported -> set left drawable here
|
||||||
val sendIcon = AppCompatResources.getDrawable(context, R.drawable.ic_baseline_send_24)
|
val sendIcon = AppCompatResources.getDrawable(context, R.drawable.ic_baseline_send_24)
|
||||||
|
@ -102,10 +104,10 @@ open class SettingsDialog : SettingsDialogBase() {
|
||||||
|
|
||||||
|
|
||||||
override val hasUnsavedChanges: Boolean
|
override val hasUnsavedChanges: Boolean
|
||||||
get() = presenter.appSettings.updateAccountsAutomatically != swtchUpdateAccountsAutomatically.isChecked
|
get() = presenter.appSettings.automaticallyUpdateAccounts != swtchAutomaticallyUpdateAccounts.isChecked
|
||||||
|
|
||||||
override fun saveChanges() {
|
override fun saveChanges() {
|
||||||
presenter.appSettings.updateAccountsAutomatically = swtchUpdateAccountsAutomatically.isChecked
|
presenter.appSettings.automaticallyUpdateAccounts = swtchAutomaticallyUpdateAccounts.isChecked
|
||||||
presenter.appSettingsChanged()
|
presenter.appSettingsChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,6 +5,7 @@ import android.util.AttributeSet
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.LinearLayout
|
import android.widget.LinearLayout
|
||||||
|
import android.widget.TextView
|
||||||
import kotlinx.android.synthetic.main.view_form_labelled_value.view.*
|
import kotlinx.android.synthetic.main.view_form_labelled_value.view.*
|
||||||
import net.dankito.banking.ui.android.R
|
import net.dankito.banking.ui.android.R
|
||||||
|
|
||||||
|
@ -13,6 +14,10 @@ open class FormLabelledValue @JvmOverloads constructor(
|
||||||
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||||
) : LinearLayout(context, attrs, defStyleAttr) {
|
) : LinearLayout(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
|
protected lateinit var txtLabel: TextView
|
||||||
|
|
||||||
|
protected lateinit var txtValue: TextView
|
||||||
|
|
||||||
|
|
||||||
init {
|
init {
|
||||||
setupUi(context, attrs)
|
setupUi(context, attrs)
|
||||||
|
@ -23,6 +28,8 @@ open class FormLabelledValue @JvmOverloads constructor(
|
||||||
val rootView = inflater.inflate(R.layout.view_form_labelled_value, this, true)
|
val rootView = inflater.inflate(R.layout.view_form_labelled_value, this, true)
|
||||||
|
|
||||||
rootView.apply {
|
rootView.apply {
|
||||||
|
txtLabel = findViewById(R.id.txtLabel)
|
||||||
|
txtValue = findViewById(R.id.txtValue)
|
||||||
|
|
||||||
context.theme.obtainStyledAttributes(
|
context.theme.obtainStyledAttributes(
|
||||||
attrs,
|
attrs,
|
||||||
|
|
|
@ -0,0 +1,102 @@
|
||||||
|
package net.dankito.banking.ui.android.views
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Build
|
||||||
|
import android.util.AttributeSet
|
||||||
|
import android.view.Gravity
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import android.view.View
|
||||||
|
import android.widget.RelativeLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import net.dankito.banking.ui.android.R
|
||||||
|
|
||||||
|
|
||||||
|
open class FormSelectPeriod @JvmOverloads constructor(
|
||||||
|
context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
|
||||||
|
) : RelativeLayout(context, attrs, defStyleAttr) {
|
||||||
|
|
||||||
|
protected lateinit var txtLabel: TextView
|
||||||
|
|
||||||
|
protected lateinit var txtValue: TextView
|
||||||
|
|
||||||
|
|
||||||
|
init {
|
||||||
|
setupUi(context, attrs)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun setupUi(context: Context, attrs: AttributeSet?) {
|
||||||
|
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
|
||||||
|
val rootView = inflater.inflate(R.layout.view_form_select_period, this, true)
|
||||||
|
|
||||||
|
rootView.apply {
|
||||||
|
txtLabel = findViewById(R.id.txtLabel)
|
||||||
|
txtValue = findViewById(R.id.txtValue)
|
||||||
|
|
||||||
|
txtLabel.gravity = Gravity.CENTER_VERTICAL
|
||||||
|
txtValue.gravity = Gravity.CENTER_VERTICAL
|
||||||
|
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
|
||||||
|
txtLabel.textAlignment = View.TEXT_ALIGNMENT_GRAVITY
|
||||||
|
txtValue.textAlignment = View.TEXT_ALIGNMENT_GRAVITY
|
||||||
|
}
|
||||||
|
|
||||||
|
this.isEnabled = false // TODO: undo as soon as selecting periods is implemented
|
||||||
|
|
||||||
|
context.theme.obtainStyledAttributes(
|
||||||
|
attrs,
|
||||||
|
R.styleable.FormLabelledValue,
|
||||||
|
0, 0).apply {
|
||||||
|
|
||||||
|
try {
|
||||||
|
txtLabel.text = getString(R.styleable.FormSelectPeriod_android_label)
|
||||||
|
|
||||||
|
val defaultValue = Int.MIN_VALUE
|
||||||
|
val configuredPeriod = getInteger(R.styleable.FormSelectPeriod_periodInMinutes, defaultValue)
|
||||||
|
periodInMinutes = if (configuredPeriod == defaultValue) null else configuredPeriod
|
||||||
|
displaySelectedPeriod()
|
||||||
|
} finally {
|
||||||
|
recycle()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected open fun displaySelectedPeriod() {
|
||||||
|
txtValue.text = getDisplayTextForSelectedPeriod()
|
||||||
|
}
|
||||||
|
|
||||||
|
protected open fun getDisplayTextForSelectedPeriod(): String {
|
||||||
|
periodInMinutes?.let { periodInMinutes ->
|
||||||
|
if (periodInMinutes > 0) {
|
||||||
|
if (periodInMinutes < 60) {
|
||||||
|
return context.getString(R.string.minutes, periodInMinutes)
|
||||||
|
}
|
||||||
|
|
||||||
|
return context.getString(R.string.hours, (periodInMinutes / 60))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return context.getString(R.string.never)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
open var label: CharSequence
|
||||||
|
get() = txtLabel.text
|
||||||
|
set(value) {
|
||||||
|
txtLabel.text = value
|
||||||
|
}
|
||||||
|
|
||||||
|
open var periodInMinutes: Int? = null
|
||||||
|
set(value) {
|
||||||
|
field = value
|
||||||
|
displaySelectedPeriod()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun setEnabled(enabled: Boolean) {
|
||||||
|
super.setEnabled(enabled)
|
||||||
|
|
||||||
|
alpha = if (enabled) 1f else 0.5f
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -71,11 +71,18 @@
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<androidx.appcompat.widget.SwitchCompat
|
<androidx.appcompat.widget.SwitchCompat
|
||||||
android:id="@+id/swtchUpdateAccountsAutomatically"
|
android:id="@+id/swtchAutomaticallyUpdateAccounts"
|
||||||
style="@style/FormSwitchStyle"
|
style="@style/FormSwitchStyle"
|
||||||
android:text="@string/dialog_settings_update_accounts_automatically"
|
android:text="@string/dialog_settings_update_accounts_automatically"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<net.dankito.banking.ui.android.views.FormSelectPeriod
|
||||||
|
android:id="@+id/selectUpdateAccountsAfter"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:label="@string/dialog_settings_update_accounts_automatically_after"
|
||||||
|
/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
||||||
|
@ -93,6 +100,13 @@
|
||||||
android:text="@string/dialog_settings_secure_app_data"
|
android:text="@string/dialog_settings_secure_app_data"
|
||||||
/>
|
/>
|
||||||
|
|
||||||
|
<net.dankito.banking.ui.android.views.FormSelectPeriod
|
||||||
|
android:id="@+id/selectLockAppAfter"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:label="@string/dialog_settings_lock_app_after"
|
||||||
|
/>
|
||||||
|
|
||||||
|
|
||||||
<!-- left drawable is set in code as pre Lollipop devices don't support setting vector drawables in xml -->
|
<!-- left drawable is set in code as pre Lollipop devices don't support setting vector drawables in xml -->
|
||||||
<Button
|
<Button
|
||||||
|
|
|
@ -0,0 +1,12 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/txtLabel"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/form_labelled_value_label_margin_top"
|
||||||
|
android:layout_marginBottom="@dimen/form_labelled_value_label_margin_bottom"
|
||||||
|
android:maxLines="1"
|
||||||
|
android:textSize="@dimen/form_labelled_value_label_text_size"
|
||||||
|
android:textColor="@color/formLabelTextColor"
|
||||||
|
/>
|
|
@ -6,25 +6,12 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
>
|
>
|
||||||
|
|
||||||
<TextView
|
<include
|
||||||
android:id="@+id/txtLabel"
|
layout="@layout/view_form_label"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginTop="@dimen/form_labelled_value_label_margin_top"
|
|
||||||
android:layout_marginBottom="@dimen/form_labelled_value_label_margin_bottom"
|
|
||||||
android:maxLines="1"
|
|
||||||
android:textSize="@dimen/form_labelled_value_label_text_size"
|
|
||||||
android:textColor="@color/formLabelTextColor"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<TextView
|
<include
|
||||||
android:id="@+id/txtValue"
|
layout="@layout/view_form_value"
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_marginBottom="@dimen/form_labelled_value_value_margin_bottom"
|
|
||||||
android:textIsSelectable="true"
|
|
||||||
android:textSize="@dimen/form_labelled_value_value_text_size"
|
|
||||||
android:textColor="@color/formValueTextColor"
|
|
||||||
/>
|
/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<RelativeLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="@dimen/form_select_period_height"
|
||||||
|
>
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/view_form_label"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentStart="true"
|
||||||
|
/>
|
||||||
|
|
||||||
|
<include
|
||||||
|
layout="@layout/view_form_value"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:layout_alignParentEnd="true"
|
||||||
|
android:layout_marginRight="@dimen/form_select_period_value_margin_end"
|
||||||
|
android:layout_marginEnd="@dimen/form_select_period_value_margin_end"
|
||||||
|
/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<TextView
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:id="@+id/txtValue"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginBottom="@dimen/form_labelled_value_value_margin_bottom"
|
||||||
|
android:textIsSelectable="true"
|
||||||
|
android:textSize="@dimen/form_labelled_value_value_text_size"
|
||||||
|
android:textColor="@color/formValueTextColor"
|
||||||
|
/>
|
|
@ -16,6 +16,10 @@
|
||||||
<string name="add_account">Konto hinzufügen</string>
|
<string name="add_account">Konto hinzufügen</string>
|
||||||
<string name="settings">Einstellungen</string>
|
<string name="settings">Einstellungen</string>
|
||||||
|
|
||||||
|
<string name="never">Nie</string>
|
||||||
|
<string name="minutes">%d min</string>
|
||||||
|
<string name="hours">%d h</string>
|
||||||
|
|
||||||
<string name="online_banking_credentials_section_title">Online-Banking Zugangsdaten</string>
|
<string name="online_banking_credentials_section_title">Online-Banking Zugangsdaten</string>
|
||||||
<string name="online_banking_credentials_login_name">Login Name</string>
|
<string name="online_banking_credentials_login_name">Login Name</string>
|
||||||
<string name="online_banking_credentials_password">Passwort</string>
|
<string name="online_banking_credentials_password">Passwort</string>
|
||||||
|
@ -131,7 +135,9 @@
|
||||||
|
|
||||||
|
|
||||||
<string name="dialog_settings_update_accounts_automatically">Konten automatisch aktualisieren</string>
|
<string name="dialog_settings_update_accounts_automatically">Konten automatisch aktualisieren</string>
|
||||||
|
<string name="dialog_settings_update_accounts_automatically_after">Aktualisieren nach (kommt noch)</string>
|
||||||
<string name="dialog_settings_secure_app_data">Appdaten schützen</string>
|
<string name="dialog_settings_secure_app_data">Appdaten schützen</string>
|
||||||
|
<string name="dialog_settings_lock_app_after">App sperren nach (kommt noch)</string>
|
||||||
<string name="dialog_settings_send_message_log_title">Message Log senden</string>
|
<string name="dialog_settings_send_message_log_title">Message Log senden</string>
|
||||||
|
|
||||||
<string name="dialog_protect_app_settings_title">Appzugangsschutz</string>
|
<string name="dialog_protect_app_settings_title">Appzugangsschutz</string>
|
||||||
|
|
|
@ -35,4 +35,12 @@
|
||||||
|
|
||||||
</declare-styleable>
|
</declare-styleable>
|
||||||
|
|
||||||
|
|
||||||
|
<declare-styleable name="FormSelectPeriod">
|
||||||
|
|
||||||
|
<attr name="android:label" />
|
||||||
|
<attr name="periodInMinutes" format="integer" />
|
||||||
|
|
||||||
|
</declare-styleable>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
|
@ -34,6 +34,9 @@
|
||||||
<dimen name="form_on_off_value_height">30dp</dimen>
|
<dimen name="form_on_off_value_height">30dp</dimen>
|
||||||
<dimen name="form_on_off_value_label_text_size">15sp</dimen>
|
<dimen name="form_on_off_value_label_text_size">15sp</dimen>
|
||||||
|
|
||||||
|
<dimen name="form_select_period_height">26dp</dimen>
|
||||||
|
<dimen name="form_select_period_value_margin_end">4dp</dimen>
|
||||||
|
|
||||||
<dimen name="info_button_size">20dp</dimen>
|
<dimen name="info_button_size">20dp</dimen>
|
||||||
|
|
||||||
<dimen name="activity_login_app_logo_size">70dp</dimen>
|
<dimen name="activity_login_app_logo_size">70dp</dimen>
|
||||||
|
|
|
@ -16,6 +16,10 @@
|
||||||
<string name="add_account">Add account</string>
|
<string name="add_account">Add account</string>
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Settings</string>
|
||||||
|
|
||||||
|
<string name="never">Never</string>
|
||||||
|
<string name="minutes">%d min</string>
|
||||||
|
<string name="hours">%d h</string>
|
||||||
|
|
||||||
<string name="online_banking_credentials_section_title">Online banking login data</string>
|
<string name="online_banking_credentials_section_title">Online banking login data</string>
|
||||||
<string name="online_banking_credentials_login_name">Login name</string>
|
<string name="online_banking_credentials_login_name">Login name</string>
|
||||||
<string name="online_banking_credentials_password">Password</string>
|
<string name="online_banking_credentials_password">Password</string>
|
||||||
|
@ -131,7 +135,9 @@
|
||||||
|
|
||||||
|
|
||||||
<string name="dialog_settings_update_accounts_automatically">Update accounts automatically</string>
|
<string name="dialog_settings_update_accounts_automatically">Update accounts automatically</string>
|
||||||
|
<string name="dialog_settings_update_accounts_automatically_after">Update after (to be implemented)</string>
|
||||||
<string name="dialog_settings_secure_app_data">Secure app data</string>
|
<string name="dialog_settings_secure_app_data">Secure app data</string>
|
||||||
|
<string name="dialog_settings_lock_app_after">Lock app after (to be implemented)</string>
|
||||||
<string name="dialog_settings_send_message_log_title">Send message log</string>
|
<string name="dialog_settings_send_message_log_title">Send message log</string>
|
||||||
|
|
||||||
<string name="dialog_protect_app_settings_title">App protection</string>
|
<string name="dialog_protect_app_settings_title">App protection</string>
|
||||||
|
|
|
@ -171,8 +171,15 @@ Unfortunately, Bankmeister cannot know whether a bank charges for real-time tran
|
||||||
|
|
||||||
/* SettingsDialog */
|
/* SettingsDialog */
|
||||||
|
|
||||||
"Update accounts automatically" = "Update accounts automatically";
|
"Automatically update accounts" = "Update accounts automatically";
|
||||||
|
"Automatically update accounts after" = "Update after (to be implemented)";
|
||||||
"Secure app data" = "Secure app data";
|
"Secure app data" = "Secure app data";
|
||||||
|
"Lock app after" = "Lock app after (to be implemented)";
|
||||||
|
|
||||||
|
"Instantly" = "Instantly";
|
||||||
|
"%@ minutes" = "%@ minutes";
|
||||||
|
"%@ hours" = "%@ hours";
|
||||||
|
"Never" = "Never";
|
||||||
|
|
||||||
|
|
||||||
/* BankSettingsDialog */
|
/* BankSettingsDialog */
|
||||||
|
|
|
@ -172,8 +172,15 @@ Ob eine Bank Gebühren für Echtzeitüberweisungen erhebt, kann Bankmeister leid
|
||||||
|
|
||||||
/* SettingsDialog */
|
/* SettingsDialog */
|
||||||
|
|
||||||
"Update accounts automatically" = "Konten automatisch aktualisieren";
|
"Automatically update accounts" = "Konten automatisch aktualisieren";
|
||||||
|
"Automatically update accounts after" = "Aktualisieren nach (kommt noch)";
|
||||||
"Secure app data" = "Appdaten schützen";
|
"Secure app data" = "Appdaten schützen";
|
||||||
|
"Lock app after" = "App sperren nach (kommt noch)";
|
||||||
|
|
||||||
|
"Instantly" = "Sofort";
|
||||||
|
"%@ minutes" = "%@ Minuten";
|
||||||
|
"%@ hours" = "%@ Stunden";
|
||||||
|
"Never" = "Nie";
|
||||||
|
|
||||||
|
|
||||||
/* BankSettingsDialog */
|
/* BankSettingsDialog */
|
||||||
|
|
|
@ -4,6 +4,11 @@ import BankingUiSwift
|
||||||
|
|
||||||
struct SettingsDialog: View {
|
struct SettingsDialog: View {
|
||||||
|
|
||||||
|
static private let AutomaticallyUpdateAccountsAfterOptions: [Int] = [ 60, 2 * 60, 4 * 60, 6 * 60, 8 * 60, 10 * 60, 12 * 60, 24 * 60 ]
|
||||||
|
|
||||||
|
static private let LockAppAfterOptions: [Int] = [ 0, 1, 2, 5, 10, 15, 30, 60, 2 * 60, 4 * 60, 8 * 60, 12 * 60, -1 ]
|
||||||
|
|
||||||
|
|
||||||
@Environment(\.editMode) var editMode
|
@Environment(\.editMode) var editMode
|
||||||
|
|
||||||
@ObservedObject var data: AppData
|
@ObservedObject var data: AppData
|
||||||
|
@ -15,13 +20,23 @@ struct SettingsDialog: View {
|
||||||
|
|
||||||
@State private var automaticallyUpdateAccounts: Bool = true
|
@State private var automaticallyUpdateAccounts: Bool = true
|
||||||
|
|
||||||
|
@State private var automaticallyUpdateAccountsAfterMinutesSelectedIndex: Int = 0
|
||||||
|
|
||||||
|
@State private var lockAppAfterMinutesSelectedIndex: Int = 0
|
||||||
|
|
||||||
@State private var askToDeleteAccountMessage: Message? = nil
|
@State private var askToDeleteAccountMessage: Message? = nil
|
||||||
|
|
||||||
|
|
||||||
init(_ data: AppData) {
|
init(_ data: AppData) {
|
||||||
self.data = data
|
self.data = data
|
||||||
|
|
||||||
self._automaticallyUpdateAccounts = State(initialValue: presenter.appSettings.automaticallyUpdateAccounts)
|
let settings = presenter.appSettings
|
||||||
|
|
||||||
|
self._automaticallyUpdateAccounts = State(initialValue: settings.automaticallyUpdateAccounts)
|
||||||
|
self._automaticallyUpdateAccountsAfterMinutesSelectedIndex = State(initialValue: Self.AutomaticallyUpdateAccountsAfterOptions.firstIndex(of: Int(settings.automaticallyUpdateAccountsAfterMinutes)) ?? 0)
|
||||||
|
|
||||||
|
let lockAppAfterMinutes = settings.lockAppAfterMinutes != nil ? Int(settings.lockAppAfterMinutes!) : -1
|
||||||
|
self._lockAppAfterMinutesSelectedIndex = State(initialValue: Self.LockAppAfterOptions.firstIndex(of: lockAppAfterMinutes) ?? 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -39,7 +54,14 @@ struct SettingsDialog: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
Toggle("Update accounts automatically", isOn: $automaticallyUpdateAccounts)
|
Toggle("Automatically update accounts", isOn: $automaticallyUpdateAccounts)
|
||||||
|
|
||||||
|
Picker("Automatically update accounts after", selection: $automaticallyUpdateAccountsAfterMinutesSelectedIndex) {
|
||||||
|
ForEach(0 ..< Self.AutomaticallyUpdateAccountsAfterOptions.count) { optionIndex in
|
||||||
|
Text(getDisplayTextForPeriod(Self.AutomaticallyUpdateAccountsAfterOptions[optionIndex]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.disabled(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
Section {
|
Section {
|
||||||
|
@ -48,9 +70,16 @@ struct SettingsDialog: View {
|
||||||
.frame(maxWidth: .infinity, alignment: .leading) // stretch over full width
|
.frame(maxWidth: .infinity, alignment: .leading) // stretch over full width
|
||||||
.makeBackgroundTapable()
|
.makeBackgroundTapable()
|
||||||
}
|
}
|
||||||
}
|
.onTapGesture {
|
||||||
.onTapGesture {
|
self.navigateToProtectAppSettingsDialog()
|
||||||
self.navigateToProtectAppSettingsDialog()
|
}
|
||||||
|
|
||||||
|
Picker("Lock app after", selection: $lockAppAfterMinutesSelectedIndex) {
|
||||||
|
ForEach(0 ..< Self.LockAppAfterOptions.count) { optionIndex in
|
||||||
|
Text(getDisplayTextForPeriod(Self.LockAppAfterOptions[optionIndex]))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
.disabled(true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.onDisappear { self.saveChanges() }
|
.onDisappear { self.saveChanges() }
|
||||||
|
@ -69,6 +98,23 @@ struct SettingsDialog: View {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private func getDisplayTextForPeriod(_ periodInMinutes: Int) -> String {
|
||||||
|
if periodInMinutes == 0 {
|
||||||
|
return "Instantly".localize()
|
||||||
|
}
|
||||||
|
|
||||||
|
if periodInMinutes > 0 && periodInMinutes < 60 {
|
||||||
|
return "%@ minutes".localize(String(periodInMinutes))
|
||||||
|
}
|
||||||
|
|
||||||
|
if periodInMinutes >= 60 {
|
||||||
|
return "%@ hours".localize(String(periodInMinutes / 60))
|
||||||
|
}
|
||||||
|
|
||||||
|
return "Never".localize()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
func reorderBanks(from sourceIndices: IndexSet, to destinationIndex: Int) {
|
func reorderBanks(from sourceIndices: IndexSet, to destinationIndex: Int) {
|
||||||
let _ = data.banksSorted.reorder(from: sourceIndices, to: destinationIndex)
|
let _ = data.banksSorted.reorder(from: sourceIndices, to: destinationIndex)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue