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
targetSdkVersion 29
versionCode 57
versionName "5.0-alpha4"
versionName "5.0-alpha5"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}

View File

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

View File

@@ -48,7 +48,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
findPreference<Preference>("backup")?.setOnPreferenceClickListener {
val request = Request.Builder()
.url(getString(R.string.backup_url))
.url(context.getString(R.string.backup_url))
.post(
FormBody.Builder()
.add("f:1", File(ContextCompat.getDataDir(context), "favorites.json").readText())
@@ -75,7 +75,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
}
findPreference<Preference>("restore")?.setOnPreferenceClickListener {
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)
@@ -88,7 +88,7 @@ class ManageFavoritesFragment : PreferenceFragmentCompat() {
Snackbar.make(view, R.string.settings_restore_failed, Snackbar.LENGTH_LONG).show()
}, onSuccess = 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) { _, _ ->
// Do Nothing

View File

@@ -61,7 +61,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
if (dir.exists())
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 {
var size = 0L
@@ -69,7 +69,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
size += it.length()
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 {
job?.cancel()
launch(Dispatchers.Main) {
summary = getString(R.string.settings_storage_usage_loading)
summary = context.getString(R.string.settings_storage_usage_loading)
}
if (dir.exists())
@@ -97,13 +97,13 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
var size = 0L
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 {
size += it.length()
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)
setPositiveButton(android.R.string.yes) { _, _ ->
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) { _, _ -> }
}.show()
@@ -138,7 +138,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
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 {
var size = 0L
@@ -146,7 +146,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
size += it.length()
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
summary = getString(R.string.settings_storage_usage, byteToString(0))
summary = context.getString(R.string.settings_storage_usage, byteToString(0))
job?.cancel()
job = CoroutineScope(Dispatchers.IO).launch {
var size = 0L
dir.walk().forEach {
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()
@@ -179,7 +179,7 @@ class ManageStorageFragment : PreferenceFragmentCompat(), Preference.OnPreferenc
with(findPreference<Preference>("clear_history")) {
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
}