app/src/main/java/com/geekorum/ttrss/settings/SettingsActivity.kt
author Da Risk <da_risk@geekorum.com>
Mon, 13 Nov 2023 18:38:23 -0400
changeset 1152 589b91dd663f
parent 1149 6908dfcbc3ca
child 1174 731f6ee517b6
permissions -rw-r--r--
app: remove a few deprecated method calls
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
 *
943
298742859784 build: update license headers
Da Risk <da_risk@geekorum.com>
parents: 883
diff changeset
     4
 * Copyright (C) 2017-2023 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
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    23
import android.content.Intent
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    24
import android.content.pm.PackageManager
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
    25
import android.content.res.Configuration
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    26
import android.os.Bundle
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    27
import android.os.StrictMode
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    28
import androidx.activity.compose.setContent
1148
e27fcdf4a50e app: use enableEdgeToEdge() instead of WindowsCompat.setFitsSystemWindows()
Da Risk <da_risk@geekorum.com>
parents: 1111
diff changeset
    29
import androidx.activity.enableEdgeToEdge
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    30
import androidx.appcompat.app.AppCompatDelegate
811
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
    31
import androidx.browser.customtabs.CustomTabsService
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    32
import androidx.compose.foundation.background
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    33
import androidx.compose.foundation.layout.*
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    34
import androidx.compose.material.icons.Icons
1152
589b91dd663f app: remove a few deprecated method calls
Da Risk <da_risk@geekorum.com>
parents: 1149
diff changeset
    35
import androidx.compose.material.icons.automirrored.filled.ArrowBack
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
    36
import androidx.compose.material3.*
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    37
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    38
import androidx.compose.material3.windowsizeclass.WindowSizeClass
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    39
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    40
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    41
import androidx.compose.runtime.Composable
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    42
import androidx.compose.ui.Alignment
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    43
import androidx.compose.ui.Modifier
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
    44
import androidx.compose.ui.input.nestedscroll.nestedScroll
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    45
import androidx.compose.ui.platform.testTag
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    46
import androidx.compose.ui.res.stringResource
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
    47
import androidx.compose.ui.tooling.preview.Devices
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    48
import androidx.compose.ui.tooling.preview.Preview
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    49
import androidx.compose.ui.unit.DpSize
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    50
import androidx.compose.ui.unit.dp
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    51
import androidx.compose.ui.viewinterop.AndroidViewBinding
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
    52
import androidx.core.net.toUri
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
    53
import androidx.fragment.app.commit
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    54
import androidx.lifecycle.Lifecycle
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    55
import androidx.lifecycle.LifecycleEventObserver
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    56
import androidx.preference.ListPreference
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    57
import androidx.preference.Preference
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    58
import androidx.preference.PreferenceFragmentCompat
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    59
import com.geekorum.ttrss.BuildConfig
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    60
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
    61
import com.geekorum.ttrss.core.BaseActivity
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    62
import com.geekorum.ttrss.databinding.SettingsPreferencesContainerBinding
246
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
    63
import com.geekorum.ttrss.debugtools.withStrictMode
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
    64
import com.geekorum.ttrss.ui.AppTheme3
719
9e0087396bff SettingsActivity: use hilt to inject SettingsActivity
Da Risk <da_risk@geekorum.com>
parents: 693
diff changeset
    65
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
    66
import javax.inject.Inject
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    67
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    68
719
9e0087396bff SettingsActivity: use hilt to inject SettingsActivity
Da Risk <da_risk@geekorum.com>
parents: 693
diff changeset
    69
@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
    70
class SettingsActivity : BaseActivity(), PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    71
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    72
    @OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    73
    override fun onCreate(savedInstanceState: Bundle?) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    74
        super.onCreate(savedInstanceState)
