diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt index 54afbd85a..cb3c50ba5 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt @@ -89,10 +89,6 @@ class PreferencesActivity : setTitle(R.string.pref_title_status_tabs) TabFilterPreferencesFragment.newInstance() } - PROXY_PREFERENCES -> { - setTitle(R.string.pref_title_http_proxy_settings) - ProxyPreferencesFragment.newInstance() - } else -> throw IllegalArgumentException("preferenceType not known") } diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt index 978770acb..9111deba7 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt @@ -15,7 +15,6 @@ package com.keylesspalace.tusky.components.preference -import android.content.res.ColorStateList import android.graphics.drawable.Drawable import android.os.Bundle import android.view.LayoutInflater @@ -126,13 +125,6 @@ class PreferencesFragment : Fragment(), Injectable { ) { updatePrefs { data -> data.copy(httpProxyPort = it) } } -// -// editTextPreference { -// setTitle(R.string.pref_title_http_proxy_port) -// key = PrefKeys.HTTP_PROXY_PORT -// isIconSpaceReserved = false -// setSummaryProvider { text } -// } } } return viewRoot diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/ProxyPreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/ProxyPreferencesFragment.kt deleted file mode 100644 index 4640706a5..000000000 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/ProxyPreferencesFragment.kt +++ /dev/null @@ -1,63 +0,0 @@ -/* Copyright 2018 Conny Duck - - * This file is a part of Tusky. - * - * This program is free software; you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation; either version 3 of the - * License, or (at your option) any later version. - * - * Tusky is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even - * the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General - * Public License for more details. - * - * You should have received a copy of the GNU General Public License along with Tusky; if not, - * see . */ - -package com.keylesspalace.tusky.components.preference - -import android.os.Bundle -import androidx.preference.PreferenceFragmentCompat -import kotlin.system.exitProcess - -class ProxyPreferencesFragment : PreferenceFragmentCompat() { - private var pendingRestart = false - - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { -// makePreferenceScreen { -// switchPreference { -// setTitle(R.string.pref_title_http_proxy_enable) -// isIconSpaceReserved = false -// key = PrefKeys.HTTP_PROXY_ENABLED -// setDefaultValue(false) -// } -// -// editTextPreference { -// setTitle(R.string.pref_title_http_proxy_server) -// key = PrefKeys.HTTP_PROXY_SERVER -// isIconSpaceReserved = false -// setSummaryProvider { text } -// } -// -// editTextPreference { -// setTitle(R.string.pref_title_http_proxy_port) -// key = PrefKeys.HTTP_PROXY_PORT -// isIconSpaceReserved = false -// setSummaryProvider { text } -// } -// } - } - - override fun onPause() { - super.onPause() - if (pendingRestart) { - pendingRestart = false - exitProcess(0) - } - } - - companion object { - fun newInstance(): ProxyPreferencesFragment { - return ProxyPreferencesFragment() - } - } -} diff --git a/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt index a45efddb9..14b2fdc32 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt @@ -16,29 +16,80 @@ package com.keylesspalace.tusky.components.preference import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.LinearLayout +import android.widget.ScrollView +import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import androidx.preference.PreferenceFragmentCompat +import com.keylesspalace.tusky.R +import com.keylesspalace.tusky.di.Injectable +import com.keylesspalace.tusky.settings.PrefData +import com.keylesspalace.tusky.settings.PrefStore +import com.keylesspalace.tusky.settings.checkBoxPreference +import com.keylesspalace.tusky.settings.getBlocking +import com.keylesspalace.tusky.settings.makePreferenceScreen +import com.keylesspalace.tusky.settings.preferenceCategory +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext +import javax.inject.Inject -class TabFilterPreferencesFragment : PreferenceFragmentCompat() { - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { -// makePreferenceScreen { -// preferenceCategory(R.string.title_home) { category -> -// category.isIconSpaceReserved = false -// -// checkBoxPreference { -// setTitle(R.string.pref_title_show_boosts) -// key = PrefKeys.TAB_FILTER_HOME_BOOSTS -// setDefaultValue(true) -// isIconSpaceReserved = false -// } -// -// checkBoxPreference { -// setTitle(R.string.pref_title_show_replies) -// key = PrefKeys.TAB_FILTER_HOME_REPLIES -// setDefaultValue(false) -// isIconSpaceReserved = false -// } -// } -// } +class TabFilterPreferencesFragment : Fragment(), Injectable { + @Inject + lateinit var prefStore: PrefStore + + lateinit var prefs: PrefData + private var updateTrigger: (() -> Unit)? = null + + private fun updatePrefs(updater: (PrefData) -> PrefData) { + lifecycleScope.launch { + prefStore.updateData(updater) + } + } + + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View { + val viewRoot = ScrollView(inflater.context) + val rootLayout = LinearLayout(inflater.context).apply { + orientation = LinearLayout.VERTICAL + viewRoot.addView(this) + } + + prefs = prefStore.getBlocking() + lifecycleScope.launch { + prefStore.data.collect { + prefs = it + // trigger update? + withContext(Dispatchers.Main) { + updateTrigger?.invoke() + } + } + } + + updateTrigger = makePreferenceScreen(rootLayout) { + preferenceCategory(R.string.title_home) { + checkBoxPreference( + getString(R.string.pref_title_show_boosts), + { prefs.tabFilterHomeBoosts } + ) { + updatePrefs { data -> data.copy(tabFilterHomeBoosts = it) } + } + checkBoxPreference( + getString(R.string.pref_title_show_replies), + { prefs.tabFilterHomeReplies } + ) { + updatePrefs { data -> data.copy(tabFilterHomeReplies = it) } + } + } + } + + return viewRoot } companion object { diff --git a/app/src/main/java/com/keylesspalace/tusky/di/FragmentBuildersModule.kt b/app/src/main/java/com/keylesspalace/tusky/di/FragmentBuildersModule.kt index b3c5eaf83..75adc977d 100644 --- a/app/src/main/java/com/keylesspalace/tusky/di/FragmentBuildersModule.kt +++ b/app/src/main/java/com/keylesspalace/tusky/di/FragmentBuildersModule.kt @@ -22,6 +22,7 @@ import com.keylesspalace.tusky.components.instancemute.fragment.InstanceListFrag import com.keylesspalace.tusky.components.preference.AccountPreferencesFragment import com.keylesspalace.tusky.components.preference.NotificationPreferencesFragment import com.keylesspalace.tusky.components.preference.PreferencesFragment +import com.keylesspalace.tusky.components.preference.TabFilterPreferencesFragment import com.keylesspalace.tusky.components.report.fragments.ReportDoneFragment import com.keylesspalace.tusky.components.report.fragments.ReportNoteFragment import com.keylesspalace.tusky.components.report.fragments.ReportStatusesFragment @@ -91,4 +92,7 @@ abstract class FragmentBuildersModule { @ContributesAndroidInjector abstract fun preferencesFragment(): PreferencesFragment + + @ContributesAndroidInjector + abstract fun tabFilterPreferencesFragment(): TabFilterPreferencesFragment } diff --git a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsDSL.kt b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsDSL.kt index 7c3f6ac3f..a3f990c52 100644 --- a/app/src/main/java/com/keylesspalace/tusky/settings/SettingsDSL.kt +++ b/app/src/main/java/com/keylesspalace/tusky/settings/SettingsDSL.kt @@ -9,7 +9,6 @@ import android.view.ViewGroup import android.widget.CheckBox import android.widget.EditText import android.widget.FrameLayout -import android.widget.ImageView import android.widget.LinearLayout import android.widget.TextView import androidx.annotation.StringRes @@ -46,24 +45,28 @@ private fun itemLayout(context: Context): LinearLayout { } fun PreferenceParent.checkBoxPreference( - text: String, - selected: Boolean, + title: String, + selected: () -> Boolean, onSelection: (Boolean) -> Unit ) { - val layout = itemLayout(context) + val layout = inflateItemLayout().apply { + setTitle(title) + setShowSummary(false) + } - val textView = TextView(context) - textView.text = text - layout.addView(textView) + layout.root.setOnClickListener { + onSelection(!selected()) + } + val checkbox = CheckBox(context).apply { + setOnCheckedChangeListener { _, isChecked -> onSelection(isChecked) } + } + layout.prefCutomContainer.addView(checkbox) - val checkbox = CheckBox(context) - layout.addView(checkbox) - checkbox.isSelected = selected + registerUpdate { + checkbox.isChecked = selected() + } - // TODO listener -// builder(pref) -// addPref(pref) - addPref(layout) + addPref(layout.root) } fun PreferenceParent.clickPreference(