72 lines
2.3 KiB
Kotlin
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
|
|
}
|
|
}
|