1148
e27fcdf4a50e app: use enableEdgeToEdge() instead of WindowsCompat.setFitsSystemWindows()
Da Risk <da_risk@geekorum.com>
parents: 1111
diff changeset
    75
        enableEdgeToEdge()
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    76
        allowDiskReads()
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    77
        setContent {
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
    78
            AppTheme3 {
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    79
                SettingsScreen(windowSizeClass = calculateWindowSizeClass(activity = this@SettingsActivity),
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    80
                    onNavigateUpClick = {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    81
                        onSupportNavigateUp()
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    82
                    })
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    83
            }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    84
        }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    85
    }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    86
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    87
    override fun onSupportNavigateUp(): Boolean {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    88
        if (supportFragmentManager.backStackEntryCount == 0) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    89
            return super.onSupportNavigateUp()
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    90
        }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    91
        supportFragmentManager.popBackStack()
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
    92
        return true
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    93
    }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
    94
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    95
    private fun allowDiskReads() {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    96
        val threadPolicy = StrictMode.allowThreadDiskReads()
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    97
        lifecycle.addObserver(LifecycleEventObserver { _, event ->
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    98
            if (event == Lifecycle.Event.ON_DESTROY) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
    99
                StrictMode.setThreadPolicy(threadPolicy)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   100
            }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   101
        })
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   102
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   103
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
   104
    override fun onPreferenceStartFragment(caller: PreferenceFragmentCompat, pref: Preference): Boolean {
883
1cd5e63f231c build: update dependencies
Da Risk <da_risk@geekorum.com>
parents: 882
diff changeset
   105
        val fragmentClass = requireNotNull(pref.fragment)
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
   106
        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
   107
            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
   108
            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
   109
            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
   110
        }
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
   111
        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
   112
    }
