@@ -20,7 +20,7 @@ public final class DeviceOs {
2020
2121 /* ---------------------------------------- 我是一条华丽的分割线 ---------------------------------------- */
2222
23- static final String REGEX_VERSION_NAME = "( \\ d+(?:\\ .\\ d+)+) " ;
23+ static final String REGEX_VERSION_NAME = "\\ d+(?:\\ .\\ d+)+" ;
2424
2525 static final String REGEX_NUMBER = "\\ d+" ;
2626
@@ -401,11 +401,11 @@ private DeviceOs() {
401401 if (SystemPropertyCompat .isSystemPropertyAnyOneExist (OS_CONDITIONS_HYPER_OS )) {
402402 sCurrentOsName = OS_NAME_HYPER_OS ;
403403 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_HYPER_OS );
404- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
404+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
405405 } else if (SystemPropertyCompat .isSystemPropertyAnyOneExist (OS_CONDITIONS_MIUI )) {
406406 sCurrentOsName = OS_NAME_MIUI ;
407407 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_MIUI );
408- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
408+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
409409 }
410410
411411 if (sCurrentOsName == null ) {
@@ -414,13 +414,13 @@ private DeviceOs() {
414414 if (!TextUtils .isEmpty (realmeUiVersion )) {
415415 sCurrentOsName = OS_NAME_REALME_UI ;
416416 sCurrentOriginalOsVersionName = realmeUiVersion ;
417- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
417+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
418418 } else {
419419 String colorOsVersion = SystemPropertyCompat .getSystemPropertyAnyOneValue (OS_VERSION_NAME_COLOR_OS );
420420 if (!TextUtils .isEmpty (colorOsVersion )) {
421421 sCurrentOsName = OS_NAME_COLOR_OS ;
422422 sCurrentOriginalOsVersionName = colorOsVersion ;
423- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
423+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
424424 }
425425 }
426426 }
@@ -431,11 +431,11 @@ private DeviceOs() {
431431 if (vivoOsName .toLowerCase ().contains ("origin" )) {
432432 sCurrentOsName = OS_NAME_ORIGIN_OS ;
433433 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyAnyOneValue (OS_VERSION_NAME_ORIGIN_OS );
434- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
434+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
435435 } else if (vivoOsName .toLowerCase ().contains ("funtouch" )) {
436436 sCurrentOsName = OS_NAME_FUNTOUCH_OS ;
437437 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyAnyOneValue (OS_VERSION_NAME_FUNTOUCH_OS );
438- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
438+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
439439 }
440440 }
441441 }
@@ -445,7 +445,7 @@ private DeviceOs() {
445445 if (!TextUtils .isEmpty (magicOsVersion )) {
446446 sCurrentOsName = OS_NAME_MAGIC_OS ;
447447 sCurrentOriginalOsVersionName = magicOsVersion ;
448- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
448+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
449449 }
450450 }
451451
@@ -457,7 +457,7 @@ private DeviceOs() {
457457 if (osBrand != null && osBrand .toString ().toLowerCase ().contains ("harmony" )) {
458458 sCurrentOsName = OS_NAME_HARMONY_OS ;
459459 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyAnyOneValue (OS_VERSION_NAME_HARMONY_OS );
460- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
460+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
461461 }
462462 } catch (Exception ignore ) {
463463 // default implementation ignored
@@ -470,27 +470,27 @@ private DeviceOs() {
470470 if (!TextUtils .isEmpty (emuiVersion ) && emuiVersion .toLowerCase ().contains ("emotionui" )) {
471471 sCurrentOsName = OS_NAME_EMUI ;
472472 sCurrentOriginalOsVersionName = emuiVersion ;
473- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
473+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
474474 }
475475 }
476476
477477 if (sCurrentOsName == null ) {
478478 String oneUiVersion = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_ONE_UI );
479479 if (!TextUtils .isEmpty (oneUiVersion )) {
480480 sCurrentOsName = OS_NAME_ONE_UI ;
481- if (oneUiVersion .matches (" \\ d+" )) {
481+ if (oneUiVersion .matches (REGEX_NUMBER )) {
482482 try {
483483 // OneUI 5.1.1 获取到的值是 50101 再经过一通计算得出 5.1.1
484484 int oneUiVersionCode ;
485485 oneUiVersionCode = Integer .parseInt (oneUiVersion );
486486 sCurrentOriginalOsVersionName = getOneUiVersionNameByVersionCode (oneUiVersionCode );
487- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
487+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
488488 } catch (Exception e ) {
489489 // default implementation ignored
490490 }
491491 } else if (oneUiVersion .matches (REGEX_VERSION_NAME )) {
492492 sCurrentOriginalOsVersionName = oneUiVersion ;
493- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
493+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
494494 }
495495 }
496496
@@ -508,7 +508,7 @@ private DeviceOs() {
508508 // OneUI 2.5 获取到的值是 110500,110500 - 90000 = 25000,20500 再经过一通计算得出 2.5 的版本号
509509 int oneUiVersionCode = semPlatformVersion - superfluousValue ;
510510 sCurrentOriginalOsVersionName = getOneUiVersionNameByVersionCode (oneUiVersionCode );
511- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
511+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
512512 }
513513 } catch (Exception ignore ) {
514514 // default implementation ignored
@@ -521,15 +521,15 @@ private DeviceOs() {
521521 if (!TextUtils .isEmpty (oxygenOsVersion )) {
522522 sCurrentOsName = OS_NAME_OXYGEN_OS ;
523523 sCurrentOriginalOsVersionName = oxygenOsVersion ;
524- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
524+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
525525 }
526526 }
527527 if (sCurrentOsName == null ) {
528528 String h2OsVersion = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_H2_OS );
529529 if (!TextUtils .isEmpty (h2OsVersion )) {
530530 sCurrentOsName = OS_NAME_H2_OS ;
531531 sCurrentOriginalOsVersionName = h2OsVersion ;
532- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
532+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
533533 }
534534 }
535535
@@ -538,10 +538,10 @@ private DeviceOs() {
538538 String flymeVersion = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_FLYME_1 );
539539 if (!TextUtils .isEmpty (flymeVersion ) && flymeVersion .toLowerCase ().contains ("flyme" )) {
540540 sCurrentOriginalOsVersionName = flymeVersion ;
541- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
541+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
542542 } else {
543543 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_FLYME_2 );
544- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
544+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
545545 }
546546 }
547547
@@ -552,29 +552,29 @@ private DeviceOs() {
552552 if (lowerCaseOsVersion .contains ("redmagicos" )) {
553553 sCurrentOsName = OS_NAME_RED_MAGIC_OS ;
554554 sCurrentOriginalOsVersionName = osVersion ;
555- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
555+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
556556 } else if (lowerCaseOsVersion .contains ("myos" )) {
557557 sCurrentOsName = OS_NAME_MY_OS ;
558558 sCurrentOriginalOsVersionName = osVersion ;
559- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
559+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
560560 } else if (lowerCaseOsVersion .contains ("zte" )) {
561561 sCurrentOsName = OS_NAME_MIFAVOR_UI ;
562562 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_MIFAVOR_UI );
563- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
563+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
564564 }
565565 }
566566 }
567567
568568 if (sCurrentOsName == null && SystemPropertyCompat .isSystemPropertyAnyOneExist (OS_CONDITIONS_SMARTISAN_OS )) {
569569 sCurrentOsName = OS_NAME_SMARTISAN_OS ;
570570 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_SMARTISAN_OS );
571- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
571+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
572572 }
573573
574574 if (sCurrentOsName == null && SystemPropertyCompat .isSystemPropertyAnyOneExist (OS_CONDITIONS_EUI_OS )) {
575575 sCurrentOsName = OS_NAME_EUI_OS ;
576576 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_EUI_OS );
577- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
577+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
578578 }
579579
580580 if (sCurrentOsName == null ) {
@@ -583,11 +583,11 @@ private DeviceOs() {
583583 if (!TextUtils .isEmpty (zuxOsName ) && zuxOsName .toLowerCase ().contains ("zuxos" )) {
584584 sCurrentOsName = OS_NAME_ZUX_OS ;
585585 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyAnyOneValue (OS_VERSION_NAME_ZUX_OS );
586- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
586+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
587587 } else if (SystemPropertyCompat .isSystemPropertyAnyOneExist (OS_CONDITIONS_ZUI )) {
588588 sCurrentOsName = OS_NAME_ZUI ;
589589 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_ZUI );
590- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
590+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
591591 }
592592 }
593593
@@ -596,7 +596,7 @@ private DeviceOs() {
596596 if (!TextUtils .isEmpty (osName ) && osName .toLowerCase ().contains ("nubiaui" )) {
597597 sCurrentOsName = OS_NAME_NUBIA_UI ;
598598 sCurrentOriginalOsVersionName = SystemPropertyCompat .getSystemPropertyValue (OS_VERSION_NAME_NUBIA_UI );
599- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
599+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
600600 }
601601 }
602602
@@ -605,7 +605,7 @@ private DeviceOs() {
605605 if (!TextUtils .isEmpty (osVersion ) && osVersion .toLowerCase ().contains ("360ui" )) {
606606 sCurrentOsName = OS_NAME_360_UI ;
607607 sCurrentOriginalOsVersionName = osVersion ;
608- sCurrentBeautificationVersionName = getBeautificationVersionName (sCurrentOriginalOsVersionName );
608+ sCurrentBeautificationVersionName = extractVersionNameByText (sCurrentOriginalOsVersionName );
609609 }
610610 }
611611
@@ -954,27 +954,38 @@ private static String getOneUiVersionNameByVersionCode(int oneUiVersionCode) {
954954 }
955955
956956 /**
957- * 获取经过美化的版本名称
957+ * 从文本提取字符串中的版本号(只保留数字和点号)
958958 */
959959 @ NonNull
960- private static String getBeautificationVersionName (String originalOsVersionName ) {
960+ private static String extractVersionNameByText (@ Nullable String text ) {
961+ if (TextUtils .isEmpty (text )) {
962+ return "" ;
963+ }
964+
961965 // 使用正则表达式匹配数字和点号组成的版本号
962- Pattern pattern = Pattern .compile (REGEX_VERSION_NAME );
963- Matcher matcher = pattern .matcher (originalOsVersionName );
966+ // 这里需要注意:因为是获取正则表达式的分组,所以需要在 Pattern.compile 时加上括号
967+ // Github 地址:https://github.com/getActivity/DeviceCompat/pull/3
968+ Pattern pattern = Pattern .compile ("(" + REGEX_VERSION_NAME + ")" );
969+ Matcher matcher = pattern .matcher (text );
964970
965- if (matcher .find ()) {
971+ if (matcher .find () && matcher . groupCount () > 0 ) {
966972 String result = matcher .group (1 );
967- return result != null ? result : "" ;
973+ if (result != null ) {
974+ return result ;
975+ }
968976 }
969977
970978 // 需要注意的是 华为畅享 5S Android 5.1 获取到的厂商版本号是 EmotionUI_3,而不是 3.1 或者 3.0 这种
971- // 使用正则表达式匹配数字和点号组成的版本号
972- pattern = Pattern .compile (REGEX_NUMBER );
973- matcher = pattern .matcher (originalOsVersionName );
979+ // 这里需要注意:因为是获取正则表达式的分组,所以需要在 Pattern.compile 时加上括号
980+ // Github 地址:https://github.com/getActivity/DeviceCompat/pull/3
981+ pattern = Pattern .compile ("(" + REGEX_NUMBER + ")" );
982+ matcher = pattern .matcher (text );
974983
975- if (matcher .find ()) {
984+ if (matcher .find () && matcher . groupCount () > 0 ) {
976985 String result = matcher .group (1 );
977- return result != null ? result : "" ;
986+ if (result != null ) {
987+ return result ;
988+ }
978989 }
979990 return "" ;
980991 }
0 commit comments