From bcc475102ae28bfd8ab9ff54ec4da961ef226968 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Sun, 3 Jul 2022 10:20:53 +0200 Subject: [PATCH] auth instance --- .../libretube/activities/MainActivity.kt | 10 +- .../github/libretube/dialogs/LoginDialog.kt | 1 + .../libretube/preferences/InstanceSettings.kt | 144 +++++++++++------- app/src/main/res/drawable/ic_auth.xml | 14 ++ app/src/main/res/values/strings.xml | 3 + app/src/main/res/xml/instance_settings.xml | 15 ++ 6 files changed, 130 insertions(+), 57 deletions(-) create mode 100644 app/src/main/res/drawable/ic_auth.xml diff --git a/app/src/main/java/com/github/libretube/activities/MainActivity.kt b/app/src/main/java/com/github/libretube/activities/MainActivity.kt index 1a98eb6ea..9072dbf3d 100644 --- a/app/src/main/java/com/github/libretube/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/activities/MainActivity.kt @@ -62,7 +62,15 @@ class MainActivity : AppCompatActivity() { RetrofitInstance.url = PreferenceHelper.getString(this, "selectInstance", "https://pipedapi.kavin.rocks/")!! RetrofitInstance.authUrl = - PreferenceHelper.getString(this, "selectAuthInstance", "https://pipedapi.kavin.rocks/")!! + if (PreferenceHelper.getBoolean(this, "auth_instance_toggle", false)) { + PreferenceHelper.getString( + this, + "selectAuthInstance", + "https://pipedapi.kavin.rocks/" + )!! + } else { + RetrofitInstance.url + } ThemeHelper.updateTheme(this) LocaleHelper.updateLanguage(this) diff --git a/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt b/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt index ed86ccef6..e689890f6 100644 --- a/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt +++ b/app/src/main/java/com/github/libretube/dialogs/LoginDialog.kt @@ -69,6 +69,7 @@ class LoginDialog : DialogFragment() { private fun login(login: Login) { fun run() { lifecycleScope.launchWhenCreated { + Log.e(TAG, RetrofitInstance.authUrl) val response = try { RetrofitInstance.authApi.login(login) } catch (e: IOException) { 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 203531c40..5a7c8da70 100644 --- a/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt +++ b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt @@ -18,6 +18,7 @@ import androidx.lifecycle.lifecycleScope import androidx.preference.ListPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import androidx.preference.SwitchPreference import com.github.libretube.R import com.github.libretube.activities.SettingsActivity import com.github.libretube.activities.requireMainActivityRestart @@ -33,6 +34,7 @@ import java.io.IOException import java.io.InputStream import java.util.zip.ZipEntry import java.util.zip.ZipInputStream +import kotlin.math.log class InstanceSettings : PreferenceFragmentCompat() { val TAG = "InstanceSettings" @@ -60,8 +62,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) @@ -116,16 +118,42 @@ class InstanceSettings : PreferenceFragmentCompat() { val instance = findPreference("selectInstance") // fetchInstance() - initCustomInstances() - instance?.setOnPreferenceChangeListener { _, newValue -> + initCustomInstances(instance!!) + instance.setOnPreferenceChangeListener { _, newValue -> requireMainActivityRestart = true RetrofitInstance.url = newValue.toString() + if (!PreferenceHelper.getBoolean(requireContext(), "auth_instance_toggle", false)) { + RetrofitInstance.authUrl = newValue.toString() + logout() + } + RetrofitInstance.lazyMgr.reset() + true + } + + val authInstance = findPreference("selectAuthInstance") + initCustomInstances(authInstance!!) + // hide auth instance if option deselected + if (!PreferenceHelper.getBoolean(requireContext(), "auth_instance_toggle", false)) { + authInstance.isVisible = false + } + authInstance.setOnPreferenceChangeListener { _, newValue -> + requireMainActivityRestart = true RetrofitInstance.authUrl = newValue.toString() RetrofitInstance.lazyMgr.reset() logout() true } + val authInstanceToggle = findPreference("auth_instance_toggle") + authInstanceToggle?.setOnPreferenceChangeListener { _, newValue -> + requireMainActivityRestart = true + authInstance.isVisible = newValue == true + logout() + RetrofitInstance.authUrl = if (newValue == false) RetrofitInstance.url + else authInstance.value + true + } + val customInstance = findPreference("customInstance") customInstance?.setOnPreferenceClickListener { val newFragment = CustomInstanceDialog() @@ -169,58 +197,12 @@ class InstanceSettings : PreferenceFragmentCompat() { val importFromYt = findPreference("import_from_yt") importFromYt?.setOnPreferenceClickListener { - val token = PreferenceHelper.getToken(requireContext()) - // 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() - } - } 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() - } - } + importSubscriptions() true } } - private fun initCustomInstances() { + private fun initCustomInstances(instancePref: ListPreference) { val customInstances = PreferenceHelper.getCustomInstances(requireContext()) var instanceNames = resources.getStringArray(R.array.instances) @@ -231,10 +213,9 @@ class InstanceSettings : PreferenceFragmentCompat() { } // add custom instances to the list preference - val instance = findPreference("selectInstance") - instance?.entries = instanceNames - instance?.entryValues = instanceValues - instance?.summaryProvider = + instancePref.entries = instanceNames + instancePref.entryValues = instanceValues + instancePref.summaryProvider = Preference.SummaryProvider { preference -> val text = preference.entry if (TextUtils.isEmpty(text)) { @@ -247,6 +228,7 @@ class InstanceSettings : PreferenceFragmentCompat() { private fun logout() { PreferenceHelper.setToken(requireContext(), "") + Toast.makeText(context, getString(R.string.loggedout), Toast.LENGTH_SHORT).show() } private fun fetchInstance() { @@ -298,6 +280,56 @@ class InstanceSettings : PreferenceFragmentCompat() { activity?.runOnUiThread(action) } + private fun importSubscriptions() { + val token = PreferenceHelper.getToken(requireContext()) + // 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() + } + } 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() + } + } + } + private fun subscribe(channels: List) { fun run() { lifecycleScope.launchWhenCreated { diff --git a/app/src/main/res/drawable/ic_auth.xml b/app/src/main/res/drawable/ic_auth.xml new file mode 100644 index 000000000..5d49c9e1d --- /dev/null +++ b/app/src/main/res/drawable/ic_auth.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d4c981d68..85e2da13d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -210,4 +210,7 @@ Watch History Remember position Remember the watch position and automatically seek to it. + Authentication instance + Use a different instance for authenticated calls. + Choose an auth instance \ No newline at end of file diff --git a/app/src/main/res/xml/instance_settings.xml b/app/src/main/res/xml/instance_settings.xml index b411d31b7..16c07d484 100644 --- a/app/src/main/res/xml/instance_settings.xml +++ b/app/src/main/res/xml/instance_settings.xml @@ -23,6 +23,21 @@ app:key="clearCustomInstances" app:title="@string/clear_customInstances" /> + + + +