/framework/java/jd-gui/android/telephony/PhoneNumberUtils.java

https://bitbucket.org/chameleonos/miui_frameworks · Java · 2128 lines · 2029 code · 95 blank · 4 comment · 640 complexity · f090c4c9a10ac11d45764e2b9e8af74d MD5 · raw file

  1. package android.telephony;
  2. import android.annotation.MiuiHook;
  3. import android.annotation.MiuiHook.MiuiHookType;
  4. import android.content.ContentResolver;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.res.Configuration;
  8. import android.content.res.Resources;
  9. import android.database.Cursor;
  10. import android.location.Country;
  11. import android.location.CountryDetector;
  12. import android.net.Uri;
  13. import android.os.SystemProperties;
  14. import android.text.Editable;
  15. import android.text.SpannableStringBuilder;
  16. import android.text.TextUtils;
  17. import android.util.Log;
  18. import android.util.SparseIntArray;
  19. import com.android.i18n.phonenumbers.NumberParseException;
  20. import com.android.i18n.phonenumbers.PhoneNumberUtil;
  21. import com.android.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberFormat;
  22. import com.android.i18n.phonenumbers.Phonenumber.PhoneNumber;
  23. import com.android.i18n.phonenumbers.ShortNumberUtil;
  24. import java.util.Locale;
  25. import java.util.regex.Matcher;
  26. import java.util.regex.Pattern;
  27. public class PhoneNumberUtils
  28. {
  29. private static final int CCC_LENGTH = 0;
  30. private static final String CLIR_OFF = "#31#";
  31. private static final String CLIR_ON = "*31#";
  32. private static final boolean[] COUNTRY_CALLING_CALL;
  33. private static final boolean DBG = false;
  34. public static final int FORMAT_JAPAN = 2;
  35. public static final int FORMAT_NANP = 1;
  36. public static final int FORMAT_UNKNOWN = 0;
  37. private static final Pattern GLOBAL_PHONE_NUMBER_PATTERN = Pattern.compile("[\\+]?[0-9.-]+");
  38. private static final SparseIntArray KEYPAD_MAP;
  39. static final String LOG_TAG = "PhoneNumberUtils";
  40. static final int MIN_MATCH = 7;
  41. private static final String[] NANP_COUNTRIES;
  42. private static final String NANP_IDP_STRING = "011";
  43. private static final int NANP_LENGTH = 10;
  44. private static final int NANP_STATE_DASH = 4;
  45. private static final int NANP_STATE_DIGIT = 1;
  46. private static final int NANP_STATE_ONE = 3;
  47. private static final int NANP_STATE_PLUS = 2;
  48. public static final char PAUSE = ',';
  49. private static final char PLUS_SIGN_CHAR = '+';
  50. private static final String PLUS_SIGN_STRING = "+";
  51. public static final int TOA_International = 145;
  52. public static final int TOA_Unknown = 129;
  53. public static final char WAIT = ';';
  54. public static final char WILD = 'N';
  55. static
  56. {
  57. String[] arrayOfString = new String[24];
  58. arrayOfString[0] = "US";
  59. arrayOfString[1] = "CA";
  60. arrayOfString[2] = "AS";
  61. arrayOfString[3] = "AI";
  62. arrayOfString[4] = "AG";
  63. arrayOfString[5] = "BS";
  64. arrayOfString[6] = "BB";
  65. arrayOfString[7] = "BM";
  66. arrayOfString[8] = "VG";
  67. arrayOfString[9] = "KY";
  68. arrayOfString[10] = "DM";
  69. arrayOfString[11] = "DO";
  70. arrayOfString[12] = "GD";
  71. arrayOfString[13] = "GU";
  72. arrayOfString[14] = "JM";
  73. arrayOfString[15] = "PR";
  74. arrayOfString[16] = "MS";
  75. arrayOfString[17] = "MP";
  76. arrayOfString[18] = "KN";
  77. arrayOfString[19] = "LC";
  78. arrayOfString[20] = "VC";
  79. arrayOfString[21] = "TT";
  80. arrayOfString[22] = "TC";
  81. arrayOfString[23] = "VI";
  82. NANP_COUNTRIES = arrayOfString;
  83. KEYPAD_MAP = new SparseIntArray();
  84. KEYPAD_MAP.put(97, 50);
  85. KEYPAD_MAP.put(98, 50);
  86. KEYPAD_MAP.put(99, 50);
  87. KEYPAD_MAP.put(65, 50);
  88. KEYPAD_MAP.put(66, 50);
  89. KEYPAD_MAP.put(67, 50);
  90. KEYPAD_MAP.put(100, 51);
  91. KEYPAD_MAP.put(101, 51);
  92. KEYPAD_MAP.put(102, 51);
  93. KEYPAD_MAP.put(68, 51);
  94. KEYPAD_MAP.put(69, 51);
  95. KEYPAD_MAP.put(70, 51);
  96. KEYPAD_MAP.put(103, 52);
  97. KEYPAD_MAP.put(104, 52);
  98. KEYPAD_MAP.put(105, 52);
  99. KEYPAD_MAP.put(71, 52);
  100. KEYPAD_MAP.put(72, 52);
  101. KEYPAD_MAP.put(73, 52);
  102. KEYPAD_MAP.put(106, 53);
  103. KEYPAD_MAP.put(107, 53);
  104. KEYPAD_MAP.put(108, 53);
  105. KEYPAD_MAP.put(74, 53);
  106. KEYPAD_MAP.put(75, 53);
  107. KEYPAD_MAP.put(76, 53);
  108. KEYPAD_MAP.put(109, 54);
  109. KEYPAD_MAP.put(110, 54);
  110. KEYPAD_MAP.put(111, 54);
  111. KEYPAD_MAP.put(77, 54);
  112. KEYPAD_MAP.put(78, 54);
  113. KEYPAD_MAP.put(79, 54);
  114. KEYPAD_MAP.put(112, 55);
  115. KEYPAD_MAP.put(113, 55);
  116. KEYPAD_MAP.put(114, 55);
  117. KEYPAD_MAP.put(115, 55);
  118. KEYPAD_MAP.put(80, 55);
  119. KEYPAD_MAP.put(81, 55);
  120. KEYPAD_MAP.put(82, 55);
  121. KEYPAD_MAP.put(83, 55);
  122. KEYPAD_MAP.put(116, 56);
  123. KEYPAD_MAP.put(117, 56);
  124. KEYPAD_MAP.put(118, 56);
  125. KEYPAD_MAP.put(84, 56);
  126. KEYPAD_MAP.put(85, 56);
  127. KEYPAD_MAP.put(86, 56);
  128. KEYPAD_MAP.put(119, 57);
  129. KEYPAD_MAP.put(120, 57);
  130. KEYPAD_MAP.put(121, 57);
  131. KEYPAD_MAP.put(122, 57);
  132. KEYPAD_MAP.put(87, 57);
  133. KEYPAD_MAP.put(88, 57);
  134. KEYPAD_MAP.put(89, 57);
  135. KEYPAD_MAP.put(90, 57);
  136. boolean[] arrayOfBoolean = new boolean[100];
  137. arrayOfBoolean[0] = 1;
  138. arrayOfBoolean[1] = 1;
  139. arrayOfBoolean[2] = 0;
  140. arrayOfBoolean[3] = 0;
  141. arrayOfBoolean[4] = 0;
  142. arrayOfBoolean[5] = 0;
  143. arrayOfBoolean[6] = 0;
  144. arrayOfBoolean[7] = 1;
  145. arrayOfBoolean[8] = 0;
  146. arrayOfBoolean[9] = 0;
  147. arrayOfBoolean[10] = 0;
  148. arrayOfBoolean[11] = 0;
  149. arrayOfBoolean[12] = 0;
  150. arrayOfBoolean[13] = 0;
  151. arrayOfBoolean[14] = 0;
  152. arrayOfBoolean[15] = 0;
  153. arrayOfBoolean[16] = 0;
  154. arrayOfBoolean[17] = 0;
  155. arrayOfBoolean[18] = 0;
  156. arrayOfBoolean[19] = 0;
  157. arrayOfBoolean[20] = 1;
  158. arrayOfBoolean[21] = 0;
  159. arrayOfBoolean[22] = 0;
  160. arrayOfBoolean[23] = 0;
  161. arrayOfBoolean[24] = 0;
  162. arrayOfBoolean[25] = 0;
  163. arrayOfBoolean[26] = 0;
  164. arrayOfBoolean[27] = 1;
  165. arrayOfBoolean[28] = 1;
  166. arrayOfBoolean[29] = 0;
  167. arrayOfBoolean[30] = 1;
  168. arrayOfBoolean[31] = 1;
  169. arrayOfBoolean[32] = 1;
  170. arrayOfBoolean[33] = 1;
  171. arrayOfBoolean[34] = 1;
  172. arrayOfBoolean[35] = 0;
  173. arrayOfBoolean[36] = 1;
  174. arrayOfBoolean[37] = 0;
  175. arrayOfBoolean[38] = 0;
  176. arrayOfBoolean[39] = 1;
  177. arrayOfBoolean[40] = 1;
  178. arrayOfBoolean[41] = 0;
  179. arrayOfBoolean[42] = 0;
  180. arrayOfBoolean[43] = 1;
  181. arrayOfBoolean[44] = 1;
  182. arrayOfBoolean[45] = 1;
  183. arrayOfBoolean[46] = 1;
  184. arrayOfBoolean[47] = 1;
  185. arrayOfBoolean[48] = 1;
  186. arrayOfBoolean[49] = 1;
  187. arrayOfBoolean[50] = 0;
  188. arrayOfBoolean[51] = 1;
  189. arrayOfBoolean[52] = 1;
  190. arrayOfBoolean[53] = 1;
  191. arrayOfBoolean[54] = 1;
  192. arrayOfBoolean[55] = 1;
  193. arrayOfBoolean[56] = 1;
  194. arrayOfBoolean[57] = 1;
  195. arrayOfBoolean[58] = 1;
  196. arrayOfBoolean[59] = 0;
  197. arrayOfBoolean[60] = 1;
  198. arrayOfBoolean[61] = 1;
  199. arrayOfBoolean[62] = 1;
  200. arrayOfBoolean[63] = 1;
  201. arrayOfBoolean[64] = 1;
  202. arrayOfBoolean[65] = 1;
  203. arrayOfBoolean[66] = 1;
  204. arrayOfBoolean[67] = 0;
  205. arrayOfBoolean[68] = 0;
  206. arrayOfBoolean[69] = 0;
  207. arrayOfBoolean[70] = 0;
  208. arrayOfBoolean[71] = 0;
  209. arrayOfBoolean[72] = 0;
  210. arrayOfBoolean[73] = 0;
  211. arrayOfBoolean[74] = 0;
  212. arrayOfBoolean[75] = 0;
  213. arrayOfBoolean[76] = 0;
  214. arrayOfBoolean[77] = 0;
  215. arrayOfBoolean[78] = 0;
  216. arrayOfBoolean[79] = 0;
  217. arrayOfBoolean[80] = 0;
  218. arrayOfBoolean[81] = 1;
  219. arrayOfBoolean[82] = 1;
  220. arrayOfBoolean[83] = 1;
  221. arrayOfBoolean[84] = 1;
  222. arrayOfBoolean[85] = 0;
  223. arrayOfBoolean[86] = 1;
  224. arrayOfBoolean[87] = 0;
  225. arrayOfBoolean[88] = 0;
  226. arrayOfBoolean[89] = 1;
  227. arrayOfBoolean[90] = 1;
  228. arrayOfBoolean[91] = 1;
  229. arrayOfBoolean[92] = 1;
  230. arrayOfBoolean[93] = 1;
  231. arrayOfBoolean[94] = 1;
  232. arrayOfBoolean[95] = 1;
  233. arrayOfBoolean[96] = 0;
  234. arrayOfBoolean[97] = 0;
  235. arrayOfBoolean[98] = 1;
  236. arrayOfBoolean[99] = 0;
  237. COUNTRY_CALLING_CALL = arrayOfBoolean;
  238. }
  239. private static String appendPwCharBackToOrigDialStr(int paramInt, String paramString1, String paramString2)
  240. {
  241. if (paramInt == 1);
  242. for (String str = paramString1 + paramString2.charAt(0); ; str = paramString1.concat(paramString2.substring(0, paramInt)))
  243. return str;
  244. }
  245. private static char bcdToChar(byte paramByte)
  246. {
  247. char c;
  248. if (paramByte < 10)
  249. c = (char)(paramByte + 48);
  250. while (true)
  251. {
  252. return c;
  253. switch (paramByte)
  254. {
  255. default:
  256. c = '\000';
  257. break;
  258. case 10:
  259. c = '*';
  260. break;
  261. case 11:
  262. c = '#';
  263. break;
  264. case 12:
  265. c = ',';
  266. break;
  267. case 13:
  268. c = 'N';
  269. }
  270. }
  271. }
  272. @MiuiHook(MiuiHook.MiuiHookType.NEW_METHOD)
  273. static int callIndexOfLastNetworkChar(String paramString)
  274. {
  275. return indexOfLastNetworkChar(paramString);
  276. }
  277. public static String calledPartyBCDFragmentToString(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
  278. {
  279. StringBuilder localStringBuilder = new StringBuilder(paramInt2 * 2);
  280. internalCalledPartyBCDFragmentToString(localStringBuilder, paramArrayOfByte, paramInt1, paramInt2);
  281. return localStringBuilder.toString();
  282. }
  283. public static String calledPartyBCDToString(byte[] paramArrayOfByte, int paramInt1, int paramInt2)
  284. {
  285. int i = 0;
  286. StringBuilder localStringBuilder = new StringBuilder(1 + paramInt2 * 2);
  287. if (paramInt2 < 2);
  288. for (String str1 = ""; ; str1 = "")
  289. {
  290. return str1;
  291. if ((0xF0 & paramArrayOfByte[paramInt1]) == 144)
  292. i = 1;
  293. internalCalledPartyBCDFragmentToString(localStringBuilder, paramArrayOfByte, paramInt1 + 1, paramInt2 - 1);
  294. if ((i == 0) || (localStringBuilder.length() != 0))
  295. break;
  296. }
  297. String str2;
  298. Matcher localMatcher1;
  299. if (i != 0)
  300. {
  301. str2 = localStringBuilder.toString();
  302. localMatcher1 = Pattern.compile("(^[#*])(.*)([#*])(.*)(#)$").matcher(str2);
  303. if (!localMatcher1.matches())
  304. break label274;
  305. if (!"".equals(localMatcher1.group(2)))
  306. break label194;
  307. localStringBuilder = new StringBuilder();
  308. localStringBuilder.append(localMatcher1.group(1));
  309. localStringBuilder.append(localMatcher1.group(3));
  310. localStringBuilder.append(localMatcher1.group(4));
  311. localStringBuilder.append(localMatcher1.group(5));
  312. localStringBuilder.append("+");
  313. }
  314. while (true)
  315. {
  316. str1 = localStringBuilder.toString();
  317. break;
  318. label194: localStringBuilder = new StringBuilder();
  319. localStringBuilder.append(localMatcher1.group(1));
  320. localStringBuilder.append(localMatcher1.group(2));
  321. localStringBuilder.append(localMatcher1.group(3));
  322. localStringBuilder.append("+");
  323. localStringBuilder.append(localMatcher1.group(4));
  324. localStringBuilder.append(localMatcher1.group(5));
  325. continue;
  326. label274: Matcher localMatcher2 = Pattern.compile("(^[#*])(.*)([#*])(.*)").matcher(str2);
  327. if (localMatcher2.matches())
  328. {
  329. localStringBuilder = new StringBuilder();
  330. localStringBuilder.append(localMatcher2.group(1));
  331. localStringBuilder.append(localMatcher2.group(2));
  332. localStringBuilder.append(localMatcher2.group(3));
  333. localStringBuilder.append("+");
  334. localStringBuilder.append(localMatcher2.group(4));
  335. }
  336. else
  337. {
  338. localStringBuilder = new StringBuilder();
  339. localStringBuilder.append('+');
  340. localStringBuilder.append(str2);
  341. }
  342. }
  343. }
  344. public static String cdmaCheckAndProcessPlusCode(String paramString)
  345. {
  346. if ((!TextUtils.isEmpty(paramString)) && (isReallyDialable(paramString.charAt(0))) && (isNonSeparator(paramString)))
  347. {
  348. String str1 = SystemProperties.get("gsm.operator.iso-country", "");
  349. String str2 = SystemProperties.get("gsm.sim.operator.iso-country", "");
  350. if ((!TextUtils.isEmpty(str1)) && (!TextUtils.isEmpty(str2)))
  351. paramString = cdmaCheckAndProcessPlusCodeByNumberFormat(paramString, getFormatTypeFromCountryCode(str1), getFormatTypeFromCountryCode(str2));
  352. }
  353. return paramString;
  354. }
  355. public static String cdmaCheckAndProcessPlusCodeByNumberFormat(String paramString, int paramInt1, int paramInt2)
  356. {
  357. Object localObject = paramString;
  358. String str2;
  359. String str3;
  360. int i;
  361. if ((paramString != null) && (paramString.lastIndexOf("+") != -1))
  362. {
  363. if ((paramInt1 != paramInt2) || (paramInt1 != 1))
  364. break label166;
  365. String str1 = paramString;
  366. localObject = null;
  367. str2 = processPlusCodeWithinNanp(extractNetworkPortion(str1));
  368. if (TextUtils.isEmpty(str2))
  369. break label133;
  370. if (localObject != null)
  371. break label123;
  372. localObject = str2;
  373. str3 = extractPostDialPortion(str1);
  374. if (!TextUtils.isEmpty(str3))
  375. {
  376. i = findDialableIndexFromPostDialStr(str3);
  377. if (i < 1)
  378. break label145;
  379. localObject = appendPwCharBackToOrigDialStr(i, (String)localObject, str3);
  380. str1 = str3.substring(i);
  381. }
  382. label103: if ((!TextUtils.isEmpty(str3)) && (!TextUtils.isEmpty(str1)))
  383. break label164;
  384. }
  385. while (true)
  386. {
  387. paramString = (String)localObject;
  388. while (true)
  389. {
  390. return paramString;
  391. label123: localObject = ((String)localObject).concat(str2);
  392. break;
  393. label133: Log.e("checkAndProcessPlusCode: null newDialStr", str2);
  394. }
  395. label145: if (i < 0)
  396. str3 = "";
  397. Log.e("wrong postDialStr=", str3);
  398. break label103;
  399. label164: break;
  400. label166: Log.e("checkAndProcessPlusCode:non-NANP not supported", paramString);
  401. }
  402. }
  403. private static int charToBCD(char paramChar)
  404. {
  405. int i;
  406. if ((paramChar >= '0') && (paramChar <= '9'))
  407. i = paramChar + '\0*0';
  408. while (true)
  409. {
  410. return i;
  411. if (paramChar == '*')
  412. {
  413. i = 10;
  414. }
  415. else if (paramChar == '#')
  416. {
  417. i = 11;
  418. }
  419. else if (paramChar == ',')
  420. {
  421. i = 12;
  422. }
  423. else
  424. {
  425. if (paramChar != 'N')
  426. break;
  427. i = 13;
  428. }
  429. }
  430. throw new RuntimeException("invalid char for BCD " + paramChar);
  431. }
  432. private static boolean checkPrefixIsIgnorable(String paramString, int paramInt1, int paramInt2)
  433. {
  434. boolean bool = false;
  435. int i = 0;
  436. if (paramInt2 >= paramInt1)
  437. if (tryGetISODigit(paramString.charAt(paramInt2)) >= 0)
  438. if (i == 0);
  439. while (true)
  440. {
  441. return bool;
  442. i = 1;
  443. do
  444. {
  445. paramInt2--;
  446. break;
  447. }
  448. while (!isDialable(paramString.charAt(paramInt2)));
  449. continue;
  450. bool = true;
  451. }
  452. }
  453. public static boolean compare(Context paramContext, String paramString1, String paramString2)
  454. {
  455. return compare(paramString1, paramString2, paramContext.getResources().getBoolean(17891356));
  456. }
  457. public static boolean compare(String paramString1, String paramString2)
  458. {
  459. return compare(paramString1, paramString2, false);
  460. }
  461. public static boolean compare(String paramString1, String paramString2, boolean paramBoolean)
  462. {
  463. if (paramBoolean);
  464. for (boolean bool = compareStrictly(paramString1, paramString2); ; bool = compareLoosely(paramString1, paramString2))
  465. return bool;
  466. }
  467. @MiuiHook(MiuiHook.MiuiHookType.CHANGE_CODE)
  468. public static boolean compareLoosely(String paramString1, String paramString2)
  469. {
  470. int i = 0;
  471. int j = 0;
  472. boolean bool;
  473. if ((paramString1 == null) || (paramString2 == null))
  474. if (paramString1 == paramString2)
  475. bool = true;
  476. while (true)
  477. {
  478. return bool;
  479. bool = false;
  480. continue;
  481. if ((paramString1.length() == 0) || (paramString2.length() == 0))
  482. {
  483. bool = false;
  484. }
  485. else
  486. {
  487. int k = indexOfLastNetworkChar(paramString1);
  488. int m = indexOfLastNetworkChar(paramString2);
  489. int n = 0;
  490. while (true)
  491. if ((k >= 0) && (m >= 0))
  492. {
  493. int i2 = 0;
  494. char c1 = paramString1.charAt(k);
  495. if (!isDialable(c1))
  496. {
  497. k--;
  498. i2 = 1;
  499. i++;
  500. }
  501. char c2 = paramString2.charAt(m);
  502. if (!isDialable(c2))
  503. {
  504. m--;
  505. i2 = 1;
  506. j++;
  507. }
  508. if (i2 == 0)
  509. if ((c2 == c1) || (c1 == 'N') || (c2 == 'N'));
  510. }
  511. else
  512. {
  513. if (n >= 7)
  514. break label210;
  515. int i1 = Injector.getEffectiveLength(paramString1) - i;
  516. if ((i1 != Injector.getEffectiveLength(paramString2) - j) || (i1 != n))
  517. break label204;
  518. bool = true;
  519. break;
  520. k--;
  521. m--;
  522. n++;
  523. }
  524. label204: bool = false;
  525. continue;
  526. label210: if ((n >= 7) && ((k < 0) || (m < 0)))
  527. bool = true;
  528. else if ((matchIntlPrefix(paramString1, k + 1)) && (matchIntlPrefix(paramString2, m + 1)))
  529. bool = true;
  530. else if ((matchTrunkPrefix(paramString1, k + 1)) && (matchIntlPrefixAndCC(paramString2, m + 1)))
  531. bool = true;
  532. else if ((matchTrunkPrefix(paramString2, m + 1)) && (matchIntlPrefixAndCC(paramString1, k + 1)))
  533. bool = true;
  534. else
  535. bool = false;
  536. }
  537. }
  538. }
  539. public static boolean compareStrictly(String paramString1, String paramString2)
  540. {
  541. return compareStrictly(paramString1, paramString2, true);
  542. }
  543. public static boolean compareStrictly(String paramString1, String paramString2, boolean paramBoolean)
  544. {
  545. boolean bool;
  546. if ((paramString1 == null) || (paramString2 == null))
  547. if (paramString1 == paramString2)
  548. bool = true;
  549. while (true)
  550. {
  551. return bool;
  552. bool = false;
  553. continue;
  554. if ((paramString1.length() == 0) && (paramString2.length() == 0))
  555. {
  556. bool = false;
  557. }
  558. else
  559. {
  560. int i = 0;
  561. int j = 0;
  562. CountryCallingCodeAndNewIndex localCountryCallingCodeAndNewIndex1 = tryGetCountryCallingCodeAndNewIndex(paramString1, paramBoolean);
  563. CountryCallingCodeAndNewIndex localCountryCallingCodeAndNewIndex2 = tryGetCountryCallingCodeAndNewIndex(paramString2, paramBoolean);
  564. int k = 0;
  565. int m = 1;
  566. int n = 0;
  567. int i1 = 0;
  568. label121: int i4;
  569. int i5;
  570. if ((localCountryCallingCodeAndNewIndex1 != null) && (localCountryCallingCodeAndNewIndex2 != null))
  571. {
  572. if (localCountryCallingCodeAndNewIndex1.countryCallingCode != localCountryCallingCodeAndNewIndex2.countryCallingCode)
  573. {
  574. bool = false;
  575. }
  576. else
  577. {
  578. m = 0;
  579. k = 1;
  580. i = localCountryCallingCodeAndNewIndex1.newIndex;
  581. j = localCountryCallingCodeAndNewIndex2.newIndex;
  582. i4 = -1 + paramString1.length();
  583. i5 = -1 + paramString2.length();
  584. }
  585. }
  586. else
  587. {
  588. while (true)
  589. {
  590. if ((i4 < i) || (i5 < j))
  591. break label313;
  592. int i7 = 0;
  593. char c3 = paramString1.charAt(i4);
  594. char c4 = paramString2.charAt(i5);
  595. if (isSeparator(c3))
  596. {
  597. i4--;
  598. i7 = 1;
  599. }
  600. if (isSeparator(c4))
  601. {
  602. i5--;
  603. i7 = 1;
  604. }
  605. if (i7 == 0)
  606. {
  607. if (c3 != c4)
  608. {
  609. bool = false;
  610. break;
  611. if ((localCountryCallingCodeAndNewIndex1 == null) && (localCountryCallingCodeAndNewIndex2 == null))
  612. {
  613. m = 0;
  614. break label121;
  615. }
  616. if (localCountryCallingCodeAndNewIndex1 != null)
  617. i = localCountryCallingCodeAndNewIndex1.newIndex;
  618. while (true)
  619. {
  620. if (localCountryCallingCodeAndNewIndex2 == null)
  621. break label282;
  622. j = localCountryCallingCodeAndNewIndex2.newIndex;
  623. break;
  624. int i2 = tryGetTrunkPrefixOmittedIndex(paramString2, 0);
  625. if (i2 >= 0)
  626. {
  627. i = i2;
  628. n = 1;
  629. }
  630. }
  631. label282: int i3 = tryGetTrunkPrefixOmittedIndex(paramString2, 0);
  632. if (i3 < 0)
  633. break label121;
  634. j = i3;
  635. i1 = 1;
  636. break label121;
  637. }
  638. i4--;
  639. i5--;
  640. }
  641. }
  642. label313: if (m != 0)
  643. {
  644. if (((n != 0) && (i <= i4)) || (!checkPrefixIsIgnorable(paramString1, i, i4)))
  645. {
  646. if (paramBoolean)
  647. bool = compare(paramString1, paramString2, false);
  648. else
  649. bool = false;
  650. }
  651. else if (((i1 != 0) && (j <= i5)) || (!checkPrefixIsIgnorable(paramString2, i, i5)))
  652. {
  653. if (paramBoolean)
  654. {
  655. bool = compare(paramString1, paramString2, false);
  656. continue;
  657. }
  658. bool = false;
  659. }
  660. }
  661. else
  662. {
  663. int i6;
  664. if (k == 0)
  665. i6 = 1;
  666. while (true)
  667. if (i4 >= i)
  668. {
  669. char c2 = paramString1.charAt(i4);
  670. if (isDialable(c2))
  671. {
  672. if ((i6 != 0) && (tryGetISODigit(c2) == 1))
  673. i6 = 0;
  674. }
  675. else
  676. {
  677. i4--;
  678. continue;
  679. i6 = 0;
  680. continue;
  681. }
  682. bool = false;
  683. break;
  684. }
  685. while (true)
  686. if (i5 >= j)
  687. {
  688. char c1 = paramString2.charAt(i5);
  689. if (isDialable(c1))
  690. {
  691. if ((i6 != 0) && (tryGetISODigit(c1) == 1))
  692. i6 = 0;
  693. }
  694. else
  695. {
  696. i5--;
  697. continue;
  698. }
  699. bool = false;
  700. break;
  701. }
  702. bool = true;
  703. }
  704. }
  705. }
  706. }
  707. }
  708. public static String convertAndStrip(String paramString)
  709. {
  710. return stripSeparators(convertKeypadLettersToDigits(paramString));
  711. }
  712. public static String convertKeypadLettersToDigits(String paramString)
  713. {
  714. if (paramString == null);
  715. while (true)
  716. {
  717. return paramString;
  718. int i = paramString.length();
  719. if (i != 0)
  720. {
  721. char[] arrayOfChar = paramString.toCharArray();
  722. for (int j = 0; j < i; j++)
  723. {
  724. int k = arrayOfChar[j];
  725. arrayOfChar[j] = ((char)KEYPAD_MAP.get(k, k));
  726. }
  727. paramString = new String(arrayOfChar);
  728. }
  729. }
  730. }
  731. public static String convertPreDial(String paramString)
  732. {
  733. if (paramString == null);
  734. StringBuilder localStringBuilder;
  735. for (String str = null; ; str = localStringBuilder.toString())
  736. {
  737. return str;
  738. int i = paramString.length();
  739. localStringBuilder = new StringBuilder(i);
  740. int j = 0;
  741. if (j < i)
  742. {
  743. char c = paramString.charAt(j);
  744. if (isPause(c))
  745. c = ',';
  746. while (true)
  747. {
  748. localStringBuilder.append(c);
  749. j++;
  750. break;
  751. if (isToneWait(c))
  752. c = ';';
  753. }
  754. }
  755. }
  756. }
  757. public static String extractNetworkPortion(String paramString)
  758. {
  759. if (paramString == null);
  760. StringBuilder localStringBuilder;
  761. for (String str1 = null; ; str1 = localStringBuilder.toString())
  762. {
  763. return str1;
  764. int i = paramString.length();
  765. localStringBuilder = new StringBuilder(i);
  766. int j = 0;
  767. if (j < i)
  768. {
  769. char c = paramString.charAt(j);
  770. int k = Character.digit(c, 10);
  771. if (k != -1)
  772. localStringBuilder.append(k);
  773. label136:
  774. do
  775. while (true)
  776. {
  777. j++;
  778. break;
  779. if (c == '+')
  780. {
  781. String str2 = localStringBuilder.toString();
  782. if ((str2.length() == 0) || (str2.equals("*31#")) || (str2.equals("#31#")))
  783. localStringBuilder.append(c);
  784. }
  785. else
  786. {
  787. if (!isDialable(c))
  788. break label136;
  789. localStringBuilder.append(c);
  790. }
  791. }
  792. while (!isStartsPostDial(c));
  793. }
  794. }
  795. }
  796. public static String extractNetworkPortionAlt(String paramString)
  797. {
  798. if (paramString == null);
  799. StringBuilder localStringBuilder;
  800. for (String str = null; ; str = localStringBuilder.toString())
  801. {
  802. return str;
  803. int i = paramString.length();
  804. localStringBuilder = new StringBuilder(i);
  805. int j = 0;
  806. int k = 0;
  807. if (k < i)
  808. {
  809. char c = paramString.charAt(k);
  810. if (c == '+')
  811. if (j == 0);
  812. label80:
  813. do
  814. while (true)
  815. {
  816. k++;
  817. break;
  818. j = 1;
  819. if (!isDialable(c))
  820. break label80;
  821. localStringBuilder.append(c);
  822. }
  823. while (!isStartsPostDial(c));
  824. }
  825. }
  826. }
  827. public static String extractPostDialPortion(String paramString)
  828. {
  829. if (paramString == null);
  830. StringBuilder localStringBuilder;
  831. for (String str = null; ; str = localStringBuilder.toString())
  832. {
  833. return str;
  834. localStringBuilder = new StringBuilder();
  835. int i = 1 + indexOfLastNetworkChar(paramString);
  836. int j = paramString.length();
  837. while (i < j)
  838. {
  839. char c = paramString.charAt(i);
  840. if (isNonSeparator(c))
  841. localStringBuilder.append(c);
  842. i++;
  843. }
  844. }
  845. }
  846. private static int findDialableIndexFromPostDialStr(String paramString)
  847. {
  848. int i = 0;
  849. if (i < paramString.length())
  850. if (!isReallyDialable(paramString.charAt(i)));
  851. while (true)
  852. {
  853. return i;
  854. i++;
  855. break;
  856. i = -1;
  857. }
  858. }
  859. public static void formatJapaneseNumber(Editable paramEditable)
  860. {
  861. JapanesePhoneNumberFormatter.format(paramEditable);
  862. }
  863. public static void formatNanpNumber(Editable paramEditable)
  864. {
  865. int i = paramEditable.length();
  866. if (i > "+1-nnn-nnn-nnnn".length());
  867. int[] arrayOfInt;
  868. int k;
  869. int m;
  870. int n;
  871. int i1;
  872. label148: int i6;
  873. while (true)
  874. {
  875. return;
  876. if (i > 5)
  877. {
  878. CharSequence localCharSequence = paramEditable.subSequence(0, i);
  879. removeDashes(paramEditable);
  880. int j = paramEditable.length();
  881. arrayOfInt = new int[3];
  882. k = 1;
  883. m = 0;
  884. n = 0;
  885. for (i1 = 0; ; i1 = i6)
  886. {
  887. if (n >= j)
  888. break label296;
  889. switch (paramEditable.charAt(n))
  890. {
  891. case ',':
  892. case '.':
  893. case '/':
  894. default:
  895. paramEditable.replace(0, j, localCharSequence);
  896. break;
  897. case '1':
  898. if ((m != 0) && (k != 2))
  899. break label189;
  900. k = 3;
  901. i6 = i1;
  902. label179: n++;
  903. case '0':
  904. case '2':
  905. case '3':
  906. case '4':
  907. case '5':
  908. case '6':
  909. case '7':
  910. case '8':
  911. case '9':
  912. case '-':
  913. case '+':
  914. }
  915. }
  916. label189: if (k != 2)
  917. break;
  918. paramEditable.replace(0, j, localCharSequence);
  919. }
  920. }
  921. if (k == 3)
  922. {
  923. i6 = i1 + 1;
  924. arrayOfInt[i1] = n;
  925. }
  926. while (true)
  927. {
  928. k = 1;
  929. m++;
  930. break label179;
  931. if ((k != 4) && ((m == 3) || (m == 6)))
  932. {
  933. i6 = i1 + 1;
  934. arrayOfInt[i1] = n;
  935. continue;
  936. k = 4;
  937. i6 = i1;
  938. break label179;
  939. if (n != 0)
  940. break label148;
  941. k = 2;
  942. i6 = i1;
  943. break label179;
  944. label296: if (m == 7);
  945. for (int i2 = i1 - 1; ; i2 = i1)
  946. {
  947. for (int i3 = 0; i3 < i2; i3++)
  948. {
  949. int i5 = arrayOfInt[i3];
  950. paramEditable.replace(i5 + i3, i5 + i3, "-");
  951. }
  952. for (int i4 = paramEditable.length(); (i4 > 0) && (paramEditable.charAt(i4 - 1) == '-'); i4--)
  953. paramEditable.delete(i4 - 1, i4);
  954. break;
  955. }
  956. }
  957. i6 = i1;
  958. }
  959. }
  960. public static String formatNumber(String paramString)
  961. {
  962. SpannableStringBuilder localSpannableStringBuilder = new SpannableStringBuilder(paramString);
  963. formatNumber(localSpannableStringBuilder, getFormatTypeForLocale(Locale.getDefault()));
  964. return localSpannableStringBuilder.toString();
  965. }
  966. public static String formatNumber(String paramString, int paramInt)
  967. {
  968. SpannableStringBuilder localSpannableStringBuilder = new SpannableStringBuilder(paramString);
  969. formatNumber(localSpannableStringBuilder, paramInt);
  970. return localSpannableStringBuilder.toString();
  971. }
  972. public static String formatNumber(String paramString1, String paramString2)
  973. {
  974. Object localObject;
  975. if ((paramString1.startsWith("#")) || (paramString1.startsWith("*")))
  976. localObject = paramString1;
  977. while (true)
  978. {
  979. return localObject;
  980. PhoneNumberUtil localPhoneNumberUtil = PhoneNumberUtil.getInstance();
  981. localObject = null;
  982. try
  983. {
  984. String str = localPhoneNumberUtil.formatInOriginalFormat(localPhoneNumberUtil.parseAndKeepRawInput(paramString1, paramString2), paramString2);
  985. localObject = str;
  986. }
  987. catch (NumberParseException localNumberParseException)
  988. {
  989. }
  990. }
  991. }
  992. @MiuiHook(MiuiHook.MiuiHookType.CHANGE_CODE)
  993. public static String formatNumber(String paramString1, String paramString2, String paramString3)
  994. {
  995. Object localObject1 = miui.telephony.PhoneNumberUtils.removeDashesAndBlanks(paramString1);
  996. int i = ((String)localObject1).length();
  997. int j = 0;
  998. if (j < i)
  999. if (isDialable(((String)localObject1).charAt(j)));
  1000. while (true)
  1001. {
  1002. return localObject1;
  1003. j++;
  1004. break;
  1005. PhoneNumberUtil localPhoneNumberUtil = PhoneNumberUtil.getInstance();
  1006. if ((paramString2 != null) && (paramString2.length() >= 2) && (paramString2.charAt(0) == '+'));
  1007. try
  1008. {
  1009. String str = localPhoneNumberUtil.getRegionCodeForNumber(localPhoneNumberUtil.parse(paramString2, "ZZ"));
  1010. if (!TextUtils.isEmpty(str))
  1011. {
  1012. int k = normalizeNumber((String)localObject1).indexOf(paramString2.substring(1));
  1013. if (k <= 0)
  1014. paramString3 = str;
  1015. }
  1016. label114: Object localObject2 = formatNumber((String)localObject1, paramString3);
  1017. if (localObject2 != null);
  1018. while (true)
  1019. {
  1020. localObject1 = localObject2;
  1021. break;
  1022. localObject2 = localObject1;
  1023. }
  1024. }
  1025. catch (NumberParseException localNumberParseException)
  1026. {
  1027. break label114;
  1028. }
  1029. }
  1030. }
  1031. public static void formatNumber(Editable paramEditable, int paramInt)
  1032. {
  1033. int i = paramInt;
  1034. if ((paramEditable.length() > 2) && (paramEditable.charAt(0) == '+'))
  1035. {
  1036. if (paramEditable.charAt(1) == '1')
  1037. i = 1;
  1038. }
  1039. else
  1040. switch (i)
  1041. {
  1042. default:
  1043. case 1:
  1044. case 2:
  1045. case 0:
  1046. }
  1047. while (true)
  1048. {
  1049. return;
  1050. if ((paramEditable.length() >= 3) && (paramEditable.charAt(1) == '8') && (paramEditable.charAt(2) == '1'))
  1051. {
  1052. i = 2;
  1053. break;
  1054. }
  1055. i = 0;
  1056. break;
  1057. formatNanpNumber(paramEditable);
  1058. continue;
  1059. formatJapaneseNumber(paramEditable);
  1060. continue;
  1061. removeDashes(paramEditable);
  1062. }
  1063. }
  1064. public static String formatNumberToE164(String paramString1, String paramString2)
  1065. {
  1066. PhoneNumberUtil localPhoneNumberUtil = PhoneNumberUtil.getInstance();
  1067. Object localObject = null;
  1068. try
  1069. {
  1070. Phonenumber.PhoneNumber localPhoneNumber = localPhoneNumberUtil.parse(paramString1, paramString2);
  1071. if (localPhoneNumberUtil.isValidNumber(localPhoneNumber))
  1072. {
  1073. String str = localPhoneNumberUtil.format(localPhoneNumber, PhoneNumberUtil.PhoneNumberFormat.E164);
  1074. localObject = str;
  1075. }
  1076. label37: return localObject;
  1077. }
  1078. catch (NumberParseException localNumberParseException)
  1079. {
  1080. break label37;
  1081. }
  1082. }
  1083. private static String getDefaultIdp()
  1084. {
  1085. String str = null;
  1086. SystemProperties.get("ro.cdma.idpstring", null);
  1087. if (TextUtils.isEmpty(null))
  1088. str = "011";
  1089. return str;
  1090. }
  1091. public static int getFormatTypeForLocale(Locale paramLocale)
  1092. {
  1093. return getFormatTypeFromCountryCode(paramLocale.getCountry());
  1094. }
  1095. private static int getFormatTypeFromCountryCode(String paramString)
  1096. {
  1097. int i = NANP_COUNTRIES.length;
  1098. int j = 0;
  1099. int k;
  1100. if (j < i)
  1101. if (NANP_COUNTRIES[j].compareToIgnoreCase(paramString) == 0)
  1102. k = 1;
  1103. while (true)
  1104. {
  1105. return k;
  1106. j++;
  1107. break;
  1108. if ("jp".compareToIgnoreCase(paramString) == 0)
  1109. k = 2;
  1110. else
  1111. k = 0;
  1112. }
  1113. }
  1114. public static String getNumberFromIntent(Intent paramIntent, Context paramContext)
  1115. {
  1116. Object localObject1 = null;
  1117. Object localObject2 = null;
  1118. Uri localUri = paramIntent.getData();
  1119. String str1 = localUri.getScheme();
  1120. if ((str1.equals("tel")) || (str1.equals("sip")))
  1121. localObject1 = localUri.getSchemeSpecificPart();
  1122. while (true)
  1123. {
  1124. return localObject1;
  1125. if (str1.equals("voicemail"))
  1126. {
  1127. localObject1 = TelephonyManager.getDefault().getCompleteVoiceMailNumber();
  1128. continue;
  1129. }
  1130. if (paramContext == null)
  1131. continue;
  1132. paramIntent.resolveType(paramContext);
  1133. String str2 = null;
  1134. String str3 = localUri.getAuthority();
  1135. label104: Cursor localCursor;
  1136. if ("contacts".equals(str3))
  1137. {
  1138. str2 = "number";
  1139. ContentResolver localContentResolver = paramContext.getContentResolver();
  1140. String[] arrayOfString = new String[1];
  1141. arrayOfString[0] = str2;
  1142. localCursor = localContentResolver.query(localUri, arrayOfString, null, null, null);
  1143. if (localCursor == null);
  1144. }
  1145. try
  1146. {
  1147. if (localCursor.moveToFirst())
  1148. {
  1149. String str4 = localCursor.getString(localCursor.getColumnIndex(str2));
  1150. localObject2 = str4;
  1151. }
  1152. localCursor.close();
  1153. localObject1 = localObject2;
  1154. continue;
  1155. if (!"com.android.contacts".equals(str3))
  1156. break label104;
  1157. str2 = "data1";
  1158. }
  1159. finally
  1160. {
  1161. localCursor.close();
  1162. }
  1163. }
  1164. }
  1165. public static String getStrippedReversed(String paramString)
  1166. {
  1167. String str1 = extractNetworkPortionAlt(paramString);
  1168. if (str1 == null);
  1169. for (String str2 = null; ; str2 = internalGetStrippedReversed(str1, str1.length()))
  1170. return str2;
  1171. }
  1172. public static String getUsernameFromUriNumber(String paramString)
  1173. {
  1174. int i = paramString.indexOf('@');
  1175. if (i < 0)
  1176. i = paramString.indexOf("%40");
  1177. if (i < 0)
  1178. {
  1179. Log.w("PhoneNumberUtils", "getUsernameFromUriNumber: no delimiter found in SIP addr '" + paramString + "'");
  1180. i = paramString.length();
  1181. }
  1182. return paramString.substring(0, i);
  1183. }
  1184. private static int indexOfLastNetworkChar(String paramString)
  1185. {
  1186. int i = paramString.length();
  1187. int j = minPositive(paramString.indexOf(','), paramString.indexOf(';'));
  1188. if (j < 0);
  1189. for (int k = i - 1; ; k = j - 1)
  1190. return k;
  1191. }
  1192. private static void internalCalledPartyBCDFragmentToString(StringBuilder paramStringBuilder, byte[] paramArrayOfByte, int paramInt1, int paramInt2)
  1193. {
  1194. for (int i = paramInt1; ; i++)
  1195. {
  1196. char c1;
  1197. if (i < paramInt2 + paramInt1)
  1198. {
  1199. c1 = bcdToChar((byte)(0xF & paramArrayOfByte[i]));
  1200. if (c1 != 0)
  1201. break label30;
  1202. }
  1203. label30: char c2;
  1204. do
  1205. {
  1206. byte b;
  1207. do
  1208. {
  1209. return;
  1210. paramStringBuilder.append(c1);
  1211. b = (byte)(0xF & paramArrayOfByte[i] >> 4);
  1212. }
  1213. while ((b == 15) && (i + 1 == paramInt2 + paramInt1));
  1214. c2 = bcdToChar(b);
  1215. }
  1216. while (c2 == 0);
  1217. paramStringBuilder.append(c2);
  1218. }
  1219. }
  1220. private static String internalGetStrippedReversed(String paramString, int paramInt)
  1221. {
  1222. if (paramString == null);
  1223. StringBuilder localStringBuilder;
  1224. for (String str = null; ; str = localStringBuilder.toString())
  1225. {
  1226. return str;
  1227. localStringBuilder = new StringBuilder(paramInt);
  1228. int i = paramString.length();
  1229. for (int j = i - 1; (j >= 0) && (i - j <= paramInt); j--)
  1230. localStringBuilder.append(paramString.charAt(j));
  1231. }
  1232. }
  1233. public static final boolean is12Key(char paramChar)
  1234. {
  1235. if (((paramChar >= '0') && (paramChar <= '9')) || (paramChar == '*') || (paramChar == '#'));
  1236. for (boolean bool = true; ; bool = false)
  1237. return bool;
  1238. }
  1239. private static boolean isCountryCallingCode(int paramInt)
  1240. {
  1241. if ((paramInt > 0) && (paramInt < CCC_LENGTH) && (COUNTRY_CALLING_CALL[paramInt] != 0));
  1242. for (boolean bool = true; ; bool = false)
  1243. return bool;
  1244. }
  1245. public static final boolean isDialable(char paramChar)
  1246. {
  1247. if (((paramChar >= '0') && (paramChar <= '9')) || (paramChar == '*') || (paramChar == '#') || (paramChar == '+') || (paramChar == 'N'));
  1248. for (boolean bool = true; ; bool = false)
  1249. return bool;
  1250. }
  1251. private static boolean isDialable(String paramString)
  1252. {
  1253. int i = 0;
  1254. int j = paramString.length();
  1255. if (i < j)
  1256. if (isDialable(paramString.charAt(i)));
  1257. for (boolean bool = false; ; bool = true)
  1258. {
  1259. return bool;
  1260. i++;
  1261. break;
  1262. }
  1263. }
  1264. public static boolean isEmergencyNumber(String paramString)
  1265. {
  1266. return isEmergencyNumberInternal(paramString, true);
  1267. }
  1268. public static boolean isEmergencyNumber(String paramString1, String paramString2)
  1269. {
  1270. return isEmergencyNumberInternal(paramString1, paramString2, true);
  1271. }
  1272. @MiuiHook(MiuiHook.MiuiHookType.CHANGE_CODE)
  1273. private static boolean isEmergencyNumberInternal(String paramString1, String paramString2, boolean paramBoolean)
  1274. {
  1275. boolean bool = false;
  1276. if (paramString1 == null);
  1277. while (true)
  1278. {
  1279. return bool;
  1280. if (!isUriNumber(paramString1))
  1281. {
  1282. String str1 = miui.telephony.PhoneNumberUtils.parseNumber(extractNetworkPortionAlt(paramString1));
  1283. if (miui.telephony.PhoneNumberUtils.isMiuiEmergencyNumber(str1, paramBoolean))
  1284. {
  1285. bool = true;
  1286. }
  1287. else
  1288. {
  1289. String str2 = SystemProperties.get("ril.ecclist");
  1290. if (TextUtils.isEmpty(str2))
  1291. str2 = SystemProperties.get("ro.ril.ecclist");
  1292. if (!TextUtils.isEmpty(str2))
  1293. {
  1294. String[] arrayOfString = str2.split(",");
  1295. int i = arrayOfString.length;
  1296. for (int j = 0; ; j++)
  1297. {
  1298. if (j >= i)
  1299. break label150;
  1300. String str3 = arrayOfString[j];
  1301. if ((paramBoolean) || ("BR".equalsIgnoreCase(paramString2)))
  1302. {
  1303. if (!str1.equals(str3))
  1304. continue;
  1305. bool = true;
  1306. break;
  1307. }
  1308. if (str1.startsWith(str3))
  1309. {
  1310. bool = true;
  1311. break;
  1312. }
  1313. }
  1314. }
  1315. else
  1316. {
  1317. label150: Log.d("PhoneNumberUtils", "System property doesn't provide any emergency numbers. Use embedded logic for determining ones.");
  1318. if (paramString2 != null)
  1319. {
  1320. ShortNumberUtil localShortNumberUtil = new ShortNumberUtil();
  1321. if (paramBoolean)
  1322. bool = localShortNumberUtil.isEmergencyNumber(str1, paramString2);
  1323. else
  1324. bool = localShortNumberUtil.connectsToEmergencyNumber(str1, paramString2);
  1325. }
  1326. else if (paramBoolean)
  1327. {
  1328. if ((str1.equals("112")) || (str1.equals("911")))
  1329. bool = true;
  1330. }
  1331. else if ((str1.startsWith("112")) || (str1.startsWith("911")))
  1332. {
  1333. bool = true;
  1334. }
  1335. }
  1336. }
  1337. }
  1338. }
  1339. }
  1340. private static boolean isEmergencyNumberInternal(String paramString, boolean paramBoolean)
  1341. {
  1342. return isEmergencyNumberInternal(paramString, null, paramBoolean);
  1343. }
  1344. public static boolean isGlobalPhoneNumber(String paramString)
  1345. {
  1346. if (TextUtils.isEmpty(paramString));
  1347. for (boolean bool = false; ; bool = GLOBAL_PHONE_NUMBER_PATTERN.matcher(paramString).matches())
  1348. return bool;
  1349. }
  1350. public static boolean isISODigit(char paramChar)
  1351. {
  1352. if ((paramChar >= '0') && (paramChar <= '9'));
  1353. for (boolean bool = true; ; bool = false)
  1354. return bool;
  1355. }
  1356. public static boolean isLocalEmergencyNumber(String paramString, Context paramContext)
  1357. {
  1358. return isLocalEmergencyNumberInternal(paramString, paramContext, true);
  1359. }
  1360. private static boolean isLocalEmergencyNumberInternal(String paramString, Context paramContext, boolean paramBoolean)
  1361. {
  1362. CountryDetector localCountryDetector = (CountryDetector)paramContext.getSystemService("country_detector");
  1363. String str;
  1364. if (localCountryDetector != null)
  1365. str = localCountryDetector.detectCountry().getCountryIso();
  1366. while (true)
  1367. {
  1368. return isEmergencyNumberInternal(paramString, str, paramBoolean);
  1369. str = paramContext.getResources().getConfiguration().locale.getCountry();
  1370. Log.w("PhoneNumberUtils", "No CountryDetector; falling back to countryIso based on locale: " + str);
  1371. }
  1372. }
  1373. private static boolean isNanp(String paramString)
  1374. {
  1375. boolean bool = false;
  1376. int i;
  1377. if (paramString != null)
  1378. if ((paramString.length() == 10) && (isTwoToNine(paramString.charAt(0))) && (isTwoToNine(paramString.charAt(3))))
  1379. {
  1380. bool = true;
  1381. i = 1;
  1382. if (i < 10)
  1383. {
  1384. if (isISODigit(paramString.charAt(i)))
  1385. break label62;
  1386. bool = false;
  1387. }
  1388. }
  1389. while (true)
  1390. {
  1391. return bool;
  1392. label62: i++;
  1393. break;
  1394. Log.e("isNanp: null dialStr passed in", paramString);
  1395. }
  1396. }
  1397. public static final boolean isNonSeparator(char paramChar)
  1398. {
  1399. if (((paramChar >= '0') && (paramChar <= '9')) || (paramChar == '*') || (paramChar == '#') || (paramChar == '+') || (paramChar == 'N') || (paramChar == ';') || (paramChar == ','));
  1400. for (boolean bool = true; ; bool = false)
  1401. return bool;
  1402. }
  1403. private static boolean isNonSeparator(String paramString)
  1404. {
  1405. int i = 0;
  1406. int j = paramString.length();
  1407. if (i < j)
  1408. if (isNonSeparator(paramString.charAt(i)));
  1409. for (boolean bool = false; ; bool = true)
  1410. {
  1411. return bool;
  1412. i++;
  1413. break;
  1414. }
  1415. }
  1416. private static boolean isOneNanp(String paramString)
  1417. {
  1418. boolean bool = false;
  1419. if (paramString != null)
  1420. {
  1421. String str = paramString.substring(1);
  1422. if ((paramString.charAt(0) == '1') && (isNanp(str)))
  1423. bool = true;
  1424. }
  1425. while (true)
  1426. {
  1427. return bool;
  1428. Log.e("isOneNanp: null dialStr passed in", paramString);
  1429. }
  1430. }
  1431. private static boolean isPause(char paramChar)
  1432. {
  1433. if ((paramChar == 'p') || (paramChar == 'P'));
  1434. for (boolean bool = true; ; bool = false)
  1435. return bool;
  1436. }
  1437. public static boolean isPotentialEmergencyNumber(String paramString)
  1438. {
  1439. return isEmergencyNumberInternal(paramString, false);
  1440. }
  1441. public static boolean isPotentialEmergencyNumber(String paramString1, String paramString2)
  1442. {
  1443. return isEmergencyNumberInternal(paramString1, paramString2, false);
  1444. }
  1445. public static boolean isPotentialLocalEmergencyNumber(String paramString, Context paramContext)
  1446. {
  1447. return isLocalEmergencyNumberInternal(paramString, paramContext, false);
  1448. }
  1449. public static final boolean isReallyDialable(char paramChar)
  1450. {
  1451. if (((paramChar >= '0') && (paramChar <= '9')) || (paramChar == '*') || (paramChar == '#') || (paramChar == '+'));
  1452. for (boolean bool = true; ; bool = false)
  1453. return bool;
  1454. }
  1455. private static boolean isSeparator(char paramChar)
  1456. {
  1457. if ((!isDialable(paramChar)) && (('a' > paramChar) || (paramChar > 'z')) && (('A' > paramChar) || (paramChar > 'Z')));
  1458. for (boolean bool = true; ; bool = false)
  1459. return bool;
  1460. }
  1461. public static final boolean isStartsPostDial(char paramChar)
  1462. {
  1463. if ((paramChar == ',') || (paramChar == ';'));
  1464. for (boolean bool = true; ; bool = false)
  1465. return bool;
  1466. }
  1467. private static boolean isToneWait(char paramChar)
  1468. {
  1469. if ((paramChar == 'w') || (paramChar == 'W'));
  1470. for (boolean bool = true; ; bool = false)
  1471. return bool;
  1472. }
  1473. private static boolean isTwoToNine(char paramChar)
  1474. {
  1475. if ((paramChar >= '2') && (paramChar <= '9'));
  1476. for (boolean bool = true; ; bool = false)
  1477. return bool;
  1478. }
  1479. public static boolean isUriNumber(String paramString)
  1480. {
  1481. if ((paramString != null) && ((paramString.contains("@")) || (paramString.contains("%40"))));
  1482. for (boolean bool = true; ; bool = false)
  1483. return bool;
  1484. }
  1485. public static boolean isVoiceMailNumber(String paramString)
  1486. {
  1487. boolean bool = false;
  1488. try
  1489. {
  1490. String str1 = TelephonyManager.getDefault().getVoiceMailNumber();
  1491. String str2 = extractNetworkPortionAlt(paramString);
  1492. if ((!TextUtils.isEmpty(str2)) && (compare(str2, str1)))
  1493. bool = true;
  1494. label34: return bool;
  1495. }
  1496. catch (SecurityException localSecurityException)
  1497. {
  1498. break label34;
  1499. }
  1500. }
  1501. public static boolean isWellFormedSmsAddress(String paramString)
  1502. {
  1503. String str = extractNetworkPortion(paramString);
  1504. if ((!str.equals("+")) && (!TextUtils.isEmpty(str)) && (isDialable(str)));
  1505. for (boolean bool = true; ; bool = false)
  1506. return bool;
  1507. }
  1508. private static void log(String paramString)
  1509. {
  1510. Log.d("PhoneNumberUtils", paramString);
  1511. }
  1512. private static boolean matchIntlPrefix(String paramString, int paramInt)
  1513. {
  1514. boolean bool = false;
  1515. int i = 0;
  1516. int j = 0;
  1517. char c;
  1518. if (j < paramInt)
  1519. {
  1520. c = paramString.charAt(j);
  1521. switch (i)
  1522. {
  1523. case 1:
  1524. case 3:
  1525. default:
  1526. if (!isNonSeparator(c))
  1527. break;
  1528. case 0:
  1529. case 2:
  1530. case 4:
  1531. }
  1532. }
  1533. while (true)
  1534. {
  1535. label64: return bool;
  1536. if (c == '+')
  1537. i = 1;
  1538. label151:
  1539. do
  1540. while (true)
  1541. {
  1542. j++;
  1543. break;
  1544. if (c == '0')
  1545. {
  1546. i = 2;
  1547. }
  1548. else if (isNonSeparator(c))
  1549. {
  1550. break label64;
  1551. if (c == '0')
  1552. {
  1553. i = 3;
  1554. }
  1555. else if (c == '1')
  1556. {
  1557. i = 4;
  1558. }
  1559. else if (isNonSeparator(c))
  1560. {
  1561. break label64;
  1562. if (c != '1')
  1563. break label151;
  1564. i = 5;
  1565. }
  1566. }
  1567. }
  1568. while (!isNonSeparator(c));
  1569. continue;
  1570. if ((i == 1) || (i == 3) || (i == 5))
  1571. bool = true;
  1572. }
  1573. }
  1574. private static boolean matchIntlPrefixAndCC(String paramString, int paramInt)
  1575. {
  1576. boolean bool = false;
  1577. int i = 0;
  1578. int j = 0;
  1579. char c;
  1580. if (j < paramInt)
  1581. {
  1582. c = paramString.charAt(j);
  1583. switch (i)
  1584. {
  1585. default:
  1586. if (!isNonSeparator(c))
  1587. break;
  1588. case 0:
  1589. case 2:
  1590. case 4:
  1591. case 1:
  1592. case 3:
  1593. case 5:
  1594. case 6:
  1595. case 7:
  1596. }
  1597. }
  1598. while (true)
  1599. {
  1600. label76: return bool;
  1601. if (c == '+')
  1602. i = 1;
  1603. label213:
  1604. do
  1605. while (true)
  1606. {
  1607. j++;
  1608. break;
  1609. if (c == '0')
  1610. {
  1611. i = 2;
  1612. }
  1613. else if (isNonSeparator(c))
  1614. {
  1615. break label76;
  1616. if (c == '0')
  1617. {
  1618. i = 3;
  1619. }
  1620. else if (c == '1')
  1621. {
  1622. i = 4;
  1623. }
  1624. else if (isNonSeparator(c))
  1625. {
  1626. break label76;
  1627. if (c == '1')
  1628. {
  1629. i = 5;
  1630. }
  1631. else if (isNonSeparator(c))
  1632. {
  1633. break label76;
  1634. if (isISODigit(c))
  1635. {
  1636. i = 6;
  1637. }
  1638. else if (isNonSeparator(c))
  1639. {
  1640. break label76;
  1641. if (!isISODigit(c))
  1642. break label213;
  1643. i++;
  1644. }
  1645. }
  1646. }
  1647. }
  1648. }
  1649. while (!isNonSeparator(c));
  1650. continue;
  1651. if ((i == 6) || (i == 7) || (i == 8))
  1652. bool = true;
  1653. }
  1654. }
  1655. private static boolean matchTrunkPrefix(String paramString, int paramInt)
  1656. {
  1657. boolean bool = false;
  1658. int i = 0;
  1659. if (i < paramInt)
  1660. {
  1661. char c = paramString.charAt(i);
  1662. if ((c == '0') && (!bool))
  1663. bool = true;
  1664. while (!isNonSeparator(c))
  1665. {
  1666. i++;
  1667. break;
  1668. }
  1669. bool = false;
  1670. }
  1671. return bool;
  1672. }
  1673. private static int minPositive(int paramInt1, int paramInt2)
  1674. {
  1675. if ((paramInt1 >= 0) && (paramInt2 >= 0))
  1676. if (paramInt1 >= paramInt2);
  1677. while (true)
  1678. {
  1679. return paramInt1;
  1680. paramInt1 = paramInt2;
  1681. continue;
  1682. if (paramInt1 < 0)
  1683. if (paramInt2 >= 0)
  1684. paramInt1 = paramInt2;
  1685. else
  1686. paramInt1 = -1;
  1687. }
  1688. }
  1689. public static byte[] networkPortionToCalledPartyBCD(String paramString)
  1690. {
  1691. return numberToCalledPartyBCDHelper(extractNetworkPortion(paramString), false);
  1692. }
  1693. public static byte[] networkPortionToCalledPartyBCDWithLength(String paramString)
  1694. {
  1695. return numberToCalledPartyBCDHelper(extractNetworkPortion(paramString), true);
  1696. }
  1697. @MiuiHook(MiuiHook.MiuiHookType.CHANGE_CODE)
  1698. public static String normalizeNumber(String paramString)
  1699. {
  1700. StringBuilder localStringBuilder = new StringBuilder();
  1701. int i = paramString.length();
  1702. int j = 0;
  1703. if (j < i)
  1704. {
  1705. char c = paramString.charAt(j);
  1706. Injector.appendNonSeparator(localStringBuilder, c);
  1707. int k = Character.digit(c, 10);
  1708. if (k != -1)
  1709. localStringBuilder.append(k);
  1710. label83:
  1711. do
  1712. while (true)
  1713. {
  1714. j++;
  1715. break;
  1716. if ((j != 0) || (c != '+'))
  1717. break label83;
  1718. localStringBuilder.append(c);
  1719. }
  1720. while (((c < 'a') || (c > 'z')) && ((c < 'A') || (c > 'Z')));
  1721. }
  1722. for (String str = normalizeNumber(convertKeypadLettersToDigits(paramString)); ; str = localStringBuilder.toString())
  1723. return str;
  1724. }
  1725. public static byte[] numberToCalledPartyBCD(String paramString)
  1726. {
  1727. return numberToCalledPartyBCDHelper(paramString, false);
  1728. }
  1729. private static byte[] numberToCalledPartyBCDHelper(String paramString, boolean paramBoolean)
  1730. {
  1731. int i = paramString.length();
  1732. int j = i;
  1733. if (paramString.indexOf('+') != -1);
  1734. for (int k = 1; ; k = 0)
  1735. {
  1736. if (k != 0)
  1737. j--;
  1738. if (j != 0)
  1739. break;
  1740. arrayOfByte = null;
  1741. return arrayOfByte;
  1742. }
  1743. int m = (j + 1) / 2;
  1744. int n = 1;
  1745. if (paramBoolean)
  1746. n++;
  1747. int i1 = m + n;
  1748. byte[] arrayOfByte = new byte[i1];
  1749. int i2 = 0;
  1750. int i3 = 0;
  1751. while (i3 < i)
  1752. {
  1753. char c = paramString.charAt(i3);
  1754. if (c == '+')
  1755. {
  1756. i3++;
  1757. }
  1758. else
  1759. {
  1760. if ((i2 & 0x1) == 1);
  1761. for (int i8 = 4; ; i8 = 0)
  1762. {
  1763. int i9 = n + (i2 >> 1);
  1764. arrayOfByte[i9] |= (byte)((0xF & charToBCD(c)) << i8);
  1765. i2++;
  1766. break;
  1767. }
  1768. }
  1769. }
  1770. if ((i2 & 0x1) == 1)
  1771. {
  1772. int i7 = n + (i2 >> 1);
  1773. arrayOfByte[i7] = ((byte)(0xF0 | arrayOfByte[i7]));
  1774. }
  1775. int i4 = 0;
  1776. if (paramBoolean)
  1777. {
  1778. int i6 = 0 + 1;
  1779. arrayOfByte[i4] = ((byte)(i1 - 1));
  1780. i4 = i6;
  1781. }
  1782. if (k != 0);
  1783. for (int i5 = 145; ; i5 = 129)
  1784. {
  1785. arrayOfByte[i4] = ((byte)i5);
  1786. break;
  1787. }
  1788. }
  1789. private static String processPlusCodeWithinNanp(String paramString)
  1790. {
  1791. Object localObject = paramString;
  1792. String str;
  1793. if ((paramString != null) && (paramString.charAt(0) == '+') && (paramString.length() > 1))
  1794. {
  1795. str = paramString.substring(1);
  1796. if (!isOneNanp(str))
  1797. break label41;
  1798. }
  1799. label41: for (localObject = str; ; localObject = paramString.replaceFirst("[+]", getDefaultIdp()))
  1800. return localObject;
  1801. }
  1802. private static void removeDashes(Editable paramEditable)
  1803. {
  1804. int i = 0;
  1805. while (i < paramEditable.length())
  1806. if (paramEditable.charAt(i) == '-')
  1807. paramEditable.delete(i, i + 1);
  1808. else
  1809. i++;
  1810. }
  1811. public static String replaceUnicodeDigits(String paramString)
  1812. {
  1813. StringBuilder localStringBuilder = new StringBuilder(paramString.length());
  1814. char[] arrayOfChar = paramString.toCharArray();
  1815. int i = arrayOfChar.length;
  1816. int j = 0;
  1817. if (j < i)
  1818. {
  1819. char c = arrayOfChar[j];
  1820. int k = Character.digit(c, 10);
  1821. if (k != -1)
  1822. localStringBuilder.append(k);
  1823. while (true)
  1824. {
  1825. j++;
  1826. break;
  1827. localStringBuilder.append(c);
  1828. }
  1829. }
  1830. return localStringBuilder.toString();
  1831. }
  1832. public static String stringFromStringAndTOA(String paramString, int paramInt)
  1833. {
  1834. if (paramString == null);
  1835. for (paramString = null; ; paramString = "+" + paramString)
  1836. do
  1837. return paramString;
  1838. while ((paramInt != 145) || (paramString.length() <= 0) || (paramString.charAt(0) == '+'));
  1839. }
  1840. public static String stripSeparators(String paramString)
  1841. {
  1842. if (paramString == null);
  1843. StringBuilder localStringBuilder;
  1844. for (String str = null; ; str = localStringBuilder.toString())
  1845. {
  1846. return str;
  1847. int i = paramString.length();
  1848. localStringBuilder = new StringBuilder(i);
  1849. int j = 0;
  1850. if (j < i)
  1851. {
  1852. char c = paramString.charAt(j);
  1853. int k = Character.digit(c, 10);
  1854. if (k != -1)
  1855. localStringBuilder.append(k);
  1856. while (true)
  1857. {
  1858. j++;
  1859. break;
  1860. if (isNonSeparator(c))
  1861. localStringBuilder.append(c);
  1862. }
  1863. }
  1864. }
  1865. }
  1866. public static String toCallerIDMinMatch(String paramString)
  1867. {
  1868. return internalGetStrippedReversed(extractNetworkPortionAlt(paramString), 7);
  1869. }
  1870. public static int toaFromString(String paramString)
  1871. {
  1872. if ((paramString != null) && (paramString.length() > 0) && (paramString.charAt(0) == '+'));
  1873. for (int i = 145; ; i = 129)
  1874. return i;
  1875. }
  1876. private static CountryCallingCodeAndNewIndex tryGetCountryCallingCodeAndNewIndex(String paramString, boolean paramBoolean)
  1877. {
  1878. CountryCallingCodeAndNewIndex localCountryCallingCodeAndNewIndex = null;
  1879. int i = 0;
  1880. int j = 0;
  1881. int k = paramString.length();
  1882. int m = 0;
  1883. char c;
  1884. if (m < k)
  1885. {
  1886. c = paramString.charAt(m);
  1887. switch (i)
  1888. {
  1889. default:
  1890. case 0:
  1891. case 2:
  1892. case 4:
  1893. case 1:
  1894. case 3:
  1895. case 5:
  1896. case 6:
  1897. case 7:
  1898. case 8:
  1899. case 9:
  1900. }
  1901. }
  1902. while (true)
  1903. {
  1904. label88: return localCountryCallingCodeAndNewIndex;
  1905. if (c == '+')
  1906. i = 1;
  1907. label308:
  1908. do
  1909. while (true)
  1910. {
  1911. m++;
  1912. break;
  1913. if (c == '0')
  1914. {
  1915. i = 2;
  1916. }
  1917. else
  1918. {
  1919. if (c == '1')
  1920. {
  1921. if (!paramBoolean)
  1922. break label88;
  1923. i = 8;
  1924. continue;
  1925. }
  1926. if (isDialable(c))
  1927. {
  1928. break label88;
  1929. if (c == '0')
  1930. {
  1931. i = 3;
  1932. }
  1933. else if (c == '1')
  1934. {
  1935. i = 4;
  1936. }
  1937. else if (isDialable(c))
  1938. {
  1939. break label88;
  1940. if (c == '1')
  1941. {
  1942. i = 5;
  1943. }
  1944. else if (isDialable(c))
  1945. {
  1946. break label88;
  1947. int n = tryGetISODigit(c);
  1948. if (n > 0)
  1949. {
  1950. j = n + j * 10;
  1951. if ((j >= 100) || (isCountryCallingCode(j)))
  1952. {
  1953. localCountryCallingCodeAndNewIndex = new CountryCallingCodeAndNewIndex(j, m + 1);
  1954. break label88;
  1955. }
  1956. if ((i == 1) || (i == 3) || (i == 5))
  1957. {
  1958. i = 6;
  1959. continue;
  1960. }
  1961. i++;
  1962. continue;
  1963. }
  1964. if (isDialable(c))
  1965. {
  1966. break label88;
  1967. if (c != '6')
  1968. break label308;
  1969. i = 9;
  1970. }
  1971. }
  1972. }
  1973. }
  1974. }
  1975. }
  1976. while (!isDialable(c));
  1977. if ((goto 88) && (c == '6'))
  1978. localCountryCallingCodeAndNewIndex = new CountryCallingCodeAndNewIndex(66, m + 1);
  1979. }
  1980. }
  1981. private static int tryGetISODigit(char paramChar)
  1982. {
  1983. if (('0' <= paramChar) && (paramChar <= '9'));
  1984. for (int i = paramChar + '\0*0'; ; i = -1)
  1985. return i;
  1986. }
  1987. private static int tryGetTrunkPrefixOmittedIndex(String paramString, int paramInt)
  1988. {
  1989. int i = -1;
  1990. int j = paramString.length();
  1991. for (int k = paramInt; ; k++)
  1992. {
  1993. char c;
  1994. if (k < j)
  1995. {
  1996. c = paramString.charAt(k);
  1997. if (tryGetISODigit(c) < 0)
  1998. break label40;
  1999. i = k + 1;
  2000. }
  2001. label40:
  2002. while (isDialable(c))
  2003. return i;
  2004. }
  2005. }
  2006. private static class CountryCallingCodeAndNewIndex
  2007. {
  2008. public final int countryCallingCode;
  2009. public final int newIndex;
  2010. public CountryCallingCodeAndNewIndex(int paramInt1, int paramInt2)
  2011. {
  2012. this.countryCallingCode = paramInt1;
  2013. this.newIndex = paramInt2;
  2014. }
  2015. }
  2016. @MiuiHook(MiuiHook.MiuiHookType.NEW_CLASS)
  2017. static class Injector
  2018. {
  2019. static void appendNonSeparator(StringBuilder paramStringBuilder, char paramChar)
  2020. {
  2021. if ((Character.digit(paramChar, 10) == -1) && (PhoneNumberUtils.isNonSeparator(paramChar)))
  2022. paramStringBuilder.append(paramChar);
  2023. }
  2024. static int getEffectiveLength(String paramString)
  2025. {
  2026. return 1 + PhoneNumberUtils.callIndexOfLastNetworkChar(paramString);
  2027. }
  2028. }
  2029. }
  2030. /* Location: /home/lithium/miui/chameleon/2.11.16/framework_dex2jar.jar
  2031. * Qualified Name: android.telephony.PhoneNumberUtils
  2032. * JD-Core Version: 0.6.2
  2033. */