1
0
Fork 0
fenix/app/src/main/java/org/mozilla/fenix/settings/about/SecretDebugMenuTrigger.kt

72 lines
2.3 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.settings.about
import android.view.View
import android.widget.Toast
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleObserver
import androidx.lifecycle.OnLifecycleEvent
import org.mozilla.fenix.R
import org.mozilla.fenix.utils.Settings
/**
* Triggers the "secret" debug menu when logoView is tapped 5 times.
*/
class SecretDebugMenuTrigger(
logoView: View,
private val settings: Settings
) : View.OnClickListener, LifecycleObserver {
private var secretDebugMenuClicks = 0
private var lastDebugMenuToast: Toast? = null
init {
if (!settings.showSecretDebugMenuThisSession) {
logoView.setOnClickListener(this)
}
}
/**
* Reset the [secretDebugMenuClicks] counter.
*/
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun clearClickCounter() {
secretDebugMenuClicks = 0
}
override fun onClick(v: View) {
// Because the user will mostly likely tap the logo in rapid succession,
// we ensure only 1 toast is shown at any given time.
lastDebugMenuToast?.cancel()
secretDebugMenuClicks += 1
when (secretDebugMenuClicks) {
in 2 until SECRET_DEBUG_MENU_CLICKS -> {
val clicksLeft = SECRET_DEBUG_MENU_CLICKS - secretDebugMenuClicks
val toast = Toast.makeText(
v.context,
v.context.getString(R.string.about_debug_menu_toast_progress, clicksLeft),
Toast.LENGTH_SHORT
)
toast.show()
lastDebugMenuToast = toast
}
SECRET_DEBUG_MENU_CLICKS -> {
Toast.makeText(
v.context,
R.string.about_debug_menu_toast_done,
Toast.LENGTH_LONG
).show()
settings.showSecretDebugMenuThisSession = true
}
}
}
companion object {
// Number of clicks on the app logo to enable the "secret" debug menu.
private const val SECRET_DEBUG_MENU_CLICKS = 5
}
}