try to guess inital location in ShareLocation based on sim card

Daniel Gultsch created

Change summary

src/main/java/eu/siacs/conversations/Config.java                                    |   1 
src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java |   4 
src/main/java/eu/siacs/conversations/ui/LocationActivity.java                       |   1 
src/main/java/eu/siacs/conversations/ui/ShareLocationActivity.java                  |   3 
src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java                   |   3 
src/main/java/eu/siacs/conversations/utils/LocationProvider.java                    |  69 
src/main/res/raw/countries                                                          | 245 
src/quicksy/java/eu/siacs/conversations/utils/PhoneNumberUtilWrapper.java           |  21 
8 files changed, 322 insertions(+), 25 deletions(-)

Detailed changes

src/main/java/eu/siacs/conversations/Config.java 🔗

@@ -173,7 +173,6 @@ public final class Config {
 	public static final class Map {
 		public final static double INITIAL_ZOOM_LEVEL = 4;
 		public final static double FINAL_ZOOM_LEVEL = 15;
-		public final static GeoPoint INITIAL_POS = new GeoPoint(33.805278, -84.171389);
 		public final static int MY_LOCATION_INDICATOR_SIZE = 10;
 		public final static int MY_LOCATION_INDICATOR_OUTLINE_SIZE = 3;
 		public final static long LOCATION_FIX_TIME_DELTA = 1000 * 10; // ms

src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java 🔗

@@ -54,7 +54,7 @@ public class AttachFileToConversationRunnable implements Runnable, MediaTranscod
 	}
 
 	boolean isVideoMessage() {
-		return this.isVideoMessage;
+		return this.isVideoMessage && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2;
 	}
 
 	private void processAsFile() {
@@ -160,7 +160,7 @@ public class AttachFileToConversationRunnable implements Runnable, MediaTranscod
 
 	@Override
 	public void run() {
-		if (isVideoMessage && Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
+		if (this.isVideoMessage()) {
 			try {
 				processAsVideo();
 			} catch (FileNotFoundException e) {

src/main/java/eu/siacs/conversations/ui/LocationActivity.java 🔗

@@ -39,6 +39,7 @@ import eu.siacs.conversations.services.QuickConversationsService;
 import eu.siacs.conversations.ui.util.LocationHelper;
 import eu.siacs.conversations.ui.widget.Marker;
 import eu.siacs.conversations.ui.widget.MyLocation;
+import eu.siacs.conversations.utils.LocationProvider;
 import eu.siacs.conversations.utils.ThemeHelper;
 
 public abstract class LocationActivity extends ActionBarActivity implements LocationListener {

src/main/java/eu/siacs/conversations/ui/ShareLocationActivity.java 🔗

@@ -22,6 +22,7 @@ import eu.siacs.conversations.databinding.ActivityShareLocationBinding;
 import eu.siacs.conversations.ui.util.LocationHelper;
 import eu.siacs.conversations.ui.widget.Marker;
 import eu.siacs.conversations.ui.widget.MyLocation;
+import eu.siacs.conversations.utils.LocationProvider;
 import eu.siacs.conversations.utils.ThemeHelper;
 
 public class ShareLocationActivity extends LocationActivity implements LocationListener {
@@ -55,7 +56,7 @@ public class ShareLocationActivity extends LocationActivity implements LocationL
 		this.binding = DataBindingUtil.setContentView(this,R.layout.activity_share_location);
 		setSupportActionBar((Toolbar) binding.toolbar);
 		configureActionBar(getSupportActionBar());
-		setupMapView(binding.map, Config.Map.INITIAL_POS);
+		setupMapView(binding.map, LocationProvider.getGeoPoint(this));
 
 		this.binding.cancelButton.setOnClickListener(view -> {
 			setResult(RESULT_CANCELED);

src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java 🔗

@@ -30,11 +30,12 @@ import eu.siacs.conversations.ui.util.LocationHelper;
 import eu.siacs.conversations.ui.util.UriHelper;
 import eu.siacs.conversations.ui.widget.Marker;
 import eu.siacs.conversations.ui.widget.MyLocation;
+import eu.siacs.conversations.utils.LocationProvider;
 
 
 public class ShowLocationActivity extends LocationActivity implements LocationListener {
 
-	private GeoPoint loc = Config.Map.INITIAL_POS;
+	private GeoPoint loc = LocationProvider.FALLBACK;
 	private ActivityShowLocationBinding binding;
 
 

src/main/java/eu/siacs/conversations/utils/LocationProvider.java 🔗

@@ -0,0 +1,69 @@
+package eu.siacs.conversations.utils;
+
+import android.content.Context;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import org.osmdroid.util.GeoPoint;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Locale;
+
+import eu.siacs.conversations.Config;
+import eu.siacs.conversations.R;
+
+public class LocationProvider {
+
+    public static final GeoPoint FALLBACK = new GeoPoint(0.0,0.0);
+
+    public static String getUserCountry(Context context) {
+        try {
+            final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+            final String simCountry = tm.getSimCountryIso();
+            if (simCountry != null && simCountry.length() == 2) { // SIM country code is available
+                return simCountry.toUpperCase(Locale.US);
+            } else if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { // device is not 3G (would be unreliable)
+                String networkCountry = tm.getNetworkCountryIso();
+                if (networkCountry != null && networkCountry.length() == 2) { // network country code is available
+                    return networkCountry.toUpperCase(Locale.US);
+                }
+            }
+        } catch (Exception e) {
+            // fallthrough
+        }
+        Locale locale = Locale.getDefault();
+        return locale.getCountry();
+    }
+
+    public static GeoPoint getGeoPoint(Context context) {
+        return getGeoPoint(context, getUserCountry(context));
+    }
+
+
+    public static synchronized GeoPoint getGeoPoint(Context context, String country) {
+        try {
+            BufferedReader reader =  new BufferedReader(new InputStreamReader(context.getResources().openRawResource(R.raw.countries)));
+            String line;
+            while((line = reader.readLine()) != null) {
+                String[] parts = line.split("\\s+",4);
+                if (parts.length == 4) {
+                    if (country.equalsIgnoreCase(parts[0])) {
+                        try {
+                            return new GeoPoint(Double.parseDouble(parts[1]), Double.parseDouble(parts[2]));
+                        } catch (NumberFormatException e) {
+                            return FALLBACK;
+                        }
+                    }
+                } else {
+                    Log.d(Config.LOGTAG,"unable to parse line="+line);
+                }
+            }
+        } catch (IOException e) {
+            Log.d(Config.LOGTAG,e.getMessage());
+        }
+        return FALLBACK;
+    }
+
+}

src/main/res/raw/countries 🔗

@@ -0,0 +1,245 @@
+AD 	42.546245 	1.601554 	Andorra
+AE 	23.424076 	53.847818 	United Arab Emirates
+AF 	33.93911 	67.709953 	Afghanistan
+AG 	17.060816 	-61.796428 	Antigua and Barbuda
+AI 	18.220554 	-63.068615 	Anguilla
+AL 	41.153332 	20.168331 	Albania
+AM 	40.069099 	45.038189 	Armenia
+AN 	12.226079 	-69.060087 	Netherlands Antilles
+AO 	-11.202692 	17.873887 	Angola
+AQ 	-75.250973 	-0.071389 	Antarctica
+AR 	-38.416097 	-63.616672 	Argentina
+AS 	-14.270972 	-170.132217 	American Samoa
+AT 	47.516231 	14.550072 	Austria
+AU 	-25.274398 	133.775136 	Australia
+AW 	12.52111 	-69.968338 	Aruba
+AZ 	40.143105 	47.576927 	Azerbaijan
+BA 	43.915886 	17.679076 	Bosnia and Herzegovina
+BB 	13.193887 	-59.543198 	Barbados
+BD 	23.684994 	90.356331 	Bangladesh
+BE 	50.503887 	4.469936 	Belgium
+BF 	12.238333 	-1.561593 	Burkina Faso
+BG 	42.733883 	25.48583 	Bulgaria
+BH 	25.930414 	50.637772 	Bahrain
+BI 	-3.373056 	29.918886 	Burundi
+BJ 	9.30769 	2.315834 	Benin
+BM 	32.321384 	-64.75737 	Bermuda
+BN 	4.535277 	114.727669 	Brunei
+BO 	-16.290154 	-63.588653 	Bolivia
+BR 	-14.235004 	-51.92528 	Brazil
+BS 	25.03428 	-77.39628 	Bahamas
+BT 	27.514162 	90.433601 	Bhutan
+BV 	-54.423199 	3.413194 	Bouvet Island
+BW 	-22.328474 	24.684866 	Botswana
+BY 	53.709807 	27.953389 	Belarus
+BZ 	17.189877 	-88.49765 	Belize
+CA 	56.130366 	-106.346771 	Canada
+CC 	-12.164165 	96.870956 	Cocos [Keeling] Islands
+CD 	-4.038333 	21.758664 	Congo [DRC]
+CF 	6.611111 	20.939444 	Central African Republic
+CG 	-0.228021 	15.827659 	Congo [Republic]
+CH 	46.818188 	8.227512 	Switzerland
+CI 	7.539989 	-5.54708 	Côte d'Ivoire
+CK 	-21.236736 	-159.777671 	Cook Islands
+CL 	-35.675147 	-71.542969 	Chile
+CM 	7.369722 	12.354722 	Cameroon
+CN 	35.86166 	104.195397 	China
+CO 	4.570868 	-74.297333 	Colombia
+CR 	9.748917 	-83.753428 	Costa Rica
+CU 	21.521757 	-77.781167 	Cuba
+CV 	16.002082 	-24.013197 	Cape Verde
+CX 	-10.447525 	105.690449 	Christmas Island
+CY 	35.126413 	33.429859 	Cyprus
+CZ 	49.817492 	15.472962 	Czech Republic
+DE 	51.165691 	10.451526 	Germany
+DJ 	11.825138 	42.590275 	Djibouti
+DK 	56.26392 	9.501785 	Denmark
+DM 	15.414999 	-61.370976 	Dominica
+DO 	18.735693 	-70.162651 	Dominican Republic
+DZ 	28.033886 	1.659626 	Algeria
+EC 	-1.831239 	-78.183406 	Ecuador
+EE 	58.595272 	25.013607 	Estonia
+EG 	26.820553 	30.802498 	Egypt
+EH 	24.215527 	-12.885834 	Western Sahara
+ER 	15.179384 	39.782334 	Eritrea
+ES 	40.463667 	-3.74922 	Spain
+ET 	9.145 	40.489673 	Ethiopia
+FI 	61.92411 	25.748151 	Finland
+FJ 	-16.578193 	179.414413 	Fiji
+FK 	-51.796253 	-59.523613 	Falkland Islands [Islas Malvinas]
+FM 	7.425554 	150.550812 	Micronesia
+FO 	61.892635 	-6.911806 	Faroe Islands
+FR 	46.227638 	2.213749 	France
+GA 	-0.803689 	11.609444 	Gabon
+GB 	55.378051 	-3.435973 	United Kingdom
+GD 	12.262776 	-61.604171 	Grenada
+GE 	42.315407 	43.356892 	Georgia
+GF 	3.933889 	-53.125782 	French Guiana
+GG 	49.465691 	-2.585278 	Guernsey
+GH 	7.946527 	-1.023194 	Ghana
+GI 	36.137741 	-5.345374 	Gibraltar
+GL 	71.706936 	-42.604303 	Greenland
+GM 	13.443182 	-15.310139 	Gambia
+GN 	9.945587 	-9.696645 	Guinea
+GP 	16.995971 	-62.067641 	Guadeloupe
+GQ 	1.650801 	10.267895 	Equatorial Guinea
+GR 	39.074208 	21.824312 	Greece
+GS 	-54.429579 	-36.587909 	South Georgia and the South Sandwich Islands
+GT 	15.783471 	-90.230759 	Guatemala
+GU 	13.444304 	144.793731 	Guam
+GW 	11.803749 	-15.180413 	Guinea-Bissau
+GY 	4.860416 	-58.93018 	Guyana
+GZ 	31.354676 	34.308825 	Gaza Strip
+HK 	22.396428 	114.109497 	Hong Kong
+HM 	-53.08181 	73.504158 	Heard Island and McDonald Islands
+HN 	15.199999 	-86.241905 	Honduras
+HR 	45.1 	15.2 	Croatia
+HT 	18.971187 	-72.285215 	Haiti
+HU 	47.162494 	19.503304 	Hungary
+ID 	-0.789275 	113.921327 	Indonesia
+IE 	53.41291 	-8.24389 	Ireland
+IL 	31.046051 	34.851612 	Israel
+IM 	54.236107 	-4.548056 	Isle of Man
+IN 	20.593684 	78.96288 	India
+IO 	-6.343194 	71.876519 	British Indian Ocean Territory
+IQ 	33.223191 	43.679291 	Iraq
+IR 	32.427908 	53.688046 	Iran
+IS 	64.963051 	-19.020835 	Iceland
+IT 	41.87194 	12.56738 	Italy
+JE 	49.214439 	-2.13125 	Jersey
+JM 	18.109581 	-77.297508 	Jamaica
+JO 	30.585164 	36.238414 	Jordan
+JP 	36.204824 	138.252924 	Japan
+KE 	-0.023559 	37.906193 	Kenya
+KG 	41.20438 	74.766098 	Kyrgyzstan
+KH 	12.565679 	104.990963 	Cambodia
+KI 	-3.370417 	-168.734039 	Kiribati
+KM 	-11.875001 	43.872219 	Comoros
+KN 	17.357822 	-62.782998 	Saint Kitts and Nevis
+KP 	40.339852 	127.510093 	North Korea
+KR 	35.907757 	127.766922 	South Korea
+KW 	29.31166 	47.481766 	Kuwait
+KY 	19.513469 	-80.566956 	Cayman Islands
+KZ 	48.019573 	66.923684 	Kazakhstan
+LA 	19.85627 	102.495496 	Laos
+LB 	33.854721 	35.862285 	Lebanon
+LC 	13.909444 	-60.978893 	Saint Lucia
+LI 	47.166 	9.555373 	Liechtenstein
+LK 	7.873054 	80.771797 	Sri Lanka
+LR 	6.428055 	-9.429499 	Liberia
+LS 	-29.609988 	28.233608 	Lesotho
+LT 	55.169438 	23.881275 	Lithuania
+LU 	49.815273 	6.129583 	Luxembourg
+LV 	56.879635 	24.603189 	Latvia
+LY 	26.3351 	17.228331 	Libya
+MA 	31.791702 	-7.09262 	Morocco
+MC 	43.750298 	7.412841 	Monaco
+MD 	47.411631 	28.369885 	Moldova
+ME 	42.708678 	19.37439 	Montenegro
+MG 	-18.766947 	46.869107 	Madagascar
+MH 	7.131474 	171.184478 	Marshall Islands
+MK 	41.608635 	21.745275 	Macedonia [FYROM]
+ML 	17.570692 	-3.996166 	Mali
+MM 	21.913965 	95.956223 	Myanmar [Burma]
+MN 	46.862496 	103.846656 	Mongolia
+MO 	22.198745 	113.543873 	Macau
+MP 	17.33083 	145.38469 	Northern Mariana Islands
+MQ 	14.641528 	-61.024174 	Martinique
+MR 	21.00789 	-10.940835 	Mauritania
+MS 	16.742498 	-62.187366 	Montserrat
+MT 	35.937496 	14.375416 	Malta
+MU 	-20.348404 	57.552152 	Mauritius
+MV 	3.202778 	73.22068 	Maldives
+MW 	-13.254308 	34.301525 	Malawi
+MX 	23.634501 	-102.552784 	Mexico
+MY 	4.210484 	101.975766 	Malaysia
+MZ 	-18.665695 	35.529562 	Mozambique
+NA 	-22.95764 	18.49041 	Namibia
+NC 	-20.904305 	165.618042 	New Caledonia
+NE 	17.607789 	8.081666 	Niger
+NF 	-29.040835 	167.954712 	Norfolk Island
+NG 	9.081999 	8.675277 	Nigeria
+NI 	12.865416 	-85.207229 	Nicaragua
+NL 	52.132633 	5.291266 	Netherlands
+NO 	60.472024 	8.468946 	Norway
+NP 	28.394857 	84.124008 	Nepal
+NR 	-0.522778 	166.931503 	Nauru
+NU 	-19.054445 	-169.867233 	Niue
+NZ 	-40.900557 	174.885971 	New Zealand
+OM 	21.512583 	55.923255 	Oman
+PA 	8.537981 	-80.782127 	Panama
+PE 	-9.189967 	-75.015152 	Peru
+PF 	-17.679742 	-149.406843 	French Polynesia
+PG 	-6.314993 	143.95555 	Papua New Guinea
+PH 	12.879721 	121.774017 	Philippines
+PK 	30.375321 	69.345116 	Pakistan
+PL 	51.919438 	19.145136 	Poland
+PM 	46.941936 	-56.27111 	Saint Pierre and Miquelon
+PN 	-24.703615 	-127.439308 	Pitcairn Islands
+PR 	18.220833 	-66.590149 	Puerto Rico
+PS 	31.952162 	35.233154 	Palestinian Territories
+PT 	39.399872 	-8.224454 	Portugal
+PW 	7.51498 	134.58252 	Palau
+PY 	-23.442503 	-58.443832 	Paraguay
+QA 	25.354826 	51.183884 	Qatar
+RE 	-21.115141 	55.536384 	Réunion
+RO 	45.943161 	24.96676 	Romania
+RS 	44.016521 	21.005859 	Serbia
+RU 	61.52401 	105.318756 	Russia
+RW 	-1.940278 	29.873888 	Rwanda
+SA 	23.885942 	45.079162 	Saudi Arabia
+SB 	-9.64571 	160.156194 	Solomon Islands
+SC 	-4.679574 	55.491977 	Seychelles
+SD 	12.862807 	30.217636 	Sudan
+SE 	60.128161 	18.643501 	Sweden
+SG 	1.352083 	103.819836 	Singapore
+SH 	-24.143474 	-10.030696 	Saint Helena
+SI 	46.151241 	14.995463 	Slovenia
+SJ 	77.553604 	23.670272 	Svalbard and Jan Mayen
+SK 	48.669026 	19.699024 	Slovakia
+SL 	8.460555 	-11.779889 	Sierra Leone
+SM 	43.94236 	12.457777 	San Marino
+SN 	14.497401 	-14.452362 	Senegal
+SO 	5.152149 	46.199616 	Somalia
+SR 	3.919305 	-56.027783 	Suriname
+ST 	0.18636 	6.613081 	São Tomé and Príncipe
+SV 	13.794185 	-88.89653 	El Salvador
+SY 	34.802075 	38.996815 	Syria
+SZ 	-26.522503 	31.465866 	Swaziland
+TC 	21.694025 	-71.797928 	Turks and Caicos Islands
+TD 	15.454166 	18.732207 	Chad
+TF 	-49.280366 	69.348557 	French Southern Territories
+TG 	8.619543 	0.824782 	Togo
+TH 	15.870032 	100.992541 	Thailand
+TJ 	38.861034 	71.276093 	Tajikistan
+TK 	-8.967363 	-171.855881 	Tokelau
+TL 	-8.874217 	125.727539 	Timor-Leste
+TM 	38.969719 	59.556278 	Turkmenistan
+TN 	33.886917 	9.537499 	Tunisia
+TO 	-21.178986 	-175.198242 	Tonga
+TR 	38.963745 	35.243322 	Turkey
+TT 	10.691803 	-61.222503 	Trinidad and Tobago
+TV 	-7.109535 	177.64933 	Tuvalu
+TW 	23.69781 	120.960515 	Taiwan
+TZ 	-6.369028 	34.888822 	Tanzania
+UA 	48.379433 	31.16558 	Ukraine
+UG 	1.373333 	32.290275 	Uganda
+UM 			U.S. Minor Outlying Islands
+US 	37.09024 	-95.712891 	United States
+UY 	-32.522779 	-55.765835 	Uruguay
+UZ 	41.377491 	64.585262 	Uzbekistan
+VA 	41.902916 	12.453389 	Vatican City
+VC 	12.984305 	-61.287228 	Saint Vincent and the Grenadines
+VE 	6.42375 	-66.58973 	Venezuela
+VG 	18.420695 	-64.639968 	British Virgin Islands
+VI 	18.335765 	-64.896335 	U.S. Virgin Islands
+VN 	14.058324 	108.277199 	Vietnam
+VU 	-15.376706 	166.959158 	Vanuatu
+WF 	-13.768752 	-177.156097 	Wallis and Futuna
+WS 	-13.759029 	-172.104629 	Samoa
+XK 	42.602636 	20.902977 	Kosovo
+YE 	15.552727 	48.516388 	Yemen
+YT 	-12.8275 	45.166244 	Mayotte
+ZA 	-30.559482 	22.937506 	South Africa
+ZM 	-13.133897 	27.849332 	Zambia
+ZW 	-19.015438 	29.154857 	Zimbabwe

src/quicksy/java/eu/siacs/conversations/utils/PhoneNumberUtilWrapper.java 🔗

@@ -22,25 +22,6 @@ public class PhoneNumberUtilWrapper {
         return locale.getDisplayCountry();
     }
 
-    public static String getUserCountry(Context context) {
-        try {
-            final TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
-            final String simCountry = tm.getSimCountryIso();
-            if (simCountry != null && simCountry.length() == 2) { // SIM country code is available
-                return simCountry.toUpperCase(Locale.US);
-            } else if (tm.getPhoneType() != TelephonyManager.PHONE_TYPE_CDMA) { // device is not 3G (would be unreliable)
-                String networkCountry = tm.getNetworkCountryIso();
-                if (networkCountry != null && networkCountry.length() == 2) { // network country code is available
-                    return networkCountry.toUpperCase(Locale.US);
-                }
-            }
-        } catch (Exception e) {
-            // fallthrough
-        }
-        Locale locale = Locale.getDefault();
-        return locale.getCountry();
-    }
-
     public static String toFormattedPhoneNumber(Context context, Jid jid) {
         try {
             return getInstance(context).format(toPhoneNumber(context, jid), PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL);
@@ -54,7 +35,7 @@ public class PhoneNumberUtilWrapper {
     }
 
     public static String normalize(Context context, String input) throws IllegalArgumentException, NumberParseException {
-        final Phonenumber.PhoneNumber number = getInstance(context).parse(input, getUserCountry(context));
+        final Phonenumber.PhoneNumber number = getInstance(context).parse(input, LocationProvider.getUserCountry(context));
         if (!getInstance(context).isValidNumber(number)) {
             throw new IllegalArgumentException("Not a valid phone number");
         }