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:
parent
c47d4236d4
commit
b594e27b84
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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),
|
||||
;
|
||||
|
||||
// -----
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user