fix sub import

This commit is contained in:
Bnyro 2022-07-21 16:59:06 +02:00
parent 00c1259c11
commit cd43515277
3 changed files with 40 additions and 60 deletions

View File

@ -1,18 +1,15 @@
package com.github.libretube.preferences package com.github.libretube.preferences
import android.Manifest
import android.content.ContentResolver import android.content.ContentResolver
import android.content.Intent import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri import android.net.Uri
import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.text.TextUtils import android.text.TextUtils
import android.util.Log import android.util.Log
import android.widget.Toast import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
import androidx.core.app.ActivityCompat import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.preference.ListPreference 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.LoginDialog
import com.github.libretube.dialogs.LogoutDialog import com.github.libretube.dialogs.LogoutDialog
import com.github.libretube.dialogs.RequireRestartDialog import com.github.libretube.dialogs.RequireRestartDialog
import com.github.libretube.util.PermissionHelper
import com.github.libretube.util.RetrofitInstance import com.github.libretube.util.RetrofitInstance
import org.json.JSONObject import org.json.JSONObject
import org.json.JSONTokener import org.json.JSONTokener
@ -38,8 +36,12 @@ import java.util.zip.ZipInputStream
class InstanceSettings : PreferenceFragmentCompat() { class InstanceSettings : PreferenceFragmentCompat() {
val TAG = "InstanceSettings" val TAG = "InstanceSettings"
companion object {
lateinit var getContent: ActivityResultLauncher<String>
}
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
MainSettings.getContent = getContent =
registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? -> registerForActivityResult(ActivityResultContracts.GetContent()) { uri: Uri? ->
if (uri != null) { if (uri != null) {
try { try {
@ -61,8 +63,8 @@ class InstanceSettings : PreferenceFragmentCompat() {
val jsonObject = JSONTokener(json).nextValue() as JSONObject val jsonObject = JSONTokener(json).nextValue() as JSONObject
Log.e(TAG, jsonObject.getJSONArray("subscriptions").toString()) Log.e(TAG, jsonObject.getJSONArray("subscriptions").toString())
for ( for (
i in 0 until jsonObject.getJSONArray("subscriptions") i in 0 until jsonObject.getJSONArray("subscriptions")
.length() .length()
) { ) {
var url = var url =
jsonObject.getJSONArray("subscriptions").getJSONObject(i) jsonObject.getJSONArray("subscriptions").getJSONObject(i)
@ -288,51 +290,13 @@ class InstanceSettings : PreferenceFragmentCompat() {
private fun importSubscriptions() { private fun importSubscriptions() {
val token = PreferenceHelper.getToken() val token = PreferenceHelper.getToken()
// check StorageAccess if (token != "") {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { // check StorageAccess
Log.d("myz", "" + Build.VERSION.SDK_INT) val accessGranted = PermissionHelper.isStoragePermissionGranted(activity as AppCompatActivity)
if (ContextCompat.checkSelfPermission( if (accessGranted) getContent.launch("*/*")
this.requireContext(), else PermissionHelper.requestReadWrite(activity as AppCompatActivity)
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()
}
} else { } else {
if (ActivityCompat.checkSelfPermission( Toast.makeText(context, R.string.login_first, Toast.LENGTH_SHORT).show()
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()
}
} }
} }

View File

@ -2,7 +2,6 @@ package com.github.libretube.preferences
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.activity.result.ActivityResultLauncher
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
@ -19,10 +18,6 @@ import kotlinx.coroutines.launch
class MainSettings : PreferenceFragmentCompat() { class MainSettings : PreferenceFragmentCompat() {
val TAG = "SettingsFragment" val TAG = "SettingsFragment"
companion object {
lateinit var getContent: ActivityResultLauncher<String>
}
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.settings, rootKey) setPreferencesFromResource(R.xml.settings, rootKey)

View File

@ -4,15 +4,13 @@ import android.Manifest
import android.content.pm.PackageManager import android.content.pm.PackageManager
import android.os.Build import android.os.Build
import android.os.Environment import android.os.Environment
import android.util.Log
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
object PermissionHelper { object PermissionHelper {
fun requestReadWrite(activity: AppCompatActivity) { fun requestReadWrite(activity: AppCompatActivity): Boolean {
// request storage permissions if not granted yet // request storage permissions if not granted yet
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
Log.d("myz", "" + Build.VERSION.SDK_INT)
if (!Environment.isExternalStorageManager()) { if (!Environment.isExternalStorageManager()) {
ActivityCompat.requestPermissions( ActivityCompat.requestPermissions(
activity, activity,
@ -22,6 +20,7 @@ object PermissionHelper {
), ),
1 1
) // permission request code is just an int ) // permission request code is just an int
return false
} }
} else { } else {
if (ActivityCompat.checkSelfPermission( if (ActivityCompat.checkSelfPermission(
@ -41,7 +40,29 @@ object PermissionHelper {
), ),
1 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
}
} }
} }