diff --git a/app/src/main/java/com/trianguloy/urlchecker/activities/ModulesActivity.java b/app/src/main/java/com/trianguloy/urlchecker/activities/ModulesActivity.java index 1976185..981d866 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/activities/ModulesActivity.java +++ b/app/src/main/java/com/trianguloy/urlchecker/activities/ModulesActivity.java @@ -10,7 +10,7 @@ import android.widget.Switch; import android.widget.TextView; import com.trianguloy.urlchecker.R; -import com.trianguloy.urlchecker.modules.ModuleData; +import com.trianguloy.urlchecker.modules.AModuleData; import com.trianguloy.urlchecker.modules.ModuleManager; import com.trianguloy.urlchecker.utilities.GenericPref; @@ -32,16 +32,16 @@ public class ModulesActivity extends Activity { private void initialize() { - initModule(ModuleData.topModule, false); + initModule(ModuleManager.topModule, false); - for (ModuleData module : ModuleData.toggleableModules) { + for (AModuleData module : ModuleManager.toggleableModules) { initModule(module, true); } - initModule(ModuleData.bottomModule, false); + initModule(ModuleManager.bottomModule, false); } - private void initModule(ModuleData module, boolean enableable) { + private void initModule(AModuleData module, boolean enableable) { // inflate View views = getLayoutInflater().inflate(R.layout.conf_module, list, false); list.addView(views); // separated to return the inflated view instead of the parent @@ -63,8 +63,8 @@ public class ModulesActivity extends Activity { } // configure info - ((TextView) views.findViewById(R.id.label)).setText(module.name); - ((TextView) views.findViewById(R.id.desc)).setText(module.description); + ((TextView) views.findViewById(R.id.label)).setText(module.getName()); + ((TextView) views.findViewById(R.id.desc)).setText(module.getDescription()); // configure toggleable description final View details_cont = views.findViewById(R.id.details); 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 fb5fc4b..c620a78 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java +++ b/app/src/main/java/com/trianguloy/urlchecker/dialogs/MainDialog.java @@ -10,10 +10,10 @@ import android.widget.TextView; import android.widget.Toast; import com.trianguloy.urlchecker.BuildConfig; -import com.trianguloy.urlchecker.modules.ModuleData; -import com.trianguloy.urlchecker.modules.ModuleManager; import com.trianguloy.urlchecker.R; -import com.trianguloy.urlchecker.modules.BaseModule; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; +import com.trianguloy.urlchecker.modules.ModuleManager; import java.util.ArrayList; import java.util.List; @@ -37,7 +37,7 @@ public class MainDialog extends Activity { * @param url the new url * @param providerModule which module changed it (null if first change) */ - public void setUrl(String url, BaseModule providerModule) { + public void setUrl(String url, AModuleDialog providerModule) { if (onSettingUrl) { // a recursive call, invalid if (BuildConfig.DEBUG) { @@ -70,7 +70,7 @@ public class MainDialog extends Activity { /** * All active modules */ - private final List modules = new ArrayList<>(); + private final List modules = new ArrayList<>(); // the current url private String url; @@ -100,14 +100,14 @@ public class MainDialog extends Activity { modules.clear(); // top module - initializeModule(ModuleData.topModule); + initializeModule(ModuleManager.topModule); // middle modules - final List middleModules = ModuleManager.getMiddleModules(this); - for (ModuleData module : middleModules) { + final List middleModules = ModuleManager.getEnabledMiddleModules(this); + for (AModuleData module : middleModules) { // set title - String name = module.name; + String name = module.getName(); if (name != null) { final TextView title = new TextView(this); title.setText(name + ":"); @@ -119,7 +119,7 @@ public class MainDialog extends Activity { } // bottom module - initializeModule(ModuleData.bottomModule); + initializeModule(ModuleManager.bottomModule); } /** @@ -127,11 +127,11 @@ public class MainDialog extends Activity { * * @param moduleData which module to initialize */ - private void initializeModule(ModuleData moduleData) { + private void initializeModule(AModuleData moduleData) { try { // enabled, add - BaseModule module = moduleData.dialogClass.getDeclaredConstructor(MainDialog.class).newInstance(this); - View views = getLayoutInflater().inflate(module.getLayoutDialog(), ll_mods,false); + AModuleDialog module = moduleData.getDialog(this); + View views = getLayoutInflater().inflate(module.getLayoutDialog(), ll_mods, false); ll_mods.addView(views); // separated to return the inflated view instead of the parent module.onInitialize(views); modules.add(module); @@ -167,8 +167,8 @@ public class MainDialog extends Activity { * * @param providerModule the module that provided the new url, won't be called (if null all are called) */ - private void onChangedUrl(BaseModule providerModule) { - for (BaseModule module : modules) { + private void onChangedUrl(AModuleDialog providerModule) { + for (AModuleDialog module : modules) { if (module != providerModule) module.onNewUrl(getUrl()); } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleData.java b/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleData.java new file mode 100644 index 0000000..91cbbcd --- /dev/null +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleData.java @@ -0,0 +1,13 @@ +package com.trianguloy.urlchecker.modules; + +import com.trianguloy.urlchecker.dialogs.MainDialog; + +public abstract class AModuleData { + public abstract String getId(); + + public abstract String getName(); + + public abstract String getDescription(); + + public abstract AModuleDialog getDialog(MainDialog dialog); +} diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java similarity index 80% rename from app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java rename to app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java index 9d75137..1aea951 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/AModuleDialog.java @@ -4,15 +4,11 @@ import android.app.Activity; import android.view.View; import com.trianguloy.urlchecker.dialogs.MainDialog; -import com.trianguloy.urlchecker.utilities.GenericConfiguration; - -import java.util.Collections; -import java.util.List; /** * Base class for a module. */ -public abstract class BaseModule { +public abstract class AModuleDialog { // ------------------- private data ------------------- @@ -20,7 +16,7 @@ public abstract class BaseModule { // ------------------- initialization ------------------- - public BaseModule(MainDialog dialog) { + public AModuleDialog(MainDialog dialog) { this.dialog = dialog; } @@ -32,9 +28,11 @@ public abstract class BaseModule { public abstract int getLayoutDialog(); /** - * @return the layout resource of this module + * Initializes this module from the given views (generated from {@link #getLayoutDialog()}) + * + * @param views the inflated views */ - public List getConfigurations(){return Collections.EMPTY_LIST;} + public abstract void onInitialize(View views); /** * Notification of a new url. @@ -44,13 +42,6 @@ public abstract class BaseModule { */ public abstract void onNewUrl(String url); - /** - * Initializes this module from the given views (generated from {@link #getLayoutDialog()}) - * - * @param views the inflated views - */ - public abstract void onInitialize(View views); - // ------------------- utilities ------------------- /** diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleData.java b/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleData.java deleted file mode 100644 index 9839782..0000000 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleData.java +++ /dev/null @@ -1,70 +0,0 @@ -package com.trianguloy.urlchecker.modules; - -import com.trianguloy.urlchecker.modules.list.AsciiModule; -import com.trianguloy.urlchecker.modules.list.OpenModule; -import com.trianguloy.urlchecker.modules.list.RedirectModule; -import com.trianguloy.urlchecker.modules.list.TextInputModule; -import com.trianguloy.urlchecker.modules.list.VirusTotalModule; - -import java.util.ArrayList; -import java.util.List; - -/** - * If instantiated contains the information about a module. - * Statically contains the available modules - */ -public class ModuleData { - - // ------------------- configuration ------------------- - - public final static List toggleableModules = new ArrayList<>(); - public final static ModuleData bottomModule = new ModuleData(OpenModule.class, "open", "Open & Share", "Allows to open or share the current url."); - public final static ModuleData topModule = new ModuleData(TextInputModule.class, "text", "Input text", "Allows to edit the url manually"); - - // ------------------- initialization ------------------- - - static { - // TODO: auto-load with reflection? - add(RedirectModule.class, "redirect", "Redirection","Allows to check for redirection"); - add(VirusTotalModule.class, "virustotal", "VirusTotal","Allows to check the url in VirusTotal (an api key is needed)"); - add(AsciiModule.class, "ascii", "Ascii checker", "Checks for non-ascii characters"); - } - - public static void add(Class dialogClass, String id, String name, String description) { - toggleableModules.add(new ModuleData(dialogClass, id, name, description)); - } - - // ------------------- instantiated struct ------------------- - - /** - * The module class - */ - public final Class dialogClass; - - /** - * Identifier of the module - */ - public final String id; - - /** - * Visible name of this module - */ - public final String name; - - public final String description; - - /** - * Full constructor for a module - * - * @param dialogClass the class - * @param id identifier - * @param name user name - * @param description - */ - public ModuleData(Class dialogClass, String id, String name, String description) { - this.dialogClass = dialogClass; - this.id = id; - this.name = name; - this.description = description; - } -} 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 d1a1d6e..e49f42b 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/ModuleManager.java @@ -2,6 +2,11 @@ package com.trianguloy.urlchecker.modules; import android.content.Context; +import com.trianguloy.urlchecker.modules.list.AsciiModule; +import com.trianguloy.urlchecker.modules.list.OpenModule; +import com.trianguloy.urlchecker.modules.list.RedirectModule; +import com.trianguloy.urlchecker.modules.list.TextInputModule; +import com.trianguloy.urlchecker.modules.list.VirusTotalModule; import com.trianguloy.urlchecker.utilities.GenericPref; import java.util.ArrayList; @@ -12,6 +17,18 @@ import java.util.List; */ public class ModuleManager { + public final static AModuleData topModule = new TextInputModule(); + public final static AModuleData bottomModule = new OpenModule(); + public final static List toggleableModules = new ArrayList<>(); + + static { + // TODO: auto-load with reflection? + toggleableModules.add(new RedirectModule()); + toggleableModules.add(new VirusTotalModule()); + toggleableModules.add(new AsciiModule()); + } + + // ------------------- class ------------------- private static final String PREF_SUFFIX = "_en"; @@ -20,8 +37,8 @@ public class ModuleManager { */ private static final boolean ENABLED_DEFAULT = true; - public static GenericPref.Bool getEnabledPrefOfModule(ModuleData module, Context cntx) { - final GenericPref.Bool enabledPref = new GenericPref.Bool(module.id + PREF_SUFFIX, ENABLED_DEFAULT); + public static GenericPref.Bool getEnabledPrefOfModule(AModuleData module, Context cntx) { + final GenericPref.Bool enabledPref = new GenericPref.Bool(module.getId() + PREF_SUFFIX, ENABLED_DEFAULT); enabledPref.init(cntx); return enabledPref; } @@ -32,11 +49,11 @@ public class ModuleManager { * @param cntx base context (for the sharedpref) * @return the list, may be empty */ - public static List getMiddleModules(Context cntx) { - List enabled = new ArrayList<>(); + public static List getEnabledMiddleModules(Context cntx) { + List enabled = new ArrayList<>(); // check each module - for (ModuleData module : ModuleData.toggleableModules) { + for (AModuleData module : toggleableModules) { if (getEnabledPrefOfModule(module, cntx).get()) { try { // enabled, add diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/AsciiModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/AsciiModule.java index 6848c5a..11723c5 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/AsciiModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/AsciiModule.java @@ -6,7 +6,8 @@ import android.widget.TextView; import com.trianguloy.urlchecker.R; import com.trianguloy.urlchecker.dialogs.MainDialog; -import com.trianguloy.urlchecker.modules.BaseModule; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; import java.util.ArrayList; import java.util.List; @@ -14,11 +15,34 @@ import java.util.List; /** * This module checks for non-ascii characters in the url */ -public class AsciiModule extends BaseModule { +public class AsciiModule extends AModuleData { + + @Override + public String getId() { + return "ascii"; + } + + @Override + public String getName() { + return "Ascii checker"; + } + + @Override + public String getDescription() { + return "Checks for non-ascii characters"; + } + + @Override + public AModuleDialog getDialog(MainDialog dialog) { + return new AsciiDialog(dialog); + } +} + +class AsciiDialog extends AModuleDialog { private TextView txt_ascii; - public AsciiModule(MainDialog dialog) { + public AsciiDialog(MainDialog dialog) { super(dialog); } 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 3250218..11e8953 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 @@ -10,7 +10,8 @@ import android.widget.PopupMenu; import com.trianguloy.urlchecker.R; import com.trianguloy.urlchecker.dialogs.MainDialog; -import com.trianguloy.urlchecker.modules.BaseModule; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.utilities.LastOpened; import com.trianguloy.urlchecker.utilities.PackageUtilities; import com.trianguloy.urlchecker.utilities.UrlUtilities; @@ -20,7 +21,30 @@ import java.util.List; /** * This module contains an open and share buttons */ -public class OpenModule extends BaseModule implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { +public class OpenModule extends AModuleData { + + @Override + public String getId() { + return "open"; + } + + @Override + public String getName() { + return "Open & Share"; + } + + @Override + public String getDescription() { + return "Allows to open or share the current url."; + } + + @Override + public AModuleDialog getDialog(MainDialog dialog) { + return new OpenDialog(dialog); + } +} + +class OpenDialog extends AModuleDialog implements View.OnClickListener, PopupMenu.OnMenuItemClickListener { private LastOpened lastOpened; @@ -30,7 +54,7 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu private Menu menu; private PopupMenu popup; - public OpenModule(MainDialog dialog) { + public OpenDialog(MainDialog dialog) { super(dialog); } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/RedirectModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/RedirectModule.java index bbb65dc..5ac0779 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/RedirectModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/RedirectModule.java @@ -6,7 +6,8 @@ import android.widget.Toast; import com.trianguloy.urlchecker.R; import com.trianguloy.urlchecker.dialogs.MainDialog; -import com.trianguloy.urlchecker.modules.BaseModule; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; import java.io.IOException; import java.net.HttpURLConnection; @@ -17,7 +18,30 @@ import java.util.Stack; /** * A module that allows checking for redirection by using a local browser */ -public class RedirectModule extends BaseModule implements View.OnClickListener { +public class RedirectModule extends AModuleData { + + @Override + public String getId() { + return "redirect"; + } + + @Override + public String getName() { + return "Redirection"; + } + + @Override + public String getDescription() { + return "Allows to check for redirection"; + } + + @Override + public AModuleDialog getDialog(MainDialog dialog) { + return new RedirectDialog(dialog); + } +} + +class RedirectDialog extends AModuleDialog implements View.OnClickListener { private Button check; private Button undo; @@ -27,7 +51,7 @@ public class RedirectModule extends BaseModule implements View.OnClickListener { */ private Stack urls = new Stack<>(); - public RedirectModule(MainDialog dialog) { + public RedirectDialog(MainDialog dialog) { super(dialog); } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java index e98a344..d8246e5 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/TextInputModule.java @@ -7,17 +7,41 @@ import android.widget.EditText; import com.trianguloy.urlchecker.R; import com.trianguloy.urlchecker.dialogs.MainDialog; -import com.trianguloy.urlchecker.modules.BaseModule; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; /** * This module shows the current url and allows manual editing */ -public class TextInputModule extends BaseModule implements TextWatcher { +public class TextInputModule extends AModuleData { + + @Override + public String getId() { + return "text"; + } + + @Override + public String getName() { + return "Input text"; + } + + @Override + public String getDescription() { + return "Allows to edit the url manually"; + } + + @Override + public AModuleDialog getDialog(MainDialog dialog) { + return new TextInputDialog(dialog); + } +} + +class TextInputDialog extends AModuleDialog implements TextWatcher { private EditText edtxt_url; private boolean editByCode = false; - public TextInputModule(MainDialog dialog) { + public TextInputDialog(MainDialog dialog) { super(dialog); } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/list/VirusTotalModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/list/VirusTotalModule.java index 151b77a..43f6273 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/list/VirusTotalModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/list/VirusTotalModule.java @@ -8,19 +8,40 @@ import android.widget.TextView; import com.trianguloy.urlchecker.R; import com.trianguloy.urlchecker.dialogs.MainDialog; -import com.trianguloy.urlchecker.modules.BaseModule; -import com.trianguloy.urlchecker.utilities.GenericConfiguration; +import com.trianguloy.urlchecker.modules.AModuleData; +import com.trianguloy.urlchecker.modules.AModuleDialog; import com.trianguloy.urlchecker.utilities.GenericPref; import com.trianguloy.urlchecker.utilities.UrlUtilities; import com.trianguloy.urlchecker.utilities.VirusTotalUtility; -import java.util.ArrayList; -import java.util.List; - /** * This module uses the VirusTotal api (https://developers.virustotal.com/reference) for url reports */ -public class VirusTotalModule extends BaseModule implements View.OnClickListener, View.OnLongClickListener { +public class VirusTotalModule extends AModuleData { + + @Override + public String getId() { + return "virustotal"; + } + + @Override + public String getName() { + return "VirusTotal"; + } + + @Override + public String getDescription() { + return "Allows to check the url in VirusTotal (an api key is needed)"; + } + + @Override + public AModuleDialog getDialog(MainDialog dialog) { + return new VirusTotalDialog(dialog); + } +} + + +class VirusTotalDialog extends AModuleDialog implements View.OnClickListener, View.OnLongClickListener { private static final int RETRY_TIMEOUT = 5000; private ImageButton btn_scan; @@ -29,9 +50,9 @@ public class VirusTotalModule extends BaseModule implements View.OnClickListener private boolean scanning = false; private VirusTotalUtility.InternalReponse result = null; - private GenericPref.Str api_key = new GenericPref.Str("api_key","**REMOVED**"); + private GenericPref.Str api_key = new GenericPref.Str("api_key", "**REMOVED**"); - public VirusTotalModule(MainDialog dialog) { + public VirusTotalDialog(MainDialog dialog) { super(dialog); api_key.init(dialog); } @@ -41,13 +62,13 @@ public class VirusTotalModule extends BaseModule implements View.OnClickListener return R.layout.module_virustotal; } - @Override - public List getConfigurations() { - final ArrayList list = new ArrayList(); - list.add(new GenericConfiguration.StrPrefConfiguration("Api key", api_key)); - - return list; - } +// @Override +// public List getConfigurations() { +// final ArrayList list = new ArrayList(); +// list.add(new GenericConfiguration.StrPrefConfiguration("Api key", api_key)); +// +// return list; +// } @Override public void onInitialize(View views) {