├── .gitignore ├── README.md ├── app ├── .gitignore ├── build.gradle ├── libs │ └── bdasr_V3_20180801_d6f298a.jar ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── baidu_speech_grammar.bsg │ └── voice │ │ ├── data.json │ │ ├── seq_0_0.png │ │ ├── seq_0_1.png │ │ ├── seq_0_10.png │ │ ├── seq_0_11.png │ │ ├── seq_0_12.png │ │ ├── seq_0_13.png │ │ ├── seq_0_14.png │ │ ├── seq_0_15.png │ │ ├── seq_0_16.png │ │ ├── seq_0_17.png │ │ ├── seq_0_18.png │ │ ├── seq_0_19.png │ │ ├── seq_0_2.png │ │ ├── seq_0_20.png │ │ ├── seq_0_21.png │ │ ├── seq_0_22.png │ │ ├── seq_0_23.png │ │ ├── seq_0_24.png │ │ ├── seq_0_25.png │ │ ├── seq_0_26.png │ │ ├── seq_0_27.png │ │ ├── seq_0_28.png │ │ ├── seq_0_29.png │ │ ├── seq_0_3.png │ │ ├── seq_0_30.png │ │ ├── seq_0_31.png │ │ ├── seq_0_32.png │ │ ├── seq_0_33.png │ │ ├── seq_0_34.png │ │ ├── seq_0_35.png │ │ ├── seq_0_36.png │ │ ├── seq_0_37.png │ │ ├── seq_0_38.png │ │ ├── seq_0_39.png │ │ ├── seq_0_4.png │ │ ├── seq_0_40.png │ │ ├── seq_0_41.png │ │ ├── seq_0_42.png │ │ ├── seq_0_43.png │ │ ├── seq_0_44.png │ │ ├── seq_0_45.png │ │ ├── seq_0_46.png │ │ ├── seq_0_47.png │ │ ├── seq_0_48.png │ │ ├── seq_0_49.png │ │ ├── seq_0_5.png │ │ ├── seq_0_6.png │ │ ├── seq_0_7.png │ │ ├── seq_0_8.png │ │ └── seq_0_9.png │ ├── java │ └── com │ │ └── dfzq │ │ └── dset │ │ └── demo │ │ ├── BaiduRecognizer.java │ │ └── LoginActivity.java │ ├── jniLibs │ ├── armeabi-v7a │ │ ├── libBaiduSpeechSDK.so │ │ ├── libbdEASRAndroid.so │ │ ├── libbdSpilWakeup.so │ │ ├── libbd_easr_s1_merge_normal_20151216.dat.so │ │ └── libvad.dnn.so │ └── armeabi │ │ ├── libBaiduSpeechSDK.so │ │ ├── libbdEASRAndroid.so │ │ ├── libbdSpilWakeup.so │ │ ├── libbd_easr_s1_merge_normal_20151216.dat.so │ │ └── libvad.dnn.so │ └── res │ ├── drawable │ ├── clear_search.png │ ├── dset_keyboard_logo.9.png │ ├── dset_keyboard_logo_bg_small.xml │ ├── logo.png │ ├── shape_corner_3.xml │ └── stock_search.png │ ├── layout │ ├── activity_login.xml │ └── layout_voice_tips.xml │ ├── mipmap-hdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-mdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ ├── mipmap-xxxhdpi │ ├── ic_launcher.png │ └── ic_launcher_round.png │ └── values │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── styles.xml ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── jitpack.yml ├── library ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── dfzq │ │ │ └── dset │ │ │ ├── DsetKeyboard.java │ │ │ ├── KeyboardDialog.java │ │ │ ├── KeyboardListener.java │ │ │ ├── KeyboardManager.java │ │ │ ├── SecurityAutoCompleteEditText.java │ │ │ ├── SecurityEditText.java │ │ │ ├── SecurityEditTextDelegate.java │ │ │ ├── SecurityEditTextInterface.java │ │ │ ├── ViewUtils.java │ │ │ ├── VoiceInputStateChangeListener.java │ │ │ ├── VoiceRecognizer.java │ │ │ ├── provider │ │ │ ├── DefaultRecognizer.java │ │ │ ├── Recognizer.java │ │ │ └── RecognizerListener.java │ │ │ └── view │ │ │ └── SecretKeyboardView.java │ └── res │ │ ├── anim │ │ ├── pop_from_button_down.xml │ │ └── pop_from_button_up.xml │ │ ├── drawable-xxhdpi │ │ ├── arrow_left.png │ │ ├── dset_keyboard_btn_normal.9.png │ │ ├── dset_keyboard_btn_press.9.png │ │ ├── dset_keyboard_voice_speech_off_gray.png │ │ └── dset_keyboard_voice_speech_on_white.png │ │ ├── drawable │ │ ├── btn_selector_bg.xml │ │ ├── corner_gray_bg.xml │ │ ├── corner_white_bg.xml │ │ ├── dset_bg_keyboardview.xml │ │ ├── dset_btn_keyboard_special_bg.xml │ │ ├── dset_btn_keyboard_special_normal_bg.xml │ │ ├── dset_btn_keyboard_special_press_bg.xml │ │ ├── dset_ic_keyboard_backspace_black_32dp.xml │ │ ├── dset_ic_keyboard_capslock_lower_32dp.xml │ │ ├── dset_ic_keyboard_capslock_up_32dp.xml │ │ ├── dset_ic_keyboard_hide_black_32dp.xml │ │ ├── dset_keyboard_bolder_bg.xml │ │ └── dset_keyboard_special_btn_bg.xml │ │ ├── layout │ │ ├── dset_keyboard.xml │ │ ├── dset_keyboard_animattion.xml │ │ ├── dset_keyboard_layout.xml │ │ └── dset_keyboard_voice.xml │ │ ├── values │ │ ├── attrs.xml │ │ ├── colors.xml │ │ ├── keys.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ ├── dset_keyboard_abc.xml │ │ ├── dset_keyboard_id.xml │ │ ├── dset_keyboard_num.xml │ │ ├── dset_keyboard_num_only.xml │ │ ├── dset_keyboard_stock_letter.xml │ │ └── dset_keyboard_stock_number.xml │ └── test │ └── java │ └── com │ └── dfzq │ └── dset │ └── ExampleUnitTest.java └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SecurityEditText 2 | 自定义文本输入框,支持安全键盘、股票代码 -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | 3 | android { 4 | compileSdkVersion 33 5 | defaultConfig { 6 | applicationId "com.dfzq.set" 7 | minSdkVersion 21 8 | targetSdkVersion 33 9 | versionCode 1 10 | versionName "1.0.0" 11 | ndk { 12 | abiFilters "armeabi-v7a", "x86" 13 | } 14 | } 15 | buildTypes { 16 | release { 17 | minifyEnabled false 18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 19 | } 20 | } 21 | } 22 | 23 | dependencies { 24 | testImplementation 'junit:junit:4.13.2' 25 | implementation fileTree(dir: 'libs', include: ['*.jar']) 26 | implementation 'androidx.appcompat:appcompat:1.6.0' 27 | implementation 'com.google.android.material:material:1.8.0' 28 | //implementation 'com.dfzq.android.widget:securitykeyboard:1.3.2' 29 | implementation project(':library') 30 | implementation 'javax.inject:javax.inject:1' 31 | } 32 | -------------------------------------------------------------------------------- /app/libs/bdasr_V3_20180801_d6f298a.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/libs/bdasr_V3_20180801_d6f298a.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 H:\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 | # Uncomment this to preserve the line number information for 20 | # debugging stack traces. 21 | #-keepattributes SourceFile,LineNumberTable 22 | 23 | # If you keep the line number information, uncomment this to 24 | # hide the original source file name. 25 | #-renamesourcefileattribute SourceFile 26 | -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 22 | 25 | 28 | 31 | 32 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /app/src/main/assets/baidu_speech_grammar.bsg: -------------------------------------------------------------------------------- 1 | %7B%0A%20%20%20%20%22version%22%3A%20%220.1%22%2C%0A%20%20%20%20%22slots%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22name%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E5%BC%A0%E4%B8%89%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E6%9D%8E%E5%9B%9B%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E7%8E%8B%E4%BA%94%22%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22appname%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E5%BE%AE%E4%BF%A1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E7%9F%AD%E4%BF%A1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%E8%AE%A1%E7%AE%97%E5%99%A8%22%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22msgbody%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22.%2B%22%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22rules%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%22telephone.call%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%89%93%E7%94%B5%E8%AF%9D%E7%BB%99%3Cname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%89%93%E7%94%B5%E8%AF%9D%E7%BB%99(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%89%93%E7%BB%99%3Cname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%89%93%E7%BB%99(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E5%91%BC%E5%8F%AB%3Cname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E5%91%BC%E5%8F%AB(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E7%BB%99%3Cname%3E%E6%89%93%E7%94%B5%E8%AF%9D%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E7%BB%99(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%E6%89%93%E7%94%B5%E8%AF%9D%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22contacts.view%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%9F%A5%E7%9C%8B%3Cname%3E%E7%9A%84%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%9F%A5%E7%9C%8B(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%E7%9A%84%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%9F%A5%E7%9C%8B%3Cname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%9F%A5%E7%9C%8B(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22contacts.create%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%96%B0%E5%BB%BA%E8%81%94%E7%B3%BB%E4%BA%BA%3Cname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%96%B0%E5%BB%BA%E8%81%94%E7%B3%BB%E4%BA%BA(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22contacts.remove%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E5%88%A0%E9%99%A4%3Cname%3E%E7%9A%84%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E5%88%A0%E9%99%A4(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%E7%9A%84%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22message.view%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%9F%A5%E7%9C%8B%E6%9C%AA%E8%AF%BB%E7%9F%AD%E4%BF%A1%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%9F%A5%E7%9C%8B%E6%9C%AA%E8%AF%BB%E7%9F%AD%E4%BF%A1%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22message.send%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%E5%86%85%E5%AE%B9%E6%98%AF%3Cmsgbody%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99(%E5%BC%A0%E4%B8%89%7C%E6%9D%8E%E5%9B%9B%7C%E7%8E%8B%E4%BA%94)%E5%86%85%E5%AE%B9%E6%98%AF(.%2B)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22name%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22msgbody%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22app.open%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%89%93%E5%BC%80%3Cappname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%89%93%E5%BC%80(%E5%BE%AE%E4%BF%A1%7C%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%7C%E7%9F%AD%E4%BF%A1%7C%E8%AE%A1%E7%AE%97%E5%99%A8)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22appname%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E5%90%AF%E5%8A%A8%3Cappname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E5%90%AF%E5%8A%A8(%E5%BE%AE%E4%BF%A1%7C%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%7C%E7%9F%AD%E4%BF%A1%7C%E8%AE%A1%E7%AE%97%E5%99%A8)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22appname%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22app.search%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E6%90%9C%E7%B4%A2%3Cappname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E6%90%9C%E7%B4%A2(%E5%BE%AE%E4%BF%A1%7C%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%7C%E7%9F%AD%E4%BF%A1%7C%E8%AE%A1%E7%AE%97%E5%99%A8)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22appname%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%22app.download%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22origin%22%3A%20%22%E4%B8%8B%E8%BD%BD%3Cappname%3E%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22pattern%22%3A%20%22%5E%E4%B8%8B%E8%BD%BD(%E5%BE%AE%E4%BF%A1%7C%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%7C%E7%9F%AD%E4%BF%A1%7C%E8%AE%A1%E7%AE%97%E5%99%A8)%24%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22groups%22%3A%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22appname%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%7D%2C%0A%20%20%20%20%22grammar%22%3A%20%22%3Cname%3E%20%3D%20%E5%BC%A0%E4%B8%89%7C%20%5Cn%E6%9D%8E%E5%9B%9B%7C%20%5Cn%E7%8E%8B%E4%BA%94%3B%5Cn%3Cappname%3E%20%3D%20%E5%BE%AE%E4%BF%A1%7C%20%5Cn%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%7C%20%5Cn%E7%9F%AD%E4%BF%A1%7C%20%5Cn%E8%AE%A1%E7%AE%97%E5%99%A8%3B%5Cn%3Cmsgbody%3E%20%3D%20%E8%AF%8D%E6%9D%A1%E9%BB%98%E8%AE%A4%E5%80%BC%3B%5Cn%3Cauto_create_node%3E%20%3D%20%E6%9F%A5%E7%9C%8B%E6%9C%AA%E8%AF%BB%E7%9F%AD%E4%BF%A1%3B%5Cn%3C_wakeup%3E%20%3D%20%E5%94%A4%E9%86%92%E8%AF%8D%E5%8D%A0%E4%BD%8D%E7%AC%A6%3B%5Cn%5Cn%5Cn_SCENE_ID_%200%5Cn%5Cn(%20%3Cauto_create_node%3E%20)%5Cn%5Cn(%20%3C_wakeup%3E%3Cauto_create_node%3E%20)%5Cn%5Cn(%20%E6%89%93%E7%94%B5%E8%AF%9D%E7%BB%99%3Cname%3E%20)%5Cn(%20%3C_wakeup%3E%E6%89%93%E7%94%B5%E8%AF%9D%E7%BB%99%3Cname%3E%20)%5Cn(%20%E6%89%93%E7%BB%99%3Cname%3E%20)%5Cn(%20%3C_wakeup%3E%E6%89%93%E7%BB%99%3Cname%3E%20)%5Cn(%20%E5%91%BC%E5%8F%AB%3Cname%3E%20)%5Cn(%20%3C_wakeup%3E%E5%91%BC%E5%8F%AB%3Cname%3E%20)%5Cn(%20%E7%BB%99%3Cname%3E%E6%89%93%E7%94%B5%E8%AF%9D%20)%5Cn(%20%3C_wakeup%3E%E7%BB%99%3Cname%3E%E6%89%93%E7%94%B5%E8%AF%9D%20)%5Cn(%20%E6%9F%A5%E7%9C%8B%3Cname%3E%E7%9A%84%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%20)%5Cn(%20%3C_wakeup%3E%E6%9F%A5%E7%9C%8B%3Cname%3E%E7%9A%84%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%20)%5Cn(%20%E6%9F%A5%E7%9C%8B%3Cname%3E%20)%5Cn(%20%3C_wakeup%3E%E6%9F%A5%E7%9C%8B%3Cname%3E%20)%5Cn(%20%E6%96%B0%E5%BB%BA%E8%81%94%E7%B3%BB%E4%BA%BA%3Cname%3E%20)%5Cn(%20%3C_wakeup%3E%E6%96%B0%E5%BB%BA%E8%81%94%E7%B3%BB%E4%BA%BA%3Cname%3E%20)%5Cn(%20%E5%88%A0%E9%99%A4%3Cname%3E%E7%9A%84%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F%20)%5Cn(%20%3C_wakeup%3E%E5%88%A0%E9%99%A4%3Cname%3E%E7%9A%84%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F%20)%5Cn(%20%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%20)%5Cn(%20%3C_wakeup%3E%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%20)%5Cn(%20%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%E5%86%85%E5%AE%B9%E6%98%AF%3Cmsgbody%3E%20)%5Cn(%20%3C_wakeup%3E%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%E5%86%85%E5%AE%B9%E6%98%AF%3Cmsgbody%3E%20)%5Cn(%20%E6%89%93%E5%BC%80%3Cappname%3E%20)%5Cn(%20%3C_wakeup%3E%E6%89%93%E5%BC%80%3Cappname%3E%20)%5Cn(%20%E5%90%AF%E5%8A%A8%3Cappname%3E%20)%5Cn(%20%3C_wakeup%3E%E5%90%AF%E5%8A%A8%3Cappname%3E%20)%5Cn(%20%E6%90%9C%E7%B4%A2%3Cappname%3E%20)%5Cn(%20%3C_wakeup%3E%E6%90%9C%E7%B4%A2%3Cappname%3E%20)%5Cn(%20%E4%B8%8B%E8%BD%BD%3Cappname%3E%20)%5Cn(%20%3C_wakeup%3E%E4%B8%8B%E8%BD%BD%3Cappname%3E%20)%5Cn%22%2C%0A%20%20%20%20%22origin_slots%22%3A%20%22name%20%3D%20%E5%BC%A0%E4%B8%89%2C%20%E6%9D%8E%E5%9B%9B%2C%20%E7%8E%8B%E4%BA%94%5Cnappname%20%3D%20%E5%BE%AE%E4%BF%A1%2C%20%E7%99%BE%E5%BA%A6%E5%9C%B0%E5%9B%BE%2C%20%E7%9F%AD%E4%BF%A1%2C%20%E8%AE%A1%E7%AE%97%E5%99%A8%5Cnmsgbody%20%3D%20*%22%2C%0A%20%20%20%20%22origin_rules%22%3A%20%22telephone.call%20%20%20%20%20%3D%20%E6%89%93%E7%94%B5%E8%AF%9D%E7%BB%99%3Cname%3E%2C%20%E6%89%93%E7%BB%99%3Cname%3E%2C%20%E5%91%BC%E5%8F%AB%3Cname%3E%2C%E7%BB%99%3Cname%3E%E6%89%93%E7%94%B5%E8%AF%9D%5Cncontacts.view%20%20%20%20%20%3D%20%E6%9F%A5%E7%9C%8B%3Cname%3E%E7%9A%84%E7%94%B5%E8%AF%9D%E5%8F%B7%E7%A0%81%2C%20%E6%9F%A5%E7%9C%8B%3Cname%3E%5Cncontacts.create%20%20%3D%20%E6%96%B0%E5%BB%BA%E8%81%94%E7%B3%BB%E4%BA%BA%3Cname%3E%5Cncontacts.remove%3D%20%E5%88%A0%E9%99%A4%3Cname%3E%E7%9A%84%E8%81%94%E7%B3%BB%E6%96%B9%E5%BC%8F%5Cnmessage.view%20%20%20%20%20%3D%20%E6%9F%A5%E7%9C%8B%E6%9C%AA%E8%AF%BB%E7%9F%AD%E4%BF%A1%5Cnmessage.send%20%20%20%20%3D%20%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%2C%20%E5%8F%91%E7%9F%AD%E4%BF%A1%E7%BB%99%3Cname%3E%E5%86%85%E5%AE%B9%E6%98%AF%3Cmsgbody%3E%5Cnapp.open%20%20%20%20%20%20%20%20%20%20%20%20%3D%20%E6%89%93%E5%BC%80%3Cappname%3E%2C%20%E5%90%AF%E5%8A%A8%3Cappname%3E%5Cnapp.search%20%20%20%20%20%20%20%20%20%3D%20%E6%90%9C%E7%B4%A2%3Cappname%3E%5Cnapp.download%20%20%20%20%3D%20%E4%B8%8B%E8%BD%BD%3Cappname%3E%22%0A%7D -------------------------------------------------------------------------------- /app/src/main/assets/voice/data.json: -------------------------------------------------------------------------------- 1 | {"v":"5.6.3","fr":30,"ip":0,"op":50,"w":720,"h":60,"nm":"波浪","ddd":0,"assets":[{"id":"imgSeq_0","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_0.png","e":0},{"id":"imgSeq_1","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_1.png","e":0},{"id":"imgSeq_2","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_2.png","e":0},{"id":"imgSeq_3","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_3.png","e":0},{"id":"imgSeq_4","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_4.png","e":0},{"id":"imgSeq_5","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_5.png","e":0},{"id":"imgSeq_6","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_6.png","e":0},{"id":"imgSeq_7","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_7.png","e":0},{"id":"imgSeq_8","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_8.png","e":0},{"id":"imgSeq_9","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_9.png","e":0},{"id":"imgSeq_10","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_10.png","e":0},{"id":"imgSeq_11","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_11.png","e":0},{"id":"imgSeq_12","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_12.png","e":0},{"id":"imgSeq_13","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_13.png","e":0},{"id":"imgSeq_14","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_14.png","e":0},{"id":"imgSeq_15","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_15.png","e":0},{"id":"imgSeq_16","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_16.png","e":0},{"id":"imgSeq_17","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_17.png","e":0},{"id":"imgSeq_18","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_18.png","e":0},{"id":"imgSeq_19","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_19.png","e":0},{"id":"imgSeq_20","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_20.png","e":0},{"id":"imgSeq_21","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_21.png","e":0},{"id":"imgSeq_22","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_22.png","e":0},{"id":"imgSeq_23","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_23.png","e":0},{"id":"imgSeq_24","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_24.png","e":0},{"id":"imgSeq_25","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_25.png","e":0},{"id":"imgSeq_26","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_26.png","e":0},{"id":"imgSeq_27","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_27.png","e":0},{"id":"imgSeq_28","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_28.png","e":0},{"id":"imgSeq_29","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_29.png","e":0},{"id":"imgSeq_30","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_30.png","e":0},{"id":"imgSeq_31","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_31.png","e":0},{"id":"imgSeq_32","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_32.png","e":0},{"id":"imgSeq_33","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_33.png","e":0},{"id":"imgSeq_34","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_34.png","e":0},{"id":"imgSeq_35","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_35.png","e":0},{"id":"imgSeq_36","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_36.png","e":0},{"id":"imgSeq_37","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_37.png","e":0},{"id":"imgSeq_38","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_38.png","e":0},{"id":"imgSeq_39","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_39.png","e":0},{"id":"imgSeq_40","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_40.png","e":0},{"id":"imgSeq_41","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_41.png","e":0},{"id":"imgSeq_42","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_42.png","e":0},{"id":"imgSeq_43","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_43.png","e":0},{"id":"imgSeq_44","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_44.png","e":0},{"id":"imgSeq_45","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_45.png","e":0},{"id":"imgSeq_46","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_46.png","e":0},{"id":"imgSeq_47","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_47.png","e":0},{"id":"imgSeq_48","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_48.png","e":0},{"id":"imgSeq_49","w":720,"h":60,"t":"seq","u":"images/","p":"seq_0_49.png","e":0},{"id":"sequence_0","layers":[{"ty":2,"sc":"#00ffff","refId":"imgSeq_0","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":0,"st":0,"op":1,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_1","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":1,"st":1,"op":2,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_2","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":2,"st":2,"op":3,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_3","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":3,"st":3,"op":4,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_4","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":4,"st":4,"op":5,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_5","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":5,"st":5,"op":6,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_6","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":6,"st":6,"op":7,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_7","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":7,"st":7,"op":8,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_8","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":8,"st":8,"op":9,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_9","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":9,"st":9,"op":10,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_10","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":10,"st":10,"op":11,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_11","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":11,"st":11,"op":12,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_12","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":12,"st":12,"op":13,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_13","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":13,"st":13,"op":14,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_14","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":14,"st":14,"op":15,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_15","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":15,"st":15,"op":16,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_16","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":16,"st":16,"op":17,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_17","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":17,"st":17,"op":18,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_18","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":18,"st":18,"op":19,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_19","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":19,"st":19,"op":20,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_20","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":20,"st":20,"op":21,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_21","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":21,"st":21,"op":22,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_22","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":22,"st":22,"op":23,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_23","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":23,"st":23,"op":24,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_24","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":24,"st":24,"op":25,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_25","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":25,"st":25,"op":26,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_26","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":26,"st":26,"op":27,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_27","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":27,"st":27,"op":28,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_28","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":28,"st":28,"op":29,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_29","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":29,"st":29,"op":30,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_30","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":30,"st":30,"op":31,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_31","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":31,"st":31,"op":32,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_32","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":32,"st":32,"op":33,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_33","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":33,"st":33,"op":34,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_34","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":34,"st":34,"op":35,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_35","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":35,"st":35,"op":36,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_36","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":36,"st":36,"op":37,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_37","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":37,"st":37,"op":38,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_38","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":38,"st":38,"op":39,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_39","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":39,"st":39,"op":40,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_40","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":40,"st":40,"op":41,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_41","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":41,"st":41,"op":42,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_42","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":42,"st":42,"op":43,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_43","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":43,"st":43,"op":44,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_44","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":44,"st":44,"op":45,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_45","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":45,"st":45,"op":46,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_46","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":46,"st":46,"op":47,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_47","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":47,"st":47,"op":48,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_48","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":48,"st":48,"op":49,"sr":1,"bm":0},{"ty":2,"sc":"#00ffff","refId":"imgSeq_49","ks":{"p":{"a":0,"k":[0,0]},"a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"r":{"a":0,"k":[0]},"o":{"a":0,"k":[100]}},"ip":49,"st":49,"op":51,"sr":1,"bm":0}]}],"layers":[{"ddd":0,"ind":1,"ty":0,"nm":"波浪_[00000-00049].png","cl":"png","refId":"sequence_0","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[360,30,0],"ix":2},"a":{"a":0,"k":[360,30,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6}},"ao":0,"w":720,"h":60,"ip":0,"op":50,"st":0,"bm":0}],"markers":[]} -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_0.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_1.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_10.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_11.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_12.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_13.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_14.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_15.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_16.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_17.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_18.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_19.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_2.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_20.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_21.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_22.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_23.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_24.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_25.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_26.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_27.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_28.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_29.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_3.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_30.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_31.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_32.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_33.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_34.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_35.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_36.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_37.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_38.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_39.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_4.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_40.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_41.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_42.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_43.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_44.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_45.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_46.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_47.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_48.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_49.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_5.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_6.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_7.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_8.png -------------------------------------------------------------------------------- /app/src/main/assets/voice/seq_0_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/assets/voice/seq_0_9.png -------------------------------------------------------------------------------- /app/src/main/java/com/dfzq/dset/demo/BaiduRecognizer.java: -------------------------------------------------------------------------------- 1 | package com.dfzq.dset.demo; 2 | 3 | import android.content.Context; 4 | 5 | import com.baidu.speech.EventListener; 6 | import com.baidu.speech.EventManager; 7 | import com.baidu.speech.EventManagerFactory; 8 | import com.baidu.speech.asr.SpeechConstant; 9 | import com.dfzq.dset.provider.Recognizer; 10 | import com.dfzq.dset.provider.RecognizerListener; 11 | 12 | import org.json.JSONArray; 13 | import org.json.JSONException; 14 | import org.json.JSONObject; 15 | 16 | import java.lang.ref.WeakReference; 17 | import java.util.LinkedHashMap; 18 | import java.util.Map; 19 | 20 | public class BaiduRecognizer implements Recognizer { 21 | private PermissionListener permissionListener; 22 | private static final class BaiduListener implements EventListener { 23 | private WeakReference listenerWeakReference; 24 | private static final BaiduListener instance = new BaiduListener(); 25 | 26 | void setRecognizerListener(RecognizerListener listener) { 27 | listenerWeakReference = new WeakReference<>(listener); 28 | } 29 | 30 | @Override 31 | public void onEvent(String name, String params, byte[] data, int offset, int length) { 32 | RecognizerListener listener = null; 33 | if (listenerWeakReference != null) { 34 | listener = listenerWeakReference.get(); 35 | } 36 | if (listener == null) return; 37 | if (params != null) { 38 | try { 39 | JSONObject obj = new JSONObject(params); 40 | JSONArray result = obj.optJSONArray("results_recognition"); 41 | int error = obj.optInt("sub_error"); 42 | if (result != null && result.length() > 0) { 43 | listener.onSuccess(result.get(0).toString()); 44 | } 45 | if (3001 == error) { 46 | listener.onNoPermission(); 47 | } 48 | if (0 != error) { 49 | listener.onFailure("", error); 50 | } 51 | } catch (JSONException e) { 52 | e.printStackTrace(); 53 | } 54 | if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_VOLUME)) { 55 | //音量变化 56 | try { 57 | JSONObject json = new JSONObject(params); 58 | int volumePercent = json.getInt("volume-percent"); 59 | listener.onVolumeChange(volumePercent); 60 | } catch (JSONException e) { 61 | e.printStackTrace(); 62 | } 63 | } 64 | } 65 | if (name.equals(SpeechConstant.CALLBACK_EVENT_ASR_EXIT)) { 66 | listener.onExit(); 67 | } 68 | 69 | } 70 | } 71 | 72 | private final EventManager asr; 73 | 74 | public BaiduRecognizer(Context context, PermissionListener permissionListener) { 75 | asr = EventManagerFactory.create(context, "asr"); 76 | asr.registerListener(BaiduListener.instance); 77 | this.permissionListener = permissionListener; 78 | loadOfflineEngine(); 79 | } 80 | 81 | private void loadOfflineEngine() { 82 | Map params = new LinkedHashMap<>(); 83 | params.put(SpeechConstant.DECODER, 2); 84 | params.put(SpeechConstant.ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH, "assets://baidu_speech_grammar.bsg"); 85 | asr.send(SpeechConstant.ASR_KWS_LOAD_ENGINE, new JSONObject(params).toString(), null, 0, 0); 86 | } 87 | 88 | @Override 89 | public void requestPermission() { 90 | permissionListener.requestPermission(); 91 | } 92 | 93 | @Override 94 | public void cancel() { 95 | if (asr != null) { 96 | asr.send(SpeechConstant.ASR_CANCEL, "{}", null, 0, 0); 97 | unloadOfflineEngine(); 98 | } 99 | } 100 | 101 | private void unloadOfflineEngine() { 102 | asr.send(SpeechConstant.ASR_KWS_UNLOAD_ENGINE, null, null, 0, 0); 103 | } 104 | 105 | @Override 106 | public void startVoice() { 107 | Map params = new LinkedHashMap<>(); 108 | String event; 109 | event = SpeechConstant.ASR_START; 110 | params.put(SpeechConstant.DECODER, 2); 111 | params.put(SpeechConstant.ACCEPT_AUDIO_VOLUME, true); 112 | String json = new JSONObject(params).toString(); 113 | asr.send(event, json, null, 0, 0); 114 | } 115 | 116 | @Override 117 | public void stopVoice() { 118 | asr.send(SpeechConstant.ASR_STOP, null, null, 0, 0); 119 | } 120 | 121 | @Override 122 | public void setRecognizerListener(RecognizerListener listener) { 123 | BaiduListener.instance.setRecognizerListener(listener); 124 | } 125 | 126 | interface PermissionListener { 127 | void requestPermission(); 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /app/src/main/java/com/dfzq/dset/demo/LoginActivity.java: -------------------------------------------------------------------------------- 1 | package com.dfzq.dset.demo; 2 | 3 | import static android.Manifest.permission.READ_CONTACTS; 4 | 5 | import android.Manifest; 6 | import android.animation.Animator; 7 | import android.animation.AnimatorListenerAdapter; 8 | import android.app.LoaderManager.LoaderCallbacks; 9 | import android.content.CursorLoader; 10 | import android.content.Loader; 11 | import android.content.pm.PackageManager; 12 | import android.database.Cursor; 13 | import android.net.Uri; 14 | import android.os.AsyncTask; 15 | import android.os.Build; 16 | import android.os.Bundle; 17 | import android.provider.ContactsContract; 18 | import android.text.TextUtils; 19 | import android.view.LayoutInflater; 20 | import android.view.View; 21 | import android.view.ViewGroup; 22 | import android.view.inputmethod.EditorInfo; 23 | import android.widget.ArrayAdapter; 24 | import android.widget.AutoCompleteTextView; 25 | import android.widget.Button; 26 | import android.widget.EditText; 27 | import android.widget.FrameLayout; 28 | import android.widget.PopupWindow; 29 | import android.widget.Toast; 30 | 31 | import androidx.annotation.NonNull; 32 | import androidx.appcompat.app.AppCompatActivity; 33 | import androidx.core.app.ActivityCompat; 34 | 35 | import com.dfzq.dset.KeyboardManager; 36 | import com.dfzq.dset.SecurityEditText; 37 | import com.dfzq.dset.VoiceInputStateChangeListener; 38 | import com.google.android.material.snackbar.Snackbar; 39 | 40 | import java.lang.ref.WeakReference; 41 | import java.util.ArrayList; 42 | import java.util.List; 43 | 44 | /** 45 | * A login screen that offers login via email/password. 46 | */ 47 | public class LoginActivity extends AppCompatActivity implements LoaderCallbacks { 48 | 49 | /** 50 | * Id to identity READ_CONTACTS permission request. 51 | */ 52 | private static final int REQUEST_READ_CONTACTS = 0; 53 | private static final int REQUEST_RECORD_AUDIO = 114; 54 | 55 | /** 56 | * A dummy authentication store containing known user names and passwords. 57 | * TODO: remove after connecting to a real authentication system. 58 | */ 59 | private static final String[] DUMMY_CREDENTIALS = new String[]{ 60 | "foo@example.com:hello", "bar@example.com:world" 61 | }; 62 | /** 63 | * Keep track of the login task to ensure we can cancel it if requested. 64 | */ 65 | private UserLoginTask mAuthTask = null; 66 | 67 | // UI references. 68 | private AutoCompleteTextView mEmailView; 69 | private EditText mPasswordView; 70 | private View mProgressView; 71 | private View mLoginFormView; 72 | //private SecurityEditText voiceEditText; 73 | 74 | private SecurityEditText codeText; 75 | private PopupWindow popupWindow; 76 | private View layoutVoiceTips; 77 | private View layoutVoiceFail; 78 | 79 | @Override 80 | protected void onCreate(Bundle savedInstanceState) { 81 | super.onCreate(savedInstanceState); 82 | setContentView(R.layout.activity_login); 83 | KeyboardManager.logo = R.drawable.dset_keyboard_logo_bg_small; 84 | KeyboardManager.getInstance().setProvider(() -> new BaiduRecognizer(LoginActivity.this, () -> { 85 | ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, REQUEST_RECORD_AUDIO); 86 | })); 87 | KeyboardManager.assetsFolder = "voice/"; 88 | KeyboardManager.animationName = "voice/data.json"; 89 | // Set up the login form. 90 | mEmailView = findViewById(R.id.email); 91 | initVoice(); 92 | //voiceEditText = findViewById(R.id.voice); 93 | mPasswordView = findViewById(R.id.password); 94 | mPasswordView.setOnEditorActionListener((textView, id, keyEvent) -> { 95 | if (id == EditorInfo.IME_NULL) { 96 | attemptLogin(); 97 | return true; 98 | } 99 | return false; 100 | }); 101 | 102 | Button mEmailSignInButton = findViewById(R.id.email_sign_in_button); 103 | mEmailSignInButton.setOnClickListener(view -> attemptLogin()); 104 | 105 | mLoginFormView = findViewById(R.id.login_form); 106 | mProgressView = findViewById(R.id.login_progress); 107 | } 108 | 109 | private void initVoice() { 110 | codeText = findViewById(R.id.code_edit); 111 | View view = LayoutInflater.from(this).inflate(R.layout.layout_voice_tips, new FrameLayout(this), false); 112 | layoutVoiceTips = view.findViewById(R.id.ll_voice_tips); 113 | layoutVoiceFail = view.findViewById(R.id.ll_voice_fail); 114 | popupWindow = new PopupWindow(view, ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); 115 | codeText.setVoiceInputStateChangeListener(new VoiceInputStateChangeListener() { 116 | @Override 117 | public void onStateChanged(int state) { 118 | if (1 == state) { 119 | popupWindow.showAsDropDown(codeText); 120 | } else { 121 | popupWindow.dismiss(); 122 | } 123 | } 124 | 125 | @Override 126 | public void onErrorState(int error) { 127 | voiceShow(3001 != error); 128 | } 129 | }); 130 | 131 | } 132 | 133 | private void voiceShow(boolean tips) { 134 | if (layoutVoiceTips != null && layoutVoiceFail != null) { 135 | if (tips) { 136 | layoutVoiceTips.setVisibility(View.VISIBLE); 137 | layoutVoiceFail.setVisibility(View.GONE); 138 | } else { 139 | layoutVoiceTips.setVisibility(View.GONE); 140 | layoutVoiceFail.setVisibility(View.VISIBLE); 141 | Toast.makeText(this, "请开启录音权限", Toast.LENGTH_SHORT).show(); 142 | } 143 | } 144 | } 145 | 146 | private void populateAutoComplete() { 147 | if (!mayRequestContacts()) { 148 | return; 149 | } 150 | 151 | getLoaderManager().initLoader(0, null, this); 152 | } 153 | 154 | private boolean mayRequestContacts() { 155 | if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { 156 | return true; 157 | } 158 | if (checkSelfPermission(READ_CONTACTS) == PackageManager.PERMISSION_GRANTED) { 159 | return true; 160 | } 161 | if (shouldShowRequestPermissionRationale(READ_CONTACTS)) { 162 | Snackbar.make(mEmailView, R.string.permission_rationale, Snackbar.LENGTH_INDEFINITE) 163 | .setAction(android.R.string.ok, v -> requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS)) 164 | .show(); 165 | 166 | } else { 167 | requestPermissions(new String[]{READ_CONTACTS}, REQUEST_READ_CONTACTS); 168 | } 169 | return false; 170 | } 171 | 172 | /** 173 | * Callback received when a permissions request has been completed. 174 | */ 175 | @Override 176 | public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, 177 | @NonNull int[] grantResults) { 178 | super.onRequestPermissionsResult(requestCode, permissions, grantResults); 179 | if (requestCode == REQUEST_READ_CONTACTS) { 180 | if (grantResults.length == 1 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 181 | populateAutoComplete(); 182 | } 183 | } else if (requestCode == REQUEST_RECORD_AUDIO) { 184 | voiceShow(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED); 185 | } 186 | } 187 | 188 | @Override 189 | protected void onDestroy() { 190 | super.onDestroy(); 191 | if (mAuthTask != null) { 192 | mAuthTask.clean(); 193 | } 194 | } 195 | 196 | /** 197 | * Attempts to sign in or register the account specified by the login form. 198 | * If there are form errors (invalid email, missing fields, etc.), the 199 | * errors are presented and no actual login attempt is made. 200 | */ 201 | private void attemptLogin() { 202 | if (mAuthTask != null) { 203 | return; 204 | } 205 | 206 | // Reset errors. 207 | mEmailView.setError(null); 208 | mPasswordView.setError(null); 209 | 210 | // Store values at the time of the login attempt. 211 | String email = mEmailView.getText().toString(); 212 | String password = mPasswordView.getText().toString(); 213 | 214 | boolean cancel = false; 215 | View focusView = null; 216 | 217 | // Check for a valid password, if the user entered one. 218 | if (!TextUtils.isEmpty(password) && !isPasswordValid(password)) { 219 | mPasswordView.setError(getString(R.string.error_invalid_password)); 220 | focusView = mPasswordView; 221 | cancel = true; 222 | } 223 | 224 | // Check for a valid email address. 225 | if (TextUtils.isEmpty(email)) { 226 | mEmailView.setError(getString(R.string.error_field_required)); 227 | focusView = mEmailView; 228 | cancel = true; 229 | } else if (!isEmailValid(email)) { 230 | mEmailView.setError(getString(R.string.error_invalid_email)); 231 | focusView = mEmailView; 232 | cancel = true; 233 | } 234 | 235 | if (cancel) { 236 | // There was an error; don't attempt login and focus the first 237 | // form field with an error. 238 | focusView.requestFocus(); 239 | } else { 240 | // Show a progress spinner, and kick off a background task to 241 | // perform the user login attempt. 242 | showProgress(true); 243 | mAuthTask = new UserLoginTask(email, password, this); 244 | mAuthTask.execute((Void) null); 245 | } 246 | } 247 | 248 | private boolean isEmailValid(String email) { 249 | //TODO: Replace this with your own logic 250 | return email.contains("@"); 251 | } 252 | 253 | private boolean isPasswordValid(String password) { 254 | //TODO: Replace this with your own logic 255 | return password.length() > 4; 256 | } 257 | 258 | /** 259 | * Shows the progress UI and hides the login form. 260 | */ 261 | private void showProgress(final boolean show) { 262 | // On Honeycomb MR2 we have the ViewPropertyAnimator APIs, which allow 263 | // for very easy animations. If available, use these APIs to fade-in 264 | // the progress spinner. 265 | int shortAnimTime = getResources().getInteger(android.R.integer.config_shortAnimTime); 266 | 267 | mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); 268 | mLoginFormView.animate().setDuration(shortAnimTime).alpha( 269 | show ? 0 : 1).setListener(new AnimatorListenerAdapter() { 270 | @Override 271 | public void onAnimationEnd(Animator animation) { 272 | mLoginFormView.setVisibility(show ? View.GONE : View.VISIBLE); 273 | } 274 | }); 275 | 276 | mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); 277 | mProgressView.animate().setDuration(shortAnimTime).alpha( 278 | show ? 1 : 0).setListener(new AnimatorListenerAdapter() { 279 | @Override 280 | public void onAnimationEnd(Animator animation) { 281 | mProgressView.setVisibility(show ? View.VISIBLE : View.GONE); 282 | } 283 | }); 284 | } 285 | 286 | @Override 287 | public Loader onCreateLoader(int i, Bundle bundle) { 288 | return new CursorLoader(this, 289 | // Retrieve data rows for the device user's 'profile' contact. 290 | Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, 291 | ContactsContract.Contacts.Data.CONTENT_DIRECTORY), ProfileQuery.PROJECTION, 292 | 293 | // Select only email addresses. 294 | ContactsContract.Contacts.Data.MIMETYPE + 295 | " = ?", new String[]{ContactsContract.CommonDataKinds.Email 296 | .CONTENT_ITEM_TYPE}, 297 | 298 | // Show primary email addresses first. Note that there won't be 299 | // a primary email address if the user hasn't specified one. 300 | ContactsContract.Contacts.Data.IS_PRIMARY + " DESC"); 301 | } 302 | 303 | @Override 304 | public void onLoadFinished(Loader cursorLoader, Cursor cursor) { 305 | List emails = new ArrayList<>(); 306 | cursor.moveToFirst(); 307 | while (!cursor.isAfterLast()) { 308 | emails.add(cursor.getString(ProfileQuery.ADDRESS)); 309 | cursor.moveToNext(); 310 | } 311 | 312 | addEmailsToAutoComplete(emails); 313 | } 314 | 315 | @Override 316 | public void onLoaderReset(Loader cursorLoader) { 317 | 318 | } 319 | 320 | private void addEmailsToAutoComplete(List emailAddressCollection) { 321 | //Create adapter to tell the AutoCompleteTextView what to show in its dropdown list. 322 | ArrayAdapter adapter = 323 | new ArrayAdapter<>(LoginActivity.this, 324 | android.R.layout.simple_dropdown_item_1line, emailAddressCollection); 325 | 326 | mEmailView.setAdapter(adapter); 327 | } 328 | 329 | 330 | private interface ProfileQuery { 331 | String[] PROJECTION = { 332 | ContactsContract.CommonDataKinds.Email.ADDRESS, 333 | ContactsContract.CommonDataKinds.Email.IS_PRIMARY, 334 | }; 335 | 336 | int ADDRESS = 0; 337 | //int IS_PRIMARY = 1; 338 | } 339 | 340 | private void onExecuted(boolean success) { 341 | mAuthTask = null; 342 | showProgress(false); 343 | 344 | if (success) { 345 | finish(); 346 | } else { 347 | mPasswordView.setError(getString(R.string.error_incorrect_password)); 348 | mPasswordView.requestFocus(); 349 | } 350 | } 351 | 352 | private void onCanceled() { 353 | mAuthTask = null; 354 | showProgress(false); 355 | } 356 | 357 | /** 358 | * Represents an asynchronous login/registration task used to authenticate 359 | * the user. 360 | */ 361 | static class UserLoginTask extends AsyncTask { 362 | private WeakReference loginActivity; 363 | 364 | private final String mEmail; 365 | private final String mPassword; 366 | 367 | UserLoginTask(String email, String password, LoginActivity loginActivity) { 368 | super(); 369 | mEmail = email; 370 | mPassword = password; 371 | this.loginActivity = new WeakReference<>(loginActivity); 372 | } 373 | 374 | void clean() { 375 | loginActivity = null; 376 | } 377 | 378 | @Override 379 | protected Boolean doInBackground(Void... params) { 380 | // TODO: attempt authentication against a network service. 381 | 382 | try { 383 | // Simulate network access. 384 | Thread.sleep(2000); 385 | } catch (InterruptedException e) { 386 | return false; 387 | } 388 | 389 | for (String credential : DUMMY_CREDENTIALS) { 390 | String[] pieces = credential.split(":"); 391 | if (pieces[0].equals(mEmail)) { 392 | // Account exists, return true if the password matches. 393 | return pieces[1].equals(mPassword); 394 | } 395 | } 396 | 397 | // TODO: register the new account here. 398 | return true; 399 | } 400 | 401 | @Override 402 | protected void onPostExecute(final Boolean success) { 403 | LoginActivity activity; 404 | if (loginActivity != null && (activity = loginActivity.get()) != null) { 405 | activity.onExecuted(success); 406 | } 407 | } 408 | 409 | @Override 410 | protected void onCancelled() { 411 | LoginActivity activity; 412 | if (loginActivity != null && (activity = loginActivity.get()) != null) { 413 | activity.onCanceled(); 414 | } 415 | } 416 | } 417 | } 418 | 419 | -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libBaiduSpeechSDK.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi-v7a/libBaiduSpeechSDK.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libbdEASRAndroid.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi-v7a/libbdEASRAndroid.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libbdSpilWakeup.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi-v7a/libbdSpilWakeup.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libbd_easr_s1_merge_normal_20151216.dat.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi-v7a/libbd_easr_s1_merge_normal_20151216.dat.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi-v7a/libvad.dnn.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi-v7a/libvad.dnn.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libBaiduSpeechSDK.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi/libBaiduSpeechSDK.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libbdEASRAndroid.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi/libbdEASRAndroid.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libbdSpilWakeup.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi/libbdSpilWakeup.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libbd_easr_s1_merge_normal_20151216.dat.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi/libbd_easr_s1_merge_normal_20151216.dat.so -------------------------------------------------------------------------------- /app/src/main/jniLibs/armeabi/libvad.dnn.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/jniLibs/armeabi/libvad.dnn.so -------------------------------------------------------------------------------- /app/src/main/res/drawable/clear_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/res/drawable/clear_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/dset_keyboard_logo.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/res/drawable/dset_keyboard_logo.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/dset_keyboard_logo_bg_small.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/res/drawable/logo.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_corner_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/stock_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/orientsec/SecurityKeyboard/b76cee6d89a374eff4f6cd5c42902cefe1a21bd9/app/src/main/res/drawable/stock_search.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_login.xml: -------------------------------------------------------------------------------- 1 | 13 | 14 | 15 | 22 | 23 | 27 | 28 | 32 | 33 | 44 | 45 | 51 | 52 | 67 | 68 | 76 | 77 | 78 | 81 | 82 | 92 | 93 | 94 | 95 | 98 | 99 | 108 | 109 | 110 | 111 | 114 | 115 | 125 | 126 | 127 | 128 | 131 | 132 | 139 | 140 | 141 | 142 |