From 0042052458939f9477eeda9db8e601809b1d5137 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Sun, 18 Apr 2021 00:50:40 -0400 Subject: [PATCH] Part 2 of incognito (Enabling) For this, i've finally changed the settings button in the 3 main tabs to more button, which opens a custom dialog with a toggle for incognito, settings, about, and help Also we're now at 4* animations this release --- .../kanade/tachiyomi/ui/main/MainActivity.kt | 28 +++-- .../tachiyomi/ui/main/OverflowDialog.kt | 94 +++++++++++++++ .../tachiyomi/util/lang/StringExtensions.kt | 11 ++ .../main/res/anim/fade_in_grow_from_top.xml | 11 ++ app/src/main/res/anim/fade_out_short.xml | 6 + .../main/res/drawable/anim_incog_to_read.xml | 46 ++++++++ .../main/res/drawable/anim_read_to_incog.xml | 47 ++++++++ app/src/main/res/drawable/ic_blank_28dp.xml | 10 ++ app/src/main/res/drawable/ic_glasses_24dp.xml | 8 ++ .../res/drawable/ic_help_outline_24dp.xml | 11 ++ .../main/res/drawable/ic_incognito_24dp.xml | 8 ++ .../main/res/drawable/ic_more_vert_24dp.xml | 3 +- .../res/drawable/ic_outline_settings_24dp.xml | 10 ++ .../main/res/layout/tachi_overflow_layout.xml | 107 ++++++++++++++++++ app/src/main/res/menu/catalogue_main.xml | 9 +- app/src/main/res/menu/library.xml | 6 +- app/src/main/res/menu/recents.xml | 6 +- app/src/main/res/values/styles.xml | 9 ++ 18 files changed, 410 insertions(+), 20 deletions(-) create mode 100644 app/src/main/java/eu/kanade/tachiyomi/ui/main/OverflowDialog.kt create mode 100644 app/src/main/res/anim/fade_in_grow_from_top.xml create mode 100644 app/src/main/res/anim/fade_out_short.xml create mode 100644 app/src/main/res/drawable/anim_incog_to_read.xml create mode 100644 app/src/main/res/drawable/anim_read_to_incog.xml create mode 100644 app/src/main/res/drawable/ic_blank_28dp.xml create mode 100644 app/src/main/res/drawable/ic_glasses_24dp.xml create mode 100644 app/src/main/res/drawable/ic_help_outline_24dp.xml create mode 100644 app/src/main/res/drawable/ic_incognito_24dp.xml create mode 100644 app/src/main/res/drawable/ic_outline_settings_24dp.xml create mode 100644 app/src/main/res/layout/tachi_overflow_layout.xml diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index 9d66db9ca8..0f310531dc 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.main import android.animation.AnimatorSet import android.animation.ValueAnimator +import android.app.Dialog import android.content.Intent import android.graphics.Color import android.graphics.Rect @@ -29,8 +30,6 @@ import com.bluelinelabs.conductor.Conductor import com.bluelinelabs.conductor.Controller import com.bluelinelabs.conductor.ControllerChangeHandler import com.bluelinelabs.conductor.Router -import com.bluelinelabs.conductor.RouterTransaction -import com.bluelinelabs.conductor.changehandler.FadeChangeHandler import com.getkeepsafe.taptargetview.TapTarget import com.getkeepsafe.taptargetview.TapTargetView import com.google.android.material.snackbar.Snackbar @@ -112,6 +111,7 @@ open class MainActivity : BaseActivity(), DownloadServiceLi private val updateChecker by lazy { UpdateChecker.getUpdateChecker() } private val isUpdaterEnabled = BuildConfig.INCLUDE_UPDATER var tabAnimation: ValueAnimator? = null + var overflowDialog: Dialog? = null fun setUndoSnackBar(snackBar: Snackbar?, extraViewToCheck: View? = null) { this.snackBar = snackBar @@ -548,6 +548,8 @@ open class MainActivity : BaseActivity(), DownloadServiceLi override fun onDestroy() { super.onDestroy() + overflowDialog?.dismiss() + overflowDialog = null DownloadService.removeListener(this) if (isBindingInitialized) { binding.toolbar.setNavigationOnClickListener(null) @@ -609,18 +611,28 @@ open class MainActivity : BaseActivity(), DownloadServiceLi override fun onOptionsItemSelected(item: MenuItem): Boolean { when (item.itemId) { // Initialize option to open catalogue settings. - R.id.action_settings -> { - router.pushController( - (RouterTransaction.with(SettingsMainController())).popChangeHandler( - FadeChangeHandler() - ).pushChangeHandler(FadeChangeHandler()) - ) + R.id.action_more -> { + if (overflowDialog != null) return false + val overflowDialog = OverflowDialog(this) + this.overflowDialog = overflowDialog + overflowDialog.setOnDismissListener { + this.overflowDialog = null + } + overflowDialog.show() } else -> return super.onOptionsItemSelected(item) } return super.onOptionsItemSelected(item) } + fun showSettings() { + router.pushController(SettingsMainController().withFadeTransaction()) + } + + fun showAbout() { + router.pushController(AboutController().withFadeTransaction()) + } + override fun dispatchTouchEvent(ev: MotionEvent?): Boolean { gestureDetector?.onTouchEvent(ev) if (ev?.action == MotionEvent.ACTION_DOWN) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/OverflowDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/OverflowDialog.kt new file mode 100644 index 0000000000..74489314f3 --- /dev/null +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/OverflowDialog.kt @@ -0,0 +1,94 @@ +package eu.kanade.tachiyomi.ui.main + +import android.app.Dialog +import android.graphics.Color +import android.graphics.drawable.AnimatedVectorDrawable +import android.view.View +import android.view.ViewGroup +import eu.kanade.tachiyomi.BuildConfig +import eu.kanade.tachiyomi.R +import eu.kanade.tachiyomi.data.preference.PreferencesHelper +import eu.kanade.tachiyomi.data.preference.toggle +import eu.kanade.tachiyomi.databinding.TachiOverflowLayoutBinding +import eu.kanade.tachiyomi.util.lang.withSubtitle +import eu.kanade.tachiyomi.util.system.dpToPx +import eu.kanade.tachiyomi.util.system.openInBrowser +import eu.kanade.tachiyomi.util.view.updateLayoutParams +import uy.kohesive.injekt.injectLazy + +class OverflowDialog(activity: MainActivity) : Dialog(activity, R.style.OverflowDialogTheme) { + + val binding = TachiOverflowLayoutBinding.inflate(activity.layoutInflater, null, false) + val preferences: PreferencesHelper by injectLazy() + + init { + setContentView(binding.root) + + binding.touchOutside.setOnClickListener { + dismiss() + } + val incogText = context.getString(R.string.incognito_mode) + with(binding.incognitoModeItem) { + val titleText = context.getString( + if (preferences.incognitoMode().get()) R.string.turn_off_ + else R.string.turn_on_, + incogText + ) + val subtitleText = context.getString(R.string.pauses_reading_history) + text = titleText.withSubtitle(context, subtitleText) + setIcon( + if (preferences.incognitoMode().get()) R.drawable.ic_incognito_24dp + else R.drawable.ic_glasses_24dp + ) + setOnClickListener { + preferences.incognitoMode().toggle() + val incog = preferences.incognitoMode().get() + val newTitle = context.getString( + if (incog) R.string.turn_off_ + else R.string.turn_on_, + incogText + ) + text = newTitle.withSubtitle(context, subtitleText) + setIcon( + if (incog) R.drawable.anim_read_to_incog + else R.drawable.anim_incog_to_read + ) + (getIcon() as? AnimatedVectorDrawable)?.start() + } + } + binding.settingsItem.setOnClickListener { + activity.showSettings() + dismiss() + } + + binding.helpItem.setOnClickListener { + activity.openInBrowser(URL_HELP) + dismiss() + } + + binding.aboutItem.text = context.getString(R.string.about).withSubtitle(context, "v${BuildConfig.VERSION_NAME}") + + binding.aboutItem.setOnClickListener { + activity.showAbout() + dismiss() + } + + binding.overflowCardView.updateLayoutParams { + topMargin = activity.binding.toolbar.height - 2.dpToPx + } + window?.let { window -> + window.navigationBarColor = Color.TRANSPARENT + window.decorView.fitsSystemWindows = true + window.decorView.systemUiVisibility = window.decorView.systemUiVisibility + .rem(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { + window.decorView.systemUiVisibility = window.decorView.systemUiVisibility + .rem(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR) + } + } + } + + private companion object { + private const val URL_HELP = "https://tachiyomi.org/help/" + } +} diff --git a/app/src/main/java/eu/kanade/tachiyomi/util/lang/StringExtensions.kt b/app/src/main/java/eu/kanade/tachiyomi/util/lang/StringExtensions.kt index d51b35dee6..a024734d71 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/util/lang/StringExtensions.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/util/lang/StringExtensions.kt @@ -99,6 +99,17 @@ fun String.indexesOf(substr: String, ignoreCase: Boolean = true): List { } } +fun String.withSubtitle(context: Context, subtitle: String): Spanned { + val spannable = SpannableStringBuilder(this + "\n" + subtitle) + spannable.setSpan( + ForegroundColorSpan(context.getResourceColor(android.R.attr.textColorSecondary)), + this.length + 1, + spannable.length, + Spannable.SPAN_EXCLUSIVE_EXCLUSIVE + ) + return spannable +} + fun String.addBetaTag(context: Context): Spanned { val betaText = context.getString(R.string.beta) val betaSpan = SpannableStringBuilder(this + betaText) diff --git a/app/src/main/res/anim/fade_in_grow_from_top.xml b/app/src/main/res/anim/fade_in_grow_from_top.xml new file mode 100644 index 0000000000..a269d214e5 --- /dev/null +++ b/app/src/main/res/anim/fade_in_grow_from_top.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/anim/fade_out_short.xml b/app/src/main/res/anim/fade_out_short.xml new file mode 100644 index 0000000000..d85100d8d1 --- /dev/null +++ b/app/src/main/res/anim/fade_out_short.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/anim_incog_to_read.xml b/app/src/main/res/drawable/anim_incog_to_read.xml new file mode 100644 index 0000000000..645c2fb9e6 --- /dev/null +++ b/app/src/main/res/drawable/anim_incog_to_read.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/anim_read_to_incog.xml b/app/src/main/res/drawable/anim_read_to_incog.xml new file mode 100644 index 0000000000..c7125ec6cd --- /dev/null +++ b/app/src/main/res/drawable/anim_read_to_incog.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_blank_28dp.xml b/app/src/main/res/drawable/ic_blank_28dp.xml new file mode 100644 index 0000000000..728b4afdc0 --- /dev/null +++ b/app/src/main/res/drawable/ic_blank_28dp.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_glasses_24dp.xml b/app/src/main/res/drawable/ic_glasses_24dp.xml new file mode 100644 index 0000000000..738e332366 --- /dev/null +++ b/app/src/main/res/drawable/ic_glasses_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_help_outline_24dp.xml b/app/src/main/res/drawable/ic_help_outline_24dp.xml new file mode 100644 index 0000000000..302ec7cd53 --- /dev/null +++ b/app/src/main/res/drawable/ic_help_outline_24dp.xml @@ -0,0 +1,11 @@ + + + diff --git a/app/src/main/res/drawable/ic_incognito_24dp.xml b/app/src/main/res/drawable/ic_incognito_24dp.xml new file mode 100644 index 0000000000..d923bfcd35 --- /dev/null +++ b/app/src/main/res/drawable/ic_incognito_24dp.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_more_vert_24dp.xml b/app/src/main/res/drawable/ic_more_vert_24dp.xml index 0ef23a5676..a988f72688 100644 --- a/app/src/main/res/drawable/ic_more_vert_24dp.xml +++ b/app/src/main/res/drawable/ic_more_vert_24dp.xml @@ -2,7 +2,8 @@ android:width="24dp" android:height="24dp" android:viewportHeight="24.0" - android:viewportWidth="24.0"> + android:viewportWidth="24.0" + android:tint="?actionBarTintColor"> diff --git a/app/src/main/res/drawable/ic_outline_settings_24dp.xml b/app/src/main/res/drawable/ic_outline_settings_24dp.xml new file mode 100644 index 0000000000..21fc727076 --- /dev/null +++ b/app/src/main/res/drawable/ic_outline_settings_24dp.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/tachi_overflow_layout.xml b/app/src/main/res/layout/tachi_overflow_layout.xml new file mode 100644 index 0000000000..162f6c1b60 --- /dev/null +++ b/app/src/main/res/layout/tachi_overflow_layout.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/catalogue_main.xml b/app/src/main/res/menu/catalogue_main.xml index 0c7c03d41a..4d5f3f7507 100644 --- a/app/src/main/res/menu/catalogue_main.xml +++ b/app/src/main/res/menu/catalogue_main.xml @@ -16,9 +16,8 @@ app:showAsAction="ifRoom"/> + android:id="@+id/action_more" + android:icon="@drawable/ic_more_vert_24dp" + android:title="@string/more" + app:showAsAction="ifRoom" /> diff --git a/app/src/main/res/menu/library.xml b/app/src/main/res/menu/library.xml index 7e1ba10ac7..0649b82d11 100644 --- a/app/src/main/res/menu/library.xml +++ b/app/src/main/res/menu/library.xml @@ -20,9 +20,9 @@ app:showAsAction="ifRoom" /> diff --git a/app/src/main/res/menu/recents.xml b/app/src/main/res/menu/recents.xml index ff43557517..9f85104c84 100644 --- a/app/src/main/res/menu/recents.xml +++ b/app/src/main/res/menu/recents.xml @@ -17,8 +17,8 @@ app:showAsAction="ifRoom" /> \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 7f78ed917e..429773c717 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -187,6 +187,15 @@ @android:color/transparent + + + +