mirror of
https://github.com/TrianguloY/UrlChecker.git
synced 2024-09-19 20:02:16 +02:00
parent
97d5861948
commit
95472046d4
@ -9,17 +9,16 @@ import android.content.Intent;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.service.quicksettings.TileService;
|
||||
import android.util.Patterns;
|
||||
import android.view.Window;
|
||||
import android.widget.Toast;
|
||||
|
||||
import com.trianguloy.urlchecker.R;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidSettings;
|
||||
import com.trianguloy.urlchecker.utilities.AndroidUtils;
|
||||
import com.trianguloy.urlchecker.utilities.PackageUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* This activity opens (on this app) a link detected on the clipboard text. If multiple asks.
|
||||
@ -83,14 +82,15 @@ public class ShortcutsActivity extends Activity {
|
||||
break;
|
||||
case 1:
|
||||
// 1 link, open
|
||||
open(links.get(0));
|
||||
open(links.iterator().next());
|
||||
finish();
|
||||
break;
|
||||
default:
|
||||
// multiple links, choose
|
||||
var links_array = links.toArray(new String[0]);
|
||||
dialog = new AlertDialog.Builder(this)
|
||||
.setItems(links.toArray(new String[0]), (dialog, which) -> {
|
||||
open(links.get(which));
|
||||
.setItems(links_array, (dialog, which) -> {
|
||||
open(links_array[which]);
|
||||
dialog.cancel();
|
||||
})
|
||||
.setOnCancelListener(o -> this.finish())
|
||||
@ -116,21 +116,15 @@ public class ShortcutsActivity extends Activity {
|
||||
/**
|
||||
* Returns all links detected on the clipboard
|
||||
*/
|
||||
private List<String> getLinksFromClipboard() {
|
||||
private Set<String> getLinksFromClipboard() {
|
||||
|
||||
var clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
if (clipboard == null) return Collections.emptyList();
|
||||
if (clipboard == null) return Collections.emptySet();
|
||||
|
||||
var primaryClip = clipboard.getPrimaryClip();
|
||||
if (primaryClip == null || primaryClip.getItemCount() < 1) return Collections.emptyList();
|
||||
if (primaryClip == null || primaryClip.getItemCount() < 1) return Collections.emptySet();
|
||||
|
||||
var textLinks = primaryClip.getItemAt(0).coerceToText(this);
|
||||
|
||||
var links = new ArrayList<String>();
|
||||
var matcher = Patterns.WEB_URL.matcher(textLinks);
|
||||
while (matcher.find()) links.add(matcher.group());
|
||||
|
||||
return links;
|
||||
return AndroidUtils.getLinksFromText(primaryClip.getItemAt(0).coerceToText(this));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -3,8 +3,8 @@ package com.trianguloy.urlchecker.dialogs;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.animation.ValueAnimator;
|
||||
import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.Intent;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
@ -25,9 +25,11 @@ import com.trianguloy.urlchecker.utilities.AndroidUtils;
|
||||
import com.trianguloy.urlchecker.utilities.Inflater;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* The main dialog, when opening a url
|
||||
@ -177,11 +179,39 @@ public class MainDialog extends Activity {
|
||||
// get views
|
||||
ll_mods = findViewById(R.id.middle_modules);
|
||||
|
||||
// initialize
|
||||
initializeModules();
|
||||
// load url (or urls)
|
||||
var links = getOpenUrl();
|
||||
switch (links.size()) {
|
||||
case 0:
|
||||
// no links, invalid
|
||||
Toast.makeText(this, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
break;
|
||||
case 1:
|
||||
// 1 link, just that
|
||||
|
||||
// load url
|
||||
onNewUrl(new UrlData(getOpenUrl()));
|
||||
// initialize
|
||||
initializeModules();
|
||||
|
||||
// show
|
||||
onNewUrl(new UrlData(links.iterator().next()));
|
||||
break;
|
||||
default:
|
||||
// multiple links, choose
|
||||
var links_array = links.toArray(new String[0]);
|
||||
new AlertDialog.Builder(this)
|
||||
.setItems(links_array, (dialog, which) -> {
|
||||
|
||||
// initialize
|
||||
initializeModules();
|
||||
|
||||
// show
|
||||
onNewUrl(new UrlData(links_array[which]));
|
||||
dialog.dismiss();
|
||||
})
|
||||
.setOnCancelListener(o -> this.finish())
|
||||
.show();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -267,39 +297,31 @@ public class MainDialog extends Activity {
|
||||
/**
|
||||
* Returns the url that this activity was opened with (intent uri or sent text)
|
||||
*/
|
||||
private String getOpenUrl() {
|
||||
private Set<String> getOpenUrl() {
|
||||
// get the intent
|
||||
Intent intent = getIntent();
|
||||
if (intent == null) return invalid();
|
||||
var intent = getIntent();
|
||||
if (intent == null) return Collections.emptySet();
|
||||
|
||||
// check the action
|
||||
String action = getIntent().getAction();
|
||||
var action = getIntent().getAction();
|
||||
if (Intent.ACTION_SEND.equals(action)) {
|
||||
// sent text
|
||||
String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
|
||||
if (sharedText == null) return invalid();
|
||||
return sharedText.trim();
|
||||
var sharedText = intent.getStringExtra(Intent.EXTRA_TEXT);
|
||||
if (sharedText == null) return Collections.emptySet();
|
||||
var links = AndroidUtils.getLinksFromText(sharedText);
|
||||
if (links.isEmpty()) links.add(sharedText.trim()); // no links? just use the whole text, the user requested the app so...
|
||||
return links;
|
||||
} else if (Intent.ACTION_VIEW.equals(action)) {
|
||||
// view url
|
||||
Uri uri = intent.getData();
|
||||
if (uri == null) return invalid();
|
||||
return uri.toString();
|
||||
var uri = intent.getData();
|
||||
if (uri == null) return Collections.emptySet();
|
||||
return Collections.singleton(uri.toString());
|
||||
} else {
|
||||
// other
|
||||
return invalid();
|
||||
return Collections.emptySet();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* shows a toast, finishes the activity and returns null
|
||||
*/
|
||||
private String invalid() {
|
||||
// for an invalid parameter
|
||||
Toast.makeText(this, R.string.toast_invalid, Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
return null;
|
||||
}
|
||||
|
||||
/* ------------------- its a secret! ------------------- */
|
||||
|
||||
/**
|
||||
|
@ -13,6 +13,7 @@ import android.os.Build;
|
||||
import android.text.SpannableStringBuilder;
|
||||
import android.text.style.ClickableSpan;
|
||||
import android.util.Log;
|
||||
import android.util.Patterns;
|
||||
import android.util.TypedValue;
|
||||
import android.view.View;
|
||||
import android.widget.TextView;
|
||||
@ -23,6 +24,8 @@ import com.trianguloy.urlchecker.R;
|
||||
|
||||
import java.text.DateFormat;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* Generic Android utilities
|
||||
@ -217,4 +220,14 @@ public interface AndroidUtils {
|
||||
drawable.setColorFilter(cntx.getResources().getColor(resolvedAttr.resourceId), PorterDuff.Mode.SRC_IN);
|
||||
return drawable;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all the unique links found on a given text
|
||||
*/
|
||||
static Set<String> getLinksFromText(CharSequence text) {
|
||||
var links = new HashSet<String>();
|
||||
var matcher = Patterns.WEB_URL.matcher(text);
|
||||
while (matcher.find()) links.add(matcher.group());
|
||||
return links;
|
||||
}
|
||||
}
|
||||
|
@ -1,18 +1,14 @@
|
||||
<resources>
|
||||
<string name="app_name">URLCheck</string>
|
||||
|
||||
<string name="lnk_playStore"
|
||||
translatable="false">Play Store</string>
|
||||
<string name="lnk_fDroid"
|
||||
translatable="false">F-Droid</string>
|
||||
<string name="lnk_playStore" translatable="false">Play Store</string>
|
||||
<string name="lnk_fDroid" translatable="false">F-Droid</string>
|
||||
|
||||
|
||||
<string name="dd"
|
||||
translatable="false">%s:</string>
|
||||
<string name="dd" translatable="false">%s:</string>
|
||||
|
||||
<string name="trianguloy">TrianguloY</string>
|
||||
<string name="contributors"
|
||||
translatable="false">Ilithy, PabloOQ</string>
|
||||
<string name="contributors" translatable="false">Ilithy, PabloOQ</string>
|
||||
|
||||
<string name="sample_url"><![CDATA[http://www.google.com/?ref=referrer&foo=bar#tag]]></string>
|
||||
</resources>
|
||||
|
Loading…
Reference in New Issue
Block a user