app/src/main/java/com/geekorum/ttrss/settings/SettingsActivity.kt
author Da Risk <da_risk@geekorum.com>
Thu, 05 Sep 2019 13:25:19 -0700
changeset 433 303a07578704
parent 301 6cc00cfd0880
child 518 7749ede46361
permissions -rw-r--r--
Settings: update to androidx.preferences-1.1.0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
     1
/*
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     2
 * Geekttrss is a RSS feed reader application on the Android Platform.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     3
 *
137
5464f07a306c Update copyright headers for 2019
Da Risk <da_risk@geekorum.com>
parents: 134
diff changeset
     4
 * Copyright (C) 2017-2019 by Frederic-Charles Barthelery.
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     5
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     6
 * This file is part of Geekttrss.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     7
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     8
 * Geekttrss is free software: you can redistribute it and/or modify
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
     9
 * it under the terms of the GNU General Public License as published by
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    10
 * the Free Software Foundation, either version 3 of the License, or
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    11
 * (at your option) any later version.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    12
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    13
 * Geekttrss is distributed in the hope that it will be useful,
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    16
 * GNU General Public License for more details.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    17
 *
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    18
 * You should have received a copy of the GNU General Public License
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    19
 * along with Geekttrss.  If not, see <http://www.gnu.org/licenses/>.
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    20
 */
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    21
package com.geekorum.ttrss.settings
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    22
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    23
import android.annotation.TargetApi
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    24
import android.os.Build
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    25
import android.os.Bundle
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    26
import android.os.StrictMode
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    27
import androidx.appcompat.app.AppCompatDelegate
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    28
import androidx.databinding.DataBindingUtil
192
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    29
import androidx.fragment.app.commit
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    30
import androidx.lifecycle.Lifecycle
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    31
import androidx.lifecycle.LifecycleEventObserver
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    32
import androidx.preference.ListPreference
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    33
import androidx.preference.Preference
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    34
import androidx.preference.PreferenceFragmentCompat
182
3834e769a878 Fix Dependency injection for unit tests
Da Risk <da_risk@geekorum.com>
parents: 137
diff changeset
    35
import com.geekorum.ttrss.BaseActivity
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    36
import com.geekorum.ttrss.BuildConfig
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    37
import com.geekorum.ttrss.R
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    38
import com.geekorum.ttrss.databinding.ActivitySettingsBinding
246
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    39
import com.geekorum.ttrss.debugtools.withStrictMode
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    40
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    41
192
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    42
class SettingsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    43
    lateinit var binding: ActivitySettingsBinding
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    44
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    45
    override fun onCreate(savedInstanceState: Bundle?) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    46
        super.onCreate(savedInstanceState)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    47
        allowDiskReads()
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    48
        binding = DataBindingUtil.setContentView(this, R.layout.activity_settings)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    49
        setSupportActionBar(binding.toolbar)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    50
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)
192
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    51
        if (savedInstanceState == null) {
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    52
            supportFragmentManager.commit {
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    53
                replace(R.id.preferences_container, SettingsFragment())
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    54
            }
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    55
        }
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    56
    }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    57
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    58
    private fun allowDiskReads() {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    59
        val threadPolicy = StrictMode.allowThreadDiskReads()
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    60
        lifecycle.addObserver(LifecycleEventObserver { _, event ->
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    61
            if (event == Lifecycle.Event.ON_DESTROY) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    62
                StrictMode.setThreadPolicy(threadPolicy)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    63
            }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    64
        })
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    65
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    66
192
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    67
    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    68
        val fragmentClass = pref.fragment
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    69
        supportFragmentManager.commit {
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    70
            val fragment = daggerDelegateFragmentFactory.instantiate(classLoader, fragmentClass)
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    71
            addToBackStack("preferences_screen")
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    72
            replace(R.id.preferences_container, fragment)
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    73
        }
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    74
        return true
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    75
    }
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    76
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    77
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    78
    class SettingsFragment : PreferenceFragmentCompat() {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    79
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    80
        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
246
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    81
            withStrictMode(StrictMode.allowThreadDiskReads()) {
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    82
                addPreferencesFromResource(R.xml.pref_general)
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    83
            }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    84
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    85
            findPreference<Preference>(KEY_THEME)!!.apply {
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    86
                summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    87
                onPreferenceChangeListener = ThemePreferenceListener()
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    88
            }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    89
            displayVersion()
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    90
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    91
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    92
        private fun displayVersion() {
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    93
            findPreference<Preference>(KEY_ABOUT_VERSION)!!.apply {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    94
                title = getString(R.string.pref_title_about_version, BuildConfig.VERSION_NAME)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    95
                summary = getString(R.string.pref_summary_about_version,
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    96
                    BuildConfig.REPOSITORY_CHANGESET,
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    97
                    BuildConfig.BUILD_TYPE)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    98
            }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    99
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   100
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   101
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   102
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   103
    private class ThemePreferenceListener : Preference.OnPreferenceChangeListener {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   104
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   105
        override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   106
            val oldValue = (preference as ListPreference).value
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   107
            if (newValue != oldValue) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   108
                val nighMode = Integer.valueOf(newValue as String)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   109
                AppCompatDelegate.setDefaultNightMode(nighMode)
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   110
            }
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   111
            return true
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   112
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   113
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   114
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   115
    companion object {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   116
        const val KEY_THEME = "theme"
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   117
        const val KEY_ABOUT_VERSION = "about_version"
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   118
    }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   119
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   120
}