diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7146721..312f423 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -167,39 +167,23 @@
android:host="youtube-nocookie.com" />
-
+
+ android:pathPattern="/maps/place/.*"
+ android:host="*" />
+ android:pathPattern="/maps/place/.*"
+ android:host="*" />
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java b/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java
index 8203033..978586e 100644
--- a/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java
+++ b/app/src/main/java/app/fedilab/nitterizeme/AppInfoAdapter.java
@@ -14,7 +14,6 @@ package app.fedilab.nitterizeme;
* You should have received a copy of the GNU General Public License along with NitterizeMe; if not,
* see . */
-import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
@@ -89,8 +88,8 @@ public class AppInfoAdapter extends RecyclerView.Adapter {
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra("nitterizeme","test");
String url = "https://"+appInfo.getDomain();
- if( appInfo.getDomain().contains("google.com")) {
- url += "/maps/";
+ if( appInfo.getDomain().contains("/maps/place")) {
+ url = "https://google.com/maps/place";
}
intent.setData(Uri.parse(url));
context.startActivity(intent);
diff --git a/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java b/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java
index 55a6a84..f895598 100644
--- a/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java
+++ b/app/src/main/java/app/fedilab/nitterizeme/MainActivity.java
@@ -35,11 +35,15 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
import android.widget.ImageButton;
+import android.widget.TextView;
import com.google.android.material.snackbar.Snackbar;
import com.google.android.material.textfield.TextInputEditText;
+import com.google.android.material.textfield.TextInputLayout;
import java.util.ArrayList;
import java.util.Objects;
@@ -57,6 +61,7 @@ public class MainActivity extends AppCompatActivity {
public static String SET_OSM_ENABLED = "set_osm_enabled";
public static String SET_OSM_HOST = "set_osm_host";
public static String DEFAULT_OSM_HOST = "www.openstreetmap.org";
+ public static String SET_GEO_URIS = "set_geo_uris";
public static final String APP_PREFS = "app_prefs";
private AppInfoAdapter appInfoAdapter;
private RecyclerView list_apps;
@@ -72,8 +77,7 @@ public class MainActivity extends AppCompatActivity {
"m.youtube.com",
"youtu.be",
"youtube-nocookie.com",
- "google.com/maps",
- "www.google.com/maps"
+ "maps",
};
@Override
@@ -183,6 +187,22 @@ public class MainActivity extends AppCompatActivity {
appInfos.add(appInfo);
}
+ CheckBox enable_geo_uris = findViewById(R.id.enable_geo_uris);
+ enable_geo_uris.setOnCheckedChangeListener((buttonView, isChecked) -> {
+ SharedPreferences.Editor editor = sharedpreferences.edit();
+ editor.putBoolean(SET_GEO_URIS, isChecked);
+ editor.apply();
+ TextInputLayout osm_instance_container = findViewById(R.id.osm_instance_container);
+ TextView osm_indications = findViewById(R.id.osm_indications);
+ if( isChecked){
+ osm_instance_container.setVisibility(View.GONE);
+ osm_indications.setText(R.string.redirect_gm_to_geo_uri);
+ }else{
+ osm_instance_container.setVisibility(View.VISIBLE);
+ osm_indications.setText(R.string.redirect_gm_to_osm);
+ }
+ });
+
appInfoAdapter = new AppInfoAdapter(appInfos);
list_apps.setAdapter(appInfoAdapter);
final LinearLayoutManager mLayoutManager;
diff --git a/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java b/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java
index 7c530d6..6e1aed3 100644
--- a/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java
+++ b/app/src/main/java/app/fedilab/nitterizeme/TransformActivity.java
@@ -42,7 +42,8 @@ public class TransformActivity extends Activity {
final Pattern youtubePattern = Pattern.compile("(www\\.|m\\.)?(youtube\\.com|youtu\\.be|youtube-nocookie\\.com)/(((?!([\"'<])).)*)");
final Pattern nitterPattern = Pattern.compile("(mobile\\.|www\\.)?twitter.com([\\w-/]+)");
- final Pattern googleMap = Pattern.compile("google\\.com/maps[^@]+@([\\d.,z]{3,}).*");
+ final Pattern maps = Pattern.compile("/maps/place/[^@]+@([\\d.,z]{3,}).*");
+ final Pattern extractPlace = Pattern.compile("/maps/place/(((?!/data).)*)");
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -90,22 +91,32 @@ public class TransformActivity extends Activity {
boolean nitter_enabled = sharedpreferences.getBoolean(SET_NITTER_ENABLED, true);
if(nitter_enabled) {
Intent delegate = new Intent(action);
- delegate.setData(Uri.parse(transformUrl(url)));
- delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (delegate.resolveActivity(getPackageManager()) != null) {
- startActivity(delegate);
+ String transformedURL = transformUrl(url);
+ if( transformedURL != null) {
+ delegate.setData(Uri.parse(transformUrl(url)));
+ delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (delegate.resolveActivity(getPackageManager()) != null) {
+ startActivity(delegate);
+ }
+ }else{
+ forwardToBrowser(intent, action);
}
} else {
forwardToBrowser(intent, action);
}
- }else if( url.contains("google")) {
+ }else if( url.contains("/maps/place")) {
boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
if(osm_enabled) {
Intent delegate = new Intent(action);
- delegate.setData(Uri.parse(transformUrl(url)));
- delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (delegate.resolveActivity(getPackageManager()) != null) {
- startActivity(delegate);
+ String transformedURL = transformUrl(url);
+ if( transformedURL != null) {
+ delegate.setData(Uri.parse(transformUrl(url)));
+ delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (delegate.resolveActivity(getPackageManager()) != null) {
+ startActivity(delegate);
+ }
+ }else {
+ forwardToBrowser(intent, action);
}
} else {
forwardToBrowser(intent, action);
@@ -114,10 +125,15 @@ public class TransformActivity extends Activity {
boolean invidious_enabled = sharedpreferences.getBoolean(SET_INVIDIOUS_ENABLED, true);
if( invidious_enabled) {
Intent delegate = new Intent(action);
- delegate.setData(Uri.parse(transformUrl(url)));
- delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- if (delegate.resolveActivity(getPackageManager()) != null) {
- startActivity(delegate);
+ String transformedURL = transformUrl(url);
+ if( transformedURL != null) {
+ delegate.setData(Uri.parse(transformUrl(url)));
+ delegate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ if (delegate.resolveActivity(getPackageManager()) != null) {
+ startActivity(delegate);
+ }
+ }else {
+ forwardToBrowser(intent, action);
}
}else{
forwardToBrowser(intent, action);
@@ -171,18 +187,14 @@ public class TransformActivity extends Activity {
String nitterHost = sharedpreferences.getString(MainActivity.SET_NITTER_HOST, MainActivity.DEFAULT_NITTER_HOST).toLowerCase();
newUrl = "https://" + nitterHost + nitter_directory;
}
- if( newUrl != null) {
- return newUrl;
- }else {
- return url;
- }
+ return newUrl;
} else {
return url;
}
- }else if( url.contains("google")) {
+ }else if( url.contains("/maps/place")) {
boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
if(osm_enabled) {
- Matcher matcher = googleMap.matcher(url);
+ Matcher matcher = maps.matcher(url);
while (matcher.find()) {
final String localization = matcher.group(1);
assert localization != null;
@@ -195,15 +207,24 @@ public class TransformActivity extends Activity {
}else {
zoom = data[2];
}
+
String osmHost = sharedpreferences.getString(MainActivity.SET_OSM_HOST, MainActivity.DEFAULT_OSM_HOST).toLowerCase();
- newUrl = "https://"+osmHost+"/#map="+zoom+"/"+data[0]+"/"+data[1];
+ boolean geo_uri_enabled = sharedpreferences.getBoolean(MainActivity.SET_GEO_URIS, false);
+ if(! geo_uri_enabled) {
+ newUrl = "https://" + osmHost + "/#map=" + zoom + "/" + data[0] + "/" + data[1];
+ }else{
+ newUrl = "geo:0,0?q="+data[0]+","+data[1]+",z="+zoom;
+ }
}
}
- if( newUrl != null) {
- return newUrl;
- }else {
- return url;
+ if( newUrl == null && url.contains("/data=")) {
+ matcher = extractPlace.matcher(url);
+ while (matcher.find()) {
+ final String search = matcher.group(1);
+ newUrl = "geo:0,0?q="+search;
+ }
}
+ return newUrl;
} else {
return url;
}
@@ -220,11 +241,7 @@ public class TransformActivity extends Activity {
newUrl = "https://" + invidiousHost + "/" + youtubeId + "&local=true";
}
}
- if( newUrl != null) {
- return newUrl;
- }else {
- return url;
- }
+ return newUrl;
}else{
return url;
}
@@ -271,10 +288,10 @@ public class TransformActivity extends Activity {
newUrl = "https://" + nitterHost + nitter_directory;
}
}
- }else if( url.contains("google")) {
+ }else if( url.contains("/maps/place/")) {
boolean osm_enabled = sharedpreferences.getBoolean(MainActivity.SET_OSM_ENABLED, true);
if(osm_enabled) {
- Matcher matcher = googleMap.matcher(url);
+ Matcher matcher = maps.matcher(url);
while (matcher.find()) {
final String localization = matcher.group(1);
assert localization != null;
diff --git a/app/src/main/res/layout/content_main.xml b/app/src/main/res/layout/content_main.xml
index 81cd984..75aaf92 100644
--- a/app/src/main/res/layout/content_main.xml
+++ b/app/src/main/res/layout/content_main.xml
@@ -140,18 +140,31 @@
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/osm_indications"
android:orientation="horizontal">
-
-
+
+
+
+
-
+ android:id="@+id/enable_geo_uris"/>
+
+
Custom OSM hostname
Redirect YouTube to Invidious
Redirect Twitter to Nitter
+ Redirect Google Map to Geo URI
Configure
Display supported links
Hide supported links
+ Use geo URI