From 52c67022275effffe42461d4bd452f7a686af7cf Mon Sep 17 00:00:00 2001 From: TrianguloY Date: Sat, 25 Jul 2020 14:23:53 +0200 Subject: [PATCH] text is also a module now cntx variable removed, using functions now --- .../com/trianguloy/urlchecker/MainDialog.java | 78 +++++++++---------- .../trianguloy/urlchecker/ModuleManager.java | 11 ++- .../urlchecker/modules/AsciiModule.java | 2 +- .../urlchecker/modules/BaseModule.java | 27 ++++++- .../urlchecker/modules/OpenModule.java | 16 ++-- .../urlchecker/modules/RedirectModule.java | 23 ++---- .../urlchecker/modules/TextInputModule.java | 53 +++++++++++++ .../urlchecker/modules/VirusTotalModule.java | 11 ++- app/src/main/res/layout/dialog_main.xml | 17 ++-- app/src/main/res/layout/module_text.xml | 13 ++++ 10 files changed, 167 insertions(+), 84 deletions(-) create mode 100644 app/src/main/java/com/trianguloy/urlchecker/modules/TextInputModule.java create mode 100644 app/src/main/res/layout/module_text.xml diff --git a/app/src/main/java/com/trianguloy/urlchecker/MainDialog.java b/app/src/main/java/com/trianguloy/urlchecker/MainDialog.java index 5ea6f60..06315ce 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/MainDialog.java +++ b/app/src/main/java/com/trianguloy/urlchecker/MainDialog.java @@ -3,8 +3,6 @@ package com.trianguloy.urlchecker; import android.app.Activity; import android.net.Uri; import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; import android.view.View; import android.view.Window; import android.widget.LinearLayout; @@ -12,26 +10,32 @@ import android.widget.TextView; import android.widget.Toast; import com.trianguloy.urlchecker.modules.BaseModule; -import com.trianguloy.urlchecker.modules.OpenModule; import java.util.ArrayList; import java.util.List; -public class MainDialog extends Activity implements TextWatcher { +public class MainDialog extends Activity { - public void setUrl(String url) { - txt_url.setText(url); - //onChangedUrl(); // not needed, the textwatcher does it + boolean onSettingUrl = false; + + public void setUrl(String url, BaseModule providerModule) { + if (BuildConfig.DEBUG && onSettingUrl) { + throw new AssertionError("Attempting to change an url inside a setUrl call"); + } + this.url = url; + onSettingUrl = true; + onChangedUrl(providerModule); + onSettingUrl = false; } public String getUrl() { - return txt_url.getText().toString(); + return url; } // ------------------- data ------------------- private final List modules = new ArrayList<>(); - private TextView txt_url; + private String url; private LinearLayout ll_mods; // ------------------- initialize ------------------- @@ -42,40 +46,45 @@ public class MainDialog extends Activity implements TextWatcher { requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.dialog_main); - txt_url = findViewById(R.id.url); - txt_url.addTextChangedListener(this); - - ll_mods = findViewById(R.id.mods); + ll_mods = findViewById(R.id.middle_modules); initialize(); - setUrl(getOpenUrl()); + setUrl(getOpenUrl(), null); } private void initialize() { - modules.addAll(ModuleManager.getEnabled(this)); - for (BaseModule module : modules) { + modules.clear(); + + // top module + initializeModule(ModuleManager.getTopModule(), findViewById(R.id.top_module)); + + final List middleModules = ModuleManager.getMiddleModules(this); + for (BaseModule module : middleModules) { // set title String name = module.getName(); - if(name != null) { + if (name != null) { final TextView title = new TextView(this); title.setText(name + ":"); ll_mods.addView(title); } // set content - View views = getLayoutInflater().inflate(module.getLayoutBase(), ll_mods); - module.setContext(this); - module.initialize(views); + initializeModule(module, + getLayoutInflater().inflate(module.getLayoutBase(), ll_mods) + ); } - // bottom module (open) - OpenModule openModule = new OpenModule(); - openModule.setContext(this); - openModule.initialize(findViewById(R.id.open_module)); - modules.add(openModule); + // bottom module + initializeModule(ModuleManager.getBottomModule(), findViewById(R.id.bottom_module)); + } + + private void initializeModule(BaseModule module, View views){ + module.registerDialog(this); + module.initialize(views); + modules.add(module); } private String getOpenUrl() { @@ -90,24 +99,11 @@ public class MainDialog extends Activity implements TextWatcher { // ------------------- url ------------------- - private void onChangedUrl() { + private void onChangedUrl(BaseModule providerModule) { for (BaseModule module : modules) { - module.onNewUrl(getUrl()); + if (module != providerModule) + module.onNewUrl(getUrl()); } } - // ------------------- TextWatcher ------------------- - - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } - - @Override - public void afterTextChanged(Editable s) { - onChangedUrl(); - } } \ No newline at end of file diff --git a/app/src/main/java/com/trianguloy/urlchecker/ModuleManager.java b/app/src/main/java/com/trianguloy/urlchecker/ModuleManager.java index abaf14e..5c14074 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/ModuleManager.java +++ b/app/src/main/java/com/trianguloy/urlchecker/ModuleManager.java @@ -7,6 +7,7 @@ import com.trianguloy.urlchecker.modules.AsciiModule; import com.trianguloy.urlchecker.modules.BaseModule; import com.trianguloy.urlchecker.modules.OpenModule; import com.trianguloy.urlchecker.modules.RedirectModule; +import com.trianguloy.urlchecker.modules.TextInputModule; import com.trianguloy.urlchecker.modules.VirusTotalModule; import java.util.ArrayList; @@ -28,7 +29,11 @@ public class ModuleManager { // ------------------- class ------------------- - public static List getEnabled(Context cntx) { + static TextInputModule getTopModule() { + return new TextInputModule(); + } + + public static List getMiddleModules(Context cntx) { List enabled = new ArrayList<>(); SharedPreferences prefs = cntx.getSharedPreferences("MM", Context.MODE_PRIVATE); for (Map.Entry> module : modules.entrySet()) { @@ -43,4 +48,8 @@ public class ModuleManager { return enabled; } + + static OpenModule getBottomModule() { + return new OpenModule(); + } } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/AsciiModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/AsciiModule.java index 35b5379..7ddc8e8 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/AsciiModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/AsciiModule.java @@ -48,7 +48,7 @@ public class AsciiModule extends BaseModule { newline = true; txt_ascii.append(message); } - txt_ascii.setBackgroundColor(cntx.getResources().getColor(R.color.warning)); + txt_ascii.setBackgroundColor(getActivity().getResources().getColor(R.color.warning)); } } } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java index d8c7b06..2210f09 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/BaseModule.java @@ -1,5 +1,6 @@ package com.trianguloy.urlchecker.modules; +import android.app.Activity; import android.content.Context; import android.view.View; @@ -7,12 +8,18 @@ import com.trianguloy.urlchecker.MainDialog; public abstract class BaseModule { - protected MainDialog cntx; + // ------------------- data ------------------- - public void setContext(MainDialog cntx){ - this.cntx = cntx; + private MainDialog dialog; + + // ------------------- initialization ------------------- + + public void registerDialog(MainDialog cntx) { + this.dialog = cntx; } + // ------------------- abstract functions ------------------- + public abstract String getName(); public abstract int getLayoutBase(); @@ -20,4 +27,18 @@ public abstract class BaseModule { public abstract void initialize(View views); public abstract void onNewUrl(String url); + + // ------------------- protected utilities ------------------- + + protected Activity getActivity() { + return dialog; + } + + protected String getUrl() { + return dialog.getUrl(); + } + + protected void setUrl(String url) { + dialog.setUrl(url, this); + } } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/OpenModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/OpenModule.java index e557b74..c37da44 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/OpenModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/OpenModule.java @@ -44,11 +44,11 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu views.findViewById(R.id.share).setOnClickListener(this); - popup = new PopupMenu(cntx, btn_open); + popup = new PopupMenu(getActivity(), btn_open); popup.setOnMenuItemClickListener(this); menu = popup.getMenu(); - lastOpened = new LastOpened(cntx); + lastOpened = new LastOpened(getActivity()); } @Override @@ -78,7 +78,7 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu } private void updateSpinner() { - packages = PackageUtilities.getOtherPackages(UrlUtilities.getViewIntent(cntx.getUrl(), null), cntx); + packages = PackageUtilities.getOtherPackages(UrlUtilities.getViewIntent(getUrl(), null), getActivity()); // check no apps if (packages.isEmpty()) { @@ -92,7 +92,7 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu lastOpened.sort(packages); // set - btn_open.setText("Open with " + PackageUtilities.getPackageName(packages.get(0), cntx)); + btn_open.setText("Open with " + PackageUtilities.getPackageName(packages.get(0), getActivity())); btn_open.setEnabled(true); menu.clear(); if (packages.size() == 1) { @@ -100,7 +100,7 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu } else { btn_openWith.setVisibility(View.VISIBLE); for (int i = 1; i < packages.size(); i++) { - menu.add(Menu.NONE, i, i, "Open with " + PackageUtilities.getPackageName(packages.get(i), cntx)); + menu.add(Menu.NONE, i, i, "Open with " + PackageUtilities.getPackageName(packages.get(i), getActivity())); } } @@ -111,7 +111,7 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu String chosed = packages.get(index); lastOpened.usedPackage(chosed); - cntx.startActivity(UrlUtilities.getViewIntent(cntx.getUrl(), chosed)); + getActivity().startActivity(UrlUtilities.getViewIntent(getUrl(), chosed)); // UrlUtilities.openUrlRemoveThis(cntx.getUrl(), cntx); } @@ -123,10 +123,10 @@ public class OpenModule extends BaseModule implements View.OnClickListener, Popu private void shareUrl() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); - sendIntent.putExtra(Intent.EXTRA_TEXT, cntx.getUrl()); + sendIntent.putExtra(Intent.EXTRA_TEXT, getUrl()); sendIntent.setType("text/plain"); Intent shareIntent = Intent.createChooser(sendIntent, "Share"); - cntx.startActivity(shareIntent); + getActivity().startActivity(shareIntent); } } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/RedirectModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/RedirectModule.java index b381d2e..a1775ee 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/RedirectModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/RedirectModule.java @@ -5,7 +5,6 @@ import android.widget.Button; import android.widget.Toast; import com.trianguloy.urlchecker.R; -import com.trianguloy.urlchecker.old.OpenLink; import java.io.IOException; import java.net.HttpURLConnection; @@ -19,7 +18,6 @@ public class RedirectModule extends BaseModule implements View.OnClickListener { private Button undo; private Stack urls = new Stack<>(); - private boolean expected = false; @Override public String getName() { @@ -41,10 +39,6 @@ public class RedirectModule extends BaseModule implements View.OnClickListener { @Override public void onNewUrl(String url) { - if (expected) { - expected = false; - return; - } urls.clear(); check.setEnabled(true); undo.setEnabled(false); @@ -64,9 +58,10 @@ public class RedirectModule extends BaseModule implements View.OnClickListener { //https://stackoverflow.com/questions/1884230/urlconnection-doesnt-follow-redirect private void check() { + check.setEnabled(false); new Thread(new Runnable() { public void run() { - String url = cntx.getUrl(); + String url = getUrl(); String message = "Unknown error"; HttpURLConnection conn = null; @@ -96,16 +91,15 @@ public class RedirectModule extends BaseModule implements View.OnClickListener { final String finalMessage = message; final String finalUrl = url; - cntx.runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { public void run() { if (finalUrl == null) { - Toast.makeText(cntx, finalMessage, Toast.LENGTH_SHORT).show(); - check.setEnabled(false); + Toast.makeText(getActivity(), finalMessage, Toast.LENGTH_SHORT).show(); } else { - urls.push(cntx.getUrl()); - expected = true; - cntx.setUrl(finalUrl); + urls.push(getUrl()); + setUrl(finalUrl); undo.setEnabled(true); + check.setEnabled(true); } } }); @@ -116,8 +110,7 @@ public class RedirectModule extends BaseModule implements View.OnClickListener { private void undo() { if (urls.isEmpty()) return; - expected = true; - cntx.setUrl(urls.pop()); + setUrl(urls.pop()); check.setEnabled(true); if (urls.isEmpty()) undo.setEnabled(false); } diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/TextInputModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/TextInputModule.java new file mode 100644 index 0000000..d5e2702 --- /dev/null +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/TextInputModule.java @@ -0,0 +1,53 @@ +package com.trianguloy.urlchecker.modules; + +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.widget.EditText; + +import com.trianguloy.urlchecker.R; + +public class TextInputModule extends BaseModule implements TextWatcher { + + private EditText edtxt_url; + private boolean editByCode = false; + + @Override + public String getName() { + return null; + } + + @Override + public int getLayoutBase() { + return R.layout.module_text; + } + + @Override + public void initialize(View views) { + edtxt_url = views.findViewById(R.id.url); + edtxt_url.addTextChangedListener(this); + } + + @Override + public void onNewUrl(String url) { + editByCode = true; + edtxt_url.setText(url); + editByCode = false; + } + + // ------------------- TextWatcher ------------------- + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + if(editByCode) return; + setUrl(s.toString()); + } +} diff --git a/app/src/main/java/com/trianguloy/urlchecker/modules/VirusTotalModule.java b/app/src/main/java/com/trianguloy/urlchecker/modules/VirusTotalModule.java index 2635177..ee1a163 100644 --- a/app/src/main/java/com/trianguloy/urlchecker/modules/VirusTotalModule.java +++ b/app/src/main/java/com/trianguloy/urlchecker/modules/VirusTotalModule.java @@ -84,12 +84,12 @@ public class VirusTotalModule extends BaseModule implements View.OnClickListener private void _scanUrl() { VirusTotalUtility.InternalReponse response; while (scanning) { - response = VirusTotalUtility.scanUrl(cntx.getUrl()); + response = VirusTotalUtility.scanUrl(getUrl()); if (response.detectionsTotal > 0) { result = response; scanning = false; - cntx.runOnUiThread(new Runnable() { + getActivity().runOnUiThread(new Runnable() { public void run() { updateUI(); } @@ -135,7 +135,7 @@ public class VirusTotalModule extends BaseModule implements View.OnClickListener } private void setResult(String message, int color) { - txt_result.setBackgroundColor(color == 0 ? Color.TRANSPARENT : cntx.getResources().getColor(color)); + txt_result.setBackgroundColor(color == 0 ? Color.TRANSPARENT : getActivity().getResources().getColor(color)); txt_result.setText(message); } @@ -144,10 +144,9 @@ public class VirusTotalModule extends BaseModule implements View.OnClickListener if (result == null) return; if (details) { - UrlUtilities.openUrlRemoveThis(result.scanUrl, cntx); - cntx.finish(); + UrlUtilities.openUrlRemoveThis(result.scanUrl, getActivity()); } else { - new AlertDialog.Builder(cntx) + new AlertDialog.Builder(getActivity()) .setMessage(result.info) .show(); } diff --git a/app/src/main/res/layout/dialog_main.xml b/app/src/main/res/layout/dialog_main.xml index a21c20a..4ad7258 100644 --- a/app/src/main/res/layout/dialog_main.xml +++ b/app/src/main/res/layout/dialog_main.xml @@ -5,6 +5,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" + android:padding="5dp" tools:context="com.trianguloy.urlchecker.MainDialog"> - + @@ -30,7 +29,7 @@ diff --git a/app/src/main/res/layout/module_text.xml b/app/src/main/res/layout/module_text.xml new file mode 100644 index 0000000..7ed0ef1 --- /dev/null +++ b/app/src/main/res/layout/module_text.xml @@ -0,0 +1,13 @@ + + + + + \ No newline at end of file