@@ -6,9 +6,8 @@ import android.content.res.Configuration
66import android.os.Build
77import android.os.Bundle
88import android.os.Environment
9- import androidx.annotation.RequiresApi
9+ import android.widget.Toast
1010import androidx.appcompat.app.AppCompatDelegate
11- import androidx.core.content.ContextCompat
1211import androidx.preference.*
1312import androidx.work.*
1413import timber.log.Timber
@@ -18,6 +17,7 @@ import xyz.jienan.xkcd.model.WhatIfModel
1817import xyz.jienan.xkcd.model.XkcdModel
1918import xyz.jienan.xkcd.model.work.XkcdDownloadWorker
2019import xyz.jienan.xkcd.model.work.XkcdFastLoadWorker
20+ import xyz.jienan.xkcd.ui.ToastUtils
2121
2222/* *
2323 * Created by Jienan on 2018/3/9.
@@ -31,6 +31,8 @@ class SettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChan
3131
3232 private val zoomPref by lazy { findPreference<ListPreference >(PREF_ZOOM ) }
3333
34+ private val storagePref by lazy { findPreference<ListPreference >(PREF_XKCD_STORAGE ) }
35+
3436 override fun onCreatePreferences (savedInstanceState : Bundle ? , rootKey : String? ) {
3537 setPreferencesFromResource(R .xml.prefs, rootKey)
3638
@@ -41,6 +43,8 @@ class SettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChan
4143 arrowPref?.onPreferenceChangeListener = this
4244 zoomPref?.onPreferenceChangeListener = this
4345 darkPref?.onPreferenceChangeListener = this
46+ storagePref?.onPreferenceChangeListener = this
47+
4448
4549 if (XkcdModel .localizedUrl.isBlank()) {
4650 findPreference<PreferenceCategory >(" pref_key_xkcd" )?.removePreference(findPreference(PREF_XKCD_TRANSLATION ))
@@ -80,6 +84,10 @@ class SettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChan
8084 AppCompatDelegate .setDefaultNightMode(newValue.toString().toInt())
8185 }
8286 }
87+ PREF_XKCD_STORAGE -> {
88+ ToastUtils .showToast(requireContext(), getString(R .string.pref_xkcd_storage_toast), duration = Toast .LENGTH_LONG )
89+ return true
90+ }
8391 }
8492 return false
8593 }
@@ -124,7 +132,14 @@ class SettingsFragment : PreferenceFragmentCompat(), Preference.OnPreferenceChan
124132fun Context.externalMemoryAvailable (): Boolean {
125133 return if (Build .VERSION .SDK_INT >= Build .VERSION_CODES .LOLLIPOP && getExternalFilesDir(null ) != null ) {
126134 try {
127- ! Environment .isExternalStorageEmulated(getExternalFilesDir(null )!! ) && Environment .isExternalStorageRemovable(getExternalFilesDir(null )!! )
135+ getExternalFilesDirs(null ).any {
136+ try {
137+ ! Environment .isExternalStorageEmulated(it) && Environment .isExternalStorageRemovable(it)
138+ } catch (e: Exception ) {
139+ Timber .w(e, " Failed to check external storage" )
140+ false
141+ }
142+ }
128143 } catch (e: Exception ) {
129144 Timber .w(e, " Failed to check external storage" )
130145 false
0 commit comments