Support for geobookmark creation from external geo uris
This commit is contained in:
		| @@ -24,8 +24,8 @@ android { | |||||||
|         applicationId "it.danieleverducci.nextcloudmaps" |         applicationId "it.danieleverducci.nextcloudmaps" | ||||||
|         minSdkVersion 23 |         minSdkVersion 23 | ||||||
|         targetSdkVersion 30 |         targetSdkVersion 30 | ||||||
|         versionCode 4 |         versionCode 5 | ||||||
|         versionName "0.3.2" |         versionName "0.3.3" | ||||||
|  |  | ||||||
|         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |         testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" | ||||||
|     } |     } | ||||||
|   | |||||||
| @@ -167,6 +167,7 @@ public class GeofavoriteDetailActivity extends AppCompatActivity implements Loca | |||||||
|                     mGeofavorite.setLng(coords[1]); |                     mGeofavorite.setLng(coords[1]); | ||||||
|                 } catch (IllegalArgumentException e) { |                 } catch (IllegalArgumentException e) { | ||||||
|                     Toast.makeText(this, R.string.error_unsupported_uri, Toast.LENGTH_SHORT).show(); |                     Toast.makeText(this, R.string.error_unsupported_uri, Toast.LENGTH_SHORT).show(); | ||||||
|  |                     finish(); | ||||||
|                 } |                 } | ||||||
|             } else { |             } else { | ||||||
|                 // Precompile location with current one |                 // Precompile location with current one | ||||||
|   | |||||||
| @@ -56,6 +56,7 @@ import it.danieleverducci.nextcloudmaps.activity.login.LoginActivity; | |||||||
| import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem; | import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem; | ||||||
| import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener; | import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener; | ||||||
| import it.danieleverducci.nextcloudmaps.model.Geofavorite; | import it.danieleverducci.nextcloudmaps.model.Geofavorite; | ||||||
|  | import it.danieleverducci.nextcloudmaps.utils.GeoUriParser; | ||||||
| import it.danieleverducci.nextcloudmaps.utils.IntentGenerator; | import it.danieleverducci.nextcloudmaps.utils.IntentGenerator; | ||||||
|  |  | ||||||
| import static android.view.View.GONE; | import static android.view.View.GONE; | ||||||
|   | |||||||
| @@ -1,6 +1,7 @@ | |||||||
| package it.danieleverducci.nextcloudmaps.utils; | package it.danieleverducci.nextcloudmaps.utils; | ||||||
|  |  | ||||||
| import android.net.Uri; | import android.net.Uri; | ||||||
|  | import android.util.Log; | ||||||
|  |  | ||||||
| import java.util.regex.Matcher; | import java.util.regex.Matcher; | ||||||
| import java.util.regex.Pattern; | import java.util.regex.Pattern; | ||||||
| @@ -8,12 +9,21 @@ import java.util.regex.Pattern; | |||||||
| import it.danieleverducci.nextcloudmaps.model.Geofavorite; | import it.danieleverducci.nextcloudmaps.model.Geofavorite; | ||||||
|  |  | ||||||
| public class GeoUriParser { | public class GeoUriParser { | ||||||
|     private static final Pattern PATTERN_GEO = Pattern.compile("geo:[\\d.]+,[\\d.]+"); |     private static final Pattern PATTERN_GEO = Pattern.compile("geo:(-?[\\d.]+),(-?[\\d.]+)"); | ||||||
|  |  | ||||||
|     public static double[] parseUri(Uri uri) throws IllegalArgumentException { |     public static double[] parseUri(Uri uri) throws IllegalArgumentException { | ||||||
|         Matcher m = PATTERN_GEO.matcher(uri.getPath()); |         if (uri == null) | ||||||
|         if (m.find()) { |             throw new IllegalArgumentException("no uri"); | ||||||
|             return new double[]{0, 0}; |  | ||||||
|  |         Matcher m = PATTERN_GEO.matcher(uri.toString()); | ||||||
|  |         if (m.find() && m.groupCount() == 2) { | ||||||
|  |             String sLat = m.group(1); | ||||||
|  |             String sLon = m.group(2); | ||||||
|  |             try { | ||||||
|  |                 return new double[]{Double.parseDouble(sLat), Double.parseDouble(sLon)}; | ||||||
|  |             } catch (NumberFormatException e) { | ||||||
|  |                 throw new IllegalArgumentException("unable to parse uri"); | ||||||
|  |             } | ||||||
|         } else { |         } else { | ||||||
|             throw new IllegalArgumentException("unable to parse uri"); |             throw new IllegalArgumentException("unable to parse uri"); | ||||||
|         } |         } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user