try to guess inital location in ShareLocation based on sim card

This commit is contained in:
Daniel Gultsch 2018-12-11 17:25:59 +01:00
parent ae9bfe1643
commit 8f27a177b0
8 changed files with 322 additions and 25 deletions

View File

@ -173,7 +173,6 @@ public final class Config {
public static final class Map { public static final class Map {
public final static double INITIAL_ZOOM_LEVEL = 4; public final static double INITIAL_ZOOM_LEVEL = 4;
public final static double FINAL_ZOOM_LEVEL = 15; 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_SIZE = 10;
public final static int MY_LOCATION_INDICATOR_OUTLINE_SIZE = 3; public final static int MY_LOCATION_INDICATOR_OUTLINE_SIZE = 3;
public final static long LOCATION_FIX_TIME_DELTA = 1000 * 10; // ms public final static long LOCATION_FIX_TIME_DELTA = 1000 * 10; // ms

View File

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

View File

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

View File

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

View File

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

View File

@ -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;
}
}

245
src/main/res/raw/countries Normal file
View File

@ -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

View File

@ -22,25 +22,6 @@ public class PhoneNumberUtilWrapper {
return locale.getDisplayCountry(); 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) { public static String toFormattedPhoneNumber(Context context, Jid jid) {
try { try {
return getInstance(context).format(toPhoneNumber(context, jid), PhoneNumberUtil.PhoneNumberFormat.INTERNATIONAL); 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 { 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)) { if (!getInstance(context).isValidNumber(number)) {
throw new IllegalArgumentException("Not a valid phone number"); throw new IllegalArgumentException("Not a valid phone number");
} }