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

text is also a module now

cntx variable removed, using functions now
This commit is contained in:
TrianguloY 2020-07-25 14:23:53 +02:00
parent 537e825662
commit 52c6702227
10 changed files with 167 additions and 84 deletions

View File

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

View File

@ -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<BaseModule> getEnabled(Context cntx) {
static TextInputModule getTopModule() {
return new TextInputModule();
}
public static List<BaseModule> getMiddleModules(Context cntx) {
List<BaseModule> enabled = new ArrayList<>();
SharedPreferences prefs = cntx.getSharedPreferences("MM", Context.MODE_PRIVATE);
for (Map.Entry<String, Class<? extends BaseModule>> module : modules.entrySet()) {
@ -43,4 +48,8 @@ public class ModuleManager {
return enabled;
}
static OpenModule getBottomModule() {
return new OpenModule();
}
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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">
<LinearLayout
@ -12,17 +13,15 @@
android:layout_height="wrap_content"
android:orientation="vertical">
<EditText
android:id="@+id/url"
style="@android:style/Widget.TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold" />
<include
android:id="@+id/top_module"
layout="@layout/module_text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<LinearLayout
android:id="@+id/mods"
android:id="@+id/middle_modules"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
@ -30,7 +29,7 @@
</LinearLayout>
<include
android:id="@+id/open_module"
android:id="@+id/bottom_module"
layout="@layout/module_open"
android:layout_width="match_parent"
android:layout_height="wrap_content" />

View File

@ -0,0 +1,13 @@
<?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">
<EditText
android:id="@+id/url"
style="@android:style/Widget.TextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:textStyle="bold" />
</LinearLayout>