mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
fix conflicts
This commit is contained in:
parent
f8603a7874
commit
2c3bdafd45
10 changed files with 85 additions and 214 deletions
|
@ -7,7 +7,6 @@ import android.content.DialogInterface
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.res.Configuration
|
import android.content.res.Configuration
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
@ -23,9 +22,7 @@ import androidx.preference.PreferenceManager
|
||||||
import androidx.recyclerview.widget.RecyclerView
|
import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||||
import com.google.android.material.button.MaterialButton
|
|
||||||
import com.google.android.material.chip.Chip
|
import com.google.android.material.chip.Chip
|
||||||
import com.google.android.material.chip.ChipGroup
|
|
||||||
import com.lagradost.cloudstream3.*
|
import com.lagradost.cloudstream3.*
|
||||||
import com.lagradost.cloudstream3.APIHolder.apis
|
import com.lagradost.cloudstream3.APIHolder.apis
|
||||||
import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia
|
import com.lagradost.cloudstream3.APIHolder.filterProviderByPreferredMedia
|
||||||
|
@ -47,15 +44,12 @@ import com.lagradost.cloudstream3.mvvm.observeNullable
|
||||||
import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi
|
import com.lagradost.cloudstream3.ui.APIRepository.Companion.noneApi
|
||||||
import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi
|
import com.lagradost.cloudstream3.ui.APIRepository.Companion.randomApi
|
||||||
import com.lagradost.cloudstream3.ui.WatchType
|
import com.lagradost.cloudstream3.ui.WatchType
|
||||||
import com.lagradost.cloudstream3.ui.quicksearch.QuickSearchFragment
|
|
||||||
import com.lagradost.cloudstream3.ui.result.txt
|
import com.lagradost.cloudstream3.ui.result.txt
|
||||||
import com.lagradost.cloudstream3.ui.search.*
|
import com.lagradost.cloudstream3.ui.search.*
|
||||||
import com.lagradost.cloudstream3.ui.search.SearchHelper.handleSearchClickCallback
|
import com.lagradost.cloudstream3.ui.search.SearchHelper.handleSearchClickCallback
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTrueTvSettings
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.addProgramsToContinueWatching
|
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable
|
import com.lagradost.cloudstream3.utils.AppUtils.isRecyclerScrollable
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult
|
import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.ownHide
|
import com.lagradost.cloudstream3.utils.AppUtils.ownHide
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.ownShow
|
import com.lagradost.cloudstream3.utils.AppUtils.ownShow
|
||||||
|
@ -64,13 +58,12 @@ import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
import com.lagradost.cloudstream3.utils.DataStore.getKey
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.setKey
|
import com.lagradost.cloudstream3.utils.DataStore.setKey
|
||||||
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||||
|
import com.lagradost.cloudstream3.utils.DataStoreHelper.currentHomePage
|
||||||
import com.lagradost.cloudstream3.utils.Event
|
import com.lagradost.cloudstream3.utils.Event
|
||||||
import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso
|
import com.lagradost.cloudstream3.utils.SubtitleHelper.getFlagFromIso
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
|
import com.lagradost.cloudstream3.utils.UIHelper.getSpanCount
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
|
import com.lagradost.cloudstream3.utils.UIHelper.popupMenuNoIconsAndNoStringRes
|
||||||
|
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
|
|
||||||
|
@ -523,7 +516,7 @@ class HomeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun reloadStored(unused: Unit = Unit) {
|
private fun reloadStored(unused: Unit = Unit) {
|
||||||
homeViewModel.loadResumeWatching()
|
homeViewModel.reloadStored()
|
||||||
val list = EnumSet.noneOf(WatchType::class.java)
|
val list = EnumSet.noneOf(WatchType::class.java)
|
||||||
getKey<IntArray>(HOME_BOOKMARK_VALUE_LIST)?.map { WatchType.fromInternalId(it) }?.let {
|
getKey<IntArray>(HOME_BOOKMARK_VALUE_LIST)?.map { WatchType.fromInternalId(it) }?.let {
|
||||||
list.addAll(it)
|
list.addAll(it)
|
||||||
|
@ -540,7 +533,7 @@ class HomeFragment : Fragment() {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun loadHomePage(forceReload: Boolean) {
|
private fun loadHomePage(forceReload: Boolean) {
|
||||||
val apiName = context?.getKey<String>(USER_SELECTED_HOMEPAGE_API)
|
val apiName = currentHomePage
|
||||||
|
|
||||||
if (homeViewModel.apiName.value != apiName || apiName == null || forceReload) {
|
if (homeViewModel.apiName.value != apiName || apiName == null || forceReload) {
|
||||||
//println("Caught home: " + homeViewModel.apiName.value + " at " + apiName)
|
//println("Caught home: " + homeViewModel.apiName.value + " at " + apiName)
|
||||||
|
@ -552,7 +545,7 @@ class HomeFragment : Fragment() {
|
||||||
if (callback.action == SEARCH_ACTION_FOCUSED) {
|
if (callback.action == SEARCH_ACTION_FOCUSED) {
|
||||||
//focusCallback(callback.card)
|
//focusCallback(callback.card)
|
||||||
} else {
|
} else {
|
||||||
handleSearchClickCallback(activity, callback)
|
handleSearchClickCallback(callback)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,6 @@ import android.view.animation.AlphaAnimation
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.appcompat.widget.SearchView
|
import androidx.appcompat.widget.SearchView
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.Fragment
|
|
||||||
import androidx.fragment.app.activityViewModels
|
import androidx.fragment.app.activityViewModels
|
||||||
import com.google.android.material.tabs.TabLayoutMediator
|
import com.google.android.material.tabs.TabLayoutMediator
|
||||||
import com.lagradost.cloudstream3.APIHolder
|
import com.lagradost.cloudstream3.APIHolder
|
||||||
|
@ -93,12 +92,8 @@ class LibraryFragment : Fragment() {
|
||||||
|
|
||||||
override fun onDestroyView() {
|
override fun onDestroyView() {
|
||||||
binding = null
|
binding = null
|
||||||
super.onDestroyView()
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun onDestroyView() {
|
|
||||||
super.onDestroyView()
|
|
||||||
MainActivity.afterBackupRestoreEvent -= ::onNewSyncData
|
MainActivity.afterBackupRestoreEvent -= ::onNewSyncData
|
||||||
|
super.onDestroyView()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onSaveInstanceState(outState: Bundle) {
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
|
|
@ -12,9 +12,8 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import com.lagradost.cloudstream3.R
|
import com.lagradost.cloudstream3.R
|
||||||
import com.lagradost.cloudstream3.databinding.AccountManagmentBinding
|
import com.lagradost.cloudstream3.databinding.AccountManagmentBinding
|
||||||
import com.lagradost.cloudstream3.databinding.AccountSwitchBinding
|
import com.lagradost.cloudstream3.databinding.AccountSwitchBinding
|
||||||
import com.lagradost.cloudstream3.databinding.AddAccountInputBinding
|
|
||||||
import com.lagradost.cloudstream3.mvvm.logError
|
import com.lagradost.cloudstream3.mvvm.logError
|
||||||
import com.lagradost.cloudstream3.syncproviders.*
|
import com.lagradost.cloudstream3.syncproviders.AccountManager
|
||||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi
|
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.aniListApi
|
||||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.googleDriveApi
|
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.googleDriveApi
|
||||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.malApi
|
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.malApi
|
||||||
|
@ -22,6 +21,7 @@ import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.openSub
|
||||||
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.simklApi
|
import com.lagradost.cloudstream3.syncproviders.AccountManager.Companion.simklApi
|
||||||
import com.lagradost.cloudstream3.syncproviders.AuthAPI
|
import com.lagradost.cloudstream3.syncproviders.AuthAPI
|
||||||
import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI
|
import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI
|
||||||
|
import com.lagradost.cloudstream3.syncproviders.InAppOAuth2API
|
||||||
import com.lagradost.cloudstream3.syncproviders.OAuth2API
|
import com.lagradost.cloudstream3.syncproviders.OAuth2API
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.getPref
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment.Companion.isTvSettings
|
||||||
|
@ -108,129 +108,12 @@ class SettingsAccount : PreferenceFragmentCompat() {
|
||||||
}
|
}
|
||||||
|
|
||||||
@UiThread
|
@UiThread
|
||||||
fun addAccount(activity: FragmentActivity?, api: AccountManager) {
|
fun addAccount(activity: FragmentActivity, api: AccountManager) {
|
||||||
try {
|
try {
|
||||||
when (api) {
|
when (api) {
|
||||||
is OAuth2API -> {
|
is InAppOAuth2API -> InAppOAuth2DialogBuilder(api, activity).open()
|
||||||
api.authenticate(activity)
|
is OAuth2API -> api.authenticate(activity)
|
||||||
}
|
is InAppAuthAPI -> InAppAuthDialogBuilder(api, activity).open()
|
||||||
|
|
||||||
is InAppAuthAPI -> {
|
|
||||||
if (activity == null) return
|
|
||||||
val binding: AddAccountInputBinding =
|
|
||||||
AddAccountInputBinding.inflate(activity.layoutInflater, null, false)
|
|
||||||
val builder =
|
|
||||||
AlertDialog.Builder(activity, R.style.AlertDialogCustom)
|
|
||||||
.setView(binding.root)
|
|
||||||
val dialog = builder.show()
|
|
||||||
|
|
||||||
val visibilityMap = listOf(
|
|
||||||
binding.loginEmailInput to api.requiresEmail,
|
|
||||||
binding.loginPasswordInput to api.requiresPassword,
|
|
||||||
binding.loginServerInput to api.requiresServer,
|
|
||||||
binding.loginUsernameInput to api.requiresUsername
|
|
||||||
)
|
|
||||||
|
|
||||||
if (isTvSettings()) {
|
|
||||||
visibilityMap.forEach { (input, isVisible) ->
|
|
||||||
input.isVisible = isVisible
|
|
||||||
|
|
||||||
// Band-aid for weird FireTV behavior causing crashes because keyboard covers the screen
|
|
||||||
input.setOnEditorActionListener { textView, actionId, _ ->
|
|
||||||
if (actionId == EditorInfo.IME_ACTION_NEXT) {
|
|
||||||
val view = textView.focusSearch(FOCUS_DOWN)
|
|
||||||
return@setOnEditorActionListener view?.requestFocus(
|
|
||||||
FOCUS_DOWN
|
|
||||||
) == true
|
|
||||||
}
|
|
||||||
return@setOnEditorActionListener true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
visibilityMap.forEach { (input, isVisible) ->
|
|
||||||
input.isVisible = isVisible
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.loginEmailInput.isVisible = api.requiresEmail
|
|
||||||
binding.loginPasswordInput.isVisible = api.requiresPassword
|
|
||||||
binding.loginServerInput.isVisible = api.requiresServer
|
|
||||||
binding.loginUsernameInput.isVisible = api.requiresUsername
|
|
||||||
binding.createAccount.isGone = api.createAccountUrl.isNullOrBlank()
|
|
||||||
binding.createAccount.setOnClickListener {
|
|
||||||
openBrowser(
|
|
||||||
api.createAccountUrl ?: return@setOnClickListener,
|
|
||||||
activity
|
|
||||||
)
|
|
||||||
dialog.dismissSafe()
|
|
||||||
}
|
|
||||||
|
|
||||||
val displayedItems = listOf(
|
|
||||||
binding.loginUsernameInput,
|
|
||||||
binding.loginEmailInput,
|
|
||||||
binding.loginServerInput,
|
|
||||||
binding.loginPasswordInput
|
|
||||||
).filter { it.isVisible }
|
|
||||||
|
|
||||||
displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous ->
|
|
||||||
item.id.let { previous?.nextFocusDownId = it }
|
|
||||||
previous?.id?.let { item.nextFocusUpId = it }
|
|
||||||
item
|
|
||||||
}
|
|
||||||
|
|
||||||
displayedItems.firstOrNull()?.let {
|
|
||||||
binding.createAccount.nextFocusDownId = it.id
|
|
||||||
it.nextFocusUpId = binding.createAccount.id
|
|
||||||
}
|
|
||||||
binding.applyBtt.id.let {
|
|
||||||
displayedItems.lastOrNull()?.nextFocusDownId = it
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.text1.text = api.name
|
|
||||||
|
|
||||||
if (api.storesPasswordInPlainText) {
|
|
||||||
api.getLatestLoginData()?.let { data ->
|
|
||||||
binding.loginEmailInput.setText(data.email ?: "")
|
|
||||||
binding.loginServerInput.setText(data.server ?: "")
|
|
||||||
binding.loginUsernameInput.setText(data.username ?: "")
|
|
||||||
binding.loginPasswordInput.setText(data.password ?: "")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
binding.applyBtt.setOnClickListener {
|
|
||||||
val loginData = InAppAuthAPI.LoginData(
|
|
||||||
username = if (api.requiresUsername) binding.loginUsernameInput.text?.toString() else null,
|
|
||||||
password = if (api.requiresPassword) binding.loginPasswordInput.text?.toString() else null,
|
|
||||||
email = if (api.requiresEmail) binding.loginEmailInput.text?.toString() else null,
|
|
||||||
server = if (api.requiresServer) binding.loginServerInput.text?.toString() else null,
|
|
||||||
)
|
|
||||||
ioSafe {
|
|
||||||
val isSuccessful = try {
|
|
||||||
api.login(loginData)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
logError(e)
|
|
||||||
false
|
|
||||||
}
|
|
||||||
activity.runOnUiThread {
|
|
||||||
try {
|
|
||||||
showToast(
|
|
||||||
activity.getString(if (isSuccessful) R.string.authenticated_user else R.string.authenticated_user_fail)
|
|
||||||
.format(
|
|
||||||
api.name
|
|
||||||
)
|
|
||||||
)
|
|
||||||
} catch (e: Exception) {
|
|
||||||
logError(e) // format might fail
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
dialog.dismissSafe(activity)
|
|
||||||
}
|
|
||||||
binding.cancelBtt.setOnClickListener {
|
|
||||||
dialog.dismissSafe(activity)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
else -> {
|
else -> {
|
||||||
throw NotImplementedError("You are trying to add an account that has an unknown login method")
|
throw NotImplementedError("You are trying to add an account that has an unknown login method")
|
||||||
}
|
}
|
||||||
|
@ -269,7 +152,7 @@ class SettingsAccount : PreferenceFragmentCompat() {
|
||||||
if (info != null) {
|
if (info != null) {
|
||||||
showLoginInfo(activity, api, info)
|
showLoginInfo(activity, api, info)
|
||||||
} else {
|
} else {
|
||||||
addAccount(activity, api)
|
activity?.let { activity -> addAccount(activity, api) }
|
||||||
}
|
}
|
||||||
return@setOnPreferenceClickListener true
|
return@setOnPreferenceClickListener true
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,16 +6,17 @@ import android.widget.TextView
|
||||||
import androidx.appcompat.app.AlertDialog
|
import androidx.appcompat.app.AlertDialog
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
|
import androidx.viewbinding.ViewBinding
|
||||||
import com.google.android.material.button.MaterialButton
|
import com.google.android.material.button.MaterialButton
|
||||||
import com.lagradost.cloudstream3.syncproviders.AuthAPI
|
import com.lagradost.cloudstream3.syncproviders.AuthAPI
|
||||||
import com.lagradost.cloudstream3.ui.settings.SettingsFragment
|
import com.lagradost.cloudstream3.ui.settings.SettingsFragment
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
||||||
|
|
||||||
abstract class DialogBuilder(
|
abstract class DialogBuilder<T : ViewBinding>(
|
||||||
private val api: AuthAPI,
|
private val api: AuthAPI,
|
||||||
private val activity: FragmentActivity?,
|
private val activity: FragmentActivity?,
|
||||||
private val themeResId: Int,
|
private val themeResId: Int,
|
||||||
private val layoutResId: Int,
|
val binding: T,
|
||||||
) {
|
) {
|
||||||
class CommonDialogItems(
|
class CommonDialogItems(
|
||||||
private val dialog: AlertDialog,
|
private val dialog: AlertDialog,
|
||||||
|
@ -57,7 +58,7 @@ abstract class DialogBuilder(
|
||||||
return null
|
return null
|
||||||
}
|
}
|
||||||
|
|
||||||
val dialogBuilder = AlertDialog.Builder(activity, themeResId).setView(layoutResId)
|
val dialogBuilder = AlertDialog.Builder(activity, themeResId).setView(binding.root)
|
||||||
val dialog = dialogBuilder.show()
|
val dialog = dialogBuilder.show()
|
||||||
|
|
||||||
setup(dialog)
|
setup(dialog)
|
||||||
|
@ -111,8 +112,8 @@ abstract class DialogBuilder(
|
||||||
val displayedItems = getVisibilityMap(dialog).keys.filter { it.isVisible }
|
val displayedItems = getVisibilityMap(dialog).keys.filter { it.isVisible }
|
||||||
|
|
||||||
displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous ->
|
displayedItems.foldRight(displayedItems.firstOrNull()) { item, previous ->
|
||||||
item?.id?.let { previous?.nextFocusDownId = it }
|
item.id.let { previous?.nextFocusDownId = it }
|
||||||
previous?.id?.let { item?.nextFocusUpId = it }
|
previous?.id?.let { item.nextFocusUpId = it }
|
||||||
item
|
item
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -8,30 +8,30 @@ import androidx.fragment.app.FragmentActivity
|
||||||
import com.lagradost.cloudstream3.AcraApplication
|
import com.lagradost.cloudstream3.AcraApplication
|
||||||
import com.lagradost.cloudstream3.CommonActivity
|
import com.lagradost.cloudstream3.CommonActivity
|
||||||
import com.lagradost.cloudstream3.R
|
import com.lagradost.cloudstream3.R
|
||||||
|
import com.lagradost.cloudstream3.databinding.AddAccountInputBinding
|
||||||
import com.lagradost.cloudstream3.mvvm.logError
|
import com.lagradost.cloudstream3.mvvm.logError
|
||||||
import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI
|
import com.lagradost.cloudstream3.syncproviders.InAppAuthAPI
|
||||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
||||||
import kotlinx.android.synthetic.main.add_account_input.*
|
|
||||||
|
|
||||||
class InAppAuthDialogBuilder(
|
class InAppAuthDialogBuilder(
|
||||||
private val api: InAppAuthAPI,
|
private val api: InAppAuthAPI,
|
||||||
private val activity: FragmentActivity?,
|
private val activity: FragmentActivity,
|
||||||
) : DialogBuilder(
|
) : DialogBuilder<AddAccountInputBinding>(
|
||||||
api,
|
api,
|
||||||
activity,
|
activity,
|
||||||
R.style.AlertDialogCustom,
|
R.style.AlertDialogCustom,
|
||||||
R.layout.add_account_input,
|
AddAccountInputBinding.inflate(activity.layoutInflater),
|
||||||
) {
|
) {
|
||||||
|
|
||||||
override fun onLogin(dialog: AlertDialog): Unit = with(dialog) {
|
override fun onLogin(dialog: AlertDialog): Unit = with(binding) {
|
||||||
if (activity == null) throw IllegalStateException("Login should be called after validation")
|
// if (activity == null) throw IllegalStateException("Login should be called after validation")
|
||||||
|
|
||||||
val loginData = InAppAuthAPI.LoginData(
|
val loginData = InAppAuthAPI.LoginData(
|
||||||
username = if (api.requiresUsername) login_username_input?.text?.toString() else null,
|
username = if (api.requiresUsername) loginUsernameInput.text?.toString() else null,
|
||||||
password = if (api.requiresPassword) login_password_input?.text?.toString() else null,
|
password = if (api.requiresPassword) loginPasswordInput.text?.toString() else null,
|
||||||
email = if (api.requiresEmail) login_email_input?.text?.toString() else null,
|
email = if (api.requiresEmail) loginEmailInput.text?.toString() else null,
|
||||||
server = if (api.requiresServer) login_server_input?.text?.toString() else null,
|
server = if (api.requiresServer) loginServerInput.text?.toString() else null,
|
||||||
)
|
)
|
||||||
|
|
||||||
ioSafe {
|
ioSafe {
|
||||||
|
@ -41,6 +41,9 @@ class InAppAuthDialogBuilder(
|
||||||
logError(e)
|
logError(e)
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
if (isSuccessful) {
|
||||||
|
dialog.dismissSafe()
|
||||||
|
}
|
||||||
activity.runOnUiThread {
|
activity.runOnUiThread {
|
||||||
try {
|
try {
|
||||||
CommonActivity.showToast(
|
CommonActivity.showToast(
|
||||||
|
@ -58,43 +61,43 @@ class InAppAuthDialogBuilder(
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getCommonItems(dialog: AlertDialog) = with(dialog) {
|
override fun getCommonItems(dialog: AlertDialog) = with(binding) {
|
||||||
CommonDialogItems(dialog, text1, apply_btt, cancel_btt, create_account,null)
|
CommonDialogItems(dialog, text1, applyBtt, cancelBtt, createAccount,null)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getVisibilityMap(dialog: AlertDialog): Map<View, Boolean> = with(dialog) {
|
override fun getVisibilityMap(dialog: AlertDialog): Map<View, Boolean> = with(binding) {
|
||||||
mapOf(
|
mapOf(
|
||||||
login_email_input to api.requiresEmail,
|
loginEmailInput to api.requiresEmail,
|
||||||
login_password_input to api.requiresPassword,
|
loginPasswordInput to api.requiresPassword,
|
||||||
login_server_input to api.requiresServer,
|
loginServerInput to api.requiresServer,
|
||||||
login_username_input to api.requiresUsername
|
loginUsernameInput to api.requiresUsername
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupItems(dialog: AlertDialog): Unit = with(dialog) {
|
override fun setupItems(dialog: AlertDialog): Unit = with(binding) {
|
||||||
login_email_input?.isVisible = api.requiresEmail
|
loginEmailInput.isVisible = api.requiresEmail
|
||||||
login_password_input?.isVisible = api.requiresPassword
|
loginPasswordInput.isVisible = api.requiresPassword
|
||||||
login_server_input?.isVisible = api.requiresServer
|
loginServerInput.isVisible = api.requiresServer
|
||||||
login_username_input?.isVisible = api.requiresUsername
|
loginUsernameInput.isVisible = api.requiresUsername
|
||||||
|
|
||||||
create_account?.isGone = api.createAccountUrl.isNullOrBlank()
|
createAccount.isGone = api.createAccountUrl.isNullOrBlank()
|
||||||
create_account?.setOnClickListener {
|
createAccount.setOnClickListener {
|
||||||
AcraApplication.openBrowser(
|
AcraApplication.openBrowser(
|
||||||
api.createAccountUrl ?: return@setOnClickListener, activity
|
api.createAccountUrl ?: return@setOnClickListener, activity
|
||||||
)
|
)
|
||||||
|
|
||||||
dismissSafe()
|
dialog.dismissSafe()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun handleStoresPasswordInPlainText(dialog: AlertDialog): Unit = with(dialog) {
|
override fun handleStoresPasswordInPlainText(dialog: AlertDialog): Unit = with(binding) {
|
||||||
if (!api.storesPasswordInPlainText) return
|
if (!api.storesPasswordInPlainText) return
|
||||||
|
|
||||||
api.getLatestLoginData()?.let { data ->
|
api.getLatestLoginData()?.let { data ->
|
||||||
login_email_input?.setText(data.email ?: "")
|
loginEmailInput.setText(data.email ?: "")
|
||||||
login_server_input?.setText(data.server ?: "")
|
loginServerInput.setText(data.server ?: "")
|
||||||
login_username_input?.setText(data.username ?: "")
|
loginUsernameInput.setText(data.username ?: "")
|
||||||
login_password_input?.setText(data.password ?: "")
|
loginPasswordInput.setText(data.password ?: "")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -8,66 +8,65 @@ import androidx.core.view.isGone
|
||||||
import androidx.core.view.isVisible
|
import androidx.core.view.isVisible
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import com.lagradost.cloudstream3.R
|
import com.lagradost.cloudstream3.R
|
||||||
|
import com.lagradost.cloudstream3.databinding.AddAccountInputOauthBinding
|
||||||
import com.lagradost.cloudstream3.syncproviders.InAppOAuth2API
|
import com.lagradost.cloudstream3.syncproviders.InAppOAuth2API
|
||||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
import com.lagradost.cloudstream3.utils.UIHelper.dismissSafe
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.apply_btt
|
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.cancel_btt
|
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.info_button
|
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.login_client_id
|
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.login_client_secret
|
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.login_file_name
|
|
||||||
import kotlinx.android.synthetic.main.add_account_input_oauth.text1
|
|
||||||
|
|
||||||
|
|
||||||
class InAppOAuth2DialogBuilder(
|
class InAppOAuth2DialogBuilder(
|
||||||
private val api: InAppOAuth2API,
|
private val api: InAppOAuth2API,
|
||||||
private val activity: FragmentActivity?,
|
private val activity: FragmentActivity,
|
||||||
) : DialogBuilder(api, activity, R.style.AlertDialogCustom, R.layout.add_account_input_oauth) {
|
) : DialogBuilder<AddAccountInputOauthBinding>(
|
||||||
override fun getCommonItems(dialog: AlertDialog) = with(dialog) {
|
api, activity, R.style.AlertDialogCustom,
|
||||||
CommonDialogItems(dialog, text1, apply_btt, cancel_btt, null, info_button)
|
AddAccountInputOauthBinding.inflate(activity.layoutInflater)
|
||||||
|
) {
|
||||||
|
override fun getCommonItems(dialog: AlertDialog) = with(binding) {
|
||||||
|
CommonDialogItems(dialog, text1, applyBtt, cancelBtt, null, infoButton)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getVisibilityMap(dialog: AlertDialog): Map<View, Boolean> = with(dialog) {
|
override fun getVisibilityMap(dialog: AlertDialog): Map<View, Boolean> = with(binding) {
|
||||||
mapOf(
|
mapOf(
|
||||||
login_file_name to api.requiresFilename,
|
loginFileName to api.requiresFilename,
|
||||||
login_client_id to api.requiresClientId,
|
loginClientId to api.requiresClientId,
|
||||||
login_client_secret to api.requiresSecret,
|
loginClientSecret to api.requiresSecret,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun setupItems(dialog: AlertDialog): Unit = with(dialog) {
|
override fun setupItems(dialog: AlertDialog): Unit = with(binding) {
|
||||||
login_file_name?.isVisible = api.requiresFilename
|
loginFileName.isVisible = api.requiresFilename
|
||||||
login_client_id?.isVisible = api.requiresClientId
|
loginClientId.isVisible = api.requiresClientId
|
||||||
login_client_secret?.isVisible = api.requiresSecret
|
loginClientSecret.isVisible = api.requiresSecret
|
||||||
|
|
||||||
info_button?.isGone = api.infoUrl.isNullOrBlank()
|
infoButton.isGone = api.infoUrl.isNullOrBlank()
|
||||||
info_button?.setOnClickListener {
|
infoButton.setOnClickListener {
|
||||||
val customTabIntent = CustomTabsIntent.Builder().setShowTitle(true).build()
|
val customTabIntent = CustomTabsIntent.Builder().setShowTitle(true).build()
|
||||||
customTabIntent.launchUrl(context, Uri.parse(api.infoUrl))
|
customTabIntent.launchUrl(binding.root.context, Uri.parse(api.infoUrl))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
override fun onLogin(dialog: AlertDialog): Unit = with(activity) {
|
override fun onLogin(dialog: AlertDialog): Unit = with(binding) {
|
||||||
if (this == null) throw IllegalStateException("Login should be called after validation")
|
// if (this == null) throw IllegalStateException("Login should be called after validation")
|
||||||
|
|
||||||
val clientId = dialog.login_client_id.text.toString().ifBlank {
|
val ctx = this.root.context
|
||||||
getString(R.string.debug_gdrive_clientId)
|
|
||||||
|
val clientId = loginClientId.text.toString().ifBlank {
|
||||||
|
ctx.getString(R.string.debug_gdrive_clientId)
|
||||||
}
|
}
|
||||||
val clientSecret = dialog.login_client_secret.text.toString().ifBlank {
|
val clientSecret = loginClientSecret.text.toString().ifBlank {
|
||||||
getString(R.string.debug_gdrive_secret)
|
ctx.getString(R.string.debug_gdrive_secret)
|
||||||
}
|
}
|
||||||
val syncFileName = dialog.login_file_name.text.toString().trim().ifBlank {
|
val syncFileName = loginFileName.text.toString().trim().ifBlank {
|
||||||
api.defaultFilenameValue
|
api.defaultFilenameValue
|
||||||
}
|
}
|
||||||
val redirectUrl = dialog.login_file_name.text.toString().trim().ifBlank {
|
val redirectUrl = loginFileName.text.toString().trim().ifBlank {
|
||||||
api.defaultRedirectUrl
|
api.defaultRedirectUrl
|
||||||
}
|
}
|
||||||
|
|
||||||
ioSafe {
|
ioSafe {
|
||||||
api.getAuthorizationToken(
|
api.getAuthorizationToken(
|
||||||
this@with,
|
this@InAppOAuth2DialogBuilder.activity,
|
||||||
InAppOAuth2API.LoginData(
|
InAppOAuth2API.LoginData(
|
||||||
clientId = clientId,
|
clientId = clientId,
|
||||||
secret = clientSecret,
|
secret = clientSecret,
|
||||||
|
|
|
@ -53,7 +53,7 @@ class SetupFragmentLanguage : Fragment() {
|
||||||
|
|
||||||
val ctx = context ?: return@normalSafeApiCall
|
val ctx = context ?: return@normalSafeApiCall
|
||||||
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||||
.attachBackupListener(getSyncPrefs()).self
|
.attachBackupListener(ctx.getSyncPrefs()).self
|
||||||
|
|
||||||
val arrayAdapter =
|
val arrayAdapter =
|
||||||
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
||||||
|
|
|
@ -45,7 +45,7 @@ class SetupFragmentLayout : Fragment() {
|
||||||
val ctx = context ?: return@normalSafeApiCall
|
val ctx = context ?: return@normalSafeApiCall
|
||||||
|
|
||||||
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||||
.attachBackupListener(getSyncPrefs()).self
|
.attachBackupListener(ctx.getSyncPrefs()).self
|
||||||
|
|
||||||
val prefNames = resources.getStringArray(R.array.app_layout)
|
val prefNames = resources.getStringArray(R.array.app_layout)
|
||||||
val prefValues = resources.getIntArray(R.array.app_layout_values)
|
val prefValues = resources.getIntArray(R.array.app_layout_values)
|
||||||
|
|
|
@ -10,7 +10,6 @@ import androidx.core.util.forEach
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.navigation.fragment.findNavController
|
import androidx.navigation.fragment.findNavController
|
||||||
import androidx.preference.PreferenceManager
|
import androidx.preference.PreferenceManager
|
||||||
import com.lagradost.cloudstream3.AcraApplication.Companion.removeKey
|
|
||||||
import com.lagradost.cloudstream3.R
|
import com.lagradost.cloudstream3.R
|
||||||
import com.lagradost.cloudstream3.TvType
|
import com.lagradost.cloudstream3.TvType
|
||||||
import com.lagradost.cloudstream3.databinding.FragmentSetupMediaBinding
|
import com.lagradost.cloudstream3.databinding.FragmentSetupMediaBinding
|
||||||
|
@ -19,8 +18,6 @@ import com.lagradost.cloudstream3.utils.DataStoreHelper
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||||
import com.lagradost.cloudstream3.utils.Scheduler.Companion.attachBackupListener
|
import com.lagradost.cloudstream3.utils.Scheduler.Companion.attachBackupListener
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.getSyncPrefs
|
import com.lagradost.cloudstream3.utils.DataStore.getSyncPrefs
|
||||||
import com.lagradost.cloudstream3.utils.DataStore.removeKey
|
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
|
||||||
|
|
||||||
|
|
||||||
class SetupFragmentMedia : Fragment() {
|
class SetupFragmentMedia : Fragment() {
|
||||||
|
@ -49,7 +46,7 @@ class SetupFragmentMedia : Fragment() {
|
||||||
|
|
||||||
val ctx = context ?: return@normalSafeApiCall
|
val ctx = context ?: return@normalSafeApiCall
|
||||||
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||||
.attachBackupListener(getSyncPrefs()).self
|
.attachBackupListener(ctx.getSyncPrefs()).self
|
||||||
|
|
||||||
val arrayAdapter =
|
val arrayAdapter =
|
||||||
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
||||||
|
|
|
@ -48,7 +48,7 @@ class SetupFragmentProviderLanguage : Fragment() {
|
||||||
val ctx = context ?: return@normalSafeApiCall
|
val ctx = context ?: return@normalSafeApiCall
|
||||||
|
|
||||||
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
val settingsManager = PreferenceManager.getDefaultSharedPreferences(ctx)
|
||||||
.attachBackupListener(getSyncPrefs()).self
|
.attachBackupListener(ctx.getSyncPrefs()).self
|
||||||
|
|
||||||
val arrayAdapter =
|
val arrayAdapter =
|
||||||
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
ArrayAdapter<String>(ctx, R.layout.sort_bottom_single_choice)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue