[Debug] Add new debug mode. Include hidden Chucker in release.

This commit is contained in:
Kuba Szczodrzyński
2020-02-26 20:37:55 +01:00
parent d5863485f9
commit f6f1370edf
11 changed files with 132 additions and 6 deletions

View File

@ -60,6 +60,7 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope {
get() = profile.id
var devMode = false
var debugMode = false
}
val notificationChannelsManager by lazy { NotificationChannelsManager(this) }
@ -103,7 +104,7 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope {
.readTimeout(10, TimeUnit.SECONDS)
builder.installHttpsSupport(this)
if (devMode || BuildConfig.DEBUG) {
if (debugMode || BuildConfig.DEBUG) {
HyperLog.initialize(this)
HyperLog.setLogLevel(Log.VERBOSE)
HyperLog.setLogFormat(DebugLogFormat(this))
@ -158,6 +159,7 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope {
Iconics.registerFont(SzkolnyFont)
App.db = AppDb(this)
Themes.themeInt = config.ui.theme
debugMode = config.debugMode
MHttp.instance().customOkHttpClient(http)
if (!profileLoadById(config.lastProfileId)) {
@ -174,6 +176,7 @@ class App : MultiDexApplication(), Configuration.Provider, CoroutineScope {
if (config.devModePassword != null)
checkDevModePassword()
debugMode = devMode || config.debugMode
if (config.sync.enabled)
SyncWorker.scheduleNext(this@App, false)

View File

@ -75,6 +75,11 @@ class Config(val db: AppDb) : CoroutineScope, AbstractConfig {
get() { mPrivacyPolicyAccepted = mPrivacyPolicyAccepted ?: values.get("privacyPolicyAccepted", false); return mPrivacyPolicyAccepted ?: false }
set(value) { set("privacyPolicyAccepted", value); mPrivacyPolicyAccepted = value }
private var mDebugMode: Boolean? = null
var debugMode: Boolean
get() { mDebugMode = mDebugMode ?: values.get("debugMode", false); return mDebugMode ?: false }
set(value) { set("debugMode", value); mDebugMode = value }
private var mDevModePassword: String? = null
var devModePassword: String?
get() { mDevModePassword = mDevModePassword ?: values.get("devModePassword", null as String?); return mDevModePassword }

View File

@ -23,6 +23,7 @@ class LoginActivity : AppCompatActivity(), CoroutineScope {
private const val TAG = "LoginActivity"
@JvmField
var navOptions: NavOptions? = null
var thisOneIsTricky = 0
}
private val app: App by lazy { applicationContext as App }
@ -73,6 +74,8 @@ class LoginActivity : AppCompatActivity(), CoroutineScope {
super.onCreate(savedInstanceState)
setTheme(R.style.AppTheme_Light)
thisOneIsTricky = -1
navOptions = NavOptions.Builder()
.setEnterAnim(R.anim.slide_in_right)
.setExitAnim(R.anim.slide_out_left)

View File

@ -3,16 +3,25 @@ package pl.szczodrzynski.edziennik.ui.modules.login
import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.os.Process
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AnimationUtils
import android.widget.CompoundButton
import androidx.fragment.app.Fragment
import com.afollestad.materialdialogs.DialogAction
import com.afollestad.materialdialogs.MaterialDialog
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import pl.szczodrzynski.edziennik.App
import pl.szczodrzynski.edziennik.R
import pl.szczodrzynski.edziennik.databinding.FragmentLoginChooserBinding
import pl.szczodrzynski.edziennik.onChange
import pl.szczodrzynski.edziennik.onClick
import pl.szczodrzynski.edziennik.ui.modules.feedback.FeedbackActivity
import pl.szczodrzynski.edziennik.utils.Anim
import kotlin.system.exitProcess
class LoginChooserFragment : Fragment() {
companion object {
@ -34,6 +43,20 @@ class LoginChooserFragment : Fragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
b.topLogo.onClick {
if (LoginActivity.thisOneIsTricky <= -1) {
LoginActivity.thisOneIsTricky = 999
}
if (LoginActivity.thisOneIsTricky in 0..7) {
LoginActivity.thisOneIsTricky++
if (LoginActivity.thisOneIsTricky == 7) {
b.topLogo.startAnimation(AnimationUtils.loadAnimation(activity, R.anim.shake));
if (b.devMode.visibility != View.VISIBLE)
Anim.expand(b.devMode, 500, null);
LoginActivity.thisOneIsTricky = 3
}
}
}
b.loginMobidziennikLogo.onClick { nav.navigate(R.id.loginMobidziennikFragment, null, LoginActivity.navOptions) }
b.loginLibrusLogo.onClick { nav.navigate(R.id.loginLibrusFragment, null, LoginActivity.navOptions) }
b.loginVulcanLogo.onClick { nav.navigate(R.id.loginVulcanFragment, null, LoginActivity.navOptions) }
@ -61,6 +84,46 @@ class LoginChooserFragment : Fragment() {
}
}
b.devMode.visibility = if (App.debugMode) View.VISIBLE else View.GONE
b.devMode.onChange { v, isChecked ->
if (isChecked) {
MaterialDialog.Builder(activity)
.title(R.string.are_you_sure)
.content(R.string.dev_mode_enable_warning)
.positiveText(R.string.yes)
.negativeText(R.string.no)
.onPositive { _: MaterialDialog?, _: DialogAction? ->
app.config.debugMode = true
MaterialAlertDialogBuilder(activity)
.setTitle("Restart")
.setMessage("Wymagany restart aplikacji")
.setPositiveButton("OK") { _, _ ->
Process.killProcess(Process.myPid())
Runtime.getRuntime().exit(0)
exitProcess(0)
}
.setCancelable(false)
.show()
/*if (b.devModeLayout.getVisibility() !== View.VISIBLE) {
Anim.expand(b.devModeTitle, 500, null)
Anim.expand(b.devModeLayout, 500, null)
}*/
}
.onNegative { _: MaterialDialog?, _: DialogAction? ->
b.devMode.isChecked = app.config.debugMode
b.devMode.jumpDrawablesToCurrentState()
Anim.collapse(b.devMode, 1000, null)
}
.show()
} else {
app.config.debugMode = false
/*if (b.devModeLayout.getVisibility() === View.VISIBLE) {
Anim.collapse(b.devModeTitle, 500, null)
Anim.collapse(b.devModeLayout, 500, null)
}*/
}
}
b.fakeLogin.visibility = if (App.devMode) View.VISIBLE else View.GONE
b.fakeLogin.isChecked = fakeLogin
b.fakeLogin.setOnCheckedChangeListener { _: CompoundButton?, isChecked: Boolean ->
@ -69,4 +132,4 @@ class LoginChooserFragment : Fragment() {
b.helpButton.onClick { startActivity(Intent(activity, FeedbackActivity::class.java)) }
}
}
}

View File

@ -4,6 +4,9 @@
package pl.szczodrzynski.edziennik.ui.modules.login
import android.animation.ArgbEvaluator
import android.animation.ObjectAnimator
import android.graphics.Color
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
@ -19,6 +22,7 @@ import pl.szczodrzynski.edziennik.databinding.FragmentLoginEdudziennikBinding
import java.util.*
import kotlin.coroutines.CoroutineContext
class LoginEdudziennikFragment : Fragment(), CoroutineScope {
companion object {
private const val TAG = "LoginEdudziennikFragment"
@ -28,6 +32,7 @@ class LoginEdudziennikFragment : Fragment(), CoroutineScope {
private lateinit var activity: LoginActivity
private lateinit var b: FragmentLoginEdudziennikBinding
private val nav by lazy { activity.nav }
private var hehe = 0
private val job: Job = Job()
override val coroutineContext: CoroutineContext
@ -52,6 +57,29 @@ class LoginEdudziennikFragment : Fragment(), CoroutineScope {
}
}
b.topText.onClick {
if (LoginActivity.thisOneIsTricky != -1)
return@onClick
hehe++
if (hehe >= 5) {
LoginActivity.thisOneIsTricky = 3
val colorAnim = ObjectAnimator.ofInt(
b.topText,
"textColor",
Color.BLACK,
Color.RED,
Color.BLACK,
Color.RED,
Color.BLACK,
Color.RED,
Color.BLACK
)
colorAnim.setEvaluator(ArgbEvaluator())
colorAnim.duration = 1500L
colorAnim.start()
}
}
b.backButton.onClick { nav.navigateUp() }
b.loginButton.onClick {

View File

@ -108,7 +108,7 @@ public class Utils {
public static List<String> debugLog = new ArrayList<>();
public static void d(String TAG, String message) {
if (App.Companion.getDevMode()) {
if (App.Companion.getDebugMode()) {
HyperLog.d("Szkolny/"+TAG, message);
//debugLog.add(TAG+": "+message);
}