Browse Source

WIP prefs: filters fragment

prefs
charlag 4 years ago
parent
commit
f8dd5c0e9d
No known key found for this signature in database
GPG Key ID: 5B96E7C76F0CA558
  1. 4
      app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesActivity.kt
  2. 8
      app/src/main/java/com/keylesspalace/tusky/components/preference/PreferencesFragment.kt
  3. 63
      app/src/main/java/com/keylesspalace/tusky/components/preference/ProxyPreferencesFragment.kt
  4. 93
      app/src/main/java/com/keylesspalace/tusky/components/preference/TabFilterPreferencesFragment.kt
  5. 4
      app/src/main/java/com/keylesspalace/tusky/di/FragmentBuildersModule.kt
  6. 31
      app/src/main/java/com/keylesspalace/tusky/settings/SettingsDSL.kt

4
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")
}

8
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

63
app/src/main/java/com/keylesspalace/tusky/components/preference/ProxyPreferencesFragment.kt

@ -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 <http://www.gnu.org/licenses>. */
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()
}
}
}

93
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 {

4
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
}

31
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(

Loading…
Cancel
Save