8d3a8b9473ae Settings: insert the settings fragment dynamically to be able to replace it later
Da Risk <da_risk@geekorum.com>
parents: 182
diff changeset
   113
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   114
    class SettingsFragment @Inject constructor(
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   115
        private val packageManager: PackageManager
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   116
    ) : PreferenceFragmentCompat() {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   117
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   118
        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
   119
            withStrictMode(StrictMode.allowThreadDiskReads()) {
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
   120
                addPreferencesFromResource(R.xml.pref_general)
d8d919a12465 StrictMode: allow SettingsActivity to read preferences from main
Da Risk <da_risk@geekorum.com>
parents: 192
diff changeset
   121
            }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   122
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   123
            findPreference<Preference>(KEY_THEME)!!.apply {
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   124
                summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   125
                onPreferenceChangeListener = ThemePreferenceListener()
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   126
            }
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   127
            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
   128
                summaryProvider = ListPreference.SimpleSummaryProvider.getInstance()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   129
                val inAppBrowser = getInAppBrowserPackages()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   130
                entryValues = inAppBrowser.keys.toTypedArray()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   131
                entries = inAppBrowser.values.toTypedArray()
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   132
            }
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   133
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   134
            displayVersion()
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   135
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   136
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   137
        private fun displayVersion() {
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   138
            findPreference<Preference>(KEY_ABOUT_VERSION)!!.apply {
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   139
                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
   140
                summary = getString(R.string.pref_summary_about_version,
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   141
                    BuildConfig.REPOSITORY_CHANGESET,
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   142
                    BuildConfig.BUILD_TYPE)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   143
            }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   144
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   145
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   146
        private fun getInAppBrowserPackages(): Map<String, CharSequence> {
811
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   147
            val activityIntent = Intent(Intent.ACTION_VIEW, "http://".toUri()).apply {
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   148
                addCategory(Intent.CATEGORY_BROWSABLE)
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   149
            }
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   150
            val browsersResolveInfoList =
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   151
                packageManager.queryIntentActivities(activityIntent, PackageManager.MATCH_ALL)
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   152
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   153
            val customTabsSupported = browsersResolveInfoList.filter {
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   154
                val customTabServiceIntent = Intent(CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION).apply {
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   155
                    `package` = it.activityInfo.packageName
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   156
                }
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   157
                packageManager.resolveService(customTabServiceIntent, 0) != null
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   158
            }
7a9d8c146eb9 SettingsActivity: better filtering of In-app browsers
Da Risk <da_risk@geekorum.com>
parents: 719
diff changeset
   159
            return customTabsSupported.associate { it.activityInfo.packageName to it.loadLabel(packageManager) }
693
cdc81caa38e8 SettingsActivity: add preference for in app browser engine
Da Risk <da_risk@geekorum.com>
parents: 611
diff changeset
   160
        }
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   161
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   162
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   163
    private class ThemePreferenceListener : Preference.OnPreferenceChangeListener {
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   164
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   165
        override fun onPreferenceChange(preference: Preference, newValue: Any): Boolean {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   166
            val oldValue = (preference as ListPreference).value
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   167
            if (newValue != oldValue) {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   168
                val nighMode = Integer.valueOf(newValue as String)
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   169
                AppCompatDelegate.setDefaultNightMode(nighMode)
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   170
            }
433
303a07578704 Settings: update to androidx.preferences-1.1.0
Da Risk <da_risk@geekorum.com>
parents: 301
diff changeset
   171
            return true
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   172
        }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   173
    }
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   174
134
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   175
    companion object {
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   176
        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
   177
        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
   178
        const val KEY_ABOUT_VERSION = "about_version"
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   179
    }
d7a3563591ae Move SettingsActivity to settings package
Da Risk <da_risk@geekorum.com>
parents: 84
diff changeset
   180
0
14443efede32 Initial commit
Da Risk <da_risk@geekorum.com>
parents:
diff changeset
   181
}
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   182
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   183
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   184
@OptIn(ExperimentalMaterial3Api::class)
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   185
@Composable
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   186
fun SettingsScreen(
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   187
    windowSizeClass: WindowSizeClass,
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   188
    onNavigateUpClick: () -> Unit,
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   189
) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   190
    val useTabletLayout = windowSizeClass.widthSizeClass >= WindowWidthSizeClass.Medium
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   191
    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior()
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   192
    Scaffold(
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   193
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   194
        topBar = {
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   195
            val colors = TopAppBarDefaults.topAppBarColors(
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   196
                containerColor = if (useTabletLayout) MaterialTheme.colorScheme.primaryContainer
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   197
                    else MaterialTheme.colorScheme.surface,
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   198
                titleContentColor = if (useTabletLayout) MaterialTheme.colorScheme.onPrimaryContainer
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   199
                    else MaterialTheme.colorScheme.onSurface
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   200
            )
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   201
            TopAppBar(
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   202
                scrollBehavior = scrollBehavior,
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   203
                colors = colors,
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   204
                title = {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   205
                    Text(stringResource(R.string.activity_settings_title))
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   206
                },
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   207
                navigationIcon = {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   208
                    IconButton(onClick = onNavigateUpClick) {
1152
589b91dd663f app: remove a few deprecated method calls
Da Risk <da_risk@geekorum.com>
parents: 1149
diff changeset
   209
                        Icon(Icons.AutoMirrored.Default.ArrowBack, contentDescription = null)
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   210
                    }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   211
                }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   212
                )
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   213
        },
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   214
    ) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   215
        if (useTabletLayout) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   216
            TabletLayoutContent(Modifier.padding(it)) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   217
                PreferencesContainer(Modifier.padding(4.dp))
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   218
            }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   219
        } else {
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   220
            PreferencesContainer(Modifier.padding(it))
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   221
        }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   222
    }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   223
}
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   224
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   225
@Composable
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   226
private fun TabletLayoutContent(
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   227
    modifier: Modifier = Modifier,
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   228
    content: @Composable ColumnScope.() -> Unit
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   229
) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   230
    Box(
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   231
        contentAlignment = Alignment.TopCenter,
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   232
        modifier = modifier
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   233
    ) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   234
        Box(
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   235
            modifier = Modifier
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   236
                .height(136.dp) // 192.dp - 56.dp of appbar
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   237
                .fillMaxWidth()
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   238
                .background(MaterialTheme.colorScheme.primaryContainer)
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   239
                .testTag("fakeAppBar")
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   240
        )
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   241
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   242
        ElevatedCard(
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   243
            Modifier
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   244
                .width(512.dp)
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   245
                .fillMaxSize()
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   246
                .testTag("contentCard"),
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   247
            content = content
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   248
        )
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   249
    }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   250
}
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   251
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   252
@Composable
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   253
private fun PreferencesContainer(modifier: Modifier = Modifier) {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   254
    AndroidViewBinding(factory = SettingsPreferencesContainerBinding::inflate, modifier)
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   255
}
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   256
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   257
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   258
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   259
@Preview
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   260
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL)
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   261
@Preview(device = Devices.TABLET)
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   262
@Preview(device = Devices.TABLET,
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   263
    uiMode = Configuration.UI_MODE_NIGHT_YES or Configuration.UI_MODE_TYPE_NORMAL
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   264
)@Composable
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   265
fun PreviewSettingsScreen() {
1111
a0e3579dee3f app: convert SettingsScreen to m3
Da Risk <da_risk@geekorum.com>
parents: 1037
diff changeset
   266
    AppTheme3 {
1037
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   267
        BoxWithConstraints {
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   268
            val windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(maxWidth, maxHeight))
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   269
            SettingsScreen(windowSizeClass = windowSizeClass, onNavigateUpClick = {})
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   270
        }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   271
    }
5f14112904de app: convert SettingsActivity chrome to compose
Da Risk <da_risk@geekorum.com>
parents: 943
diff changeset
   272
}