├── .gitignore ├── LICENSE ├── MIUIVerificationCode.pattern ├── Makefile ├── README.md ├── SMSCodeHelper.iml ├── Screener ├── 20151225190538.png ├── 20151225190615.png ├── 20151225190651.png ├── 20151225190757.png └── 20151225191021.png ├── apk ├── me.gitai.smscodehelper-release-c1-v0.0.1-t12251854.apk ├── me.gitai.smscodehelper-release-c10-v0.0.8.apk ├── me.gitai.smscodehelper-release-c2-v0.0.2-t12261829.apk ├── me.gitai.smscodehelper-release-c3-v0.0.3.apk ├── me.gitai.smscodehelper-release-c4-v0.0.4.apk ├── me.gitai.smscodehelper-release-c5-v0.0.5.apk ├── me.gitai.smscodehelper-release-c7-v0.0.6.apk └── me.gitai.smscodehelper-release-c8-v0.0.7.apk ├── app ├── .gitignore ├── app.iml ├── build.gradle ├── deps │ └── xposed_api_54.jar ├── libs │ ├── libMokeeCloud.jar │ └── systembartint-1.0.4.jar ├── mapping.txt ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── xposed_init │ ├── java │ │ └── me │ │ │ └── gitai │ │ │ ├── library │ │ │ ├── Charsets.java │ │ │ ├── utils │ │ │ │ ├── ActivityUtils.java │ │ │ │ ├── AndroidUtils.java │ │ │ │ ├── AssertUtils.java │ │ │ │ ├── CrashUtil.java │ │ │ │ ├── CryptoUtils.java │ │ │ │ ├── FileUtils.java │ │ │ │ ├── IOUtils.java │ │ │ │ ├── L.java │ │ │ │ ├── PackageUtils.java │ │ │ │ ├── ParseAboutXml.java │ │ │ │ ├── SharedPreferencesUtil.java │ │ │ │ ├── StringUtils.java │ │ │ │ ├── ThreadUtils.java │ │ │ │ ├── ToastUtil.java │ │ │ │ ├── adapter │ │ │ │ │ ├── BaseAdapterHelper.java │ │ │ │ │ ├── BaseQuickAdapter.java │ │ │ │ │ └── QuickAdapter.java │ │ │ │ └── io │ │ │ │ │ ├── BoundedInputStream.java │ │ │ │ │ ├── CountingInputStream.java │ │ │ │ │ ├── CountingOutputStream.java │ │ │ │ │ ├── NameGenerator.java │ │ │ │ │ ├── ProxyInputStream.java │ │ │ │ │ ├── ProxyOutputStream.java │ │ │ │ │ ├── SafeFileNameGenerator.java │ │ │ │ │ └── StringBuilderWriter.java │ │ │ └── widget │ │ │ │ └── MaterialDialog.java │ │ │ └── smscodehelper │ │ │ ├── Constant.java │ │ │ ├── SMSApp.java │ │ │ ├── bean │ │ │ └── MSG.java │ │ │ ├── bundle │ │ │ ├── BundleScrubber.java │ │ │ └── PluginBundleManager.java │ │ │ ├── hook │ │ │ ├── Patch.java │ │ │ └── SmsReceiver.java │ │ │ ├── receiver │ │ │ ├── CopyReceiver.java │ │ │ ├── QueryReceiver.java │ │ │ ├── SMSBroadcastReceiver.java │ │ │ └── SecretCodeReceiver.java │ │ │ ├── ui │ │ │ ├── AbstractPluginActivity.java │ │ │ ├── MainPreferences.java │ │ │ └── TaskerActivity.java │ │ │ ├── utils │ │ │ ├── Captchas.java │ │ │ └── TaskerPlugin.java │ │ │ └── widget │ │ │ ├── EditPreference.java │ │ │ ├── GuessPreference.java │ │ │ ├── InertCheckBox.java │ │ │ ├── TestPreference.java │ │ │ └── VersionPreference.java │ └── res │ │ ├── drawable-hdpi │ │ └── ic_notify.png │ │ ├── drawable-mdpi │ │ └── ic_notify.png │ │ ├── drawable-xhdpi │ │ └── ic_notify.png │ │ ├── drawable-xxhdpi │ │ └── ic_notify.png │ │ ├── drawable-xxxhdpi │ │ └── ic_notify.png │ │ ├── drawable │ │ ├── button.xml │ │ ├── material_card.xml │ │ ├── material_card_nos.xml │ │ ├── material_card_nos_pressed.xml │ │ └── material_dialog_window.xml │ │ ├── layout │ │ ├── item_log.xml │ │ ├── layout_about.xml │ │ ├── layout_editdialog.xml │ │ ├── layout_materialdialog.xml │ │ ├── layout_tasker.xml │ │ ├── layout_test.xml │ │ └── spinner_item.xml │ │ ├── mipmap-hdpi │ │ └── ic_launcher.png │ │ ├── mipmap-mdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxhdpi │ │ └── ic_launcher.png │ │ ├── mipmap-xxxhdpi │ │ └── ic_launcher.png │ │ ├── values-v14 │ │ └── styles.xml │ │ ├── values-v19 │ │ └── strings.xml │ │ ├── values-v21 │ │ └── styles.xml │ │ ├── values-w820dp │ │ └── dimens.xml │ │ ├── values-zh-rCN-v19 │ │ └── strings.xml │ │ ├── values-zh-rCN │ │ └── strings.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── about.xml │ │ └── preferences.xml │ └── test │ └── java │ └── me │ └── gitai │ └── smscodehelper │ └── utils │ ├── CaptchasTest.java │ ├── ParseAboutXmlTest.java │ └── testSMS.json ├── build.gradle ├── buildscripts ├── jacoco.gradle └── utils.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── ic_launcher.png ├── localeapi ├── build.gradle ├── demo │ ├── display.zip │ ├── display │ │ ├── locale-api │ │ │ ├── AndroidManifest.xml │ │ │ ├── License.txt │ │ │ ├── Read Me.txt │ │ │ ├── build.xml │ │ │ ├── lint.xml │ │ │ ├── proguard-project.txt │ │ │ ├── project.properties │ │ │ ├── res │ │ │ │ ├── drawable-hdpi-v14 │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ │ ├── drawable-ldpi-v14 │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ │ ├── drawable-mdpi-v14 │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ │ ├── drawable-xhdpi-v14 │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ │ ├── drawable │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.xml │ │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.xml │ │ │ │ │ └── twofortyfouram_locale_ic_menu_save.xml │ │ │ │ ├── menu │ │ │ │ │ └── twofortyfouram_locale_help_save_dontsave.xml │ │ │ │ ├── values-cs │ │ │ │ │ └── strings-cs.xml │ │ │ │ ├── values-de │ │ │ │ │ └── strings-de.xml │ │ │ │ ├── values-es │ │ │ │ │ └── strings-es.xml │ │ │ │ ├── values-fr │ │ │ │ │ └── strings-fr.xml │ │ │ │ ├── values-hdpi │ │ │ │ │ └── integers.xml │ │ │ │ ├── values-it │ │ │ │ │ └── strings-it.xml │ │ │ │ ├── values-ja │ │ │ │ │ └── strings-ja.xml │ │ │ │ ├── values-ko │ │ │ │ │ └── strings-ko.xml │ │ │ │ ├── values-ldpi │ │ │ │ │ └── integers.xml │ │ │ │ ├── values-mdpi │ │ │ │ │ └── integers.xml │ │ │ │ ├── values-nb │ │ │ │ │ └── strings-nb.xml │ │ │ │ ├── values-nl │ │ │ │ │ └── strings-nl.xml │ │ │ │ ├── values-pt-rBR │ │ │ │ │ └── strings-pt-rBR.xml │ │ │ │ ├── values-ru │ │ │ │ │ └── strings-ru.xml │ │ │ │ ├── values-sv │ │ │ │ │ └── strings-sv.xml │ │ │ │ ├── values-v11 │ │ │ │ │ └── styles.xml │ │ │ │ ├── values-v14 │ │ │ │ │ └── styles.xml │ │ │ │ ├── values-v9 │ │ │ │ │ └── styles.xml │ │ │ │ ├── values-vi │ │ │ │ │ └── strings-vi.xml │ │ │ │ └── values │ │ │ │ │ ├── id.xml │ │ │ │ │ ├── strings-en.xml │ │ │ │ │ └── styles.xml │ │ │ └── src │ │ │ │ └── com │ │ │ │ └── twofortyfouram │ │ │ │ └── locale │ │ │ │ ├── BreadCrumber.java │ │ │ │ ├── Constants.java │ │ │ │ ├── Intent.java │ │ │ │ └── PackageUtilities.java │ │ ├── locale-display_condition_plugin-test │ │ │ ├── AndroidManifest.xml │ │ │ ├── ant.properties │ │ │ ├── build.xml │ │ │ ├── proguard-project.txt │ │ │ ├── project.properties │ │ │ ├── res │ │ │ │ └── values │ │ │ │ │ └── strings.xml │ │ │ └── src │ │ │ │ └── com │ │ │ │ └── yourcompany │ │ │ │ └── yourcondition │ │ │ │ ├── bundle │ │ │ │ ├── BundleScrubberTest.java │ │ │ │ └── PluginBundleManagerTest.java │ │ │ │ ├── receiver │ │ │ │ └── ReceiverTest.java │ │ │ │ ├── test │ │ │ │ ├── BundleTestHelper.java │ │ │ │ └── ManifestTest.java │ │ │ │ └── ui │ │ │ │ ├── EditActivityTest.java │ │ │ │ └── InfoActivityTest.java │ │ └── locale-display_condition_plugin │ │ │ ├── AndroidManifest.xml │ │ │ ├── License.txt │ │ │ ├── Read Me.txt │ │ │ ├── build.xml │ │ │ ├── lint.xml │ │ │ ├── proguard-project.txt │ │ │ ├── project.properties │ │ │ ├── res │ │ │ ├── drawable-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_locale_plugin.png │ │ │ ├── drawable-ldpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_locale_plugin.png │ │ │ ├── drawable-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_locale_plugin.png │ │ │ ├── drawable-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_locale_plugin.png │ │ │ ├── layout │ │ │ │ └── main.xml │ │ │ └── values │ │ │ │ ├── arrays.xml │ │ │ │ └── strings.xml │ │ │ └── src │ │ │ └── com │ │ │ └── yourcompany │ │ │ └── yourcondition │ │ │ ├── Constants.java │ │ │ ├── PluginApplication.java │ │ │ ├── bundle │ │ │ ├── BundleScrubber.java │ │ │ └── PluginBundleManager.java │ │ │ ├── receiver │ │ │ ├── BackgroundService.java │ │ │ ├── QueryReceiver.java │ │ │ └── ServiceWakeLockManager.java │ │ │ └── ui │ │ │ ├── AbstractPluginActivity.java │ │ │ ├── EditActivity.java │ │ │ └── InfoActivity.java │ ├── toast.zip │ └── toast │ │ ├── locale-api │ │ ├── AndroidManifest.xml │ │ ├── License.txt │ │ ├── Read Me.txt │ │ ├── build.xml │ │ ├── lint.xml │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ ├── res │ │ │ ├── drawable-hdpi-v14 │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ ├── drawable-ldpi-v14 │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ ├── drawable-mdpi-v14 │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ ├── drawable-xhdpi-v14 │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.png │ │ │ │ └── twofortyfouram_locale_ic_menu_save.png │ │ │ ├── drawable │ │ │ │ ├── twofortyfouram_locale_ic_menu_dontsave.xml │ │ │ │ ├── twofortyfouram_locale_ic_menu_help.xml │ │ │ │ └── twofortyfouram_locale_ic_menu_save.xml │ │ │ ├── menu │ │ │ │ └── twofortyfouram_locale_help_save_dontsave.xml │ │ │ ├── values-cs │ │ │ │ └── strings-cs.xml │ │ │ ├── values-de │ │ │ │ └── strings-de.xml │ │ │ ├── values-es │ │ │ │ └── strings-es.xml │ │ │ ├── values-fr │ │ │ │ └── strings-fr.xml │ │ │ ├── values-hdpi │ │ │ │ └── integers.xml │ │ │ ├── values-it │ │ │ │ └── strings-it.xml │ │ │ ├── values-ja │ │ │ │ └── strings-ja.xml │ │ │ ├── values-ko │ │ │ │ └── strings-ko.xml │ │ │ ├── values-ldpi │ │ │ │ └── integers.xml │ │ │ ├── values-mdpi │ │ │ │ └── integers.xml │ │ │ ├── values-nb │ │ │ │ └── strings-nb.xml │ │ │ ├── values-nl │ │ │ │ └── strings-nl.xml │ │ │ ├── values-pt-rBR │ │ │ │ └── strings-pt-rBR.xml │ │ │ ├── values-ru │ │ │ │ └── strings-ru.xml │ │ │ ├── values-sv │ │ │ │ └── strings-sv.xml │ │ │ ├── values-v11 │ │ │ │ └── styles.xml │ │ │ ├── values-v14 │ │ │ │ └── styles.xml │ │ │ ├── values-v9 │ │ │ │ └── styles.xml │ │ │ ├── values-vi │ │ │ │ └── strings-vi.xml │ │ │ └── values │ │ │ │ ├── id.xml │ │ │ │ ├── strings-en.xml │ │ │ │ └── styles.xml │ │ └── src │ │ │ └── com │ │ │ └── twofortyfouram │ │ │ └── locale │ │ │ ├── BreadCrumber.java │ │ │ ├── Constants.java │ │ │ ├── Intent.java │ │ │ └── PackageUtilities.java │ │ ├── locale-toast_setting_plugin-test │ │ ├── AndroidManifest.xml │ │ ├── build.xml │ │ ├── lint.xml │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ ├── res │ │ │ └── values │ │ │ │ └── strings.xml │ │ └── src │ │ │ └── com │ │ │ └── yourcompany │ │ │ └── yoursetting │ │ │ ├── bundle │ │ │ ├── BundleScrubberTest.java │ │ │ └── PluginBundleManagerTest.java │ │ │ ├── receiver │ │ │ └── ReceiverTest.java │ │ │ ├── test │ │ │ ├── BundleTestHelper.java │ │ │ └── ManifestTest.java │ │ │ └── ui │ │ │ ├── EditActivityTest.java │ │ │ └── InfoActivityTest.java │ │ └── locale-toast_setting_plugin │ │ ├── AndroidManifest.xml │ │ ├── License.txt │ │ ├── Read Me.txt │ │ ├── build.xml │ │ ├── lint.xml │ │ ├── proguard-project.txt │ │ ├── project.properties │ │ ├── res │ │ ├── drawable-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_locale_plugin.png │ │ ├── drawable-ldpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_locale_plugin.png │ │ ├── drawable-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_locale_plugin.png │ │ ├── drawable-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_locale_plugin.png │ │ ├── layout │ │ │ └── main.xml │ │ └── values │ │ │ └── strings.xml │ │ └── src │ │ └── com │ │ └── yourcompany │ │ └── yoursetting │ │ ├── Constants.java │ │ ├── PluginApplication.java │ │ ├── bundle │ │ ├── BundleScrubber.java │ │ └── PluginBundleManager.java │ │ ├── receiver │ │ └── FireReceiver.java │ │ └── ui │ │ ├── AbstractPluginActivity.java │ │ ├── EditActivity.java │ │ └── InfoActivity.java ├── lint.xml ├── localeapi.iml └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── twofortyfouram │ │ └── locale │ │ ├── BreadCrumber.java │ │ ├── Constants.java │ │ ├── Intent.java │ │ └── PackageUtilities.java │ └── res │ ├── drawable-hdpi-v14 │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ ├── twofortyfouram_locale_ic_menu_help.png │ └── twofortyfouram_locale_ic_menu_save.png │ ├── drawable-ldpi-v14 │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ ├── twofortyfouram_locale_ic_menu_help.png │ └── twofortyfouram_locale_ic_menu_save.png │ ├── drawable-mdpi-v14 │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ ├── twofortyfouram_locale_ic_menu_help.png │ └── twofortyfouram_locale_ic_menu_save.png │ ├── drawable-xhdpi-v14 │ ├── twofortyfouram_locale_ic_menu_dontsave.png │ ├── twofortyfouram_locale_ic_menu_help.png │ └── twofortyfouram_locale_ic_menu_save.png │ ├── drawable │ ├── twofortyfouram_locale_ic_menu_dontsave.xml │ ├── twofortyfouram_locale_ic_menu_help.xml │ └── twofortyfouram_locale_ic_menu_save.xml │ ├── menu │ └── twofortyfouram_locale_help_save_dontsave.xml │ ├── values-cs │ └── strings-cs.xml │ ├── values-de │ └── strings-de.xml │ ├── values-es │ └── strings-es.xml │ ├── values-fr │ └── strings-fr.xml │ ├── values-hdpi │ └── integers.xml │ ├── values-it │ └── strings-it.xml │ ├── values-ja │ └── strings-ja.xml │ ├── values-ko │ └── strings-ko.xml │ ├── values-ldpi │ └── integers.xml │ ├── values-mdpi │ └── integers.xml │ ├── values-nb │ └── strings-nb.xml │ ├── values-nl │ └── strings-nl.xml │ ├── values-pt-rBR │ └── strings-pt-rBR.xml │ ├── values-ru │ └── strings-ru.xml │ ├── values-sv │ └── strings-sv.xml │ ├── values-v11 │ └── styles.xml │ ├── values-v14 │ └── styles.xml │ ├── values-v9 │ └── styles.xml │ ├── values-vi │ └── strings-vi.xml │ └── values │ ├── id.xml │ ├── strings-en.xml │ └── styles.xml ├── settings.gradle └── test.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | #*.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | build/ 18 | /*/build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | 29 | .idea 30 | 31 | build.sh 32 | aquamail -------------------------------------------------------------------------------- /MIUIVerificationCode.pattern: -------------------------------------------------------------------------------- 1 | ::= 验证码|校验码|动态码|确认码|随机码|验证|校验|验证密码|动态密码|校验密码|随机密码|确认密码|激活码|兑换码|认证码|认证号码|认证密码|交易码|交易密码|授权码|操作码 2 | 3 | ::= 。!!??;;,, 4 | ::= 验证码|校验码|动态码|确认码|随机码|验证密码|动态密码|校验密码|随机密码|确认密码|激活码|兑换码|认证码|认证号码|认证密码|交易码|交易密码|授权码|操作码 5 | ::= 验证|校验 6 | ::= 是:|为:|是:|为:|是|为|:|: 7 | ::= ,|;| |,|.|。|!|!|(|)|(|)|[|]|【|】|{|}|“|"|” 8 | 9 | 10 | ::= <#char> Ext_verificationCode:0 CharLenLonger:0:2 CharLenLess:0:18 11 | 12 | ::= <“><”>|||<"><">|||< >< >|||<(><)>|||<(><)>|||<[><]>|||<【><】> 13 | ::= Score:1:1.0 14 | ::= Score:1:0.9 15 | 16 | ::= Score:1:1.0 17 | // ::= Score:1:1.0 18 | 19 | //待测试验证 20 | ::= < |!空>< |!标点符号|$End> Score:1:1.0 21 | 22 | ::= <(><*><)>|||<(><*><)> CharLenLess:1:10 CharLenLonger:1:2 23 | ::= Score:1:1.0 24 | 25 | // ::= <(><*><)>|||<(><*><)>|||<[><*><]>|||<【><*><】> CharLenLess:1:10 NoContainDic:1: 26 | ::= <(><*>|||<(><*>|||<[><*>|||<【><*> CharLenLess:1:10 NoContainDic:1: 27 | 28 | ::= Score:1:1.0 29 | 30 | ::= <(><*><)>|||<(><*><)>|||<[><*><]>|||<【><*><】> CharLenLess:1:10 NoContainDic:1: 31 | ::= Score:1:1.0 32 | ::= < |!空><是|为><*> Score:1:1.0 CharLenLess:3:10 NoContainDic:3: 33 | // ::= < |!标点符号|$Start>< |!空><*>< |!标点符号|$End> Score:1:1.0 CharLenLess:3:10 NoContainDic:3: 34 | 35 | //非数字、英文字符验证码 36 | // ::= < |!空><*>< |!标点符号|$End> Score:1:1.0 Ext_verificationCode:3 CharLenLonger:3:2 CharLenLess:3:10 NoContainDic:3:<诈骗|欺诈|发> 37 | // ::= <$Start>< |!空><*>< |!标点符号|$End> Score:1:1.0 Ext_verificationCode:4 CharLenLonger:4:2 CharLenLess:4:10 NoContainDic:4:<诈骗|欺诈> 38 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | clean: 2 | gradle clean 3 | 4 | debug: 5 | ./build.sh 6 | 7 | install: 8 | adb uninstall me.gitai.smscodehelper.debug 9 | adb install app/build/outputs/apk/me.gitai.smscodehelper-debug-c12-v0.1.0.apk -------------------------------------------------------------------------------- /SMSCodeHelper.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /Screener/20151225190538.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/Screener/20151225190538.png -------------------------------------------------------------------------------- /Screener/20151225190615.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/Screener/20151225190615.png -------------------------------------------------------------------------------- /Screener/20151225190651.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/Screener/20151225190651.png -------------------------------------------------------------------------------- /Screener/20151225190757.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/Screener/20151225190757.png -------------------------------------------------------------------------------- /Screener/20151225191021.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/Screener/20151225191021.png -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c1-v0.0.1-t12251854.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c1-v0.0.1-t12251854.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c10-v0.0.8.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c10-v0.0.8.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c2-v0.0.2-t12261829.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c2-v0.0.2-t12261829.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c3-v0.0.3.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c3-v0.0.3.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c4-v0.0.4.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c4-v0.0.4.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c5-v0.0.5.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c5-v0.0.5.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c7-v0.0.6.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c7-v0.0.6.apk -------------------------------------------------------------------------------- /apk/me.gitai.smscodehelper-release-c8-v0.0.7.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/apk/me.gitai.smscodehelper-release-c8-v0.0.7.apk -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | .apk -------------------------------------------------------------------------------- /app/deps/xposed_api_54.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/deps/xposed_api_54.jar -------------------------------------------------------------------------------- /app/libs/libMokeeCloud.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/libs/libMokeeCloud.jar -------------------------------------------------------------------------------- /app/libs/systembartint-1.0.4.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/libs/systembartint-1.0.4.jar -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in C:\Users\Rikka\AppData\Local\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | 19 | -dontwarn com.mokee.volley.** 20 | -dontwarn com.mokee.google.** 21 | -dontwarn com.mokee.cloud.** 22 | -dontwarn com.mokee.os.** 23 | -dontwarn com.mokee.security.** 24 | 25 | -printmapping mapping.txt -------------------------------------------------------------------------------- /app/src/main/assets/xposed_init: -------------------------------------------------------------------------------- 1 | me.gitai.smscodehelper.hook.Patch 2 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/ActivityUtils.java: -------------------------------------------------------------------------------- 1 | package me.gitai.library.utils; 2 | 3 | import android.app.Activity; 4 | import android.content.Context; 5 | import android.content.ContextWrapper; 6 | 7 | /** 8 | * Created by dphdjy on 15-11-5. 9 | */ 10 | public class ActivityUtils { 11 | public static Activity findActivityFromContext(Context ctx){ 12 | if (ctx != null){ 13 | if (ctx instanceof Activity){ 14 | return (Activity)ctx; 15 | } 16 | if(ctx instanceof ContextWrapper){ 17 | ContextWrapper cw = (ContextWrapper)ctx; 18 | return findActivityFromContext(cw.getBaseContext()); 19 | } 20 | } 21 | return null; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/CrashUtil.java: -------------------------------------------------------------------------------- 1 | package me.gitai.library.utils; 2 | 3 | import android.content.Context; 4 | import android.os.Build; 5 | 6 | import java.util.ArrayList; 7 | import java.util.List; 8 | import java.util.Locale; 9 | 10 | /** 11 | * Created by gitai on 16-2-18. 12 | */ 13 | public class CrashUtil implements Thread.UncaughtExceptionHandler { 14 | private static CrashUtil mCrashUtil = new CrashUtil(); 15 | 16 | private Context mContext; 17 | private OnCrash mOnCrash; 18 | private Thread.UncaughtExceptionHandler mDefHandler; 19 | 20 | public static CrashUtil getInstance(){ 21 | return mCrashUtil; 22 | } 23 | 24 | public void init(Context ctx){ 25 | init(ctx, null); 26 | } 27 | 28 | public void init(Context ctx, OnCrash onCrash){ 29 | this.mContext = ctx; 30 | 31 | mDefHandler = Thread.getDefaultUncaughtExceptionHandler(); 32 | 33 | Thread.setDefaultUncaughtExceptionHandler(this); 34 | } 35 | 36 | @Override 37 | public void uncaughtException(Thread thread, Throwable ex) { 38 | L.e(ex); 39 | 40 | if (mOnCrash != null){ 41 | if (mOnCrash.onCrash(thread,ex)){ 42 | exit(); 43 | } 44 | } 45 | } 46 | 47 | public static String collectDeviceInfo(Context ctx){ 48 | List info = new ArrayList<>(); 49 | info.add("================ Device Info ================"); 50 | info.add("SDK: " + AndroidUtils.getSDKIntStr(Build.VERSION.SDK_INT)); 51 | info.add(AndroidUtils.getBatteryInfo(AndroidUtils.getBatteryStatus(ctx))); 52 | info.add(AndroidUtils.getSignatureInfo(ctx)); 53 | info.add("Locale: " + AndroidUtils.getLocale(Locale.getDefault())); 54 | info.add("VM: " + AndroidUtils.getVMType(System.getProperty("java.vm.version"))); 55 | info.add("==================== END ===================="); 56 | return StringUtils.join(info, "\n"); 57 | } 58 | 59 | public void exit(){ 60 | android.os.Process.killProcess(android.os.Process.myPid()); 61 | System.exit(1); 62 | } 63 | 64 | public interface OnCrash{ 65 | boolean onCrash(Thread thread, Throwable ex); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/FileUtils.java: -------------------------------------------------------------------------------- 1 | package me.gitai.library.utils; 2 | 3 | import android.content.Context; 4 | import android.database.Cursor; 5 | import android.net.Uri; 6 | 7 | /** 8 | * Created by dphdjy on 15-11-6. 9 | */ 10 | public class FileUtils { 11 | public static String getPath(Context ctx,Uri uri){ 12 | if ("content".equalsIgnoreCase(uri.getScheme())){ 13 | String[] projection = {"_data"}; 14 | Cursor cursor = null; 15 | try{ 16 | cursor = ctx.getContentResolver().query(uri,projection,null,null,null); 17 | int colemn_index = cursor.getColumnIndexOrThrow("_data"); 18 | if (cursor.moveToFirst()){ 19 | return cursor.getString(colemn_index); 20 | } 21 | }catch (Exception ex){ 22 | 23 | } 24 | }else if("file".equalsIgnoreCase(uri.getScheme())){ 25 | return uri.getPath(); 26 | } 27 | return null; 28 | }; 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/SharedPreferencesUtil.java: -------------------------------------------------------------------------------- 1 | package me.gitai.library.utils; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.preference.PreferenceManager; 6 | 7 | /** 8 | * Created by dp on 15-8-22. 9 | */ 10 | public class SharedPreferencesUtil { 11 | private static Context ctx; 12 | 13 | public static void initialize(Context context){ 14 | ctx = context; 15 | } 16 | 17 | public synchronized static SharedPreferences getInstence(String name){ 18 | if (name !=null) 19 | return ctx.getSharedPreferences(name, 0); 20 | return PreferenceManager.getDefaultSharedPreferences(ctx); 21 | } 22 | public synchronized static SharedPreferences.Editor getEditor(String name){ 23 | if (name !=null) 24 | return ctx.getSharedPreferences(name, 0).edit(); 25 | return PreferenceManager.getDefaultSharedPreferences(ctx).edit(); 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/adapter/QuickAdapter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright 2013 Joan Zapata 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | package me.gitai.library.utils.adapter; 17 | 18 | import android.content.Context; 19 | import android.view.View; 20 | import android.view.ViewGroup; 21 | 22 | import java.util.List; 23 | 24 | import static me.gitai.library.utils.adapter.BaseAdapterHelper.get; 25 | 26 | /** 27 | * Abstraction class of a BaseAdapter in which you only need 28 | * to provide the convert() implementation.
29 | * Using the provided BaseAdapterHelper, your code is minimalist. 30 | * @param The type of the items in the list. 31 | */ 32 | public abstract class QuickAdapter extends BaseQuickAdapter { 33 | 34 | /** 35 | * Create a QuickAdapter. 36 | * @param context The context. 37 | * @param layoutResId The layout resource id of each item. 38 | */ 39 | public QuickAdapter(Context context, int layoutResId) { 40 | super(context, layoutResId); 41 | } 42 | 43 | /** 44 | * Same as QuickAdapter#QuickAdapter(Context,int) but with 45 | * some initialization data. 46 | * @param context The context. 47 | * @param layoutResId The layout resource id of each item. 48 | * @param data A new list is created out of this one to avoid mutable list 49 | */ 50 | public QuickAdapter(Context context, int layoutResId, List data) { 51 | super(context,layoutResId,data); 52 | } 53 | 54 | protected BaseAdapterHelper getAdapterHelper(int position, View convertView, ViewGroup parent) { 55 | return get(context, convertView, parent, layoutResId, position); 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/io/NameGenerator.java: -------------------------------------------------------------------------------- 1 | /******************************************************************************* 2 | * Copyright 2011-2013 Sergey Tarasevich 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | *******************************************************************************/ 16 | package me.gitai.library.utils.io; 17 | 18 | public interface NameGenerator { 19 | 20 | String generate(String key); 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/library/utils/io/SafeFileNameGenerator.java: -------------------------------------------------------------------------------- 1 | package me.gitai.library.utils.io; 2 | 3 | import me.gitai.library.utils.StringUtils; 4 | 5 | /** 6 | * User: mcxiaoke 7 | * Date: 14-3-25 8 | * Time: 15:55 9 | */ 10 | public class SafeFileNameGenerator implements NameGenerator { 11 | 12 | @Override 13 | public String generate(String key) { 14 | return StringUtils.toSafeFileName(key); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/Constant.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper; 2 | 3 | /** 4 | * Created by gitai on 16-1-3. 5 | */ 6 | public class Constant { 7 | public static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE"; 8 | 9 | public static final String COMPONENTNAME_MAIN = "me.gitai.smscodehelper.MainPreferences"; 10 | 11 | 12 | public static final String KEY_CLIP_LABEL = "SMSCode"; 13 | public static final String KEY_BUNDLE_SMS_CODE = "smscode"; 14 | public static final String KEY_SMS_PDUS = "pdus"; 15 | 16 | public static final String KEY_GENERAL_RUN = "general_enable"; 17 | public static final String KEY_GENERAL_HIDDEN_ICON = "general_hidden_icon"; 18 | public static final String KEY_GENERAL_GUESS = "general_guess"; 19 | public static final String KEY_GENERAL_TEST = "general_test"; 20 | 21 | public static final String KEY_PARSE_TYPE = "parse_type"; 22 | public static final String KEY_PARSE_KEYWORDS = "parse_keywords"; 23 | public static final String KEY_PARSE_AMBIGUITIES = "parse_ambiguities"; 24 | public static final String KEY_PARSE_REGEXS_PROVIDER = "parse_provider_regexs"; 25 | public static final String KEY_PARSE_REGEXS_CAPTCHAS = "parse_captchas_regexs"; 26 | 27 | public static final String KEY_TASK_COPY = "task_copy"; 28 | public static final String KEY_TASK_CLIPBOARD_CHECK = "task_clipboard_check"; 29 | public static final String KEY_TASK_NOTIFICATION = "task_notification"; 30 | public static final String KEY_TASK_INTERCEPT = "task_intercept"; 31 | 32 | public static final String KEY_ABOUT_HELP_FEEDBACK = "parse_captchas_regexs"; 33 | public static final String KEY_ABOUT_RATE_APP = "about_rate_app"; 34 | public static final String KEY_ABOUT_DONATE = "about_donate"; 35 | public static final String KEY_ABOUT_LICENSE = "about_license"; 36 | public static final String KEY_ABOUT_VERSION = "about_version"; 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/SMSApp.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper; 2 | 3 | import android.app.Application; 4 | import android.content.Intent; 5 | 6 | import me.gitai.library.utils.CrashUtil; 7 | import me.gitai.library.utils.IOUtils; 8 | import me.gitai.library.utils.L; 9 | import me.gitai.library.utils.SharedPreferencesUtil; 10 | import me.gitai.library.utils.StringUtils; 11 | import me.gitai.library.utils.ToastUtil; 12 | import me.gitai.smscodehelper.ui.MainPreferences; 13 | 14 | /** 15 | * Created by gitai on 15-12-12. 16 | */ 17 | public class SMSApp extends Application{ 18 | @Override 19 | public void onCreate() { 20 | super.onCreate(); 21 | L.setLogcatEnable(this, true); 22 | L.setLogToFileEnable(true, this); 23 | SharedPreferencesUtil.initialize(this); 24 | ToastUtil.initialize(this); 25 | 26 | CrashUtil.getInstance().init(this, new CrashUtil.OnCrash() { 27 | @Override 28 | public boolean onCrash(Thread thread, Throwable th) { 29 | ToastUtil.show(CrashUtil.collectDeviceInfo(SMSApp.this),th); 30 | try{ 31 | IOUtils.writeString(CrashUtil.collectDeviceInfo(SMSApp.this)+th.getLocalizedMessage(), 32 | openFileOutput(StringUtils.toSafeFileName("crash-" + System.nanoTime() + ".log"), MODE_WORLD_WRITEABLE)); 33 | }catch (Exception ex){ 34 | L.e(ex); 35 | } 36 | restart(); 37 | return false; 38 | } 39 | }); 40 | } 41 | 42 | public void restart(){ 43 | Intent intent = new Intent(); 44 | intent.setClass(this, MainPreferences.class); 45 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 46 | this.startActivity(intent); 47 | android.os.Process.killProcess(android.os.Process.myPid()); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/hook/SmsReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | package me.gitai.smscodehelper.hook; 3 | 4 | import android.content.BroadcastReceiver; 5 | import android.content.ComponentName; 6 | import android.content.Context; 7 | import android.content.Intent; 8 | import android.provider.Telephony.Sms.Intents; 9 | 10 | public class SmsReceiver extends BroadcastReceiver { 11 | private final ComponentName componentName; 12 | 13 | public SmsReceiver(ComponentName componentName) { 14 | this.componentName = componentName; 15 | } 16 | 17 | @Override 18 | public void onReceive(Context context, Intent intent) { 19 | if (intent.getAction().equals(Intents.SMS_RECEIVED_ACTION)) { 20 | intent.setAction(Intents.SMS_DELIVER_ACTION); 21 | } else if (intent.getAction().equals(Intents.WAP_PUSH_RECEIVED_ACTION)) { 22 | intent.setAction(Intents.WAP_PUSH_DELIVER_ACTION); 23 | } 24 | intent.setComponent(componentName); 25 | 26 | context.sendBroadcast(intent); 27 | } 28 | 29 | public ComponentName getComponentName() { 30 | return componentName; 31 | } 32 | }*/ 33 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/receiver/CopyReceiver.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper.receiver; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.ClipData; 5 | import android.content.ClipboardManager; 6 | import android.content.Context; 7 | import android.content.Intent; 8 | import android.os.Bundle; 9 | 10 | import me.gitai.library.utils.ToastUtil; 11 | import me.gitai.smscodehelper.Constant; 12 | import me.gitai.smscodehelper.R; 13 | import me.gitai.library.utils.StringUtils; 14 | 15 | /** 16 | * Created by gitai on 15-12-30. 17 | */ 18 | public class CopyReceiver extends BroadcastReceiver { 19 | @Override 20 | public void onReceive(Context context, Intent intent) { 21 | Bundle b = intent.getExtras(); 22 | if (b != null){ 23 | String code = b.getString(Constant.KEY_BUNDLE_SMS_CODE); 24 | 25 | if (StringUtils.isEmpty(code)){ 26 | return; 27 | } 28 | 29 | // 复制到剪贴板 30 | ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); 31 | ClipData clipData = ClipData.newPlainText(Constant.KEY_CLIP_LABEL, code); 32 | clipboardManager.setPrimaryClip(clipData); 33 | 34 | // toast 35 | ToastUtil.showId(R.string.format_copy_success,code); 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/receiver/QueryReceiver.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper.receiver; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.os.Bundle; 7 | 8 | import me.gitai.library.utils.L; 9 | import me.gitai.library.utils.SharedPreferencesUtil; 10 | import me.gitai.library.utils.StringUtils; 11 | import me.gitai.library.utils.ToastUtil; 12 | import me.gitai.smscodehelper.Constant; 13 | import me.gitai.smscodehelper.R; 14 | import me.gitai.smscodehelper.bean.MSG; 15 | import me.gitai.smscodehelper.bundle.BundleScrubber; 16 | import me.gitai.smscodehelper.bundle.PluginBundleManager; 17 | import me.gitai.smscodehelper.ui.TaskerActivity; 18 | import me.gitai.smscodehelper.utils.TaskerPlugin; 19 | 20 | /** 21 | * Created by gitai on 16-2-4. 22 | */ 23 | public final class QueryReceiver extends BroadcastReceiver{ 24 | protected static final Intent INTENT_REQUEST_REQUERY = 25 | new Intent(com.twofortyfouram.locale.Intent.ACTION_REQUEST_QUERY).putExtra(com.twofortyfouram.locale.Intent.EXTRA_ACTIVITY, 26 | TaskerActivity.class.getName()); 27 | @Override 28 | public void onReceive(Context context, Intent intent) { 29 | if (!com.twofortyfouram.locale.Intent.ACTION_QUERY_CONDITION.equals(intent.getAction())){ 30 | L.d(String.format("Received unexpected Intent action %s", intent.getAction())); 31 | return; 32 | } 33 | 34 | BundleScrubber.scrub(intent); 35 | 36 | final Bundle bundle = intent.getBundleExtra(com.twofortyfouram.locale.Intent.EXTRA_BUNDLE); 37 | BundleScrubber.scrub(bundle); 38 | 39 | if (PluginBundleManager.isBundleValid(bundle)){ 40 | L.d(String.format("Screen state is b and condition state is b")); 41 | /*if ( messageID == -1 ){ 42 | setResultCode( com.twofortyfouram.locale.Intent.RESULT_CONDITION_UNKNOWN ); 43 | }*/ 44 | TaskerPlugin.Event.addPassThroughMessageID( INTENT_REQUEST_REQUERY ); 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/receiver/SecretCodeReceiver.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper.receiver; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | 7 | import me.gitai.library.utils.L; 8 | import me.gitai.library.utils.PackageUtils; 9 | import me.gitai.smscodehelper.Constant; 10 | import me.gitai.smscodehelper.ui.MainPreferences; 11 | 12 | /** 13 | * Created by gitai on 16-1-2. 14 | */ 15 | public class SecretCodeReceiver extends BroadcastReceiver { 16 | @Override 17 | public void onReceive(Context context, Intent intent) { 18 | PackageUtils.enableComponent(context, MainPreferences.class); 19 | L.d(intent.getAction()); 20 | if (intent.getAction().equals(Constant.SECRET_CODE_ACTION)){ 21 | L.i("Start via SECRET_CODE"); 22 | Intent i = new Intent(Intent.ACTION_MAIN); 23 | i.setClass(context, MainPreferences.class); 24 | i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 25 | context.startActivity(i); 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/me/gitai/smscodehelper/widget/InertCheckBox.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper.widget; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.KeyEvent; 6 | import android.view.MotionEvent; 7 | import android.widget.CheckBox; 8 | 9 | /** 10 | * CheckBox that does not react to any user event in order to let the container handle them. 11 | */ 12 | public class InertCheckBox extends CheckBox { 13 | 14 | public InertCheckBox(Context context, AttributeSet attrs, int defStyle) { 15 | super(context, attrs, defStyle); 16 | } 17 | 18 | public InertCheckBox(Context context, AttributeSet attrs) { 19 | super(context, attrs); 20 | } 21 | 22 | public InertCheckBox(Context context) { 23 | super(context); 24 | } 25 | 26 | @Override 27 | public boolean onTouchEvent(MotionEvent event) { 28 | return false; 29 | } 30 | 31 | @Override 32 | public boolean onKeyDown(int keyCode, KeyEvent event) { 33 | return false; 34 | } 35 | 36 | @Override 37 | public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { 38 | return false; 39 | } 40 | 41 | @Override 42 | public boolean onKeyPreIme(int keyCode, KeyEvent event) { 43 | return false; 44 | } 45 | 46 | @Override 47 | public boolean onKeyShortcut(int keyCode, KeyEvent event) { 48 | return false; 49 | } 50 | 51 | @Override 52 | public boolean onKeyUp(int keyCode, KeyEvent event) { 53 | return false; 54 | } 55 | 56 | @Override 57 | public boolean onTrackballEvent(MotionEvent event) { 58 | return false; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-hdpi/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/drawable-hdpi/ic_notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-mdpi/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/drawable-mdpi/ic_notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/drawable-xhdpi/ic_notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/drawable-xxhdpi/ic_notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/ic_notify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/drawable-xxxhdpi/ic_notify.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/button.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/material_card.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/material_card_nos.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/material_card_nos_pressed.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/material_dialog_window.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_log.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 13 | 14 | 22 | 23 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_about.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 10 | 11 | 18 | 19 | 27 | 28 | 40 | 41 | 42 | 43 | 47 | 52 | 53 | 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_editdialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_tasker.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 19 | 20 | 27 | 28 | 35 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/layout_test.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 14 | 15 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout/spinner_item.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values-v14/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/values-v19/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Enable intercept 3 | 4 | Android does not allow apps other than the default SMS app to intercept 5 | SMS messages or write to the SMS inbox.\n\nTo bypass this restriction, 6 | you must install the Xposed and enable. Until you do so, this function will not work. 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-w820dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 64dp 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/values-zh-rCN-v19/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 启用拦截 3 | 4 | 不允许非默认收信应用拦截短信或者操作收件箱。\n\n为了突破这个限制,你必须安装 Xposed 并且启用。在此之前,这个功能将无法使用。 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #E91E63 4 | #C2185B 5 | #F8BBD0 6 | #607D8B 7 | 8 | #212121 9 | #727272 10 | #B6B6B6 11 | 12 | #EEE 13 | #ffffff 14 | #10000000 15 | #ff359ff2 16 | #00000000 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16dp 4 | 16dp 5 | 16dp 6 | 16dp 7 | 8dp 8 | 4dp 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /app/src/test/java/me/gitai/smscodehelper/utils/ParseAboutXmlTest.java: -------------------------------------------------------------------------------- 1 | package me.gitai.smscodehelper.utils; 2 | 3 | import junit.framework.TestCase; 4 | 5 | /** 6 | * Created by gitai on 16-2-5. 7 | */ 8 | public class ParseAboutXmlTest extends TestCase { 9 | public void testParse(){ 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:1.3.1' 9 | } 10 | } 11 | 12 | allprojects { 13 | repositories { 14 | jcenter() 15 | } 16 | } 17 | 18 | task clean(type: Delete) { 19 | delete rootProject.buildDir 20 | } 21 | 22 | subprojects { 23 | ext { 24 | config = [ 25 | applicationId : "me.gitai.smscodehelper", 26 | 27 | compileSdkVersion : 23, 28 | buildToolsVersion : "23.0.1", 29 | minSdkVersion : 15, 30 | targetSdkVersion : 23, 31 | 32 | releaseSigning : [ 33 | storeFile : System.getenv("KEYSTORE"), 34 | storePassword : System.getenv("KEYSTORE_PASSWORD"), 35 | alias : System.getenv("KEY_ALIAS"), 36 | aliasPassword: System.getenv("KEY_PASSWORD") 37 | ], 38 | 39 | versionCode : 10, 40 | versionName : "0.0.8" 41 | ] 42 | 43 | versions = [ 44 | androidSupport : "23.1.1", 45 | junit:"4.1.2", 46 | robolectric:"3.0-rc3", 47 | espresso:"2.2.1", 48 | runner:"0.4.1", 49 | fastjson:"1.2.7" 50 | ] 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /buildscripts/jacoco.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'jacoco' 2 | 3 | jacoco { 4 | toolVersion = versions.jacoco 5 | } 6 | 7 | /** 8 | * Create a code-coverage report task for the given build variant 9 | */ 10 | def createJacocoTask(variant) { 11 | def buildTypeName = variant.buildType.name.capitalize() 12 | def flavorName = variant.flavorName.capitalize() 13 | 14 | def testTaskName = "test${flavorName}${buildTypeName}UnitTest" 15 | 16 | //noinspection GroovyAssignabilityCheck 17 | task "${testTaskName}Coverage"(type: JacocoReport, dependsOn: testTaskName) { 18 | group = "Reporting" 19 | description = "Generate Jacoco coverage reports for variant ${variant.name}" 20 | 21 | classDirectories = fileTree( 22 | dir: "${project.buildDir}/intermediates/classes/${variant.dirName}", 23 | excludes: ['**/R.class', 24 | '**/R$*.class', 25 | '**/*$$*.*', 26 | '**/*_MembersInjector.*', 27 | '**/BuildConfig.*', 28 | '**/Manifest*.*', 29 | 30 | // App-specific classes 31 | 'com/dphdjy/android/seed/module/*', 32 | 'com/dphdjy/android/seed/mvp/view/*', 33 | 34 | // These classes either aren't testable or aren't important.. 35 | 'com/dphdjy/android/seed/util/CrashlyticsLogger.*'] 36 | ) 37 | 38 | def coverageSourceDirs = ["${rootDir}/app/src/main/java"] 39 | additionalSourceDirs = files(coverageSourceDirs) 40 | sourceDirectories = files(coverageSourceDirs) 41 | executionData = files("${project.buildDir}/jacoco/${testTaskName}.exec") 42 | 43 | reports { 44 | xml.enabled = true 45 | html.enabled = true 46 | } 47 | } 48 | } 49 | 50 | // Export our functions 51 | ext { 52 | createJacocoTask = this.&createJacocoTask 53 | } -------------------------------------------------------------------------------- /buildscripts/utils.gradle: -------------------------------------------------------------------------------- 1 | def isCiBuild() { 2 | def buildTag = System.getenv("BUILD_TAG") 3 | return buildTag?.startsWith("jenkins") ? true : false 4 | } 5 | 6 | def getBuildTime() { 7 | return new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'").format(new Date()) 8 | } 9 | 10 | /** 11 | * Get the Git Sha 12 | * @return The abbreviated git sha 13 | */ 14 | def gitSha() { 15 | return 'git rev-parse --short HEAD'.execute().text.trim() 16 | } 17 | 18 | /** 19 | * Extracts Git branch name from env variable or using local Git. 20 | * 21 | * @return Branch name, e.g. "develop". 22 | */ 23 | def gitBranchName() { 24 | def branchName = System.getenv("GIT_BRANCH") 25 | if (branchName != null) { 26 | // Use env value, check for undesired "origin/" prefix (passed by Jenkins) 27 | def originPrefix = "origin/" 28 | if (branchName.startsWith(originPrefix)) { 29 | branchName = branchName.substring(originPrefix.length()) 30 | } 31 | } else { 32 | // Otherwise, attempt to extract branch from local Git 33 | branchName = "git --work-tree=${rootDir}/.. rev-parse --abbrev-ref HEAD".execute().text.trim() 34 | } 35 | return branchName.replaceAll("/", "_").replaceAll(" ", "_") 36 | } 37 | 38 | def getCiBuildNumber() { 39 | String buildNumber = System.getenv('BUILD_NUMBER'); 40 | if (buildNumber == null) { 41 | return 'local' 42 | } else { 43 | return buildNumber 44 | } 45 | } 46 | 47 | // Export our functions 48 | ext { 49 | isCiBuild = this.&isCiBuild 50 | gitBranchName = this.&gitBranchName 51 | getCiBuildNumber = this.&getCiBuildNumber 52 | getGitSha = this.&gitSha 53 | getBuildTime = this.&getBuildTime 54 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | ## Project-wide Gradle settings. 2 | # 3 | # For more details on how to configure your build environment visit 4 | # http://www.gradle.org/docs/current/userguide/build_environment.html 5 | # 6 | # Specifies the JVM arguments used for the daemon process. 7 | # The setting is particularly useful for tweaking memory settings. 8 | # Default value: -Xmx10248m -XX:MaxPermSize=256m 9 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 10 | # 11 | # When configured, Gradle will run in incubating parallel mode. 12 | # This option should only be used with decoupled projects. More details, visit 13 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 14 | # org.gradle.parallel=true 15 | #Sat Dec 12 19:17:04 CST 2015 16 | systemProp.http.proxyHost=mirrors.opencas.cn 17 | systemProp.http.proxyPort=80 18 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Wed Oct 21 11:34:03 PDT 2015 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.8-all.zip 7 | -------------------------------------------------------------------------------- /ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/ic_launcher.png -------------------------------------------------------------------------------- /localeapi/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.library' 2 | 3 | android { 4 | compileSdkVersion config.compileSdkVersion 5 | buildToolsVersion config.buildToolsVersion 6 | 7 | defaultConfig { 8 | minSdkVersion 3 9 | targetSdkVersion 17 10 | } 11 | 12 | buildTypes { 13 | release { 14 | minifyEnabled false 15 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt' 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /localeapi/demo/display.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display.zip -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/License.txt: -------------------------------------------------------------------------------- 1 | Copyright 2013 two forty four a.m. LLC 2 | 3 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at 4 | 5 | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/Read Me.txt: -------------------------------------------------------------------------------- 1 | This is a library project for the Locale Developer API. For documentation on Android Library Projects, please visit . -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/lint.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/project.properties: -------------------------------------------------------------------------------- 1 | # This file is automatically generated by Android Tools. 2 | # Do not modify this file -- YOUR CHANGES WILL BE ERASED! 3 | # 4 | # This file must be checked in Version Control Systems. 5 | # 6 | # To customize properties used by the Ant build system use, 7 | # "ant.properties", and override values to adapt the script to your 8 | # project structure. 9 | 10 | android.library=true 11 | # Project target. 12 | target=android-17 13 | manifestmerger.enabled=true 14 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-hdpi-v14/twofortyfouram_locale_ic_menu_dontsave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-hdpi-v14/twofortyfouram_locale_ic_menu_dontsave.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-hdpi-v14/twofortyfouram_locale_ic_menu_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-hdpi-v14/twofortyfouram_locale_ic_menu_help.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-hdpi-v14/twofortyfouram_locale_ic_menu_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-hdpi-v14/twofortyfouram_locale_ic_menu_save.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-ldpi-v14/twofortyfouram_locale_ic_menu_dontsave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-ldpi-v14/twofortyfouram_locale_ic_menu_dontsave.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-ldpi-v14/twofortyfouram_locale_ic_menu_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-ldpi-v14/twofortyfouram_locale_ic_menu_help.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-ldpi-v14/twofortyfouram_locale_ic_menu_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-ldpi-v14/twofortyfouram_locale_ic_menu_save.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-mdpi-v14/twofortyfouram_locale_ic_menu_dontsave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-mdpi-v14/twofortyfouram_locale_ic_menu_dontsave.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-mdpi-v14/twofortyfouram_locale_ic_menu_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-mdpi-v14/twofortyfouram_locale_ic_menu_help.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-mdpi-v14/twofortyfouram_locale_ic_menu_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-mdpi-v14/twofortyfouram_locale_ic_menu_save.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-xhdpi-v14/twofortyfouram_locale_ic_menu_dontsave.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-xhdpi-v14/twofortyfouram_locale_ic_menu_dontsave.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-xhdpi-v14/twofortyfouram_locale_ic_menu_help.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-xhdpi-v14/twofortyfouram_locale_ic_menu_help.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable-xhdpi-v14/twofortyfouram_locale_ic_menu_save.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/GitaiQAQ/SMSCodeHelper/2bbad74aa020a1f028948446f4803833274de89e/localeapi/demo/display/locale-api/res/drawable-xhdpi-v14/twofortyfouram_locale_ic_menu_save.png -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable/twofortyfouram_locale_ic_menu_dontsave.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable/twofortyfouram_locale_ic_menu_help.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/drawable/twofortyfouram_locale_ic_menu_save.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 18 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/menu/twofortyfouram_locale_help_save_dontsave.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 19 | 20 | 21 | 22 | 27 | 28 | 32 | 33 | 38 | 39 | 40 | 41 | 47 | 48 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-cs/strings-cs.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Zrušit 20 | Nápověda 21 | Hotovo 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-de/strings-de.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Abbrechen 20 | Hilfe 21 | Fertig 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-es/strings-es.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Cancelar 20 | Ayuda 21 | Listo 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-fr/strings-fr.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Annuler 20 | Aide 21 | OK 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-hdpi/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 60 18 | 19 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-it/strings-it.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Annulla 20 | Aiuto 21 | Fine 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-ja/strings-ja.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | キャンセル 20 | ヘルプ 21 | 完了 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-ko/strings-ko.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | 취소 20 | 도움말 21 | 완료 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-ldpi/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 45 18 | 19 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-mdpi/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 50 19 | 20 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-nb/strings-nb.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Avbryt 20 | Hjelp 21 | Ferdig 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-nl/strings-nl.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Annuleren 20 | Help 21 | Gereed 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-pt-rBR/strings-pt-rBR.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Cancelar 20 | Ajuda 21 | Concluído 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-ru/strings-ru.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Отмена 20 | Помощь 21 | Готово 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-sv/strings-sv.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Avbryt 20 | Hjälp 21 | Klar 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-v11/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 20 | 21 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values-vi/strings-vi.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Hủy 20 | Giúp đỡ 21 | Xong 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values/id.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values/strings-en.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | %1$s%2$s%3$s 19 | 20 | 21 | \u0020>\u0020 22 | 23 | 24 | Cancel 25 | 26 | 27 | Help 28 | 29 | 30 | Done 31 | 32 | -------------------------------------------------------------------------------- /localeapi/demo/display/locale-api/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /localeapi/demo/toast/locale-api/res/values-vi/strings-vi.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Hủy 20 | Giúp đỡ 21 | Xong 22 | 23 | -------------------------------------------------------------------------------- /localeapi/demo/toast/locale-api/res/values/id.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /localeapi/demo/toast/locale-api/res/values/strings-en.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | %1$s%2$s%3$s 19 | 20 | 21 | \u0020>\u0020 22 | 23 | 24 | Cancel 25 | 26 | 27 | Help 28 | 29 | 30 | Done 31 | 32 | -------------------------------------------------------------------------------- /localeapi/demo/toast/locale-api/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 20 | 21 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /localeapi/src/main/res/values-vi/strings-vi.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | %1$s%2$s%3$s 18 | \u0020>\u0020 19 | Hủy 20 | Giúp đỡ 21 | Xong 22 | 23 | -------------------------------------------------------------------------------- /localeapi/src/main/res/values/id.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /localeapi/src/main/res/values/strings-en.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 | %1$s%2$s%3$s 19 | 20 | 21 | \u0020>\u0020 22 | 23 | 24 | Cancel 25 | 26 | 27 | Help 28 | 29 | 30 | Done 31 | 32 | -------------------------------------------------------------------------------- /localeapi/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 15 | 16 | 17 | 18 |