0
0
mirror of https://github.com/TrianguloY/UrlChecker.git synced 2024-09-19 20:02:16 +02:00

extract ctabs logic to separate class

same as incognito
This commit is contained in:
TrianguloY 2023-05-13 17:41:21 +02:00
parent c47d4236d4
commit b594e27b84
4 changed files with 113 additions and 90 deletions

View File

@ -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<OnOffConfig> 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);
}
}
}

View File

@ -22,7 +22,7 @@ public class Incognito {
}
private final GenericPref.Enumeration<OnOffConfig> 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

View File

@ -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),
;
// -----

View File

@ -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<OnOffConfig> ctabsPref;
private boolean ctabs = false;
private final CTabs cTabs;
private final Incognito incognito;
private List<String> 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 {