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

New Drawer module

This commit is contained in:
Pablo Ortigosa 2023-06-24 19:04:42 +01:00
parent bb4c02136f
commit d49eca64bb
6 changed files with 144 additions and 12 deletions

View File

@ -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<AModuleData> 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<View>();
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! ------------------- */
/**

View File

@ -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 ------------------- */

View File

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

View File

@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:orientation="vertical">
<ImageView
android:id="@+id/drawerButton"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="@dimen/smallPadding"
android:src="@drawable/arrow_down"
android:tint="?attr/colorAccent" />
</LinearLayout>

View File

@ -20,6 +20,22 @@
<requestFocus
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/shown_mods"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
<LinearLayout
android:id="@+id/hidden_mods"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>
</LinearLayout>

View File

@ -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."</string>
<string name="mParts_empty">(empty)</string>
<string name="mParts_copy">Part copied to clipboard</string>
<!-- -->
<string name="mDrawer_name">Drawer</string>
<string name="mDrawer_desc">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.</string>
</resources>