From b594e27b842c482e896571763a230dfc0bc32a6b Mon Sep 17 00:00:00 2001 From: TrianguloY Date: Sat, 13 May 2023 17:41:21 +0200 Subject: [PATCH] extract ctabs logic to separate class same as incognito --- .../urlchecker/modules/companions/CTabs.java | 86 ++++++++++++++++++- .../modules/companions/Incognito.java | 36 ++++---- .../modules/companions/OnOffConfig.java | 8 +- .../urlchecker/modules/list/OpenModule.java | 73 ++-------------- 4 files changed, 113 insertions(+), 90 deletions(-) diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/CTabs.java b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/CTabs.java index 37dc32e..2e50e78 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/CTabs.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/CTabs.java @@ -1,8 +1,14 @@ package com.trianguloy.urlchecker.modules.companions; import android.content.Context; +import android.content.Intent; import android.os.Build; +import android.os.Bundle; +import android.view.View; +import android.widget.ImageButton; +import com.trianguloy.urlchecker.R; +import com.trianguloy.urlchecker.utilities.AndroidUtils; import com.trianguloy.urlchecker.utilities.GenericPref; /** @@ -14,7 +20,7 @@ public class CTabs { /** * Ctabs extra intent */ - public static final String EXTRA = "android.support.customtabs.extra.SESSION"; + private static final String EXTRA = "android.support.customtabs.extra.SESSION"; /** * CTabs preference @@ -30,4 +36,82 @@ public class CTabs { return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2; } + + /* ------------------- state ------------------- */ + + private final GenericPref.Enumeration pref; + private boolean state = false; + + public CTabs(Context cntx) { + pref = PREF(cntx); + } + + /** + * Initialization from a given intent and a button to toggle + */ + public void initFrom(Intent intent, ImageButton button) { + boolean visible; + if (CTabs.isAvailable()) { + // configure + switch (pref.get()) { + case AUTO: + default: + // If auto we get it from the intent + state = intent.hasExtra(CTabs.EXTRA); + visible = true; + break; + case DEFAULT_ON: + state = true; + visible = true; + break; + case DEFAULT_OFF: + state = false; + visible = true; + break; + case ALWAYS_ON: + state = true; + visible = false; + break; + case ALWAYS_OFF: + state = false; + visible = false; + break; + } + } else { + // not available, just ignore + visible = false; + } + + // set + if (visible) { + // show + AndroidUtils.longTapForDescription(button); + AndroidUtils.toggleableListener(button, + o -> state = !state, + view -> view.setImageResource(state ? R.drawable.ctabs_on : R.drawable.ctabs_off) + ); + button.setVisibility(View.VISIBLE); + } else { + // hide + button.setVisibility(View.GONE); + } + } + + /** + * applies the setting to a given intent + */ + public void apply(Intent intent) { + if (!CTabs.isAvailable()) return; + if (state && !intent.hasExtra(CTabs.EXTRA)) { + // enable Custom tabs + Bundle extras = new Bundle(); + extras.putBinder(CTabs.EXTRA, null); // Set to null for no session + intent.putExtras(extras); + } + + if (!state && intent.hasExtra(CTabs.EXTRA)) { + // disable Custom tabs + intent.removeExtra(CTabs.EXTRA); + } + } } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Incognito.java b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Incognito.java index 9a70725..8581cda 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Incognito.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/Incognito.java @@ -22,7 +22,7 @@ public class Incognito { } private final GenericPref.Enumeration pref; - private boolean state; + private boolean state = false; public Incognito(Context cntx) { this.pref = PREF(cntx); @@ -35,28 +35,28 @@ public class Incognito { // init state boolean visible; switch (pref.get()) { - case ENABLED: - state = true; - visible = false; - break; - case ON: - state = true; - visible = true; - break; - case DISABLED: - state = false; - visible = false; - break; - case OFF: - state = false; - visible = true; - break; - default: case AUTO: + default: // for Firefox state = intent.getBooleanExtra("private_browsing_mode", false); visible = true; break; + case DEFAULT_ON: + state = true; + visible = true; + break; + case DEFAULT_OFF: + state = false; + visible = true; + break; + case ALWAYS_ON: + state = true; + visible = false; + break; + case ALWAYS_OFF: + state = false; + visible = false; + break; } // init button diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/OnOffConfig.java b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/OnOffConfig.java index c56d874..a1bf507 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/companions/OnOffConfig.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/companions/OnOffConfig.java @@ -8,10 +8,10 @@ import com.trianguloy.urlchecker.utilities.Enums; */ public enum OnOffConfig implements Enums.IdEnum, Enums.StringEnum { AUTO(0, R.string.auto), - ON(1, R.string.defaultOn), - OFF(2, R.string.defaultOff), - ENABLED(3, R.string.alwaysOn), - DISABLED(4, R.string.alwaysOff), + DEFAULT_ON(1, R.string.defaultOn), + DEFAULT_OFF(2, R.string.defaultOff), + ALWAYS_ON(3, R.string.alwaysOn), + ALWAYS_OFF(4, R.string.alwaysOff), ; // ----- diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/OpenModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/OpenModule.java index af9de4e..ddfe628 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/OpenModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/OpenModule.java @@ -3,7 +3,6 @@ package com.trianguloy.urlchecker.modules.list; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.os.Bundle; import android.view.Menu; import android.view.View; import android.widget.Button; @@ -74,9 +73,7 @@ class OpenDialog extends AModuleDialog { private final GenericPref.Bool closeOpenPref; private final GenericPref.Bool closeSharePref; private final GenericPref.Bool noReferrerPref; - - private final GenericPref.Enumeration ctabsPref; - private boolean ctabs = false; + private final CTabs cTabs; private final Incognito incognito; private List packages; @@ -85,11 +82,10 @@ class OpenDialog extends AModuleDialog { private View openParent; private Menu menu; private PopupMenu popup; - private ImageButton btn_ctabs; public OpenDialog(MainDialog dialog) { super(dialog); - ctabsPref = CTabs.PREF(dialog); + cTabs = new CTabs(dialog); incognito = new Incognito(dialog); closeOpenPref = OpenModule.CLOSEOPEN_PREF(dialog); closeSharePref = OpenModule.CLOSESHARE_PREF(dialog); @@ -105,38 +101,8 @@ class OpenDialog extends AModuleDialog { public void onInitialize(View views) { Intent intent = getActivity().getIntent(); - // init ctabs - btn_ctabs = views.findViewById(R.id.ctabs); - if (CTabs.isAvailable()) { - btn_ctabs.setOnClickListener(v -> toggleCtabs()); - AndroidUtils.longTapForDescription(btn_ctabs); - switch (ctabsPref.get()) { - case AUTO: - default: - // If auto we get it from the intent - setCtabs(intent.hasExtra(CTabs.EXTRA)); - break; - case ON: - setCtabs(true); - break; - case OFF: - setCtabs(false); - break; - case ENABLED: - // enable but hide - setCtabs(true); - btn_ctabs.setVisibility(View.GONE); - break; - case DISABLED: - // disable but hide - setCtabs(false); - btn_ctabs.setVisibility(View.GONE); - break; - } - } else { - // not available, just ignore - btn_ctabs.setVisibility(View.GONE); - } + // ctabs + cTabs.initFrom(intent, views.findViewById(R.id.ctabs)); // incognito incognito.initFrom(intent, views.findViewById(R.id.mode_incognito)); @@ -243,24 +209,12 @@ class OpenDialog extends AModuleDialog { intent = UrlUtils.getViewIntent(getUrl(), chosen); } - if (ctabs && !intent.hasExtra(CTabs.EXTRA)) { - // enable Custom tabs - - if (CTabs.isAvailable()) { - Bundle extras = new Bundle(); - extras.putBinder(CTabs.EXTRA, null); // Set to null for no session - intent.putExtras(extras); - } - } + // ctabs + cTabs.apply(intent); // incognito incognito.apply(intent); - if (!ctabs && intent.hasExtra(CTabs.EXTRA)) { - // disable ctabs - intent.removeExtra(CTabs.EXTRA); - } - // Get flags from global data (probably set by flags module, if active) Integer flags = Flags.getGlobalFlagsNullable(this); if (flags != null) { @@ -302,21 +256,6 @@ class OpenDialog extends AModuleDialog { } } - /** - * Toggle the custom tabs state - */ - private void toggleCtabs() { - setCtabs(!ctabs); - } - - /** - * Sets the custom tabs state - */ - private void setCtabs(boolean state) { - btn_ctabs.setImageResource(state ? R.drawable.ctabs_on : R.drawable.ctabs_off); - ctabs = state; - } - } class OpenConfig extends AModuleConfig {