mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Add tracker logout dialog (closes #2475)
This commit is contained in:
		| @@ -8,16 +8,18 @@ import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.track.TrackManager | ||||
| import eu.kanade.tachiyomi.data.track.TrackService | ||||
| import eu.kanade.tachiyomi.data.track.anilist.AnilistApi | ||||
| import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi | ||||
| import eu.kanade.tachiyomi.data.track.bangumi.BangumiApi | ||||
| import eu.kanade.tachiyomi.data.track.shikimori.ShikimoriApi | ||||
| import eu.kanade.tachiyomi.util.getResourceColor | ||||
| import eu.kanade.tachiyomi.widget.preference.LoginPreference | ||||
| import eu.kanade.tachiyomi.widget.preference.TrackLoginDialog | ||||
| import eu.kanade.tachiyomi.widget.preference.TrackLogoutDialog | ||||
| import uy.kohesive.injekt.injectLazy | ||||
| import eu.kanade.tachiyomi.data.preference.PreferenceKeys as Keys | ||||
|  | ||||
| class SettingsTrackingController : SettingsController(), | ||||
|         TrackLoginDialog.Listener { | ||||
|         TrackLoginDialog.Listener, | ||||
|         TrackLogoutDialog.Listener { | ||||
|  | ||||
|     private val trackManager: TrackManager by injectLazy() | ||||
|  | ||||
| @@ -33,57 +35,57 @@ class SettingsTrackingController : SettingsController(), | ||||
|             titleRes = R.string.services | ||||
|  | ||||
|             trackPreference(trackManager.myAnimeList) { | ||||
|                 onClick { | ||||
|                     val dialog = TrackLoginDialog(trackManager.myAnimeList) | ||||
|                     dialog.targetController = this@SettingsTrackingController | ||||
|                     dialog.showDialog(router) | ||||
|                 } | ||||
|                 val dialog = TrackLoginDialog(trackManager.myAnimeList) | ||||
|                 dialog.targetController = this@SettingsTrackingController | ||||
|                 dialog.showDialog(router) | ||||
|             } | ||||
|             trackPreference(trackManager.aniList) { | ||||
|                 onClick { | ||||
|                     val tabsIntent = CustomTabsIntent.Builder() | ||||
|                             .setToolbarColor(context.getResourceColor(R.attr.colorPrimary)) | ||||
|                             .build() | ||||
|                     tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) | ||||
|                     tabsIntent.launchUrl(activity!!, AnilistApi.authUrl()) | ||||
|                 } | ||||
|                 val tabsIntent = CustomTabsIntent.Builder() | ||||
|                         .setToolbarColor(context.getResourceColor(R.attr.colorPrimary)) | ||||
|                         .build() | ||||
|                 tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) | ||||
|                 tabsIntent.launchUrl(activity!!, AnilistApi.authUrl()) | ||||
|             } | ||||
|             trackPreference(trackManager.kitsu) { | ||||
|                 onClick { | ||||
|                     val dialog = TrackLoginDialog(trackManager.kitsu) | ||||
|                     dialog.targetController = this@SettingsTrackingController | ||||
|                     dialog.showDialog(router) | ||||
|                 } | ||||
|                 val dialog = TrackLoginDialog(trackManager.kitsu) | ||||
|                 dialog.targetController = this@SettingsTrackingController | ||||
|                 dialog.showDialog(router) | ||||
|             } | ||||
|             trackPreference(trackManager.shikimori) { | ||||
|                 onClick { | ||||
|                     val tabsIntent = CustomTabsIntent.Builder() | ||||
|                             .setToolbarColor(context.getResourceColor(R.attr.colorPrimary)) | ||||
|                             .build() | ||||
|                     tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) | ||||
|                     tabsIntent.launchUrl(activity!!, ShikimoriApi.authUrl()) | ||||
|                 } | ||||
|                 val tabsIntent = CustomTabsIntent.Builder() | ||||
|                         .setToolbarColor(context.getResourceColor(R.attr.colorPrimary)) | ||||
|                         .build() | ||||
|                 tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) | ||||
|                 tabsIntent.launchUrl(activity!!, ShikimoriApi.authUrl()) | ||||
|             } | ||||
|             trackPreference(trackManager.bangumi) { | ||||
|                 onClick { | ||||
|                     val tabsIntent = CustomTabsIntent.Builder() | ||||
|                             .setToolbarColor(context.getResourceColor(R.attr.colorPrimary)) | ||||
|                             .build() | ||||
|                     tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) | ||||
|                     tabsIntent.launchUrl(activity!!, BangumiApi.authUrl()) | ||||
|                 } | ||||
|                 val tabsIntent = CustomTabsIntent.Builder() | ||||
|                         .setToolbarColor(context.getResourceColor(R.attr.colorPrimary)) | ||||
|                         .build() | ||||
|                 tabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) | ||||
|                 tabsIntent.launchUrl(activity!!, BangumiApi.authUrl()) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     inline fun PreferenceScreen.trackPreference( | ||||
|     private inline fun PreferenceScreen.trackPreference( | ||||
|             service: TrackService, | ||||
|             block: (@DSL LoginPreference).() -> Unit | ||||
|             crossinline login: () -> Unit | ||||
|     ): LoginPreference { | ||||
|         return initThenAdd(LoginPreference(context).apply { | ||||
|             key = Keys.trackUsername(service.id) | ||||
|             title = service.name | ||||
|         }, block) | ||||
|         }, { | ||||
|             onClick { | ||||
|                 if (service.isLogged) { | ||||
|                     val dialog = TrackLogoutDialog(service) | ||||
|                     dialog.targetController = this@SettingsTrackingController | ||||
|                     dialog.showDialog(router) | ||||
|                 } else { | ||||
|                     login() | ||||
|                 } | ||||
|             } | ||||
|         }) | ||||
|     } | ||||
|  | ||||
|     override fun onActivityResumed(activity: Activity) { | ||||
| @@ -100,7 +102,11 @@ class SettingsTrackingController : SettingsController(), | ||||
|         pref?.notifyChanged() | ||||
|     } | ||||
|  | ||||
|     override fun trackDialogClosed(service: TrackService) { | ||||
|     override fun trackLoginDialogClosed(service: TrackService) { | ||||
|         updatePreference(service.id) | ||||
|     } | ||||
|  | ||||
|     override fun trackLogoutDialogClosed(service: TrackService) { | ||||
|         updatePreference(service.id) | ||||
|     } | ||||
|  | ||||
|   | ||||
| @@ -51,11 +51,11 @@ class TrackLoginDialog(bundle: Bundle? = null) : LoginDialogPreference(bundle) { | ||||
|  | ||||
|     override fun onDialogClosed() { | ||||
|         super.onDialogClosed() | ||||
|         (targetController as? Listener)?.trackDialogClosed(service) | ||||
|         (targetController as? Listener)?.trackLoginDialogClosed(service) | ||||
|     } | ||||
|  | ||||
|     interface Listener { | ||||
|         fun trackDialogClosed(service: TrackService) | ||||
|         fun trackLoginDialogClosed(service: TrackService) | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
| @@ -0,0 +1,37 @@ | ||||
| package eu.kanade.tachiyomi.widget.preference | ||||
|  | ||||
| import android.app.Dialog | ||||
| import android.os.Bundle | ||||
| import com.afollestad.materialdialogs.MaterialDialog | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.track.TrackManager | ||||
| import eu.kanade.tachiyomi.data.track.TrackService | ||||
| import eu.kanade.tachiyomi.ui.base.controller.DialogController | ||||
| import eu.kanade.tachiyomi.util.toast | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| class TrackLogoutDialog(bundle: Bundle? = null) : DialogController(bundle) { | ||||
|  | ||||
|     private val service = Injekt.get<TrackManager>().getService(args.getInt("key"))!! | ||||
|  | ||||
|     constructor(service: TrackService) : this(Bundle().apply { putInt("key", service.id) }) | ||||
|  | ||||
|     override fun onCreateDialog(savedViewState: Bundle?): Dialog { | ||||
|         return MaterialDialog.Builder(activity!!) | ||||
|                 .title(activity!!.getString(R.string.logout_title, service.name)) | ||||
|                 .positiveText(R.string.logout) | ||||
|                 .onPositive { _, _ -> | ||||
|                     service.logout() | ||||
|                     (targetController as? Listener)?.trackLogoutDialogClosed(service) | ||||
|                     activity?.toast(R.string.logout_success) | ||||
|                 } | ||||
|                 .negativeText(android.R.string.cancel) | ||||
|                 .build() | ||||
|     } | ||||
|  | ||||
|     interface Listener { | ||||
|         fun trackLogoutDialogClosed(service: TrackService) | ||||
|     } | ||||
|  | ||||
| } | ||||
		Reference in New Issue
	
	Block a user