Fixed context not attached error

This commit is contained in:
tom5079
2020-09-05 08:31:30 +09:00
parent ffc7c2aa67
commit 12d8949c9e
4 changed files with 34 additions and 26 deletions

View File

@@ -20,7 +20,7 @@ android {
minSdkVersion 16 minSdkVersion 16
targetSdkVersion 29 targetSdkVersion 29
versionCode 57 versionCode 57
versionName "5.0-alpha4" versionName "5.0-alpha5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true vectorDrawables.useSupportLibrary = true
} }

View File

@@ -47,13 +47,14 @@ class DownloadLocationDialogFragment : DialogFragment() {
private val entries = mutableMapOf<File?, View>() private val entries = mutableMapOf<File?, View>()
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
private fun build() : View { private fun build() : View? {
val context = context ?: return null
val view = layoutInflater.inflate(R.layout.dialog_download_folder, null) as LinearLayout val view = layoutInflater.inflate(R.layout.dialog_download_folder, null) as LinearLayout
val externalFilesDirs = ContextCompat.getExternalFilesDirs(requireContext(), null) val externalFilesDirs = ContextCompat.getExternalFilesDirs(context, null)
externalFilesDirs.forEachIndexed { index, dir -> externalFilesDirs.forEachIndexed { index, dir ->
dir ?: return@forEachIndexed dir ?: return@forEachIndexed
view.addView(layoutInflater.inflate(R.layout.item_download_folder, view, false).apply { view.addView(layoutInflater.inflate(R.layout.item_download_folder, view, false).apply {
@@ -106,7 +107,7 @@ class DownloadLocationDialogFragment : DialogFragment() {
entries[null] = this entries[null] = this
}) })
val downloadFolder = DownloadManager.getInstance(requireContext()).downloadFolder.canonicalPath val downloadFolder = DownloadManager.getInstance(context).downloadFolder.canonicalPath
val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder } val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder }
entries[key]!!.button.isChecked = true entries[key]!!.button.isChecked = true
if (key == null) entries[key]!!.location_available.text = downloadFolder if (key == null) entries[key]!!.location_available.text = downloadFolder
@@ -133,24 +134,28 @@ class DownloadLocationDialogFragment : DialogFragment() {
when (requestCode) { when (requestCode) {
R.id.request_download_folder.normalizeID() -> { R.id.request_download_folder.normalizeID() -> {
if (resultCode == Activity.RESULT_OK) { if (resultCode == Activity.RESULT_OK) {
val activity = activity ?: return
val context = context ?: return
val dialog = dialog ?: return
data?.data?.also { uri -> data?.data?.also { uri ->
val takeFlags: Int = val takeFlags: Int =
requireActivity().intent.flags and activity.intent.flags and
(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION) (Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
requireContext().contentResolver.takePersistableUriPermission(uri, takeFlags) context.contentResolver.takePersistableUriPermission(uri, takeFlags)
if (FileX(requireContext(), uri).canWrite()) if (FileX(context, uri).canWrite())
Preferences["download_folder"] = uri.toString() Preferences["download_folder"] = uri.toString()
else { else {
Snackbar.make( Snackbar.make(
requireDialog().window!!.decorView.rootView, dialog.window!!.decorView.rootView,
R.string.settings_download_folder_not_writable, R.string.settings_download_folder_not_writable,
Snackbar.LENGTH_LONG Snackbar.LENGTH_LONG
).show() ).show()
val downloadFolder = DownloadManager.getInstance(requireContext()).downloadFolder.canonicalPath val downloadFolder = DownloadManager.getInstance(context).downloadFolder.canonicalPath
val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder } val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder }
entries[key]!!.button.isChecked = true entries[key]!!.button.isChecked = true
if (key == null) entries[key]!!.location_available.text = downloadFolder if (key == null) entries[key]!!.location_available.text = downloadFolder
@@ -159,17 +164,20 @@ class DownloadLocationDialogFragment : DialogFragment() {
} }
} }
R.id.request_download_folder_old.normalizeID() -> { R.id.request_download_folder_old.normalizeID() -> {
val context = context ?: return
val dialog = dialog ?: return
if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) { if (resultCode == DirectoryChooserActivity.RESULT_CODE_DIR_SELECTED) {
val directory = data?.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR)!! val directory = data?.getStringExtra(DirectoryChooserActivity.RESULT_SELECTED_DIR)!!
if (!File(directory).canWrite()) { if (!File(directory).canWrite()) {
Snackbar.make( Snackbar.make(
requireDialog().window!!.decorView.rootView, dialog.window!!.decorView.rootView,
R.string.settings_download_folder_not_writable, R.string.settings_download_folder_not_writable,
Snackbar.LENGTH_LONG Snackbar.LENGTH_LONG
).show() ).show()
val downloadFolder = DownloadManager.getInstance(requireContext()).downloadFolder.canonicalPath val downloadFolder = DownloadManager.getInstance(context).downloadFolder.canonicalPath
val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder } val key = entries.keys.firstOrNull { it?.canonicalPath == downloadFolder }
entries[key]!!.button.isChecked = true entries[key]!!.button.isChecked = true
if (key == null) entries[key]!!.location_available.text = downloadFolder if (key == null) entries[key]!!.location_available.text = downloadFolder

View File

@@ -48,7 +48,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
findPreference<Preference>("backup")?.setOnPreferenceClickListener { findPreference<Preference>("backup")?.setOnPreferenceClickListener {
val request = Request.Builder() val request = Request.Builder()
.url(getString(R.string.backup_url)) .url(context.getString(R.string.backup_url))
.post( .post(
FormBody.Builder() FormBody.Builder()
.add("f:1", File(ContextCompat.getDataDir(context), "favorites.json").readText()) .add("f:1", File(ContextCompat.getDataDir(context), "favorites.json").readText())
@@ -75,7 +75,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
} }
findPreference<Preference>("restore")?.setOnPreferenceClickListener { findPreference<Preference>("restore")?.setOnPreferenceClickListener {
val editText = EditText(context).apply { val editText = EditText(context).apply {
setText(getString(R.string.backup_url), TextView.BufferType.EDITABLE) setText(context.getString(R.string.backup_url), TextView.BufferType.EDITABLE)
} }
AlertDialog.Builder(context) AlertDialog.Builder(context)
@@ -88,7 +88,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
Snackbar.make(view, R.string.settings_restore_failed, Snackbar.LENGTH_LONG).show() Snackbar.make(view, R.string.settings_restore_failed, Snackbar.LENGTH_LONG).show()
}, onSuccess = onSuccess@{ }, onSuccess = onSuccess@{
val view = view ?: return@onSuccess val view = view ?: return@onSuccess
Snackbar.make(view, getString(R.string.settings_restore_success, it.size), Snackbar.LENGTH_LONG).show() Snackbar.make(view, context.getString(R.string.settings_restore_success, it.size), Snackbar.LENGTH_LONG).show()
}) })
}.setNegativeButton(android.R.string.cancel) { _, _ -> }.setNegativeButton(android.R.string.cancel) { _, _ ->
// Do Nothing // Do Nothing

View File

@@ -61,7 +61,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
if (dir.exists()) if (dir.exists())
dir.deleteRecursively() dir.deleteRecursively()
summary = getString(R.string.settings_storage_usage, byteToString(0)) summary = context.getString(R.string.settings_storage_usage, byteToString(0))
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
var size = 0L var size = 0L
@@ -69,7 +69,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
size += it.length() size += it.length()
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage, byteToString(size)) summary = context.getString(R.string.settings_storage_usage, byteToString(size))
} }
} }
} }
@@ -87,7 +87,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
job?.cancel() job?.cancel()
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage_loading) summary = context.getString(R.string.settings_storage_usage_loading)
} }
if (dir.exists()) if (dir.exists())
@@ -97,13 +97,13 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
var size = 0L var size = 0L
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage, byteToString(size)) summary = context.getString(R.string.settings_storage_usage, byteToString(size))
} }
dir.walk().forEach { dir.walk().forEach {
size += it.length() size += it.length()
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage, byteToString(size)) summary = context.getString(R.string.settings_storage_usage, byteToString(size))
} }
} }
} }
@@ -118,7 +118,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
setMessage(R.string.settings_clear_history_alert_message) setMessage(R.string.settings_clear_history_alert_message)
setPositiveButton(android.R.string.yes) { _, _ -> setPositiveButton(android.R.string.yes) { _, _ ->
histories.clear() histories.clear()
summary = getString(R.string.settings_clear_history_summary, histories.size) summary = context.getString(R.string.settings_clear_history_summary, histories.size)
} }
setNegativeButton(android.R.string.no) { _, _ -> } setNegativeButton(android.R.string.no) { _, _ -> }
}.show() }.show()
@@ -138,7 +138,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
val dir = File(context.cacheDir, "imageCache") val dir = File(context.cacheDir, "imageCache")
summary = getString(R.string.settings_storage_usage, byteToString(0)) summary = context.getString(R.string.settings_storage_usage, byteToString(0))
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
var size = 0L var size = 0L
@@ -146,7 +146,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
size += it.length() size += it.length()
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage, byteToString(size)) summary = context.getString(R.string.settings_storage_usage, byteToString(size))
} }
} }
} }
@@ -159,14 +159,14 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
val dir = DownloadManager.getInstance(context).downloadFolder val dir = DownloadManager.getInstance(context).downloadFolder
summary = getString(R.string.settings_storage_usage, byteToString(0)) summary = context.getString(R.string.settings_storage_usage, byteToString(0))
job?.cancel() job?.cancel()
job = CoroutineScope(Dispatchers.IO).launch { job = CoroutineScope(Dispatchers.IO).launch {
var size = 0L var size = 0L
dir.walk().forEach { dir.walk().forEach {
launch(Dispatchers.Main) { launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage, byteToString(size)) summary = context.getString(R.string.settings_storage_usage, byteToString(size))
} }
size += it.length() size += it.length()
@@ -179,7 +179,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
with(findPreference<Preference>("clear_history")) { with(findPreference<Preference>("clear_history")) {
this ?: return@with this ?: return@with
summary = getString(R.string.settings_clear_history_summary, histories.size) summary = context.getString(R.string.settings_clear_history_summary, histories.size)
onPreferenceClickListener = this@ManageStorageFragment onPreferenceClickListener = this@ManageStorageFragment
} }