Skip to content
Snippets Groups Projects
Commit e18070d4 authored by Janne Mareike Koschinski's avatar Janne Mareike Koschinski
Browse files

Implement settings with theming

parent 87883d43
No related branches found
No related tags found
No related merge requests found
Showing
with 244 additions and 47 deletions
...@@ -98,6 +98,8 @@ dependencies { ...@@ -98,6 +98,8 @@ dependencies {
implementation("com.android.support", "customtabs", version) implementation("com.android.support", "customtabs", version)
implementation("com.android.support", "cardview-v7", version) implementation("com.android.support", "cardview-v7", version)
implementation("com.android.support", "recyclerview-v7", version) implementation("com.android.support", "recyclerview-v7", version)
implementation("com.android.support", "preference-v7", version)
implementation("com.android.support", "preference-v14", version)
} }
implementation("com.android.support.constraint", "constraint-layout", "1.0.2") implementation("com.android.support.constraint", "constraint-layout", "1.0.2")
... ...
......
...@@ -28,6 +28,12 @@ ...@@ -28,6 +28,12 @@
android:label="@string/app_name" android:label="@string/app_name"
android:parentActivityName=".ui.setup.accounts.AccountSelectionActivity" android:parentActivityName=".ui.setup.accounts.AccountSelectionActivity"
android:windowSoftInputMode="adjustResize" /> android:windowSoftInputMode="adjustResize" />
<activity
android:name=".ui.settings.SettingsActivity"
android:exported="false"
android:label="@string/app_name"
android:parentActivityName=".ui.chat.ChatActivity"
android:windowSoftInputMode="adjustResize" />
<activity <activity
android:name=".ui.setup.accounts.AccountSelectionActivity" android:name=".ui.setup.accounts.AccountSelectionActivity"
android:exported="true" android:exported="true"
... ...
......
...@@ -27,6 +27,9 @@ class QuasseldroidNG : Application() { ...@@ -27,6 +27,9 @@ class QuasseldroidNG : Application() {
AndroidThreeTenBackport.init(this) AndroidThreeTenBackport.init(this)
// Initialize preferences unless already set
android.support.v7.preference.PreferenceManager.setDefaultValues(this, R.xml.preferences, false)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
systemService<ShortcutManager>().dynamicShortcuts = listOf( systemService<ShortcutManager>().dynamicShortcuts = listOf(
ShortcutInfo.Builder(this, "id1") ShortcutInfo.Builder(this, "id1")
... ...
......
...@@ -4,6 +4,7 @@ import android.app.Activity ...@@ -4,6 +4,7 @@ import android.app.Activity
import android.arch.lifecycle.Observer import android.arch.lifecycle.Observer
import android.arch.lifecycle.ViewModelProviders import android.arch.lifecycle.ViewModelProviders
import android.content.Context import android.content.Context
import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.support.design.widget.Snackbar import android.support.design.widget.Snackbar
import android.support.v4.widget.DrawerLayout import android.support.v4.widget.DrawerLayout
...@@ -22,6 +23,7 @@ import de.kuschku.quasseldroid_ng.Keys ...@@ -22,6 +23,7 @@ import de.kuschku.quasseldroid_ng.Keys
import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.persistence.AccountDatabase import de.kuschku.quasseldroid_ng.persistence.AccountDatabase
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
import de.kuschku.quasseldroid_ng.ui.settings.SettingsActivity
import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings
import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
...@@ -195,6 +197,10 @@ class ChatActivity : ServiceBoundActivity() { ...@@ -195,6 +197,10 @@ class ChatActivity : ServiceBoundActivity() {
} }
true true
} }
R.id.settings -> {
startActivity(Intent(applicationContext, SettingsActivity::class.java))
true
}
R.id.disconnect -> { R.id.disconnect -> {
handler.post { handler.post {
getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE).editApply { getSharedPreferences(Keys.Status.NAME, Context.MODE_PRIVATE).editApply {
... ...
......
...@@ -11,6 +11,7 @@ import android.view.ViewGroup ...@@ -11,6 +11,7 @@ import android.view.ViewGroup
import butterknife.BindView import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.ui.settings.Settings
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
...@@ -27,18 +28,14 @@ class NickListFragment : ServiceBoundFragment() { ...@@ -27,18 +28,14 @@ class NickListFragment : ServiceBoundFragment() {
lateinit var nickList: RecyclerView lateinit var nickList: RecyclerView
private var ircFormatDeserializer: IrcFormatDeserializer? = null private var ircFormatDeserializer: IrcFormatDeserializer? = null
private val renderingSettings = AppearanceSettings( private lateinit var appearanceSettings: AppearanceSettings
showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
colorizeMirc = true,
timeFormat = ""
)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
handlerThread.onCreate() handlerThread.onCreate()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java] viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
appearanceSettings = Settings.appearance(activity!!)
if (ircFormatDeserializer == null) { if (ircFormatDeserializer == null) {
ircFormatDeserializer = IrcFormatDeserializer(context!!) ircFormatDeserializer = IrcFormatDeserializer(context!!)
...@@ -56,7 +53,7 @@ class NickListFragment : ServiceBoundFragment() { ...@@ -56,7 +53,7 @@ class NickListFragment : ServiceBoundFragment() {
it.map { it.map {
it.copy( it.copy(
realname = ircFormatDeserializer?.formatString( realname = ircFormatDeserializer?.formatString(
it.realname.toString(), renderingSettings.colorizeMirc it.realname.toString(), appearanceSettings.colorizeMirc
) ?: it.realname ) ?: it.realname
) )
} }
... ...
......
...@@ -14,6 +14,7 @@ import de.kuschku.libquassel.quassel.BufferInfo ...@@ -14,6 +14,7 @@ import de.kuschku.libquassel.quassel.BufferInfo
import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork import de.kuschku.libquassel.quassel.syncables.interfaces.INetwork
import de.kuschku.libquassel.util.hasFlag import de.kuschku.libquassel.util.hasFlag
import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.ui.settings.Settings
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
import de.kuschku.quasseldroid_ng.util.helper.visibleIf import de.kuschku.quasseldroid_ng.util.helper.visibleIf
...@@ -32,12 +33,7 @@ class ToolbarFragment : ServiceBoundFragment() { ...@@ -32,12 +33,7 @@ class ToolbarFragment : ServiceBoundFragment() {
private lateinit var viewModel: QuasselViewModel private lateinit var viewModel: QuasselViewModel
private var ircFormatDeserializer: IrcFormatDeserializer? = null private var ircFormatDeserializer: IrcFormatDeserializer? = null
private val appearanceSettings = AppearanceSettings( private lateinit var appearanceSettings: AppearanceSettings
showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
colorizeMirc = true,
timeFormat = ""
)
var title: CharSequence? var title: CharSequence?
get() = toolbarTitle.text get() = toolbarTitle.text
...@@ -59,6 +55,7 @@ class ToolbarFragment : ServiceBoundFragment() { ...@@ -59,6 +55,7 @@ class ToolbarFragment : ServiceBoundFragment() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java] viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
appearanceSettings = Settings.appearance(activity!!)
if (ircFormatDeserializer == null) { if (ircFormatDeserializer == null) {
ircFormatDeserializer = IrcFormatDeserializer(context!!) ircFormatDeserializer = IrcFormatDeserializer(context!!)
... ...
......
...@@ -11,6 +11,7 @@ import butterknife.BindView ...@@ -11,6 +11,7 @@ import butterknife.BindView
import butterknife.ButterKnife import butterknife.ButterKnife
import de.kuschku.libquassel.protocol.BufferId import de.kuschku.libquassel.protocol.BufferId
import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.ui.settings.Settings
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
...@@ -33,18 +34,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() { ...@@ -33,18 +34,14 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
private lateinit var viewModel: QuasselViewModel private lateinit var viewModel: QuasselViewModel
private var ircFormatDeserializer: IrcFormatDeserializer? = null private var ircFormatDeserializer: IrcFormatDeserializer? = null
private val renderingSettings = AppearanceSettings( private lateinit var appearanceSettings: AppearanceSettings
showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
colorizeMirc = true,
timeFormat = ""
)
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
handlerThread.onCreate() handlerThread.onCreate()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java] viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
appearanceSettings = Settings.appearance(activity!!)
if (ircFormatDeserializer == null) { if (ircFormatDeserializer == null) {
ircFormatDeserializer = IrcFormatDeserializer(context!!) ircFormatDeserializer = IrcFormatDeserializer(context!!)
...@@ -77,7 +74,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() { ...@@ -77,7 +74,7 @@ class BufferViewConfigFragment : ServiceBoundFragment() {
it.map { it.map {
it.copy( it.copy(
description = ircFormatDeserializer?.formatString( description = ircFormatDeserializer?.formatString(
it.description.toString(), renderingSettings.colorizeMirc it.description.toString(), appearanceSettings.colorizeMirc
) ?: it.description ) ?: it.description
) )
} }
... ...
......
...@@ -15,6 +15,7 @@ import de.kuschku.quasseldroid_ng.util.helper.getOrPut ...@@ -15,6 +15,7 @@ import de.kuschku.quasseldroid_ng.util.helper.getOrPut
class MessageAdapter( class MessageAdapter(
context: Context, context: Context,
appearanceSettings: AppearanceSettings,
var markerLinePosition: Pair<MsgId, MsgId>? = null var markerLinePosition: Pair<MsgId, MsgId>? = null
) : PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>( ) : PagedListAdapter<QuasselDatabase.DatabaseMessage, QuasselMessageViewHolder>(
object : DiffCallback<QuasselDatabase.DatabaseMessage>() { object : DiffCallback<QuasselDatabase.DatabaseMessage>() {
...@@ -31,12 +32,7 @@ class MessageAdapter( ...@@ -31,12 +32,7 @@ class MessageAdapter(
) { ) {
private val messageRenderer: MessageRenderer = QuasselMessageRenderer( private val messageRenderer: MessageRenderer = QuasselMessageRenderer(
context, context,
AppearanceSettings( appearanceSettings
showPrefix = AppearanceSettings.ShowPrefixMode.FIRST,
colorizeNicknames = AppearanceSettings.ColorizeNicknamesMode.ALL_BUT_MINE,
colorizeMirc = true,
timeFormat = ""
)
) )
private val messageCache = LruCache<Int, FormattedMessage>(512) private val messageCache = LruCache<Int, FormattedMessage>(512)
... ...
......
...@@ -18,6 +18,8 @@ import de.kuschku.libquassel.protocol.MsgId ...@@ -18,6 +18,8 @@ import de.kuschku.libquassel.protocol.MsgId
import de.kuschku.libquassel.quassel.syncables.BufferSyncer import de.kuschku.libquassel.quassel.syncables.BufferSyncer
import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase import de.kuschku.quasseldroid_ng.persistence.QuasselDatabase
import de.kuschku.quasseldroid_ng.ui.settings.Settings
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings
import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel import de.kuschku.quasseldroid_ng.ui.viewmodel.QuasselViewModel
import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread import de.kuschku.quasseldroid_ng.util.AndroidHandlerThread
...@@ -32,6 +34,7 @@ class MessageListFragment : ServiceBoundFragment() { ...@@ -32,6 +34,7 @@ class MessageListFragment : ServiceBoundFragment() {
lateinit var scrollDown: FloatingActionButton lateinit var scrollDown: FloatingActionButton
private lateinit var viewModel: QuasselViewModel private lateinit var viewModel: QuasselViewModel
private lateinit var appearanceSettings: AppearanceSettings
private val handler = AndroidHandlerThread("Chat") private val handler = AndroidHandlerThread("Chat")
...@@ -48,6 +51,7 @@ class MessageListFragment : ServiceBoundFragment() { ...@@ -48,6 +51,7 @@ class MessageListFragment : ServiceBoundFragment() {
handler.onCreate() handler.onCreate()
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java] viewModel = ViewModelProviders.of(activity!!)[QuasselViewModel::class.java]
appearanceSettings = Settings.appearance(activity!!)
setHasOptionsMenu(true) setHasOptionsMenu(true)
} }
...@@ -65,7 +69,7 @@ class MessageListFragment : ServiceBoundFragment() { ...@@ -65,7 +69,7 @@ class MessageListFragment : ServiceBoundFragment() {
linearLayoutManager = LinearLayoutManager(context) linearLayoutManager = LinearLayoutManager(context)
linearLayoutManager.reverseLayout = true linearLayoutManager.reverseLayout = true
adapter = MessageAdapter(context!!) adapter = MessageAdapter(context!!, appearanceSettings)
messageList.adapter = adapter messageList.adapter = adapter
messageList.layoutManager = linearLayoutManager messageList.layoutManager = linearLayoutManager
messageList.itemAnimator = null messageList.itemAnimator = null
... ...
......
...@@ -4,7 +4,6 @@ import android.content.Context ...@@ -4,7 +4,6 @@ import android.content.Context
import android.graphics.Typeface import android.graphics.Typeface
import android.text.SpannableString import android.text.SpannableString
import android.text.Spanned import android.text.Spanned
import android.text.format.DateFormat
import android.text.style.ForegroundColorSpan import android.text.style.ForegroundColorSpan
import android.text.style.StyleSpan import android.text.style.StyleSpan
import android.text.style.URLSpan import android.text.style.URLSpan
...@@ -26,19 +25,24 @@ import de.kuschku.quasseldroid_ng.util.ui.SpanFormatter ...@@ -26,19 +25,24 @@ import de.kuschku.quasseldroid_ng.util.ui.SpanFormatter
import org.intellij.lang.annotations.Language import org.intellij.lang.annotations.Language
import org.threeten.bp.ZoneId import org.threeten.bp.ZoneId
import org.threeten.bp.format.DateTimeFormatter import org.threeten.bp.format.DateTimeFormatter
import java.text.SimpleDateFormat
class QuasselMessageRenderer( class QuasselMessageRenderer(
private val context: Context, private val context: Context,
private val appearanceSettings: AppearanceSettings private val appearanceSettings: AppearanceSettings
) : MessageRenderer { ) : MessageRenderer {
private val timeFormatter = DateTimeFormatter.ofPattern( private val timeFormatter = DateTimeFormatter.ofPattern(
if (appearanceSettings.timeFormat.isNotBlank()) { timePattern(appearanceSettings.showSeconds, appearanceSettings.use24hClock)
appearanceSettings.timeFormat
} else {
(DateFormat.getTimeFormat(context) as SimpleDateFormat).toLocalizedPattern()
}
) )
private fun timePattern(showSeconds: Boolean,
use24hClock: Boolean) = when (use24hClock to showSeconds) {
false to true -> "hh:mm:ss a"
false to false -> "hh:mm a"
true to true -> "HH:mm:ss"
else -> "HH:mm"
}
private lateinit var senderColors: IntArray private lateinit var senderColors: IntArray
private val zoneId = ZoneId.systemDefault() private val zoneId = ZoneId.systemDefault()
...@@ -325,7 +329,7 @@ class QuasselMessageRenderer( ...@@ -325,7 +329,7 @@ class QuasselMessageRenderer(
private fun formatPrefix(prefix: String, private fun formatPrefix(prefix: String,
highlight: Boolean) = when (appearanceSettings.showPrefix) { highlight: Boolean) = when (appearanceSettings.showPrefix) {
ShowPrefixMode.ALL -> prefix ShowPrefixMode.ALL -> prefix
ShowPrefixMode.FIRST -> prefix.substring(0, Math.min(prefix.length, 1)) ShowPrefixMode.HIGHEST -> prefix.substring(0, Math.min(prefix.length, 1))
ShowPrefixMode.NONE -> "" ShowPrefixMode.NONE -> ""
} }
} }
\ No newline at end of file
package de.kuschku.quasseldroid_ng.ui.settings package de.kuschku.quasseldroid_ng.ui.settings
import android.content.Context import android.content.Context
import android.content.SharedPreferences
import android.preference.PreferenceManager
import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings.*
import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings import de.kuschku.quasseldroid_ng.ui.settings.data.BacklogSettings
object Settings { object Settings {
fun appearance(context: Context) = AppearanceSettings() private fun <T> settings(context: Context,
fun backlog(context: Context) = BacklogSettings() f: SharedPreferences.() -> T) = PreferenceManager.getDefaultSharedPreferences(
context
).f()
fun appearance(context: Context) = settings(context) {
AppearanceSettings(
theme = Theme.valueOf(
getString(
context.getString(R.string.preference_theme_key),
AppearanceSettings.DEFAULT.theme.name
)
),
showPrefix = ShowPrefixMode.valueOf(
getString(
context.getString(R.string.preference_show_prefix_key),
AppearanceSettings.DEFAULT.showPrefix.name
)
),
colorizeNicknames = ColorizeNicknamesMode.valueOf(
getString(
context.getString(R.string.preference_colorize_nicknames_key),
AppearanceSettings.DEFAULT.colorizeNicknames.name
)
),
colorizeMirc = getBoolean(
context.getString(R.string.preference_colorize_mirc_key),
AppearanceSettings.DEFAULT.colorizeMirc
),
showSeconds = getBoolean(
context.getString(R.string.preference_show_seconds_key),
AppearanceSettings.DEFAULT.showSeconds
),
use24hClock = getBoolean(
context.getString(R.string.preference_use_24h_clock_key),
AppearanceSettings.DEFAULT.use24hClock
),
showLag = getBoolean(
context.getString(R.string.preference_show_lag_key),
AppearanceSettings.DEFAULT.showLag
)
)
}
fun backlog(context: Context) = settings(context) {
BacklogSettings(
)
}
} }
\ No newline at end of file
package de.kuschku.quasseldroid_ng.ui.settings
import android.os.Bundle
import android.support.v7.widget.Toolbar
import butterknife.BindView
import butterknife.ButterKnife
import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.util.service.ServiceBoundActivity
class SettingsActivity : ServiceBoundActivity() {
@BindView(R.id.toolbar)
lateinit var toolbar: Toolbar
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_settings)
ButterKnife.bind(this)
setSupportActionBar(toolbar)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
}
\ No newline at end of file
package de.kuschku.quasseldroid_ng.ui.settings
import android.content.SharedPreferences
import android.os.Bundle
import android.support.v7.preference.ListPreference
import android.support.v7.preference.Preference
import android.support.v7.preference.PreferenceFragmentCompat
import android.support.v7.preference.PreferenceGroup
import de.kuschku.quasseldroid_ng.R
import de.kuschku.quasseldroid_ng.ui.settings.data.AppearanceSettings
class SettingsFragment : PreferenceFragmentCompat(),
SharedPreferences.OnSharedPreferenceChangeListener {
var appearanceSettings: AppearanceSettings? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
appearanceSettings = Settings.appearance(context!!)
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.preferences, rootKey)
}
override fun onStart() {
super.onStart()
preferenceScreen.sharedPreferences.registerOnSharedPreferenceChangeListener(this)
initSummary(preferenceScreen)
}
override fun onStop() {
preferenceScreen.sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
super.onStop()
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
updateSummary(findPreference(key))
if (appearanceSettings?.theme != null &&
appearanceSettings?.theme != Settings.appearance(context!!).theme) {
activity?.recreate()
}
}
fun updateSummary(preference: Preference) {
if (preference is ListPreference) {
preference.summary = preference.entry
}
}
fun initSummary(preference: Preference) {
if (preference is PreferenceGroup) {
(0 until preference.preferenceCount).map(preference::getPreference).forEach(::initSummary)
} else {
updateSummary(preference)
}
}
}
\ No newline at end of file
...@@ -4,10 +4,11 @@ import android.support.annotation.StyleRes ...@@ -4,10 +4,11 @@ import android.support.annotation.StyleRes
import de.kuschku.quasseldroid_ng.R import de.kuschku.quasseldroid_ng.R
data class AppearanceSettings( data class AppearanceSettings(
val showPrefix: ShowPrefixMode = ShowPrefixMode.FIRST, val showPrefix: ShowPrefixMode = ShowPrefixMode.HIGHEST,
val colorizeNicknames: ColorizeNicknamesMode = ColorizeNicknamesMode.ALL_BUT_MINE, val colorizeNicknames: ColorizeNicknamesMode = ColorizeNicknamesMode.ALL_BUT_MINE,
val colorizeMirc: Boolean = true, val colorizeMirc: Boolean = true,
val timeFormat: String = "", val showSeconds: Boolean = false,
val use24hClock: Boolean = true,
val showLag: Boolean = true, val showLag: Boolean = true,
val theme: Theme = Theme.QUASSEL_LIGHT val theme: Theme = Theme.QUASSEL_LIGHT
) { ) {
...@@ -19,15 +20,19 @@ data class AppearanceSettings( ...@@ -19,15 +20,19 @@ data class AppearanceSettings(
enum class ShowPrefixMode { enum class ShowPrefixMode {
ALL, ALL,
FIRST, HIGHEST,
NONE NONE
} }
enum class Theme(@StyleRes val style: Int) { enum class Theme(@StyleRes val style: Int) {
QUASSEL_LIGHT(R.style.Theme_ChatTheme_Quassel_Light), QUASSEL_LIGHT(R.style.Theme_ChatTheme_Quassel_Light),
QUASSEL_DARK(R.style.Theme_ChatTheme_Quassel_Dark), QUASSEL_DARK(R.style.Theme_ChatTheme_Quassel_Dark),
AMOLED(R.style.Theme_ChatTheme_Amoled),
SOLARIZED_LIGHT(R.style.Theme_ChatTheme_Solarized_Light), SOLARIZED_LIGHT(R.style.Theme_ChatTheme_Solarized_Light),
SOLARIZED_DARK(R.style.Theme_ChatTheme_Solarized_Dark), SOLARIZED_DARK(R.style.Theme_ChatTheme_Solarized_Dark)
AMOLED(R.style.Theme_ChatTheme_Amoled) }
companion object {
val DEFAULT = AppearanceSettings()
} }
} }
\ No newline at end of file
...@@ -2,4 +2,8 @@ package de.kuschku.quasseldroid_ng.ui.settings.data ...@@ -2,4 +2,8 @@ package de.kuschku.quasseldroid_ng.ui.settings.data
data class BacklogSettings( data class BacklogSettings(
val dynamicAmount: Int = 20 val dynamicAmount: Int = 20
) ) {
\ No newline at end of file companion object {
val DEFAULT = BacklogSettings()
}
}
\ No newline at end of file
...@@ -60,6 +60,7 @@ abstract class SetupActivity : AppCompatActivity() { ...@@ -60,6 +60,7 @@ abstract class SetupActivity : AppCompatActivity() {
else else
R.drawable.ic_arrow_right R.drawable.ic_arrow_right
button.setImageResource(drawable) button.setImageResource(drawable)
currentPage.value?.requestFocus()
} }
fun updateRecentsHeader() fun updateRecentsHeader()
... ...
......
...@@ -69,6 +69,10 @@ abstract class SlideFragment : Fragment() { ...@@ -69,6 +69,10 @@ abstract class SlideFragment : Fragment() {
abstract fun getData(data: Bundle) abstract fun getData(data: Bundle)
var initData: Bundle? = null var initData: Bundle? = null
fun requestFocus() {
this.view?.requestFocus()
}
protected abstract fun onCreateContent(inflater: LayoutInflater, container: ViewGroup?, protected abstract fun onCreateContent(inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?): View savedInstanceState: Bundle?): View
} }
...@@ -24,6 +24,7 @@ abstract class ServiceBoundActivity : AppCompatActivity() { ...@@ -24,6 +24,7 @@ abstract class ServiceBoundActivity : AppCompatActivity() {
protected lateinit var appearanceSettings: AppearanceSettings protected lateinit var appearanceSettings: AppearanceSettings
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
connection.context = this connection.context = this
appearanceSettings = Settings.appearance(this) appearanceSettings = Settings.appearance(this)
setTheme(appearanceSettings.theme.style) setTheme(appearanceSettings.theme.style)
...@@ -41,6 +42,9 @@ abstract class ServiceBoundActivity : AppCompatActivity() { ...@@ -41,6 +42,9 @@ abstract class ServiceBoundActivity : AppCompatActivity() {
} }
override fun onStart() { override fun onStart() {
if (Settings.appearance(this) != appearanceSettings) {
recreate()
}
connection.bind() connection.bind()
super.onStart() super.onStart()
} }
... ...
......
...@@ -4,8 +4,7 @@ ...@@ -4,8 +4,7 @@
android:id="@+id/drawerLayout" android:id="@+id/drawerLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:fitsSystemWindows="true" android:fitsSystemWindows="true">
tools:theme="@style/Theme.ChatTheme.Quassel_Light">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
... ...
......
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="?attr/actionBarTheme">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:contentInsetStartWithNavigation="0dp"
app:popupTheme="@style/Widget.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<fragment
android:id="@+id/settingsFragment"
android:name="de.kuschku.quasseldroid_ng.ui.settings.SettingsFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
tools:layout="@xml/preferences" />
</LinearLayout>
</android.support.v4.widget.DrawerLayout>
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment