app/src/main/java/com/geekorum/ttrss/settings/SettingsActivity.kt
author Da Risk <da_risk@geekorum.com>
Wed, 10 Jun 2020 23:46:12 -0400
changeset 719 9e0087396bff
parent 693 cdc81caa38e8
child 811 7a9d8c146eb9
permissions -rw-r--r--
SettingsActivity: use hilt to inject SettingsActivity
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
 *
611
91b8d76c03cd Update copyrights headers
Da Risk <da_risk@geekorum.com>
parents: 518
diff changeset
     4
 * Copyright (C) 2017-2020 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
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    24
import android.content.Intent
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    25
import android.content.pm.PackageManager
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    26
import android.os.Build
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    27
import android.os.Bundle
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    28
import android.os.StrictMode
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    29
import androidx.appcompat.app.AppCompatDelegate
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    30
import androidx.core.net.toUri
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    31
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
    32
import androidx.fragment.app.commit
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    33
import androidx.lifecycle.Lifecycle
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    34
import androidx.lifecycle.LifecycleEventObserver
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    35
import androidx.preference.ListPreference
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    36
import androidx.preference.Preference
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    37
import androidx.preference.PreferenceFragmentCompat
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    38
import com.geekorum.ttrss.BuildConfig
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    39
import com.geekorum.ttrss.R
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    40
import com.geekorum.ttrss.core.BaseActivity
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    41
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
    42
import com.geekorum.ttrss.debugtools.withStrictMode
719
9e0087396bff SettingsActivity: use hilt to inject SettingsActivity
Da Risk <da_risk@geekorum.com>
parents: 693
diff changeset
    43
import dagger.hilt.android.AndroidEntryPoint
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    44
import javax.inject.Inject
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    45
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    46
719
9e0087396bff SettingsActivity: use hilt to inject SettingsActivity
Da Risk <da_risk@geekorum.com>
parents: 693
diff changeset
    47
@AndroidEntryPoint
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
    48
class SettingsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    49
    lateinit var binding: ActivitySettingsBinding
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    50
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    51
    override fun onCreate(savedInstanceState: Bundle?) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    52
        super.onCreate(savedInstanceState)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    53
        allowDiskReads()
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    54
        binding = DataBindingUtil.setContentView(this, R.layout.activity_settings)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    55
        setSupportActionBar(binding.toolbar)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    56
        supportActionBar!!.setDisplayHomeAsUpEnabled(true)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    57
    }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    58
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    59
    private fun allowDiskReads() {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    60
        val threadPolicy = StrictMode.allowThreadDiskReads()
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    61
        lifecycle.addObserver(LifecycleEventObserver { _, event ->
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    62
            if (event == Lifecycle.Event.ON_DESTROY) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    63
                StrictMode.setThreadPolicy(threadPolicy)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    64
            }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    65
        })
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    66
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    67
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
    68
    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
    69
        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
    70
        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
    71
            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
    72
            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
    73
            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
    74
        }
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
        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
    76
    }
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
    77
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    78
    @TargetApi(Build.VERSION_CODES.HONEYCOMB)
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    79
    class SettingsFragment @Inject constructor(
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    80
        private val packageManager: PackageManager
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    81
    ) : PreferenceFragmentCompat() {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    82
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    83
        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
    84
            withStrictMode(StrictMode.allowThreadDiskReads()) {
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    85
                addPreferencesFromResource(R.xml.pref_general)
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    86
            }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    87
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    88
            findPreference<Preference>(KEY_THEME)!!.apply {
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    89
                summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
    90
                onPreferenceChangeListener = ThemePreferenceListener()
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    91
            }
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    92
            findPreference<ListPreference>(KEY_IN_APP_BROWSER_ENGINE)!!.apply {
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    93
                summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    94
                val inAppBrowser = getInAppBrowserPackages()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    95
                entryValues = inAppBrowser.keys.toTypedArray()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    96
                entries = inAppBrowser.values.toTypedArray()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    97
            }
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    98
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    99
            displayVersion()
0
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
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   102
        private fun displayVersion() {
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   103
            findPreference<Preference>(KEY_ABOUT_VERSION)!!.apply {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   104
                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
   105
                summary = getString(R.string.pref_summary_about_version,
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   106
                    BuildConfig.REPOSITORY_CHANGESET,
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   107
                    BuildConfig.BUILD_TYPE)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   108
            }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   109
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   110
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   111
        private fun getInAppBrowserPackages(): Map<String, CharSequence> {
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   112
            val activityIntent = Intent(Intent.ACTION_VIEW, "http://".toUri())
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   113
            val resolveInfoList =
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   114
                packageManager.queryIntentActivities(activityIntent, PackageManager.MATCH_DEFAULT_ONLY)
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   115
            return resolveInfoList.map { it.activityInfo.packageName to it.loadLabel(packageManager) }.toMap()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   116
        }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   117
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   118
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   119
    private class ThemePreferenceListener : Preference.OnPreferenceChangeListener {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   120
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   121
        override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   122
            val oldValue = (preference as ListPreference).value
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   123
            if (newValue != oldValue) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   124
                val nighMode = Integer.valueOf(newValue as String)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   125
                AppCompatDelegate.setDefaultNightMode(nighMode)
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   126
            }
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   127
            return true
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   128
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   129
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   130
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   131
    companion object {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   132
        const val KEY_THEME = "theme"
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   133
        const val KEY_IN_APP_BROWSER_ENGINE = "in_app_browser_engine"
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   134
        const val KEY_ABOUT_VERSION = "about_version"
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   135
    }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   136
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   137
}