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..ccabdb1dc 100644 --- a/app/src/main/java/com/github/libretube/activities/MainActivity.kt +++ b/app/src/main/java/com/github/libretube/activities/MainActivity.kt @@ -61,8 +61,17 @@ class MainActivity : AppCompatActivity() { RetrofitInstance.url = PreferenceHelper.getString(this, "selectInstance", "https://pipedapi.kavin.rocks/")!! + // set auth instance 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/preferences/InstanceSettings.kt b/app/src/main/java/com/github/libretube/preferences/InstanceSettings.kt index 203531c40..bad5cad27 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 @@ -116,16 +117,44 @@ 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 + // save new auth url 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() + // either use new auth url or the normal api url if auth instance disabled + RetrofitInstance.authUrl = if (newValue == false) RetrofitInstance.url + else authInstance.value + true + } + val customInstance = findPreference("customInstance") customInstance?.setOnPreferenceClickListener { val newFragment = CustomInstanceDialog() @@ -169,58 +198,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 +214,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 +229,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 +281,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" /> + + + +