From d49eca64bbd13b2a052bf76cd6a795a942641262 Mon Sep 17 00:00:00 2001 From: Pablo Ortigosa <55493443+PabloOQ@users.noreply.github.com> Date: Sat, 24 Jun 2023 19:04:42 +0100 Subject: [PATCH 1/4] New Drawer module --- .../urlchecker/dialogs/MainDialog.java | 49 +++++++++---- .../urlchecker/modules/ModuleManager.java | 4 ++ .../urlchecker/modules/list/DrawerModule.java | 69 +++++++++++++++++++ app/src/main/res/layout/dialog_drawer.xml | 15 ++++ app/src/main/res/layout/dialog_main.xml | 16 +++++ app/src/main/res/values/strings.xml | 3 + 6 files changed, 144 insertions(+), 12 deletions(-) create mode 100644 app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java create mode 100644 app/src/main/res/layout/dialog_drawer.xml diff --git a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java index 3af37b0..d114f78 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java +++ b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java @@ -19,6 +19,7 @@ import com.trianguloy.urlchecker.R; import com.trianguloy.urlchecker.modules.AModuleData; import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.modules.ModuleManager; +import com.trianguloy.urlchecker.modules.list.DrawerModule; import com.trianguloy.urlchecker.url.UrlData; import com.trianguloy.urlchecker.utilities.AndroidSettings; import com.trianguloy.urlchecker.utilities.AndroidUtils; @@ -165,7 +166,8 @@ public class MainDialog extends Activity { // ------------------- initialize ------------------- - private LinearLayout ll_mods; + private LinearLayout ll_shown_mods; + private LinearLayout ll_hidden_mods; @Override protected void onCreate(Bundle savedInstanceState) { @@ -177,7 +179,9 @@ public class MainDialog extends Activity { setFinishOnTouchOutside(true); // get views - ll_mods = findViewById(R.id.middle_modules); + ll_shown_mods = findViewById(R.id.shown_mods); + ll_hidden_mods = findViewById(R.id.hidden_mods); + ll_hidden_mods.setVisibility(View.GONE); // load url (or urls) var links = getOpenUrl(); @@ -219,17 +223,22 @@ public class MainDialog extends Activity { */ private void initializeModules() { modules.clear(); - ll_mods.removeAllViews(); + ll_shown_mods.removeAllViews(); + ll_hidden_mods.removeAllViews(); + boolean belowDrawerMod = false; // add final List middleModules = ModuleManager.getModules(false, this); for (AModuleData module : middleModules) { - initializeModule(module); + initializeModule(module, belowDrawerMod); + + // If this module is the drawer module, all the remaining modules will be hidden + belowDrawerMod = belowDrawerMod || module.getId().equals(new DrawerModule().getId()); } // avoid empty - if (ll_mods.getChildCount() == 0) { - ll_mods.addView(egg()); + if (ll_shown_mods.getChildCount() + ll_hidden_mods.getChildCount() == 0) { + ll_shown_mods.addView(egg()); // ;) } } @@ -238,7 +247,7 @@ public class MainDialog extends Activity { * * @param moduleData which module to initialize */ - private void initializeModule(AModuleData moduleData) { + private void initializeModule(AModuleData moduleData, boolean hide) { try { // enabled, add AModuleDialog module = moduleData.getDialog(this); @@ -248,22 +257,23 @@ public class MainDialog extends Activity { // set content if required var views = new ArrayList(); + LinearLayout ll = hide ? ll_hidden_mods : ll_shown_mods; if (layoutId >= 0) { // separator if necessary - if (ll_mods.getChildCount() != 0) views.add(addSeparator()); + if (ll_shown_mods.getChildCount() + ll_hidden_mods.getChildCount() != 0) views.add(addSeparator(ll)); ViewGroup parent; // set module block if (ModuleManager.getDecorationsPrefOfModule(moduleData, this).get()) { // init decorations - View block = Inflater.inflate(R.layout.dialog_module, ll_mods); + View block = Inflater.inflate(R.layout.dialog_module, ll); final TextView title = block.findViewById(R.id.title); title.setText(getString(R.string.dd, getString(moduleData.getName()))); parent = block.findViewById(R.id.mod); } else { // no decorations - parent = ll_mods; + parent = ll; } // set module content @@ -290,10 +300,11 @@ public class MainDialog extends Activity { /** * Adds a separator component to the list of mods */ - private View addSeparator() { - return Inflater.inflate(R.layout.separator, ll_mods); + private View addSeparator(LinearLayout ll) { + return Inflater.inflate(R.layout.separator, ll); } + /** * Returns the url that this activity was opened with (intent uri or sent text) */ @@ -322,6 +333,20 @@ public class MainDialog extends Activity { } } + // ------------------- drawer module ------------------- + + public int getDrawerVisibility(){ + return ll_hidden_mods.getVisibility(); + } + + public void setDrawerVisibility(int visibility){ + ll_hidden_mods.setVisibility(visibility); + } + + public void toggleDrawer() { + setDrawerVisibility(getDrawerVisibility() == View.GONE ? View.VISIBLE : View.GONE); + } + /* ------------------- its a secret! ------------------- */ /** diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java b/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java index b64a51c..601fd20 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java @@ -11,6 +11,7 @@ import com.trianguloy.urlchecker.modules.list.LogModule; import com.trianguloy.urlchecker.modules.list.OpenModule; import com.trianguloy.urlchecker.modules.list.PatternModule; import com.trianguloy.urlchecker.modules.list.RemoveQueriesModule; +import com.trianguloy.urlchecker.modules.list.DrawerModule; import com.trianguloy.urlchecker.modules.list.StatusModule; import com.trianguloy.urlchecker.modules.list.TextInputModule; import com.trianguloy.urlchecker.modules.list.UnshortenModule; @@ -50,6 +51,9 @@ public class ModuleManager { modules.add(new DebugModule()); modules.add(new OpenModule()); + + // by default the separator module should not hide other modules, so it must be the last + modules.add(new DrawerModule()); } /* ------------------- order ------------------- */ diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java new file mode 100644 index 0000000..e52e81e --- /dev/null +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java @@ -0,0 +1,69 @@ +package com.trianguloy.urlchecker.modules.list; + +import android.view.View; +import android.widget.ImageView; + +import com.trianguloy.urlchecker.R; +import com.trianguloy.urlchecker.activities.ModulesActivity; +import com.trianguloy.urlchecker.dialogs.MainDialog; +import com.trianguloy.urlchecker.modules.AModuleConfig; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; +import com.trianguloy.urlchecker.modules.DescriptionConfig; + +public class DrawerModule extends AModuleData { + @Override + public String getId() { + return "drawer"; + } + + @Override + public int getName() { + return R.string.mDrawer_name; + } + + @Override + public boolean isEnabledByDefault() { + return false; + } + + @Override + public AModuleDialog getDialog(MainDialog cntx) { + return new DrawerDialog(cntx); + } + + @Override + public AModuleConfig getConfig(ModulesActivity cntx) { + return new DescriptionConfig(R.string.mDrawer_desc); + } +} + +class DrawerDialog extends AModuleDialog { + private ImageView button; + private MainDialog dialog; + + public DrawerDialog(MainDialog dialog){ + super(dialog); + this.dialog = dialog; + } + + @Override + public int getLayoutId() { + return R.layout.dialog_drawer; + } + + @Override + public void onInitialize(View views) { + button = views.findViewById(R.id.drawerButton); + button.setOnClickListener(v -> { + dialog.toggleDrawer(); + updateMoreIndicator(); + }); + updateMoreIndicator(); + } + + void updateMoreIndicator() { + button.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? + R.drawable.arrow_down : R.drawable.arrow_right); + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_drawer.xml b/app/src/main/res/layout/dialog_drawer.xml new file mode 100644 index 0000000..0f1ab08 --- /dev/null +++ b/app/src/main/res/layout/dialog_drawer.xml @@ -0,0 +1,15 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_main.xml b/app/src/main/res/layout/dialog_main.xml index 3c29c19..6462e18 100644 --- a/app/src/main/res/layout/dialog_main.xml +++ b/app/src/main/res/layout/dialog_main.xml @@ -20,6 +20,22 @@ + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f436976..20840ab 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -325,4 +325,7 @@ You can also click the 'X' button to remove some of them. This is an advanced version of the 'Queries Remover' module." (empty) Part copied to clipboard + + Drawer + All modules below this will be hidden in a drawer. The modules will still work, but are stored in the drawer, you can store modules here to avoid clutter of modules you do not always need. \ No newline at end of file From bf6d25fb3ccf82660586228bd513ad1be41fa124 Mon Sep 17 00:00:00 2001 From: Pablo Ortigosa <55493443+PabloOQ@users.noreply.github.com> Date: Mon, 26 Jun 2023 12:23:40 +0100 Subject: [PATCH 2/4] Fix Drawer visibility --- .../urlchecker/dialogs/MainDialog.java | 18 ++++++++++++++++-- .../urlchecker/modules/list/DrawerModule.java | 6 ++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java index d114f78..c3dddb2 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java +++ b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java @@ -28,6 +28,7 @@ import com.trianguloy.urlchecker.utilities.Inflater; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -47,7 +48,7 @@ public class MainDialog extends Activity { /** * All active modules */ - private final Map> modules = new HashMap<>(); + private final Map> modules = new LinkedHashMap<>(); /** * Global data to keep even if the url changes @@ -125,7 +126,10 @@ public class MainDialog extends Activity { } // third notify for final changes - for (var module : modules.keySet()) { + var mods = new ArrayList<>(modules.keySet()); + // drawer module needs to display AFTER the hidden modules + Collections.reverse(mods); + for (var module : mods) { // skip own if required if (!urlData.triggerOwn && module == urlData.trigger) continue; try { @@ -347,6 +351,16 @@ public class MainDialog extends Activity { setDrawerVisibility(getDrawerVisibility() == View.GONE ? View.VISIBLE : View.GONE); } + public boolean anyDrawerChildVisible(){ + int childCount = ll_hidden_mods.getChildCount(); + for (int i = 0; i < childCount; i++) { + if (ll_hidden_mods.getChildAt(i).getVisibility() == View.VISIBLE){ + return true; + } + } + return false; + } + /* ------------------- its a secret! ------------------- */ /** diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java index e52e81e..1cce618 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java @@ -10,6 +10,7 @@ import com.trianguloy.urlchecker.modules.AModuleConfig; import com.trianguloy.urlchecker.modules.AModuleData; import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.modules.DescriptionConfig; +import com.trianguloy.urlchecker.url.UrlData; public class DrawerModule extends AModuleData { @Override @@ -62,6 +63,11 @@ class DrawerDialog extends AModuleDialog { updateMoreIndicator(); } + @Override + public void onDisplayUrl(UrlData urlData) { + setVisibility(dialog.anyDrawerChildVisible()); + } + void updateMoreIndicator() { button.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? R.drawable.arrow_down : R.drawable.arrow_right); From 78ffa67c5cc668a3a4f9763698ed579f954bb740 Mon Sep 17 00:00:00 2001 From: TrianguloY Date: Wed, 28 Jun 2023 22:25:26 +0200 Subject: [PATCH 3/4] replaced drawer style --- .../urlchecker/modules/list/DrawerModule.java | 18 +++++++---- app/src/main/res/layout/dialog_drawer.xml | 30 +++++++++++++++---- 2 files changed, 37 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java index 1cce618..4718f76 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java @@ -40,10 +40,11 @@ public class DrawerModule extends AModuleData { } class DrawerDialog extends AModuleDialog { - private ImageView button; - private MainDialog dialog; + private ImageView buttonL; + private ImageView buttonR; + private final MainDialog dialog; - public DrawerDialog(MainDialog dialog){ + public DrawerDialog(MainDialog dialog) { super(dialog); this.dialog = dialog; } @@ -55,11 +56,14 @@ class DrawerDialog extends AModuleDialog { @Override public void onInitialize(View views) { - button = views.findViewById(R.id.drawerButton); - button.setOnClickListener(v -> { + buttonL = views.findViewById(R.id.drawerL); + buttonR = views.findViewById(R.id.drawerR); + var parent = views.findViewById(R.id.parent); + parent.setOnClickListener(v -> { dialog.toggleDrawer(); updateMoreIndicator(); }); + parent.getBackground().setAlpha(25); updateMoreIndicator(); } @@ -69,7 +73,9 @@ class DrawerDialog extends AModuleDialog { } void updateMoreIndicator() { - button.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? + buttonL.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? + R.drawable.arrow_down : R.drawable.arrow_right); + buttonR.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? R.drawable.arrow_down : R.drawable.arrow_right); } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_drawer.xml b/app/src/main/res/layout/dialog_drawer.xml index 0f1ab08..b44de81 100644 --- a/app/src/main/res/layout/dialog_drawer.xml +++ b/app/src/main/res/layout/dialog_drawer.xml @@ -1,15 +1,35 @@ + android:layout_gravity="center_horizontal" + android:layout_marginStart="@dimen/padding" + android:layout_marginLeft="@dimen/padding" + android:layout_marginTop="@dimen/smallPadding" + android:layout_marginEnd="@dimen/padding" + android:layout_marginRight="@dimen/padding" + android:layout_marginBottom="@dimen/smallPadding" + android:background="@drawable/round_box" + android:backgroundTint="?attr/colorAccent" + android:gravity="center|center_vertical" + android:weightSum="2"> + + + \ No newline at end of file From eb2d96018873fbd7d581db866b452295c8a8a2c7 Mon Sep 17 00:00:00 2001 From: TrianguloY Date: Sun, 23 Jul 2023 20:30:35 +0200 Subject: [PATCH 4/4] simplifications --- .../urlchecker/dialogs/MainDialog.java | 84 +++++++++++-------- .../urlchecker/modules/AModuleDialog.java | 6 ++ .../urlchecker/modules/ModuleManager.java | 4 +- .../urlchecker/modules/list/DrawerModule.java | 24 +++--- app/src/main/res/layout/dialog_main.xml | 4 +- 5 files changed, 70 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java index c3dddb2..111b74b 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java +++ b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java @@ -28,7 +28,6 @@ import com.trianguloy.urlchecker.utilities.Inflater; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; -import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -48,7 +47,7 @@ public class MainDialog extends Activity { /** * All active modules */ - private final Map> modules = new LinkedHashMap<>(); + private final Map> modules = new HashMap<>(); /** * Global data to keep even if the url changes @@ -126,10 +125,7 @@ public class MainDialog extends Activity { } // third notify for final changes - var mods = new ArrayList<>(modules.keySet()); - // drawer module needs to display AFTER the hidden modules - Collections.reverse(mods); - for (var module : mods) { + for (var module : modules.keySet()) { // skip own if required if (!urlData.triggerOwn && module == urlData.trigger) continue; try { @@ -140,6 +136,18 @@ public class MainDialog extends Activity { } } + // fourth finish notification + for (var module : modules.keySet()) { + // skip own if required + if (!urlData.triggerOwn && module == urlData.trigger) continue; + try { + module.onFinishUrl(urlData); + } catch (Exception e) { + e.printStackTrace(); + AndroidUtils.assertError("Exception in onFinishUrl for module " + module.getClass().getName()); + } + } + break; } @@ -170,8 +178,8 @@ public class MainDialog extends Activity { // ------------------- initialize ------------------- - private LinearLayout ll_shown_mods; - private LinearLayout ll_hidden_mods; + private LinearLayout ll_main; + private LinearLayout ll_drawer; @Override protected void onCreate(Bundle savedInstanceState) { @@ -183,9 +191,9 @@ public class MainDialog extends Activity { setFinishOnTouchOutside(true); // get views - ll_shown_mods = findViewById(R.id.shown_mods); - ll_hidden_mods = findViewById(R.id.hidden_mods); - ll_hidden_mods.setVisibility(View.GONE); + ll_main = findViewById(R.id.main); + ll_drawer = findViewById(R.id.drawer); + ll_drawer.setVisibility(View.GONE); // load url (or urls) var links = getOpenUrl(); @@ -227,22 +235,22 @@ public class MainDialog extends Activity { */ private void initializeModules() { modules.clear(); - ll_shown_mods.removeAllViews(); - ll_hidden_mods.removeAllViews(); - boolean belowDrawerMod = false; + ll_main.removeAllViews(); + ll_drawer.removeAllViews(); + var placeOnDrawer = false; // add - final List middleModules = ModuleManager.getModules(false, this); - for (AModuleData module : middleModules) { - initializeModule(module, belowDrawerMod); + var middleModules = ModuleManager.getModules(false, this); + for (var module : middleModules) { + initializeModule(module, placeOnDrawer); // If this module is the drawer module, all the remaining modules will be hidden - belowDrawerMod = belowDrawerMod || module.getId().equals(new DrawerModule().getId()); + if (module instanceof DrawerModule) placeOnDrawer = true; } // avoid empty - if (ll_shown_mods.getChildCount() + ll_hidden_mods.getChildCount() == 0) { - ll_shown_mods.addView(egg()); // ;) + if (ll_main.getChildCount() == 0) { + ll_main.addView(egg()); // ;) } } @@ -251,7 +259,7 @@ public class MainDialog extends Activity { * * @param moduleData which module to initialize */ - private void initializeModule(AModuleData moduleData, boolean hide) { + private void initializeModule(AModuleData moduleData, boolean drawer) { try { // enabled, add AModuleDialog module = moduleData.getDialog(this); @@ -261,18 +269,18 @@ public class MainDialog extends Activity { // set content if required var views = new ArrayList(); - LinearLayout ll = hide ? ll_hidden_mods : ll_shown_mods; + var ll = drawer ? ll_drawer : ll_main; if (layoutId >= 0) { // separator if necessary - if (ll_shown_mods.getChildCount() + ll_hidden_mods.getChildCount() != 0) views.add(addSeparator(ll)); + if (ll_main.getChildCount() != 0) views.add(addSeparator(ll)); ViewGroup parent; // set module block if (ModuleManager.getDecorationsPrefOfModule(moduleData, this).get()) { // init decorations - View block = Inflater.inflate(R.layout.dialog_module, ll); - final TextView title = block.findViewById(R.id.title); + var block = Inflater.inflate(R.layout.dialog_module, ll); + var title = block.findViewById(R.id.title); title.setText(getString(R.string.dd, getString(moduleData.getName()))); parent = block.findViewById(R.id.mod); } else { @@ -308,7 +316,6 @@ public class MainDialog extends Activity { return Inflater.inflate(R.layout.separator, ll); } - /** * Returns the url that this activity was opened with (intent uri or sent text) */ @@ -339,22 +346,27 @@ public class MainDialog extends Activity { // ------------------- drawer module ------------------- - public int getDrawerVisibility(){ - return ll_hidden_mods.getVisibility(); - } - - public void setDrawerVisibility(int visibility){ - ll_hidden_mods.setVisibility(visibility); + /** + * returns the visibility of the drawer + */ + public boolean isDrawerVisible() { + return ll_drawer.getVisibility() != View.GONE; } + /** + * Toggles the drawer visibility + */ public void toggleDrawer() { - setDrawerVisibility(getDrawerVisibility() == View.GONE ? View.VISIBLE : View.GONE); + ll_drawer.setVisibility(isDrawerVisible() ? View.GONE : View.VISIBLE); } - public boolean anyDrawerChildVisible(){ - int childCount = ll_hidden_mods.getChildCount(); + /** + * returns true if the drawer contains at least one visible children + */ + public boolean anyDrawerChildVisible() { + int childCount = ll_drawer.getChildCount(); for (int i = 0; i < childCount; i++) { - if (ll_hidden_mods.getChildAt(i).getVisibility() == View.VISIBLE){ + if (ll_drawer.getChildAt(i).getVisibility() == View.VISIBLE) { return true; } } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java b/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java index 079a80a..9df6ffd 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java @@ -46,6 +46,12 @@ public abstract class AModuleDialog implements Fragment { public void onDisplayUrl(UrlData urlData) { } + /** + * Last call for any update a module may need (like the drawer module needing to know how many modules are visible). + */ + public void onFinishUrl(UrlData urlData) { + } + // ------------------- utilities ------------------- /** diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java b/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java index 601fd20..be6d71c 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java @@ -4,6 +4,7 @@ import android.content.Context; import com.trianguloy.urlchecker.modules.list.ClearUrlModule; import com.trianguloy.urlchecker.modules.list.DebugModule; +import com.trianguloy.urlchecker.modules.list.DrawerModule; import com.trianguloy.urlchecker.modules.list.FlagsModule; import com.trianguloy.urlchecker.modules.list.HistoryModule; import com.trianguloy.urlchecker.modules.list.HostsModule; @@ -11,7 +12,6 @@ import com.trianguloy.urlchecker.modules.list.LogModule; import com.trianguloy.urlchecker.modules.list.OpenModule; import com.trianguloy.urlchecker.modules.list.PatternModule; import com.trianguloy.urlchecker.modules.list.RemoveQueriesModule; -import com.trianguloy.urlchecker.modules.list.DrawerModule; import com.trianguloy.urlchecker.modules.list.StatusModule; import com.trianguloy.urlchecker.modules.list.TextInputModule; import com.trianguloy.urlchecker.modules.list.UnshortenModule; @@ -52,7 +52,7 @@ public class ModuleManager { modules.add(new OpenModule()); - // by default the separator module should not hide other modules, so it must be the last + // by default the drawer module should not hide other modules, so it must be the last modules.add(new DrawerModule()); } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java index 4718f76..2cd1335 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/DrawerModule.java @@ -11,7 +11,11 @@ import com.trianguloy.urlchecker.modules.AModuleData; import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.modules.DescriptionConfig; import com.trianguloy.urlchecker.url.UrlData; +import com.trianguloy.urlchecker.utilities.AndroidUtils; +/** + * A special module that manages the drawer functionality + */ public class DrawerModule extends AModuleData { @Override public String getId() { @@ -59,23 +63,19 @@ class DrawerDialog extends AModuleDialog { buttonL = views.findViewById(R.id.drawerL); buttonR = views.findViewById(R.id.drawerR); var parent = views.findViewById(R.id.parent); - parent.setOnClickListener(v -> { - dialog.toggleDrawer(); - updateMoreIndicator(); - }); parent.getBackground().setAlpha(25); - updateMoreIndicator(); + + AndroidUtils.toggleableListener(parent, v -> dialog.toggleDrawer(), v -> { + buttonL.setImageResource(dialog.isDrawerVisible() ? + R.drawable.arrow_down : R.drawable.arrow_right); + buttonR.setImageResource(dialog.isDrawerVisible() ? + R.drawable.arrow_down : R.drawable.arrow_right); + }); } @Override - public void onDisplayUrl(UrlData urlData) { + public void onFinishUrl(UrlData urlData) { setVisibility(dialog.anyDrawerChildVisible()); } - void updateMoreIndicator() { - buttonL.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? - R.drawable.arrow_down : R.drawable.arrow_right); - buttonR.setImageResource(dialog.getDrawerVisibility() == View.VISIBLE ? - R.drawable.arrow_down : R.drawable.arrow_right); - } } \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_main.xml b/app/src/main/res/layout/dialog_main.xml index 6462e18..cdd8b5d 100644 --- a/app/src/main/res/layout/dialog_main.xml +++ b/app/src/main/res/layout/dialog_main.xml @@ -22,7 +22,7 @@ android:layout_height="wrap_content" /> @@ -30,7 +30,7 @@