From 8f27a177b03256439c829850b99fe1d2f1c547a2 Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Tue, 11 Dec 2018 17:25:59 +0100 Subject: [PATCH] try to guess inital location in ShareLocation based on sim card --- .../java/eu/siacs/conversations/Config.java | 1 - .../AttachFileToConversationRunnable.java | 4 +- .../conversations/ui/LocationActivity.java | 1 + .../ui/ShareLocationActivity.java | 3 +- .../ui/ShowLocationActivity.java | 3 +- .../conversations/utils/LocationProvider.java | 69 +++++ src/main/res/raw/countries | 245 ++++++++++++++++++ .../utils/PhoneNumberUtilWrapper.java | 21 +- 8 files changed, 322 insertions(+), 25 deletions(-) create mode 100644 src/main/java/eu/siacs/conversations/utils/LocationProvider.java create mode 100644 src/main/res/raw/countries diff --git a/src/main/java/eu/siacs/conversations/Config.java b/src/main/java/eu/siacs/conversations/Config.java index 6ea05a375..e6593acc7 100644 --- a/src/main/java/eu/siacs/conversations/Config.java +++ b/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 diff --git a/src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java b/src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java index ed4474d9e..506d812dd 100644 --- a/src/main/java/eu/siacs/conversations/services/AttachFileToConversationRunnable.java +++ b/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) { diff --git a/src/main/java/eu/siacs/conversations/ui/LocationActivity.java b/src/main/java/eu/siacs/conversations/ui/LocationActivity.java index 60142e809..0367db8e1 100644 --- a/src/main/java/eu/siacs/conversations/ui/LocationActivity.java +++ b/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 { diff --git a/src/main/java/eu/siacs/conversations/ui/ShareLocationActivity.java b/src/main/java/eu/siacs/conversations/ui/ShareLocationActivity.java index ce5777fa1..136e9d2b2 100644 --- a/src/main/java/eu/siacs/conversations/ui/ShareLocationActivity.java +++ b/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); diff --git a/src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java b/src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java index fe04b8300..b591659c6 100644 --- a/src/main/java/eu/siacs/conversations/ui/ShowLocationActivity.java +++ b/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; diff --git a/src/main/java/eu/siacs/conversations/utils/LocationProvider.java b/src/main/java/eu/siacs/conversations/utils/LocationProvider.java new file mode 100644 index 000000000..afb39a008 --- /dev/null +++ b/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; + } + +} diff --git a/src/main/res/raw/countries b/src/main/res/raw/countries new file mode 100644 index 000000000..c39e60e82 --- /dev/null +++ b/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 diff --git a/src/quicksy/java/eu/siacs/conversations/utils/PhoneNumberUtilWrapper.java b/src/quicksy/java/eu/siacs/conversations/utils/PhoneNumberUtilWrapper.java index c29dcdf8c..599bfdf4b 100644 --- a/src/quicksy/java/eu/siacs/conversations/utils/PhoneNumberUtilWrapper.java +++ b/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"); }