Fix NPE in CallerInfo.getCurrentCountryIso().

Internal method CallerInfo.getCurrentCountryIso() can throw NPE
if the country detector's detectCountry() method returns null.
Add code to check that the Country is not null before calling
getCountryIso() on it. Change fallback logic to call
locale.getCountry() whenever countryIso was not assigned.

Bug: 10607906
Change-Id: I08fe3f4d942f67c37a2e6ff0b067fe32ad8a6fa5
This commit is contained in:
Jake Hamby
2013-10-08 16:31:16 -07:00
parent c23ee579ac
commit 7f5bee01ec

View File

@@ -20,6 +20,7 @@ import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.drawable.Drawable;
import android.location.Country;
import android.location.CountryDetector;
import android.net.Uri;
import android.provider.ContactsContract.CommonDataKinds.Phone;
@@ -561,17 +562,23 @@ public class CallerInfo {
* is in.
*/
private static String getCurrentCountryIso(Context context, Locale locale) {
String countryIso;
CountryDetector detector = (CountryDetector) context.getSystemService(
Context.COUNTRY_DETECTOR);
if (detector != null) {
countryIso = detector.detectCountry().getCountryIso();
} else {
countryIso = locale.getCountry();
Rlog.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
+ countryIso);
}
return countryIso;
String countryIso = null;
CountryDetector detector = (CountryDetector) context.getSystemService(
Context.COUNTRY_DETECTOR);
if (detector != null) {
Country country = detector.detectCountry();
if (country != null) {
countryIso = country.getCountryIso();
} else {
Rlog.e(TAG, "CountryDetector.detectCountry() returned null.");
}
}
if (countryIso == null) {
countryIso = locale.getCountry();
Rlog.w(TAG, "No CountryDetector; falling back to countryIso based on locale: "
+ countryIso);
}
return countryIso;
}
/**