From cd4351527786c60783e221d3bff3a6ad42e66b31 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Thu, 21 Jul 2022 16:59:06 +0200 Subject: [PATCH] fix sub import --- .../libretube/preferences/InstanceSettings.kt | 68 +++++-------------- .../libretube/preferences/MainSettings.kt | 5 -- .../github/libretube/util/PermissionHelper.kt | 27 +++++++- 3 files changed, 40 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt index 60fed115b..de570e60a 100644 --- a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt @@ -1,18 +1,15 @@ package com.github.libretube.preferences -import android.Manifest import android.content.ContentResolver import android.content.Intent -import android.content.pm.PackageManager import android.net.Uri -import android.os.Build import android.os.Bundle import android.text.TextUtils import android.util.Log import android.widget.Toast +import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts -import androidx.core.app.ActivityCompat -import androidx.core.content.ContextCompat +import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import androidx.preference.ListPreference @@ -26,6 +23,7 @@ import com.github.libretube.dialogs.DeleteAccountDialog import com.github.libretube.dialogs.LoginDialog import com.github.libretube.dialogs.LogoutDialog import com.github.libretube.dialogs.RequireRestartDialog +import com.github.libretube.util.PermissionHelper import com.github.libretube.util.RetrofitInstance import org.json.JSONObject import org.json.JSONTokener @@ -38,8 +36,12 @@ import java.util.zip.ZipInputStream class InstanceSettings : PreferenceFragmentCompat() { val TAG = "InstanceSettings" + companion object { + lateinit var getContent: ActivityResultLauncher + } + override fun onCreate(savedInstanceState: Bundle?) { - MainSettings.getContent = + getContent = registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> if (uri != null) { try { @@ -61,8 +63,8 @@ class InstanceSettings : PreferenceFragmentCompat() { val jsonObject = JSONTokener(json).nextValue() as JSONObject Log.e(TAG, jsonObject.getJSONArray("subscriptions").toString()) for ( - i in 0 until jsonObject.getJSONArray("subscriptions") - .length() + i in 0 until jsonObject.getJSONArray("subscriptions") + .length() ) { var url = jsonObject.getJSONArray("subscriptions").getJSONObject(i) @@ -288,51 +290,13 @@ class InstanceSettings : PreferenceFragmentCompat() { private fun importSubscriptions() { val token = PreferenceHelper.getToken() - // check StorageAccess - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - Log.d("myz", "" + Build.VERSION.SDK_INT) - if (ContextCompat.checkSelfPermission( - this.requireContext(), - Manifest.permission.READ_EXTERNAL_STORAGE - ) - != PackageManager.PERMISSION_GRANTED - ) { - ActivityCompat.requestPermissions( - this.requireActivity(), - arrayOf( - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.MANAGE_EXTERNAL_STORAGE - ), - 1 - ) // permission request code is just an int - } else if (token != "") { - MainSettings.getContent.launch("*/*") - } else { - Toast.makeText(context, R.string.login_first, Toast.LENGTH_SHORT).show() - } + if (token != "") { + // check StorageAccess + val accessGranted = PermissionHelper.isStoragePermissionGranted(activity as AppCompatActivity) + if (accessGranted) getContent.launch("*/*") + else PermissionHelper.requestReadWrite(activity as AppCompatActivity) } else { - if (ActivityCompat.checkSelfPermission( - requireContext(), - Manifest.permission.READ_EXTERNAL_STORAGE - ) != PackageManager.PERMISSION_GRANTED || - ActivityCompat.checkSelfPermission( - requireContext(), - Manifest.permission.WRITE_EXTERNAL_STORAGE - ) != PackageManager.PERMISSION_GRANTED - ) { - ActivityCompat.requestPermissions( - this.requireActivity(), - arrayOf( - Manifest.permission.READ_EXTERNAL_STORAGE, - Manifest.permission.WRITE_EXTERNAL_STORAGE - ), - 1 - ) - } else if (token != "") { - MainSettings.getContent.launch("*/*") - } else { - Toast.makeText(context, R.string.login_first, Toast.LENGTH_SHORT).show() - } + Toast.makeText(context, R.string.login_first, Toast.LENGTH_SHORT).show() } } diff --git a/app/src/main/java/com/github/libretube/preferences/MainSettings.kt b/app/src/main/java/com/github/libretube/preferences/MainSettings.kt index 0d13082ad..51aff4da6 100644 --- a/app/src/main/java/com/github/libretube/preferences/MainSettings.kt +++ b/app/src/main/java/com/github/libretube/preferences/MainSettings.kt @@ -2,7 +2,6 @@ package com.github.libretube.preferences import android.os.Bundle import android.util.Log -import androidx.activity.result.ActivityResultLauncher import androidx.fragment.app.Fragment import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat @@ -19,10 +18,6 @@ import kotlinx.coroutines.launch class MainSettings : PreferenceFragmentCompat() { val TAG = "SettingsFragment" - companion object { - lateinit var getContent: ActivityResultLauncher - } - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.settings, rootKey) diff --git a/app/src/main/java/com/github/libretube/util/PermissionHelper.kt b/app/src/main/java/com/github/libretube/util/PermissionHelper.kt index 6e68f270e..562423377 100644 --- a/app/src/main/java/com/github/libretube/util/PermissionHelper.kt +++ b/app/src/main/java/com/github/libretube/util/PermissionHelper.kt @@ -4,15 +4,13 @@ import android.Manifest import android.content.pm.PackageManager import android.os.Build import android.os.Environment -import android.util.Log import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityCompat object PermissionHelper { - fun requestReadWrite(activity: AppCompatActivity) { + fun requestReadWrite(activity: AppCompatActivity): Boolean { // request storage permissions if not granted yet if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { - Log.d("myz", "" + Build.VERSION.SDK_INT) if (!Environment.isExternalStorageManager()) { ActivityCompat.requestPermissions( activity, @@ -22,6 +20,7 @@ object PermissionHelper { ), 1 ) // permission request code is just an int + return false } } else { if (ActivityCompat.checkSelfPermission( @@ -41,7 +40,29 @@ object PermissionHelper { ), 1 ) + return false } } + return true + } + + fun isStoragePermissionGranted(activity: AppCompatActivity): Boolean { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + if (activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) + == PackageManager.PERMISSION_GRANTED + ) { + true + } else { + ActivityCompat.requestPermissions( + activity, + arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE), + 1 + ) + false + } + } else { + // permission is automatically granted on sdk < 23 upon installation + true + } } }