├── .gitignore ├── .idea ├── encodings.xml ├── misc.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── debug.keystore ├── proguard-rules.pro ├── rabbit.jks ├── signing.properties ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ ├── aboutus.html │ │ ├── apidetail.html │ │ ├── apidetail2.html │ │ ├── apk.html │ │ ├── content.html │ │ ├── detail.html │ │ ├── dist │ │ │ ├── img │ │ │ │ └── jsoneditor-icons.svg │ │ │ ├── jsoneditor.css │ │ │ └── jsoneditor.js │ │ ├── filedir.html │ │ ├── index.html │ │ ├── jpg.html │ │ ├── jquery-1.7.2.min.js │ │ ├── mockconfig.html │ │ ├── mockconfig2.html │ │ ├── mockconfig3.html │ │ ├── mp4.html │ │ ├── phone.html │ │ ├── pubuliu.html │ │ ├── qrcode.js │ │ ├── qrcode.min.js │ │ ├── readapidata.html │ │ ├── switch_mode.html │ │ ├── tools.html │ │ └── wifi │ │ │ ├── css │ │ │ └── style.css │ │ │ ├── images │ │ │ ├── bg1_01.jpg │ │ │ ├── bg1_02.jpg │ │ │ ├── bg_drag.png │ │ │ ├── bg_file_list.jpg │ │ │ ├── bg_files.jpg │ │ │ ├── bg_files2.jpg │ │ │ ├── bg_title.jpg │ │ │ ├── button_status.png │ │ │ ├── download.gif │ │ │ ├── progress.jpg │ │ │ ├── progress_bg.jpg │ │ │ ├── select_file1.jpg │ │ │ ├── select_file1_pressed.jpg │ │ │ ├── select_file1_rollover.jpg │ │ │ ├── table_header_bg.jpg │ │ │ ├── table_header_bg2.jpg │ │ │ ├── trash.gif │ │ │ └── trash_white.png │ │ │ ├── index.html │ │ │ └── scripts │ │ │ ├── ajaxfileupload.js │ │ │ ├── bitcandies.upload5.js │ │ │ ├── jquery-1.7.2.min.js │ │ │ ├── lang.zh-Hans.js │ │ │ └── transfer.js │ │ ├── java │ │ └── com │ │ │ ├── baidusoso │ │ │ └── wifitransfer │ │ │ │ ├── Constants.java │ │ │ │ ├── InfoModel.java │ │ │ │ ├── ItemButtomDecoration.java │ │ │ │ ├── MainWifiApkActivity.java │ │ │ │ ├── PopupMenuDialog.java │ │ │ │ ├── WebService.java │ │ │ │ ├── WifiConnectChangedReceiver.java │ │ │ │ └── WifiUtils.java │ │ │ └── supets │ │ │ └── pet │ │ │ ├── AppContext.java │ │ │ ├── MyApplication.java │ │ │ ├── greendao │ │ │ ├── CrashDataDao.java │ │ │ ├── DaoMaster.java │ │ │ ├── DaoSession.java │ │ │ ├── EmailDataDao.java │ │ │ ├── LocalMockDataDao.java │ │ │ ├── MigrationSQLiteOpenHelper.java │ │ │ ├── MockDataDao.java │ │ │ ├── MockExampleDataDao.java │ │ │ ├── SessionFactory.java │ │ │ └── WordDataDao.java │ │ │ ├── mock │ │ │ ├── base │ │ │ │ ├── BaseFragment.java │ │ │ │ ├── BaseRecycleAdapter.java │ │ │ │ ├── BaseRecycleViewHolder.java │ │ │ │ ├── SupetRecyclerViewScrollListener.java │ │ │ │ └── SuspensionBarScrollListener.java │ │ │ ├── bean │ │ │ │ ├── CrashData.java │ │ │ │ ├── EmailData.java │ │ │ │ ├── LocalMockData.java │ │ │ │ ├── MockData.java │ │ │ │ ├── MockExampleData.java │ │ │ │ └── WordData.java │ │ │ ├── config │ │ │ │ ├── BasePref.java │ │ │ │ └── Config.java │ │ │ ├── dao │ │ │ │ ├── CrashDataDB.java │ │ │ │ ├── EmailDataDB.java │ │ │ │ ├── LocalMockDataDB.java │ │ │ │ ├── MockDataDB.java │ │ │ │ ├── MockExampleDataDB.java │ │ │ │ └── WordDataDB.java │ │ │ ├── db │ │ │ │ ├── DBService.java │ │ │ │ └── WordDao.java │ │ │ ├── ui │ │ │ │ ├── config │ │ │ │ │ ├── MockConfigActivity.java │ │ │ │ │ └── MockConfigJsonActivity.java │ │ │ │ ├── crash │ │ │ │ │ ├── MockCrashListActivity.java │ │ │ │ │ └── MockCrashUiActivity.java │ │ │ │ ├── datamodule │ │ │ │ │ ├── MockModelActivity.java │ │ │ │ │ └── MockModelEditActivity.java │ │ │ │ ├── detail │ │ │ │ │ ├── FoodSpanUtils.java │ │ │ │ │ └── MockInfoActivity.java │ │ │ │ ├── email │ │ │ │ │ ├── MockEmailEditActivity.java │ │ │ │ │ └── MockEmailListActivity.java │ │ │ │ ├── filebrowser │ │ │ │ │ ├── FileData.java │ │ │ │ │ └── FilieManagerUtils.java │ │ │ │ ├── home │ │ │ │ │ ├── MockDataAdapter.java │ │ │ │ │ ├── MockFlashActivity.java │ │ │ │ │ ├── MockMoreAdapter.java │ │ │ │ │ ├── MockTestAdapter.java │ │ │ │ │ ├── MockToolsAdapter.java │ │ │ │ │ ├── MockUiActivity.java │ │ │ │ │ ├── TabAPIFragment.java │ │ │ │ │ ├── TabDataFragment.java │ │ │ │ │ ├── TabLayoutBottomActivity.java │ │ │ │ │ ├── TabSetFragment.java │ │ │ │ │ └── TabToolsFragment.java │ │ │ │ ├── phone │ │ │ │ │ ├── ContactsBean.java │ │ │ │ │ └── PhoneUtils.java │ │ │ │ ├── tool │ │ │ │ │ └── MockToolActivity.java │ │ │ │ ├── translate │ │ │ │ │ ├── CharacterParser.java │ │ │ │ │ ├── MYPetSortActivity.java │ │ │ │ │ ├── PinyinComparator.java │ │ │ │ │ ├── PlayMp3.java │ │ │ │ │ ├── SideBar.java │ │ │ │ │ ├── SortAdapter.java │ │ │ │ │ ├── SortModel.java │ │ │ │ │ ├── TranslateActivity.java │ │ │ │ │ └── WordTranslateDTO.java │ │ │ │ ├── uninstall │ │ │ │ │ ├── DefaultInstallStrategy.java │ │ │ │ │ └── MyActivity.java │ │ │ │ ├── urltest │ │ │ │ │ └── MockUrlRuleActivity.java │ │ │ │ └── version │ │ │ │ │ ├── MockAboutActivity.java │ │ │ │ │ ├── ShareUtils.java │ │ │ │ │ ├── VersionDTO.java │ │ │ │ │ └── WordsDTO.java │ │ │ └── utils │ │ │ │ ├── FileUtils.java │ │ │ │ ├── FormatLogProcess.java │ │ │ │ ├── LogUtil.java │ │ │ │ ├── QQMailUtil.java │ │ │ │ └── Utils.java │ │ │ ├── server │ │ │ ├── PCServerActivity.java │ │ │ ├── ServerApi.java │ │ │ └── ServerUtils.java │ │ │ ├── service │ │ │ ├── CrashService.java │ │ │ ├── GridAdapter.java │ │ │ ├── MockDataProvider.java │ │ │ ├── MockDataReceiver.java │ │ │ └── TuZiWidget.java │ │ │ └── uctoast │ │ │ ├── BootCompletedReceiver.java │ │ │ ├── ClipViewWidget.java │ │ │ ├── ListenClipboardService.java │ │ │ ├── Utils.java │ │ │ ├── ViewContainer.java │ │ │ └── clipboard │ │ │ ├── ClipboardManagerCompat.java │ │ │ ├── ClipboardManagerImpl11.java │ │ │ └── ClipboardManagerImpl9.java │ │ └── res │ │ ├── anim │ │ ├── msg_enter.xml │ │ ├── msg_exit.xml │ │ ├── popup_menu_dialog_in.xml │ │ └── popup_menu_dialog_out.xml │ │ ├── color │ │ └── home_tab_color_selector.xml │ │ ├── drawable-xhdpi │ │ ├── circle_2.png │ │ ├── default_header.png │ │ ├── icon_add.png │ │ ├── icon_big.jpg │ │ ├── icon_tab.jpg │ │ ├── icon_wenhao.png │ │ └── tuzi.jpg │ │ ├── drawable-xxhdpi │ │ ├── kulian.png │ │ └── more.png │ │ ├── drawable │ │ ├── ic_book_cover.png │ │ ├── ic_wifi.png │ │ ├── icon.jpg │ │ ├── m_pet_sidebar_background.xml │ │ ├── popup_menu_view_background.9.png │ │ ├── selector_btn_orange.xml │ │ ├── shape_common_bg_frame10.xml │ │ ├── shape_red_bg_frame10.xml │ │ ├── shared_wifi_enable.png │ │ └── shared_wifi_shut_down.png │ │ ├── layout-xhdpi │ │ ├── activity_main.xml │ │ ├── activity_pcconfig.xml │ │ ├── activity_word_android.xml │ │ ├── activity_word_translate.xml │ │ ├── clipword_pop_view.xml │ │ ├── content_main.xml │ │ ├── empty_view.xml │ │ ├── float_window_small.xml │ │ ├── grid_item.xml │ │ ├── layout_book_item.xml │ │ ├── layout_popup_menu_dialog.xml │ │ └── tuzi_pop_view.xml │ │ ├── layout │ │ ├── activity_clip_main.xml │ │ ├── activity_crash_ui.xml │ │ ├── activity_flash.xml │ │ ├── activity_mock_about.xml │ │ ├── activity_mock_config.xml │ │ ├── activity_mock_configjson.xml │ │ ├── activity_mock_home.xml │ │ ├── activity_mock_info.xml │ │ ├── activity_mock_tab.xml │ │ ├── activity_mock_updateemail.xml │ │ ├── activity_mock_updatemodel.xml │ │ ├── activity_mock_url.xml │ │ ├── activity_mocktool_jsonedit.xml │ │ ├── fragment_tab_content.xml │ │ ├── fragment_tab_data_list.xml │ │ ├── item_tab_layout_custom.xml │ │ ├── m_pet_sort_item.xml │ │ ├── mock_list_config_item.xml │ │ ├── mock_list_crash_item.xml │ │ ├── mock_list_datalist_item.xml │ │ ├── mock_list_emaillist_item.xml │ │ ├── mock_list_home_set_item.xml │ │ ├── mock_list_home_tool_item.xml │ │ ├── mock_list_model_item.xml │ │ ├── mock_list_tab_item.xml │ │ └── mock_list_test_item.xml │ │ ├── menu │ │ └── item_menu.xml │ │ ├── raw │ │ └── words.db │ │ ├── values │ │ ├── colors.xml │ │ ├── configs.xml │ │ ├── dimens.xml │ │ ├── pcconfig.xml │ │ ├── strings.xml │ │ └── wifi.xml │ │ └── xml │ │ └── install_file.xml └── version.properties ├── build.gradle ├── buildsystem └── dependencies.gradle ├── database ├── JQuery控制radio选中和不选中方法总结 ├── JQuery给textarea取值和赋值 ├── android_words_update.json ├── jquery 如何获取单选框的值 ├── js 拼接HTML字符串 onclick事件传多个参数问题 ├── phone1.png ├── phone10.png ├── phone11.png ├── phone12.png ├── phone13.png ├── phone2.png ├── phone3.png ├── phone4.png ├── phone5.png ├── phone6.png ├── phone7.png ├── phone8.png ├── phone9.png ├── spring_words_update.json ├── version_update.json ├── web1.png ├── web2.png ├── web3.png └── words_update.json ├── doc ├── PermissionUtil-master.zip ├── TuZiWidget.java ├── TuZiWidget2.java ├── qrcodejs-04f46c6.zip └── 悬浮窗比较特殊,需要单独处理 ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── libqrcode └── src │ └── main │ ├── java │ └── com │ │ └── mining │ │ └── app │ │ └── zxing │ │ ├── camera │ │ └── .svn │ │ │ ├── entries │ │ │ └── text-base │ │ │ ├── AutoFocusCallback.java.svn-base │ │ │ ├── CameraConfigurationManager.java.svn-base │ │ │ ├── CameraManager.java.svn-base │ │ │ ├── FlashlightManager.java.svn-base │ │ │ ├── PlanarYUVLuminanceSource.java.svn-base │ │ │ └── PreviewCallback.java.svn-base │ │ ├── decoding │ │ └── .svn │ │ │ ├── entries │ │ │ └── text-base │ │ │ ├── CaptureActivityHandler.java.svn-base │ │ │ ├── DecodeFormatManager.java.svn-base │ │ │ ├── DecodeHandler.java.svn-base │ │ │ ├── DecodeThread.java.svn-base │ │ │ ├── FinishListener.java.svn-base │ │ │ ├── InactivityTimer.java.svn-base │ │ │ └── Intents.java.svn-base │ │ └── view │ │ └── .svn │ │ ├── entries │ │ └── text-base │ │ ├── ViewfinderResultPointCallback.java.svn-base │ │ └── ViewfinderView.java.svn-base │ └── res │ └── raw │ └── .svn │ ├── entries │ ├── prop-base │ ├── beep.ogg.svn-base │ └── msg.ogg.svn-base │ └── text-base │ ├── beep.ogg.svn-base │ ├── msg.ogg.svn-base │ ├── realm_properties.svn-base │ └── sound.wav.svn-base ├── mock-okhttp-no-op ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── supets │ └── pet │ └── mocklib │ └── mock │ └── TuziMockManager.java ├── mock-okhttp-simple ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── supets │ │ └── pet │ │ └── mocklib │ │ ├── AppContext.java │ │ ├── MockConfig.java │ │ ├── core │ │ ├── IMockDataMapper.java │ │ ├── IMockService.java │ │ ├── IMockServiceImpl.java │ │ ├── MockDataMapper.java │ │ └── MockInterceptor.java │ │ ├── crash │ │ ├── BasePref.java │ │ ├── CrashTimePref.java │ │ └── DefaultBugHandler.java │ │ ├── mock │ │ ├── HttpLoggingInterceptor.java │ │ ├── JsonFormatUtils.java │ │ └── TuziMockManager.java │ │ ├── utils │ │ ├── FBService.java │ │ ├── FormatLogProcess.java │ │ ├── JobService21Compcat.java │ │ ├── NotificationUtils.java │ │ ├── PAJobService.java │ │ ├── SystermAlertWindowCompact.java │ │ └── Utils.java │ │ └── widget │ │ ├── GridAdapter.java │ │ ├── MockData.java │ │ ├── MockDataReceiver.java │ │ ├── TuZiWidget.java │ │ └── ViewContainer.java │ └── res │ ├── drawable │ └── icon_tab.jpg │ ├── layout │ ├── grid_item.xml │ └── tuzi_pop_view.xml │ └── values │ ├── clolors.xml │ └── strings.xml ├── mock-okhttp-web ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── aboutus.html │ ├── apidetail.html │ ├── apidetail2.html │ ├── apk.html │ ├── content.html │ ├── detail.html │ ├── dist │ │ ├── img │ │ │ └── jsoneditor-icons.svg │ │ ├── jsoneditor.css │ │ └── jsoneditor.js │ ├── filedir.html │ ├── index.html │ ├── jpg.html │ ├── jquery-1.7.2.min.js │ ├── mockconfig.html │ ├── mockconfig2.html │ ├── mockconfig3.html │ ├── mp4.html │ ├── phone.html │ ├── pubuliu.html │ ├── qrcode.js │ ├── qrcode.min.js │ ├── readapidata.html │ ├── switch_mode.html │ └── tools.html │ ├── java │ └── com │ │ └── supets │ │ └── pet │ │ ├── AppContext.java │ │ ├── bean │ │ ├── LocalMockData.java │ │ └── MockData.java │ │ ├── config │ │ ├── BasePref.java │ │ └── Config.java │ │ ├── device │ │ ├── filebrowser │ │ │ ├── FileData.java │ │ │ └── FilieManagerUtils.java │ │ └── phone │ │ │ ├── ContactsBean.java │ │ │ └── PhoneUtils.java │ │ ├── greendao │ │ ├── LocalMockDataDB.java │ │ ├── MigrationSQLiteOpenHelper.java │ │ ├── MockDataDB.java │ │ └── SessionFactory.java │ │ ├── mocklib │ │ ├── MockConfig.java │ │ ├── core │ │ │ ├── IMockDataMapper.java │ │ │ ├── IMockService.java │ │ │ ├── IMockServiceImpl.java │ │ │ ├── MockDataMapper.java │ │ │ └── MockInterceptor.java │ │ ├── interceptor │ │ │ ├── cache │ │ │ │ ├── NetInterceptor.java │ │ │ │ ├── NetUtil.java │ │ │ │ └── NoNetInterceptor.java │ │ │ ├── header │ │ │ │ └── BasicParamsInterceptor.java │ │ │ └── log │ │ │ │ ├── HttpLogger.java │ │ │ │ ├── HttpLoggingInterceptor.java │ │ │ │ └── JsonUtil.java │ │ └── mock │ │ │ ├── CacheFileUtils.java │ │ │ ├── HttpLoggingInterceptor.java │ │ │ ├── JsonFormatUtils.java │ │ │ └── TuziMockManager.java │ │ ├── server │ │ ├── MockDataProvider.java │ │ ├── ServerApi.java │ │ └── ServerUtils.java │ │ ├── utils │ │ ├── FileUtils.java │ │ ├── FormatLogProcess.java │ │ ├── LogUtil.java │ │ ├── MD5Util.java │ │ ├── Utils.java │ │ └── WifiUtils.java │ │ └── view │ │ ├── GridAdapter.java │ │ ├── MockDataReceiver.java │ │ ├── TuZiWidget.java │ │ └── ViewContainer.java │ └── res │ ├── drawable-xhdpi │ └── icon_tab.jpg │ ├── layout │ ├── grid_item.xml │ └── tuzi_pop_view.xml │ └── values │ └── strings.xml ├── mock-okhttp ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── supets │ └── pet │ └── mocklib │ ├── AppContext.java │ ├── MockConfig.java │ ├── core │ ├── IMockDataMapper.java │ ├── IMockService.java │ ├── IMockServiceImpl.java │ ├── MockDataMapper.java │ └── MockInterceptor.java │ ├── crash │ ├── BasePref.java │ ├── CrashTimePref.java │ └── DefaultBugHandler.java │ ├── interceptor │ ├── cache │ │ ├── NetInterceptor.java │ │ ├── NetUtil.java │ │ └── NoNetInterceptor.java │ ├── header │ │ └── BasicParamsInterceptor.java │ └── log │ │ ├── HttpLogger.java │ │ ├── HttpLoggingInterceptor.java │ │ └── JsonUtil.java │ └── mock │ ├── CacheFileUtils.java │ ├── HttpLoggingInterceptor.java │ ├── JsonFormatUtils.java │ └── TuziMockManager.java ├── settings.gradle ├── v2018.md └── v2020.md /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | /.idea 11 | /.idea/caches 12 | 13 | -------------------------------------------------------------------------------- /.idea/encodings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/debug.keystore -------------------------------------------------------------------------------- /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:\studio\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 -------------------------------------------------------------------------------- /app/rabbit.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/rabbit.jks -------------------------------------------------------------------------------- /app/signing.properties: -------------------------------------------------------------------------------- 1 | STORE_FILE = /rabbit.jks 2 | STORE_PASSWORD = rabbit 3 | KEY_ALIAS = rabbit 4 | KEY_PASSWORD = rabbit 5 | #STORE_FILE = /debug.keystore 6 | #STORE_PASSWORD = android 7 | #KEY_ALIAS = platform 8 | #KEY_PASSWORD = android -------------------------------------------------------------------------------- /app/src/main/assets/aboutus.html: -------------------------------------------------------------------------------- 1 | 3 | 4 | 5 | Javascript 二维码生成库:QRCode 6 | 7 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 48 | 49 | -------------------------------------------------------------------------------- /app/src/main/assets/apk.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 手机图片查看 8 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 48 | 49 | 50 |
46 |
    47 |
    51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /app/src/main/assets/filedir.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 文件浏览器 8 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 42 | 43 |
    40 |
      41 |
      44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /app/src/main/assets/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/assets/mp4.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 8 | 手机视频 9 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 55 | 56 | 57 | 58 | 59 |
      53 |
        54 |
        60 | 61 | 62 | -------------------------------------------------------------------------------- /app/src/main/assets/switch_mode.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | JSONEditor | Switch mode 5 | 6 | 7 | 8 | 9 | 10 | 11 | 28 | 29 | 30 | 31 |
        32 | 33 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg1_01.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg1_01.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg1_02.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg1_02.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg_drag.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg_drag.png -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg_file_list.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg_file_list.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg_files.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg_files.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg_files2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg_files2.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/bg_title.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/bg_title.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/button_status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/button_status.png -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/download.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/download.gif -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/progress.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/progress_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/progress_bg.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/select_file1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/select_file1.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/select_file1_pressed.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/select_file1_pressed.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/select_file1_rollover.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/select_file1_rollover.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/table_header_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/table_header_bg.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/table_header_bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/table_header_bg2.jpg -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/trash.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/trash.gif -------------------------------------------------------------------------------- /app/src/main/assets/wifi/images/trash_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/assets/wifi/images/trash_white.png -------------------------------------------------------------------------------- /app/src/main/assets/wifi/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | WiFi APP安装 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
        14 |
        15 |
        16 | 19 |
        20 |
        21 |
        22 |
        23 | 24 |
        25 |
        26 |
        27 |
        28 | 38 |
        39 |
        40 |
        41 | 42 | -------------------------------------------------------------------------------- /app/src/main/assets/wifi/scripts/lang.zh-Hans.js: -------------------------------------------------------------------------------- 1 | var STRINGS = {}; 2 | 3 | STRINGS.WIFI_TRANS_TITLE = 'WiFi APP安装'; 4 | STRINGS.FILES_ON_DEVICE = '您设备上的文件列表'; 5 | STRINGS.FILENAME = '文件名'; 6 | STRINGS.FILE_SIZE = '大小'; 7 | STRINGS.FILE_OPER = '操作'; 8 | STRINGS.CONFIRM_DELETE_BOOK = '是否删除APK?'; 9 | STRINGS.DOWNLOAD_FILE = '下载文件'; 10 | STRINGS.DELETE_FILE = '删除文件'; 11 | STRINGS.USE_ONE_BROWSER = '无法上传文件,请勿使用多个浏览器窗口同时上传。'; 12 | STRINGS.UPLOAD_FAILED = '上传失败,请重新打开WiFi APP安装服务并刷新此页重新上传。'; 13 | STRINGS.UNSUPPORTED_FILE_TYPE = '请选择APK文件。'; 14 | STRINGS.FILE_IN_QUEUE = '文件已经在上传列队中。'; 15 | STRINGS.FILE_EXISTS = '文件已存在,请先删除再重新上传。'; 16 | STRINGS.YOU_CHOOSE = '您选择了'; 17 | STRINGS.CHOSEN_FILE_COUNT = '个文件,只能上传'; 18 | STRINGS.VALID_CHOSEN_FILE_COUNT = '个文件。\n请选择APK文件,文件名不能重复。'; 19 | STRINGS.CANCEL = '取消'; 20 | STRINGS.SELECT_YOUR_FILES = '请选择您要上传到WIFI APP安装的文件'; 21 | STRINGS.SUPPORTED_FILE_TYPES = '支持APK'; 22 | STRINGS.CANNOT_CONNECT_SERVER = '无法连接WiFi传书服务器,请重新打开WiFi APP安装服务并刷新此页后重新上传。'; 23 | STRINGS.DRAG_TO_HERE = "拖拽到此处上传"; 24 | STRINGS.SELECT_BUTTON_LABLE1 = "选择文件"; 25 | STRINGS.SELECT_BUTTON_LABLE2 = "可同时上传多个文件"; 26 | STRINGS.SELECT_BUTTON_LABLE = "选择文件"; 27 | STRINGS.WIFI_AVAILABLE = "WiFi连接已启用"; 28 | 29 | STRINGS.FONT_WIFI_TRANS_TITLE = 'WiFi 传字体'; 30 | STRINGS.FONT_CONFIRM_DELETE_BOOK = '是否删除字体?'; 31 | STRINGS.FONT_UNSUPPORTED_FILE_TYPE = '请选择您要上传的TTF或OTF字体文件。'; 32 | STRINGS.FONT_SUPPORTED_FILE_TYPES = '支持TTF和OTF'; 33 | STRINGS.FONT_VALID_CHOSEN_FILE_COUNT = '个文件。\n请选择TTF或OTF文件,文件名不能重复。'; 34 | STRINGS.FONT_FILE_EXISTS = '文件已存在。'; 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/baidusoso/wifitransfer/Constants.java: -------------------------------------------------------------------------------- 1 | package com.baidusoso.wifitransfer; 2 | 3 | import android.os.Environment; 4 | 5 | import java.io.File; 6 | 7 | 8 | public class Constants { 9 | public static final int HTTP_PORT = 12345; 10 | public static final String DIR_IN_SDCARD = "WifiTransfer"; 11 | public static final int MSG_DIALOG_DISMISS = 0; 12 | public static final File DIR = new File(Environment.getExternalStorageDirectory() + File.separator + Constants.DIR_IN_SDCARD); 13 | 14 | public static final class RxBusEventType { 15 | public static final String POPUP_MENU_DIALOG_SHOW_DISMISS = "POPUP MENU DIALOG SHOW DISMISS"; 16 | public static final String WIFI_CONNECT_CHANGE_EVENT = "WIFI CONNECT CHANGE EVENT"; 17 | public static final String LOAD_BOOK_LIST = "LOAD BOOK LIST"; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/baidusoso/wifitransfer/InfoModel.java: -------------------------------------------------------------------------------- 1 | package com.baidusoso.wifitransfer; 2 | 3 | import android.graphics.drawable.Drawable; 4 | 5 | /** 6 | * Created by cretin on 2018/1/12. 7 | */ 8 | 9 | public class InfoModel { 10 | private String path; 11 | private String version; 12 | private String size; 13 | private String name; 14 | private String packageName; 15 | private boolean installed; 16 | private Drawable icon; 17 | 18 | public Drawable getIcon() { 19 | return icon; 20 | } 21 | 22 | public void setIcon(Drawable icon) { 23 | this.icon = icon; 24 | } 25 | 26 | public String getPath() { 27 | return path; 28 | } 29 | 30 | public void setPath(String path) { 31 | this.path = path; 32 | } 33 | 34 | public String getVersion() { 35 | return version; 36 | } 37 | 38 | public void setVersion(String version) { 39 | this.version = version; 40 | } 41 | 42 | public String getSize() { 43 | return size; 44 | } 45 | 46 | public void setSize(String size) { 47 | this.size = size; 48 | } 49 | 50 | public String getName() { 51 | return name; 52 | } 53 | 54 | public void setName(String name) { 55 | this.name = name; 56 | } 57 | 58 | public String getPackageName() { 59 | return packageName; 60 | } 61 | 62 | public void setPackageName(String packageName) { 63 | this.packageName = packageName; 64 | } 65 | 66 | public boolean isInstalled() { 67 | return installed; 68 | } 69 | 70 | public void setInstalled(boolean installed) { 71 | this.installed = installed; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /app/src/main/java/com/baidusoso/wifitransfer/ItemButtomDecoration.java: -------------------------------------------------------------------------------- 1 | package com.baidusoso.wifitransfer; 2 | 3 | import android.content.Context; 4 | import android.graphics.Rect; 5 | import android.support.v7.widget.RecyclerView; 6 | import android.view.View; 7 | import android.widget.TextView; 8 | 9 | 10 | public class ItemButtomDecoration extends RecyclerView.ItemDecoration { 11 | private Context mContext; 12 | private int height; 13 | 14 | public ItemButtomDecoration(Context context) { 15 | mContext = context; 16 | } 17 | 18 | public ItemButtomDecoration(Context context, int height) { 19 | mContext = context; 20 | this.height = height; 21 | } 22 | 23 | /** 24 | * @param outRect 边界 25 | * @param view recyclerView ItemView 26 | * @param parent recyclerView 27 | * @param state recycler 内部数据管理 28 | */ 29 | @Override 30 | public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 31 | //设定底部边距为10px 32 | if ( parent.getChildLayoutPosition(view) == state.getItemCount() - 1 33 | || parent.getChildLayoutPosition(view) == -1 ) { 34 | outRect.set(0, 0, 0, 0); 35 | } else { 36 | outRect.set(0, 0, 0, ( int ) (getScreenScale(mContext) * (height == 0 ? 10 : height))); 37 | } 38 | } 39 | 40 | /** 41 | * 获取屏幕的缩放级别 42 | * 43 | * @param context 44 | * @return 45 | */ 46 | public static float getScreenScale(Context context) { 47 | TextView tv = new TextView(context); 48 | tv.setTextSize(1); 49 | return tv.getTextSize(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/baidusoso/wifitransfer/WifiConnectChangedReceiver.java: -------------------------------------------------------------------------------- 1 | package com.baidusoso.wifitransfer; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.net.NetworkInfo; 7 | import android.net.wifi.WifiManager; 8 | import android.os.Parcelable; 9 | 10 | import com.hwangjr.rxbus.RxBus; 11 | 12 | public class WifiConnectChangedReceiver extends BroadcastReceiver { 13 | 14 | @Override 15 | public void onReceive(Context context, Intent intent) { 16 | if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { 17 | Parcelable parcelableExtra = intent 18 | .getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 19 | if (null != parcelableExtra) { 20 | NetworkInfo networkInfo = (NetworkInfo) parcelableExtra; 21 | RxBus.get().post(Constants.RxBusEventType.WIFI_CONNECT_CHANGE_EVENT, networkInfo.getState()); 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/baidusoso/wifitransfer/WifiUtils.java: -------------------------------------------------------------------------------- 1 | package com.baidusoso.wifitransfer; 2 | 3 | import android.content.Context; 4 | import android.net.ConnectivityManager; 5 | import android.net.NetworkInfo; 6 | import android.net.wifi.WifiInfo; 7 | import android.net.wifi.WifiManager; 8 | 9 | /** 10 | * Created by masel on 2016/10/10. 11 | */ 12 | 13 | public class WifiUtils { 14 | 15 | public static String getWifiIp(Context context) { 16 | WifiManager wifimanager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 17 | WifiInfo wifiInfo = wifimanager.getConnectionInfo(); 18 | if (wifiInfo != null) { 19 | return intToIp(wifiInfo.getIpAddress()); 20 | } 21 | return null; 22 | } 23 | 24 | private static String intToIp(int i) { 25 | return (i & 0xFF) + "." + ((i >> 8) & 0xFF) + "." + ((i >> 16) & 0xFF) + "." + ((i >> 24) & 0xFF); 26 | } 27 | 28 | public static int getWifiState(Context context) { 29 | WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 30 | if (wifiManager != null) { 31 | return wifiManager.getWifiState(); 32 | } 33 | return WifiManager.WIFI_STATE_DISABLED; 34 | } 35 | 36 | public static NetworkInfo.State getWifiConnectState(Context context) { 37 | ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 38 | NetworkInfo mWiFiNetworkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 39 | if (mWiFiNetworkInfo != null) { 40 | return mWiFiNetworkInfo.getState(); 41 | } 42 | return NetworkInfo.State.DISCONNECTED; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/AppContext.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.app.Application; 5 | 6 | @SuppressLint("PrivateApi") 7 | public class AppContext { 8 | public static final Application INSTANCE; 9 | 10 | public AppContext() { 11 | } 12 | 13 | static { 14 | Application app = null; 15 | 16 | try { 17 | app = (Application)Class.forName("android.app.AppGlobals").getMethod("getInitialApplication", new Class[0]).invoke((Object)null, new Object[0]); 18 | if(app == null) { 19 | throw new IllegalStateException("Static initialization of Applications must be on main thread."); 20 | } 21 | } catch (Exception var8) { 22 | var8.printStackTrace(); 23 | 24 | try { 25 | app = (Application)Class.forName("android.app.ActivityThread").getMethod("currentApplication", new Class[0]).invoke((Object)null, new Object[0]); 26 | } catch (Exception var7) { 27 | var7.printStackTrace(); 28 | } 29 | } finally { 30 | INSTANCE = app; 31 | } 32 | 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/greendao/MigrationSQLiteOpenHelper.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.greendao; 2 | 3 | import android.content.Context; 4 | import android.database.sqlite.SQLiteDatabase; 5 | 6 | import com.github.yuweiguocn.library.greendao.MigrationHelper; 7 | 8 | 9 | public class MigrationSQLiteOpenHelper extends DaoMaster.OpenHelper { 10 | 11 | public MigrationSQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory) { 12 | super(context, name, factory); 13 | } 14 | 15 | @SuppressWarnings("unchecked") 16 | @Override 17 | public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 18 | MigrationHelper.DEBUG = true; 19 | MigrationHelper.migrate(db, 20 | MockDataDao.class, 21 | CrashDataDao.class, 22 | LocalMockDataDao.class, 23 | EmailDataDao.class); 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/greendao/SessionFactory.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.greendao; 2 | 3 | import com.supets.commons.App; 4 | 5 | public class SessionFactory { 6 | 7 | private static DaoSession daoSession; 8 | 9 | protected static DaoSession getDbSession() { 10 | 11 | if (daoSession == null) { 12 | synchronized (SessionFactory.class) { 13 | if (daoSession == null) { 14 | MigrationSQLiteOpenHelper devOpenHelper = new MigrationSQLiteOpenHelper(App.INSTANCE, "event.db", null); 15 | DaoMaster daoMaster = new DaoMaster(devOpenHelper.getWritableDb()); 16 | daoSession = daoMaster.newSession(); 17 | } 18 | } 19 | } 20 | return daoSession; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/base/BaseRecycleViewHolder.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.base; 2 | 3 | import android.support.v7.widget.RecyclerView; 4 | import android.view.View; 5 | 6 | public class BaseRecycleViewHolder extends RecyclerView.ViewHolder { 7 | 8 | public BaseRecycleViewHolder(View itemView) { 9 | super(itemView); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/bean/CrashData.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Id; 5 | import org.greenrobot.greendao.annotation.Property; 6 | import org.greenrobot.greendao.annotation.Generated; 7 | 8 | @Entity 9 | public class CrashData { 10 | @Id 11 | private Long id; 12 | @Property(nameInDb = "crash") 13 | private String crash; 14 | @Generated(hash = 645541351) 15 | public CrashData(Long id, String crash) { 16 | this.id = id; 17 | this.crash = crash; 18 | } 19 | @Generated(hash = 252313082) 20 | public CrashData() { 21 | } 22 | public Long getId() { 23 | return this.id; 24 | } 25 | public void setId(Long id) { 26 | this.id = id; 27 | } 28 | public String getCrash() { 29 | return this.crash; 30 | } 31 | public void setCrash(String crash) { 32 | this.crash = crash; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/bean/EmailData.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Id; 5 | import org.greenrobot.greendao.annotation.Property; 6 | import org.greenrobot.greendao.annotation.Generated; 7 | 8 | @Entity 9 | public class EmailData { 10 | @Id 11 | private Long id; 12 | @Property(nameInDb = "name") 13 | private String name; 14 | @Property(nameInDb = "email") 15 | private String email; 16 | @Generated(hash = 1411676730) 17 | public EmailData(Long id, String name, String email) { 18 | this.id = id; 19 | this.name = name; 20 | this.email = email; 21 | } 22 | @Generated(hash = 228365985) 23 | public EmailData() { 24 | } 25 | public Long getId() { 26 | return this.id; 27 | } 28 | public void setId(Long id) { 29 | this.id = id; 30 | } 31 | public String getName() { 32 | return this.name; 33 | } 34 | public void setName(String name) { 35 | this.name = name; 36 | } 37 | public String getEmail() { 38 | return this.email; 39 | } 40 | public void setEmail(String email) { 41 | this.email = email; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/bean/LocalMockData.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Generated; 5 | import org.greenrobot.greendao.annotation.Id; 6 | import org.greenrobot.greendao.annotation.Property; 7 | import org.greenrobot.greendao.annotation.Unique; 8 | 9 | @Entity 10 | public class LocalMockData { 11 | 12 | @Id 13 | private Long id; 14 | @Unique 15 | @Property(nameInDb = "url") 16 | private String url; 17 | @Property(nameInDb = "data") 18 | private String data; 19 | @Property(nameInDb = "selected") 20 | private Boolean selected; 21 | 22 | @Generated(hash = 1507613591) 23 | public LocalMockData(Long id, String url, String data, Boolean selected) { 24 | this.id = id; 25 | this.url = url; 26 | this.data = data; 27 | this.selected = selected; 28 | } 29 | @Generated(hash = 83650390) 30 | public LocalMockData() { 31 | } 32 | 33 | public Long getId() { 34 | return this.id; 35 | } 36 | public void setId(Long id) { 37 | this.id = id; 38 | } 39 | public String getUrl() { 40 | return this.url; 41 | } 42 | public void setUrl(String url) { 43 | this.url = url; 44 | } 45 | public String getData() { 46 | return this.data; 47 | } 48 | public void setData(String data) { 49 | this.data = data; 50 | } 51 | public Boolean getSelected() { 52 | return this.selected; 53 | } 54 | public void setSelected(Boolean selected) { 55 | this.selected = selected; 56 | } 57 | 58 | } 59 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/bean/MockExampleData.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Id; 5 | import org.greenrobot.greendao.annotation.Property; 6 | import org.greenrobot.greendao.annotation.Generated; 7 | import org.greenrobot.greendao.annotation.Unique; 8 | 9 | @Entity 10 | public class MockExampleData { 11 | 12 | @Id 13 | private Long id; 14 | 15 | @Property(nameInDb = "name") 16 | private String name; 17 | @Property(nameInDb = "data") 18 | private String data; 19 | 20 | @Generated(hash = 133887110) 21 | public MockExampleData(Long id, String name, String data) { 22 | this.id = id; 23 | this.name = name; 24 | this.data = data; 25 | } 26 | @Generated(hash = 1716812212) 27 | public MockExampleData() { 28 | } 29 | public Long getId() { 30 | return this.id; 31 | } 32 | public void setId(Long id) { 33 | this.id = id; 34 | } 35 | public String getName() { 36 | return this.name; 37 | } 38 | public void setName(String name) { 39 | this.name = name; 40 | } 41 | public String getData() { 42 | return this.data; 43 | } 44 | public void setData(String data) { 45 | this.data = data; 46 | } 47 | 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/bean/WordData.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.bean; 2 | 3 | import org.greenrobot.greendao.annotation.Entity; 4 | import org.greenrobot.greendao.annotation.Id; 5 | import org.greenrobot.greendao.annotation.Property; 6 | import org.greenrobot.greendao.annotation.Generated; 7 | 8 | @Entity 9 | public class WordData { 10 | @Id 11 | private Long id; 12 | @Property(nameInDb = "name") 13 | private String name; 14 | @Property(nameInDb = "module") 15 | private String module; 16 | @Generated(hash = 1940970128) 17 | public WordData(Long id, String name, String module) { 18 | this.id = id; 19 | this.name = name; 20 | this.module = module; 21 | } 22 | @Generated(hash = 551690561) 23 | public WordData() { 24 | } 25 | public Long getId() { 26 | return this.id; 27 | } 28 | public void setId(Long id) { 29 | this.id = id; 30 | } 31 | public String getName() { 32 | return this.name; 33 | } 34 | public void setName(String name) { 35 | this.name = name; 36 | } 37 | public String getModule() { 38 | return this.module; 39 | } 40 | public void setModule(String module) { 41 | this.module = module; 42 | } 43 | 44 | 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/config/BasePref.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.config; 2 | 3 | import android.content.Context; 4 | import android.content.SharedPreferences; 5 | import android.text.TextUtils; 6 | 7 | import com.supets.commons.App; 8 | 9 | 10 | class BasePref { 11 | 12 | protected static SharedPreferences getPref(String name) { 13 | if (TextUtils.isEmpty(name)) { 14 | throw new NullPointerException("Shared preferences name is null or empty"); 15 | } 16 | return App.INSTANCE.getSharedPreferences(name, Context.MODE_PRIVATE); 17 | } 18 | 19 | protected static SharedPreferences.Editor edit(String name) { 20 | return getPref(name).edit(); 21 | } 22 | 23 | public static void clear(String name) { 24 | edit(name).clear().commit(); 25 | } 26 | 27 | 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/dao/CrashDataDB.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.dao; 2 | 3 | import com.supets.pet.greendao.CrashDataDao; 4 | import com.supets.pet.greendao.SessionFactory; 5 | import com.supets.pet.mock.bean.CrashData; 6 | 7 | import java.util.List; 8 | 9 | public class CrashDataDB extends SessionFactory { 10 | 11 | 12 | private static final CrashDataDao crashDataDao = getDbSession().getCrashDataDao(); 13 | 14 | 15 | public static List queryAll() { 16 | return crashDataDao.queryBuilder().list(); 17 | } 18 | 19 | public static List queryCrashDataById(String id) { 20 | return crashDataDao.queryRaw("where _id = ? ", id); 21 | } 22 | 23 | public static void insertCrashData(CrashData status) { 24 | crashDataDao.insert(status); 25 | } 26 | 27 | public static void updateCrashData(CrashData status) { 28 | crashDataDao.update(status); 29 | } 30 | 31 | public static void deleteCrashData(CrashData status) { 32 | crashDataDao.delete(status); 33 | } 34 | 35 | public static void deleteAll() { 36 | crashDataDao.deleteAll(); 37 | } 38 | 39 | public static List getCrashDataList() { 40 | return CrashDataDB.queryAll(); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/dao/EmailDataDB.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.dao; 2 | 3 | import android.support.annotation.NonNull; 4 | 5 | import com.supets.pet.greendao.EmailDataDao; 6 | import com.supets.pet.greendao.SessionFactory; 7 | import com.supets.pet.mock.bean.EmailData; 8 | import com.supets.pet.mock.config.Config; 9 | 10 | import java.util.ArrayList; 11 | import java.util.List; 12 | 13 | public class EmailDataDB extends SessionFactory { 14 | 15 | 16 | private static final EmailDataDao emailDataDao = getDbSession().getEmailDataDao(); 17 | 18 | 19 | public static List queryAll() { 20 | return emailDataDao.queryBuilder().list(); 21 | } 22 | 23 | public static List queryEmailDataById(String id) { 24 | return emailDataDao.queryRaw("where _id = ? ", id); 25 | } 26 | 27 | public static void insertEmailData(EmailData status) { 28 | List list = 29 | emailDataDao.queryRaw("where email = ? ", status.getEmail()); 30 | if (list == null || list.isEmpty()) { 31 | emailDataDao.insert(status); 32 | } 33 | } 34 | 35 | public static void updateEmailData(EmailData status) { 36 | emailDataDao.update(status); 37 | } 38 | 39 | public static void deleteEmailData(EmailData status) { 40 | emailDataDao.delete(status); 41 | } 42 | 43 | public static void deleteAll() { 44 | emailDataDao.deleteAll(); 45 | } 46 | 47 | @NonNull 48 | public static List getEmailList() { 49 | List list; 50 | List data = EmailDataDB.queryAll(); 51 | if (data != null && data.size() > 0) { 52 | return data; 53 | } else { 54 | list = new ArrayList<>(); 55 | EmailData emailData = new EmailData(); 56 | emailData.setName("兔子测试团队"); 57 | emailData.setEmail(Config.getEmailName()); 58 | } 59 | return list; 60 | } 61 | 62 | } 63 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/dao/MockExampleDataDB.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.dao; 2 | 3 | import com.supets.pet.greendao.MockExampleDataDao; 4 | import com.supets.pet.greendao.SessionFactory; 5 | import com.supets.pet.mock.bean.MockExampleData; 6 | 7 | import java.util.List; 8 | 9 | public class MockExampleDataDB extends SessionFactory { 10 | 11 | private static final MockExampleDataDao dao = getDbSession().getMockExampleDataDao(); 12 | 13 | public static List queryAllMockData(String name) { 14 | return dao.queryRaw("where name= ?", name); 15 | } 16 | 17 | public static List queryAllMockDataById(String id) { 18 | return dao.queryRaw("where _id= ?", id); 19 | } 20 | 21 | public static List queryAll() { 22 | return dao.loadAll(); 23 | } 24 | 25 | public static void insertMockData(MockExampleData status) { 26 | dao.insert(status); 27 | } 28 | 29 | public static void updateMockData(MockExampleData status) { 30 | dao.update(status); 31 | } 32 | 33 | public static void deleteMockData(MockExampleData status) { 34 | dao.delete(status); 35 | } 36 | 37 | public static void deleteAll() { 38 | dao.deleteAll(); 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/filebrowser/FileData.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.filebrowser; 2 | 3 | public class FileData { 4 | public String name;//显示名称 5 | public String path;//本身路径 6 | public boolean isDir;//本身是否是目录 7 | 8 | 9 | public FileData(String name, String path, boolean isDir) { 10 | this.name = name; 11 | this.path = path; 12 | this.isDir = isDir; 13 | } 14 | 15 | public FileData() { 16 | 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/filebrowser/FilieManagerUtils.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.filebrowser; 2 | 3 | import android.os.Environment; 4 | 5 | import java.io.File; 6 | import java.util.ArrayList; 7 | 8 | public class FilieManagerUtils { 9 | 10 | 11 | public static ArrayList getFileList(String root) { 12 | ArrayList data = new ArrayList<>(); 13 | File rootFile = new File(root);//当前目录 14 | if (rootFile.isDirectory()) { 15 | if (rootFile.getAbsolutePath().equals(Environment.getExternalStorageDirectory().getAbsolutePath())) { 16 | data.add(new FileData("根目录:", Environment.getExternalStorageDirectory().getAbsolutePath(), true)); 17 | } else { 18 | data.add(new FileData("当前所在目录:" + rootFile.getName() + " 上一级目录:" + rootFile.getParentFile().getName(), rootFile.getParentFile().getAbsolutePath(), true)); 19 | } 20 | File[] files = rootFile.listFiles(); 21 | if (files != null) { 22 | for (File temp : files) { 23 | data.add(new FileData(temp.getName(), temp.getAbsolutePath(), temp.isDirectory())); 24 | } 25 | } 26 | } 27 | return data; 28 | } 29 | 30 | public static ArrayList getFileListSdCard() { 31 | return getFileList(Environment.getExternalStorageDirectory().getAbsolutePath()); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/home/MockFlashActivity.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.home; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.os.Handler; 6 | import android.support.v7.app.AppCompatActivity; 7 | 8 | import com.supets.pet.mockui.R; 9 | 10 | 11 | public class MockFlashActivity extends AppCompatActivity { 12 | 13 | private Handler handler = new Handler(); 14 | 15 | @Override 16 | protected void onCreate(Bundle savedInstanceState) { 17 | super.onCreate(savedInstanceState); 18 | setContentView(R.layout.activity_flash); 19 | handler.postDelayed(new Runnable() { 20 | @Override 21 | public void run() { 22 | startHome(); 23 | } 24 | }, 2000); 25 | } 26 | 27 | private void startHome() { 28 | Intent intent = new Intent(this, MockUiActivity.class); 29 | startActivity(intent); 30 | finish(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/phone/ContactsBean.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.phone; 2 | 3 | public class ContactsBean { 4 | 5 | private String name; 6 | private String phone; 7 | 8 | public String getName() { 9 | return name; 10 | } 11 | 12 | public String getPhone() { 13 | return phone; 14 | } 15 | 16 | public void setName(String name) { 17 | this.name = name; 18 | } 19 | 20 | public void setPhone(String phone) { 21 | this.phone = phone; 22 | } 23 | 24 | 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/translate/PinyinComparator.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.translate; 2 | 3 | import java.util.Collections; 4 | import java.util.Comparator; 5 | import java.util.List; 6 | 7 | public class PinyinComparator implements Comparator { 8 | 9 | public int compare(SortModel o1, SortModel o2) { 10 | if (o1.getSortLetters().equals("@") 11 | || o2.getSortLetters().equals("#")) { 12 | return -1; 13 | } else if (o1.getSortLetters().equals("#") 14 | || o2.getSortLetters().equals("@")) { 15 | return 1; 16 | } else { 17 | return o1.getSortLetters().compareTo(o2.getSortLetters()); 18 | } 19 | } 20 | 21 | public static void main(String[] args) { 22 | // 根据a-z进行排序源数据 23 | String[] date = new String[]{"你好啊", "A"}; 24 | List list = CharacterParser.filledData(date); 25 | Collections.sort(list, new PinyinComparator()); 26 | } 27 | 28 | 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/translate/PlayMp3.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.translate; 2 | 3 | import android.media.MediaPlayer; 4 | 5 | import java.io.IOException; 6 | 7 | public class PlayMp3 { 8 | 9 | private MediaPlayer mediaPlayer = new MediaPlayer(); 10 | 11 | public void play(String url) { 12 | try { 13 | mediaPlayer.reset(); 14 | mediaPlayer.setDataSource(url); //为播放器设置mp3文件的路径 15 | mediaPlayer.prepare(); //做好准备 16 | mediaPlayer.start(); 17 | } catch (IOException e) { 18 | e.printStackTrace(); 19 | } 20 | } 21 | 22 | public void pause() { 23 | if (mediaPlayer.isPlaying()) { 24 | mediaPlayer.pause(); 25 | } 26 | } 27 | 28 | 29 | public void stop() { 30 | if (mediaPlayer != null && mediaPlayer.isPlaying()) { 31 | mediaPlayer.stop(); 32 | } 33 | } 34 | 35 | 36 | public void destroy() { 37 | if (mediaPlayer != null) { 38 | stop(); 39 | mediaPlayer.release(); 40 | } 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/translate/SortModel.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.translate; 2 | 3 | import android.support.annotation.Keep; 4 | 5 | @Keep 6 | public class SortModel { 7 | 8 | public String name;//名字 9 | 10 | public String sortLetters;//字母 11 | 12 | public boolean isLast = false; 13 | 14 | public String getName() { 15 | return name; 16 | } 17 | 18 | public void setName(String name) { 19 | this.name = name; 20 | } 21 | 22 | public String getSortLetters() { 23 | return sortLetters; 24 | } 25 | 26 | public void setSortLetters(String sortLetters) { 27 | this.sortLetters = sortLetters; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/uninstall/DefaultInstallStrategy.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.uninstall; 2 | 3 | class DefaultInstallStrategy { 4 | } 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/version/VersionDTO.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.version; 2 | 3 | public class VersionDTO { 4 | 5 | public int code; 6 | public String alert; 7 | public Version content; 8 | 9 | public static class Version{ 10 | public String url; 11 | public String text; 12 | public int version; 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/ui/version/WordsDTO.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.ui.version; 2 | 3 | import java.util.HashMap; 4 | 5 | public class WordsDTO { 6 | public HashMap content; 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/mock/utils/Utils.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.mock.utils; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.net.Uri; 6 | 7 | import java.net.URLDecoder; 8 | import java.util.HashMap; 9 | 10 | public class Utils { 11 | 12 | public static String formatParam(String request) { 13 | StringBuffer sb = new StringBuffer(); 14 | try { 15 | String[] params = request.split("&"); 16 | for (String param : params) { 17 | sb.append(URLDecoder.decode(param)).append("\n"); 18 | } 19 | return sb.toString(); 20 | } catch (Exception ex) { 21 | ex.printStackTrace(); 22 | } 23 | return request==null?"":request; 24 | } 25 | 26 | public static HashMap formatHashMap(String request) { 27 | HashMap map = new HashMap<>(); 28 | try { 29 | String[] params = request.split("&"); 30 | for (String param : params) { 31 | String[] keys = param.split("="); 32 | map.put(keys[0], URLDecoder.decode(keys[1])); 33 | } 34 | } catch (Exception ex) { 35 | ex.printStackTrace(); 36 | } 37 | return map; 38 | } 39 | 40 | public static void pushUrl(Context context, String url) { 41 | try { 42 | Intent intent = new Intent(); 43 | intent.setAction("android.intent.action.VIEW"); 44 | Uri content_url = Uri.parse(url); 45 | intent.setData(content_url); 46 | intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 47 | context.startActivity(intent); 48 | } catch (Exception e) { 49 | e.printStackTrace(); 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/service/CrashService.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.service; 2 | 3 | import android.content.BroadcastReceiver; 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import com.supets.lib.supetsrouter.uinav.UINav; 7 | import com.supets.pet.mock.ui.crash.MockCrashUiActivity; 8 | 9 | public class CrashService extends BroadcastReceiver { 10 | 11 | public static final String MOCK_SERVICE_CRASH = "mock.crash.service"; 12 | 13 | @Override 14 | public void onReceive(Context context, Intent intent) { 15 | 16 | if (MOCK_SERVICE_CRASH.equals(intent.getAction())) { 17 | Intent mockIntent = new Intent(context, MockCrashUiActivity.class); 18 | mockIntent.putExtra("crashlog", intent.getStringExtra("crashlog")); 19 | UINav.pushStandard(context, mockIntent); 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/uctoast/BootCompletedReceiver.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.uctoast; 2 | 3 | 4 | import android.content.Context; 5 | import android.content.Intent; 6 | import android.support.v4.content.WakefulBroadcastReceiver; 7 | 8 | public class BootCompletedReceiver extends WakefulBroadcastReceiver { 9 | 10 | @Override 11 | public void onReceive(Context context, Intent intent) { 12 | ListenClipboardService.startForWeakLock(context, intent); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/uctoast/Utils.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.uctoast; 2 | 3 | import android.content.Intent; 4 | import android.os.Bundle; 5 | import android.util.Log; 6 | 7 | public final class Utils { 8 | 9 | private final static String LOG_TAG = "uc-toast"; 10 | 11 | public static String bundleToString(Bundle bundle) { 12 | if (bundle == null) { 13 | return null; 14 | } 15 | String string = "Bundle{"; 16 | for (String key : bundle.keySet()) { 17 | string += " " + key + " => " + bundle.get(key) + ";"; 18 | } 19 | string += " }Bundle"; 20 | return string; 21 | } 22 | 23 | public static void printIntent(String tag, Intent intent) { 24 | if (intent == null || intent.getExtras() == null) { 25 | Log.d(LOG_TAG, String.format("%s, intent: %s", tag, intent)); 26 | return; 27 | } 28 | 29 | Bundle bundle = intent.getExtras(); 30 | Log.d(LOG_TAG, String.format("%s, intent: %s, %s", tag, intent, bundleToString(bundle))); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/uctoast/ViewContainer.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.uctoast; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.KeyEvent; 6 | import android.widget.FrameLayout; 7 | 8 | public class ViewContainer extends FrameLayout { 9 | 10 | public KeyEventHandler mKeyEventHandler; 11 | 12 | public ViewContainer(Context context) { 13 | super(context); 14 | } 15 | 16 | public ViewContainer(Context context, AttributeSet attrs) { 17 | super(context, attrs); 18 | } 19 | 20 | public ViewContainer(Context context, AttributeSet attrs, int defStyleAttr) { 21 | super(context, attrs, defStyleAttr); 22 | } 23 | 24 | public void setKeyEventHandler(KeyEventHandler handler) { 25 | mKeyEventHandler = handler; 26 | } 27 | 28 | @Override 29 | public boolean dispatchKeyEvent(KeyEvent event) { 30 | if (mKeyEventHandler != null) { 31 | mKeyEventHandler.onKeyEvent(event); 32 | } 33 | return super.dispatchKeyEvent(event); 34 | } 35 | 36 | public interface KeyEventHandler { 37 | void onKeyEvent(KeyEvent event); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/uctoast/clipboard/ClipboardManagerCompat.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.uctoast.clipboard; 2 | 3 | import android.content.Context; 4 | import android.os.Build; 5 | 6 | import java.util.ArrayList; 7 | 8 | public abstract class ClipboardManagerCompat { 9 | 10 | protected final ArrayList mPrimaryClipChangedListeners 11 | = new ArrayList(); 12 | 13 | public static ClipboardManagerCompat create(Context context) { 14 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 15 | return new ClipboardManagerImpl11(context); 16 | } else { 17 | return new ClipboardManagerImpl9(context); 18 | } 19 | } 20 | 21 | public void addPrimaryClipChangedListener(OnPrimaryClipChangedListener listener) { 22 | synchronized (mPrimaryClipChangedListeners) { 23 | mPrimaryClipChangedListeners.add(listener); 24 | } 25 | } 26 | 27 | protected final void notifyPrimaryClipChanged() { 28 | synchronized (mPrimaryClipChangedListeners) { 29 | for (int i = 0; i < mPrimaryClipChangedListeners.size(); i++) { 30 | mPrimaryClipChangedListeners.get(i).onPrimaryClipChanged(); 31 | } 32 | } 33 | } 34 | 35 | public void removePrimaryClipChangedListener(OnPrimaryClipChangedListener listener) { 36 | synchronized (mPrimaryClipChangedListeners) { 37 | mPrimaryClipChangedListeners.remove(listener); 38 | } 39 | } 40 | 41 | public abstract CharSequence getText(); 42 | 43 | public interface OnPrimaryClipChangedListener { 44 | void onPrimaryClipChanged(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/supets/pet/uctoast/clipboard/ClipboardManagerImpl11.java: -------------------------------------------------------------------------------- 1 | package com.supets.pet.uctoast.clipboard; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.ClipboardManager; 5 | import android.content.Context; 6 | import android.os.Build; 7 | 8 | @TargetApi(Build.VERSION_CODES.HONEYCOMB) 9 | public final class ClipboardManagerImpl11 extends ClipboardManagerCompat { 10 | 11 | ClipboardManager.OnPrimaryClipChangedListener mOnPrimaryClipChangedListener = new ClipboardManager.OnPrimaryClipChangedListener() { 12 | @Override 13 | public void onPrimaryClipChanged() { 14 | notifyPrimaryClipChanged(); 15 | } 16 | }; 17 | private ClipboardManager mClipboardManager; 18 | 19 | public ClipboardManagerImpl11(Context context) { 20 | mClipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); 21 | } 22 | 23 | @Override 24 | public void addPrimaryClipChangedListener(OnPrimaryClipChangedListener listener) { 25 | super.addPrimaryClipChangedListener(listener); 26 | synchronized (mPrimaryClipChangedListeners) { 27 | if (mPrimaryClipChangedListeners.size() == 1) { 28 | mClipboardManager.addPrimaryClipChangedListener(mOnPrimaryClipChangedListener); 29 | } 30 | } 31 | } 32 | 33 | @Override 34 | public void removePrimaryClipChangedListener(OnPrimaryClipChangedListener listener) { 35 | super.removePrimaryClipChangedListener(listener); 36 | synchronized (mPrimaryClipChangedListeners) { 37 | if (mPrimaryClipChangedListeners.size() == 0) { 38 | mClipboardManager.removePrimaryClipChangedListener(mOnPrimaryClipChangedListener); 39 | } 40 | } 41 | } 42 | 43 | @Override 44 | public CharSequence getText() { 45 | return mClipboardManager.getText(); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/res/anim/msg_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/msg_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popup_menu_dialog_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popup_menu_dialog_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/color/home_tab_color_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/circle_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/circle_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/default_header.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/default_header.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/icon_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/icon_big.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_tab.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/icon_tab.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_wenhao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/icon_wenhao.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/tuzi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xhdpi/tuzi.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/kulian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xxhdpi/kulian.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable-xxhdpi/more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_book_cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable/ic_book_cover.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wifi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable/ic_wifi.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable/icon.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable/m_pet_sidebar_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/popup_menu_view_background.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable/popup_menu_view_background.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_orange.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_common_bg_frame10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 11 | 12 | 13 | //背景色 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_red_bg_frame10.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 11 | 12 | 13 | //背景色 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shared_wifi_enable.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable/shared_wifi_enable.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/shared_wifi_shut_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/rabbit-open/rabbit/2fcfaa5320d32c688dcd151c84558e97ac1b9621/app/src/main/res/drawable/shared_wifi_shut_down.png -------------------------------------------------------------------------------- /app/src/main/res/layout-xhdpi/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 19 | 20 | 21 | 22 | 23 | 24 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout-xhdpi/activity_pcconfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout-xhdpi/content_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/res/layout-xhdpi/empty_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/layout-xhdpi/float_window_small.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 18 | 19 | -------------------------------------------------------------------------------- /app/src/main/res/layout-xhdpi/grid_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 19 | 20 | 33 | 34 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_clip_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_crash_ui.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 16 | 17 | 21 | 22 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_mock_configjson.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 20 | 21 | 27 | 28 | 29 | 40 | 41 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_mock_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 11 | 12 | 17 | 18 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_mock_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_mock_updateemail.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 20 | 21 | 25 | 26 | 32 | 33 | 37 | 38 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_mock_updatemodel.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 19 | 20 | 24 | 25 | 31 | 32 | 36 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_mock_url.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | 17 | 18 | 25 | 26 |