From 60e97a582feba0526c64d823fcf74e1cb97fd4c1 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 07 一月 2022 19:01:39 +0800 Subject: [PATCH] '完善' --- src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageFileCache.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionsFragment.class | 0 src/main/resources/code/android/library-ad/src/main/res/values/strings.xml | 3 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DateUtils.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/MyJavaInterface.java | 238 src/main/resources/code/android/library-common/bin/jarlist.cache | 3 src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values/values.xml | 75 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/SpotlightDrawable.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/Environment.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DatabaseContext.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.java | 74 src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugShaders/merger.xml | 2 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideCircleTransform.java | 76 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable$1.class | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_grid.xml | 13 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/VideoUrlFragment.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.java | 858 + src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$1.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$5.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DateUtils.java | 375 src/main/resources/code/android/library-ec/src/androidTest/java/com/demo/library_ec/ExampleInstrumentedTest.java | 26 src/main/resources/code/android/library-ad/build.gradle | 42 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight.png | 0 src/main/resources/code/android/app/src/androidTest/java/com/demo/app/ExampleInstrumentedTest.java | 26 src/main/resources/code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/FileCallBack.java | 100 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable_color_progressbar.xml.flat | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil$1.class | 0 src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight_blue.png | 0 src/main/resources/code/android/library-common/build/intermediates/aar_metadata/debug/aar-metadata.properties | 2 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values/values.xml | 75 src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/R.java | 509 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/CookieStore.java | 21 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.java | 9 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StorageUtils.java | 166 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/ImageUtils.java | 196 src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateActivity.java | 38 src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionHandler.java | 54 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/JumpActivityUtil.java | 88 src/main/resources/code/android/library-common/proguard-project.txt | 20 src/main/resources/code/android/library-common/src/com/demo/lib/common/DatabaseContext.java | 108 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IsPad.java | 16 src/main/java/com/ks/codegenerator/utils/AndroidBuilder.java | 177 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_pause.png.flat | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-1.7.2.min.js | 4 src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateService.java | 105 src/main/resources/code/android/library-common/assets/css/jquery.confirm/header_bg.jpg | 0 src/main/resources/code/android/app/src/main/res/layout/dialog_exit.xml | 68 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/UnderLineTextView.java | 46 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/IClipboardContentListener.class | 0 src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merger.xml | 86 src/main/resources/code/android/library-login/src/main/res/values/styles.xml | 12 src/main/resources/code/android/app/src/main/res/layout/activity_browser.xml | 23 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$TransitionState.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/Installation.java | 43 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils.class | 0 src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/ILoginListener.java | 118 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Entry.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionGridFragment.class | 0 src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/IntertitialAdUtil.java | 136 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SingleToast.java | 32 src/main/resources/code/android/library-login/.gitignore | 1 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RefreshView.class | 0 src/main/resources/code/android/library-login/build.gradle | 37 src/main/resources/code/android/library-common/res/values/colors.xml | 24 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png | 0 src/main/resources/code/android/library-common/assets/lib/jquery-1.7.2.min.js | 4 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$OnEditListener.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_checked.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService.class | 0 src/main/resources/code/android/library-common/libs/AndRatingBar-1.0.3.aar | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight_blue.png | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/log/LoggerInterceptor.java | 163 src/main/resources/code/android/app/src/main/res/values/dimens.xml | 3 src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/SplashAdUtil.java | 171 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$2.class | 0 src/main/resources/code/android/library-dp/src/main/res/values/colors.xml | 10 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/009.gif | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/SystemClipImageUtil.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/FragmentSwitchHelper.class | 0 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_222222_256x240.png | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_exit.xml.flat | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyListView.class | 0 src/main/resources/code/android/gradle/wrapper/gradle-wrapper.properties | 6 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/SimpleBrowserActivity.java | 188 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/CookieJarImpl.java | 41 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller.class | 0 src/main/resources/code/android/library-common/bin/AndroidManifest.xml | 16 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ScreenUtils.java | 126 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SerializeUtils.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/PhoneCallReceiver.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DimenUtils.java | 64 src/main/resources/code/android/library-dp/src/main/res/values-night/themes.xml | 16 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostStringBuilder.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostStringRequest.java | 52 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ConnectionUtils.java | 85 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/TVMediaController.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/UnderLineTextView.class | 0 src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/TTAdManagerHolder.java | 52 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/header_bg.jpg | 0 src/main/resources/code/android/library-common/libs/android-query-full.0.26.7.jar | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/CheckUpdateService.java | 54 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/StringCallback.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DimenUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/listview_footer.xml | 14 src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_pause.png | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PhotoCrop.java | 184 src/main/resources/code/android/library-common/assets/css/jquery.confirm/ie.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DeviceUuidFactory.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Snapshot.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.java | 55 src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionEditText.java | 110 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home_highlight.png | 0 src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_pause.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable.class | 0 src/main/resources/code/android/library-ad/src/androidTest/java/com/demo/library_ad/ExampleInstrumentedTest.java | 26 src/main/resources/code/android/library-common/assets/css/images/android.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$Rec.class | 0 src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight_blue.png | 0 src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/RegisterActivity.java | 239 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_exit.xml | 8 src/main/resources/code/android/library-login/src/androidTest/java/com/ysvideo/zhibo/library_login/ExampleInstrumentedTest.java | 26 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/DeviceInfoUtil.java | 88 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$2.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$3.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper$Callback.class | 0 src/main/resources/code/android/library-common/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt | 23 src/main/resources/code/android/library-login/src/main/res/drawable/selector_user_agreement_checkbox.xml | 7 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/FastBitmapDrawable.java | 73 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/FlowLayout.java | 203 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SoftKeyboardUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/animation/Rotate3dAnimation.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PackageUtils2.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StorageUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$FlingRunnable.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_person_info_array_right.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader$1.class | 0 src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_positive.xml | 6 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/VerticalViewPager.class | 0 src/main/resources/code/android/app/src/main/res/drawable/shape_user_protocol_dialog_bg.xml | 6 src/main/resources/code/android/library-login/src/main/res/layout/activity_register.xml | 247 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StringUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SystemCommon.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$3.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java | 30 src/main/resources/code/android/app/src/main/res/drawable/selector_checked.xml | 7 src/main/resources/code/android/library-common/assets/lib/jquery-ui-1.8.23.custom.min.js | 25 src/main/resources/code/android/library-common/build/intermediates/library_manifest/debug/AndroidManifest.xml | 17 src/main/resources/code/android/library-ec/src/main/res/values/themes.xml | 16 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SoftKeyboardUtils.java | 29 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_a83300_256x240.png | 0 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_code.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HasParamsable.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/MD5Utils.class | 0 src/main/resources/code/android/library-common/build/intermediates/annotation_processor_list/debug/annotationProcessors.json | 1 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OkHttpRequest.java | 95 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/SystemClipImageUtil.java | 125 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1$1.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils.class | 0 src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml | 18 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ClipCopyContent.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionHandler.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionHandler.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/RequestCall.class | 0 src/main/resources/code/android/library-ec/proguard-rules.pro | 21 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$2.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RatioLayout.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/lcjian/lcjianlibrary/BuildConfig.class | 0 src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_play.png | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_storage.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/AdaptiveListView.java | 41 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$1.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/HttpApiUtil.java | 286 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeTrustManager.class | 0 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_back.png | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/MarketUtils.java | 218 src/main/resources/code/android/app/src/main/res/layout/navigation_bottom_bar.xml | 28 src/main/resources/code/android/app/src/main/res/values/themes.xml | 22 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/RetainViewFragment.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyViewPager.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$2.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/GetRequest.java | 31 src/main/resources/code/android/library-common/assets/js/main.js | 99 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_phone.png | 0 src/main/resources/code/android/library-common/libs/universal-image-loader-1.9.5.jar | 0 src/main/resources/code/android/library-common/assets/css/jquery.confirm/body_bg.jpg | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/animation/Rotate3dAnimation.java | 92 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$CountingSink.class | 0 src/main/resources/code/android/library-common/res/layout/emotion_grid.xml | 13 src/main/resources/code/android/library-ad/src/main/res/values/colors.xml | 10 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SystemCommon.class | 0 src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ManifestDataUtil.java | 40 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$1.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil.class | 0 src/main/resources/code/android/library-dp/src/main/res/values/strings.xml | 3 src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/WXUtil.java | 29 src/main/resources/code/android/app/libs/umeng-asms-armeabi-v1.4.1.aar | 0 src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v14/values-v14.xml | 9 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/LayerDrawable.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache.class | 0 src/main/resources/code/android/library-common/res/layout/media_controller.xml | 76 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_password.png | 0 src/main/resources/code/android/library-dp/src/main/res/values/themes.xml | 16 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/ScreenBrightnessUtil.class | 0 src/main/resources/code/android/library-common/res/layout/emotion_item.xml | 8 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AESOperator.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/OkHttpUtils.java | 218 src/main/resources/code/android/library-ad/src/main/res/values-night/themes.xml | 16 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_ffffff_256x240.png | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java | 98 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/ExitDialog.java | 99 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_cccccc_256x240.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DimenUtils.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/PersonInfoActivity.java | 529 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.class | 0 src/main/resources/code/android/app/src/main/res/layout/fragment_home.xml | 16 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/IClipboardContentListener.java | 5 src/main/resources/code/android/app/src/main/res/layout/navigation_top_bar.xml | 65 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/DiskLruCache.java | 943 + src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/AdUtil.java | 84 src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/FullVideoAdManager.java | 191 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AESOperator.java | 63 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/AndroidCacheUtil.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DatabaseContext.class | 0 src/main/resources/code/android/library-login/src/main/res/values/colors.xml | 18 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/ByRecyclerViewFragment.java | 71 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.java | 94 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils$ImageSize.class | 0 src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml | 17 src/main/resources/code/android/library-common/assets/css/jquery.confirm/buttons.png | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/RandomUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android$MainThreadExecutor.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/BottomDialog.java | 32 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/L.java | 21 src/main/resources/code/android/library-common/res/layout/dialog_loading.xml | 26 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-ui-1.8.23.custom.min.js | 25 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/Util.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/BaseJavaInterface.java | 147 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelper.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$LayerState.class | 0 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PhotoCrop.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/ie.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/TagCloudLayout.java | 334 src/main/resources/code/android/build.gradle | 40 src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionGridFragment.java | 107 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFileBuilder.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/ExtendedWebView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelperV2.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SingleToast.class | 0 src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/ForgetPwdActivity.java | 175 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/Constant.java | 14 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SerializeUtils.java | 75 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/CookieJarImpl.class | 0 src/main/resources/code/android/app/src/main/res/drawable/shape_theme_corner_radius_8.xml | 7 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/CheckUpdateService.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/Environment.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_portrait_default.png | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/IndexableListView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/MobileUtil.class | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_manifests/debug/output-metadata.json | 16 src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml | 2 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_unchecked.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/CookieStore.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/IGenericsSerializator.java | 8 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/LoadingDialogUtil.java | 95 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/media_controller.xml | 76 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil$1.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/UserProtocolDialog.java | 158 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/LoginUtil.java | 63 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm.css | 90 src/main/resources/code/android/library-ec/libs/JDSDK_h.jar | 0 src/main/resources/code/android/.gitignore | 15 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/index.html | 19 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine.png | 0 src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v11/values-v11.xml | 9 src/main/resources/code/android/library-login/src/main/AndroidManifest.xml | 17 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.java | 254 src/main/resources/code/android/app/src/main/res/values/styles.xml | 83 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/DashLine.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/ExpireTimeValue.java | 27 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_listview_footer.xml.flat | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.class | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_item.xml.flat | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$OnScrollListener.class | 0 src/main/resources/code/android/app/src/test/java/com/demo/app/ExampleUnitTest.java | 17 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AEScrypt.class | 0 src/main/resources/code/android/gradle.properties | 19 src/main/resources/code/android/gradlew | 185 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/DialogUtil.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DeviceUuidFactory.class | 0 src/main/resources/code/android/library-dp/src/main/AndroidManifest.xml | 12 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/Version.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyGridView.class | 0 src/main/resources/code/android/library-ad/.gitignore | 1 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller$1.class | 0 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_checked.png | 0 src/main/resources/code/android/library-dp/.gitignore | 1 src/main/resources/code/android/library-common/res/drawable/color_progressbar.xml | 28 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/IsSeeking.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Exceptions.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/LoadingDialogUtil.class | 0 src/main/java/com/ks/codegenerator/controller/GeneratorController.java | 22 src/main/resources/code/android/library-common/assets/css/jquery.confirm.css | 90 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$1.class | 0 src/main/resources/code/android/library-ec/src/test/java/com/demo/library_ec/ExampleUnitTest.java | 17 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/SystemBarTintManager.java | 592 + src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AEScrypt.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/PermissionsChecker.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/RandomUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/GetBuilder.class | 0 src/main/resources/code/android/app/src/main/AndroidManifest.xml | 39 src/main/resources/code/android/library-common/assets/css/ui-darkness/jquery-ui-1.8.23.custom.css | 310 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFormRequest.java | 131 src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionTextView.java | 106 src/main/resources/code/android/library-common/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt | 2123 +++ src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/BottomDialog.class | 0 src/main/resources/code/android/app/src/main/res/drawable/shape_white_corner_radius_3.xml | 7 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/SlidingDialog.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_launcher.png | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_a83300_256x240.png | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/PermissionAuthNotifyDialog.java | 86 src/main/resources/code/android/library-dp/src/test/java/com/demo/library_dp/ExampleUnitTest.java | 17 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideCircleTransform.class | 0 src/main/java/com/ks/codegenerator/utils/FileUtils.java | 2 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$EmotionAdapter.class | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_play.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HeadBuilder.java | 18 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/WebViewVideoFragment.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RefreshView.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/FileUtils.java | 461 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$OnConnectivityChangeListener.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png | 0 src/main/resources/code/android/app/libs/umeng-apm-armeabi-v1.5.2.aar | 0 src/main/resources/code/android/app/src/main/res/layout/fragment_byrecyclerview.xml | 20 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/MineFragment.java | 106 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/subview/MyRefreshLayout.java | 44 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack$1.class | 0 src/main/resources/code/android/library-common/project.properties | 17 src/main/resources/code/android/library-common/res/values-v11/styles.xml | 14 src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_item.xml | 8 src/main/resources/code/android/library-login/src/test/java/com/ysvideo/zhibo/library_login/ExampleUnitTest.java | 17 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/Callback.java | 82 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$BaseAnimationListener.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OtherRequest.java | 74 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java | 289 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/AppConfigUtil.java | 130 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionEditText.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/android.png | 0 src/main/resources/code/android/library-ec/build.gradle | 75 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/Util.java | 78 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyListView.java | 27 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ShelfView.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFormBuilder.java | 88 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_enter.xml | 8 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ExtendEditText.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$1.class | 0 src/main/resources/code/android/app/proguard-rules.pro | 21 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/FastBitmapDrawable.class | 0 src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/transformed/classes/classes.dex | 0 src/main/resources/code/android/library-login/proguard-rules.pro | 21 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeHostnameVerifier.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/BitmapCallback.java | 19 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/SpotlightDrawable.class | 0 src/main/resources/code/android/library-common/assets/lib/jquery.confirm.js | 85 src/main/resources/code/android/library-common/build/generated/source/buildConfig/debug/com/lcjian/lcjianlibrary/BuildConfig.java | 10 src/main/resources/code/android/library-common/res/anim/bottom_dialog_enter.xml | 8 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/dialog_loading.xml | 26 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/RefreshLayout.java | 248 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/animation/Rotate3dAnimation.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/CheckUpdateService.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/js/main.js | 99 src/main/resources/code/android/app/src/main/res/layout/activity_person_info.xml | 209 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_play.png.flat | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionSpan.class | 0 src/main/resources/code/android/library-ec/src/main/res/values/colors.xml | 10 src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/BuildConfig.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RatioLayout.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/entity/user/UserInfo.java | 32 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CircleDrawable.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.java | 281 src/main/resources/code/android/library-ad/src/main/res/values/themes.xml | 16 src/main/resources/code/android/library-ec/libs/sgmiddletieraar3-5.0.0.9-v6.aar | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/CursorLoader.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SystemCommon.java | 53 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AEScrypt.java | 117 src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/JumpDetail.java | 53 src/main/resources/code/android/library-common/build/intermediates/local_only_symbol_list/debug/R-def.txt | 68 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/StrictLineReader.java | 196 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/NavHiderCompat.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/DEScrypt.java | 74 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils.class | 0 src/main/resources/code/android/library-common/res/anim/sliding_dialog_enter.xml | 8 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/AndroidCacheUtil.java | 107 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$6.class | 0 src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/results.bin | 1 src/main/resources/code/android/library-common/build.gradle | 62 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ObjectUtils.java | 48 src/main/resources/code/android/library-ec/src/main/res/values/strings.xml | 3 src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/LayerDrawable.java | 434 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StringUtils.java | 237 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v11/values-v11.xml | 9 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$Listener.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/PhoneCallReceiver.java | 72 src/main/resources/code/android/library-common/build/outputs/logs/manifest-merger-debug-report.txt | 45 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/MediaController.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RefreshView.java | 308 src/main/resources/code/android/library-ec/.gitignore | 1 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StorageUtils.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CrossFadeDrawable.java | 284 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostStringBuilder.java | 37 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/MD5Utils.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ClipboardUtil.java | 73 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageMemoryCache.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.java | 42 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png | 0 src/main/resources/code/android/library-common/res/values/attrs.xml | 39 src/main/resources/code/android/library-ad/src/test/java/com/demo/library_ad/ExampleUnitTest.java | 17 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Platform.java | 82 src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json | 16 src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionSpan.java | 78 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$2.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/content/ConnectivityChangeHelper.java | 66 src/main/resources/code/android/library-common/bin/R.txt | 73 src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugAssets/merger.xml | 2 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ExtendEditText.java | 73 src/main/resources/code/android/app/src/main/res/drawable/selector_nav_home.xml | 7 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/Installation.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ImageChooseHelper.java | 225 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StringUtils.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/https/HttpsUtils.java | 232 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RatioLayout.java | 61 src/main/resources/code/android/library-login/src/main/res/values-night/themes.xml | 16 src/main/resources/code/android/gradlew.bat | 89 src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ClipCopyContent.java | 36 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/FileUtils.java | 645 + src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnRefreshListener.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$4.class | 0 src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_play.png | 0 src/main/resources/code/android/app/src/main/res/layout/activity_main.xml | 27 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelper.java | 80 src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionsFragment.java | 9 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OkHttpRequest.class | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight.png.flat | 0 src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/LoginApiCallBack.java | 20 src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_negative.xml | 7 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_exit.xml | 8 src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/TransitionDrawable.java | 242 src/main/resources/static/index.html | 11 src/main/resources/code/android/app/libs/umeng-common-9.4.4.jar | 0 src/main/resources/code/android/library-login/src/main/res/layout/activity_login.xml | 247 src/main/resources/code/android/app/src/main/res/values/strings.xml | 16 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$1.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_auth_notify_top.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/GetRequest.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideRoundTransform.java | 104 src/main/resources/code/android/app/.gitignore | 1 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionsFragment.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IsPad.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/StrictLineReader.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ConnectionUtils.class | 0 src/main/resources/code/android/library-dp/build.gradle | 44 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/fragment_webview_video.xml | 24 src/main/resources/code/android/settings.gradle | 37 src/main/resources/code/android/library-common/res/anim/sliding_dialog_exit.xml | 8 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil$DeviceInfoType.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.class | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_enter.xml.flat | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/DiskLruCache.class | 0 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png | 0 src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/BuildConfig.java | 6 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/PackageUtils2.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$3.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1$1.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleVideoView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/PhoneCallReceiver.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/content/CursorLoader.java | 174 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ResizableImageView.java | 42 src/main/resources/code/android/library-dp/proguard-rules.pro | 21 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/BrowserActivity.java | 333 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/RequestCall.java | 124 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponseHandler.java | 6 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateService.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HeadBuilder.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/CountingRequestBody.java | 91 src/main/resources/code/android/app/build.gradle | 67 src/main/resources/code/android/library-common/res/anim/bottom_dialog_exit.xml | 8 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/StatusBarHeightUtil.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/StatusBarHeightUtil.java | 12 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/IGenericsSerializator.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/UnderLineTextView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$Mode.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/IsSeeking.java | 17 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable/color_progressbar.xml | 28 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyListView.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ExpireTimeValue.java | 27 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ManifestDataUtil.class | 0 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_unchecked.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OtherRequest.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/Version.java | 67 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/log/LoggerInterceptor.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/jquery-ui-1.8.23.custom.css | 310 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IndexableListView.java | 363 src/main/resources/code/android/library-common/build/intermediates/compile_symbol_list/debug/R.txt | 2848 +++++ src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/compile-file-map.properties | 16 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/PagerAdapter.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$FileLastModifSort.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$2.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ProgressWebView.java | 46 src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight.png | 0 src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml | 36 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ResizableImageView.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/ConnectivityChangeHelper.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/BitmapCallback.class | 0 src/main/resources/code/android/library-ec/src/main/res/values-night/themes.xml | 16 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyGridView.java | 27 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/DEScrypt.class | 0 src/main/resources/code/android/gradle/wrapper/gradle-wrapper.jar | 0 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.base64.min.js | 126 src/main/resources/code/android/library-common/src/com/demo/lib/common/activity/BaseActivity.java | 75 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/TextViewUtil.java | 55 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/FileUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/RetainViewFragment.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PackageUtils2.java | 55 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/BitmapUtils.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ObjectUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyGridView.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/BitmapUtils.java | 208 src/main/resources/code/android/library-common/assets/css/images/009.gif | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyViewPager.java | 49 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/FileUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AESOperator.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$SystemBarConfig.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionEditText.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CircleDrawable.java | 93 src/main/resources/code/android/library-dp/src/main/java/com/demo/library_dp/DPUtil.java | 61 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_dialog_loading.xml.flat | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/Installation.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/GetBuilder.java | 57 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyViewPager.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/AdaptiveListView.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.confirm.js | 85 src/main/resources/code/android/library-ec/src/main/AndroidManifest.xml | 10 src/main/resources/code/android/library-common/assets/index.html | 19 src/main/resources/code/android/library-common/res/layout/listview_footer.xml | 14 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/GenericsCallback.java | 30 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast$1.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java | 114 src/main/resources/code/android/library-ad/proguard-rules.pro | 21 src/main/resources/code/android/library-common/lint.xml | 3 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.java | 280 src/main/resources/code/android/library-common/src/com/demo/lib/common/RetainViewFragment.java | 42 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_exit.xml.flat | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/DialogUtil.java | 28 src/main/resources/code/android/library-common/build/intermediates/compile_r_class_jar/debug/R.jar | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageMemoryCache.java | 109 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/MobileUtil.java | 156 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast.class | 0 src/main/resources/code/android/library-common/build/intermediates/navigation_json/debug/navigation.json | 1 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView$WebChromeClient.class | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_enter.xml | 8 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$MyTrustManager.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$7.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageFileCache.java | 170 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ScreenUtils.class | 0 src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt | 338 src/main/resources/code/android/library-ec/libs/securityguardaar3-5.0.0.9-v6.aar | 0 src/main/resources/code/android/library-common/res/layout/fragment_webview_video.xml | 24 src/main/resources/code/android/library-common/res/values-v14/styles.xml | 15 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/PermissionsChecker.java | 32 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/GenericsCallback.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/SpotlightDrawable.java | 123 src/main/resources/code/android/app/src/main/res/layout/activity_splash.xml | 64 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/main.css | 4 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/FastBitmapDrawable.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HasParamsable.java | 12 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostStringRequest.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/TransitionDrawable.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ShelfView.java | 111 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$1.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_back.png | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelperV2.java | 81 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$METHOD.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFileBuilder.java | 39 src/main/resources/code/android/app/src/main/res/drawable/selector_nav_mine.xml | 7 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor$FaultHidingOutputStream.class | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_enter.xml.flat | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_fragment_webview_video.xml.flat | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v14/values-v14.xml | 9 src/main/resources/code/android/library-common/res/values/styles.xml | 48 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight_blue.png.flat | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleTransportPerformer.class | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_grid.xml.flat | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/SettingActivity.java | 133 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/activity/BaseActivity.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionSpan.class | 0 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_account.png | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/Util.class | 0 src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_login_close.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder$FileInput.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/body_bg.jpg | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/ui/TopBarUtil.java | 46 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/AdaptiveListView.class | 0 src/main/resources/code/android/app/src/main/res/layout/activity_settings.xml | 240 src/main/resources/code/android/library-common/assets/lib/jquery.base64.min.js | 126 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/CursorLoader.class | 0 src/main/resources/code/android/app/src/main/res/values/colors.xml | 39 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$SSLParams.class | 0 src/main/resources/code/android/library-dp/src/androidTest/java/com/demo/library_dp/ExampleInstrumentedTest.java | 26 src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight.png | 0 src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/AlibcTradeUtil.java | 128 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/DEScrypt.class | 0 src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_media_controller.xml.flat | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnLoadListener.class | 0 src/main/resources/code/android/library-login/src/main/res/values/strings.xml | 7 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ObjectUtils.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/HomeFragment.java | 37 src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/R.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Exceptions.java | 14 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$1.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/L.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SoftKeyboardUtils.class | 0 src/main/resources/code/android/library-common/AndroidManifest.xml | 12 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/Environment.java | 191 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout$OnLoadListener.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/buttons.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionTextView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/MarketUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$1.class | 0 src/main/resources/code/android/app/src/main/res/values-night/themes.xml | 16 src/main/resources/code/android/library-ec/libs/securitybodyaar3-5.0.0.9-v6.aar | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper.class | 0 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine_highlight.png | 0 src/main/resources/code/android/library-common/assets/css/main.css | 4 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ShelfView.class | 0 src/main/resources/code/android/app/src/main/res/layout/dialog_auth_notify.xml | 120 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFileRequest.java | 79 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_cccccc_256x240.png | 0 src/main/resources/code/android/app/src/main/res/layout/dialog_user_protocol.xml | 73 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.class | 0 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_222222_256x240.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DateUtils.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$OnDrawableClickListener.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionTextView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView.class | 0 src/main/resources/code/android/library-ec/libs/jd_crash_lib_release_210.jar | 0 src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_pause.png | 0 src/main/resources/static/service.html | 2 src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_setting_array_right.png | 0 src/main/resources/code/android/app/src/main/res/layout/activity_simple_browser.xml | 24 src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/entity/LoginApiResult.java | 43 src/main/resources/code/android/library-login/src/main/res/values/themes.xml | 16 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SerializeUtils.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/RandomUtils.java | 110 src/main/resources/code/android/library-login/src/main/res/layout/activity_forget_pwd.xml | 193 src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/EmailLoginActivity.java | 172 src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.java | 85 src/main/resources/static/android.html | 101 src/main/resources/code/android/library-common/src/com/demo/lib/common/DeviceUuidFactory.java | 83 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback$1.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/MD5Utils.java | 36 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/Version.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$TagView.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$1.class | 0 src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/BottomDialog.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/SlidingDialog.java | 27 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/BitmapUtils.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/GestureMediaController.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/SlidingDialog.class | 0 src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/StringCallback.java | 17 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ArcMeun.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CircleDrawable.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android.class | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponsePreHandler.java | 138 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper.class | 0 src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_ffffff_256x240.png | 0 src/main/resources/code/android/app/src/main/java/com/demo/app/utils/UserUtil.java | 93 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/TagCloudLayout.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CrossFadeDrawable.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateActivity.class | 0 src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/ImageChooseHelper.class | 0 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ExpireTimeValue.class | 0 src/main/resources/code/android/library-common/res/values/strings.xml | 5 src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideRoundTransform.class | 0 739 files changed, 33,670 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/ks/codegenerator/controller/GeneratorController.java b/src/main/java/com/ks/codegenerator/controller/GeneratorController.java index 95e3bd8..0d955b9 100644 --- a/src/main/java/com/ks/codegenerator/controller/GeneratorController.java +++ b/src/main/java/com/ks/codegenerator/controller/GeneratorController.java @@ -1,5 +1,6 @@ package com.ks.codegenerator.controller; +import com.ks.codegenerator.utils.AndroidBuilder; import com.ks.codegenerator.utils.ServiceBuilder; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; @@ -37,10 +38,26 @@ } } - @RequestMapping("downloadServiceZIP") + @RequestMapping("createAndroid") + public void android(String name, String pks, PrintWriter out, HttpServletRequest request) { + if (StringUtil.isNullOrEmpty(name) || StringUtil.isNullOrEmpty(pks)) { + out.print(JsonUtil.loadFalseResult("椤圭洰鍚嶇О锛岄」鐩寘鍚嶄笉鑳戒负绌�")); + return; + } + String rootPath = request.getServletContext().getRealPath("cache"); + try { + String path = new AndroidBuilder().setCacheDir(rootPath).setName(name).setPks(pks).build(); + out.print(JsonUtil.loadTrueResult(path)); + } catch (Exception e) { + e.printStackTrace(); + out.print(JsonUtil.loadFalseResult(e.getMessage())); + } + } + + @RequestMapping("downloadZIP") public void downloadServiceZIP(String name, HttpServletResponse response) throws IOException { if (!new File(name).exists()) { - response.sendError(406, "闂环宸茶鍒犻櫎"); + response.sendError(406, "鏂囦欢宸茶鍒犻櫎"); return; } response.setHeader("content-disposition", "attachment;filename=" + new File(name).getName()); @@ -57,7 +74,6 @@ out.write(buffer, 0, len); } in.close(); - } diff --git a/src/main/java/com/ks/codegenerator/utils/AndroidBuilder.java b/src/main/java/com/ks/codegenerator/utils/AndroidBuilder.java new file mode 100644 index 0000000..4af6084 --- /dev/null +++ b/src/main/java/com/ks/codegenerator/utils/AndroidBuilder.java @@ -0,0 +1,177 @@ +package com.ks.codegenerator.utils; + +import org.yeshi.utils.FileUtil; +import org.yeshi.utils.StringUtil; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * @author hxh + * @title: ServiceUtil + * @description: TODO + * @date 2021/11/13 14:50 + */ +public class AndroidBuilder { + + + private String name; + private String pks; + private String cacheDir; + + + public AndroidBuilder setName(String name) { + this.name = name; + return this; + } + + public AndroidBuilder setPks(String pks) { + this.pks = pks; + return this; + } + + + public AndroidBuilder setCacheDir(String cacheDir) { + this.cacheDir = cacheDir; + return this; + } + + /** + * @return void + * @author hxh + * @description 鐢熸垚鏈嶅姟 + * @date 14:51 2021/11/13 + **/ + public String build() throws Exception { + String destPath = String.format("%s/%s/%s", cacheDir, System.currentTimeMillis() + "", name); + System.out.println(destPath); + //copy鏂囦欢澶� + FileUtils.copyFileDir(AndroidBuilder.class.getClassLoader().getResource("code/android").getPath(), destPath); + + + FileUtil.deleteFileDir(new File(destPath + "/.gradle")); + FileUtil.deleteFileDir(new File(destPath + "/.idea")); + Set<String> modules = getModules(destPath); + + //鍒犻櫎build + for (String s : modules) { + if (new File(s + "/build").exists()) { + FileUtil.deleteFileDir(new File(s + "/build")); + } + } + + //淇敼鏂囦欢鍚嶇О涓庢枃浠跺す鍚嶇О + for (String s : modules) { + renameFileAndDir(s); + } + + //閲嶆柊鍛藉悕鍖呭悕 + for (String s : modules) { + if (new File(s + "/src/main/java/" + pks.replace(".", "/")).exists()) { + //婧愪唬鐮佷綅浜巗rc/main/java/涓� + renamePackage(s + "/src/main/java/" + pks.replace(".", "/")); + } else { + //婧愪唬鐮佺洿鎺ヤ綅浜巗rc/涓� + renamePackage(s + "/src/" + pks.replace(".", "/")); + } + } + + //閲嶆柊鍛戒护璁剧疆鏂囦欢 + for (String s : modules) { + replaceSettings(s); + } + //鍘嬬缉鏂囦欢澶� + File zip = new File(new File(destPath).getParent(), "android.zip"); + ZipUtil.compressToZip(destPath, zip.getParent(), zip.getName()); + //鍒犻櫎鍘熸潵鐨勬枃浠跺す + FileUtil.deleteFileDir(new File(destPath)); + return zip.getAbsolutePath(); + } + + private Set<String> getModules(String path) { + + Set<String> sets = new HashSet<>(); + + File parent = new File(path); + for (File f : parent.listFiles()) { + if (f.isDirectory() && new File(f.getAbsolutePath() + "/build.gradle").exists()) { + sets.add(f.getAbsolutePath()); + } + } + return sets; + } + + private void replaceSettings(String path) throws Exception { + FileUtils.replaceFileContent(path + "/build.gradle", "applicationId \"com.demo.android\"", "applicationId \"" + pks + "\""); + FileUtils.replaceFileContent(path + "/src/main/AndroidManifest.xml", "com.demo.", pks + "."); + FileUtils.replaceFileContent(path + "/src/main/res/values/strings.xml", "<string name=\"app_name\">Android</string>", "<string name=\"app_name\">" + name + "</string>"); + //甯冨眬鏂囦欢 + String layoutPath = path + "/src/main/res/layout"; + if (!new File(layoutPath).exists()) { + layoutPath = path + "/res/layout"; + } + if (!new File(layoutPath).exists()) { + return; + } + for (File file : new File(layoutPath).listFiles()) { + FileUtils.replaceFileContent(file.getPath(), "<com.demo.", "<" + pks + "."); + } + + } + + //閲嶆柊鍛藉悕鏂囦欢澶逛笌鏂囦欢 + private void renameFileAndDir(String path) throws Exception { + //鏇村悕浠g爜鐩綍 + if (new File(path + "/src/main/java/com/demo").exists()) { + FileUtils.copyFileDir(path + "/src/main/java/com/demo", path + "/src/main/java/" + pks.replace(".", "/")); + FileUtil.deleteFileDir(new File(path + "/src/main/java/com/demo")); + } else if (new File(path + "/src/com/demo").exists()) { + FileUtils.copyFileDir(path + "/src/com/demo", path + "/src/" + pks.replace(".", "/")); + FileUtil.deleteFileDir(new File(path + "/src/com/demo")); + } + + } + + + //閲嶆柊鍛藉悕鍖呭悕 + private void renamePackage(String path) throws Exception { + if (!new File(path).exists()) { + return; + } + + if (new File(path).isDirectory()) { + File[] fs = new File(path).listFiles(); + for (File f : fs) { + if (f.isFile()) { + FileUtils.replaceFileContent(f.getPath(), "package com.demo", "package " + pks); + FileUtils.replaceFileContent(f.getPath(), "import com.demo.", "import " + pks + "."); + } else { + renamePackage(f.getPath()); + } + } + } + } + + private static String getGroupId(String pks) { + String[] sts = pks.split("\\."); + List<String> list = new ArrayList<>(); + for (int i = 0; i < sts.length - 1; i++) { + list.add(sts[i]); + } + return StringUtil.concat(list, "."); + } + + private static String getArtifactId(String pks) { + String[] sts = pks.split("\\."); + return sts[sts.length - 1]; + } + + public static void main(String[] args) throws Exception { + System.out.println(getGroupId("com.ks.app")); + } + + +} diff --git a/src/main/java/com/ks/codegenerator/utils/FileUtils.java b/src/main/java/com/ks/codegenerator/utils/FileUtils.java index f549048..e78c467 100644 --- a/src/main/java/com/ks/codegenerator/utils/FileUtils.java +++ b/src/main/java/com/ks/codegenerator/utils/FileUtils.java @@ -59,7 +59,7 @@ **/ public static void replaceFileContent(String file, String from, String to) throws Exception { if (!new File(file).exists()) { - throw new Exception("鏂囦欢涓嶅瓨鍦�"); + return; } // 鍒涘缓鏂囦欢杈撳叆娴� diff --git a/src/main/resources/code/android/.gitignore b/src/main/resources/code/android/.gitignore new file mode 100644 index 0000000..aa724b7 --- /dev/null +++ b/src/main/resources/code/android/.gitignore @@ -0,0 +1,15 @@ +*.iml +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/src/main/resources/code/android/app/.gitignore b/src/main/resources/code/android/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/main/resources/code/android/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/main/resources/code/android/app/build.gradle b/src/main/resources/code/android/app/build.gradle new file mode 100644 index 0000000..1d2455f --- /dev/null +++ b/src/main/resources/code/android/app/build.gradle @@ -0,0 +1,67 @@ +plugins { + id 'com.android.application' +} + +android { + + useLibrary 'org.apache.http.legacy' + + compileSdk 29 + + defaultConfig { + applicationId "com.demo.android" + minSdk 21 + targetSdk 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + multiDexEnabled true + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + implementation 'androidx.appcompat:appcompat:1.2.0' + + implementation 'com.google.android.material:material:1.3.0' + implementation 'androidx.constraintlayout:constraintlayout:2.0.4' + implementation project(path: ':library-common') + implementation project(path: ':library-dp') + implementation project(path: ':library-ad') + implementation project(path: ':library-ec') + implementation project(path: ':library-login') + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation 'androidx.cardview:cardview:1.0.0' + + implementation 'org.apache.httpcomponents:httpcore:4.4.2' + + //鍥剧墖鍔犺浇搴� + implementation 'com.github.bumptech.glide:glide:4.12.0' + annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0' + + + //indicator + implementation 'com.github.hackware1993:MagicIndicator:1.7.0' + + + implementation files('libs/umeng-apm-armeabi-v1.5.2.aar') + implementation files('libs/umeng-common-9.4.4.jar') + implementation files('libs/umeng-asms-armeabi-v1.4.1.aar') + + implementation 'androidx.cardview:cardview:1.0.0' + implementation 'com.google.android.material:material:1.3.0' +} \ No newline at end of file diff --git a/src/main/resources/code/android/app/libs/umeng-apm-armeabi-v1.5.2.aar b/src/main/resources/code/android/app/libs/umeng-apm-armeabi-v1.5.2.aar new file mode 100644 index 0000000..e020303 --- /dev/null +++ b/src/main/resources/code/android/app/libs/umeng-apm-armeabi-v1.5.2.aar Binary files differ diff --git a/src/main/resources/code/android/app/libs/umeng-asms-armeabi-v1.4.1.aar b/src/main/resources/code/android/app/libs/umeng-asms-armeabi-v1.4.1.aar new file mode 100644 index 0000000..80575b5 --- /dev/null +++ b/src/main/resources/code/android/app/libs/umeng-asms-armeabi-v1.4.1.aar Binary files differ diff --git a/src/main/resources/code/android/app/libs/umeng-common-9.4.4.jar b/src/main/resources/code/android/app/libs/umeng-common-9.4.4.jar new file mode 100644 index 0000000..efa3bd3 --- /dev/null +++ b/src/main/resources/code/android/app/libs/umeng-common-9.4.4.jar Binary files differ diff --git a/src/main/resources/code/android/app/proguard-rules.pro b/src/main/resources/code/android/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/main/resources/code/android/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/androidTest/java/com/demo/app/ExampleInstrumentedTest.java b/src/main/resources/code/android/app/src/androidTest/java/com/demo/app/ExampleInstrumentedTest.java new file mode 100644 index 0000000..0fec06d --- /dev/null +++ b/src/main/resources/code/android/app/src/androidTest/java/com/demo/app/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.demo.app; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.demo.android", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/AndroidManifest.xml b/src/main/resources/code/android/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..34c359e --- /dev/null +++ b/src/main/resources/code/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.demo.app"> + + <application + android:name="com.demo.app.MyApplication" + android:allowBackup="true" + android:icon="@mipmap/ic_launcher" + android:label="@string/app_name" + android:supportsRtl="true" + tools:replace="android:allowBackup,android:theme" + android:theme="@style/Theme.Android"> + + <meta-data + android:name="UMENG_CHANNEL" + android:value="QQ"> + + </meta-data> + + + <activity + android:name="com.demo.app.ui.SplashActivity" + android:label="@string/app_name"> + <intent-filter> + <action android:name="android.intent.action.MAIN" /> + + <category android:name="android.intent.category.LAUNCHER" /> + </intent-filter> + </activity> + + <activity + android:name="com.demo.app.ui.MainActivity" + android:configChanges="keyboard|orientation|screenSize" + android:exported="true" + android:launchMode="singleTask"></activity> + </application> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java new file mode 100644 index 0000000..feff1ac --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/MyApplication.java @@ -0,0 +1,114 @@ +package com.demo.app; + +import android.app.Application; +import android.content.Context; + +import com.bytedance.sdk.dp.DPSdkConfig; +import com.bytedance.sdk.openadsdk.TTAdSdk; +import com.demo.app.utils.Constant; +import com.demo.app.utils.UserUtil; +import com.demo.library_ad.AdUtil; +import com.demo.library_dp.DPUtil; +import com.demo.lib.common.util.ManifestDataUtil; +import com.umeng.analytics.MobclickAgent; +import com.umeng.commonsdk.UMConfigure; + +import androidx.multidex.MultiDex; + +public class MyApplication extends Application { + public static MyApplication application = null; + public static boolean inited = false; + + private static String TAG = "MyApplication"; + + //鍏煎4.4浠ヤ笅鐗堟湰 + protected void attachBaseContext(Context newBase) { + super.attachBaseContext(newBase); + MultiDex.install(this); + } + + + @Override + public void onCreate() { + super.onCreate(); + application = this; + MultiDex.install(this); + if (UserUtil.isAgreeUserProtocol(application) || Constant.DEBUG) { + init(application, null); + } + } + + public static void init(Application application, InitListener initListener) { + if (inited) { + return; + } + + inited = true; + //鍙嬬洘鍒濆鍖� + String description = ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL"); + UMConfigure.init(application, application.getResources().getString(R.string.umeng_key), description, UMConfigure.DEVICE_TYPE_PHONE, null); + UMConfigure.setEncryptEnabled(true); + // 閫夌敤AUTO椤甸潰閲囬泦妯″紡 + MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); + + initAd(application, initListener); + + //灏忚 + initNovel(application); + //绌垮北鐢插皬瑙嗛 + initDPSDK(application); + } + + + //鍔ㄦ�佸垵濮嬪寲骞垮憡 + public static void initAd(Application application, InitListener initListener) { + //骞跨偣閫氬箍鍛� + AdUtil.initGDTAd(application, application.getString(R.string.ad_gdt_appid)); + //绌垮北鐢插箍鍛� + initCSJAd(application, application.getString(R.string.ad_csj_appid), initListener); + } + + + /** + * 绌垮北鐢插箍鍛婂垵濮嬪寲 + */ + private static void initCSJAd(Application application, String appId, InitListener initListener) { + + AdUtil.initCSJAd(application, appId, false, new TTAdSdk.InitCallback() { + @Override + public void success() { + if (initListener != null) + initListener.onFinish(); + } + + @Override + public void fail(int i, String s) { + if (initListener != null) + initListener.onFinish(); + } + }); + } + + + private static void initNovel(Application application) { + DPUtil.initNovel(application, "SDK_Setting_5211168.json"); + } + + private static boolean dpSDKIninted; + + public static void initDPSDK(Application application) { + if (!dpSDKIninted) { + DPUtil.initDPSDK(application, "SDK_Setting_5211168.json", new DPSdkConfig.InitListener() { + @Override + public void onInitComplete(boolean b) { + dpSDKIninted = b; + } + }); + } + } + + + public interface InitListener { + public void onFinish(); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/ExpireTimeValue.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/ExpireTimeValue.java new file mode 100644 index 0000000..4ce31f2 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/ExpireTimeValue.java @@ -0,0 +1,27 @@ +package com.demo.app.entity.common; + +public class ExpireTimeValue { + private String value; + private long expireTime; + + public ExpireTimeValue(String value, long expireTime) { + this.value = value; + this.expireTime = expireTime; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public long getExpireTime() { + return expireTime; + } + + public void setExpireTime(long expireTime) { + this.expireTime = expireTime; + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/JumpDetail.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/JumpDetail.java new file mode 100644 index 0000000..a2b5d03 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/common/JumpDetail.java @@ -0,0 +1,53 @@ +package com.demo.app.entity.common; + +import com.google.gson.annotations.Expose; + +import java.io.Serializable; + +/** + * 璺宠浆璇︽儏 + */ + +public class JumpDetail implements Serializable { + @Expose + private String activity; + @Expose + private String name; + @Expose + private String type; + @Expose + private boolean needLogin; + + + public String getActivity() { + return activity; + } + + public void setActivity(String activity) { + this.activity = activity; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public boolean isNeedLogin() { + return needLogin; + } + + public void setNeedLogin(boolean needLogin) { + this.needLogin = needLogin; + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/user/UserInfo.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/user/UserInfo.java new file mode 100644 index 0000000..34e5902 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/entity/user/UserInfo.java @@ -0,0 +1,32 @@ +package com.demo.app.entity.user; + +public class UserInfo { + + private String id; + private String portrait; + private String nickName; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getPortrait() { + return portrait; + } + + public void setPortrait(String portrait) { + this.portrait = portrait; + } + + public String getNickName() { + return nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/ByRecyclerViewFragment.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/ByRecyclerViewFragment.java new file mode 100644 index 0000000..505e99a --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/ByRecyclerViewFragment.java @@ -0,0 +1,71 @@ +package com.demo.app.ui; + +import android.os.Bundle; +import android.view.View; + +import com.demo.app.R; +import com.demo.lib.common.RetainViewFragment; + +import java.util.List; + +import androidx.recyclerview.widget.LinearLayoutManager; +import me.jingbin.library.ByRecyclerView; +import me.jingbin.library.adapter.BaseByViewHolder; +import me.jingbin.library.adapter.BaseRecyclerAdapter; + + +/** + * introduction: https://github.com/youlookwhat/ByRecyclerView + */ +public class ByRecyclerViewFragment extends RetainViewFragment { + + private ByRecyclerView recyclerView; + + @Override + public int getContentResource() { + return R.layout.fragment_byrecyclerview; + } + + + private void init() { + recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); + recyclerView.setAdapter(new ByRecyclerViewAdapter(null)); + recyclerView.setOnRefreshListener(new ByRecyclerView.OnRefreshListener() { + @Override + public void onRefresh() { + // 鍒锋柊瀹屾垚 + recyclerView.setRefreshing(false); + } + }); +// 鍔犺浇鏇村鐩戝惉 + recyclerView.setOnLoadMoreListener(new ByRecyclerView.OnLoadMoreListener() { + @Override + public void onLoadMore() { + //mAdapter.addData(list); // 璁剧疆鍙婂埛鏂版暟鎹� + recyclerView.loadMoreComplete(); // 鍔犺浇鏇村瀹屾垚 + recyclerView.loadMoreEnd(); // 娌℃湁鏇村鍐呭浜� + recyclerView.loadMoreFail(); // 鍔犺浇鏇村澶辫触,鐐瑰嚮閲嶈瘯 + } + }); + } + + @Override + public void onCreateView(View contentView, Bundle savedInstanceState) { + recyclerView = contentView.findViewById(R.id.recyclerView); + init(); + } + + + public class ByRecyclerViewAdapter extends BaseRecyclerAdapter<String> { + + public ByRecyclerViewAdapter(List<String> videoInfos) { + // super(R.layout.item_fav, videoInfos); + super(0, videoInfos); + } + + @Override + protected void bindView(BaseByViewHolder<String> holder, String bean, int position) { + + } + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java new file mode 100644 index 0000000..2bdcec5 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/MainActivity.java @@ -0,0 +1,98 @@ +package com.demo.app.ui; + +import android.content.DialogInterface; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.widget.RadioButton; +import android.widget.RadioGroup; + +import com.androidquery.AQuery; +import com.demo.app.R; +import com.demo.app.ui.dialog.ExitDialog; +import com.demo.app.ui.main.HomeFragment; +import com.demo.app.ui.main.MineFragment; +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.dialog.DialogUtil; +import com.demo.lib.common.util.FragmentSwitchHelperV2; + +import java.util.ArrayList; +import java.util.List; + +import androidx.fragment.app.Fragment; + +public class MainActivity extends BaseActivity { + + private AQuery mAQuery; + private FragmentSwitchHelperV2 mFragmentSwitchHelper; + private RadioGroup rg_nav; + + + private void initFragment() { + List<Fragment> list = new ArrayList<>(); + Fragment[] fs = new Fragment[list.size()]; + list.toArray(fs); + mFragmentSwitchHelper = FragmentSwitchHelperV2.create(R.id.fl_container, getSupportFragmentManager(), fs); + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); + mAQuery = new AQuery(this); + rg_nav = findViewById(R.id.rg_nav); + initFragment(); + rg_nav.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { + + @Override + public void onCheckedChanged(RadioGroup group, int checkedId) { + switch (checkedId) { + case R.id.rb_nav_recommend: { + mFragmentSwitchHelper + .changeFragment(HomeFragment.class); + } + break; + + case R.id.rb_nav_mine: { + mFragmentSwitchHelper.changeFragment(MineFragment.class); + } + break; + } + } + }); + rg_nav.post(new Runnable() { + @Override + public void run() { + + ((RadioButton) findViewById(R.id.rb_nav_recommend)) + .setChecked(true); + } + }); + + exitDialog = new ExitDialog.Builder(this).setNegativeClickListener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DialogUtil.dismiss(exitDialog); + MainActivity.this.finish(); + } + }).setPositiveClickListener(new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + DialogUtil.dismiss(exitDialog); + } + }).create(); + } + + ExitDialog exitDialog = null; + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (exitDialog != null) { + exitDialog.show(); + } + return true; + } + return super.onKeyDown(keyCode, event); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java new file mode 100644 index 0000000..033a5d0 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/SplashActivity.java @@ -0,0 +1,289 @@ +package com.demo.app.ui; + +import android.Manifest; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; +import android.os.Bundle; +import android.view.ViewGroup; + +import com.demo.app.MyApplication; +import com.demo.app.R; +import com.demo.app.ui.dialog.PermissionAuthNotifyDialog; +import com.demo.app.ui.dialog.UserProtocolDialog; +import com.demo.app.utils.AppConfigUtil; +import com.demo.app.utils.Constant; +import com.demo.app.utils.UserUtil; +import com.demo.app.utils.api.BasicTextHttpResponseHandler; +import com.demo.app.utils.api.HttpApiUtil; +import com.demo.library_ad.AdUtil; +import com.demo.library_ad.SplashAdUtil; +import com.demo.lib.common.util.PermissionsChecker; + +import org.apache.http.Header; +import org.json.JSONObject; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +import static android.content.pm.PackageManager.PERMISSION_GRANTED; + +public class SplashActivity extends AppCompatActivity { + private static final String TAG = "SplashActivity"; + + private ViewGroup vg_ad; + + // 鎵�闇�鐨勫叏閮ㄦ潈闄� + static final String[] PERMISSIONS = new String[]{ + Manifest.permission.READ_PHONE_STATE + }; + private static final int REQUEST_CODE = 0; // 璇锋眰鐮� + private PermissionsChecker mPermissionsChecker; // 鏉冮檺妫�娴嬪櫒 + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (!this.isTaskRoot()) {// 鍒ゆ柇鏈琣ctivity鏄笉鏄换鍔$┖闂寸殑婧恆ctivity,false灏辨槸涓嶆槸绯荤粺閲嶆柊瀹炰緥鍖栧嚭鏉ョ殑 + finish(); + return; + } + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + setContentView(R.layout.activity_splash); + + vg_ad = findViewById(R.id.fl_splash_ad); + +// Glide.with(getApplicationContext()).load(R.drawable.ic_launcher).transform(new GlideRoundTransform(getApplicationContext(), 5)).into(iv_logo); + + SharedPreferences preferences = getSharedPreferences("link_page", + Context.MODE_PRIVATE); + mPermissionsChecker = new PermissionsChecker(this); + if (!UserUtil.isAgreeUserProtocol(getApplicationContext()) && !Constant.DEBUG) { + showProtocol(); + } else { + vg_ad.post(new Runnable() { + @Override + public void run() { + requetPermission(); + } + }); + } + + } + + + private void showProtocol() { + String data = "灏婃暚鐨勭敤鎴�:<br>鎰熻阿鎮ㄥ" + getResources().getString(R.string.app_name) + "涓�鐩翠互鏉ョ殑淇′换锛�<br>"; + data += "鎴戜滑闈炲父灏婇噸骞朵繚鎶ゆ偍鐨勪釜浜轰俊鎭�侀殣绉併�備负浜嗘洿濂界殑淇濋殰鎮ㄧ殑鏉冨埄锛屽湪鎮ㄤ娇鐢ㄦ垜浠殑浜у搧涔嬪墠锛岃鎮ㄥ姟蹇呭鎱庨槄璇�"; + data += String.format("<a href='%s'>銆婇殣绉佹斂绛栥��</a>鍜�", Constant.PRIVACY_POLICY); + data += String.format("<a href='%s'>銆婄敤鎴峰崗璁��</a>", Constant.USER_AGREEMENT); + data += "鍐呯殑鎵�鏈夋潯娆撅紝<b>灏ゅ叾鏄細<br>" + + "1銆佹垜浠鎮ㄧ殑涓汉淇℃伅锛堝寘鎷絾涓嶉檺浜�<font color='#FF0000'>璁惧MAC鍦板潃銆両MEI/Android ID</font>绛変俊鎭級鐨勬敹闆�/淇濆瓨/浣跨敤/瀵瑰鎻愪緵/淇濇姢绛夎鍒欐潯娆�,浠ュ強鎮ㄧ殑鐢ㄦ埛鏉冨埄绛夋潯娆撅紱<br>" + + "2銆佺害瀹氭垜浠殑闄愬埗璐d换銆佸厤璐f潯娆撅紱<br>" + + "3銆佸叾浠栦互鍔犵矖鎴栨枩浣撳瓧杩涜鏍囪瘑鐨勯噸瑕佹潯娆俱��</b><br>" + + "濡傛偍瀵瑰崗璁湁浠讳綍鐤戣檻锛屽彲閫氳繃鐢靛瓙閭锛� xcwapp@qq.com 鍚戞垜浠闂紝鎴戜滑灏嗕负鎮ㄧ璇氳В绛斻�傛偍鐐瑰嚮鈥滃悓鎰忊�濈殑琛屼负浠h〃鎮ㄥ凡闃呰瀹屾瘯骞舵帴鍙椾互涓婂崗璁叏閮ㄦ潯娆俱�傚鎮ㄥ悓鎰忎互涓婂崗璁唴瀹癸紝璇锋偍鐐瑰嚮鈥滃悓鎰忊�濓紝寮�濮嬩娇鐢ㄦ偍鐨勪骇鍝併��"; + + if (!UserUtil.isAgreeUserProtocol(getApplicationContext()) && !Constant.DEBUG) { + new UserProtocolDialog.Builder(SplashActivity.this).setNegativeButton("涓嶅悓鎰�", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + } + }).setPositiveButton("鍚屾剰", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + UserUtil.agreeUserProtocol(getApplicationContext()); + + //璇锋眰鏉冮檺 + vg_ad.post(new Runnable() { + @Override + public void run() { + + new PermissionAuthNotifyDialog.Builder(SplashActivity.this).setPositiveButton(null, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialogInterface, int i) { + dialogInterface.dismiss(); + requetPermission(); + } + }).create().show(); + + + } + }); + + } + }).setData(data).create().show(); + } + } + + private void requetPermission() { + SharedPreferences sharedPreferences = getSharedPreferences("permission", Context.MODE_PRIVATE); + boolean showPermission = sharedPreferences.getBoolean("show", true); + + if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PERMISSION_GRANTED && showPermission) { + ActivityCompat.requestPermissions(this, PERMISSIONS, REQUEST_CODE); + } else { + MyApplication.init(MyApplication.application, new MyApplication.InitListener() { + @Override + public void onFinish() { + + } + }); + int delayMs = 1; + vg_ad.postDelayed(new Runnable() { + @Override + public void run() { + HttpApiUtil.getConfig(getApplicationContext(), new BasicTextHttpResponseHandler() { + + @Override + public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { + if (jsonObject != null) { + if (jsonObject.getBoolean("IsPost")) { + JSONObject data = jsonObject.getJSONObject("Data"); + JSONObject ad = data.optJSONObject("adNew"); + //娴忚鍣ㄥ璺冲崗璁� + AppConfigUtil.saveBrowserJumpOutProtocolPrefix(getApplicationContext(), data.optString("jumpAppProtocolPrefix")); + //淇濆瓨鑱旂郴瀹㈡湇锛屾敞閿�閾炬帴 + AppConfigUtil.saveConcatUsLink(getApplicationContext(), data.optString("contactUsLink")); + AppConfigUtil.saveUnRegisterLink(getApplicationContext(), data.optString("unRegisterLink")); + AdUtil.saveAdConfig(getApplicationContext(), ad); + MyApplication.initAd(MyApplication.application, new MyApplication.InitListener() { + @Override + public void onFinish() { + runOnUiThread(new Runnable() { + @Override + public void run() { + loadSplashAd(); + } + }); + } + }); + return; + } + } + loadSplashAd(); + } + + + @Override + public void onFailure(int statusCode, Header[] headers, String responseString, Throwable throwable) { + super.onFailure(statusCode, headers, responseString, throwable); + loadSplashAd(); + } + }); + + + } + }, delayMs); + + + } + } + + + /** + * 鍔犺浇寮�灞忓箍鍛� + */ + private void loadSplashAd() { + AdUtil.AD_TYPE splashType = AdUtil.getAdType(getApplicationContext(), ""); + if (splashType == null) { + vg_ad.postDelayed(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }, 2000); + return; + } + + String csjPid = getString(R.string.ad_csj_pid_splash); + String gdtPid = getString(R.string.ad_gdt_pid_splash); + + SplashAdUtil.loadAD(splashType, splashType == AdUtil.AD_TYPE.csj ? csjPid : gdtPid, SplashActivity.this, vg_ad, new SplashAdUtil.SplashAdListener() { + @Override + public void close() { + runOnUiThread(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }); + } + + @Override + public void noAd() {//鍒濇鍔犺浇鏈姞杞藉嚭骞垮憡 + if (AdUtil.AD_TYPE.csj == splashType) { + //鍐嶆鍔犺浇骞跨偣閫氬箍鍛� + SplashAdUtil.loadAD(AdUtil.AD_TYPE.gdt, gdtPid, SplashActivity.this, vg_ad, new SplashAdUtil.SplashAdListener() { + @Override + public void close() { + runOnUiThread(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }); + } + + @Override + public void noAd() { + runOnUiThread(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }); + } + }); + + } else if (AdUtil.AD_TYPE.gdt == splashType) { + //鍐嶆鍔犺浇绌垮北鐢插箍鍛� + SplashAdUtil.loadAD(AdUtil.AD_TYPE.csj, csjPid, SplashActivity.this, vg_ad, new SplashAdUtil.SplashAdListener() { + @Override + public void close() { + runOnUiThread(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }); + } + + @Override + public void noAd() { + runOnUiThread(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }); + } + }); + + } else { + runOnUiThread(new Runnable() { + @Override + public void run() { + toMainActivity(); + } + }); + } + } + }); + } + + + private boolean isFinish; + + private void toMainActivity() { + if (!isFinish) { + isFinish = true; + Intent intent = new Intent(SplashActivity.this, MainActivity.class); + startActivity(intent); + finish(); + } + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/BrowserActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/BrowserActivity.java new file mode 100644 index 0000000..dc13560 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/BrowserActivity.java @@ -0,0 +1,333 @@ +package com.demo.app.ui.common; + +import android.Manifest; +import android.app.Notification; +import android.app.NotificationManager; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.PixelFormat; +import android.net.Uri; +import android.net.http.SslError; +import android.os.Build; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.text.TextUtils; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.webkit.DownloadListener; +import android.webkit.SslErrorHandler; +import android.webkit.ValueCallback; +import android.webkit.WebChromeClient; +import android.webkit.WebResourceRequest; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ProgressBar; +import android.widget.TextView; + +import com.demo.app.R; +import com.demo.app.utils.AppConfigUtil; +import com.demo.app.utils.FileUtils; +import com.demo.app.utils.browser.MyJavaInterface; +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.util.common.StringUtils; + +import java.io.File; +import java.util.Set; + +import androidx.annotation.Nullable; +import androidx.core.app.ActivityCompat; +import androidx.core.app.NotificationCompat; +import androidx.core.content.ContextCompat; + +public class BrowserActivity extends BaseActivity implements OnClickListener { + private final static int FILECHOOSER_RESULTCODE = 10002; + + private static final String TAG = BrowserActivity.class.getSimpleName(); + private TextView tv_top_bar_left; + private TextView tv_top_bar_left2; + private TextView tv_top_bar_middle; + private WebView webview; + ProgressBar progressBar; + private ValueCallback mUploadMessage; + + + private void initX5WebView() { + webview = findViewById(R.id.webview); + webview.setDownloadListener(new MyWebViewDownLoadListener()); + webview.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + Log.i(TAG, "url:" + url); + if (url == null) { + return super.shouldOverrideUrlLoading(view, url); + } + if (url.startsWith("weixin://") || url.startsWith("alipay://")) { + + } else if (!url.startsWith("http")) { + if (jumpOutProtocolSet != null) { + for (String prefix : jumpOutProtocolSet) { + if (url.startsWith(prefix)) { + Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + startActivity(intent); + return true; + } + } + } + return true; + } + return super.shouldOverrideUrlLoading(view, url); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView webView, WebResourceRequest webResourceRequest) { + String url = webResourceRequest.getUrl().toString(); + Log.i(TAG, "url:" + url); + return super.shouldOverrideUrlLoading(webView, webResourceRequest); + } + + @Override + public void onPageFinished(WebView webView, String s) { + super.onPageFinished(webView, s); + } + + @Override + public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { + } + }); + + webview.setWebChromeClient(new WebChromeClient() { + + @Override + public void onReceivedTitle(WebView view, String title) { + if (!StringUtils.isEmpty(wholeTitle)) + return; + tv_top_bar_middle.setText(title); + } + + @Override + public void onProgressChanged(WebView webView, int i) { + if (i == 100) { + progressBar.setVisibility(View.GONE); + } else { + if (View.INVISIBLE == progressBar.getVisibility()) { + progressBar.setVisibility(View.VISIBLE); + } + progressBar.setProgress(i); + } + super.onProgressChanged(webView, i); + } + + + // 鍒ゆ柇鏉冮檺闆嗗悎 鏄惁鎺堟潈 false鎺堟潈 true鏈巿鏉� + public boolean lacksPermissions(String... permissions) { + for (String permission : permissions) { + if (lacksPermission(permission)) { + return true; + } + } + return false; + } + + // 鍒ゆ柇鏄惁缂哄皯鏉冮檺 + private boolean lacksPermission(String permission) { + //鏉冮檺鏈巿鏉� + return ContextCompat.checkSelfPermission(getApplicationContext(), permission) == PackageManager.PERMISSION_DENIED; + } + + @Override + public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> valueCallback, FileChooserParams fileChooserParams) { + if (mUploadMessage != null) { + mUploadMessage.onReceiveValue(null); + } + if (lacksPermissions(Manifest.permission.READ_EXTERNAL_STORAGE)) { //瀛樺偍鏉冮檺鏈紑鍚� + valueCallback.onReceiveValue(null); + ActivityCompat.requestPermissions(BrowserActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 10023); + return true; + } + + + mUploadMessage = valueCallback; + Intent i = new Intent(Intent.ACTION_GET_CONTENT); + i.addCategory(Intent.CATEGORY_OPENABLE); + if (fileChooserParams != null && fileChooserParams.getAcceptTypes() != null + && fileChooserParams.getAcceptTypes().length > 0) { + i.setType(fileChooserParams.getAcceptTypes()[0]); + } else { + i.setType("*/*"); + } + startActivityForResult(Intent.createChooser(i, "File Chooser"), FILECHOOSER_RESULTCODE); + return true; + } + }); + WebSettings webSetting = webview.getSettings(); + webSetting.setJavaScriptEnabled(true); + webSetting.setTextZoom(100); + webSetting.setDomStorageEnabled(true); + webview.addJavascriptInterface(new MyJavaInterface(this, webview), getString(R.string.webview_java_interface_name)); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { + super.onActivityResult(requestCode, resultCode, data); + if (requestCode == FILECHOOSER_RESULTCODE) { + if (null == mUploadMessage) return; + Uri result = data == null || resultCode != RESULT_OK ? null : data.getData(); + if (result == null) { + mUploadMessage.onReceiveValue(null); + mUploadMessage = null; + return; + } + String path = FileUtils.getFilePathByUri(this, result); + if (TextUtils.isEmpty(path)) { + mUploadMessage.onReceiveValue(null); + mUploadMessage = null; + return; + } + Uri uri = Uri.fromFile(new File(path)); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + mUploadMessage.onReceiveValue(new Uri[]{uri}); + } else { + mUploadMessage.onReceiveValue(uri); + } + mUploadMessage = null; + } + } + + private String wholeTitle; + + private Set<String> jumpOutProtocolSet; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setFormat(PixelFormat.TRANSLUCENT); + setContentView(R.layout.activity_browser); + tv_top_bar_left = findViewById(R.id.tv_top_bar_left); + tv_top_bar_left2 = findViewById(R.id.tv_top_bar_left2); + tv_top_bar_left2.setVisibility(View.VISIBLE); + tv_top_bar_middle = findViewById(R.id.tv_top_bar_middle); + + tv_top_bar_left2.setText("鍏抽棴"); + tv_top_bar_left.setOnClickListener(this); + tv_top_bar_left2.setOnClickListener(this); + + progressBar = findViewById(R.id.myProgressBar); + progressBar.setMax(100); + progressBar.setProgressDrawable(this.getResources() + .getDrawable(R.drawable.color_progressbar)); + initX5WebView(); + jumpOutProtocolSet = AppConfigUtil.getBrowserJumpOutProtocolPrefix(getApplicationContext()); + webview.loadUrl(getIntent().getStringExtra("url")); + wholeTitle = getIntent().getStringExtra("title"); + if (!StringUtils.isEmpty(wholeTitle)) { + tv_top_bar_middle.setText(wholeTitle); + } + + } + // 鏂囦欢涓嬭浇鐩戝惉 + + private class MyWebViewDownLoadListener implements DownloadListener { + + @Override + public void onDownloadStart(String url, String userAgent, + String contentDisposition, String mimetype, long contentLength) { +// startDownLoadFile(url); + } + } + + private NotificationManager manager; + private Notification notif; + private Notification.Builder oBuilder; + private NotificationCompat.Builder builder; + int j = -1; + private Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + oBuilder.setContentText(msg.arg1 + "%"); + notif = oBuilder.build(); + } else { + builder.setContentText(msg.arg1 + "%"); + notif = builder.build(); + } + manager.notify(0, notif); + break; + case 1: + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + oBuilder.setContentText("涓嬭浇瀹屾垚"); + notif = oBuilder.build(); + } else { + builder.setContentText("涓嬭浇瀹屾垚"); + notif = builder.build(); + } + manager.notify(0, notif); + j = 100; + manager.cancelAll(); + break; + default: + break; + } + } + }; + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + } + + @Override + protected void onDestroy() { + if (webview != null) { + webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); + webview.clearHistory(); + ((ViewGroup) webview.getParent()).removeView(webview); + webview.destroy(); + webview = null; + } + super.onDestroy(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_top_bar_left: { + if (!webview.canGoBack()) + finish(); + else { + webview.goBack(); + } + } + break; + case R.id.tv_top_bar_left2: { + finish(); + } + break; + default: + break; + } + } + + // 璁剧疆鍥為�� + // 瑕嗙洊Activity绫荤殑onKeyDown(int keyCoder,KeyEvent event)鏂规硶 + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { + webview.goBack(); // goBack()琛ㄧず杩斿洖WebView鐨勪笂涓�椤甸潰 + return true; + } + return super.onKeyDown(keyCode, event); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/SimpleBrowserActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/SimpleBrowserActivity.java new file mode 100644 index 0000000..41dcc7e --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/common/SimpleBrowserActivity.java @@ -0,0 +1,188 @@ +package com.demo.app.ui.common; + +import android.app.Activity; +import android.graphics.PixelFormat; +import android.net.http.SslError; +import android.os.Bundle; +import android.util.Log; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.webkit.SslErrorHandler; +import android.webkit.WebChromeClient; +import android.webkit.WebSettings; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ProgressBar; +import android.widget.TextView; + + +import com.demo.app.R; +import com.demo.app.utils.browser.BaseJavaInterface; +import com.demo.lib.common.util.common.StringUtils; + +import androidx.fragment.app.FragmentActivity; + +public class SimpleBrowserActivity extends FragmentActivity implements OnClickListener { + private final static String TAG = "SimpleBrowserActivity"; + + private TextView tv_top_bar_left; + private TextView tv_top_bar_left2; + private TextView tv_top_bar_middle; + private WebView webview; + ProgressBar progressBar; + + + private void initX5WebView() { + webview = findViewById(R.id.webview); + webview.setWebViewClient(new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + Log.i(TAG, url); + if (url != null && (!url.startsWith("http"))) { + return true; + } + return super.shouldOverrideUrlLoading(view, url); + } + + + @Override + public void onReceivedSslError(WebView webView, SslErrorHandler sslErrorHandler, SslError sslError) { + sslErrorHandler.proceed(); + } + + }); + + webview.setWebChromeClient(new WebChromeClient() { + + @Override + public void onReceivedTitle(WebView view, String title) { + tv_top_bar_middle.setText(title); + } + + @Override + public void onProgressChanged(WebView webView, int i) { + if (i == 100) { + progressBar.setVisibility(View.GONE); + } else { + if (View.INVISIBLE == progressBar.getVisibility()) { + progressBar.setVisibility(View.VISIBLE); + } + progressBar.setProgress(i); + } + super.onProgressChanged(webView, i); + } + }); + WebSettings webSetting = webview.getSettings(); + webSetting.setJavaScriptEnabled(true); + webSetting.setTextZoom(100); + webview.addJavascriptInterface(new BaseJavaInterface(this), "yestv"); + } + + private boolean needSetResult = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + getWindow().setFormat(PixelFormat.TRANSLUCENT); + setContentView(R.layout.activity_simple_browser); + tv_top_bar_left = findViewById(R.id.tv_top_bar_left); + tv_top_bar_left2 = findViewById(R.id.tv_top_bar_left2); + tv_top_bar_left2.setVisibility(View.VISIBLE); + tv_top_bar_middle = findViewById(R.id.tv_top_bar_middle); + + tv_top_bar_left2.setText("鍏抽棴"); + try { + if (getIntent().getBooleanExtra("close", true)) { + String close = getIntent().getStringExtra("close"); + if (!StringUtils.isEmpty(close)) { + tv_top_bar_left2.setVisibility(Boolean.parseBoolean(close) ? View.VISIBLE : View.GONE); + } else + tv_top_bar_left2.setVisibility(View.VISIBLE); + } else + tv_top_bar_left2.setVisibility(View.GONE); + } catch (Exception e) { + + } + + tv_top_bar_left.setOnClickListener(this); + tv_top_bar_left2.setOnClickListener(this); + + progressBar = findViewById(R.id.myProgressBar); + progressBar.setMax(100); + progressBar.setProgressDrawable(this.getResources() + .getDrawable(R.drawable.color_progressbar)); + initX5WebView(); + String url = getIntent().getStringExtra("url"); + webview.loadUrl(url); + needSetResult = getIntent().getBooleanExtra("result", false); + } + + @Override + public void onResume() { + super.onResume(); + if (webview != null) { + webview.loadUrl("javascript:onResume()"); + } + } + + @Override + public void onPause() { + super.onPause(); + } + + @Override + protected void onDestroy() { + if (webview != null) { + webview.loadDataWithBaseURL(null, "", "text/html", "utf-8", null); + webview.clearHistory(); + + ((ViewGroup) webview.getParent()).removeView(webview); + webview.destroy(); + webview = null; + } + super.onDestroy(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_top_bar_left: { + if (!webview.canGoBack()) + finishPage(); + else { + webview.goBack(); + } + } + break; + case R.id.tv_top_bar_left2: { + finishPage(); + } + break; + default: + break; + } + } + + private void finishPage() { + if (needSetResult) + setResult(Activity.RESULT_OK); + finish(); + } + + // 璁剧疆鍥為�� + // 瑕嗙洊Activity绫荤殑onKeyDown(int keyCoder,KeyEvent event)鏂规硶 + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) { + webview.goBack(); // goBack()琛ㄧず杩斿洖WebView鐨勪笂涓�椤甸潰 + return true; + } else { + if (keyCode == KeyEvent.KEYCODE_BACK) { + finishPage(); + } + } + return super.onKeyDown(keyCode, event); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/ExitDialog.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/ExitDialog.java new file mode 100644 index 0000000..9acd50b --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/ExitDialog.java @@ -0,0 +1,99 @@ +package com.demo.app.ui.dialog; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.demo.app.R; +import com.demo.lib.common.util.SystemCommon; + + +/** + * 鐢ㄦ埛鍗忚寮规 + */ +public class ExitDialog extends Dialog { + + private static String TAG = "ExitDialog"; + + public ExitDialog(Context context) { + super(context); + this.setCancelable(false); + } + + public ExitDialog(Context context, int theme) { + super(context, theme); + this.setCancelable(false); + } + + + public static class Builder { + private Activity context; + private OnClickListener positiveButtonClickListener; + private OnClickListener negativeButtonClickListener; + + public Builder(Activity context) { + this.context = context; + } + + + public Builder setPositiveClickListener( + OnClickListener listener) { + this.positiveButtonClickListener = listener; + return this; + } + + public Builder setNegativeClickListener(OnClickListener listener) { + this.negativeButtonClickListener = listener; + return this; + } + + public ExitDialog create() { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + final ExitDialog dialog = new ExitDialog(context, R.style.Dialog); + dialog.setCanceledOnTouchOutside(false); + final View layout = inflater.inflate(R.layout.dialog_exit, null); + dialog.addContentView(layout, new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)); + TextView tv_positive = layout.findViewById(R.id.tv_positive); + TextView tv_negative = layout.findViewById(R.id.tv_negative); + + + // set the confirm button + if (positiveButtonClickListener != null) { + tv_positive.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + positiveButtonClickListener.onClick(dialog, + DialogInterface.BUTTON_POSITIVE); + } + }); + } + if (negativeButtonClickListener != null) { + tv_negative.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + negativeButtonClickListener.onClick(dialog, + DialogInterface.BUTTON_NEGATIVE); + } + }); + } + + dialog.setContentView(layout); + + android.view.WindowManager.LayoutParams params = dialog.getWindow() + .getAttributes(); + params.width = (int) ((SystemCommon.getScreenWidth(context) * 3) / 4); + params.height = android.view.WindowManager.LayoutParams.WRAP_CONTENT; + dialog.getWindow().setAttributes(params); + return dialog; + } + } + + public interface MeasureCallBack { + void onMeasure(int height); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/PermissionAuthNotifyDialog.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/PermissionAuthNotifyDialog.java new file mode 100644 index 0000000..9c7fe77 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/PermissionAuthNotifyDialog.java @@ -0,0 +1,86 @@ +package com.demo.app.ui.dialog; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.demo.app.R; +import com.demo.lib.common.util.SystemCommon; +import com.demo.lib.common.util.common.StringUtils; + +/** + * 鏉冮檺璇锋眰涔嬪墠鐨勫脊妗� + */ +public class PermissionAuthNotifyDialog extends Dialog { + + private static String TAG = "UserProtocolDialog"; + + public PermissionAuthNotifyDialog(Context context) { + super(context); + this.setCancelable(false); + } + + public PermissionAuthNotifyDialog(Context context, int theme) { + super(context, theme); + this.setCancelable(false); + } + + + public static class Builder { + + private Activity context; + private String positiveButtonText; + private OnClickListener positiveButtonClickListener; + + public Builder(Activity context) { + this.context = context; + } + + + public Builder setPositiveButton(String positiveButtonText, + OnClickListener listener) { + this.positiveButtonText = positiveButtonText; + this.positiveButtonClickListener = listener; + return this; + } + + public PermissionAuthNotifyDialog create() { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + final PermissionAuthNotifyDialog dialog = new PermissionAuthNotifyDialog(context, R.style.Dialog); + dialog.setCanceledOnTouchOutside(false); + final View layout = inflater.inflate(R.layout.dialog_auth_notify, null); + dialog.addContentView(layout, new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)); + TextView tv_positive = layout.findViewById(R.id.tv_positive); + + + + // set the confirm button + if (positiveButtonClickListener != null) { + if (!StringUtils.isEmpty(positiveButtonText)) + tv_positive.setText(positiveButtonText); + tv_positive.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + positiveButtonClickListener.onClick(dialog, + DialogInterface.BUTTON_POSITIVE); + } + }); + } + + dialog.setContentView(layout); + + android.view.WindowManager.LayoutParams params = dialog.getWindow() + .getAttributes(); + params.width = (int) ((SystemCommon.getScreenWidth(context) * 3) / 4); + params.height = android.view.WindowManager.LayoutParams.WRAP_CONTENT; + dialog.getWindow().setAttributes(params); + return dialog; + } + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/UserProtocolDialog.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/UserProtocolDialog.java new file mode 100644 index 0000000..ffa0b52 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/dialog/UserProtocolDialog.java @@ -0,0 +1,158 @@ +package com.demo.app.ui.dialog; + +import android.app.Activity; +import android.app.Dialog; +import android.content.Context; +import android.content.DialogInterface; +import android.graphics.Color; +import android.text.method.LinkMovementMethod; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.FrameLayout; +import android.widget.TextView; + +import com.demo.app.R; +import com.demo.app.ui.common.SimpleBrowserActivity; +import com.demo.lib.common.util.SystemCommon; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.lib.common.util.ui.TextViewUtil; + +/** + * 鐢ㄦ埛鍗忚寮规 + */ +public class UserProtocolDialog extends Dialog { + + private static String TAG = "UserProtocolDialog"; + + public UserProtocolDialog(Context context) { + super(context); + this.setCancelable(false); + } + + public UserProtocolDialog(Context context, int theme) { + super(context, theme); + this.setCancelable(false); + } + + + public static class Builder { + public final static int TEXT_ALIGIN_LEFT = 1; + public final static int TEXT_ALIGIN_MIDDLE = 2; + public final static int TEXT_ALIGIN_RIGHT = 3; + + private Activity context; + String webviewData; + String title; + private String positiveButtonText; + private String negativeButtonText; + private OnClickListener positiveButtonClickListener; + private OnClickListener negativeButtonClickListener; + + public Builder(Activity context) { + this.context = context; + } + + public Builder setData(String data) { + this.webviewData = data; + return this; + } + + public Builder setTitle(String title) { + this.title = title; + return this; + } + + /** + * Set the positive button resource and it's listener + * + * @param positiveButtonText + * @return + */ + public Builder setPositiveButton(int positiveButtonText, + OnClickListener listener) { + this.positiveButtonText = (String) context + .getText(positiveButtonText); + this.positiveButtonClickListener = listener; + return this; + } + + public Builder setPositiveButton(String positiveButtonText, + OnClickListener listener) { + this.positiveButtonText = positiveButtonText; + this.positiveButtonClickListener = listener; + return this; + } + + public Builder setNegativeButton(int negativeButtonText, + OnClickListener listener) { + this.negativeButtonText = (String) context + .getText(negativeButtonText); + this.negativeButtonClickListener = listener; + return this; + } + + public Builder setNegativeButton(String negativeButtonText, + OnClickListener listener) { + this.negativeButtonText = negativeButtonText; + this.negativeButtonClickListener = listener; + return this; + } + + public UserProtocolDialog create() { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + final UserProtocolDialog dialog = new UserProtocolDialog(context, R.style.Dialog); + dialog.setCanceledOnTouchOutside(false); + final View layout = inflater.inflate(R.layout.dialog_user_protocol, null); + dialog.addContentView(layout, new FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT)); + TextView tv_title = layout.findViewById(R.id.tv_title); + TextView tv_content = layout.findViewById(R.id.tv_content); + tv_content.setText(TextViewUtil.getClickableHtml(webviewData, context, Color.rgb(23,106,230), SimpleBrowserActivity.class)); + tv_content.setMovementMethod(LinkMovementMethod.getInstance()); + tv_content.setClickable(false); + + + TextView tv_negative = layout.findViewById(R.id.tv_negative); + TextView tv_positive = layout.findViewById(R.id.tv_positive); + if (!StringUtils.isEmpty(title)) + tv_title.setText(title); + + + // set the confirm button + if (positiveButtonClickListener != null) { + if (!StringUtils.isEmpty(positiveButtonText)) + tv_positive.setText(positiveButtonText); + tv_positive.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + positiveButtonClickListener.onClick(dialog, + DialogInterface.BUTTON_POSITIVE); + } + }); + } + if (negativeButtonClickListener != null) { + if (!StringUtils.isEmpty(negativeButtonText)) + tv_negative.setText(negativeButtonText); + tv_negative.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + negativeButtonClickListener.onClick(dialog, + DialogInterface.BUTTON_NEGATIVE); + } + }); + } + + dialog.setContentView(layout); + + android.view.WindowManager.LayoutParams params = dialog.getWindow() + .getAttributes(); + params.width = (int) ((SystemCommon.getScreenWidth(context) * 3) / 4); + params.height = android.view.WindowManager.LayoutParams.WRAP_CONTENT; + dialog.getWindow().setAttributes(params); + return dialog; + } + } + + public interface MeasureCallBack { + void onMeasure(int height); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/HomeFragment.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/HomeFragment.java new file mode 100644 index 0000000..11c023a --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/HomeFragment.java @@ -0,0 +1,37 @@ +package com.demo.app.ui.main; + +import android.os.Bundle; +import android.util.Log; +import android.view.View; + +import com.androidquery.AQuery; +import com.demo.app.R; +import com.demo.lib.common.RetainViewFragment; + +public class HomeFragment extends RetainViewFragment { + + private static final String TAG = "HomeFragment"; + private AQuery mAquery; + + @Override + public int getContentResource() { + return R.layout.fragment_home; + } + + @Override + public void onCreateView(View contentView, Bundle savedInstanceState) { + mAquery = new AQuery(contentView); + } + + @Override + public void onResume() { + super.onResume(); + Log.i(TAG, "onResume"); + } + + @Override + public void onPause() { + Log.i(TAG, "onPause"); + super.onPause(); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/MineFragment.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/MineFragment.java new file mode 100644 index 0000000..2935292 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/main/MineFragment.java @@ -0,0 +1,106 @@ +package com.demo.app.ui.main; + +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import com.androidquery.AQuery; +import com.bumptech.glide.Glide; +import com.demo.app.R; +import com.demo.app.entity.user.UserInfo; +import com.demo.app.ui.common.BrowserActivity; +import com.demo.app.ui.mine.PersonInfoActivity; +import com.demo.app.ui.mine.SettingActivity; +import com.demo.app.utils.AppConfigUtil; +import com.demo.app.utils.Constant; +import com.demo.app.utils.LoginUtil; +import com.demo.app.utils.UserUtil; +import com.demo.lib.common.RetainViewFragment; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.lib.common.util.glide.GlideRoundTransform; +import com.demo.lib.common.util.ui.StatusBarHeightUtil; + +public class MineFragment extends RetainViewFragment implements View.OnClickListener { + + private AQuery mAquery; + + @Override + public int getContentResource() { + return R.layout.fragment_mine; + } + + private void initView() { + TextView tv_title = mAquery.id(R.id.tv_title).getTextView(); + //鐘舵�佹爮楂樺害 + tv_title.setPadding(tv_title.getPaddingLeft(), tv_title.getPaddingTop() + StatusBarHeightUtil.getStatusBarHeight(getContext()), tv_title.getPaddingRight(), tv_title.getPaddingBottom()); + } + + private void init() { + UserInfo user = UserUtil.getLoginUser(getContext()); + if (user == null) { + mAquery.id(R.id.tv_nick_name).text("绔嬪嵆鐧诲綍"); + mAquery.id(R.id.iv_portrait).image(R.drawable.ic_portrait_default); + } else { + mAquery.id(R.id.tv_nick_name).text(user.getNickName()); + Glide.with(getContext()).load(user.getPortrait()).transform(new GlideRoundTransform(getContext())).into(mAquery.id(R.id.iv_portrait).getImageView()); + } + } + + @Override + public void onCreateView(View contentView, Bundle savedInstanceState) { + mAquery = new AQuery(contentView); + initView(); + init(); + } + + @Override + public void onClick(View v) { + switch (v.getId()) { +// case R.id.ll_about_us: { +// String url = AppConfigUtil.getAboutUsLink(getContext()); +// if (StringUtils.isEmpty(url)) { +// return; +// } +// startActivity(new Intent(getContext(), BrowserActivity.class).putExtra("url", url).putExtra("title", "鍏充簬鎴戜滑")); +// } +// break; +// case R.id.ll_kefu: { +// String url = AppConfigUtil.getConcatUsLink(getContext()); +// if (StringUtils.isEmpty(url)) { +// return; +// } +// startActivity(new Intent(getContext(), BrowserActivity.class).putExtra("url", url).putExtra("title", "浜哄伐瀹㈡湇")); +// } +// break; +// case R.id.ll_privacy: { +// startActivity(new Intent(getContext(), BrowserActivity.class).putExtra("url", Constant.PRIVACY_POLICY).putExtra("title", "闅愮鏀跨瓥")); +// } +// break; +// case R.id.ll_feed_back: { +// String url = AppConfigUtil.getFeedBackLink(getContext()); +// if (StringUtils.isEmpty(url)) { +// return; +// } +// startActivity(new Intent(getContext(), BrowserActivity.class).putExtra("url", url).putExtra("title", "闅愮鎶曡瘔")); +// } +// break; +// case R.id.ll_setting: +// startActivity(new Intent(getContext(), SettingActivity.class)); +// break; + + case R.id.ll_user_info: + + if (UserUtil.isLogin(getContext())) { +//涓汉淇℃伅 + startActivity(new Intent(getContext(), PersonInfoActivity.class)); + } else { + LoginUtil.goLogin(getContext()); + } + + break; + } + } + + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/PersonInfoActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/PersonInfoActivity.java new file mode 100644 index 0000000..f4aae9d --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/PersonInfoActivity.java @@ -0,0 +1,529 @@ +package com.demo.app.ui.mine; + +import android.Manifest; +import android.annotation.SuppressLint; +import android.app.Activity; +import android.app.AlertDialog; +import android.content.ActivityNotFoundException; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Color; +import android.net.Uri; +import android.os.Bundle; +import android.os.Environment; +import android.provider.MediaStore; +import android.util.Base64; +import android.util.Log; +import android.view.Gravity; +import android.view.View; +import android.widget.EditText; +import android.widget.ImageView; +import android.widget.LinearLayout; +import android.widget.TextView; +import android.widget.Toast; + +import com.androidquery.AQuery; +import com.bumptech.glide.Glide; +import com.demo.app.R; +import com.demo.app.ui.common.BrowserActivity; +import com.demo.app.utils.ui.TopBarUtil; +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.util.common.DimenUtils; +import com.demo.lib.common.util.common.PhotoCrop; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.lib.common.util.glide.GlideCircleTransform; +import com.demo.lib.common.util.ui.SystemClipImageUtil; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +/** + * Created by weikou2015 on 2016/10/27. + */ + +public class PersonInfoActivity extends BaseActivity implements View.OnClickListener { + + private static final String TAG = "PersonInfoActivity"; + + private LinearLayout ll_portrait; + private LinearLayout ll_nickName; + private LinearLayout ll_birthday; + private LinearLayout ll_sex; + private LinearLayout ll_autograph; + + private ImageView iv_portrait; + private TextView tv_nickName; + private TextView tv_birthday; + private TextView tv_sex; + private TextView tv_autograph; + private TextView tv_email; + + private TextView tv_top_bar_right; + + private AQuery mAQuery; + + + @Override + protected void onCreate(Bundle arg0) { + super.onCreate(arg0); + setContentView(R.layout.activity_person_info); + TopBarUtil.init(this, "涓汉淇℃伅", this); + + mAQuery = new AQuery(this); + + + tv_top_bar_right = findViewById(R.id.tv_top_bar_right); + tv_top_bar_right.setOnClickListener(this); + tv_top_bar_right.setText("淇濆瓨"); + ll_portrait = findViewById(R.id.ll_portrait_select); + ll_nickName = findViewById(R.id.ll_nickName); + ll_birthday = findViewById(R.id.ll_birthday); + ll_sex = findViewById(R.id.ll_sex); + ll_autograph = findViewById(R.id.ll_autograph); + iv_portrait = findViewById(R.id.iv_portrai_select); + tv_nickName = findViewById(R.id.tv_nickName); + tv_birthday = findViewById(R.id.tv_birthday); + tv_sex = findViewById(R.id.tv_sex); + tv_autograph = findViewById(R.id.tv_autograph); + tv_email = findViewById(R.id.tv_email); + + ll_portrait.setOnClickListener(this); + ll_nickName.setOnClickListener(this); + ll_birthday.setOnClickListener(this); + ll_sex.setOnClickListener(this); + ll_autograph.setOnClickListener(this); + findViewById(R.id.ll_advice).setOnClickListener(this); + getPersonInfo(); + } + + private String sign = ""; + + private void getPersonInfo() { + SharedPreferences sp = getSharedPreferences("user", Context.MODE_PRIVATE); + String loginUid = sp.getString("LoginUid", ""); + String uid = sp.getString("uid", ""); +// HttpApiUtil.getPersonInfo(this, uid, loginUid, new BasicTextHttpResponseHandler() { +// @Override +// public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { +// if (jsonObject.optBoolean("IsPost")) { +// JSONObject data = jsonObject.optJSONObject("Data"); +// Glide.with(PersonInfoActivity.this).load(HanJuConstant.addPreFix(data.optString("Portrait"))).transform(new GlideCircleTransform(getApplicationContext())).placeholder(R.drawable.ic_portrait_default).error(R.drawable.ic_portrait_default).into(iv_portrait); +// tv_nickName.setText(data.optString("Nickname")); +// tv_birthday.setText(data.optString("Birthday")); +// if (!StringUtils.isEmpty(data.optString("Sex"))) { +// tv_sex.setText(Integer.parseInt(data.optString("Sex")) == 0 ? "濂�" : "鐢�"); +// } +// sign = data.optString("Sign"); +// String email = data.optString("Email"); +// if (StringUtils.isEmpty(email)) { +// tv_email.setText("鏆傛棤"); +// } else { +// tv_email.setText(email); +// } +// mAQuery.id(R.id.tv_id).text(data.optString("Id")); +// tv_autograph.setText(sign); +// } +// } +// }); + } + + String imgBase64 = ""; + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + // TODO Auto-generated method stub + super.onActivityResult(requestCode, resultCode, data); + if (resultCode == Activity.RESULT_OK) { + //浠庣浉鍐屼腑閫夋嫨鑰屾潵 + if (requestCode == 1001 && data != null) { + Uri selectedImage = data.getData(); + startPhotoZoom(selectedImage);//绯荤粺鍓 + } else if (requestCode == 1002 && data != null) { + if (uriClipUri != null) { + String path = ""; + if (!StringUtils.isEmpty(uriClipUri.getAuthority())) { + try { + imgBase64 = bitmapToBase64(getContentResolver().openInputStream(uriClipUri)); + Glide.with(PersonInfoActivity.this).load(uriClipUri).transform(new GlideCircleTransform(PersonInfoActivity.this)).into(iv_portrait); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } else { + path = uriClipUri.getPath(); + //鍥惧簱 + PhotoCrop crop = new PhotoCrop();//鍒濆鍖� 鍥剧墖鍘嬬缉 + File f = new File(path);//鑾峰彇鍥剧墖 + if (crop.compressPhto(f, false)) {//鍘嬬缉骞朵繚瀛樻垚鍔� + imgBase64 = bitmapToBase64(f); + } + + iv_portrait.postDelayed(new Runnable() { + @Override + public void run() { + Glide.with(PersonInfoActivity.this).load(uriClipUri).transform(new GlideCircleTransform(PersonInfoActivity.this)).into(iv_portrait); + } + }, 200); + } + } + } + } + } + + + private Uri uriClipUri;//鍓鍥剧墖璺緞 + + /** + * 鑾峰彇鐩稿唽鍥剧墖 + * + * @param uri + */ + public void startPhotoZoom(Uri uri) { + File storageDir = new File(Environment.getExternalStorageDirectory().getPath() + "/HanJuImg/"); + if (!storageDir.exists()) {//娌℃湁鏂囦欢澶瑰垯鍒涘缓 + storageDir.mkdir(); + } + uriClipUri = SystemClipImageUtil.startPhotoZoom(this, uri, "clip.jpg", 250, 250, 1002); + return; + } + + private String bitmapToBase64(InputStream in) { + try { + byte[] bytes = new byte[in.available()]; + int length = in.read(bytes); + return Base64.encodeToString(bytes, 0, length, Base64.DEFAULT); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + if (in != null) { + in.close(); + } + } catch (IOException e) { + e.printStackTrace(); + } + } + return null; + } + + private String bitmapToBase64(File file) { + try { + return bitmapToBase64(new FileInputStream(file)); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + return null; + } + + private String saveBitmapTofile(Bitmap bm) { + String name = "img.png"; + File fDir = new File(Environment.getExternalStorageDirectory() + ""); + if (!fDir.exists()) { + fDir.mkdir(); + } + File picFile = new File(fDir, name); + try { + FileOutputStream out = new FileOutputStream(picFile); + bm.compress(Bitmap.CompressFormat.PNG, 100, out); + out.flush(); + out.close(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + return picFile.getPath(); + } + + @SuppressLint("SdCardPath") + + private int imgWidth = 400; + + private int imgHeight = 400; + + private int maxSize = 300; + + /* + * 鍘嬬缉鍥剧墖 + */ + private Bitmap compressImage(Bitmap image) { + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + image.compress(Bitmap.CompressFormat.JPEG, 100, baos);// 璐ㄩ噺鍘嬬缉鏂规硶锛岃繖閲�100琛ㄧず涓嶅帇缂╋紝鎶婂帇缂╁悗鐨勬暟鎹瓨鏀惧埌baos涓� + int options = 100; + while (baos.toByteArray().length / 1024 > maxSize) { // 寰幆鍒ゆ柇濡傛灉鍘嬬缉鍚庡浘鐗囨槸鍚﹀ぇ浜�100kb,澶т簬缁х画鍘嬬缉 + baos.reset();// 閲嶇疆baos鍗虫竻绌篵aos + image.compress(Bitmap.CompressFormat.JPEG, options, baos);// 杩欓噷鍘嬬缉options%锛屾妸鍘嬬缉鍚庣殑鏁版嵁瀛樻斁鍒癰aos涓� + options -= 10;// 姣忔閮藉噺灏�10 + } + ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());// 鎶婂帇缂╁悗鐨勬暟鎹産aos瀛樻斁鍒癇yteArrayInputStream涓� + Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);// 鎶夿yteArrayInputStream鏁版嵁鐢熸垚鍥剧墖 + return bitmap; + } + + // 鍒ゆ柇鏉冮檺闆嗗悎 鏄惁鎺堟潈 false鎺堟潈 true鏈巿鏉� + public boolean lacksPermissions(String... permissions) { + for (String permission : permissions) { + if (lacksPermission(permission)) { + return true; + } + } + return false; + } + + // 鍒ゆ柇鏄惁缂哄皯鏉冮檺 + private boolean lacksPermission(String permission) { + //鏉冮檺鏈巿鏉� + return ContextCompat.checkSelfPermission(getApplicationContext(), permission) == PackageManager.PERMISSION_DENIED; + } + + @Override + public void onClick(View v) { + switch (v.getId()) { + case R.id.tv_top_bar_left: + finish(); + break; + case R.id.ll_portrait_select: + if (lacksPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE)) { //瀛樺偍鏉冮檺鏈紑鍚� + ActivityCompat.requestPermissions(PersonInfoActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 10023); + return; + } + popwindow_img();//閫夋嫨鐩稿唽 + break; + case R.id.ll_nickName: + getNickName(); + break; + case R.id.ll_birthday: + getDate(); + break; + case R.id.ll_sex: + getSex(); + break; + case R.id.ll_autograph://涓�х鍚� + getAutograph(); + break; + case R.id.tv_top_bar_right://瀹屾垚涓汉淇℃伅鐨勪慨鏀� + upLoadRegisterData(); + break; + case R.id.ll_advice: + startActivity(new Intent(getApplicationContext(), BrowserActivity.class).putExtra("title", "鎰忚鍙嶉").putExtra("url", "https://support.qq.com/embed/phone/343178/new-post/")); + + break; + } + } + + + /** + * 浠庣浉鍐岄�夋嫨 鍥剧墖 + */ + private void popwindow_img() { + // 鎵撳紑绯荤粺鍥惧簱閫夋嫨鍥剧墖 + Intent picture = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); + //瑙e喅鎵嬫満鎵句笉鍒癮ctivity 鏂规涓� 妫�娴嬭鏄惁鏈夊搴旂殑app锛堥�夋嫨浜嗘柟妗堜簩 鏂规涓�鍗犳椂灞忚斀锛� +// PackageManager packageManager = getPackageManager(); +// List<ResolveInfo> applist = packageManager.queryIntentActivities(picture, 0); +// if (applist == null || applist.isEmpty()) { +// Toast.makeText(MyInfoActivity.this, "no activity", Toast.LENGTH_SHORT).show(); +// return; +// } + //瑙e喅鎵嬫満鎵句笉鍒癮ctivity 鏂规浜� 鎶涘紓甯� + try { + startActivityForResult(picture, 1001); + } catch (ActivityNotFoundException exception) { + Toast.makeText(this, "no activity", Toast.LENGTH_SHORT).show(); + } + + + } + + /** + * 涓婁紶涓汉淇℃伅 + */ + private void upLoadRegisterData() { + SharedPreferences sp = getSharedPreferences("user", Context.MODE_PRIVATE); + String uid = sp.getString("uid", ""); + String loginUid = sp.getString("LoginUid", ""); +// HttpApiUtil.upLoadPersonInfo(this, uid, loginUid, mSex + "", tv_birthday.getText().toString(), +// tv_autograph.getText().toString(), imgBase64, tv_nickName.getText().toString(), new BasicTextHttpResponseHandler() { +// @Override +// public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { +// if (jsonObject.optBoolean("IsPost")) { +// SharedPreferences sharedPreferences = getSharedPreferences("user", Context.MODE_PRIVATE); +// SharedPreferences.Editor editor = sharedPreferences.edit(); +// editor.putString("name", tv_nickName.getText().toString()); +// editor.commit(); +// +// SingleToast.showToast(PersonInfoActivity.this, "涓汉淇℃伅鏇存柊鎴愬姛"); +// finish(); +// } +// } +// }); + } + + private int mSex = 0; + + private void getSex() { + if (isFinishing()) + return; + final String[] sex = new String[]{"濂�", "鐢�"}; + new AlertDialog.Builder(this).setTitle("鎬у埆閫夋嫨").setSingleChoiceItems( + sex, 0, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + mSex = which; + } + }) + .setPositiveButton("纭畾", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Log.i("mResult", "which鐨勫�间负锛�" + which); + tv_sex.setText(sex[mSex]); + dialog.dismiss(); + } + }) + .setNegativeButton("鍙栨秷", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }).show(); + } + + private void getAutograph() { + final EditText input = new EditText(this); + input.setLines(5); + input.setBackground(null); + input.setTextColor(Color.parseColor("#FF555555")); + input.setGravity(Gravity.START); + input.setPadding(DimenUtils.dip2px(getApplicationContext(),20),DimenUtils.dip2px(getApplicationContext(),5),DimenUtils.dip2px(getApplicationContext(),20),0); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("涓�х鍚嶄慨鏀�").setView(input) + .setNegativeButton("鍙栨秷", null); + builder.setPositiveButton("纭畾", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + input.getText().toString(); + } + }); + + builder.create().show(); + + + +// View v = LayoutInflater.from(this).inflate(R.layout.item_edit_dialog, null); +// if (isFinishing()) +// return; +// final AlertDialog alertDialog = new AlertDialog.Builder(PersonInfoActivity.this).setView(v).create(); +// alertDialog.show(); +// TextView tv_title = v.findViewById(R.id.tv_dialog_title); +// tv_title.setText("涓�х鍚�"); +// final EditText et_msg = v.findViewById(R.id.et_dialog_message); +// TextView tv_cancel = v.findViewById(R.id.tv_cancel); +// TextView tv_confirm = v.findViewById(R.id.tv_confirm); +// et_msg.setText(sign); +// et_msg.setSelection(et_msg.getText().length()); +// tv_cancel.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// alertDialog.dismiss(); +// } +// }); +// +// tv_confirm.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// String str = et_msg.getText().toString(); +// if (StringUtils.isEmpty(str)) { +// SingleToast.showToast(PersonInfoActivity.this, "涓�х鍚嶄笉鑳戒负绌�"); +// return; +// } else { +// tv_autograph.setText(str); +// alertDialog.dismiss(); +// } +// } +// }); + + } + + private void getNickName() { + final EditText et_msg = new EditText(this); + if (isFinishing()) + return; + +// new InputTextDialog.Builder(this).setData(tv_nickName.getText() + "").setTitle("淇敼鏄电О").setFinishListener(new InputTextDialog.IEditFinishListener() { +// @Override +// public void cancel(DialogInterface dialog) { +// dialog.dismiss(); +// } +// +// @Override +// public void finish(DialogInterface dialog, String data) { +// if (StringUtils.isEmpty(data)) { +// SingleToast.showToast(PersonInfoActivity.this, "鏄电О涓嶈兘涓虹┖"); +// } else { +// tv_nickName.setText(data); +// //涓婁紶 +// +// +// dialog.dismiss(); +// } +// } +// }).create().show(); + } + + /** + * 鑾峰彇鐢熸棩 + */ + String date = ""; + + private void getDate() { +// View view = LayoutInflater.from(this).inflate(R.layout.item_datepicker, null); +// if (isFinishing()) +// return; +// final AlertDialog alertDialog = new AlertDialog.Builder(PersonInfoActivity.this).setView(view).create(); +// alertDialog.show(); +// DatePicker datePicker = view.findViewById(R.id.datePicker); +// TextView tv_cancel = view.findViewById(R.id.tv_cancel); +// final TextView tv_confirm = view.findViewById(R.id.tv_confirm); +// +// Calendar calendar = Calendar.getInstance(); +// int year = calendar.get(Calendar.YEAR); +// int monthOfYear = calendar.get(Calendar.MONTH); +// int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH); +// date = year + "/" + monthOfYear + "/" + dayOfMonth; +// datePicker.init(year, monthOfYear, dayOfMonth, new DatePicker.OnDateChangedListener() { +// @Override +// public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { +// date = year + "/" + (monthOfYear + 1) + "/" + dayOfMonth; +// } +// }); +// tv_cancel.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// alertDialog.dismiss(); +// } +// }); +// tv_confirm.setOnClickListener(new View.OnClickListener() { +// @Override +// public void onClick(View v) { +// tv_birthday.setText(date); +// alertDialog.dismiss(); +// } +// }); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/SettingActivity.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/SettingActivity.java new file mode 100644 index 0000000..138465f --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/mine/SettingActivity.java @@ -0,0 +1,133 @@ +package com.demo.app.ui.mine; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; +import android.view.View; +import android.widget.Toast; + +import com.androidquery.AQuery; +import com.demo.app.R; +import com.demo.app.ui.common.BrowserActivity; +import com.demo.app.utils.AppConfigUtil; +import com.demo.app.utils.Constant; +import com.demo.app.utils.UserUtil; +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.util.cache.AndroidCacheUtil; +import com.demo.lib.common.util.common.StringUtils; + +public class SettingActivity extends BaseActivity implements View.OnClickListener { + + private AQuery mAQuery; + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_settings); + mAQuery = new AQuery(this); + mAQuery.id(R.id.tv_top_bar_middle).text("璁剧疆"); + mAQuery.id(R.id.tv_top_bar_left).clicked(new View.OnClickListener() { + @Override + public void onClick(View v) { + finish(); + } + }); + init(); + } + + + private void init() { + mAQuery.id(R.id.rl_person_info).clicked(this); + mAQuery.id(R.id.rl_download).clicked(this); + mAQuery.id(R.id.rl_clear_cache).clicked(this); + mAQuery.id(R.id.rl_help).clicked(this); + mAQuery.id(R.id.rl_about_us).clicked(this); + mAQuery.id(R.id.rl_user_agreement).clicked(this); + mAQuery.id(R.id.rl_privacy_policy).clicked(this); + mAQuery.id(R.id.setting_btn_exit).clicked(this); + + if (UserUtil.isLogin(getApplicationContext())) { + mAQuery.id(R.id.setting_btn_exit).visibility(View.VISIBLE); + } else { + mAQuery.id(R.id.setting_btn_exit).visibility(View.GONE); + } + + setCacheSize(); + } + + private void setCacheSize() { + String cacheSize = "0KB"; + try { + cacheSize = AndroidCacheUtil.getCacheSizeDesc(getApplicationContext()); + } catch (Exception e) { + } + mAQuery.id(R.id.tv_cache_size).text(cacheSize); + + } + + + @Override + public void onClick(View v) { + + switch (v.getId()) { + case R.id.rl_person_info: { + startActivity(new Intent(this, BrowserActivity.class).putExtra("url", Constant.USER_AGREEMENT)); + } + break; + case R.id.rl_download: + break; + case R.id.rl_clear_cache: + if (isFinishing()) + return; + { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage("纭畾娓呯┖缂撳瓨锛�") + .setNegativeButton("鍙栨秷", null) + .setPositiveButton("纭畾", + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int which) { + AndroidCacheUtil.trimAllCache(getApplicationContext()); + Toast.makeText(SettingActivity.this, + "缂撳瓨宸叉竻绌�", Toast.LENGTH_SHORT).show(); + setCacheSize(); + } + }); + builder.create().show(); + } + + break; + case R.id.rl_help: { + String url = AppConfigUtil.getHelpLink(getApplicationContext()); + if (StringUtils.isEmpty(url)) { + return; + } + startActivity(new Intent(this, BrowserActivity.class).putExtra("url", Constant.USER_AGREEMENT)); + } + break; + case R.id.rl_about_us: { + String url = AppConfigUtil.getAboutUsLink(getApplicationContext()); + if (StringUtils.isEmpty(url)) { + return; + } + startActivity(new Intent(this, BrowserActivity.class).putExtra("url", Constant.USER_AGREEMENT)); + } + break; + case R.id.rl_user_agreement: + startActivity(new Intent(this, BrowserActivity.class).putExtra("url", Constant.USER_AGREEMENT)); + break; + case R.id.rl_privacy_policy: + startActivity(new Intent(this, BrowserActivity.class).putExtra("url", Constant.PRIVACY_POLICY)); + break; + + case R.id.setting_btn_exit: + //logout + UserUtil.logout(getApplicationContext()); + break; + } + + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/subview/MyRefreshLayout.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/subview/MyRefreshLayout.java new file mode 100644 index 0000000..cfa2bcd --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/ui/subview/MyRefreshLayout.java @@ -0,0 +1,44 @@ +package com.demo.app.ui.subview; + +import android.content.Context; +import android.util.AttributeSet; + + +import com.demo.app.R; + +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +public class MyRefreshLayout extends SwipeRefreshLayout { + + + /** + * 鎸変笅鏃剁殑y鍧愭爣 + */ + private float mYDown; + private float mXDown; + /** + * 鎶捣鏃剁殑y鍧愭爣, 涓巑YDown涓�璧风敤浜庢粦鍔ㄥ埌搴曢儴鏃跺垽鏂槸涓婃媺杩樻槸涓嬫媺 + */ + private float mLastY; + private float mLastX; + private boolean mIsVpDragger; + + /** + * @param context + */ + public MyRefreshLayout(Context context) { + this(context, null); + } + + public MyRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + setColorSchemeColors(getResources().getColor(R.color.refresh_color)); + } + + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top + , right, bottom); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/AppConfigUtil.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/AppConfigUtil.java new file mode 100644 index 0000000..a0792a6 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/AppConfigUtil.java @@ -0,0 +1,130 @@ +package com.demo.app.utils; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.google.gson.Gson; +import com.google.gson.reflect.TypeToken; +import com.demo.lib.common.util.common.StringUtils; + +import java.lang.reflect.Type; +import java.util.HashSet; +import java.util.Set; + +public class AppConfigUtil { + + /** + * 娴忚鍣ㄥ璺冲崗璁� + * + * @param context + * @param content + */ + public static void saveBrowserJumpOutProtocolPrefix(Context context, String content) { + saveConfig("jumpAppProtocolPrefix", content, context); + } + + public static Set<String> getBrowserJumpOutProtocolPrefix(Context context) { + try { + String config = getConfig("jumpAppProtocolPrefix", context); + if (!StringUtils.isEmpty(config)) { + Type type = new TypeToken<Set<String>>() { + }.getType(); + return new Gson().fromJson(config, type); + } + } catch (Exception e) { + e.getMessage(); + } + return new HashSet<>(); + } + + + /** + * 淇濆瓨鑱旂郴鎴戜滑閾炬帴 + * + * @param context + * @param link + */ + public static void saveConcatUsLink(Context context, String link) { + saveConfig("contactUs", link, context); + } + + public static String getConcatUsLink(Context context) { + return getConfig("contactUs", context); + } + + /** + * 淇濆瓨娉ㄩ攢閾炬帴 + * + * @param context + * @param link + */ + public static void saveUnRegisterLink(Context context, String link) { + saveConfig("unRegister", link, context); + } + + public static String getUnRegisterLink(Context context) { + return getConfig("unRegister", context); + } + + + /** + * 淇濆瓨鍏充簬鎴戜滑鐨勯摼鎺� + * + * @param context + * @param link + */ + public static void saveAboutUsLink(Context context, String link) { + saveConfig("aboutUs", link, context); + } + + public static String getAboutUsLink(Context context) { + return getConfig("aboutUs", context); + } + + + /** + * 闅愮鎶曡瘔 + * + * @param context + * @param link + */ + public static void saveFeedBackLink(Context context, String link) { + saveConfig("feedBack", link, context); + } + + public static String getFeedBackLink(Context context) { + return getConfig("feedBack", context); + } + + + /** + * 甯姪涓績 + * + * @param context + * @param link + */ + public static void saveHelpLink(Context context, String link) { + saveConfig("helpLink", link, context); + } + + public static String getHelpLink(Context context) { + return getConfig("helpLink", context); + } + + + private static void saveConfig(String key, String value, Context context) { + SharedPreferences.Editor editor = context.getSharedPreferences("config", Context.MODE_PRIVATE).edit(); + editor.putString(key, value); + editor.commit(); + } + + + private static String getConfig(String key, Context context) { + if (context == null) + return null; + SharedPreferences share = context.getSharedPreferences("config", Context.MODE_PRIVATE); + return share.getString(key, ""); + } + + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/Constant.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/Constant.java new file mode 100644 index 0000000..d3a51d6 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/Constant.java @@ -0,0 +1,14 @@ +package com.demo.app.utils; + +public class Constant { + public final static boolean DEBUG = false; + + public final static String HOST = "http://xxx"; + + public final static boolean isDisableProxy = false; + + public static final String USER_AGREEMENT = "http://h5.hanju.goxcw.com/hanju/user_protocol.html"; + public static final String PRIVACY_POLICY = "http://h5.hanju.goxcw.com/hanju/privacy.html"; + public static final String DISCLAIMER = "http://h5.hanju.goxcw.com/hanju/disclaimer.html"; + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/FileUtils.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/FileUtils.java new file mode 100644 index 0000000..836e22f --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/FileUtils.java @@ -0,0 +1,645 @@ +package com.demo.app.utils; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.Context; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.os.StatFs; +import android.provider.DocumentsContract; +import android.provider.MediaStore; + +import com.demo.lib.common.util.common.StringUtils; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +public class FileUtils { + + + /** + * 鍐欐枃鏈枃锟�?鍦ˋndroid绯荤粺涓紝鏂囦欢淇濆瓨锟�?/data/data/PACKAGE_NAME/files 鐩綍锟�? + * + * @param context + */ + public static void write(Context context, String fileName, String content) { + if (content == null) + content = ""; + + try { + FileOutputStream fos = context.openFileOutput(fileName, + Context.MODE_PRIVATE); + fos.write(content.getBytes()); + + fos.close(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 璇诲彇鏂囨湰鏂囦欢 + * + * @param context + * @param fileName + * @return + */ + public static String read(Context context, String fileName) { + try { + FileInputStream in = context.openFileInput(fileName); + return readInStream(in); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + private static String readInStream(FileInputStream inStream) { + try { + ByteArrayOutputStream outStream = new ByteArrayOutputStream(); + byte[] buffer = new byte[512]; + int length = -1; + while ((length = inStream.read(buffer)) != -1) { + outStream.write(buffer, 0, length); + } + + outStream.close(); + inStream.close(); + return outStream.toString(); + } catch (IOException e) { + e.printStackTrace(); + } + return null; + } + + public static File createFile(String folderPath, String fileName) { + File destDir = new File(folderPath); + if (!destDir.exists()) { + destDir.mkdirs(); + } + return new File(folderPath, fileName + fileName); + } + + public static void copyFile(InputStream in, File file) { + + if (!file.exists()) { + try { + file.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + if (file.exists()) { + try { + FileOutputStream os = new FileOutputStream(file); + + byte[] b = new byte[1024]; + + int len = -1; + + while ((len = in.read(b)) != -1) { + os.write(b, 0, len); + } + + in.close(); + os.close(); + + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + } + + } + + /** + * 鍚戞墜鏈哄啓鍥剧墖 + * + * @param buffer + * @param folder + * @param fileName + * @return + */ + public static boolean writeFile(byte[] buffer, String folder, + String fileName) { + boolean writeSucc = false; + + boolean sdCardExist = Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED); + + String folderPath = ""; + if (sdCardExist) { + folderPath = Environment.getExternalStorageDirectory() + + File.separator + folder + File.separator; + } else { + writeSucc = false; + } + + File fileDir = new File(folderPath); + if (!fileDir.exists()) { + fileDir.mkdirs(); + } + + File file = new File(folderPath + fileName); + FileOutputStream out = null; + try { + out = new FileOutputStream(file); + out.write(buffer); + writeSucc = true; + } catch (Exception e) { + e.printStackTrace(); + } finally { + try { + out.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return writeSucc; + } + + /** + * 鏍规嵁鏂囦欢缁濆璺緞鑾峰彇鏂囦欢鍚� + * + * @param filePath + * @return + */ + public static String getFileName(String filePath) { + if (StringUtils.isEmpty(filePath)) + return ""; + return filePath.substring(filePath.lastIndexOf(File.separator) + 1); + } + + /** + * 鏍规嵁鏂囦欢鐨勭粷瀵硅矾寰勮幏鍙栨枃浠跺悕浣嗕笉鍖呭惈鎵╁睍鍚� + * + * @param filePath + * @return + */ + public static String getFileNameNoFormat(String filePath) { + if (StringUtils.isEmpty(filePath)) { + return ""; + } + int point = filePath.lastIndexOf('.'); + return filePath.substring(filePath.lastIndexOf(File.separator) + 1, + point); + } + + /** + * 鑾峰彇鏂囦欢鎵╁睍鍚� + * + * @param fileName + * @return + */ + public static String getFileFormat(String fileName) { + if (StringUtils.isEmpty(fileName)) + return ""; + + int point = fileName.lastIndexOf('.'); + return fileName.substring(point + 1); + } + + /** + * 鑾峰彇鏂囦欢澶у皬 + * + * @param filePath + * @return + */ + public static long getFileSize(String filePath) { + long size = 0; + + File file = new File(filePath); + if (file != null && file.exists()) { + size = file.length(); + } + return size; + } + + /** + * 鑾峰彇鏂囦欢澶у皬 + * + * @param size 瀛楄妭 + * @return + */ + public static String getFileSize(long size) { + if (size <= 0) + return "0"; + java.text.DecimalFormat df = new java.text.DecimalFormat("##.##"); + float temp = (float) size / 1024; + if (temp >= 1024) { + return df.format(temp / 1024) + "M"; + } else { + return df.format(temp) + "K"; + } + } + + /** + * 杞崲鏂囦欢澶у皬 + * + * @param fileS + * @return B/KB/MB/GB + */ + public static String formatFileSize(long fileS) { + java.text.DecimalFormat df = new java.text.DecimalFormat("#.00"); + String fileSizeString = ""; + if (fileS < 1024) { + fileSizeString = df.format((double) fileS) + "B"; + } else if (fileS < 1048576) { + fileSizeString = df.format((double) fileS / 1024) + "KB"; + } else if (fileS < 1073741824) { + fileSizeString = df.format((double) fileS / 1048576) + "MB"; + } else { + fileSizeString = df.format((double) fileS / 1073741824) + "G"; + } + return fileSizeString; + } + + /** + * 鑾峰彇鐩綍鏂囦欢澶у皬 + * + * @param dir + * @return + */ + public static long getDirSize(File dir) { + if (dir == null) { + return 0; + } + if (!dir.isDirectory()) { + return 0; + } + long dirSize = 0; + File[] files = dir.listFiles(); + for (File file : files) { + if (file.isFile()) { + dirSize += file.length(); + } else if (file.isDirectory()) { + dirSize += file.length(); + dirSize += getDirSize(file); // 閫掑綊璋冪敤缁х画缁熻 + } + } + return dirSize; + } + + /** + * 鑾峰彇鐩綍鏂囦欢涓暟 + * + * @return + */ + public long getFileList(File dir) { + long count = 0; + File[] files = dir.listFiles(); + count = files.length; + for (File file : files) { + if (file.isDirectory()) { + count = count + getFileList(file);// 閫掑綊 + count--; + } + } + return count; + } + + public static byte[] toBytes(InputStream in) throws IOException { + ByteArrayOutputStream out = new ByteArrayOutputStream(); + int ch; + while ((ch = in.read()) != -1) { + out.write(ch); + } + byte[] buffer = out.toByteArray(); + out.close(); + return buffer; + } + + /** + * 锟�?锟斤拷鏂囦欢鏄惁瀛樺湪 + * + * @param name + * @return + */ + public static boolean checkFileExists(String name) { + boolean status; + if (!name.equals("")) { + File path = Environment.getExternalStorageDirectory(); + File newPath = new File(path.toString() + name); + status = newPath.exists(); + } else { + status = false; + } + return status; + } + + public static boolean existFile(String path) { + + File file = new File(path); + + return file.isFile() && file.exists(); + } + + /** + * 璁$畻SD鍗$殑鍓╀綑绌洪棿 + * + * @return 杩斿洖-1锛岃鏄庢病鏈夊畨瑁卻d锟�? + */ + public static long getFreeDiskSpace() { + String status = Environment.getExternalStorageState(); + long freeSpace = 0; + if (status.equals(Environment.MEDIA_MOUNTED)) { + try { + File path = Environment.getExternalStorageDirectory(); + StatFs stat = new StatFs(path.getPath()); + long blockSize = stat.getBlockSize(); + long availableBlocks = stat.getAvailableBlocks(); + freeSpace = availableBlocks * blockSize / 1024; + } catch (Exception e) { + e.printStackTrace(); + } + } else { + return -1; + } + return (freeSpace); + } + + /** + * 鏂板缓鐩綍 + * + * @param directoryName + * @return + */ + public static boolean createDirectory(String directoryName) { + boolean status; + if (!directoryName.equals("")) { + File path = Environment.getExternalStorageDirectory(); + File newPath = new File(path.toString() + directoryName); + status = newPath.mkdir(); + status = true; + } else + status = false; + return status; + } + + /** + * 锟�?锟斤拷鏄惁瀹夎SD锟�? + * + * @return + */ + public static boolean checkSaveLocationExists() { + String sDCardStatus = Environment.getExternalStorageState(); + boolean status; + status = sDCardStatus.equals(Environment.MEDIA_MOUNTED); + return status; + } + + /** + * 鍒犻櫎鐩綍(鍖呮嫭锛氱洰褰曢噷鐨勬墍鏈夋枃锟�? + * + * @param fileName + * @return + */ + public static boolean deleteDirectory(String fileName) { + boolean status; + SecurityManager checker = new SecurityManager(); + + if (!fileName.equals("")) { + + File path = Environment.getExternalStorageDirectory(); + File newPath = new File(path.toString() + fileName); + checker.checkDelete(newPath.toString()); + if (newPath.isDirectory()) { + String[] listfile = newPath.list(); + // delete all files within the specified directory and then + // delete the directory + try { + for (int i = 0; i < listfile.length; i++) { + File deletedFile = new File(newPath.toString() + "/" + + listfile[i]); + deletedFile.delete(); + } + newPath.delete(); + + status = true; + } catch (Exception e) { + e.printStackTrace(); + status = false; + } + + } else + status = false; + } else + status = false; + return status; + } + + /** + * 鍒犻櫎鏂囦欢 + * + * @param fileName + * @return + */ + public static boolean deleteFile(String fileName) { + boolean status; + SecurityManager checker = new SecurityManager(); + + if (!fileName.equals("")) { + + File path = Environment.getExternalStorageDirectory(); + File newPath = new File(path.toString() + fileName); + checker.checkDelete(newPath.toString()); + if (newPath.isFile()) { + try { + + newPath.delete(); + status = true; + } catch (SecurityException se) { + se.printStackTrace(); + status = false; + } + } else + status = false; + } else + status = false; + return status; + } + + public static final String getTempFilePath(Context context) { + + return context.getCacheDir() + File.separator + "temp"; + + } + + public static String getSDPath() { + File sdDir = null; + boolean sdCardExist = Environment.getExternalStorageState().equals( + Environment.MEDIA_MOUNTED); // 鍒ゆ柇sd鍗℃槸鍚﹀瓨锟�? + if (sdCardExist) { + sdDir = Environment.getExternalStorageDirectory();// 鑾峰彇璺熺洰锟�? + } + return sdDir.getPath(); + } + + // 灏嗗浘鐗囦繚瀛樺埌鎸囧畾鐨勮矾寰� + public static String savePic(String filePath, String name, Bitmap bitmap) { + File file = new File(filePath); + if (!file.exists()) + file.mkdirs(); + + File f = new File(filePath + File.separator + name); + try { + f.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + FileOutputStream fOut = null; + try { + fOut = new FileOutputStream(f); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut); + try { + fOut.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + fOut.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return f.getPath(); + } + + // 灏嗗浘鐗囦繚瀛樺埌鎸囧畾鐨勮矾寰� + public static String savePic(String filePath, Bitmap bitmap) { + File f = new File(filePath); + try { + f.createNewFile(); + } catch (IOException e) { + e.printStackTrace(); + } + FileOutputStream fOut = null; + try { + fOut = new FileOutputStream(f); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + bitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut); + try { + fOut.flush(); + } catch (IOException e) { + e.printStackTrace(); + } + try { + fOut.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return f.getPath(); + } + + + public static String getFilePathByUri(Context context, Uri uri) { + String path = null; + // 浠� file:// 寮�澶寸殑 + if (ContentResolver.SCHEME_FILE.equals(uri.getScheme())) { + path = uri.getPath(); + return path; + } + // 浠� content:// 寮�澶寸殑锛屾瘮濡� content://media/extenral/images/media/17766 + if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()) && Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { + Cursor cursor = context.getContentResolver().query(uri, new String[]{MediaStore.Images.Media.DATA}, null, null, null); + if (cursor != null) { + if (cursor.moveToFirst()) { + int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + if (columnIndex > -1) { + path = cursor.getString(columnIndex); + } + } + cursor.close(); + } + return path; + } + // 4.4鍙婁箣鍚庣殑 鏄互 content:// 寮�澶寸殑锛屾瘮濡� content://com.android.providers.media.documents/document/image%3A235700 + if (ContentResolver.SCHEME_CONTENT.equals(uri.getScheme()) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + if (DocumentsContract.isDocumentUri(context, uri)) { + if (isExternalStorageDocument(uri)) { + // ExternalStorageProvider + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + if ("primary".equalsIgnoreCase(type)) { + path = Environment.getExternalStorageDirectory() + "/" + split[1]; + return path; + } + } else if (isDownloadsDocument(uri)) { + // DownloadsProvider + final String id = DocumentsContract.getDocumentId(uri); + final Uri contentUri = ContentUris.withAppendedId(Uri.parse("content://downloads/public_downloads"), + Long.valueOf(id)); + path = getDataColumn(context, contentUri, null, null); + return path; + } else if (isMediaDocument(uri)) { + // MediaProvider + final String docId = DocumentsContract.getDocumentId(uri); + final String[] split = docId.split(":"); + final String type = split[0]; + Uri contentUri = null; + if ("image".equals(type)) { + contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; + } else if ("video".equals(type)) { + contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; + } else if ("audio".equals(type)) { + contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; + } + final String selection = "_id=?"; + final String[] selectionArgs = new String[]{split[1]}; + path = getDataColumn(context, contentUri, selection, selectionArgs); + return path; + } + } + } + return null; + } + + private static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { + Cursor cursor = null; + final String column = "_data"; + final String[] projection = {column}; + try { + cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); + if (cursor != null && cursor.moveToFirst()) { + final int column_index = cursor.getColumnIndexOrThrow(column); + return cursor.getString(column_index); + } + } finally { + if (cursor != null) + cursor.close(); + } + return null; + } + + private static boolean isExternalStorageDocument(Uri uri) { + return "com.android.externalstorage.documents".equals(uri.getAuthority()); + } + + private static boolean isDownloadsDocument(Uri uri) { + return "com.android.providers.downloads.documents".equals(uri.getAuthority()); + } + + private static boolean isMediaDocument(Uri uri) { + return "com.android.providers.media.documents".equals(uri.getAuthority()); + } + + +} \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/JumpActivityUtil.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/JumpActivityUtil.java new file mode 100644 index 0000000..64ca2f3 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/JumpActivityUtil.java @@ -0,0 +1,88 @@ +package com.demo.app.utils; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; + +import com.alibaba.fastjson.JSONObject; +import com.demo.app.entity.common.JumpDetail; +import com.demo.library_ec.AlibcTradeUtil; +import com.demo.lib.common.util.common.StringUtils; + +import java.util.Iterator; + + +public class JumpActivityUtil { + + public static void jumpActivity(Context mContext, + JumpDetail jumpDetail, JSONObject params) { + Intent intent = null; + org.json.JSONObject object = null; + try { + intent = new Intent(mContext, Class.forName(JumpActivityUtil.filterActivityName(jumpDetail.getActivity()))); + if (params != null) + object = new org.json.JSONObject(params); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } + if (object != null) { + @SuppressWarnings("unchecked") + Iterator<String> its = object.keys(); + while (its.hasNext()) { + String key = its.next(); + String value = object.optString(key); + intent.putExtra(key, value); + } + } + mContext.startActivity(intent); + } + + /** + * 璺宠浆 + * + * @param context + * @param detail + * @param params + */ + public static void jumpPage(final Activity context, JumpDetail detail, JSONObject params) { + if (context == null) + return; + if (detail == null) + return; + + String type = detail.getType(); + switch (type) { + case "baichuan": + if (params == null) + return; + String url = params.getString("url"); + if (StringUtils.isEmpty(url)) + return; + //璺宠浆鐧惧窛 + AlibcTradeUtil.openUrl(context, url, null, null, null, null); + + break; + + default: { + try { + Intent intent = new Intent(context, Class.forName(JumpActivityUtil.filterActivityName(detail.getActivity()))); + if (params != null) + for (Iterator<String> keys = params.keySet().iterator(); keys.hasNext(); ) { + String key = keys.next(); + intent.putExtra(key, params.getString(key)); + } + context.startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } + break; + } + } + + + public static String filterActivityName(String activity) { + return activity; + } + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/LoginUtil.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/LoginUtil.java new file mode 100644 index 0000000..867cf6d --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/LoginUtil.java @@ -0,0 +1,63 @@ +package com.demo.app.utils; + +import android.content.Context; +import android.content.Intent; +import android.widget.Toast; + +import com.demo.app.ui.common.BrowserActivity; +import com.demo.library_login.inter.ILoginListener; +import com.demo.library_login.inter.LoginApiCallBack; +import com.demo.library_login.ui.EmailLoginActivity; + + +public class LoginUtil { + + private static ILoginListener loginListener = new ILoginListener() { + + @Override + public void emailLogin(Context context, String email, String pwd, LoginApiCallBack callBack) { + super.emailLogin(context, email, pwd, callBack); + Toast.makeText(context, "emailLogin", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onPrivacy(Context context) { + super.onPrivacy(context); + context.startActivity(new Intent(context, BrowserActivity.class).putExtra("url", Constant.PRIVACY_POLICY)); + } + + @Override + public void onProtocol(Context context) { + super.onProtocol(context); + context.startActivity(new Intent(context, BrowserActivity.class).putExtra("url", Constant.USER_AGREEMENT)); + } + + @Override + public void sendEmailCode(Context context, String email, LoginApiCallBack callBack) { + super.sendEmailCode(context, email, callBack); + Toast.makeText(context, "sendEmailCode", Toast.LENGTH_SHORT).show(); + } + + @Override + public void emailRegister(Context context, String email, String vcode, String pwd, LoginApiCallBack callBack) { + super.emailRegister(context, email, vcode, pwd, callBack); + Toast.makeText(context, "emailRegister", Toast.LENGTH_SHORT).show(); + } + + @Override + public void emailUpdatePwd(Context context, String email, String vcode, String pwd, LoginApiCallBack callBack) { + super.emailUpdatePwd(context, email, vcode, pwd, callBack); + Toast.makeText(context, "emailUpdatePwd", Toast.LENGTH_SHORT).show(); + } + }; + + + /** + * 鍘荤櫥褰� + * @param context + */ + public static void goLogin(Context context) { + context.startActivity(new Intent(context, EmailLoginActivity.class).putExtra("listener", LoginUtil.loginListener)); + } + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/UserUtil.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/UserUtil.java new file mode 100644 index 0000000..035f22b --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/UserUtil.java @@ -0,0 +1,93 @@ +package com.demo.app.utils; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.demo.app.entity.user.UserInfo; +import com.demo.lib.common.util.common.StringUtils; + +import static android.content.Context.MODE_PRIVATE; + +public class UserUtil { + + private static Gson gson = new GsonBuilder().serializeNulls().create(); + + + /** + * 鏄惁鍚屾剰浜嗙敤鎴峰崗璁� + * + * @param context + * @return + */ + public static boolean isAgreeUserProtocol(Context context) { + SharedPreferences sp = context.getSharedPreferences("user", MODE_PRIVATE); + String protocol = sp.getString("protocol-agree", ""); + return !StringUtils.isEmpty(protocol); + } + + + /** + * 鍚屾剰鐢ㄦ埛鍗忚 + * + * @param context + */ + public static void agreeUserProtocol(Context context) { + SharedPreferences sp = context.getSharedPreferences("user", MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putString("protocol-agree", "1"); + editor.commit(); + } + + public static String getUid(Context context) { + SharedPreferences preferences = context.getSharedPreferences("user", MODE_PRIVATE); + String uid = preferences.getString("uid", ""); + return uid; + } + + public static String getLoginUid(Context context) { + UserInfo user = getLoginUser(context); + if (user == null) + return null; + return user.getId(); + } + + public static UserInfo getLoginUser(Context context) { + SharedPreferences preferences = context.getSharedPreferences("user", MODE_PRIVATE); + String loginUserStr = preferences.getString("loginUser", null); + if (loginUserStr == null) + return null; + return new Gson().fromJson(loginUserStr, UserInfo.class); + } + + public static boolean isLogin(Context context) { + return getLoginUser(context) != null; + } + + + /** + * 閫�鍑虹櫥褰� + * + * @param context + */ + public static void logout(Context context) { + SharedPreferences preferences = context.getSharedPreferences("user", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.remove("loginUser"); + editor.commit(); + } + + /** + * 鐧诲綍鎴愬姛 + * + * @param context + * @param userInfo + */ + public static void loginSuccess(Context context, UserInfo userInfo) { + SharedPreferences preferences = context.getSharedPreferences("user", MODE_PRIVATE); + SharedPreferences.Editor editor = preferences.edit(); + editor.putString("loginUser", new Gson().toJson(userInfo)); + editor.commit(); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponseHandler.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponseHandler.java new file mode 100644 index 0000000..b7faccf --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponseHandler.java @@ -0,0 +1,6 @@ +package com.demo.app.utils.api; + + +public abstract class BasicTextHttpResponseHandler extends BasicTextHttpResponsePreHandler { + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponsePreHandler.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponsePreHandler.java new file mode 100644 index 0000000..873667f --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/BasicTextHttpResponsePreHandler.java @@ -0,0 +1,138 @@ +package com.demo.app.utils.api; + +import android.content.SharedPreferences; +import android.os.Handler; + + +import com.demo.app.MyApplication; + +import org.apache.http.Header; +import org.apache.http.HeaderElement; +import org.apache.http.ParseException; +import org.json.JSONObject; + +import java.io.IOException; +import java.util.Iterator; +import java.util.List; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.Headers; +import okhttp3.Response; + +import static android.content.Context.MODE_PRIVATE; + +public class BasicTextHttpResponsePreHandler implements + Callback { + + public void onStart() { + + } + + public void onSuccessPerfect(int statusCode, Header[] headers, + JSONObject jsonObject) throws Exception { + } + + public void onFailure(int statusCode, Header[] headers, String jsonObject, Throwable e) { + + } + + public void onFailure(int statusCode, Header[] headers, byte[] jsonObject, Throwable e) { + + } + + public void onFinish() { + } + + + // 灏嗚姹傛垚鍔熺殑鏁版嵁杩斿洖鍒颁富绾跨▼杩涜鏁版嵁鏇存柊 + Handler mainHandler = new Handler(MyApplication.application.getBaseContext().getMainLooper()); + + @Override + public void onFailure(Call call, final IOException e) { + final MyOKHttpHeader header[] = new MyOKHttpHeader[1]; + mainHandler.post(new Runnable() { + @Override + public void run() { + onFailure(9999, header, e + "", e); + onFailure(9999, header, new byte[1], e); + onFinish(); + } + }); +// Log.e("mResult", e.toString()); + } + + @Override + public void onResponse(Call call, final Response response) throws IOException { + final Headers headers1 = response.headers(); + List cookies = headers1.values("Set-Cookie"); + if (cookies.size() > 0) { + String session = cookies.get(0).toString(); + String sessionid = session.substring(0, session.indexOf(";")); +// Log.e("mResult", sessionid); + SharedPreferences sp = MyApplication.application.getBaseContext() + .getSharedPreferences("Session", MODE_PRIVATE); + if (!sp.getString("sessionid", "").equals(sessionid)) { + SharedPreferences.Editor edit = sp.edit();//缂栬緫鏂囦欢 + edit.putString("sessionid", sessionid); + edit.apply(); + } + } + + final String data = response.body().string(); + final MyOKHttpHeader headers[] = new MyOKHttpHeader[headers1.size()]; + int i = 0; + for (Iterator<String> its = headers1.names().iterator(); its.hasNext(); ) { + String name = its.next(); + headers[i++] = new MyOKHttpHeader(name, headers1.get(name)); + } + mainHandler.post(new Runnable() { + @Override + public void run() { + onFinish(); + if (response.isSuccessful()) { + try { + JSONObject jsonObject = new JSONObject(data); + onSuccessPerfect(response.code(), headers, jsonObject); + } catch (Exception e) { + e.printStackTrace(); + if (data == null || data.length() == 0) { + onFailure(response.code(), headers, data, new IOException("Unexpected code " + response)); + onFailure(response.code(), headers, new byte[1], new IOException("Unexpected code " + response)); + } + } + } else { + onFailure(response.code(), headers, "鏁版嵁杩斿洖澶辫触", new IOException("Unexpected code " + response)); + onFailure(response.code(), headers, new byte[1], new IOException("Unexpected code " + response)); + } + } + }); + } + + class MyOKHttpHeader implements Header { + String name; + + String value; + + + public MyOKHttpHeader(String name, String value) { + this.name = name; + this.value = value; + } + + @Override + public String getName() { + return name; + } + + @Override + public String getValue() { + return value; + } + + @Override + public HeaderElement[] getElements() throws ParseException { + return new HeaderElement[0]; + } + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/HttpApiUtil.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/HttpApiUtil.java new file mode 100644 index 0000000..17cab5b --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/api/HttpApiUtil.java @@ -0,0 +1,286 @@ +package com.demo.app.utils.api; + +import android.content.Context; +import android.content.SharedPreferences; +import android.widget.Toast; + +import com.demo.app.utils.Constant; +import com.demo.lib.common.util.ManifestDataUtil; +import com.demo.lib.common.util.common.PackageUtils2; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.lib.common.util.device.DeviceInfoUtil; +import com.demo.lib.common.util.device.MobileUtil; +import com.demo.lib.common.util.security.MD5Utils; + +import org.apache.http.Header; +import org.json.JSONObject; + +import java.io.File; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; + +import okhttp3.FormBody; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; + +import static android.content.Context.MODE_PRIVATE; + + +public class HttpApiUtil { + public static final boolean isDebug = false; + + private static final String TAG = "HttpApiUtil"; + + public static String BASE_URL = Constant.HOST + "/fanli/api/v1/"; + + public static OkHttpClient mOkHttpClient;//okHttpClient 瀹炰緥 + + public static OkHttpClient mOkHttpClientSoon;//okHttpClient 瀹炰緥 + + static { + mOkHttpClient = new OkHttpClient.Builder() + .connectTimeout(10 * 1000, TimeUnit.MILLISECONDS) + .readTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS) + .writeTimeout(5 * 60 * 1000, TimeUnit.MILLISECONDS) + .build(); + + //瓒呮椂鏃堕棿 + mOkHttpClientSoon = new OkHttpClient.Builder() + .connectTimeout(3 * 1000, TimeUnit.MILLISECONDS) + .readTimeout(3 * 1000, TimeUnit.MILLISECONDS) + .writeTimeout(3 * 1000, TimeUnit.MILLISECONDS) + .build(); + } + + + /** + * 璇锋眰demo + * + * @param context + * @param handler + */ + public static void xxx(Context context, BasicTextHttpResponseHandler handler) { + LinkedHashMap<String, String> params = new LinkedHashMap<String, String>(); + commonPostWithFailture(context, BASE_URL + "xxx/xxx", params, handler); + } + + + public static void getConfig(Context context, BasicTextHttpResponseHandler handler) { + LinkedHashMap<String, String> params = new LinkedHashMap<String, String>(); + commonPostWithFailture(context, BASE_URL + "xxx/xxx", params, handler); + } + + + + + private static void commonPost(Context context, String url, + LinkedHashMap<String, String> params, + BasicTextHttpResponseHandler handler) { + if (Constant.isDisableProxy) { + commonPost(context, url, params, null, handler); + } else { + Toast.makeText(context, "鏈嶅姟鍣ㄦ嫆缁濊闂紝璇锋煡鐪嬫槸鍚︾鐢ㄤ簡浠g悊鏈嶅姟鍣�", + Toast.LENGTH_SHORT).show(); + return; + } + } + + + private static void commonPost(Context context, String url, + LinkedHashMap<String, String> params, HashMap<String, File[]> files, + BasicTextHttpResponseHandler handler) { + commonPost(context, url, params, files, handler, true); + } + + private static void commonPostWithFailture(final Context context, String url, + LinkedHashMap<String, String> params, + final BasicTextHttpResponseHandler handler) { + commonPost(context, url, params, handler); + } + + + private static void commonPost(Context context, String url, + LinkedHashMap<String, String> params, HashMap<String, File[]> files, + BasicTextHttpResponseHandler handler, boolean asyn) { + Request request = null; + SharedPreferences sp = context.getSharedPreferences("Session", MODE_PRIVATE); + String seseionId = sp.getString("sessionid", ""); + String[] tags = url.split("/"); + String tag = tags[tags.length - 2] + "/" + tags[tags.length - 1]; + if (files == null || files.size() == 0) { + request = new Request.Builder().url(url).post(validateParams(params, + context, handler).build()).tag(tag).addHeader("cookie", seseionId).build(); + } else if (files != null && files.size() > 0) { + MultipartBody body = validateParams(params, files, context, handler); + request = new Request.Builder() + .url(url) + .post(body) + .tag(tag) + .addHeader("cookie", seseionId) + .build(); + } + + if (handler == null) { + mOkHttpClient.newCall(request).enqueue(new BasicTextHttpResponseHandler() { + @Override + public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { + + } + }); + } else { + mOkHttpClient.newCall(request).enqueue(handler); + } + } + + + private static void commonPostSoon(Context context, String url, + LinkedHashMap<String, String> params, HashMap<String, File[]> files, + BasicTextHttpResponseHandler handler) { + Request request = null; + SharedPreferences sp = context.getSharedPreferences("Session", MODE_PRIVATE); + String seseionId = sp.getString("sessionid", ""); + String[] tags = url.split("/"); + String tag = tags[tags.length - 2] + "/" + tags[tags.length - 1]; + if (files == null || files.size() == 0) { + request = new Request.Builder().url(url).post(validateParams(params, + context, handler).build()).tag(tag).addHeader("cookie", seseionId).build(); + } else if (files != null && files.size() > 0) { + MultipartBody body = validateParams(params, files, context, handler); + request = new Request.Builder() + .url(url) + .post(body) + .tag(tag) + .addHeader("cookie", seseionId) + .build(); + } + + if (handler == null) { + mOkHttpClientSoon.newCall(request).enqueue(new BasicTextHttpResponseHandler() { + @Override + public void onSuccessPerfect(int statusCode, Header[] headers, JSONObject jsonObject) throws Exception { + + } + }); + } else { + mOkHttpClientSoon.newCall(request).enqueue(handler); + } + } + + + /** + * 鍙紶閫掕〃鍗曟暟鎹� + * + * @param params + * @param context + * @param callback + * @return + */ + public static FormBody.Builder validateParams( + LinkedHashMap<String, String> params, Context context, BasicTextHttpResponseHandler callback) { + params = getRequestParams(context, params); + FormBody.Builder builder = new FormBody.Builder(); + for (LinkedHashMap.Entry<String, String> entry : params.entrySet()) { + if ((!StringUtils.isEmpty(entry.getKey()))) { + builder.add(entry.getKey(), entry.getValue()); + } + } + if (callback != null) + callback.onStart(); + return builder; + } + + /** + * 鏂囦欢鍜岃〃鍗曟暟鎹� + * + * @param params + * @param context + * @param callback + * @return + */ + public static MultipartBody validateParams( + LinkedHashMap<String, String> params, HashMap<String, File[]> files, Context context, BasicTextHttpResponseHandler callback) { + params = getRequestParams(context, params); + + MultipartBody.Builder builder = new MultipartBody.Builder(); + builder.setType(MultipartBody.FORM); + for (LinkedHashMap.Entry<String, String> entry : params.entrySet()) { + builder.addFormDataPart(entry.getKey(), entry.getValue()); + } + for (LinkedHashMap.Entry<String, File[]> entry : files.entrySet()) { + for (int i = 0; i < entry.getValue().length; i++) { + builder.addFormDataPart(entry.getKey(), entry.getValue()[i].getName(), RequestBody.create(MediaType.parse("file/*"), entry.getValue()[i]));//娣诲姞鏂囦欢 + } + } + + callback.onStart(); + return builder.build(); + } + + + public static LinkedHashMap<String, String> getRequestParams(Context context, LinkedHashMap<String, String> params) { + if (params == null) { + params = new LinkedHashMap<>(); + } + //鑾峰彇鍩虹鍙傛暟 + params.putAll(getBaseParams(context)); +//鑾峰彇绛惧悕 + params.put("sign", getSign(params)); + return params; + } + + + /** + * 鑾峰彇绛惧悕淇℃伅 + * + * @param params + * @return + */ + private static String getSign(Map<String, String> params) { + Iterator<String> its = params.keySet().iterator(); + List<String> list = new ArrayList<>(); + while (its.hasNext()) { + String key = its.next(); + Object value = params.get(key); + list.add(key + "=" + value); + } + Collections.sort(list); + String sign = ""; + for (String str : list) { + sign += str + "&"; + } + return MD5Utils.getMD532(sign + "buXiNjie2017!"); + } + + + /** + * 鑾峰彇鍩虹鍙傛暟 + * + * @param context + * @return + */ + private static Map<String, String> getBaseParams(Context context) { + Map<String, String> params = new HashMap<>(); + int version = PackageUtils2.getVersionCode(context); + long time = System.currentTimeMillis(); + String deviceType = DeviceInfoUtil.getSystemModel(context); + params.put("packages", context.getPackageName()); + params.put("Version", version + ""); + params.put("platform", "android"); + params.put("channel", ManifestDataUtil.getAppMetaData(context, "UMENG_CHANNEL")); + params.put("osVersion", MobileUtil.getSystemVersion()); + params.put("deviceType", StringUtils.isEmpty(deviceType) ? "" : deviceType); + params.put("time", time + ""); + params.put("device", DeviceInfoUtil.getDeviceId(context)); + params.put("utdid", DeviceInfoUtil.getUtdid(context)); + return params; + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/BaseJavaInterface.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/BaseJavaInterface.java new file mode 100644 index 0000000..91ebf65 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/BaseJavaInterface.java @@ -0,0 +1,147 @@ +package com.demo.app.utils.browser; + +import android.app.Activity; +import android.content.Intent; +import android.webkit.JavascriptInterface; +import android.widget.Toast; + +import com.alibaba.fastjson.JSON; +import com.demo.app.R; +import com.demo.app.utils.JumpActivityUtil; +import com.demo.app.utils.api.HttpApiUtil; +import com.demo.library_ec.AlibcTradeUtil; +import com.google.gson.Gson; +import com.demo.lib.common.util.common.ClipboardUtil; +import com.demo.lib.common.util.common.PackageUtils2; +import com.demo.lib.common.util.common.StringUtils; +import com.umeng.analytics.MobclickAgent; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; + +import static android.content.Context.MODE_PRIVATE; + +public class BaseJavaInterface { + + Activity mContext; + + public BaseJavaInterface(Activity activity) { + mContext = activity; + } + + @JavascriptInterface + public String getUid() { + return mContext.getSharedPreferences("user", MODE_PRIVATE).getString("LoginUid", ""); + } + + + @JavascriptInterface + public String getVersion() { + return PackageUtils2.getVersionCode(mContext) + ""; + } + + + @JavascriptInterface + public String getAppName() { + return mContext.getString(R.string.app_name) + ""; + } + + @JavascriptInterface + public void toast(String str) { + Toast.makeText(mContext, str, Toast.LENGTH_LONG).show(); + } + + @JavascriptInterface + public void jumpBaiChuan(String tbClientInfo, String url) { + AlibcTradeUtil.openUrl(mContext, url, null, null, null, null); + } + + @JavascriptInterface + public void copyText(String atr) { + ClipboardUtil.copy(mContext, atr); + } + + + @JavascriptInterface + public void jumpPage(String pageClassName, String paramJson) { + Intent intent = null; + JSONObject param = null; + try { + if (StringUtils.isEmpty(paramJson)) { + param = null; + } else { + param = new JSONObject(paramJson); + } + if (StringUtils.isEmpty(pageClassName)) { + return; + } else { + intent = new Intent(mContext, Class.forName(JumpActivityUtil.filterActivityName(pageClassName))); + } + } catch (JSONException e) { + param = null; + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + if (null != param) { + @SuppressWarnings("unchecked") + Iterator<String> its = param.keys(); + while (its.hasNext()) { + String key = its.next(); + String value = param.optString(key); + intent.putExtra(key, value); + } + } + mContext.startActivity(intent); + } + + @JavascriptInterface + public String getRequestBaseParams(String json) { + LinkedHashMap<String, String> params = new LinkedHashMap<>(); + int version = PackageUtils2.getVersionCode(mContext); + if (!StringUtils.isEmpty(json)) { + JSONObject jsonObject = null; + try { + jsonObject = new JSONObject(json); + Iterator<String> iterator = jsonObject.keys(); + while (iterator.hasNext()) { + String key = iterator.next(); + params.put(key, jsonObject.optString(key)); + } + } catch (JSONException e) { + + } + } + LinkedHashMap<String, String> map = HttpApiUtil.getRequestParams(mContext, params); + + Gson gson = new Gson(); + String str = gson.toJson(map); + return str; + } + + @JavascriptInterface + public void umEventCount(String eventId, String paramsJSON) { + Map map = JSON.parseObject(paramsJSON); + } + + @JavascriptInterface + public void umEventCompute(String eventId, String paramsJSON, int du) { + Map map = JSON.parseObject(paramsJSON); + MobclickAgent.onEventValue(mContext, eventId, map, du); + } + + + /** + * 娓呯┖绮樿创鏉� + */ + @JavascriptInterface + public void clearClipboard() { + ClipboardUtil.emptyClipboard(mContext); + } +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/MyJavaInterface.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/MyJavaInterface.java new file mode 100644 index 0000000..c26e6f0 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/browser/MyJavaInterface.java @@ -0,0 +1,238 @@ +package com.demo.app.utils.browser; + +import android.Manifest; +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.media.MediaScannerConnection; +import android.net.Uri; +import android.provider.MediaStore; +import android.webkit.JavascriptInterface; +import android.webkit.WebView; +import android.widget.ImageView; +import android.widget.TextView; +import android.widget.Toast; + +import com.demo.app.utils.JumpActivityUtil; +import com.demo.library_ec.AlibcTradeUtil; +import com.demo.lib.common.util.Environment; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.lib.common.util.security.MD5Utils; + +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; +import java.util.Iterator; + +import androidx.core.app.ActivityCompat; +import androidx.core.content.ContextCompat; + +public class MyJavaInterface extends BaseJavaInterface { + + Activity mContext; + TextView tv_top_bar_middle, tv_top_bar_left2, tv_top_bar_right; + ImageView iv_right; + WebView webview; + private boolean boo = false; + + public MyJavaInterface(Activity activity, WebView webview) { + super(activity); + mContext = activity; + this.webview = webview; + boo = true; + } + + public MyJavaInterface(Activity activity, TextView tv_top_bar_middle + , TextView tv_top_bar_left2, TextView tv_top_bar_right + , ImageView iv_right, WebView webview) { + super(activity); + mContext = activity; + this.tv_top_bar_middle = tv_top_bar_middle; + this.tv_top_bar_left2 = tv_top_bar_left2; + this.tv_top_bar_right = tv_top_bar_right; + this.iv_right = iv_right; + this.webview = webview; + } + + @JavascriptInterface + public void setTitle(final String title) { +// tv_top_bar_middle.setText(title); + if (!boo) + tv_top_bar_middle.post(new Runnable() { + @Override + public void run() { + if (null != title && !StringUtils.isEmpty(title.trim())) + tv_top_bar_middle.setText(title); + } + }); + } + + + @JavascriptInterface + public void jumpPageWithFinishCurrentPage(String pageClassName, String paramJson) { + Intent intent = null; + JSONObject param = null; + try { + if (StringUtils.isEmpty(paramJson)) { + param = null; + } else { + param = new JSONObject(paramJson); + } + if (StringUtils.isEmpty(pageClassName)) { + return; + } else { + intent = new Intent(mContext, Class.forName(JumpActivityUtil.filterActivityName(pageClassName))); + } + } catch (JSONException e) { + param = null; + e.printStackTrace(); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (Exception e) { + e.printStackTrace(); + } + if (null != param) { + @SuppressWarnings("unchecked") + Iterator<String> its = param.keys(); + while (its.hasNext()) { + String key = its.next(); + String value = param.optString(key); + intent.putExtra(key, value); + } + } + mContext.startActivity(intent); + if (!boo) + mContext.finish(); + } + + @JavascriptInterface + public void finishPage() { + if (!boo) + iv_right.post(new Runnable() { + @Override + public void run() { + mContext.finish(); + } + }); + } + + /** + * 娣樺疂鎺堟潈 + * + * @param url + */ + @JavascriptInterface + public void tbAuth(String url) { + if (StringUtils.isEmpty(url)) + return; + AlibcTradeUtil.openAuthLink(mContext, url); + } + + // 鍒ゆ柇鏉冮檺闆嗗悎 鏄惁鎺堟潈 false鎺堟潈 true鏈巿鏉� + public boolean lacksPermissions(String... permissions) { + for (String permission : permissions) { + if (lacksPermission(permission)) { + return true; + } + } + return false; + } + + // 鍒ゆ柇鏄惁缂哄皯鏉冮檺 + private boolean lacksPermission(String permission) { + //鏉冮檺鏈巿鏉� + return ContextCompat.checkSelfPermission(mContext, permission) == PackageManager.PERMISSION_DENIED; + } + + @JavascriptInterface + public void savePicture(String url) { + if (lacksPermissions(Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE)) { //瀛樺偍鏉冮檺鏈紑鍚� + ActivityCompat.requestPermissions(mContext, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, 10023); + } else {//瀛樺偍鏉冮檺宸插紑 + String md5 = MD5Utils.getMD532(url); + String path = Environment.getExternalStorageDirectory() + + "/hanju"; + File file = new File(path + "/" + md5 + ".jpg"); + if (!file.exists()) { + try { + File resultFile = saveImageFromPathToSdCard(mContext, url, path, md5 + ".jpg"); + if (resultFile != null) { + mContext.runOnUiThread(new Runnable() { + @Override + public void run() { + MediaStore.Images.Media.insertImage(mContext.getContentResolver(), BitmapFactory.decodeFile(resultFile.getAbsolutePath()), resultFile.getName(), null); + Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE); + Uri uri = Uri.fromFile(file); + intent.setData(uri); + mContext.sendBroadcast(intent); + Toast.makeText(mContext, "淇濆瓨鍒扮浉鍐屾垚鍔�", Toast.LENGTH_SHORT).show(); + } + }); + } + } catch (Exception e) { + Toast.makeText(mContext, "鍥剧墖淇濆瓨澶辫触", Toast.LENGTH_LONG).show(); + if (file.exists()) + file.delete(); + } + + } else { + Toast.makeText(mContext, "鍥剧墖宸茬粡淇濆瓨!", Toast.LENGTH_LONG).show(); + } + } + } + + + //鍒涘缓鏈湴淇濆瓨璺緞 + public static File createImageFilePath(String path, String imageFileName) throws IOException { + File storageDir = new File(path); + if (!storageDir.exists()) { + storageDir.mkdir(); + } + File image = new File(storageDir, imageFileName); + return image; + } + + //淇濆瓨缃戠粶鍥剧墖淇濆瓨鍒版湰鍦� + public static final File saveImageFromPathToSdCard(Context context, String image, + String path, String imageFileName) { + boolean success = false; + File file = null; + try { + file = createImageFilePath(path, imageFileName); + Bitmap bitmap = null; + URL url = new URL(image); + HttpURLConnection conn = null; + conn = (HttpURLConnection) url.openConnection(); + InputStream is = null; + is = conn.getInputStream(); + bitmap = BitmapFactory.decodeStream(is); + FileOutputStream outStream; + + outStream = new FileOutputStream(file); + bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); + outStream.flush(); + outStream.close(); + success = true; + } catch (Exception e) { + e.printStackTrace(); + } + + if (success) { + MediaScannerConnection.scanFile(context, new String[]{file.getPath()}, null, null); + return file; + } else { + return null; + } + } + +} diff --git a/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/ui/TopBarUtil.java b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/ui/TopBarUtil.java new file mode 100644 index 0000000..25bec32 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/java/com/demo/app/utils/ui/TopBarUtil.java @@ -0,0 +1,46 @@ +package com.demo.app.utils.ui; + +import android.app.Activity; +import android.view.View; +import android.widget.TextView; + +import com.demo.app.R; + + +public class TopBarUtil { + + public static void init(Activity activity, String leftText, String title, String rightText, View.OnClickListener leftClickListener, View.OnClickListener rightClickListener) { + + TextView tv_left = activity.findViewById(R.id.tv_top_bar_left); + TextView tv_title = activity.findViewById(R.id.tv_top_bar_middle); + TextView tv_right = activity.findViewById(R.id.tv_top_bar_right); + if (leftText != null) + tv_left.setText(leftText); + + if (rightText != null) + tv_right.setText(rightText); + + if (title != null) + tv_title.setText(title); + + if (leftClickListener != null) { + tv_left.setOnClickListener(leftClickListener); + } + + if (rightClickListener != null) { + tv_right.setOnClickListener(rightClickListener); + } + + } + + + public static void init(Activity activity, String title, View.OnClickListener leftClickListener) { + init(activity, null, title, null, leftClickListener, null); + } + + + public static void init(Activity activity, String title,String rightText, View.OnClickListener leftClickListener,View.OnClickListener rightClickListener) { + init(activity, null, title, rightText, leftClickListener, rightClickListener); + } + +} diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_auth_notify_top.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_auth_notify_top.png new file mode 100644 index 0000000..fb1285f --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_auth_notify_top.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_back.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_back.png new file mode 100644 index 0000000..172b69f --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_back.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_checked.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_checked.png new file mode 100644 index 0000000..bfce86f --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_checked.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_launcher.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_launcher.png new file mode 100644 index 0000000..f95ee3a --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_launcher.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_person_info_array_right.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_person_info_array_right.png new file mode 100644 index 0000000..2b4763e --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_person_info_array_right.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_portrait_default.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_portrait_default.png new file mode 100644 index 0000000..d5d89a9 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_portrait_default.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_setting_array_right.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_setting_array_right.png new file mode 100644 index 0000000..058ad69 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_setting_array_right.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_unchecked.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_unchecked.png new file mode 100644 index 0000000..e889dc5 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/ic_unchecked.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_phone.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_phone.png new file mode 100644 index 0000000..20dbebe --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_phone.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_storage.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_storage.png new file mode 100644 index 0000000..8541cb5 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_auth_notify_storage.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home.png new file mode 100644 index 0000000..e8c0dc3 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home_highlight.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home_highlight.png new file mode 100644 index 0000000..8b6a056 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_home_highlight.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine.png new file mode 100644 index 0000000..8bda939 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine_highlight.png b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine_highlight.png new file mode 100644 index 0000000..d2d68b4 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable-xhdpi/icon_nav_mine_highlight.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/drawable/selector_checked.xml b/src/main/resources/code/android/app/src/main/res/drawable/selector_checked.xml new file mode 100644 index 0000000..675bec8 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/selector_checked.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:drawable="@drawable/ic_checked" android:state_checked="true"></item> + <item android:drawable="@drawable/ic_unchecked" android:state_checked="false"></item> + +</selector> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/selector_nav_home.xml b/src/main/resources/code/android/app/src/main/res/drawable/selector_nav_home.xml new file mode 100644 index 0000000..57f4668 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/selector_nav_home.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:drawable="@drawable/icon_nav_home_highlight" android:state_checked="true"></item> + <item android:drawable="@drawable/icon_nav_home" android:state_checked="false"></item> + +</selector> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/selector_nav_mine.xml b/src/main/resources/code/android/app/src/main/res/drawable/selector_nav_mine.xml new file mode 100644 index 0000000..2a20dac --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/selector_nav_mine.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:drawable="@drawable/icon_nav_mine_highlight" android:state_checked="true"></item> + <item android:drawable="@drawable/icon_nav_mine" android:state_checked="false"></item> + +</selector> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_negative.xml b/src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_negative.xml new file mode 100644 index 0000000..79b5053 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_negative.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + + <corners android:radius="40dp" /> + <solid android:color="#A9A9A9" /> + +</shape> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_positive.xml b/src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_positive.xml new file mode 100644 index 0000000..d03c680 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/shape_dialog_user_protocol_positive.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + + <corners android:radius="40dp" /> + <solid android:color="@color/theme" /> +</shape> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/shape_theme_corner_radius_8.xml b/src/main/resources/code/android/app/src/main/res/drawable/shape_theme_corner_radius_8.xml new file mode 100644 index 0000000..0731efb --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/shape_theme_corner_radius_8.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners android:radius="8dp" /> + + <solid android:color="@color/theme" /> + +</shape> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/shape_user_protocol_dialog_bg.xml b/src/main/resources/code/android/app/src/main/res/drawable/shape_user_protocol_dialog_bg.xml new file mode 100644 index 0000000..96a6935 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/shape_user_protocol_dialog_bg.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + + <corners android:radius="15dp" /> + <solid android:color="@color/user_protocol_dialog_bg_color" /> +</shape> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/drawable/shape_white_corner_radius_3.xml b/src/main/resources/code/android/app/src/main/res/drawable/shape_white_corner_radius_3.xml new file mode 100644 index 0000000..9cedcc5 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/drawable/shape_white_corner_radius_3.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<shape xmlns:android="http://schemas.android.com/apk/res/android"> + <corners android:radius="3dp" /> + + <solid android:color="@color/white" /> + +</shape> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/activity_browser.xml b/src/main/resources/code/android/app/src/main/res/layout/activity_browser.xml new file mode 100644 index 0000000..bd44933 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/activity_browser.xml @@ -0,0 +1,23 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + <include layout="@layout/navigation_top_bar" /> + + <ProgressBar + android:id="@+id/myProgressBar" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/webview_progress_color" /> + + + <WebView + android:id="@+id/webview" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/activity_main.xml b/src/main/resources/code/android/app/src/main/res/layout/activity_main.xml new file mode 100644 index 0000000..de23a56 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="#FFFAFAFA" + android:orientation="vertical" + tools:context=".ui.MainActivity"> + + <FrameLayout + android:id="@+id/fl_container" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> + + + </FrameLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1dp"></View> + + <include layout="@layout/navigation_bottom_bar"></include> + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/activity_person_info.xml b/src/main/resources/code/android/app/src/main/res/layout/activity_person_info.xml new file mode 100644 index 0000000..74b1b2b --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/activity_person_info.xml @@ -0,0 +1,209 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + <View + android:id="@+id/v_status_bar" + android:layout_width="match_parent" + android:layout_height="15dp" /> + + <include layout="@layout/navigation_top_bar"></include> + + <LinearLayout + android:id="@+id/ll_portrait_select" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_height="80dp" + android:layout_marginTop="10dp" + android:background="@color/white" + android:orientation="horizontal"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="澶村儚" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <ImageView + android:id="@+id/iv_portrai_select" + android:layout_width="50dp" + android:layout_height="50dp" + android:layout_gravity="center_vertical" + android:layout_marginRight="22.5dp" + android:scaleType="centerCrop" + android:src="@drawable/ic_portrait_default" /> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:layout_marginRight="20dp" + android:src="@drawable/ic_person_info_array_right" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/ll_nickName" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="1dp" + android:background="@color/white"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="鏄电О" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + android:id="@+id/tv_nickName" + style="@style/personInfoContentStyle" + android:text="缂栬緫鏄电О" /> + </LinearLayout> + + + <LinearLayout + android:id="@+id/ll_sex" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_marginTop="1dp"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="鎬у埆" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + android:id="@+id/tv_sex" + style="@style/personInfoContentStyle" + android:text="鐢�" /> + </LinearLayout> + + <LinearLayout + android:id="@+id/ll_birthday" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_marginTop="1dp"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="鐢熸棩" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + android:id="@+id/tv_birthday" + style="@style/personInfoContentStyle" + android:text="鐐瑰嚮璁剧疆鐢熸棩" /> + </LinearLayout> + + + <LinearLayout + android:id="@+id/ll_id" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_marginTop="1dp"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="ID" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + android:id="@+id/tv_id" + style="@style/personInfoContentStyle" + android:drawableRight="@null" + android:text="" /> + </LinearLayout> + + + <LinearLayout + android:id="@+id/ll_email" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_marginTop="1dp"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="閭" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + android:id="@+id/tv_email" + style="@style/personInfoContentStyle" + android:drawableRight="@null" + android:text="" /> + </LinearLayout> + + + <LinearLayout + android:id="@+id/ll_autograph" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_marginTop="10dp"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="涓�х鍚�" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + android:id="@+id/tv_autograph" + style="@style/personInfoContentStyle" + android:ellipsize="end" + android:maxWidth="200dp" + android:maxLines="2" + android:text="鏈~鍐�" /> + </LinearLayout> + + + <LinearLayout + android:id="@+id/ll_advice" + style="@style/personInfoItemStyle" + android:layout_width="match_parent" + android:layout_marginTop="1dp"> + + <TextView + style="@style/personInfoTitleStyle" + android:text="鎰忚鍙嶉" /> + + <View + android:layout_width="0dp" + android:layout_height="1px" + android:layout_weight="1" /> + + <TextView + style="@style/personInfoContentStyle" + android:text="" /> + </LinearLayout> + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/activity_settings.xml b/src/main/resources/code/android/app/src/main/res/layout/activity_settings.xml new file mode 100644 index 0000000..852a419 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/activity_settings.xml @@ -0,0 +1,240 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + <View + android:id="@+id/view_status_bar" + android:layout_width="match_parent" + android:layout_height="10dp"> + + </View> + + + <include layout="@layout/navigation_top_bar"></include> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="match_parent"> + + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="25dp" + android:background="#FFF3F3F3" + android:orientation="vertical"> + + <RelativeLayout + android:id="@+id/rl_person_info" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + + android:text="涓汉淇℃伅" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" /> + </RelativeLayout> + + + <RelativeLayout + android:id="@+id/rl_download" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:text="瀛樺偍涓嬭浇" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" /> + </RelativeLayout> + + + <RelativeLayout style="@style/settingsItemStyle"> + + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="闈濿IFI绂佹涓嬭浇" /> + + + <CheckBox + android:id="@+id/chb_wifi_download" + android:layout_width="51dp" + android:layout_height="31dp" + android:layout_alignParentRight="true" + android:background="@drawable/selector_checked" + android:button="@null" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/rl_clear_cache" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:text="娓呯悊缂撳瓨" /> + + <TextView + android:id="@+id/tv_cache_size" + style="@style/settingsItemContentStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" + android:text="0M" /> + </RelativeLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" /> + + + <RelativeLayout + android:id="@+id/rl_help" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + + android:text="甯姪涓績" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" /> + </RelativeLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" /> + + <RelativeLayout + android:id="@+id/rl_about_us" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + + android:text="鍏充簬鎴戜滑" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" /> + </RelativeLayout> + + + <RelativeLayout + android:id="@+id/rl_user_agreement" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:gravity="center_vertical" + android:text="鐢ㄦ埛浣跨敤鍗忚" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" /> + </RelativeLayout> + + <RelativeLayout + android:id="@+id/rl_privacy_policy" + style="@style/settingsItemStyle"> + + <TextView + style="@style/settingsItemTitleStyle" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + + android:gravity="center_vertical" + android:text="闅愮鏀跨瓥" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + + android:drawableEnd="@drawable/ic_setting_array_right" + android:drawableRight="@drawable/ic_setting_array_right" + android:gravity="center_vertical" /> + </RelativeLayout> + + <View + android:layout_width="match_parent" + android:layout_height="50dp" + android:background="@color/white"></View> + + + </LinearLayout> + </ScrollView> + + + <Button + android:id="@+id/setting_btn_exit" + android:layout_width="match_parent" + android:layout_height="47dp" + android:layout_gravity="bottom" + android:background="#FFE5F5FF" + android:gravity="center" + android:text="閫�鍑虹櫥褰�" + android:textColor="@color/theme" + android:textSize="15sp" /> + + </FrameLayout> +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/activity_simple_browser.xml b/src/main/resources/code/android/app/src/main/res/layout/activity_simple_browser.xml new file mode 100644 index 0000000..1647d00 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/activity_simple_browser.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + + <include layout="@layout/navigation_top_bar" /> + + <ProgressBar + android:id="@+id/myProgressBar" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/webview_progress_color" /> + + + <WebView + android:id="@+id/webview" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/activity_splash.xml b/src/main/resources/code/android/app/src/main/res/layout/activity_splash.xml new file mode 100644 index 0000000..9f2c033 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/activity_splash.xml @@ -0,0 +1,64 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/splash_bg_color" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center"> + + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="1"></View> + + <com.demo.lib.common.widget.RatioLayout + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_weight="2" + app:ratio="1.1738"> + + <ImageView + android:layout_width="match_parent" + android:layout_height="match_parent"></ImageView> + + </com.demo.lib.common.widget.RatioLayout> + + <View + android:layout_width="0dp" + android:layout_height="1dp" + android:layout_weight="1"></View> + + + </LinearLayout> + + + <FrameLayout + android:id="@+id/fl_splash_ad" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center"> + + + </FrameLayout> + + </FrameLayout> + + + </LinearLayout> +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/dialog_auth_notify.xml b/src/main/resources/code/android/app/src/main/res/layout/dialog_auth_notify.xml new file mode 100644 index 0000000..57ab988 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/dialog_auth_notify.xml @@ -0,0 +1,120 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/shape_user_protocol_dialog_bg" + android:orientation="vertical"> + + + <ImageView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="17dp" + android:layout_marginBottom="20dp" + android:src="@drawable/ic_auth_notify_top"></ImageView> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_horizontal" + android:orientation="vertical" + android:padding="20dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="7dp" + android:src="@drawable/icon_auth_notify_phone"> + + </ImageView> + + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + + android:orientation="vertical"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="鎵嬫満" + android:textColor="@color/user_protocol_dialog_title_color" + android:textSize="16sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:text="鏍¢獙鎵嬫満璇嗗埆鐮侊紝闃叉璐﹀彿琚洍" + android:textColor="@color/user_protocol_dialog_subtitle_color" + android:textSize="11sp" /> + + </LinearLayout> + + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:gravity="center_vertical"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginRight="7dp" + android:src="@drawable/icon_auth_notify_storage"></ImageView> + + + <LinearLayout + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="瀛樺偍" + android:textColor="@color/user_protocol_dialog_title_color" + android:textSize="16sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="10dp" + android:text="瀛樺偍鍥剧墖鍜岃棰戯紝闄嶄綆缃戠粶娑堣��" + android:textColor="@color/user_protocol_dialog_subtitle_color" + android:textSize="11sp" /> + + </LinearLayout> + + + </LinearLayout> + + <TextView + android:id="@+id/tv_positive" + android:layout_width="match_parent" + android:layout_height="38dp" + android:layout_gravity="center" + android:layout_marginTop="40dp" + android:layout_marginBottom="10dp" + android:layout_weight="1" + android:background="@drawable/shape_theme_corner_radius_8" + android:gravity="center" + android:text="绔嬪嵆寮�鍚�" + android:textColor="@color/white" + android:textSize="15sp" /> + + </LinearLayout> + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/dialog_exit.xml b/src/main/resources/code/android/app/src/main/res/layout/dialog_exit.xml new file mode 100644 index 0000000..bae0943 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/dialog_exit.xml @@ -0,0 +1,68 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@drawable/shape_white_corner_radius_3" + android:gravity="center_horizontal" + android:orientation="vertical" + android:padding="20dp"> + + <TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="4dp" + android:gravity="center" + android:text="娓╅Θ鎻愮ず" + android:textColor="@color/theme" + android:textSize="18sp" + android:textStyle="bold"></TextView> + + + <TextView + android:layout_width="match_parent" + android:layout_height="118dp" + android:gravity="center" + android:text="浣犳槸鐪熺殑瑕佺寮�鍚楋紵" + android:textColor="@color/exit_dialog_content_text_color" + android:textSize="17sp" + + ></TextView> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <TextView + android:id="@+id/tv_positive" + android:layout_width="0dp" + android:layout_height="35dp" + android:layout_weight="1" + android:background="@color/theme" + android:gravity="center" + android:text="鍐嶇湅鐪�" + android:textColor="@color/white" + android:textSize="15sp"></TextView> + + <View + android:layout_width="18dp" + android:layout_height="1dp"></View> + + + <TextView + android:id="@+id/tv_negative" + android:layout_width="0dp" + android:layout_height="35dp" + android:layout_weight="1" + android:background="@color/exit_dialog_nagative_bg_color" + android:gravity="center" + android:text="鐙犲績绂诲紑" + android:textColor="@color/white" + android:textSize="15sp"></TextView> + + + </LinearLayout> + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/dialog_user_protocol.xml b/src/main/resources/code/android/app/src/main/res/layout/dialog_user_protocol.xml new file mode 100644 index 0000000..44b1c19 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/dialog_user_protocol.xml @@ -0,0 +1,73 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@drawable/shape_user_protocol_dialog_bg" + android:orientation="vertical"> + + <TextView + android:id="@+id/tv_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_marginTop="10dp" + android:gravity="center" + android:padding="8dp" + android:text="娓╅Θ鎻愮ず" + android:textColor="@color/black" + android:textSize="20sp" /> + + <ScrollView + android:layout_width="match_parent" + android:layout_height="260dp" + android:layout_marginLeft="10dp" + android:layout_marginRight="10dp"> + + <TextView + android:id="@+id/tv_content" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:autoLink="all" + android:textColor="#FF333333" + android:background="@null" + android:lineSpacingExtra="8sp" + android:textSize="14sp"></TextView> + </ScrollView> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:layout_margin="20dp"> + + <TextView + android:id="@+id/tv_negative" + android:layout_width="0dp" + android:layout_height="40dp" + android:layout_gravity="center" + android:layout_weight="1" + android:background="@drawable/shape_dialog_user_protocol_negative" + android:gravity="center" + android:text="涓嶅悓鎰�" + android:textColor="@color/white" + android:textSize="16sp" /> + + <View + android:layout_width="10dp" + android:layout_height="1dp"></View> + + <TextView + android:id="@+id/tv_positive" + android:layout_width="0dp" + android:layout_height="40dp" + android:layout_gravity="center" + android:layout_weight="1" + android:background="@drawable/shape_dialog_user_protocol_positive" + android:gravity="center" + android:text="鍚屾剰" + android:textColor="@color/white" + android:textSize="16sp" /> + + </LinearLayout> +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/fragment_byrecyclerview.xml b/src/main/resources/code/android/app/src/main/res/layout/fragment_byrecyclerview.xml new file mode 100644 index 0000000..02a9c1b --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/fragment_byrecyclerview.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + + + <me.jingbin.library.ByRecyclerView + android:id="@+id/recyclerView" + android:layout_width="match_parent" + android:layout_height="match_parent"> + + </me.jingbin.library.ByRecyclerView> + + + + +</FrameLayout> diff --git a/src/main/resources/code/android/app/src/main/res/layout/fragment_home.xml b/src/main/resources/code/android/app/src/main/res/layout/fragment_home.xml new file mode 100644 index 0000000..3d549aa --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/fragment_home.xml @@ -0,0 +1,16 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <View + android:id="@+id/view_status_bar" + android:layout_width="match_parent" + android:layout_height="20dp" + android:background="@color/white"></View> + + + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml b/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml new file mode 100644 index 0000000..322da92 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/fragment_mine.xml @@ -0,0 +1,36 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + + <LinearLayout + android:id="@+id/ll_user_info" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center_vertical" + android:paddingLeft="38dp" + android:paddingRight="38dp"> + + <ImageView + android:id="@+id/iv_portrait" + android:layout_width="70dp" + android:layout_height="70dp" + android:src="@drawable/ic_portrait_default"></ImageView> + + <TextView + android:id="@+id/tv_nick_name" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="24dp" + android:ellipsize="end" + android:text="绔嬪嵆鐧诲綍" + android:textColor="@color/theme" + android:textSize="19sp"></TextView> + + </LinearLayout> + + +</FrameLayout> diff --git a/src/main/resources/code/android/app/src/main/res/layout/navigation_bottom_bar.xml b/src/main/resources/code/android/app/src/main/res/layout/navigation_bottom_bar.xml new file mode 100644 index 0000000..9287ff4 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/navigation_bottom_bar.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="50dp" + android:background="#FFFFFF" + android:orientation="vertical"> + + <RadioGroup + android:id="@+id/rg_nav" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:gravity="center_vertical" + + android:orientation="horizontal"> + + <RadioButton + android:id="@+id/rb_nav_recommend" + style="@style/homeNavStyle" + android:drawableTop="@drawable/selector_nav_home" /> + + + <RadioButton + android:id="@+id/rb_nav_mine" + style="@style/homeNavStyle" + android:drawableTop="@drawable/selector_nav_mine" /> + </RadioGroup> + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/layout/navigation_top_bar.xml b/src/main/resources/code/android/app/src/main/res/layout/navigation_top_bar.xml new file mode 100644 index 0000000..31671f6 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/layout/navigation_top_bar.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="@color/navigation_bg_color" + android:orientation="vertical"> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="48dp" + android:gravity="center_vertical" + android:orientation="horizontal"> + + <TextView + android:id="@+id/tv_top_bar_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentStart="true" + android:layout_alignParentLeft="true" + android:layout_centerVertical="true" + android:layout_marginLeft="5dp" + android:drawableLeft="@drawable/ic_back" + android:drawablePadding="3dp" + android:gravity="center" + android:padding="8dp" + android:textColor="@color/navigation_text_color" /> + + <TextView + android:id="@+id/tv_top_bar_left2" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerVertical="true" + android:layout_toRightOf="@id/tv_top_bar_left" + android:gravity="center" + android:paddingLeft="3dp" + android:paddingTop="8dp" + android:paddingRight="8dp" + android:paddingBottom="8dp" + android:textColor="@color/navigation_text_color" + android:visibility="gone" /> + + <TextView + android:id="@+id/tv_top_bar_middle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerInParent="true" + android:ellipsize="end" + android:maxLength="6" + android:singleLine="true" + android:textColor="@color/navigation_text_color" + android:textSize="@dimen/title_text_size" /> + + <TextView + android:id="@+id/tv_top_bar_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:layout_centerVertical="true" + android:layout_marginRight="5dp" + android:padding="8dp" + android:textColor="@color/navigation_text_color" /> + </RelativeLayout> + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/src/main/resources/code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 0000000..f95ee3a --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png Binary files differ diff --git a/src/main/resources/code/android/app/src/main/res/values-night/themes.xml b/src/main/resources/code/android/app/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..7046965 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_200</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/black</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_200</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/values/colors.xml b/src/main/resources/code/android/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..65a7e40 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/values/colors.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <color name="theme">#FFBB86FC</color> + + <color name="purple_200">#FFBB86FC</color> + <color name="purple_500">#FF6200EE</color> + <color name="purple_700">#FF3700B3</color> + <color name="teal_200">#FF03DAC5</color> + <color name="teal_700">#FF018786</color> + <color name="black">#FF000000</color> + <color name="white">#FFFFFFFF</color> + + <color name="loading_color">#FF03DAC5</color> + <color name="transparent">#00000000</color> + + <color name="splash_bg_color"> + #FF03DAC5 + </color> + + <color name="user_protocol_dialog_bg_color">#FFFFFF</color> + + <color name="user_protocol_dialog_title_color">#ff333333</color> + + <color name="user_protocol_dialog_subtitle_color">#ff999999</color> + + + <color name="navigation_text_color">#000000</color> + <color name="navigation_bg_color">#FFFFFF</color> + + <color name="webview_progress_color">#FF03DAC5</color> + + <color name="refresh_color">#FF03DAC5</color> + + + <color name="exit_dialog_content_text_color">#FF333333</color> + + <color name="exit_dialog_nagative_bg_color">#FFCCCCCC</color> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/values/dimens.xml b/src/main/resources/code/android/app/src/main/res/values/dimens.xml new file mode 100644 index 0000000..5b98457 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/values/dimens.xml @@ -0,0 +1,3 @@ +<resources> + <dimen name="title_text_size">15sp</dimen> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/values/strings.xml b/src/main/resources/code/android/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..44d7e9a --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/values/strings.xml @@ -0,0 +1,16 @@ +<resources> + <string name="app_name">Android</string> + <string name="umeng_key">123</string> + + <string name="ad_gdt_appid"></string> + <string name="ad_csj_appid"></string> + + + <!--寮�灞忓箍鍛� --> + <string name="ad_csj_pid_splash"></string> + + <!--寮�灞忓箍鍛� --> + <string name="ad_gdt_pid_splash"></string> + + <string name="webview_java_interface_name">yestv</string> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/values/styles.xml b/src/main/resources/code/android/app/src/main/res/values/styles.xml new file mode 100644 index 0000000..fc6c9b6 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/values/styles.xml @@ -0,0 +1,83 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + + <style name="homeNavStyle"> + <item name="android:layout_width">0dp</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_weight">1</item> + <item name="android:button">@null</item> + <item name="android:padding">0dp</item> + <item name="android:textSize">0sp</item> + <item name="android:background">@color/transparent</item> + <item name="android:textAppearance">?android:attr/textAppearanceSmall</item> + <item name="android:drawablePadding">0dp</item> + <item name="android:minHeight">0dp</item> + <item name="android:minWidth">0dp</item> + </style> + + + <!-- 璁剧疆鐣岄潰鐨処TEM鏍峰紡 --> + <style name="settingsItemStyle"> + <item name="android:layout_height">70dp</item> + <item name="android:layout_width">match_parent</item> + <item name="android:background">@color/white</item> + <item name="android:gravity">center_vertical</item> + <item name="android:paddingRight">16dp</item> + <item name="android:layout_marginBottom">1dp</item> + </style> + + + <style name="settingsItemTitleStyle"> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_width">wrap_content</item> + <item name="android:textSize">17sp</item> + <item name="android:textColor">@color/theme</item> + </style> + + <style name="settingsItemSubTitleStyle"> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_width">wrap_content</item> + <item name="android:textSize">11sp</item> + <item name="android:textColor">#FFDCDEEA</item> + </style> + + + <style name="settingsItemContentStyle"> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_width">wrap_content</item> + <item name="android:textSize">15sp</item> + <item name="android:textColor">#FFDCDEEA</item> + <item name="android:drawablePadding">7dp</item> + </style> + + + <style name="personInfoTitleStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_gravity">center_vertical</item> + <item name="android:layout_marginLeft">20dp</item> + <item name="android:textSize">15sp</item> + <item name="android:textColor">#555555</item> + </style> + + + <style name="personInfoContentStyle"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_gravity">center_vertical</item> + <item name="android:drawablePadding">21.5dp</item> + <item name="android:textSize">15sp</item> + <item name="android:textColor">#555555</item> + <item name="android:drawableRight">@drawable/ic_person_info_array_right</item> + <item name="android:layout_marginRight">20.5dp</item> + </style> + + + <style name="personInfoItemStyle"> + <item name="android:minHeight">50dp</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:background">@color/white</item> + </style> + +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/main/res/values/themes.xml b/src/main/resources/code/android/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..04ad3b0 --- /dev/null +++ b/src/main/resources/code/android/app/src/main/res/values/themes.xml @@ -0,0 +1,22 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.NoActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_500</item> + <item name="colorPrimaryVariant">@color/white</item> + <item name="colorOnPrimary">@color/black</item> + + + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_700</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + + <item name="colorPrimaryDark">@color/black</item> + <!--鐘舵�佹爮閫忔槑 --> +<!-- <item name="android:windowTranslucentStatus">true</item>--> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/app/src/test/java/com/demo/app/ExampleUnitTest.java b/src/main/resources/code/android/app/src/test/java/com/demo/app/ExampleUnitTest.java new file mode 100644 index 0000000..ca46020 --- /dev/null +++ b/src/main/resources/code/android/app/src/test/java/com/demo/app/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.demo.app; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/build.gradle b/src/main/resources/code/android/build.gradle new file mode 100644 index 0000000..dafbeab --- /dev/null +++ b/src/main/resources/code/android/build.gradle @@ -0,0 +1,40 @@ +// Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + maven { + url "https://maven.aliyun.com/repository/public" + } + + maven { + url "https://maven.aliyun.com/repository/google" + } + mavenCentral() + + //绌垮北鐢� + maven { + url 'https://artifact.bytedance.com/repository/pangle' + } + + //鐏北寮曟搸maven浠撳簱鍦板潃 + maven { url 'https://artifact.bytedance.com/repository/Volcengine/' } + + //闃块噷鐧惧窛 + maven { + url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" + } + + jcenter() + + maven { url 'https://jitpack.io' } + + } + dependencies { + classpath 'com.android.tools.build:gradle:4.1.3' + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } +} + +task clean(type: Delete) { + delete rootProject.buildDir +} \ No newline at end of file diff --git a/src/main/resources/code/android/gradle.properties b/src/main/resources/code/android/gradle.properties new file mode 100644 index 0000000..52f5917 --- /dev/null +++ b/src/main/resources/code/android/gradle.properties @@ -0,0 +1,19 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=true \ No newline at end of file diff --git a/src/main/resources/code/android/gradle/wrapper/gradle-wrapper.jar b/src/main/resources/code/android/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000..e708b1c --- /dev/null +++ b/src/main/resources/code/android/gradle/wrapper/gradle-wrapper.jar Binary files differ diff --git a/src/main/resources/code/android/gradle/wrapper/gradle-wrapper.properties b/src/main/resources/code/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..9d72739 --- /dev/null +++ b/src/main/resources/code/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Mon Dec 27 18:13:50 CST 2021 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-6.9-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/src/main/resources/code/android/gradlew b/src/main/resources/code/android/gradlew new file mode 100644 index 0000000..4f906e0 --- /dev/null +++ b/src/main/resources/code/android/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/src/main/resources/code/android/gradlew.bat b/src/main/resources/code/android/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/src/main/resources/code/android/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/src/main/resources/code/android/library-ad/.gitignore b/src/main/resources/code/android/library-ad/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/main/resources/code/android/library-ad/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/build.gradle b/src/main/resources/code/android/library-ad/build.gradle new file mode 100644 index 0000000..67365a9 --- /dev/null +++ b/src/main/resources/code/android/library-ad/build.gradle @@ -0,0 +1,42 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 29 + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation project(path: ':library-common') + + //绌垮北鐢� + api 'com.pangle.cn:ads-sdk-pro:4.2.0.3' + //骞跨偣閫� + api 'com.qq.e.union:union:4.440.1310' +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/proguard-rules.pro b/src/main/resources/code/android/library-ad/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/main/resources/code/android/library-ad/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/androidTest/java/com/demo/library_ad/ExampleInstrumentedTest.java b/src/main/resources/code/android/library-ad/src/androidTest/java/com/demo/library_ad/ExampleInstrumentedTest.java new file mode 100644 index 0000000..6344f84 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/androidTest/java/com/demo/library_ad/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.demo.library_ad; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.demo.library_ad", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml b/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml new file mode 100644 index 0000000..0b4df6d --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/AndroidManifest.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.demo.library_ad"> + + <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> + <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission> + <uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> + <uses-permission android:name="android.permission.READ_SETTINGS"></uses-permission> + + <application + android:allowBackup="true" + android:label="@string/app_name" + android:supportsRtl="true" + tools:replace="android:allowBackup,android:theme" + android:theme="@style/Theme.Android" /> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/AdUtil.java b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/AdUtil.java new file mode 100644 index 0000000..2a615bb --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/AdUtil.java @@ -0,0 +1,84 @@ +package com.demo.library_ad; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.bytedance.sdk.openadsdk.TTAdSdk; +import com.demo.lib.common.util.common.StringUtils; +import com.qq.e.comm.managers.GDTAdSdk; + +import org.json.JSONException; +import org.json.JSONObject; + +public class AdUtil { + + public enum AD_TYPE { + gdt("骞跨偣閫�"), csj("绌垮北鐢�"); + private String name; + + AD_TYPE(String name) { + this.name = name; + } + } + + + /** + * 鍒濆鍖栧箍鐐归�氬箍鍛� + * + * @param context + * @param appId + */ + public static void initGDTAd(Context context, String appId) { + GDTAdSdk.init(context, appId); + } + + /** + * 绌垮北鐢插箍鍛婂垵濮嬪寲 + * + * @param context + * @param appId + * @param downLoadNotify + * @param initCallback + */ + public static void initCSJAd(Context context, String appId, boolean downLoadNotify, TTAdSdk.InitCallback initCallback) { + TTAdManagerHolder.init(context, appId, downLoadNotify, initCallback); + } + + + /** + * 淇濆瓨骞垮憡閰嶇疆 + * + * @param context + * @param json + */ + public static void saveAdConfig(Context context, JSONObject json) { + SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = share.edit(); + editor.putString("config", json.toString()); + editor.commit(); + } + + /** + * 鑾峰彇骞垮憡绫诲瀷 + * + * @param context + * @param positionName + * @return + */ + public static AD_TYPE getAdType(Context context, String positionName) { + SharedPreferences share = context.getSharedPreferences("adConfig", Context.MODE_PRIVATE); + String config = share.getString("config", ""); + if (!StringUtils.isEmpty(config)) {//涓囦竴娌¤缃捣灏辩敤骞跨偣閫� + try { + JSONObject object = new JSONObject(config); + return AD_TYPE.valueOf(object.optJSONObject(positionName).optString("type")); + } catch (JSONException e) { + e.printStackTrace(); + } catch (Exception e1) { + return null; + } + } + return null; + } + +} diff --git a/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/FullVideoAdManager.java b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/FullVideoAdManager.java new file mode 100644 index 0000000..66f6233 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/FullVideoAdManager.java @@ -0,0 +1,191 @@ +package com.demo.library_ad; + +import android.app.Activity; +import android.util.Log; + +import com.bytedance.sdk.openadsdk.AdSlot; +import com.bytedance.sdk.openadsdk.TTAdConstant; +import com.bytedance.sdk.openadsdk.TTAdManager; +import com.bytedance.sdk.openadsdk.TTAdNative; +import com.bytedance.sdk.openadsdk.TTFullScreenVideoAd; +import com.demo.lib.common.util.common.DimenUtils; +import com.qq.e.ads.cfg.VideoOption; +import com.qq.e.ads.interstitial2.UnifiedInterstitialAD; +import com.qq.e.ads.interstitial2.UnifiedInterstitialADListener; +import com.qq.e.comm.util.AdError; + +public class FullVideoAdManager { + + private TTAdNative mTTAdNative = null; + + private TTFullScreenVideoAd mttFullVideoAd; + + private static FullVideoAdManager fullVideoAdManager; + + public static FullVideoAdManager getInstance() { + if (fullVideoAdManager == null) + fullVideoAdManager = new FullVideoAdManager(); + return fullVideoAdManager; + } + + public void loadAd(final Activity context, AdUtil.AD_TYPE adType, String pid, final IFullVideoAdListener adListener) { + + if (adType == AdUtil.AD_TYPE.csj) { + showCSJ(context, pid, adListener); + } else { + showGdt(context, pid, adListener); + } + + + } + + private void showCSJ(Activity activity, String pid, final IFullVideoAdListener adListener) { + int w = DimenUtils.getScreenWidth(activity); + int h = DimenUtils.getScreenHeight(activity); + + AdSlot adSlot = new AdSlot.Builder() + .setCodeId(pid) + .setSupportDeepLink(true) + .setExpressViewAcceptedSize(w, h) + .setOrientation(TTAdConstant.VERTICAL) + .build(); + TTAdManager ttAdManager = null; + try { + ttAdManager = TTAdManagerHolder.get(); + } catch (Exception e) { + e.printStackTrace(); + } + + if (ttAdManager == null) { + return; + } + + + mTTAdNative = ttAdManager.createAdNative(activity); + //鍔犺浇鍏ㄥ睆瑙嗛 + mTTAdNative.loadFullScreenVideoAd(adSlot, new TTAdNative.FullScreenVideoAdListener() { + @Override + public void onError(int code, String message) { + adListener.onFail(message); + } + + @Override + public void onFullScreenVideoAdLoad(TTFullScreenVideoAd ad) { + mttFullVideoAd = ad; + mttFullVideoAd.setFullScreenVideoAdInteractionListener(new TTFullScreenVideoAd.FullScreenVideoAdInteractionListener() { + + @Override + public void onAdShow() { + } + + @Override + public void onAdVideoBarClick() { + } + + @Override + public void onAdClose() { + adListener.onFinish(); + } + + @Override + public void onVideoComplete() { + } + + @Override + public void onSkippedVideo() { + + } + + }); + + } + + @Override + public void onFullScreenVideoCached() { + } + + @Override + public void onFullScreenVideoCached(TTFullScreenVideoAd ttFullScreenVideoAd) { + ttFullScreenVideoAd.showFullScreenVideoAd(activity); + } + }); + + + } + + + private UnifiedInterstitialAD iad; + + + private void showGdt(Activity activity, String pid, IFullVideoAdListener adListener) { + + iad = new UnifiedInterstitialAD(activity, pid, new UnifiedInterstitialADListener() { + + @Override + public void onADReceive() { + iad.showFullScreenAD(activity); + } + + @Override + public void onVideoCached() { + + } + + @Override + public void onNoAD(AdError adError) { + + Log.i("gdt", adError.toString()); + adListener.onFail("no ad"); + } + + @Override + public void onADOpened() { + + } + + @Override + public void onADExposure() { + + } + + @Override + public void onADClicked() { + + } + + @Override + public void onADLeftApplication() { + + } + + @Override + public void onADClosed() { + adListener.onFinish(); + } + + @Override + public void onRenderSuccess() { + + } + + @Override + public void onRenderFail() { + + } + }); + VideoOption.Builder builder = new VideoOption.Builder(); + VideoOption + option = builder.setAutoPlayMuted(true) + .setAutoPlayPolicy(VideoOption.AutoPlayPolicy.WIFI).build(); + iad.setVideoOption(option); + iad.loadFullScreenAD(); + } + + + public interface IFullVideoAdListener { + void onFail(String msg); + + void onFinish(); + } + +} diff --git a/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/IntertitialAdUtil.java b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/IntertitialAdUtil.java new file mode 100644 index 0000000..d1f68b4 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/IntertitialAdUtil.java @@ -0,0 +1,136 @@ +package com.demo.library_ad; + + +import android.app.Activity; + +import com.bytedance.sdk.openadsdk.AdSlot; +import com.bytedance.sdk.openadsdk.TTAdConstant; +import com.bytedance.sdk.openadsdk.TTAdNative; +import com.bytedance.sdk.openadsdk.TTAdSdk; +import com.bytedance.sdk.openadsdk.TTFullScreenVideoAd; +import com.qq.e.ads.cfg.VideoOption; +import com.qq.e.ads.interstitial2.UnifiedInterstitialAD; +import com.qq.e.ads.interstitial2.UnifiedInterstitialADListener; +import com.qq.e.comm.util.AdError; + +public class IntertitialAdUtil { + + + public static void showAd(Activity context, AdUtil.AD_TYPE adType, String pid) { + if (adType == null) { + return; + } + + if (adType == AdUtil.AD_TYPE.csj) { + loadCSJ(context, pid); + } else if (adType == AdUtil.AD_TYPE.gdt) { + showGDT(context, pid); + } + } + + private static void loadCSJ(Activity context, String codeId) { + TTAdNative mTTAdNative = TTAdSdk.getAdManager().createAdNative(context); + AdSlot adSlot = new AdSlot.Builder() + .setCodeId(codeId) + //妯℃澘骞垮憡闇�瑕佽缃湡鏈涗釜鎬у寲妯℃澘骞垮憡鐨勫ぇ灏�,鍗曚綅dp,婵�鍔辫棰戝満鏅紝鍙璁剧疆鐨勫�煎ぇ浜�0鍗冲彲 + .setExpressViewAcceptedSize(300, 300) + .setSupportDeepLink(true) + .setOrientation(TTAdConstant.VERTICAL)//蹇呭~鍙傛暟锛屾湡鏈涜棰戠殑鎾斁鏂瑰悜锛歍TAdConstant.HORIZONTAL 鎴� TTAdConstant.VERTICAL + .build(); + + mTTAdNative.loadFullScreenVideoAd(adSlot, new TTAdNative.FullScreenVideoAdListener() { + //璇锋眰骞垮憡澶辫触 + @Override + public void onError(int code, String message) { + + } + + //骞垮憡鐗╂枡鍔犺浇瀹屾垚鐨勫洖璋� + @Override + public void onFullScreenVideoAdLoad(TTFullScreenVideoAd ad) { + + } + + //骞垮憡瑙嗛/鍥剧墖鍔犺浇瀹屾垚鐨勫洖璋冿紝鎺ュ叆鏂瑰彲浠ュ湪杩欎釜鍥炶皟鍚庡睍绀哄箍鍛� + @Override + public void onFullScreenVideoCached() { + + } + + @Override + public void onFullScreenVideoCached(TTFullScreenVideoAd ttFullScreenVideoAd) { + ttFullScreenVideoAd.showFullScreenVideoAd(context); + } + }); + + + } + + private static UnifiedInterstitialAD iad = null; + + private static void showGDT(Activity context, String pid) { + + VideoOption.Builder builder = new VideoOption.Builder(); + VideoOption option = builder.build(); + iad = new UnifiedInterstitialAD(context, pid, new UnifiedInterstitialADListener() { + + @Override + public void onADReceive() { + if (iad != null && iad.isValid()) { + iad.showAsPopupWindow(context); + } + } + + @Override + public void onVideoCached() { + + } + + @Override + public void onNoAD(AdError adError) { + + } + + @Override + public void onADOpened() { + + } + + @Override + public void onADExposure() { + + } + + @Override + public void onADClicked() { + + } + + @Override + public void onADLeftApplication() { + + } + + @Override + public void onADClosed() { + + } + + @Override + public void onRenderSuccess() { + + } + + @Override + public void onRenderFail() { + + } + }); + + iad.setVideoOption(option); + iad.loadAD(); + + + } + +} diff --git a/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/SplashAdUtil.java b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/SplashAdUtil.java new file mode 100644 index 0000000..68f03af --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/SplashAdUtil.java @@ -0,0 +1,171 @@ +package com.demo.library_ad; + +import android.app.Activity; +import android.view.View; +import android.view.ViewGroup; + +import com.bytedance.sdk.openadsdk.AdSlot; +import com.bytedance.sdk.openadsdk.TTAdManager; +import com.bytedance.sdk.openadsdk.TTAdNative; +import com.bytedance.sdk.openadsdk.TTSplashAd; +import com.demo.lib.common.util.common.DimenUtils; +import com.qq.e.ads.splash.SplashAD; +import com.qq.e.ads.splash.SplashADListener; +import com.qq.e.comm.util.AdError; + +public class SplashAdUtil { + + /** + * 鍔犺浇寮�灞忓箍鍛� + * + * @param adType + * @param pid + * @param context + * @param vg_ad + * @param splashAdListener + */ + public static void loadAD(AdUtil.AD_TYPE adType, String pid, Activity context, ViewGroup vg_ad, final SplashAdListener splashAdListener) { + if (adType == null) { + splashAdListener.close(); + return; + } + if (AdUtil.AD_TYPE.csj == adType) { + loadCSJ(context, pid, vg_ad, splashAdListener); + } else if (AdUtil.AD_TYPE.gdt == adType) { + loadGDT(context, pid, vg_ad, splashAdListener); + } else { + splashAdListener.close(); + } + } + + private static void loadGDT(Activity context, String pid, ViewGroup vg_ad, final SplashAdListener splashAdListener) { + new SplashAD(context, pid, new SplashADListener() { + @Override + public void onADDismissed() { + splashAdListener.close(); + } + + @Override + public void onNoAD(AdError adError) { + splashAdListener.noAd(); + } + + @Override + public void onADPresent() { + } + + @Override + public void onADClicked() { + System.out.println(); + } + + @Override + public void onADTick(final long l) { + + } + + @Override + public void onADExposure() { + System.out.println(); + } + + @Override + public void onADLoaded(long l) { + } + }, 0).fetchAndShowIn(vg_ad); + } + + + /** + * 鍔犺浇绌垮北鐢插箍鍛� + * + * @param context + * @param vg_ad + * @param splashAdListener + */ + /** + * @param context + * @param code 浠g爜浣� + * @param vg_ad + * @param splashAdListener + */ + private static void loadCSJ(Activity context, String code, final ViewGroup vg_ad, final SplashAdListener splashAdListener) { + TTAdManager ttAdManager = null; + try { + ttAdManager = TTAdManagerHolder.get(); + } catch (Exception e) { + e.printStackTrace(); + } + if (ttAdManager == null) { + if (splashAdListener != null) + splashAdListener.noAd(); + return; + } + TTAdNative mTTAdNative = ttAdManager.createAdNative(context.getApplicationContext()); + //绌垮北鐢插箍鍛� + int width = DimenUtils.getScreenWidth(context); + int height = DimenUtils.getScreenHeight(context); + if (width == 0) + width = 720; + if (height == 0) + height = 1080; + AdSlot adSlot = new AdSlot.Builder() + .setCodeId(code) + .setSupportDeepLink(true) + .setImageAcceptedSize(width, height) + .build(); + mTTAdNative.loadSplashAd(adSlot, new TTAdNative.SplashAdListener() { + + @Override + public void onError(int i, String s) { + splashAdListener.noAd(); + } + + @Override + public void onTimeout() { + splashAdListener.noAd(); + } + + @Override + public void onSplashAdLoad(TTSplashAd ad) { + if (ad == null) { + splashAdListener.noAd(); + return; + } + View view = ad.getSplashView(); + vg_ad.removeAllViews(); + //鎶奡plashView 娣诲姞鍒癡iewGroup涓� + vg_ad.addView(view); + //璁剧疆SplashView鐨勪氦浜掔洃鍚櫒 + ad.setSplashInteractionListener(new TTSplashAd.AdInteractionListener() { + @Override + public void onAdClicked(View view, int type) { + } + + @Override + public void onAdShow(View view, int type) { + } + + @Override + public void onAdSkip() { + splashAdListener.close(); + } + + @Override + public void onAdTimeOver() { + splashAdListener.close(); + } + }); + } + }, 5000); + + + } + + public interface SplashAdListener { + void close(); + + void noAd(); + } + +} diff --git a/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/TTAdManagerHolder.java b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/TTAdManagerHolder.java new file mode 100644 index 0000000..b0e2774 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/java/com/demo/library_ad/TTAdManagerHolder.java @@ -0,0 +1,52 @@ +package com.demo.library_ad; + +import android.content.Context; + +import com.bytedance.sdk.openadsdk.TTAdConfig; +import com.bytedance.sdk.openadsdk.TTAdConstant; +import com.bytedance.sdk.openadsdk.TTAdManager; +import com.bytedance.sdk.openadsdk.TTAdSdk; + +/** + * 鍙互鐢ㄤ竴涓崟渚嬫潵淇濆瓨TTAdManager瀹炰緥锛屽湪闇�瑕佸垵濮嬪寲sdk鐨勬椂鍊欒皟鐢� + */ +public class TTAdManagerHolder { + + public static TTAdManager get() throws Exception { + if (!TTAdSdk.isInitSuccess()) { + throw new Exception("TTAdSdk is not init, please check."); + } + return TTAdSdk.getAdManager(); + } + + public static void init(Context context, String appId, boolean downLoadNotify, TTAdSdk.InitCallback initCallback) { + doInit(context, appId, downLoadNotify, initCallback); + } + + //step1:鎺ュ叆缃戠洘骞垮憡sdk鐨勫垵濮嬪寲鎿嶄綔锛岃鎯呰鎺ュ叆鏂囨。鍜岀┛灞辩敳骞冲彴璇存槑 + private static void doInit(Context context, String appId, boolean downLoadNotify, TTAdSdk.InitCallback initCallback) { + if (!TTAdSdk.isInitSuccess()) { + TTAdSdk.init(context, buildConfig(context, appId, downLoadNotify), initCallback); + } else { + initCallback.success(); + } + } + + private static TTAdConfig buildConfig(Context context, String appId, boolean downLoadNotify) { + TTAdConfig.Builder builder = new TTAdConfig.Builder() + .appId(appId) + .useTextureView(true) //浣跨敤TextureView鎺т欢鎾斁瑙嗛,榛樿涓篠urfaceView,褰撴湁SurfaceView鍐茬獊鐨勫満鏅紝鍙互浣跨敤TextureView + .appName(context.getString(R.string.app_name)) + .titleBarTheme(TTAdConstant.TITLE_BAR_THEME_DARK) + .allowShowNotify(true) //鏄惁鍏佽sdk灞曠ず閫氱煡鏍忔彁绀� + .debug(true) //娴嬭瘯闃舵鎵撳紑锛屽彲浠ラ�氳繃鏃ュ織鎺掓煡闂锛屼笂绾挎椂鍘婚櫎璇ヨ皟鐢� + .directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI, TTAdConstant.NETWORK_STATE_3G) //鍏佽鐩存帴涓嬭浇鐨勭綉缁滅姸鎬侀泦鍚� + .supportMultiProcess(true)//鏄惁鏀寔澶氳繘绋� + .needClearTaskReset(); + if (downLoadNotify) { + builder.directDownloadNetworkType(TTAdConstant.NETWORK_STATE_WIFI); + } + + return builder.build(); + } +} diff --git a/src/main/resources/code/android/library-ad/src/main/res/values-night/themes.xml b/src/main/resources/code/android/library-ad/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..7046965 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_200</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/black</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_200</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/main/res/values/colors.xml b/src/main/resources/code/android/library-ad/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="purple_200">#FFBB86FC</color> + <color name="purple_500">#FF6200EE</color> + <color name="purple_700">#FF3700B3</color> + <color name="teal_200">#FF03DAC5</color> + <color name="teal_700">#FF018786</color> + <color name="black">#FF000000</color> + <color name="white">#FFFFFFFF</color> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/main/res/values/strings.xml b/src/main/resources/code/android/library-ad/src/main/res/values/strings.xml new file mode 100644 index 0000000..9147341 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">library-ad</string> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/main/res/values/themes.xml b/src/main/resources/code/android/library-ad/src/main/res/values/themes.xml new file mode 100644 index 0000000..eb6839e --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_500</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/white</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_700</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ad/src/test/java/com/demo/library_ad/ExampleUnitTest.java b/src/main/resources/code/android/library-ad/src/test/java/com/demo/library_ad/ExampleUnitTest.java new file mode 100644 index 0000000..ccf6727 --- /dev/null +++ b/src/main/resources/code/android/library-ad/src/test/java/com/demo/library_ad/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.demo.library_ad; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/AndroidManifest.xml b/src/main/resources/code/android/library-common/AndroidManifest.xml new file mode 100644 index 0000000..123ce45 --- /dev/null +++ b/src/main/resources/code/android/library-common/AndroidManifest.xml @@ -0,0 +1,12 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.lcjian.lcjianlibrary" + android:versionCode="1" + android:versionName="1.0" > + + <application + android:allowBackup="true" + android:label="@string/app_name" + android:theme="@style/AppTheme" > + </application> + +</manifest> diff --git a/src/main/resources/code/android/library-common/assets/css/images/009.gif b/src/main/resources/code/android/library-common/assets/css/images/009.gif new file mode 100644 index 0000000..915c198 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/images/009.gif Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/images/android.png b/src/main/resources/code/android/library-common/assets/css/images/android.png new file mode 100644 index 0000000..1959273 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/images/android.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/jquery.confirm.css b/src/main/resources/code/android/library-common/assets/css/jquery.confirm.css new file mode 100644 index 0000000..f634304 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/jquery.confirm.css @@ -0,0 +1,90 @@ +#confirmOverlay{ + width:100%; + height:100%; + position:fixed; + top:0; + left:0; + background:url('jquery.confirm/ie.png'); + background: -moz-linear-gradient(rgba(11,11,11,0.1), rgba(11,11,11,0.6)) repeat-x rgba(11,11,11,0.2); + background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(11,11,11,0.1)), to(rgba(11,11,11,0.6))) repeat-x rgba(11,11,11,0.2); + z-index:100000; +} + +#confirmBox{ + background:url('jquery.confirm/body_bg.jpg') repeat-x left bottom #e5e5e5; + width:460px; + position:fixed; + left:50%; + top:50%; + margin:-130px 0 0 -230px; + border: 1px solid rgba(33, 33, 33, 0.6); + + -moz-box-shadow: 0 0 2px rgba(255, 255, 255, 0.6) inset; + -webkit-box-shadow: 0 0 2px rgba(255, 255, 255, 0.6) inset; + box-shadow: 0 0 2px rgba(255, 255, 255, 0.6) inset; + border-radius: 15px; +} + +#confirmBox h1, +#confirmBox p{ + font:26px/1 'Cuprum','Lucida Sans Unicode', 'Lucida Grande', sans-serif; + background:url('jquery.confirm/header_bg.jpg') repeat-x left bottom #f5f5f5; + padding: 10px 25px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.6); + color:#666; +} + +#confirmBox h1{ + text-align:center; + letter-spacing:0.3px; + color:#888; +} + +#confirmBox p{ + text-align:center; + background:none; + font-size:20px; + line-height:1.4; + padding-top: 15px; +} + +#confirmButtons{ + padding:15px 0 25px; + text-align:center; +} + +#confirmBox .button{ + display:inline-block; + background:url('jquery.confirm/buttons.png') no-repeat; + color:white; + position:relative; + height: 33px; + + font:17px/33px 'Cuprum','Lucida Sans Unicode', 'Lucida Grande', sans-serif; + + margin-right: 15px; + padding: 0 35px 0 40px; + text-decoration:none; + border:none; +} + +#confirmBox .button:last-child{ margin-right:0;} + +#confirmBox .button span{ + position:absolute; + top:0; + right:-5px; + background:url('jquery.confirm/buttons.png') no-repeat; + width:5px; + height:33px +} + +#confirmBox .blue{ background-position:left top;text-shadow:1px 1px 0 #5889a2;} +#confirmBox .blue span{ background-position:-195px 0;} +#confirmBox .blue:hover{ background-position:left bottom;} +#confirmBox .blue:hover span{ background-position:-195px bottom;} + +#confirmBox .gray{ background-position:-200px top;text-shadow:1px 1px 0 #707070;} +#confirmBox .gray span{ background-position:-395px 0;} +#confirmBox .gray:hover{ background-position:-200px bottom;} +#confirmBox .gray:hover span{ background-position:-395px bottom;} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/assets/css/jquery.confirm/body_bg.jpg b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/body_bg.jpg new file mode 100644 index 0000000..ef72119 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/body_bg.jpg Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/jquery.confirm/buttons.png b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/buttons.png new file mode 100644 index 0000000..49c2507 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/buttons.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/jquery.confirm/header_bg.jpg b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/header_bg.jpg new file mode 100644 index 0000000..ed23a76 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/header_bg.jpg Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/jquery.confirm/ie.png b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/ie.png new file mode 100644 index 0000000..b932a67 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/jquery.confirm/ie.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/main.css b/src/main/resources/code/android/library-common/assets/css/main.css new file mode 100644 index 0000000..2ca9dd6 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/main.css @@ -0,0 +1,4 @@ +@charset "utf-8"; +body { +} + diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png new file mode 100644 index 0000000..5473aff --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png new file mode 100644 index 0000000..5950a8d --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png new file mode 100644 index 0000000..1ad224a --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png new file mode 100644 index 0000000..1cf1cac --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png new file mode 100644 index 0000000..d683a41 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png new file mode 100644 index 0000000..b1b03b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png new file mode 100644 index 0000000..e56eefd --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png new file mode 100644 index 0000000..3525eb9 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png new file mode 100644 index 0000000..2b6a9f9 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_222222_256x240.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..b273ff1 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_222222_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png new file mode 100644 index 0000000..c5d93b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_a83300_256x240.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_a83300_256x240.png new file mode 100644 index 0000000..95993ea --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_a83300_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_cccccc_256x240.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_cccccc_256x240.png new file mode 100644 index 0000000..9254e05 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_cccccc_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_ffffff_256x240.png b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..42f8f99 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/images/ui-icons_ffffff_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/assets/css/ui-darkness/jquery-ui-1.8.23.custom.css b/src/main/resources/code/android/library-common/assets/css/ui-darkness/jquery-ui-1.8.23.custom.css new file mode 100644 index 0000000..659b634 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/css/ui-darkness/jquery-ui-1.8.23.custom.css @@ -0,0 +1,310 @@ +/*! + * jQuery UI CSS Framework 1.8.23 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/*! + * jQuery UI CSS Framework 1.8.23 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=333333&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=25&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=25&borderColorContent=666666&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=555555&bgTextureDefault=02_glass.png&bgImgOpacityDefault=20&borderColorDefault=666666&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=0078a3&bgTextureHover=02_glass.png&bgImgOpacityHover=40&borderColorHover=59b4d4&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=f58400&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=ffaf0f&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #666666; background: #000000 url(images/ui-bg_inset-soft_25_000000_1x100.png) 50% bottom repeat-x; color: #ffffff; } +.ui-widget-content a { color: #ffffff; } +.ui-widget-header { border: 1px solid #333333; background: #333333 url(images/ui-bg_gloss-wave_25_333333_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #666666; background: #555555 url(images/ui-bg_glass_20_555555_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eeeeee; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #59b4d4; background: #0078a3 url(images/ui-bg_glass_40_0078a3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } +.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #ffaf0f; background: #f58400 url(images/ui-bg_inset-soft_30_f58400_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cccccc_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_cccccc_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_4b8e0b_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_a83300_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } + +/* Overlays */ +.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); } +.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*! + * jQuery UI Slider 1.8.23 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/assets/index.html b/src/main/resources/code/android/library-common/assets/index.html new file mode 100644 index 0000000..5d35269 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta name="viewport" content=""/> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + <title>FamilyAlbum</title> + + <link rel="stylesheet" type="text/css" href="css/main.css" media="all"/> + + <script type="text/javascript" src="lib/jquery-1.7.2.min.js"> </script> + <script type="text/javascript" src="lib/jquery-ui-1.8.23.custom.min.js"> </script> + <script type="text/javascript" src="lib/jquery.confirm.js"> </script> + <script type="text/javascript" src="js/main.js"> </script> +</head> + +<body> + <video src="file:///mnt/sdcard/big_buck_bunny.mp4" controls="controls" height="210px" width="380px"></video> +</body> +</html> diff --git a/src/main/resources/code/android/library-common/assets/js/main.js b/src/main/resources/code/android/library-common/assets/js/main.js new file mode 100644 index 0000000..931c686 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/js/main.js @@ -0,0 +1,99 @@ +//API_KEY && API_SIG for flickr +var API_KEY = "8873397f084b2390be0fca6d0058c937"; +var API_SIG = "e78c1066099b5954"; + +var url = "http://192.168.1.101:8080/web/"; + + +var PicasaMgr = { + + /** + * return true if send successfully, else return false + * + * data is a json object e.g. {a: "hello", b: "hi"} + * + * callback(status), + */ + sendReport : function(data, type, callback){ + var reportData = data; + + if(!callback){ + callback = this._defaultCallback; + } + + this._callback = callback; + + //send data timeout + var timeOutId = setTimeout(this._requestTimeoutCallback, this._requestTimeout); + + var xmlHttpRequest = this._getXmlHttpRequest(); + alert(url); + + var reqParam = this._getRequestPara("POST", url); + + xmlHttpRequest.open(reqParam.method, reqParam.url, reqParam.async); + xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); + + xmlHttpRequest.onreadystatechange = function(){ + clearTimeout(timeOutId); + if(this.readyState == 4){ + alert(this.status); + callback(this.status == 200); + } + }; + + try{ + alert("send : "+ reportData); + xmlHttpRequest.send(reportData); + }catch(e){ + alert("send error: "+e); + } + + }, + + _requestTimeoutCallback: function(){ + var xmlHttp = Logger.Reporter._getXmlHttpRequest(); + if(xmlHttp != null){ + xmlHttp.onreadystatechange = null; + xmlHttp.abort(); //doesn't work correctly + Logger.Reporter._callback(false); + } + }, + + /** + * do nothing + */ + _defaultCallback : function(status){ + alert(status); + }, + + _getRequestPara : function(_method,_url){ + return {method : _method, url: _url, async : true}; + }, + + _getXmlHttpRequest : function(){ + var xmlHttpRequest = null; + + if (window.XMLHttpRequest) { + xmlHttpRequest = new XMLHttpRequest(); + } else { + var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', + 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; + for ( var i = 0; i < MSXML.length; i++) { + try { + xmlHttpRequest = new ActiveXObject(MSXML[i]); + } catch (e) { + } + } + } + + return xmlHttpRequest; + }, + + _callback : null, + _requestTimeout : 5000 +}; + +function test() { + PicasaMgr.sendReport("111"); +} diff --git a/src/main/resources/code/android/library-common/assets/lib/jquery-1.7.2.min.js b/src/main/resources/code/android/library-common/assets/lib/jquery-1.7.2.min.js new file mode 100644 index 0000000..16ad06c --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/lib/jquery-1.7.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test("聽")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/assets/lib/jquery-ui-1.8.23.custom.min.js b/src/main/resources/code/android/library-common/assets/lib/jquery-ui-1.8.23.custom.min.js new file mode 100644 index 0000000..b9edf70 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/lib/jquery-ui-1.8.23.custom.min.js @@ -0,0 +1,25 @@ +/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.23",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a("<a>").outerWidth(1).jquery||a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.curCSS||(a.curCSS=a.css),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.widget.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.mouse.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(b.options.disabled)return;switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){return this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);return}return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a),a},_values:function(a){var b,c,d;if(arguments.length)return b=this.options.values[a],b=this._trimAlignValue(b),b;c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +jQuery.effects||function(a,b){function c(b){var c;return b&&b.constructor==Array&&b.length==3?b:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))?[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))?[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:(c=/rgba\(0, 0, 0, 0\)/.exec(b))?e.transparent:e[a.trim(b).toLowerCase()]}function d(b,d){var e;do{e=(a.curCSS||a.css)(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};return a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete,[b,c,d,e]}function l(b){return!b||typeof b=="number"||a.fx.speeds[b]?!0:typeof b=="string"&&!a.effects[b]?!0:!1}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){return a.isFunction(d)&&(e=d,d=null),this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class")||"";a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.23",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){return b=="toggle"&&(b=a.is(":hidden")?"show":"hide"),b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;try{e.id}catch(f){e=document.body}return b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;return b.parent().is(".ui-effects-wrapper")?(c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus(),c):b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];return a.fx.off||!i?h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)}):i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="show",this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="hide",this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);return c[1].mode="toggle",this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}});var m={};a.each(["Quad","Cubic","Quart","Quint","Expo"],function(a,b){m[b]=function(b){return Math.pow(b,a+2)}}),a.extend(m,{Sine:function(a){return 1-Math.cos(a*Math.PI/2)},Circ:function(a){return 1-Math.sqrt(1-a*a)},Elastic:function(a){return a===0||a===1?a:-Math.pow(2,8*(a-1))*Math.sin(((a-1)*80-7.5)*Math.PI/15)},Back:function(a){return a*a*(3*a-2)},Bounce:function(a){var b,c=4;while(a<((b=Math.pow(2,--c))-1)/11);return 1/Math.pow(4,3-c)-7.5625*Math.pow((b*3-2)/22-a,2)}}),a.each(m,function(b,c){a.easing["easeIn"+b]=c,a.easing["easeOut"+b]=function(a){return 1-c(1-a)},a.easing["easeInOut"+b]=function(a){return a<.5?c(a*2)/2:c(a*-2+2)/-2+1}})}(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.slide.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight(!0):c.outerWidth(!0));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);; \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/assets/lib/jquery.base64.min.js b/src/main/resources/code/android/library-common/assets/lib/jquery.base64.min.js new file mode 100644 index 0000000..2931f71 --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/lib/jquery.base64.min.js @@ -0,0 +1,126 @@ +/** + * * jQuery BASE64 functions * * + * <code> * Encodes the given data with base64. * String $.base64Encode ( String str ) * <br /> * Decodes a base64 encoded data. * String $.base64Decode ( String str ) * </code> * * + * Encodes and Decodes the given data in base64. * This encoding is designed to + * make binary data survive transport through transport layers that are not + * 8-bit clean, such as mail bodies. * Base64-encoded data takes about 33% more + * space than the original data. * This javascript code is used to encode / + * decode data using base64 (this encoding is designed to make binary data + * survive transport through transport layers that are not 8-bit clean). Script + * is fully compatible with UTF-8 encoding. You can use base64 encoded data as + * simple encryption mechanism. * If you plan using UTF-8 encoding in your + * project don't forget to set the page encoding to UTF-8 (Content-Type meta + * tag). * This function orginally get from the WebToolkit and rewrite for using + * as the jQuery plugin. * * Example * Code * + * <code> * $.base64Encode("I'm Persian."); * </code> * Result * + * <code> * "SSdtIFBlcnNpYW4u" * </code> * Code * + * <code> * $.base64Decode("SSdtIFBlcnNpYW4u"); * </code> * Result * + * <code> * "I'm Persian." * </code> * * + * + * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > * + * @link http://www.semnanweb.com/jquery-plugin/base64.html (no longer + * available?) * + * @link https://gist.github.com/gists/1602210 * + * @see http://www.webtoolkit.info/ * + * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] * + * @param {jQuery} + * {base64Encode:function(input)) * + * @param {jQuery} + * {base64Decode:function(input)) * + * @return string + */ +(function($) { + var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var uTF8Encode = function(string) { + string = string.replace(/\x0d\x0a/g, "\x0a"); + var output = ""; + for ( var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + output += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + output += String.fromCharCode((c >> 6) | 192); + output += String.fromCharCode((c & 63) | 128); + } else { + output += String.fromCharCode((c >> 12) | 224); + output += String.fromCharCode(((c >> 6) & 63) | 128); + output += String.fromCharCode((c & 63) | 128); + } + } + return output; + }; + var uTF8Decode = function(input) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + while (i < input.length) { + c = input.charCodeAt(i); + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = input.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = input.charCodeAt(i + 1); + c3 = input.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) + | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + return string; + } + $.extend({ + base64Encode : function(input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + input = uTF8Encode(input); + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + keyString.charAt(enc1) + + keyString.charAt(enc2) + keyString.charAt(enc3) + + keyString.charAt(enc4); + } + return output; + }, + base64Decode : function(input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = keyString.indexOf(input.charAt(i++)); + enc2 = keyString.indexOf(input.charAt(i++)); + enc3 = keyString.indexOf(input.charAt(i++)); + enc4 = keyString.indexOf(input.charAt(i++)); + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + output = output + String.fromCharCode(chr1); + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + } + output = uTF8Decode(output); + return output; + } + }); +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/assets/lib/jquery.confirm.js b/src/main/resources/code/android/library-common/assets/lib/jquery.confirm.js new file mode 100644 index 0000000..f1fcb0f --- /dev/null +++ b/src/main/resources/code/android/library-common/assets/lib/jquery.confirm.js @@ -0,0 +1,85 @@ +(function($){ + + $.confirm = function(params){ + + if($('#confirmOverlay').length){ + // A confirm is already shown on the page: + return false; + } + + var buttonHTML = ''; + $.each(params.buttons,function(name,obj){ + + // Generating the markup for the buttons: + + buttonHTML += '<a href="#" class="button '+obj['class']+'">'+name+'<span></span></a>'; + + if(!obj.action){ + obj.action = function(){}; + } + }); + + var markup = [ + '<div id="confirmOverlay">', + '<div id="confirmBox">', + '<h1>',params.title,'</h1>', + '<p>',params.message,'</p>', + '<div id="confirmButtons">', + buttonHTML, + '</div></div></div>' + ].join(''); + + $(markup).hide().appendTo('body').fadeIn(); + + var buttons = $('#confirmBox .button'), + i = 0; + + $.each(params.buttons,function(name,obj){ + buttons.eq(i++).click(function(){ + + // Calling the action attribute when a + // click occurs, and hiding the confirm. + + obj.action(); + $.confirm.hide(); + return false; + }); + }); + } + + $.confirm.hide = function(){ + $('#confirmOverlay').fadeOut(function(){ + $(this).remove(); + }); + } + + $.alert = function(params, timeout){ + + if($('#confirmOverlay').length){ + // A confirm is already shown on the page: + return false; + } + + var markup = [ + '<div id="confirmOverlay">', + '<div id="confirmBox">', + '<h1>',params.title,'</h1>', + '<p>',params.message,'</p>', + '</div></div>' + ].join(''); + + $(markup).hide().appendTo('body').fadeIn(); + + if (timeout == null){ + timeout = 2000; + } + setTimeout(function(){$.alert.hide()}, timeout); + } + + $.alert.hide = function(){ + $('#confirmOverlay').fadeOut(function(){ + $(this).remove(); + }); + } + +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/bin/AndroidManifest.xml b/src/main/resources/code/android/library-common/bin/AndroidManifest.xml new file mode 100644 index 0000000..470b17d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/AndroidManifest.xml @@ -0,0 +1,16 @@ +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.lcjian.lcjianlibrary" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk + android:minSdkVersion="9" + android:targetSdkVersion="19" /> + + <application + android:allowBackup="true" + android:label="@string/app_name" + android:theme="@style/AppTheme" > + </application> + +</manifest> diff --git a/src/main/resources/code/android/library-common/bin/R.txt b/src/main/resources/code/android/library-common/bin/R.txt new file mode 100644 index 0000000..9b759a6 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/R.txt @@ -0,0 +1,73 @@ +int anim bottom_dialog_enter 0x7f040000 +int anim bottom_dialog_exit 0x7f040001 +int anim sliding_dialog_enter 0x7f040002 +int anim sliding_dialog_exit 0x7f040003 +int attr arcRadius 0x7f010006 +int attr closeOnClick 0x7f010008 +int attr dashGap 0x7f010001 +int attr dashOrientation 0x7f010003 +int attr dashWidth 0x7f010000 +int attr duration 0x7f010007 +int attr emotionHeight 0x7f01000c +int attr emotionSize 0x7f01000b +int attr emotionWidth 0x7f01000d +int attr fromDegrees 0x7f010004 +int attr lineColor 0x7f010002 +int attr mainImage 0x7f010009 +int attr maxHeight 0x7f01000e +int attr ratio 0x7f01000f +int attr shelfBackground 0x7f01000a +int attr toDegrees 0x7f010005 +int color dim_foreground_dark 0x7f080000 +int drawable ic_launcher 0x7f020000 +int drawable ic_media_pause 0x7f020001 +int drawable ic_media_play 0x7f020002 +int drawable spotlight 0x7f020003 +int drawable spotlight_blue 0x7f020004 +int id ffwd 0x7f070009 +int id fullscreen_custom_content 0x7f070003 +int id gv_emotion 0x7f070002 +int id horizontal 0x7f070000 +int id main_content 0x7f070004 +int id mediacontroller_progress 0x7f07000c +int id next 0x7f07000a +int id pause 0x7f070008 +int id prev 0x7f070006 +int id rew 0x7f070007 +int id time 0x7f07000d +int id time_current 0x7f07000b +int id vertical 0x7f070001 +int id webview_player 0x7f070005 +int layout emotion_grid 0x7f030000 +int layout emotion_item 0x7f030001 +int layout fragment_webview_video 0x7f030002 +int layout media_controller 0x7f030003 +int string app_name 0x7f050000 +int style AppBaseTheme 0x7f060000 +int style AppTheme 0x7f060001 +int style SlidingDialogAnimation 0x7f060003 +int style SlidingDialogTheme 0x7f060004 +int style Theme_Sliding_Dialog 0x7f060005 +int style dialogstyle 0x7f060002 +int[] styleable AdaptiveListView { 0x7f01000e } +int styleable AdaptiveListView_maxHeight 0 +int[] styleable ArcMenu { 0x7f010004, 0x7f010005, 0x7f010006, 0x7f010007, 0x7f010008, 0x7f010009 } +int styleable ArcMenu_arcRadius 2 +int styleable ArcMenu_closeOnClick 4 +int styleable ArcMenu_duration 3 +int styleable ArcMenu_fromDegrees 0 +int styleable ArcMenu_mainImage 5 +int styleable ArcMenu_toDegrees 1 +int[] styleable DashLine { 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003 } +int styleable DashLine_dashGap 1 +int styleable DashLine_dashOrientation 3 +int styleable DashLine_dashWidth 0 +int styleable DashLine_lineColor 2 +int[] styleable Emotion { 0x7f01000b, 0x7f01000c, 0x7f01000d } +int styleable Emotion_emotionHeight 1 +int styleable Emotion_emotionSize 0 +int styleable Emotion_emotionWidth 2 +int[] styleable RatioLayout { 0x7f01000f } +int styleable RatioLayout_ratio 0 +int[] styleable ShelvesView { 0x7f01000a } +int styleable ShelvesView_shelfBackground 0 diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/BuildConfig.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/BuildConfig.class new file mode 100644 index 0000000..3855ebe --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/BuildConfig.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/R.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/R.class new file mode 100644 index 0000000..ad492b4 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/lcjianlibrary/R.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DatabaseContext.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DatabaseContext.class new file mode 100644 index 0000000..76c6751 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DatabaseContext.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DeviceUuidFactory.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DeviceUuidFactory.class new file mode 100644 index 0000000..57a2f13 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/DeviceUuidFactory.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/Installation.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/Installation.class new file mode 100644 index 0000000..254f47e --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/Installation.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/PhoneCallReceiver.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/PhoneCallReceiver.class new file mode 100644 index 0000000..296fb42 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/PhoneCallReceiver.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/RetainViewFragment.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/RetainViewFragment.class new file mode 100644 index 0000000..9d4e167 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/RetainViewFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/animation/Rotate3dAnimation.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/animation/Rotate3dAnimation.class new file mode 100644 index 0000000..c9861bf --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/animation/Rotate3dAnimation.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/ConnectivityChangeHelper.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/ConnectivityChangeHelper.class new file mode 100644 index 0000000..aefbcf8 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/ConnectivityChangeHelper.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/CursorLoader.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/CursorLoader.class new file mode 100644 index 0000000..e67f385 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/content/CursorLoader.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/BottomDialog.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/BottomDialog.class new file mode 100644 index 0000000..c38944b --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/BottomDialog.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/SlidingDialog.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/SlidingDialog.class new file mode 100644 index 0000000..049ba11 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/dialog/SlidingDialog.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CircleDrawable.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CircleDrawable.class new file mode 100644 index 0000000..47092da --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CircleDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CrossFadeDrawable.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CrossFadeDrawable.class new file mode 100644 index 0000000..2cc6c16 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/CrossFadeDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/FastBitmapDrawable.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/FastBitmapDrawable.class new file mode 100644 index 0000000..6b38e2c --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/FastBitmapDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/LayerDrawable.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/LayerDrawable.class new file mode 100644 index 0000000..1f790b8 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/LayerDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/SpotlightDrawable.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/SpotlightDrawable.class new file mode 100644 index 0000000..d9e305f --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/SpotlightDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/TransitionDrawable.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/TransitionDrawable.class new file mode 100644 index 0000000..0a79fc7 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/drawable/TransitionDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionEditText.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionEditText.class new file mode 100644 index 0000000..09e1189 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionEditText.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionGridFragment.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionGridFragment.class new file mode 100644 index 0000000..59a8286 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionGridFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionHandler.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionHandler.class new file mode 100644 index 0000000..b59bb64 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionHandler.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionSpan.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionSpan.class new file mode 100644 index 0000000..c9b4247 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionSpan.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionTextView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionTextView.class new file mode 100644 index 0000000..d3cfcc6 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionTextView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionsFragment.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionsFragment.class new file mode 100644 index 0000000..d0c7a4b --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/emotion/EmotionsFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/CheckUpdateService.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/CheckUpdateService.class new file mode 100644 index 0000000..5932f16 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/CheckUpdateService.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateActivity.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateActivity.class new file mode 100644 index 0000000..1a9ef9e --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateActivity.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateService.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateService.class new file mode 100644 index 0000000..f5fa351 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/UpdateService.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/Version.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/Version.class new file mode 100644 index 0000000..7f8510c --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/upgrade/Version.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/Environment.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/Environment.class new file mode 100644 index 0000000..efc426e --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/Environment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/FragmentSwitchHelper.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/FragmentSwitchHelper.class new file mode 100644 index 0000000..fa3180c --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/FragmentSwitchHelper.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/ImageChooseHelper.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/ImageChooseHelper.class new file mode 100644 index 0000000..a6c6261 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/ImageChooseHelper.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SingleToast.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SingleToast.class new file mode 100644 index 0000000..95cd085 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SingleToast.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SystemCommon.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SystemCommon.class new file mode 100644 index 0000000..c733bd9 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/SystemCommon.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/DiskLruCache.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/DiskLruCache.class new file mode 100644 index 0000000..008e923 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/DiskLruCache.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageFileCache.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageFileCache.class new file mode 100644 index 0000000..8ecdb44 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageFileCache.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageMemoryCache.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageMemoryCache.class new file mode 100644 index 0000000..d8d607d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/ImageMemoryCache.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/StrictLineReader.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/StrictLineReader.class new file mode 100644 index 0000000..d5a3666 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/StrictLineReader.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/Util.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/Util.class new file mode 100644 index 0000000..af290f7 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/cache/Util.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/BitmapUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/BitmapUtils.class new file mode 100644 index 0000000..efbb399 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/BitmapUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ConnectionUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ConnectionUtils.class new file mode 100644 index 0000000..170c1d3 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ConnectionUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DateUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DateUtils.class new file mode 100644 index 0000000..ab39d78 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DateUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DimenUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DimenUtils.class new file mode 100644 index 0000000..4f6eb6d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/DimenUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/FileUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/FileUtils.class new file mode 100644 index 0000000..f4db499 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/FileUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ObjectUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ObjectUtils.class new file mode 100644 index 0000000..0ffaf2e --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/ObjectUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/PackageUtils2.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/PackageUtils2.class new file mode 100644 index 0000000..2136fde --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/PackageUtils2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/RandomUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/RandomUtils.class new file mode 100644 index 0000000..9fd3e0d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/RandomUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SerializeUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SerializeUtils.class new file mode 100644 index 0000000..dfd03e7 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SerializeUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SoftKeyboardUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SoftKeyboardUtils.class new file mode 100644 index 0000000..a4af3a8 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/SoftKeyboardUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StorageUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StorageUtils.class new file mode 100644 index 0000000..47ab4f2 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StorageUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StringUtils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StringUtils.class new file mode 100644 index 0000000..ac7c697 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/common/StringUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AESOperator.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AESOperator.class new file mode 100644 index 0000000..1ecabe3 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AESOperator.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AEScrypt.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AEScrypt.class new file mode 100644 index 0000000..945089b --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/AEScrypt.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/DEScrypt.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/DEScrypt.class new file mode 100644 index 0000000..8ffb715 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/DEScrypt.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/MD5Utils.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/MD5Utils.class new file mode 100644 index 0000000..e2283af --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/util/security/MD5Utils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/GestureMediaController.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/GestureMediaController.class new file mode 100644 index 0000000..3532e9f --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/GestureMediaController.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/MediaController.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/MediaController.class new file mode 100644 index 0000000..369ec10 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/MediaController.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/NavHiderCompat.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/NavHiderCompat.class new file mode 100644 index 0000000..bdcc19d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/NavHiderCompat.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/ScreenBrightnessUtil.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/ScreenBrightnessUtil.class new file mode 100644 index 0000000..381928f --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/ScreenBrightnessUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleTransportPerformer.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleTransportPerformer.class new file mode 100644 index 0000000..9e6bbb2 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleTransportPerformer.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleVideoView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleVideoView.class new file mode 100644 index 0000000..b2a2920 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/SimpleVideoView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/TVMediaController.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/TVMediaController.class new file mode 100644 index 0000000..3594502 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/TVMediaController.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/VideoUrlFragment.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/VideoUrlFragment.class new file mode 100644 index 0000000..02d6f49 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/VideoUrlFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/WebViewVideoFragment.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/WebViewVideoFragment.class new file mode 100644 index 0000000..900540f --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/videocomponents/WebViewVideoFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/AdaptiveListView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/AdaptiveListView.class new file mode 100644 index 0000000..6248aef --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/AdaptiveListView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ArcMeun.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ArcMeun.class new file mode 100644 index 0000000..7d6b1ae --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ArcMeun.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/DashLine.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/DashLine.class new file mode 100644 index 0000000..4b48550 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/DashLine.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ExtendEditText.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ExtendEditText.class new file mode 100644 index 0000000..863ac27 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ExtendEditText.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/IndexableListView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/IndexableListView.class new file mode 100644 index 0000000..f1a8f1f --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/IndexableListView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyGridView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyGridView.class new file mode 100644 index 0000000..cb9e581 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyGridView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyListView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyListView.class new file mode 100644 index 0000000..19ba0dc --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyListView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyViewPager.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyViewPager.class new file mode 100644 index 0000000..3451bd2 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/MyViewPager.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RatioLayout.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RatioLayout.class new file mode 100644 index 0000000..7e74952 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RatioLayout.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RefreshView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RefreshView.class new file mode 100644 index 0000000..fc71b3d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/RefreshView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ShelfView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ShelfView.class new file mode 100644 index 0000000..40cfdda --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/ShelfView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/TagCloudLayout.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/TagCloudLayout.class new file mode 100644 index 0000000..a0bcd2a --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/TagCloudLayout.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/UnderLineTextView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/UnderLineTextView.class new file mode 100644 index 0000000..c6641ae --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/UnderLineTextView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/ExtendedWebView.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/ExtendedWebView.class new file mode 100644 index 0000000..fcb100d --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/ExtendedWebView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/PagerAdapter.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/PagerAdapter.class new file mode 100644 index 0000000..6d410d4 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/PagerAdapter.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/VerticalViewPager.class b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/VerticalViewPager.class new file mode 100644 index 0000000..6516939 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/classes/com/lcjian/library/widget/verticalviewpager/VerticalViewPager.class Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/jarlist.cache b/src/main/resources/code/android/library-common/bin/jarlist.cache new file mode 100644 index 0000000..0565465 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/jarlist.cache @@ -0,0 +1,3 @@ +# cache for current jar dependency. DO NOT EDIT. +# format is <lastModified> <length> <SHA-1> <path> +# Encoding is UTF-8 diff --git a/src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight.png b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight.png new file mode 100644 index 0000000..fc6fdb4 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight.png Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight_blue.png b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight_blue.png new file mode 100644 index 0000000..49b6053 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-hdpi/spotlight_blue.png Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_pause.png b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_pause.png new file mode 100644 index 0000000..2ff5108 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_pause.png Binary files differ diff --git a/src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_play.png b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_play.png new file mode 100644 index 0000000..3700634 --- /dev/null +++ b/src/main/resources/code/android/library-common/bin/res/crunch/drawable-xhdpi/ic_media_play.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build.gradle b/src/main/resources/code/android/library-common/build.gradle new file mode 100644 index 0000000..b45b003 --- /dev/null +++ b/src/main/resources/code/android/library-common/build.gradle @@ -0,0 +1,62 @@ +apply plugin: 'com.android.library' + +dependencies { +// api fileTree(include: '*.jar', dir: 'libs') + api 'androidx.multidex:multidex:2.0.1' + api 'com.squareup.okhttp3:okhttp:3.8.1' + api 'androidx.legacy:legacy-support-v4:1.0.0' + api 'com.github.bumptech.glide:glide:4.9.0' + api 'com.google.code.gson:gson:1.7.1' + api files('libs/universal-image-loader-1.9.5.jar') + api files('libs/android-query-full.0.26.7.jar') +// api 'com.github.giswangsj:AndRatingBar:1.0.3' + api files('libs/AndRatingBar-1.0.3.aar') +// api 'com.loopj.android:android-async-http:1.4.9' + + api 'com.alibaba.baichuan.sdk:alibctradecommon:5.0.0.13' + + api 'com.alibaba:fastjson:1.1.71.android' + + //鍔ㄧ敾搴� + implementation 'com.github.ybq:Android-SpinKit:1.4.0' + + //statusbar宸ュ叿锛宧ttps://gitcode.net/mirrors/laobie/statusbarutil + api 'com.jaeger.statusbarutil:library:1.5.1' + + api 'com.github.youlookwhat:ByRecyclerView:1.3.0' + +} + +android { + compileSdkVersion 29 + buildToolsVersion '28.0.3' + defaultConfig { + minSdkVersion 16 + targetSdkVersion 29 + } + sourceSets { + main { + manifest.srcFile 'AndroidManifest.xml' + java.srcDirs = ['src'] + resources.srcDirs = ['src'] + aidl.srcDirs = ['src'] + renderscript.srcDirs = ['src'] + res.srcDirs = ['res'] + assets.srcDirs = ['assets'] + } + + + // Move the build types to build-types/<type> + // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... + // This moves them out of them default location under src/<type>/... which would + // conflict with src/ being used by the main source set. + // Adding new build types or product flavors should be accompanied + // by a similar customization. + debug.setRoot('build-types/debug') + release.setRoot('build-types/release') + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_7 + targetCompatibility JavaVersion.VERSION_1_7 + } +} diff --git a/src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/results.bin b/src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/results.bin new file mode 100644 index 0000000..0d259dd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/results.bin @@ -0,0 +1 @@ +o/classes diff --git a/src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/transformed/classes/classes.dex b/src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/transformed/classes/classes.dex new file mode 100644 index 0000000..47c1f6a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/.transforms/9ef1ef8243505b4eaf05ac1b46311881/transformed/classes/classes.dex Binary files differ diff --git a/src/main/resources/code/android/library-common/build/generated/source/buildConfig/debug/com/lcjian/lcjianlibrary/BuildConfig.java b/src/main/resources/code/android/library-common/build/generated/source/buildConfig/debug/com/lcjian/lcjianlibrary/BuildConfig.java new file mode 100644 index 0000000..6451002 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/generated/source/buildConfig/debug/com/lcjian/lcjianlibrary/BuildConfig.java @@ -0,0 +1,10 @@ +/** + * Automatically generated file. DO NOT MODIFY + */ +package com.lcjian.lcjianlibrary; + +public final class BuildConfig { + public static final boolean DEBUG = Boolean.parseBoolean("true"); + public static final String LIBRARY_PACKAGE_NAME = "com.lcjian.lcjianlibrary"; + public static final String BUILD_TYPE = "debug"; +} diff --git a/src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml b/src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml new file mode 100644 index 0000000..9819138 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.lcjian.lcjianlibrary" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk + android:minSdkVersion="16" + android:targetSdkVersion="29" /> + + <application + android:allowBackup="true" + android:label="@string/app_name" + android:theme="@style/AppTheme" > + </application> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json b/src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json new file mode 100644 index 0000000..26fdfa4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "artifactType": { + "type": "AAPT_FRIENDLY_MERGED_MANIFESTS", + "kind": "Directory" + }, + "applicationId": "com.lcjian.lcjianlibrary", + "variantName": "debug", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "outputFile": "AndroidManifest.xml" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/aar_metadata/debug/aar-metadata.properties b/src/main/resources/code/android/library-common/build/intermediates/aar_metadata/debug/aar-metadata.properties new file mode 100644 index 0000000..d8560bd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/aar_metadata/debug/aar-metadata.properties @@ -0,0 +1,2 @@ +aarFormatVersion=1.0 +aarMetadataVersion=1.0 diff --git a/src/main/resources/code/android/library-common/build/intermediates/annotation_processor_list/debug/annotationProcessors.json b/src/main/resources/code/android/library-common/build/intermediates/annotation_processor_list/debug/annotationProcessors.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/annotation_processor_list/debug/annotationProcessors.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar b/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar new file mode 100644 index 0000000..ec676b4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compile_library_classes_jar/debug/classes.jar Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compile_r_class_jar/debug/R.jar b/src/main/resources/code/android/library-common/build/intermediates/compile_r_class_jar/debug/R.jar new file mode 100644 index 0000000..e744d33 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compile_r_class_jar/debug/R.jar Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compile_symbol_list/debug/R.txt b/src/main/resources/code/android/library-common/build/intermediates/compile_symbol_list/debug/R.txt new file mode 100644 index 0000000..d75fdd8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compile_symbol_list/debug/R.txt @@ -0,0 +1,2848 @@ +int anim abc_fade_in 0x0 +int anim abc_fade_out 0x0 +int anim abc_grow_fade_in_from_bottom 0x0 +int anim abc_popup_enter 0x0 +int anim abc_popup_exit 0x0 +int anim abc_shrink_fade_out_from_bottom 0x0 +int anim abc_slide_in_bottom 0x0 +int anim abc_slide_in_top 0x0 +int anim abc_slide_out_bottom 0x0 +int anim abc_slide_out_top 0x0 +int anim abc_tooltip_enter 0x0 +int anim abc_tooltip_exit 0x0 +int anim bottom_dialog_enter 0x0 +int anim bottom_dialog_exit 0x0 +int anim btn_checkbox_to_checked_box_inner_merged_animation 0x0 +int anim btn_checkbox_to_checked_box_outer_merged_animation 0x0 +int anim btn_checkbox_to_checked_icon_null_animation 0x0 +int anim btn_checkbox_to_unchecked_box_inner_merged_animation 0x0 +int anim btn_checkbox_to_unchecked_check_path_merged_animation 0x0 +int anim btn_checkbox_to_unchecked_icon_null_animation 0x0 +int anim btn_radio_to_off_mtrl_dot_group_animation 0x0 +int anim btn_radio_to_off_mtrl_ring_outer_animation 0x0 +int anim btn_radio_to_off_mtrl_ring_outer_path_animation 0x0 +int anim btn_radio_to_on_mtrl_dot_group_animation 0x0 +int anim btn_radio_to_on_mtrl_ring_outer_animation 0x0 +int anim btn_radio_to_on_mtrl_ring_outer_path_animation 0x0 +int anim design_bottom_sheet_slide_in 0x0 +int anim design_bottom_sheet_slide_out 0x0 +int anim design_snackbar_in 0x0 +int anim design_snackbar_out 0x0 +int anim sliding_dialog_enter 0x0 +int anim sliding_dialog_exit 0x0 +int animator design_appbar_state_list_animator 0x0 +int animator design_fab_hide_motion_spec 0x0 +int animator design_fab_show_motion_spec 0x0 +int animator mtrl_btn_state_list_anim 0x0 +int animator mtrl_btn_unelevated_state_list_anim 0x0 +int animator mtrl_chip_state_list_anim 0x0 +int animator mtrl_fab_hide_motion_spec 0x0 +int animator mtrl_fab_show_motion_spec 0x0 +int animator mtrl_fab_transformation_sheet_collapse_spec 0x0 +int animator mtrl_fab_transformation_sheet_expand_spec 0x0 +int attr SpinKitViewStyle 0x0 +int attr SpinKit_Color 0x0 +int attr SpinKit_Style 0x0 +int attr actionBarDivider 0x0 +int attr actionBarItemBackground 0x0 +int attr actionBarPopupTheme 0x0 +int attr actionBarSize 0x0 +int attr actionBarSplitStyle 0x0 +int attr actionBarStyle 0x0 +int attr actionBarTabBarStyle 0x0 +int attr actionBarTabStyle 0x0 +int attr actionBarTabTextStyle 0x0 +int attr actionBarTheme 0x0 +int attr actionBarWidgetTheme 0x0 +int attr actionButtonStyle 0x0 +int attr actionDropDownStyle 0x0 +int attr actionLayout 0x0 +int attr actionMenuTextAppearance 0x0 +int attr actionMenuTextColor 0x0 +int attr actionModeBackground 0x0 +int attr actionModeCloseButtonStyle 0x0 +int attr actionModeCloseDrawable 0x0 +int attr actionModeCopyDrawable 0x0 +int attr actionModeCutDrawable 0x0 +int attr actionModeFindDrawable 0x0 +int attr actionModePasteDrawable 0x0 +int attr actionModePopupWindowStyle 0x0 +int attr actionModeSelectAllDrawable 0x0 +int attr actionModeShareDrawable 0x0 +int attr actionModeSplitBackground 0x0 +int attr actionModeStyle 0x0 +int attr actionModeWebSearchDrawable 0x0 +int attr actionOverflowButtonStyle 0x0 +int attr actionOverflowMenuStyle 0x0 +int attr actionProviderClass 0x0 +int attr actionViewClass 0x0 +int attr activityChooserViewStyle 0x0 +int attr alertDialogButtonGroupStyle 0x0 +int attr alertDialogCenterButtons 0x0 +int attr alertDialogStyle 0x0 +int attr alertDialogTheme 0x0 +int attr allowStacking 0x0 +int attr alpha 0x0 +int attr alphabeticModifiers 0x0 +int attr arcRadius 0x0 +int attr arrowHeadLength 0x0 +int attr arrowShaftLength 0x0 +int attr autoCompleteTextViewStyle 0x0 +int attr autoSizeMaxTextSize 0x0 +int attr autoSizeMinTextSize 0x0 +int attr autoSizePresetSizes 0x0 +int attr autoSizeStepGranularity 0x0 +int attr autoSizeTextType 0x0 +int attr background 0x0 +int attr backgroundSplit 0x0 +int attr backgroundStacked 0x0 +int attr backgroundTint 0x0 +int attr backgroundTintMode 0x0 +int attr barLength 0x0 +int attr behavior_autoHide 0x0 +int attr behavior_fitToContents 0x0 +int attr behavior_hideable 0x0 +int attr behavior_overlapTop 0x0 +int attr behavior_peekHeight 0x0 +int attr behavior_skipCollapsed 0x0 +int attr bgColor 0x0 +int attr bgDrawable 0x0 +int attr borderWidth 0x0 +int attr borderlessButtonStyle 0x0 +int attr bottomAppBarStyle 0x0 +int attr bottomNavigationStyle 0x0 +int attr bottomSheetDialogTheme 0x0 +int attr bottomSheetStyle 0x0 +int attr boxBackgroundColor 0x0 +int attr boxBackgroundMode 0x0 +int attr boxCollapsedPaddingTop 0x0 +int attr boxCornerRadiusBottomEnd 0x0 +int attr boxCornerRadiusBottomStart 0x0 +int attr boxCornerRadiusTopEnd 0x0 +int attr boxCornerRadiusTopStart 0x0 +int attr boxStrokeColor 0x0 +int attr boxStrokeWidth 0x0 +int attr buttonBarButtonStyle 0x0 +int attr buttonBarNegativeButtonStyle 0x0 +int attr buttonBarNeutralButtonStyle 0x0 +int attr buttonBarPositiveButtonStyle 0x0 +int attr buttonBarStyle 0x0 +int attr buttonCompat 0x0 +int attr buttonGravity 0x0 +int attr buttonIconDimen 0x0 +int attr buttonPanelSideLayout 0x0 +int attr buttonStyle 0x0 +int attr buttonStyleSmall 0x0 +int attr buttonTint 0x0 +int attr buttonTintMode 0x0 +int attr cardBackgroundColor 0x0 +int attr cardCornerRadius 0x0 +int attr cardElevation 0x0 +int attr cardMaxElevation 0x0 +int attr cardPreventCornerOverlap 0x0 +int attr cardUseCompatPadding 0x0 +int attr cardViewStyle 0x0 +int attr checkboxStyle 0x0 +int attr checkedChip 0x0 +int attr checkedIcon 0x0 +int attr checkedIconEnabled 0x0 +int attr checkedIconVisible 0x0 +int attr checkedTextViewStyle 0x0 +int attr chipBackgroundColor 0x0 +int attr chipCornerRadius 0x0 +int attr chipEndPadding 0x0 +int attr chipGroupStyle 0x0 +int attr chipIcon 0x0 +int attr chipIconEnabled 0x0 +int attr chipIconSize 0x0 +int attr chipIconTint 0x0 +int attr chipIconVisible 0x0 +int attr chipMinHeight 0x0 +int attr chipSpacing 0x0 +int attr chipSpacingHorizontal 0x0 +int attr chipSpacingVertical 0x0 +int attr chipStandaloneStyle 0x0 +int attr chipStartPadding 0x0 +int attr chipStrokeColor 0x0 +int attr chipStrokeWidth 0x0 +int attr chipStyle 0x0 +int attr closeIcon 0x0 +int attr closeIconEnabled 0x0 +int attr closeIconEndPadding 0x0 +int attr closeIconSize 0x0 +int attr closeIconStartPadding 0x0 +int attr closeIconTint 0x0 +int attr closeIconVisible 0x0 +int attr closeItemLayout 0x0 +int attr closeOnClick 0x0 +int attr collapseContentDescription 0x0 +int attr collapseIcon 0x0 +int attr collapsedTitleGravity 0x0 +int attr collapsedTitleTextAppearance 0x0 +int attr color 0x0 +int attr colorAccent 0x0 +int attr colorBackgroundFloating 0x0 +int attr colorButtonNormal 0x0 +int attr colorControlActivated 0x0 +int attr colorControlHighlight 0x0 +int attr colorControlNormal 0x0 +int attr colorError 0x0 +int attr colorPrimary 0x0 +int attr colorPrimaryDark 0x0 +int attr colorSecondary 0x0 +int attr colorSwitchThumbNormal 0x0 +int attr commitIcon 0x0 +int attr contentDescription 0x0 +int attr contentInsetEnd 0x0 +int attr contentInsetEndWithActions 0x0 +int attr contentInsetLeft 0x0 +int attr contentInsetRight 0x0 +int attr contentInsetStart 0x0 +int attr contentInsetStartWithNavigation 0x0 +int attr contentPadding 0x0 +int attr contentPaddingBottom 0x0 +int attr contentPaddingLeft 0x0 +int attr contentPaddingRight 0x0 +int attr contentPaddingTop 0x0 +int attr contentScrim 0x0 +int attr controlBackground 0x0 +int attr coordinatorLayoutStyle 0x0 +int attr cornerRadius 0x0 +int attr counterEnabled 0x0 +int attr counterMaxLength 0x0 +int attr counterOverflowTextAppearance 0x0 +int attr counterTextAppearance 0x0 +int attr customNavigationLayout 0x0 +int attr dashGap 0x0 +int attr dashOrientation 0x0 +int attr dashWidth 0x0 +int attr defaultQueryHint 0x0 +int attr dialogCornerRadius 0x0 +int attr dialogPreferredPadding 0x0 +int attr dialogTheme 0x0 +int attr displayOptions 0x0 +int attr divider 0x0 +int attr dividerHorizontal 0x0 +int attr dividerPadding 0x0 +int attr dividerVertical 0x0 +int attr drawableBottomCompat 0x0 +int attr drawableEndCompat 0x0 +int attr drawableLeftCompat 0x0 +int attr drawableRightCompat 0x0 +int attr drawableSize 0x0 +int attr drawableStartCompat 0x0 +int attr drawableTint 0x0 +int attr drawableTintMode 0x0 +int attr drawableTopCompat 0x0 +int attr drawerArrowStyle 0x0 +int attr dropDownListViewStyle 0x0 +int attr dropdownListPreferredItemHeight 0x0 +int attr duration 0x0 +int attr editTextBackground 0x0 +int attr editTextColor 0x0 +int attr editTextStyle 0x0 +int attr elevation 0x0 +int attr emotionHeight 0x0 +int attr emotionSize 0x0 +int attr emotionWidth 0x0 +int attr enforceMaterialTheme 0x0 +int attr enforceTextAppearance 0x0 +int attr errorEnabled 0x0 +int attr errorTextAppearance 0x0 +int attr expandActivityOverflowButtonDrawable 0x0 +int attr expanded 0x0 +int attr expandedTitleGravity 0x0 +int attr expandedTitleMargin 0x0 +int attr expandedTitleMarginBottom 0x0 +int attr expandedTitleMarginEnd 0x0 +int attr expandedTitleMarginStart 0x0 +int attr expandedTitleMarginTop 0x0 +int attr expandedTitleTextAppearance 0x0 +int attr fabAlignmentMode 0x0 +int attr fabCradleMargin 0x0 +int attr fabCradleRoundedCornerRadius 0x0 +int attr fabCradleVerticalOffset 0x0 +int attr fabCustomSize 0x0 +int attr fabSize 0x0 +int attr fastScrollEnabled 0x0 +int attr fastScrollHorizontalThumbDrawable 0x0 +int attr fastScrollHorizontalTrackDrawable 0x0 +int attr fastScrollVerticalThumbDrawable 0x0 +int attr fastScrollVerticalTrackDrawable 0x0 +int attr firstBaselineToTopHeight 0x0 +int attr floatingActionButtonStyle 0x0 +int attr font 0x0 +int attr fontFamily 0x0 +int attr fontProviderAuthority 0x0 +int attr fontProviderCerts 0x0 +int attr fontProviderFetchStrategy 0x0 +int attr fontProviderFetchTimeout 0x0 +int attr fontProviderPackage 0x0 +int attr fontProviderQuery 0x0 +int attr fontStyle 0x0 +int attr fontVariationSettings 0x0 +int attr fontWeight 0x0 +int attr foregroundInsidePadding 0x0 +int attr fromDegrees 0x0 +int attr gapBetweenBars 0x0 +int attr goIcon 0x0 +int attr headerLayout 0x0 +int attr height 0x0 +int attr helperText 0x0 +int attr helperTextEnabled 0x0 +int attr helperTextTextAppearance 0x0 +int attr hideMotionSpec 0x0 +int attr hideOnContentScroll 0x0 +int attr hideOnScroll 0x0 +int attr hintAnimationEnabled 0x0 +int attr hintEnabled 0x0 +int attr hintTextAppearance 0x0 +int attr homeAsUpIndicator 0x0 +int attr homeLayout 0x0 +int attr hoveredFocusedTranslationZ 0x0 +int attr icon 0x0 +int attr iconEndPadding 0x0 +int attr iconGravity 0x0 +int attr iconPadding 0x0 +int attr iconSize 0x0 +int attr iconStartPadding 0x0 +int attr iconTint 0x0 +int attr iconTintMode 0x0 +int attr iconifiedByDefault 0x0 +int attr imageButtonStyle 0x0 +int attr indeterminateProgressStyle 0x0 +int attr initialActivityCount 0x0 +int attr insetForeground 0x0 +int attr isLightTheme 0x0 +int attr itemBackground 0x0 +int attr itemHorizontalPadding 0x0 +int attr itemHorizontalTranslationEnabled 0x0 +int attr itemIconPadding 0x0 +int attr itemIconSize 0x0 +int attr itemIconTint 0x0 +int attr itemPadding 0x0 +int attr itemSpacing 0x0 +int attr itemTextAppearance 0x0 +int attr itemTextAppearanceActive 0x0 +int attr itemTextAppearanceInactive 0x0 +int attr itemTextColor 0x0 +int attr keepOriginColor 0x0 +int attr keylines 0x0 +int attr labelVisibilityMode 0x0 +int attr lastBaselineToBottomHeight 0x0 +int attr layout 0x0 +int attr layoutManager 0x0 +int attr layout_anchor 0x0 +int attr layout_anchorGravity 0x0 +int attr layout_behavior 0x0 +int attr layout_collapseMode 0x0 +int attr layout_collapseParallaxMultiplier 0x0 +int attr layout_dodgeInsetEdges 0x0 +int attr layout_insetEdge 0x0 +int attr layout_keyline 0x0 +int attr layout_scrollFlags 0x0 +int attr layout_scrollInterpolator 0x0 +int attr liftOnScroll 0x0 +int attr lineColor 0x0 +int attr lineHeight 0x0 +int attr lineSpacing 0x0 +int attr listChoiceBackgroundIndicator 0x0 +int attr listChoiceIndicatorMultipleAnimated 0x0 +int attr listChoiceIndicatorSingleAnimated 0x0 +int attr listDividerAlertDialog 0x0 +int attr listItemLayout 0x0 +int attr listLayout 0x0 +int attr listMenuViewStyle 0x0 +int attr listPopupWindowStyle 0x0 +int attr listPreferredItemHeight 0x0 +int attr listPreferredItemHeightLarge 0x0 +int attr listPreferredItemHeightSmall 0x0 +int attr listPreferredItemPaddingEnd 0x0 +int attr listPreferredItemPaddingLeft 0x0 +int attr listPreferredItemPaddingRight 0x0 +int attr listPreferredItemPaddingStart 0x0 +int attr logo 0x0 +int attr logoDescription 0x0 +int attr mainImage 0x0 +int attr materialButtonStyle 0x0 +int attr materialCardViewStyle 0x0 +int attr maxActionInlineWidth 0x0 +int attr maxButtonHeight 0x0 +int attr maxHeight 0x0 +int attr maxImageSize 0x0 +int attr measureWithLargestChild 0x0 +int attr menu 0x0 +int attr multiChoiceItemLayout 0x0 +int attr navigationContentDescription 0x0 +int attr navigationIcon 0x0 +int attr navigationMode 0x0 +int attr navigationViewStyle 0x0 +int attr numericModifiers 0x0 +int attr overlapAnchor 0x0 +int attr paddingBottomNoButtons 0x0 +int attr paddingEnd 0x0 +int attr paddingStart 0x0 +int attr paddingTopNoTitle 0x0 +int attr panelBackground 0x0 +int attr panelMenuListTheme 0x0 +int attr panelMenuListWidth 0x0 +int attr passwordToggleContentDescription 0x0 +int attr passwordToggleDrawable 0x0 +int attr passwordToggleEnabled 0x0 +int attr passwordToggleTint 0x0 +int attr passwordToggleTintMode 0x0 +int attr popupMenuStyle 0x0 +int attr popupTheme 0x0 +int attr popupWindowStyle 0x0 +int attr preserveIconSpacing 0x0 +int attr pressedTranslationZ 0x0 +int attr progressBarPadding 0x0 +int attr progressBarStyle 0x0 +int attr queryBackground 0x0 +int attr queryHint 0x0 +int attr radioButtonStyle 0x0 +int attr ratingBarStyle 0x0 +int attr ratingBarStyleIndicator 0x0 +int attr ratingBarStyleSmall 0x0 +int attr ratio 0x0 +int attr reverseLayout 0x0 +int attr right2Left 0x0 +int attr rightPadding 0x0 +int attr rippleColor 0x0 +int attr scaleFactor 0x0 +int attr scrimAnimationDuration 0x0 +int attr scrimBackground 0x0 +int attr scrimVisibleHeightTrigger 0x0 +int attr searchHintIcon 0x0 +int attr searchIcon 0x0 +int attr searchViewStyle 0x0 +int attr seekBarStyle 0x0 +int attr selectableItemBackground 0x0 +int attr selectableItemBackgroundBorderless 0x0 +int attr shelfBackground 0x0 +int attr showAsAction 0x0 +int attr showDividers 0x0 +int attr showMotionSpec 0x0 +int attr showText 0x0 +int attr showTitle 0x0 +int attr singleChoiceItemLayout 0x0 +int attr singleLine 0x0 +int attr singleSelection 0x0 +int attr snackbarButtonStyle 0x0 +int attr snackbarStyle 0x0 +int attr spanCount 0x0 +int attr spinBars 0x0 +int attr spinnerDropDownItemStyle 0x0 +int attr spinnerStyle 0x0 +int attr splitTrack 0x0 +int attr srcCompat 0x0 +int attr stackFromEnd 0x0 +int attr starColor 0x0 +int attr starDrawable 0x0 +int attr starSpacing 0x0 +int attr state_above_anchor 0x0 +int attr state_collapsed 0x0 +int attr state_collapsible 0x0 +int attr state_liftable 0x0 +int attr state_lifted 0x0 +int attr statusBarBackground 0x0 +int attr statusBarScrim 0x0 +int attr strokeColor 0x0 +int attr strokeWidth 0x0 +int attr subMenuArrow 0x0 +int attr subStarColor 0x0 +int attr submitBackground 0x0 +int attr subtitle 0x0 +int attr subtitleTextAppearance 0x0 +int attr subtitleTextColor 0x0 +int attr subtitleTextStyle 0x0 +int attr suggestionRowLayout 0x0 +int attr switchMinWidth 0x0 +int attr switchPadding 0x0 +int attr switchStyle 0x0 +int attr switchTextAppearance 0x0 +int attr tabBackground 0x0 +int attr tabContentStart 0x0 +int attr tabGravity 0x0 +int attr tabIconTint 0x0 +int attr tabIconTintMode 0x0 +int attr tabIndicator 0x0 +int attr tabIndicatorAnimationDuration 0x0 +int attr tabIndicatorColor 0x0 +int attr tabIndicatorFullWidth 0x0 +int attr tabIndicatorGravity 0x0 +int attr tabIndicatorHeight 0x0 +int attr tabInlineLabel 0x0 +int attr tabMaxWidth 0x0 +int attr tabMinWidth 0x0 +int attr tabMode 0x0 +int attr tabPadding 0x0 +int attr tabPaddingBottom 0x0 +int attr tabPaddingEnd 0x0 +int attr tabPaddingStart 0x0 +int attr tabPaddingTop 0x0 +int attr tabRippleColor 0x0 +int attr tabSelectedTextColor 0x0 +int attr tabStyle 0x0 +int attr tabTextAppearance 0x0 +int attr tabTextColor 0x0 +int attr tabUnboundedRipple 0x0 +int attr textAllCaps 0x0 +int attr textAppearanceBody1 0x0 +int attr textAppearanceBody2 0x0 +int attr textAppearanceButton 0x0 +int attr textAppearanceCaption 0x0 +int attr textAppearanceHeadline1 0x0 +int attr textAppearanceHeadline2 0x0 +int attr textAppearanceHeadline3 0x0 +int attr textAppearanceHeadline4 0x0 +int attr textAppearanceHeadline5 0x0 +int attr textAppearanceHeadline6 0x0 +int attr textAppearanceLargePopupMenu 0x0 +int attr textAppearanceListItem 0x0 +int attr textAppearanceListItemSecondary 0x0 +int attr textAppearanceListItemSmall 0x0 +int attr textAppearanceOverline 0x0 +int attr textAppearancePopupMenuHeader 0x0 +int attr textAppearanceSearchResultSubtitle 0x0 +int attr textAppearanceSearchResultTitle 0x0 +int attr textAppearanceSmallPopupMenu 0x0 +int attr textAppearanceSubtitle1 0x0 +int attr textAppearanceSubtitle2 0x0 +int attr textColorAlertDialogListItem 0x0 +int attr textColorError 0x0 +int attr textColorSearchUrl 0x0 +int attr textEndPadding 0x0 +int attr textInputStyle 0x0 +int attr textLocale 0x0 +int attr textStartPadding 0x0 +int attr theme 0x0 +int attr thickness 0x0 +int attr thumbTextPadding 0x0 +int attr thumbTint 0x0 +int attr thumbTintMode 0x0 +int attr tickMark 0x0 +int attr tickMarkTint 0x0 +int attr tickMarkTintMode 0x0 +int attr tint 0x0 +int attr tintMode 0x0 +int attr title 0x0 +int attr titleEnabled 0x0 +int attr titleMargin 0x0 +int attr titleMarginBottom 0x0 +int attr titleMarginEnd 0x0 +int attr titleMarginStart 0x0 +int attr titleMarginTop 0x0 +int attr titleMargins 0x0 +int attr titleTextAppearance 0x0 +int attr titleTextColor 0x0 +int attr titleTextStyle 0x0 +int attr toDegrees 0x0 +int attr toolbarId 0x0 +int attr toolbarNavigationButtonStyle 0x0 +int attr toolbarStyle 0x0 +int attr tooltipForegroundColor 0x0 +int attr tooltipFrameBackground 0x0 +int attr tooltipText 0x0 +int attr track 0x0 +int attr trackTint 0x0 +int attr trackTintMode 0x0 +int attr ttcIndex 0x0 +int attr useCompatPadding 0x0 +int attr viewInflaterClass 0x0 +int attr voiceIcon 0x0 +int attr windowActionBar 0x0 +int attr windowActionBarOverlay 0x0 +int attr windowActionModeOverlay 0x0 +int attr windowFixedHeightMajor 0x0 +int attr windowFixedHeightMinor 0x0 +int attr windowFixedWidthMajor 0x0 +int attr windowFixedWidthMinor 0x0 +int attr windowMinWidthMajor 0x0 +int attr windowMinWidthMinor 0x0 +int attr windowNoTitle 0x0 +int bool abc_action_bar_embed_tabs 0x0 +int bool abc_allow_stacked_button_bar 0x0 +int bool abc_config_actionMenuItemAllCaps 0x0 +int bool abc_config_showMenuShortcutsWhenKeyboardPresent 0x0 +int bool mtrl_btn_textappearance_all_caps 0x0 +int color abc_background_cache_hint_selector_material_dark 0x0 +int color abc_background_cache_hint_selector_material_light 0x0 +int color abc_btn_colored_borderless_text_material 0x0 +int color abc_btn_colored_text_material 0x0 +int color abc_color_highlight_material 0x0 +int color abc_hint_foreground_material_dark 0x0 +int color abc_hint_foreground_material_light 0x0 +int color abc_input_method_navigation_guard 0x0 +int color abc_primary_text_disable_only_material_dark 0x0 +int color abc_primary_text_disable_only_material_light 0x0 +int color abc_primary_text_material_dark 0x0 +int color abc_primary_text_material_light 0x0 +int color abc_search_url_text 0x0 +int color abc_search_url_text_normal 0x0 +int color abc_search_url_text_pressed 0x0 +int color abc_search_url_text_selected 0x0 +int color abc_secondary_text_material_dark 0x0 +int color abc_secondary_text_material_light 0x0 +int color abc_tint_btn_checkable 0x0 +int color abc_tint_default 0x0 +int color abc_tint_edittext 0x0 +int color abc_tint_seek_thumb 0x0 +int color abc_tint_spinner 0x0 +int color abc_tint_switch_track 0x0 +int color accent_material_dark 0x0 +int color accent_material_light 0x0 +int color background_floating_material_dark 0x0 +int color background_floating_material_light 0x0 +int color background_material_dark 0x0 +int color background_material_light 0x0 +int color bright_foreground_disabled_material_dark 0x0 +int color bright_foreground_disabled_material_light 0x0 +int color bright_foreground_inverse_material_dark 0x0 +int color bright_foreground_inverse_material_light 0x0 +int color bright_foreground_material_dark 0x0 +int color bright_foreground_material_light 0x0 +int color button_material_dark 0x0 +int color button_material_light 0x0 +int color cardview_dark_background 0x0 +int color cardview_light_background 0x0 +int color cardview_shadow_end_color 0x0 +int color cardview_shadow_start_color 0x0 +int color colorAccent 0x0 +int color colorPrimary 0x0 +int color colorPrimaryDark 0x0 +int color design_bottom_navigation_shadow_color 0x0 +int color design_default_color_primary 0x0 +int color design_default_color_primary_dark 0x0 +int color design_error 0x0 +int color design_fab_shadow_end_color 0x0 +int color design_fab_shadow_mid_color 0x0 +int color design_fab_shadow_start_color 0x0 +int color design_fab_stroke_end_inner_color 0x0 +int color design_fab_stroke_end_outer_color 0x0 +int color design_fab_stroke_top_inner_color 0x0 +int color design_fab_stroke_top_outer_color 0x0 +int color design_snackbar_background_color 0x0 +int color design_tint_password_toggle 0x0 +int color dim_foreground_dark 0x0 +int color dim_foreground_disabled_material_dark 0x0 +int color dim_foreground_disabled_material_light 0x0 +int color dim_foreground_material_dark 0x0 +int color dim_foreground_material_light 0x0 +int color error_color_material 0x0 +int color error_color_material_dark 0x0 +int color error_color_material_light 0x0 +int color foreground_material_dark 0x0 +int color foreground_material_light 0x0 +int color highlighted_text_material_dark 0x0 +int color highlighted_text_material_light 0x0 +int color loading_color 0x0 +int color material_blue_grey_800 0x0 +int color material_blue_grey_900 0x0 +int color material_blue_grey_950 0x0 +int color material_deep_teal_200 0x0 +int color material_deep_teal_500 0x0 +int color material_grey_100 0x0 +int color material_grey_300 0x0 +int color material_grey_50 0x0 +int color material_grey_600 0x0 +int color material_grey_800 0x0 +int color material_grey_850 0x0 +int color material_grey_900 0x0 +int color mtrl_bottom_nav_colored_item_tint 0x0 +int color mtrl_bottom_nav_item_tint 0x0 +int color mtrl_btn_bg_color_disabled 0x0 +int color mtrl_btn_bg_color_selector 0x0 +int color mtrl_btn_ripple_color 0x0 +int color mtrl_btn_stroke_color_selector 0x0 +int color mtrl_btn_text_btn_ripple_color 0x0 +int color mtrl_btn_text_color_disabled 0x0 +int color mtrl_btn_text_color_selector 0x0 +int color mtrl_btn_transparent_bg_color 0x0 +int color mtrl_chip_background_color 0x0 +int color mtrl_chip_close_icon_tint 0x0 +int color mtrl_chip_ripple_color 0x0 +int color mtrl_chip_text_color 0x0 +int color mtrl_fab_ripple_color 0x0 +int color mtrl_scrim_color 0x0 +int color mtrl_tabs_colored_ripple_color 0x0 +int color mtrl_tabs_icon_color_selector 0x0 +int color mtrl_tabs_icon_color_selector_colored 0x0 +int color mtrl_tabs_legacy_text_color_selector 0x0 +int color mtrl_tabs_ripple_color 0x0 +int color mtrl_text_btn_text_color_selector 0x0 +int color mtrl_textinput_default_box_stroke_color 0x0 +int color mtrl_textinput_disabled_color 0x0 +int color mtrl_textinput_filled_box_default_background_color 0x0 +int color mtrl_textinput_hovered_box_stroke_color 0x0 +int color notification_action_color_filter 0x0 +int color notification_icon_bg_color 0x0 +int color notification_material_background_media_default_color 0x0 +int color primary_dark_material_dark 0x0 +int color primary_dark_material_light 0x0 +int color primary_material_dark 0x0 +int color primary_material_light 0x0 +int color primary_text_default_material_dark 0x0 +int color primary_text_default_material_light 0x0 +int color primary_text_disabled_material_dark 0x0 +int color primary_text_disabled_material_light 0x0 +int color ripple_material_dark 0x0 +int color ripple_material_light 0x0 +int color secondary_text_default_material_dark 0x0 +int color secondary_text_default_material_light 0x0 +int color secondary_text_disabled_material_dark 0x0 +int color secondary_text_disabled_material_light 0x0 +int color switch_thumb_disabled_material_dark 0x0 +int color switch_thumb_disabled_material_light 0x0 +int color switch_thumb_material_dark 0x0 +int color switch_thumb_material_light 0x0 +int color switch_thumb_normal_material_dark 0x0 +int color switch_thumb_normal_material_light 0x0 +int color tooltip_background_dark 0x0 +int color tooltip_background_light 0x0 +int color transparent 0x0 +int dimen abc_action_bar_content_inset_material 0x0 +int dimen abc_action_bar_content_inset_with_nav 0x0 +int dimen abc_action_bar_default_height_material 0x0 +int dimen abc_action_bar_default_padding_end_material 0x0 +int dimen abc_action_bar_default_padding_start_material 0x0 +int dimen abc_action_bar_elevation_material 0x0 +int dimen abc_action_bar_icon_vertical_padding_material 0x0 +int dimen abc_action_bar_overflow_padding_end_material 0x0 +int dimen abc_action_bar_overflow_padding_start_material 0x0 +int dimen abc_action_bar_progress_bar_size 0x0 +int dimen abc_action_bar_stacked_max_height 0x0 +int dimen abc_action_bar_stacked_tab_max_width 0x0 +int dimen abc_action_bar_subtitle_bottom_margin_material 0x0 +int dimen abc_action_bar_subtitle_top_margin_material 0x0 +int dimen abc_action_button_min_height_material 0x0 +int dimen abc_action_button_min_width_material 0x0 +int dimen abc_action_button_min_width_overflow_material 0x0 +int dimen abc_alert_dialog_button_bar_height 0x0 +int dimen abc_alert_dialog_button_dimen 0x0 +int dimen abc_button_inset_horizontal_material 0x0 +int dimen abc_button_inset_vertical_material 0x0 +int dimen abc_button_padding_horizontal_material 0x0 +int dimen abc_button_padding_vertical_material 0x0 +int dimen abc_cascading_menus_min_smallest_width 0x0 +int dimen abc_config_prefDialogWidth 0x0 +int dimen abc_control_corner_material 0x0 +int dimen abc_control_inset_material 0x0 +int dimen abc_control_padding_material 0x0 +int dimen abc_dialog_corner_radius_material 0x0 +int dimen abc_dialog_fixed_height_major 0x0 +int dimen abc_dialog_fixed_height_minor 0x0 +int dimen abc_dialog_fixed_width_major 0x0 +int dimen abc_dialog_fixed_width_minor 0x0 +int dimen abc_dialog_list_padding_bottom_no_buttons 0x0 +int dimen abc_dialog_list_padding_top_no_title 0x0 +int dimen abc_dialog_min_width_major 0x0 +int dimen abc_dialog_min_width_minor 0x0 +int dimen abc_dialog_padding_material 0x0 +int dimen abc_dialog_padding_top_material 0x0 +int dimen abc_dialog_title_divider_material 0x0 +int dimen abc_disabled_alpha_material_dark 0x0 +int dimen abc_disabled_alpha_material_light 0x0 +int dimen abc_dropdownitem_icon_width 0x0 +int dimen abc_dropdownitem_text_padding_left 0x0 +int dimen abc_dropdownitem_text_padding_right 0x0 +int dimen abc_edit_text_inset_bottom_material 0x0 +int dimen abc_edit_text_inset_horizontal_material 0x0 +int dimen abc_edit_text_inset_top_material 0x0 +int dimen abc_floating_window_z 0x0 +int dimen abc_list_item_height_large_material 0x0 +int dimen abc_list_item_height_material 0x0 +int dimen abc_list_item_height_small_material 0x0 +int dimen abc_list_item_padding_horizontal_material 0x0 +int dimen abc_panel_menu_list_width 0x0 +int dimen abc_progress_bar_height_material 0x0 +int dimen abc_search_view_preferred_height 0x0 +int dimen abc_search_view_preferred_width 0x0 +int dimen abc_seekbar_track_background_height_material 0x0 +int dimen abc_seekbar_track_progress_height_material 0x0 +int dimen abc_select_dialog_padding_start_material 0x0 +int dimen abc_switch_padding 0x0 +int dimen abc_text_size_body_1_material 0x0 +int dimen abc_text_size_body_2_material 0x0 +int dimen abc_text_size_button_material 0x0 +int dimen abc_text_size_caption_material 0x0 +int dimen abc_text_size_display_1_material 0x0 +int dimen abc_text_size_display_2_material 0x0 +int dimen abc_text_size_display_3_material 0x0 +int dimen abc_text_size_display_4_material 0x0 +int dimen abc_text_size_headline_material 0x0 +int dimen abc_text_size_large_material 0x0 +int dimen abc_text_size_medium_material 0x0 +int dimen abc_text_size_menu_header_material 0x0 +int dimen abc_text_size_menu_material 0x0 +int dimen abc_text_size_small_material 0x0 +int dimen abc_text_size_subhead_material 0x0 +int dimen abc_text_size_subtitle_material_toolbar 0x0 +int dimen abc_text_size_title_material 0x0 +int dimen abc_text_size_title_material_toolbar 0x0 +int dimen cardview_compat_inset_shadow 0x0 +int dimen cardview_default_elevation 0x0 +int dimen cardview_default_radius 0x0 +int dimen compat_button_inset_horizontal_material 0x0 +int dimen compat_button_inset_vertical_material 0x0 +int dimen compat_button_padding_horizontal_material 0x0 +int dimen compat_button_padding_vertical_material 0x0 +int dimen compat_control_corner_material 0x0 +int dimen compat_notification_large_icon_max_height 0x0 +int dimen compat_notification_large_icon_max_width 0x0 +int dimen design_appbar_elevation 0x0 +int dimen design_bottom_navigation_active_item_max_width 0x0 +int dimen design_bottom_navigation_active_item_min_width 0x0 +int dimen design_bottom_navigation_active_text_size 0x0 +int dimen design_bottom_navigation_elevation 0x0 +int dimen design_bottom_navigation_height 0x0 +int dimen design_bottom_navigation_icon_size 0x0 +int dimen design_bottom_navigation_item_max_width 0x0 +int dimen design_bottom_navigation_item_min_width 0x0 +int dimen design_bottom_navigation_margin 0x0 +int dimen design_bottom_navigation_shadow_height 0x0 +int dimen design_bottom_navigation_text_size 0x0 +int dimen design_bottom_sheet_modal_elevation 0x0 +int dimen design_bottom_sheet_peek_height_min 0x0 +int dimen design_fab_border_width 0x0 +int dimen design_fab_elevation 0x0 +int dimen design_fab_image_size 0x0 +int dimen design_fab_size_mini 0x0 +int dimen design_fab_size_normal 0x0 +int dimen design_fab_translation_z_hovered_focused 0x0 +int dimen design_fab_translation_z_pressed 0x0 +int dimen design_navigation_elevation 0x0 +int dimen design_navigation_icon_padding 0x0 +int dimen design_navigation_icon_size 0x0 +int dimen design_navigation_item_horizontal_padding 0x0 +int dimen design_navigation_item_icon_padding 0x0 +int dimen design_navigation_max_width 0x0 +int dimen design_navigation_padding_bottom 0x0 +int dimen design_navigation_separator_vertical_padding 0x0 +int dimen design_snackbar_action_inline_max_width 0x0 +int dimen design_snackbar_background_corner_radius 0x0 +int dimen design_snackbar_elevation 0x0 +int dimen design_snackbar_extra_spacing_horizontal 0x0 +int dimen design_snackbar_max_width 0x0 +int dimen design_snackbar_min_width 0x0 +int dimen design_snackbar_padding_horizontal 0x0 +int dimen design_snackbar_padding_vertical 0x0 +int dimen design_snackbar_padding_vertical_2lines 0x0 +int dimen design_snackbar_text_size 0x0 +int dimen design_tab_max_width 0x0 +int dimen design_tab_scrollable_min_width 0x0 +int dimen design_tab_text_size 0x0 +int dimen design_tab_text_size_2line 0x0 +int dimen design_textinput_caption_translate_y 0x0 +int dimen disabled_alpha_material_dark 0x0 +int dimen disabled_alpha_material_light 0x0 +int dimen fastscroll_default_thickness 0x0 +int dimen fastscroll_margin 0x0 +int dimen fastscroll_minimum_range 0x0 +int dimen highlight_alpha_material_colored 0x0 +int dimen highlight_alpha_material_dark 0x0 +int dimen highlight_alpha_material_light 0x0 +int dimen hint_alpha_material_dark 0x0 +int dimen hint_alpha_material_light 0x0 +int dimen hint_pressed_alpha_material_dark 0x0 +int dimen hint_pressed_alpha_material_light 0x0 +int dimen item_touch_helper_max_drag_scroll_per_frame 0x0 +int dimen item_touch_helper_swipe_escape_max_velocity 0x0 +int dimen item_touch_helper_swipe_escape_velocity 0x0 +int dimen mtrl_bottomappbar_fabOffsetEndMode 0x0 +int dimen mtrl_bottomappbar_fab_cradle_margin 0x0 +int dimen mtrl_bottomappbar_fab_cradle_rounded_corner_radius 0x0 +int dimen mtrl_bottomappbar_fab_cradle_vertical_offset 0x0 +int dimen mtrl_bottomappbar_height 0x0 +int dimen mtrl_btn_corner_radius 0x0 +int dimen mtrl_btn_dialog_btn_min_width 0x0 +int dimen mtrl_btn_disabled_elevation 0x0 +int dimen mtrl_btn_disabled_z 0x0 +int dimen mtrl_btn_elevation 0x0 +int dimen mtrl_btn_focused_z 0x0 +int dimen mtrl_btn_hovered_z 0x0 +int dimen mtrl_btn_icon_btn_padding_left 0x0 +int dimen mtrl_btn_icon_padding 0x0 +int dimen mtrl_btn_inset 0x0 +int dimen mtrl_btn_letter_spacing 0x0 +int dimen mtrl_btn_padding_bottom 0x0 +int dimen mtrl_btn_padding_left 0x0 +int dimen mtrl_btn_padding_right 0x0 +int dimen mtrl_btn_padding_top 0x0 +int dimen mtrl_btn_pressed_z 0x0 +int dimen mtrl_btn_stroke_size 0x0 +int dimen mtrl_btn_text_btn_icon_padding 0x0 +int dimen mtrl_btn_text_btn_padding_left 0x0 +int dimen mtrl_btn_text_btn_padding_right 0x0 +int dimen mtrl_btn_text_size 0x0 +int dimen mtrl_btn_z 0x0 +int dimen mtrl_card_elevation 0x0 +int dimen mtrl_card_spacing 0x0 +int dimen mtrl_chip_pressed_translation_z 0x0 +int dimen mtrl_chip_text_size 0x0 +int dimen mtrl_fab_elevation 0x0 +int dimen mtrl_fab_translation_z_hovered_focused 0x0 +int dimen mtrl_fab_translation_z_pressed 0x0 +int dimen mtrl_navigation_elevation 0x0 +int dimen mtrl_navigation_item_horizontal_padding 0x0 +int dimen mtrl_navigation_item_icon_padding 0x0 +int dimen mtrl_snackbar_background_corner_radius 0x0 +int dimen mtrl_snackbar_margin 0x0 +int dimen mtrl_textinput_box_bottom_offset 0x0 +int dimen mtrl_textinput_box_corner_radius_medium 0x0 +int dimen mtrl_textinput_box_corner_radius_small 0x0 +int dimen mtrl_textinput_box_label_cutout_padding 0x0 +int dimen mtrl_textinput_box_padding_end 0x0 +int dimen mtrl_textinput_box_stroke_width_default 0x0 +int dimen mtrl_textinput_box_stroke_width_focused 0x0 +int dimen mtrl_textinput_outline_box_expanded_padding 0x0 +int dimen mtrl_toolbar_default_height 0x0 +int dimen notification_action_icon_size 0x0 +int dimen notification_action_text_size 0x0 +int dimen notification_big_circle_margin 0x0 +int dimen notification_content_margin_start 0x0 +int dimen notification_large_icon_height 0x0 +int dimen notification_large_icon_width 0x0 +int dimen notification_main_column_padding_top 0x0 +int dimen notification_media_narrow_margin 0x0 +int dimen notification_right_icon_size 0x0 +int dimen notification_right_side_padding_top 0x0 +int dimen notification_small_icon_background_padding 0x0 +int dimen notification_small_icon_size_as_large 0x0 +int dimen notification_subtext_size 0x0 +int dimen notification_top_pad 0x0 +int dimen notification_top_pad_large_text 0x0 +int dimen subtitle_corner_radius 0x0 +int dimen subtitle_outline_width 0x0 +int dimen subtitle_shadow_offset 0x0 +int dimen subtitle_shadow_radius 0x0 +int dimen tooltip_corner_radius 0x0 +int dimen tooltip_horizontal_padding 0x0 +int dimen tooltip_margin 0x0 +int dimen tooltip_precise_anchor_extra_offset 0x0 +int dimen tooltip_precise_anchor_threshold 0x0 +int dimen tooltip_vertical_padding 0x0 +int dimen tooltip_y_offset_non_touch 0x0 +int dimen tooltip_y_offset_touch 0x0 +int drawable abc_ab_share_pack_mtrl_alpha 0x0 +int drawable abc_action_bar_item_background_material 0x0 +int drawable abc_btn_borderless_material 0x0 +int drawable abc_btn_check_material 0x0 +int drawable abc_btn_check_material_anim 0x0 +int drawable abc_btn_check_to_on_mtrl_000 0x0 +int drawable abc_btn_check_to_on_mtrl_015 0x0 +int drawable abc_btn_colored_material 0x0 +int drawable abc_btn_default_mtrl_shape 0x0 +int drawable abc_btn_radio_material 0x0 +int drawable abc_btn_radio_material_anim 0x0 +int drawable abc_btn_radio_to_on_mtrl_000 0x0 +int drawable abc_btn_radio_to_on_mtrl_015 0x0 +int drawable abc_btn_switch_to_on_mtrl_00001 0x0 +int drawable abc_btn_switch_to_on_mtrl_00012 0x0 +int drawable abc_cab_background_internal_bg 0x0 +int drawable abc_cab_background_top_material 0x0 +int drawable abc_cab_background_top_mtrl_alpha 0x0 +int drawable abc_control_background_material 0x0 +int drawable abc_dialog_material_background 0x0 +int drawable abc_edit_text_material 0x0 +int drawable abc_ic_ab_back_material 0x0 +int drawable abc_ic_arrow_drop_right_black_24dp 0x0 +int drawable abc_ic_clear_material 0x0 +int drawable abc_ic_commit_search_api_mtrl_alpha 0x0 +int drawable abc_ic_go_search_api_material 0x0 +int drawable abc_ic_menu_copy_mtrl_am_alpha 0x0 +int drawable abc_ic_menu_cut_mtrl_alpha 0x0 +int drawable abc_ic_menu_overflow_material 0x0 +int drawable abc_ic_menu_paste_mtrl_am_alpha 0x0 +int drawable abc_ic_menu_selectall_mtrl_alpha 0x0 +int drawable abc_ic_menu_share_mtrl_alpha 0x0 +int drawable abc_ic_search_api_material 0x0 +int drawable abc_ic_star_black_16dp 0x0 +int drawable abc_ic_star_black_36dp 0x0 +int drawable abc_ic_star_black_48dp 0x0 +int drawable abc_ic_star_half_black_16dp 0x0 +int drawable abc_ic_star_half_black_36dp 0x0 +int drawable abc_ic_star_half_black_48dp 0x0 +int drawable abc_ic_voice_search_api_material 0x0 +int drawable abc_item_background_holo_dark 0x0 +int drawable abc_item_background_holo_light 0x0 +int drawable abc_list_divider_material 0x0 +int drawable abc_list_divider_mtrl_alpha 0x0 +int drawable abc_list_focused_holo 0x0 +int drawable abc_list_longpressed_holo 0x0 +int drawable abc_list_pressed_holo_dark 0x0 +int drawable abc_list_pressed_holo_light 0x0 +int drawable abc_list_selector_background_transition_holo_dark 0x0 +int drawable abc_list_selector_background_transition_holo_light 0x0 +int drawable abc_list_selector_disabled_holo_dark 0x0 +int drawable abc_list_selector_disabled_holo_light 0x0 +int drawable abc_list_selector_holo_dark 0x0 +int drawable abc_list_selector_holo_light 0x0 +int drawable abc_menu_hardkey_panel_mtrl_mult 0x0 +int drawable abc_popup_background_mtrl_mult 0x0 +int drawable abc_ratingbar_indicator_material 0x0 +int drawable abc_ratingbar_material 0x0 +int drawable abc_ratingbar_small_material 0x0 +int drawable abc_scrubber_control_off_mtrl_alpha 0x0 +int drawable abc_scrubber_control_to_pressed_mtrl_000 0x0 +int drawable abc_scrubber_control_to_pressed_mtrl_005 0x0 +int drawable abc_scrubber_primary_mtrl_alpha 0x0 +int drawable abc_scrubber_track_mtrl_alpha 0x0 +int drawable abc_seekbar_thumb_material 0x0 +int drawable abc_seekbar_tick_mark_material 0x0 +int drawable abc_seekbar_track_material 0x0 +int drawable abc_spinner_mtrl_am_alpha 0x0 +int drawable abc_spinner_textfield_background_material 0x0 +int drawable abc_switch_thumb_material 0x0 +int drawable abc_switch_track_mtrl_alpha 0x0 +int drawable abc_tab_indicator_material 0x0 +int drawable abc_tab_indicator_mtrl_alpha 0x0 +int drawable abc_text_cursor_material 0x0 +int drawable abc_text_select_handle_left_mtrl_dark 0x0 +int drawable abc_text_select_handle_left_mtrl_light 0x0 +int drawable abc_text_select_handle_middle_mtrl_dark 0x0 +int drawable abc_text_select_handle_middle_mtrl_light 0x0 +int drawable abc_text_select_handle_right_mtrl_dark 0x0 +int drawable abc_text_select_handle_right_mtrl_light 0x0 +int drawable abc_textfield_activated_mtrl_alpha 0x0 +int drawable abc_textfield_default_mtrl_alpha 0x0 +int drawable abc_textfield_search_activated_mtrl_alpha 0x0 +int drawable abc_textfield_search_default_mtrl_alpha 0x0 +int drawable abc_textfield_search_material 0x0 +int drawable abc_vector_test 0x0 +int drawable avd_hide_password 0x0 +int drawable avd_hide_password_1 0x0 +int drawable avd_hide_password_2 0x0 +int drawable avd_hide_password_3 0x0 +int drawable avd_show_password 0x0 +int drawable avd_show_password_1 0x0 +int drawable avd_show_password_2 0x0 +int drawable avd_show_password_3 0x0 +int drawable btn_checkbox_checked_mtrl 0x0 +int drawable btn_checkbox_checked_to_unchecked_mtrl_animation 0x0 +int drawable btn_checkbox_unchecked_mtrl 0x0 +int drawable btn_checkbox_unchecked_to_checked_mtrl_animation 0x0 +int drawable btn_radio_off_mtrl 0x0 +int drawable btn_radio_off_to_on_mtrl_animation 0x0 +int drawable btn_radio_on_mtrl 0x0 +int drawable btn_radio_on_to_off_mtrl_animation 0x0 +int drawable color_progressbar 0x0 +int drawable design_bottom_navigation_item_background 0x0 +int drawable design_fab_background 0x0 +int drawable design_ic_visibility 0x0 +int drawable design_ic_visibility_off 0x0 +int drawable design_password_eye 0x0 +int drawable design_snackbar_background 0x0 +int drawable ic_media_pause 0x0 +int drawable ic_media_play 0x0 +int drawable ic_mtrl_chip_checked_black 0x0 +int drawable ic_mtrl_chip_checked_circle 0x0 +int drawable ic_mtrl_chip_close_circle 0x0 +int drawable ic_rating_star_border 0x0 +int drawable ic_rating_star_solid 0x0 +int drawable mtrl_snackbar_background 0x0 +int drawable mtrl_tabs_default_indicator 0x0 +int drawable navigation_empty_icon 0x0 +int drawable notification_action_background 0x0 +int drawable notification_bg 0x0 +int drawable notification_bg_low 0x0 +int drawable notification_bg_low_normal 0x0 +int drawable notification_bg_low_pressed 0x0 +int drawable notification_bg_normal 0x0 +int drawable notification_bg_normal_pressed 0x0 +int drawable notification_icon_background 0x0 +int drawable notification_template_icon_bg 0x0 +int drawable notification_template_icon_low_bg 0x0 +int drawable notification_tile_bg 0x0 +int drawable notify_panel_notification_icon_bg 0x0 +int drawable spotlight 0x0 +int drawable spotlight_blue 0x0 +int drawable tooltip_frame_dark 0x0 +int drawable tooltip_frame_light 0x0 +int id ALT 0x0 +int id CTRL 0x0 +int id ChasingDots 0x0 +int id Circle 0x0 +int id CubeGrid 0x0 +int id DoubleBounce 0x0 +int id FUNCTION 0x0 +int id FadingCircle 0x0 +int id FoldingCube 0x0 +int id META 0x0 +int id MultiplePulse 0x0 +int id MultiplePulseRing 0x0 +int id Pulse 0x0 +int id PulseRing 0x0 +int id RotatingCircle 0x0 +int id RotatingPlane 0x0 +int id SHIFT 0x0 +int id SYM 0x0 +int id ThreeBounce 0x0 +int id WanderingCubes 0x0 +int id Wave 0x0 +int id accessibility_action_clickable_span 0x0 +int id accessibility_custom_action_0 0x0 +int id accessibility_custom_action_1 0x0 +int id accessibility_custom_action_10 0x0 +int id accessibility_custom_action_11 0x0 +int id accessibility_custom_action_12 0x0 +int id accessibility_custom_action_13 0x0 +int id accessibility_custom_action_14 0x0 +int id accessibility_custom_action_15 0x0 +int id accessibility_custom_action_16 0x0 +int id accessibility_custom_action_17 0x0 +int id accessibility_custom_action_18 0x0 +int id accessibility_custom_action_19 0x0 +int id accessibility_custom_action_2 0x0 +int id accessibility_custom_action_20 0x0 +int id accessibility_custom_action_21 0x0 +int id accessibility_custom_action_22 0x0 +int id accessibility_custom_action_23 0x0 +int id accessibility_custom_action_24 0x0 +int id accessibility_custom_action_25 0x0 +int id accessibility_custom_action_26 0x0 +int id accessibility_custom_action_27 0x0 +int id accessibility_custom_action_28 0x0 +int id accessibility_custom_action_29 0x0 +int id accessibility_custom_action_3 0x0 +int id accessibility_custom_action_30 0x0 +int id accessibility_custom_action_31 0x0 +int id accessibility_custom_action_4 0x0 +int id accessibility_custom_action_5 0x0 +int id accessibility_custom_action_6 0x0 +int id accessibility_custom_action_7 0x0 +int id accessibility_custom_action_8 0x0 +int id accessibility_custom_action_9 0x0 +int id action0 0x0 +int id action_bar 0x0 +int id action_bar_activity_content 0x0 +int id action_bar_container 0x0 +int id action_bar_root 0x0 +int id action_bar_spinner 0x0 +int id action_bar_subtitle 0x0 +int id action_bar_title 0x0 +int id action_container 0x0 +int id action_context_bar 0x0 +int id action_divider 0x0 +int id action_image 0x0 +int id action_menu_divider 0x0 +int id action_menu_presenter 0x0 +int id action_mode_bar 0x0 +int id action_mode_bar_stub 0x0 +int id action_mode_close_button 0x0 +int id action_text 0x0 +int id actions 0x0 +int id activity_chooser_view_content 0x0 +int id add 0x0 +int id alertTitle 0x0 +int id all 0x0 +int id always 0x0 +int id async 0x0 +int id auto 0x0 +int id beginning 0x0 +int id blocking 0x0 +int id bottom 0x0 +int id buttonPanel 0x0 +int id cancel_action 0x0 +int id center 0x0 +int id center_horizontal 0x0 +int id center_vertical 0x0 +int id checkbox 0x0 +int id checked 0x0 +int id chronometer 0x0 +int id clip_horizontal 0x0 +int id clip_vertical 0x0 +int id collapseActionView 0x0 +int id container 0x0 +int id content 0x0 +int id contentPanel 0x0 +int id coordinator 0x0 +int id custom 0x0 +int id customPanel 0x0 +int id decor_content_parent 0x0 +int id default_activity_button 0x0 +int id design_bottom_sheet 0x0 +int id design_menu_item_action_area 0x0 +int id design_menu_item_action_area_stub 0x0 +int id design_menu_item_text 0x0 +int id design_navigation_view 0x0 +int id dialog_button 0x0 +int id disableHome 0x0 +int id edit_query 0x0 +int id end 0x0 +int id end_padder 0x0 +int id enterAlways 0x0 +int id enterAlwaysCollapsed 0x0 +int id exitUntilCollapsed 0x0 +int id expand_activities_button 0x0 +int id expanded_menu 0x0 +int id ffwd 0x0 +int id fill 0x0 +int id fill_horizontal 0x0 +int id fill_vertical 0x0 +int id filled 0x0 +int id fixed 0x0 +int id forever 0x0 +int id fullscreen_custom_content 0x0 +int id ghost_view 0x0 +int id glide_custom_view_target_tag 0x0 +int id group_divider 0x0 +int id gv_emotion 0x0 +int id home 0x0 +int id homeAsUp 0x0 +int id horizontal 0x0 +int id icon 0x0 +int id icon_group 0x0 +int id ifRoom 0x0 +int id image 0x0 +int id info 0x0 +int id italic 0x0 +int id item_touch_helper_previous_elevation 0x0 +int id labeled 0x0 +int id largeLabel 0x0 +int id left 0x0 +int id line1 0x0 +int id line3 0x0 +int id listMode 0x0 +int id list_item 0x0 +int id main_content 0x0 +int id masked 0x0 +int id media_actions 0x0 +int id mediacontroller_progress 0x0 +int id message 0x0 +int id middle 0x0 +int id mini 0x0 +int id mtrl_child_content_container 0x0 +int id mtrl_internal_children_alpha_tag 0x0 +int id multiply 0x0 +int id navigation_header_container 0x0 +int id never 0x0 +int id next 0x0 +int id none 0x0 +int id normal 0x0 +int id notification_background 0x0 +int id notification_main_column 0x0 +int id notification_main_column_container 0x0 +int id off 0x0 +int id on 0x0 +int id outline 0x0 +int id parallax 0x0 +int id parentPanel 0x0 +int id parent_matrix 0x0 +int id pause 0x0 +int id pin 0x0 +int id prev 0x0 +int id progress_circular 0x0 +int id progress_horizontal 0x0 +int id radio 0x0 +int id rew 0x0 +int id right 0x0 +int id right_icon 0x0 +int id right_side 0x0 +int id save_image_matrix 0x0 +int id save_non_transition_alpha 0x0 +int id save_scale_type 0x0 +int id screen 0x0 +int id scroll 0x0 +int id scrollIndicatorDown 0x0 +int id scrollIndicatorUp 0x0 +int id scrollView 0x0 +int id scrollable 0x0 +int id search_badge 0x0 +int id search_bar 0x0 +int id search_button 0x0 +int id search_close_btn 0x0 +int id search_edit_frame 0x0 +int id search_go_btn 0x0 +int id search_mag_icon 0x0 +int id search_plate 0x0 +int id search_src_text 0x0 +int id search_voice_btn 0x0 +int id select_dialog_listview 0x0 +int id selected 0x0 +int id shortcut 0x0 +int id showCustom 0x0 +int id showHome 0x0 +int id showTitle 0x0 +int id smallLabel 0x0 +int id snackbar_action 0x0 +int id snackbar_text 0x0 +int id snap 0x0 +int id spacer 0x0 +int id spin_kit 0x0 +int id split_action_bar 0x0 +int id src_atop 0x0 +int id src_in 0x0 +int id src_over 0x0 +int id start 0x0 +int id status_bar_latest_event_content 0x0 +int id statusbarutil_fake_status_bar_view 0x0 +int id statusbarutil_translucent_view 0x0 +int id stretch 0x0 +int id submenuarrow 0x0 +int id submit_area 0x0 +int id tabMode 0x0 +int id tag_accessibility_actions 0x0 +int id tag_accessibility_clickable_spans 0x0 +int id tag_accessibility_heading 0x0 +int id tag_accessibility_pane_title 0x0 +int id tag_screen_reader_focusable 0x0 +int id tag_transition_group 0x0 +int id tag_unhandled_key_event_manager 0x0 +int id tag_unhandled_key_listeners 0x0 +int id text 0x0 +int id text2 0x0 +int id textSpacerNoButtons 0x0 +int id textSpacerNoTitle 0x0 +int id text_input_password_toggle 0x0 +int id textinput_counter 0x0 +int id textinput_error 0x0 +int id textinput_helper_text 0x0 +int id time 0x0 +int id time_current 0x0 +int id title 0x0 +int id titleDividerNoCustom 0x0 +int id title_template 0x0 +int id top 0x0 +int id topPanel 0x0 +int id touch_outside 0x0 +int id transition_current_scene 0x0 +int id transition_layout_save 0x0 +int id transition_position 0x0 +int id transition_scene_layoutid_cache 0x0 +int id transition_transform 0x0 +int id tv_msg 0x0 +int id unchecked 0x0 +int id uniform 0x0 +int id unlabeled 0x0 +int id up 0x0 +int id useLogo 0x0 +int id vertical 0x0 +int id view_offset_helper 0x0 +int id visible 0x0 +int id webview_player 0x0 +int id withText 0x0 +int id wrap_content 0x0 +int integer abc_config_activityDefaultDur 0x0 +int integer abc_config_activityShortDur 0x0 +int integer app_bar_elevation_anim_duration 0x0 +int integer bottom_sheet_slide_duration 0x0 +int integer cancel_button_image_alpha 0x0 +int integer config_tooltipAnimTime 0x0 +int integer design_snackbar_text_max_lines 0x0 +int integer design_tab_indicator_anim_duration_ms 0x0 +int integer hide_password_duration 0x0 +int integer mtrl_btn_anim_delay_ms 0x0 +int integer mtrl_btn_anim_duration_ms 0x0 +int integer mtrl_chip_anim_duration 0x0 +int integer mtrl_tab_indicator_anim_duration_ms 0x0 +int integer show_password_duration 0x0 +int integer status_bar_notification_info_maxnum 0x0 +int interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 0x0 +int interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 0x0 +int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 0x0 +int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 0x0 +int interpolator btn_radio_to_off_mtrl_animation_interpolator_0 0x0 +int interpolator btn_radio_to_on_mtrl_animation_interpolator_0 0x0 +int interpolator fast_out_slow_in 0x0 +int interpolator mtrl_fast_out_linear_in 0x0 +int interpolator mtrl_fast_out_slow_in 0x0 +int interpolator mtrl_linear 0x0 +int interpolator mtrl_linear_out_slow_in 0x0 +int layout abc_action_bar_title_item 0x0 +int layout abc_action_bar_up_container 0x0 +int layout abc_action_menu_item_layout 0x0 +int layout abc_action_menu_layout 0x0 +int layout abc_action_mode_bar 0x0 +int layout abc_action_mode_close_item_material 0x0 +int layout abc_activity_chooser_view 0x0 +int layout abc_activity_chooser_view_list_item 0x0 +int layout abc_alert_dialog_button_bar_material 0x0 +int layout abc_alert_dialog_material 0x0 +int layout abc_alert_dialog_title_material 0x0 +int layout abc_cascading_menu_item_layout 0x0 +int layout abc_dialog_title_material 0x0 +int layout abc_expanded_menu_layout 0x0 +int layout abc_list_menu_item_checkbox 0x0 +int layout abc_list_menu_item_icon 0x0 +int layout abc_list_menu_item_layout 0x0 +int layout abc_list_menu_item_radio 0x0 +int layout abc_popup_menu_header_item_layout 0x0 +int layout abc_popup_menu_item_layout 0x0 +int layout abc_screen_content_include 0x0 +int layout abc_screen_simple 0x0 +int layout abc_screen_simple_overlay_action_mode 0x0 +int layout abc_screen_toolbar 0x0 +int layout abc_search_dropdown_item_icons_2line 0x0 +int layout abc_search_view 0x0 +int layout abc_select_dialog_material 0x0 +int layout abc_tooltip 0x0 +int layout custom_dialog 0x0 +int layout design_bottom_navigation_item 0x0 +int layout design_bottom_sheet_dialog 0x0 +int layout design_layout_snackbar 0x0 +int layout design_layout_snackbar_include 0x0 +int layout design_layout_tab_icon 0x0 +int layout design_layout_tab_text 0x0 +int layout design_menu_item_action_area 0x0 +int layout design_navigation_item 0x0 +int layout design_navigation_item_header 0x0 +int layout design_navigation_item_separator 0x0 +int layout design_navigation_item_subheader 0x0 +int layout design_navigation_menu 0x0 +int layout design_navigation_menu_item 0x0 +int layout design_text_input_password_icon 0x0 +int layout dialog_loading 0x0 +int layout emotion_grid 0x0 +int layout emotion_item 0x0 +int layout fragment_webview_video 0x0 +int layout listview_footer 0x0 +int layout media_controller 0x0 +int layout mtrl_layout_snackbar 0x0 +int layout mtrl_layout_snackbar_include 0x0 +int layout notification_action 0x0 +int layout notification_action_tombstone 0x0 +int layout notification_media_action 0x0 +int layout notification_media_cancel_action 0x0 +int layout notification_template_big_media 0x0 +int layout notification_template_big_media_custom 0x0 +int layout notification_template_big_media_narrow 0x0 +int layout notification_template_big_media_narrow_custom 0x0 +int layout notification_template_custom_big 0x0 +int layout notification_template_icon_group 0x0 +int layout notification_template_lines_media 0x0 +int layout notification_template_media 0x0 +int layout notification_template_media_custom 0x0 +int layout notification_template_part_chronometer 0x0 +int layout notification_template_part_time 0x0 +int layout select_dialog_item_material 0x0 +int layout select_dialog_multichoice_material 0x0 +int layout select_dialog_singlechoice_material 0x0 +int layout support_simple_spinner_dropdown_item 0x0 +int string abc_action_bar_home_description 0x0 +int string abc_action_bar_up_description 0x0 +int string abc_action_menu_overflow_description 0x0 +int string abc_action_mode_done 0x0 +int string abc_activity_chooser_view_see_all 0x0 +int string abc_activitychooserview_choose_application 0x0 +int string abc_capital_off 0x0 +int string abc_capital_on 0x0 +int string abc_font_family_body_1_material 0x0 +int string abc_font_family_body_2_material 0x0 +int string abc_font_family_button_material 0x0 +int string abc_font_family_caption_material 0x0 +int string abc_font_family_display_1_material 0x0 +int string abc_font_family_display_2_material 0x0 +int string abc_font_family_display_3_material 0x0 +int string abc_font_family_display_4_material 0x0 +int string abc_font_family_headline_material 0x0 +int string abc_font_family_menu_material 0x0 +int string abc_font_family_subhead_material 0x0 +int string abc_font_family_title_material 0x0 +int string abc_menu_alt_shortcut_label 0x0 +int string abc_menu_ctrl_shortcut_label 0x0 +int string abc_menu_delete_shortcut_label 0x0 +int string abc_menu_enter_shortcut_label 0x0 +int string abc_menu_function_shortcut_label 0x0 +int string abc_menu_meta_shortcut_label 0x0 +int string abc_menu_shift_shortcut_label 0x0 +int string abc_menu_space_shortcut_label 0x0 +int string abc_menu_sym_shortcut_label 0x0 +int string abc_prepend_shortcut_label 0x0 +int string abc_search_hint 0x0 +int string abc_searchview_description_clear 0x0 +int string abc_searchview_description_query 0x0 +int string abc_searchview_description_search 0x0 +int string abc_searchview_description_submit 0x0 +int string abc_searchview_description_voice 0x0 +int string abc_shareactionprovider_share_with 0x0 +int string abc_shareactionprovider_share_with_application 0x0 +int string abc_toolbar_collapse_description 0x0 +int string app_name 0x0 +int string appbar_scrolling_view_behavior 0x0 +int string bottom_sheet_behavior 0x0 +int string character_counter_content_description 0x0 +int string character_counter_pattern 0x0 +int string fab_transformation_scrim_behavior 0x0 +int string fab_transformation_sheet_behavior 0x0 +int string hide_bottom_view_on_scroll_behavior 0x0 +int string mtrl_chip_close_icon_content_description 0x0 +int string password_toggle_content_description 0x0 +int string path_password_eye 0x0 +int string path_password_eye_mask_strike_through 0x0 +int string path_password_eye_mask_visible 0x0 +int string path_password_strike_through 0x0 +int string search_menu_title 0x0 +int string status_bar_notification_info_overflow 0x0 +int style AlertDialog_AppCompat 0x0 +int style AlertDialog_AppCompat_Light 0x0 +int style Animation_AppCompat_Dialog 0x0 +int style Animation_AppCompat_DropDownUp 0x0 +int style Animation_AppCompat_Tooltip 0x0 +int style Animation_Design_BottomSheetDialog 0x0 +int style AppBaseTheme 0x0 +int style AppTheme 0x0 +int style Base_AlertDialog_AppCompat 0x0 +int style Base_AlertDialog_AppCompat_Light 0x0 +int style Base_Animation_AppCompat_Dialog 0x0 +int style Base_Animation_AppCompat_DropDownUp 0x0 +int style Base_Animation_AppCompat_Tooltip 0x0 +int style Base_CardView 0x0 +int style Base_DialogWindowTitleBackground_AppCompat 0x0 +int style Base_DialogWindowTitle_AppCompat 0x0 +int style Base_TextAppearance_AppCompat 0x0 +int style Base_TextAppearance_AppCompat_Body1 0x0 +int style Base_TextAppearance_AppCompat_Body2 0x0 +int style Base_TextAppearance_AppCompat_Button 0x0 +int style Base_TextAppearance_AppCompat_Caption 0x0 +int style Base_TextAppearance_AppCompat_Display1 0x0 +int style Base_TextAppearance_AppCompat_Display2 0x0 +int style Base_TextAppearance_AppCompat_Display3 0x0 +int style Base_TextAppearance_AppCompat_Display4 0x0 +int style Base_TextAppearance_AppCompat_Headline 0x0 +int style Base_TextAppearance_AppCompat_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Large 0x0 +int style Base_TextAppearance_AppCompat_Large_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 +int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 +int style Base_TextAppearance_AppCompat_Medium 0x0 +int style Base_TextAppearance_AppCompat_Medium_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Menu 0x0 +int style Base_TextAppearance_AppCompat_SearchResult 0x0 +int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x0 +int style Base_TextAppearance_AppCompat_SearchResult_Title 0x0 +int style Base_TextAppearance_AppCompat_Small 0x0 +int style Base_TextAppearance_AppCompat_Small_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Subhead 0x0 +int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Title 0x0 +int style Base_TextAppearance_AppCompat_Title_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Tooltip 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 +int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 +int style Base_TextAppearance_AppCompat_Widget_Button 0x0 +int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 +int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x0 +int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x0 +int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x0 +int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 +int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 +int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 +int style Base_TextAppearance_AppCompat_Widget_Switch 0x0 +int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 +int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 +int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 +int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 +int style Base_ThemeOverlay_AppCompat 0x0 +int style Base_ThemeOverlay_AppCompat_ActionBar 0x0 +int style Base_ThemeOverlay_AppCompat_Dark 0x0 +int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x0 +int style Base_ThemeOverlay_AppCompat_Dialog 0x0 +int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x0 +int style Base_ThemeOverlay_AppCompat_Light 0x0 +int style Base_ThemeOverlay_MaterialComponents_Dialog 0x0 +int style Base_ThemeOverlay_MaterialComponents_Dialog_Alert 0x0 +int style Base_Theme_AppCompat 0x0 +int style Base_Theme_AppCompat_CompactMenu 0x0 +int style Base_Theme_AppCompat_Dialog 0x0 +int style Base_Theme_AppCompat_DialogWhenLarge 0x0 +int style Base_Theme_AppCompat_Dialog_Alert 0x0 +int style Base_Theme_AppCompat_Dialog_FixedSize 0x0 +int style Base_Theme_AppCompat_Dialog_MinWidth 0x0 +int style Base_Theme_AppCompat_Light 0x0 +int style Base_Theme_AppCompat_Light_DarkActionBar 0x0 +int style Base_Theme_AppCompat_Light_Dialog 0x0 +int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x0 +int style Base_Theme_AppCompat_Light_Dialog_Alert 0x0 +int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x0 +int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x0 +int style Base_Theme_MaterialComponents 0x0 +int style Base_Theme_MaterialComponents_Bridge 0x0 +int style Base_Theme_MaterialComponents_CompactMenu 0x0 +int style Base_Theme_MaterialComponents_Dialog 0x0 +int style Base_Theme_MaterialComponents_DialogWhenLarge 0x0 +int style Base_Theme_MaterialComponents_Dialog_Alert 0x0 +int style Base_Theme_MaterialComponents_Dialog_FixedSize 0x0 +int style Base_Theme_MaterialComponents_Dialog_MinWidth 0x0 +int style Base_Theme_MaterialComponents_Light 0x0 +int style Base_Theme_MaterialComponents_Light_Bridge 0x0 +int style Base_Theme_MaterialComponents_Light_DarkActionBar 0x0 +int style Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge 0x0 +int style Base_Theme_MaterialComponents_Light_Dialog 0x0 +int style Base_Theme_MaterialComponents_Light_DialogWhenLarge 0x0 +int style Base_Theme_MaterialComponents_Light_Dialog_Alert 0x0 +int style Base_Theme_MaterialComponents_Light_Dialog_FixedSize 0x0 +int style Base_Theme_MaterialComponents_Light_Dialog_MinWidth 0x0 +int style Base_V14_ThemeOverlay_MaterialComponents_Dialog 0x0 +int style Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert 0x0 +int style Base_V14_Theme_MaterialComponents 0x0 +int style Base_V14_Theme_MaterialComponents_Bridge 0x0 +int style Base_V14_Theme_MaterialComponents_Dialog 0x0 +int style Base_V14_Theme_MaterialComponents_Light 0x0 +int style Base_V14_Theme_MaterialComponents_Light_Bridge 0x0 +int style Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge 0x0 +int style Base_V14_Theme_MaterialComponents_Light_Dialog 0x0 +int style Base_V14_Widget_Design_AppBarLayout 0x0 +int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x0 +int style Base_V21_Theme_AppCompat 0x0 +int style Base_V21_Theme_AppCompat_Dialog 0x0 +int style Base_V21_Theme_AppCompat_Light 0x0 +int style Base_V21_Theme_AppCompat_Light_Dialog 0x0 +int style Base_V21_Widget_Design_AppBarLayout 0x0 +int style Base_V22_Theme_AppCompat 0x0 +int style Base_V22_Theme_AppCompat_Light 0x0 +int style Base_V23_Theme_AppCompat 0x0 +int style Base_V23_Theme_AppCompat_Light 0x0 +int style Base_V26_Theme_AppCompat 0x0 +int style Base_V26_Theme_AppCompat_Light 0x0 +int style Base_V26_Widget_AppCompat_Toolbar 0x0 +int style Base_V26_Widget_Design_AppBarLayout 0x0 +int style Base_V28_Theme_AppCompat 0x0 +int style Base_V28_Theme_AppCompat_Light 0x0 +int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x0 +int style Base_V7_Theme_AppCompat 0x0 +int style Base_V7_Theme_AppCompat_Dialog 0x0 +int style Base_V7_Theme_AppCompat_Light 0x0 +int style Base_V7_Theme_AppCompat_Light_Dialog 0x0 +int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x0 +int style Base_V7_Widget_AppCompat_EditText 0x0 +int style Base_V7_Widget_AppCompat_Toolbar 0x0 +int style Base_Widget_AppCompat_ActionBar 0x0 +int style Base_Widget_AppCompat_ActionBar_Solid 0x0 +int style Base_Widget_AppCompat_ActionBar_TabBar 0x0 +int style Base_Widget_AppCompat_ActionBar_TabText 0x0 +int style Base_Widget_AppCompat_ActionBar_TabView 0x0 +int style Base_Widget_AppCompat_ActionButton 0x0 +int style Base_Widget_AppCompat_ActionButton_CloseMode 0x0 +int style Base_Widget_AppCompat_ActionButton_Overflow 0x0 +int style Base_Widget_AppCompat_ActionMode 0x0 +int style Base_Widget_AppCompat_ActivityChooserView 0x0 +int style Base_Widget_AppCompat_AutoCompleteTextView 0x0 +int style Base_Widget_AppCompat_Button 0x0 +int style Base_Widget_AppCompat_ButtonBar 0x0 +int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x0 +int style Base_Widget_AppCompat_Button_Borderless 0x0 +int style Base_Widget_AppCompat_Button_Borderless_Colored 0x0 +int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 +int style Base_Widget_AppCompat_Button_Colored 0x0 +int style Base_Widget_AppCompat_Button_Small 0x0 +int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x0 +int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x0 +int style Base_Widget_AppCompat_CompoundButton_Switch 0x0 +int style Base_Widget_AppCompat_DrawerArrowToggle 0x0 +int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x0 +int style Base_Widget_AppCompat_DropDownItem_Spinner 0x0 +int style Base_Widget_AppCompat_EditText 0x0 +int style Base_Widget_AppCompat_ImageButton 0x0 +int style Base_Widget_AppCompat_Light_ActionBar 0x0 +int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x0 +int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x0 +int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x0 +int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 +int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x0 +int style Base_Widget_AppCompat_Light_PopupMenu 0x0 +int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x0 +int style Base_Widget_AppCompat_ListMenuView 0x0 +int style Base_Widget_AppCompat_ListPopupWindow 0x0 +int style Base_Widget_AppCompat_ListView 0x0 +int style Base_Widget_AppCompat_ListView_DropDown 0x0 +int style Base_Widget_AppCompat_ListView_Menu 0x0 +int style Base_Widget_AppCompat_PopupMenu 0x0 +int style Base_Widget_AppCompat_PopupMenu_Overflow 0x0 +int style Base_Widget_AppCompat_PopupWindow 0x0 +int style Base_Widget_AppCompat_ProgressBar 0x0 +int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x0 +int style Base_Widget_AppCompat_RatingBar 0x0 +int style Base_Widget_AppCompat_RatingBar_Indicator 0x0 +int style Base_Widget_AppCompat_RatingBar_Small 0x0 +int style Base_Widget_AppCompat_SearchView 0x0 +int style Base_Widget_AppCompat_SearchView_ActionBar 0x0 +int style Base_Widget_AppCompat_SeekBar 0x0 +int style Base_Widget_AppCompat_SeekBar_Discrete 0x0 +int style Base_Widget_AppCompat_Spinner 0x0 +int style Base_Widget_AppCompat_Spinner_Underlined 0x0 +int style Base_Widget_AppCompat_TextView 0x0 +int style Base_Widget_AppCompat_TextView_SpinnerItem 0x0 +int style Base_Widget_AppCompat_Toolbar 0x0 +int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x0 +int style Base_Widget_Design_AppBarLayout 0x0 +int style Base_Widget_Design_TabLayout 0x0 +int style Base_Widget_MaterialComponents_Chip 0x0 +int style Base_Widget_MaterialComponents_TextInputEditText 0x0 +int style Base_Widget_MaterialComponents_TextInputLayout 0x0 +int style CardView 0x0 +int style CardView_Dark 0x0 +int style CardView_Light 0x0 +int style Dialog 0x0 +int style Platform_AppCompat 0x0 +int style Platform_AppCompat_Light 0x0 +int style Platform_MaterialComponents 0x0 +int style Platform_MaterialComponents_Dialog 0x0 +int style Platform_MaterialComponents_Light 0x0 +int style Platform_MaterialComponents_Light_Dialog 0x0 +int style Platform_ThemeOverlay_AppCompat 0x0 +int style Platform_ThemeOverlay_AppCompat_Dark 0x0 +int style Platform_ThemeOverlay_AppCompat_Light 0x0 +int style Platform_V21_AppCompat 0x0 +int style Platform_V21_AppCompat_Light 0x0 +int style Platform_V25_AppCompat 0x0 +int style Platform_V25_AppCompat_Light 0x0 +int style Platform_Widget_AppCompat_Spinner 0x0 +int style RtlOverlay_DialogWindowTitle_AppCompat 0x0 +int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x0 +int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x0 +int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x0 +int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x0 +int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut 0x0 +int style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow 0x0 +int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x0 +int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title 0x0 +int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x0 +int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x0 +int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x0 +int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x0 +int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x0 +int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x0 +int style RtlUnderlay_Widget_AppCompat_ActionButton 0x0 +int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x0 +int style SlidingDialogAnimation 0x0 +int style SlidingDialogTheme 0x0 +int style SpinKitView 0x0 +int style SpinKitView_ChasingDots 0x0 +int style SpinKitView_Circle 0x0 +int style SpinKitView_CubeGrid 0x0 +int style SpinKitView_DoubleBounce 0x0 +int style SpinKitView_FadingCircle 0x0 +int style SpinKitView_FoldingCube 0x0 +int style SpinKitView_Large 0x0 +int style SpinKitView_Large_ChasingDots 0x0 +int style SpinKitView_Large_Circle 0x0 +int style SpinKitView_Large_CubeGrid 0x0 +int style SpinKitView_Large_DoubleBounce 0x0 +int style SpinKitView_Large_FadingCircle 0x0 +int style SpinKitView_Large_FoldingCube 0x0 +int style SpinKitView_Large_MultiplePulse 0x0 +int style SpinKitView_Large_MultiplePulseRing 0x0 +int style SpinKitView_Large_Pulse 0x0 +int style SpinKitView_Large_PulseRing 0x0 +int style SpinKitView_Large_RotatingCircle 0x0 +int style SpinKitView_Large_RotatingPlane 0x0 +int style SpinKitView_Large_ThreeBounce 0x0 +int style SpinKitView_Large_WanderingCubes 0x0 +int style SpinKitView_Large_Wave 0x0 +int style SpinKitView_MultiplePulse 0x0 +int style SpinKitView_MultiplePulseRing 0x0 +int style SpinKitView_Pulse 0x0 +int style SpinKitView_PulseRing 0x0 +int style SpinKitView_RotatingCircle 0x0 +int style SpinKitView_RotatingPlane 0x0 +int style SpinKitView_Small 0x0 +int style SpinKitView_Small_ChasingDots 0x0 +int style SpinKitView_Small_Circle 0x0 +int style SpinKitView_Small_CubeGrid 0x0 +int style SpinKitView_Small_DoubleBounce 0x0 +int style SpinKitView_Small_FadingCircle 0x0 +int style SpinKitView_Small_FoldingCube 0x0 +int style SpinKitView_Small_MultiplePulse 0x0 +int style SpinKitView_Small_MultiplePulseRing 0x0 +int style SpinKitView_Small_Pulse 0x0 +int style SpinKitView_Small_PulseRing 0x0 +int style SpinKitView_Small_RotatingCircle 0x0 +int style SpinKitView_Small_RotatingPlane 0x0 +int style SpinKitView_Small_ThreeBounce 0x0 +int style SpinKitView_Small_WanderingCubes 0x0 +int style SpinKitView_Small_Wave 0x0 +int style SpinKitView_ThreeBounce 0x0 +int style SpinKitView_WanderingCubes 0x0 +int style SpinKitView_Wave 0x0 +int style TextAppearance_AppCompat 0x0 +int style TextAppearance_AppCompat_Body1 0x0 +int style TextAppearance_AppCompat_Body2 0x0 +int style TextAppearance_AppCompat_Button 0x0 +int style TextAppearance_AppCompat_Caption 0x0 +int style TextAppearance_AppCompat_Display1 0x0 +int style TextAppearance_AppCompat_Display2 0x0 +int style TextAppearance_AppCompat_Display3 0x0 +int style TextAppearance_AppCompat_Display4 0x0 +int style TextAppearance_AppCompat_Headline 0x0 +int style TextAppearance_AppCompat_Inverse 0x0 +int style TextAppearance_AppCompat_Large 0x0 +int style TextAppearance_AppCompat_Large_Inverse 0x0 +int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x0 +int style TextAppearance_AppCompat_Light_SearchResult_Title 0x0 +int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 +int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 +int style TextAppearance_AppCompat_Medium 0x0 +int style TextAppearance_AppCompat_Medium_Inverse 0x0 +int style TextAppearance_AppCompat_Menu 0x0 +int style TextAppearance_AppCompat_SearchResult_Subtitle 0x0 +int style TextAppearance_AppCompat_SearchResult_Title 0x0 +int style TextAppearance_AppCompat_Small 0x0 +int style TextAppearance_AppCompat_Small_Inverse 0x0 +int style TextAppearance_AppCompat_Subhead 0x0 +int style TextAppearance_AppCompat_Subhead_Inverse 0x0 +int style TextAppearance_AppCompat_Title 0x0 +int style TextAppearance_AppCompat_Title_Inverse 0x0 +int style TextAppearance_AppCompat_Tooltip 0x0 +int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 +int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 +int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 +int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 +int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 +int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 +int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x0 +int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 +int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x0 +int style TextAppearance_AppCompat_Widget_Button 0x0 +int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 +int style TextAppearance_AppCompat_Widget_Button_Colored 0x0 +int style TextAppearance_AppCompat_Widget_Button_Inverse 0x0 +int style TextAppearance_AppCompat_Widget_DropDownItem 0x0 +int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 +int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 +int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 +int style TextAppearance_AppCompat_Widget_Switch 0x0 +int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 +int style TextAppearance_Compat_Notification 0x0 +int style TextAppearance_Compat_Notification_Info 0x0 +int style TextAppearance_Compat_Notification_Info_Media 0x0 +int style TextAppearance_Compat_Notification_Line2 0x0 +int style TextAppearance_Compat_Notification_Line2_Media 0x0 +int style TextAppearance_Compat_Notification_Media 0x0 +int style TextAppearance_Compat_Notification_Time 0x0 +int style TextAppearance_Compat_Notification_Time_Media 0x0 +int style TextAppearance_Compat_Notification_Title 0x0 +int style TextAppearance_Compat_Notification_Title_Media 0x0 +int style TextAppearance_Design_CollapsingToolbar_Expanded 0x0 +int style TextAppearance_Design_Counter 0x0 +int style TextAppearance_Design_Counter_Overflow 0x0 +int style TextAppearance_Design_Error 0x0 +int style TextAppearance_Design_HelperText 0x0 +int style TextAppearance_Design_Hint 0x0 +int style TextAppearance_Design_Snackbar_Message 0x0 +int style TextAppearance_Design_Tab 0x0 +int style TextAppearance_MaterialComponents_Body1 0x0 +int style TextAppearance_MaterialComponents_Body2 0x0 +int style TextAppearance_MaterialComponents_Button 0x0 +int style TextAppearance_MaterialComponents_Caption 0x0 +int style TextAppearance_MaterialComponents_Chip 0x0 +int style TextAppearance_MaterialComponents_Headline1 0x0 +int style TextAppearance_MaterialComponents_Headline2 0x0 +int style TextAppearance_MaterialComponents_Headline3 0x0 +int style TextAppearance_MaterialComponents_Headline4 0x0 +int style TextAppearance_MaterialComponents_Headline5 0x0 +int style TextAppearance_MaterialComponents_Headline6 0x0 +int style TextAppearance_MaterialComponents_Overline 0x0 +int style TextAppearance_MaterialComponents_Subtitle1 0x0 +int style TextAppearance_MaterialComponents_Subtitle2 0x0 +int style TextAppearance_MaterialComponents_Tab 0x0 +int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 +int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 +int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 +int style ThemeOverlay_AppCompat 0x0 +int style ThemeOverlay_AppCompat_ActionBar 0x0 +int style ThemeOverlay_AppCompat_Dark 0x0 +int style ThemeOverlay_AppCompat_Dark_ActionBar 0x0 +int style ThemeOverlay_AppCompat_DayNight 0x0 +int style ThemeOverlay_AppCompat_DayNight_ActionBar 0x0 +int style ThemeOverlay_AppCompat_Dialog 0x0 +int style ThemeOverlay_AppCompat_Dialog_Alert 0x0 +int style ThemeOverlay_AppCompat_Light 0x0 +int style ThemeOverlay_MaterialComponents 0x0 +int style ThemeOverlay_MaterialComponents_ActionBar 0x0 +int style ThemeOverlay_MaterialComponents_Dark 0x0 +int style ThemeOverlay_MaterialComponents_Dark_ActionBar 0x0 +int style ThemeOverlay_MaterialComponents_Dialog 0x0 +int style ThemeOverlay_MaterialComponents_Dialog_Alert 0x0 +int style ThemeOverlay_MaterialComponents_Light 0x0 +int style ThemeOverlay_MaterialComponents_TextInputEditText 0x0 +int style ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox 0x0 +int style ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense 0x0 +int style ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox 0x0 +int style ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense 0x0 +int style Theme_AppCompat 0x0 +int style Theme_AppCompat_CompactMenu 0x0 +int style Theme_AppCompat_DayNight 0x0 +int style Theme_AppCompat_DayNight_DarkActionBar 0x0 +int style Theme_AppCompat_DayNight_Dialog 0x0 +int style Theme_AppCompat_DayNight_DialogWhenLarge 0x0 +int style Theme_AppCompat_DayNight_Dialog_Alert 0x0 +int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x0 +int style Theme_AppCompat_DayNight_NoActionBar 0x0 +int style Theme_AppCompat_Dialog 0x0 +int style Theme_AppCompat_DialogWhenLarge 0x0 +int style Theme_AppCompat_Dialog_Alert 0x0 +int style Theme_AppCompat_Dialog_MinWidth 0x0 +int style Theme_AppCompat_Light 0x0 +int style Theme_AppCompat_Light_DarkActionBar 0x0 +int style Theme_AppCompat_Light_Dialog 0x0 +int style Theme_AppCompat_Light_DialogWhenLarge 0x0 +int style Theme_AppCompat_Light_Dialog_Alert 0x0 +int style Theme_AppCompat_Light_Dialog_MinWidth 0x0 +int style Theme_AppCompat_Light_NoActionBar 0x0 +int style Theme_AppCompat_NoActionBar 0x0 +int style Theme_Design 0x0 +int style Theme_Design_BottomSheetDialog 0x0 +int style Theme_Design_Light 0x0 +int style Theme_Design_Light_BottomSheetDialog 0x0 +int style Theme_Design_Light_NoActionBar 0x0 +int style Theme_Design_NoActionBar 0x0 +int style Theme_MaterialComponents 0x0 +int style Theme_MaterialComponents_BottomSheetDialog 0x0 +int style Theme_MaterialComponents_Bridge 0x0 +int style Theme_MaterialComponents_CompactMenu 0x0 +int style Theme_MaterialComponents_Dialog 0x0 +int style Theme_MaterialComponents_DialogWhenLarge 0x0 +int style Theme_MaterialComponents_Dialog_Alert 0x0 +int style Theme_MaterialComponents_Dialog_MinWidth 0x0 +int style Theme_MaterialComponents_Light 0x0 +int style Theme_MaterialComponents_Light_BottomSheetDialog 0x0 +int style Theme_MaterialComponents_Light_Bridge 0x0 +int style Theme_MaterialComponents_Light_DarkActionBar 0x0 +int style Theme_MaterialComponents_Light_DarkActionBar_Bridge 0x0 +int style Theme_MaterialComponents_Light_Dialog 0x0 +int style Theme_MaterialComponents_Light_DialogWhenLarge 0x0 +int style Theme_MaterialComponents_Light_Dialog_Alert 0x0 +int style Theme_MaterialComponents_Light_Dialog_MinWidth 0x0 +int style Theme_MaterialComponents_Light_NoActionBar 0x0 +int style Theme_MaterialComponents_Light_NoActionBar_Bridge 0x0 +int style Theme_MaterialComponents_NoActionBar 0x0 +int style Theme_MaterialComponents_NoActionBar_Bridge 0x0 +int style Theme_Sliding_Dialog 0x0 +int style Widget_AppCompat_ActionBar 0x0 +int style Widget_AppCompat_ActionBar_Solid 0x0 +int style Widget_AppCompat_ActionBar_TabBar 0x0 +int style Widget_AppCompat_ActionBar_TabText 0x0 +int style Widget_AppCompat_ActionBar_TabView 0x0 +int style Widget_AppCompat_ActionButton 0x0 +int style Widget_AppCompat_ActionButton_CloseMode 0x0 +int style Widget_AppCompat_ActionButton_Overflow 0x0 +int style Widget_AppCompat_ActionMode 0x0 +int style Widget_AppCompat_ActivityChooserView 0x0 +int style Widget_AppCompat_AutoCompleteTextView 0x0 +int style Widget_AppCompat_Button 0x0 +int style Widget_AppCompat_ButtonBar 0x0 +int style Widget_AppCompat_ButtonBar_AlertDialog 0x0 +int style Widget_AppCompat_Button_Borderless 0x0 +int style Widget_AppCompat_Button_Borderless_Colored 0x0 +int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 +int style Widget_AppCompat_Button_Colored 0x0 +int style Widget_AppCompat_Button_Small 0x0 +int style Widget_AppCompat_CompoundButton_CheckBox 0x0 +int style Widget_AppCompat_CompoundButton_RadioButton 0x0 +int style Widget_AppCompat_CompoundButton_Switch 0x0 +int style Widget_AppCompat_DrawerArrowToggle 0x0 +int style Widget_AppCompat_DropDownItem_Spinner 0x0 +int style Widget_AppCompat_EditText 0x0 +int style Widget_AppCompat_ImageButton 0x0 +int style Widget_AppCompat_Light_ActionBar 0x0 +int style Widget_AppCompat_Light_ActionBar_Solid 0x0 +int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x0 +int style Widget_AppCompat_Light_ActionBar_TabBar 0x0 +int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x0 +int style Widget_AppCompat_Light_ActionBar_TabText 0x0 +int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 +int style Widget_AppCompat_Light_ActionBar_TabView 0x0 +int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x0 +int style Widget_AppCompat_Light_ActionButton 0x0 +int style Widget_AppCompat_Light_ActionButton_CloseMode 0x0 +int style Widget_AppCompat_Light_ActionButton_Overflow 0x0 +int style Widget_AppCompat_Light_ActionMode_Inverse 0x0 +int style Widget_AppCompat_Light_ActivityChooserView 0x0 +int style Widget_AppCompat_Light_AutoCompleteTextView 0x0 +int style Widget_AppCompat_Light_DropDownItem_Spinner 0x0 +int style Widget_AppCompat_Light_ListPopupWindow 0x0 +int style Widget_AppCompat_Light_ListView_DropDown 0x0 +int style Widget_AppCompat_Light_PopupMenu 0x0 +int style Widget_AppCompat_Light_PopupMenu_Overflow 0x0 +int style Widget_AppCompat_Light_SearchView 0x0 +int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x0 +int style Widget_AppCompat_ListMenuView 0x0 +int style Widget_AppCompat_ListPopupWindow 0x0 +int style Widget_AppCompat_ListView 0x0 +int style Widget_AppCompat_ListView_DropDown 0x0 +int style Widget_AppCompat_ListView_Menu 0x0 +int style Widget_AppCompat_PopupMenu 0x0 +int style Widget_AppCompat_PopupMenu_Overflow 0x0 +int style Widget_AppCompat_PopupWindow 0x0 +int style Widget_AppCompat_ProgressBar 0x0 +int style Widget_AppCompat_ProgressBar_Horizontal 0x0 +int style Widget_AppCompat_RatingBar 0x0 +int style Widget_AppCompat_RatingBar_Indicator 0x0 +int style Widget_AppCompat_RatingBar_Small 0x0 +int style Widget_AppCompat_SearchView 0x0 +int style Widget_AppCompat_SearchView_ActionBar 0x0 +int style Widget_AppCompat_SeekBar 0x0 +int style Widget_AppCompat_SeekBar_Discrete 0x0 +int style Widget_AppCompat_Spinner 0x0 +int style Widget_AppCompat_Spinner_DropDown 0x0 +int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x0 +int style Widget_AppCompat_Spinner_Underlined 0x0 +int style Widget_AppCompat_TextView 0x0 +int style Widget_AppCompat_TextView_SpinnerItem 0x0 +int style Widget_AppCompat_Toolbar 0x0 +int style Widget_AppCompat_Toolbar_Button_Navigation 0x0 +int style Widget_Compat_NotificationActionContainer 0x0 +int style Widget_Compat_NotificationActionText 0x0 +int style Widget_Design_AppBarLayout 0x0 +int style Widget_Design_BottomNavigationView 0x0 +int style Widget_Design_BottomSheet_Modal 0x0 +int style Widget_Design_CollapsingToolbar 0x0 +int style Widget_Design_CoordinatorLayout 0x0 +int style Widget_Design_FloatingActionButton 0x0 +int style Widget_Design_NavigationView 0x0 +int style Widget_Design_ScrimInsetsFrameLayout 0x0 +int style Widget_Design_Snackbar 0x0 +int style Widget_Design_TabLayout 0x0 +int style Widget_Design_TextInputLayout 0x0 +int style Widget_MaterialComponents_BottomAppBar 0x0 +int style Widget_MaterialComponents_BottomAppBar_Colored 0x0 +int style Widget_MaterialComponents_BottomNavigationView 0x0 +int style Widget_MaterialComponents_BottomNavigationView_Colored 0x0 +int style Widget_MaterialComponents_BottomSheet_Modal 0x0 +int style Widget_MaterialComponents_Button 0x0 +int style Widget_MaterialComponents_Button_Icon 0x0 +int style Widget_MaterialComponents_Button_OutlinedButton 0x0 +int style Widget_MaterialComponents_Button_OutlinedButton_Icon 0x0 +int style Widget_MaterialComponents_Button_TextButton 0x0 +int style Widget_MaterialComponents_Button_TextButton_Dialog 0x0 +int style Widget_MaterialComponents_Button_TextButton_Dialog_Icon 0x0 +int style Widget_MaterialComponents_Button_TextButton_Icon 0x0 +int style Widget_MaterialComponents_Button_UnelevatedButton 0x0 +int style Widget_MaterialComponents_Button_UnelevatedButton_Icon 0x0 +int style Widget_MaterialComponents_CardView 0x0 +int style Widget_MaterialComponents_ChipGroup 0x0 +int style Widget_MaterialComponents_Chip_Action 0x0 +int style Widget_MaterialComponents_Chip_Choice 0x0 +int style Widget_MaterialComponents_Chip_Entry 0x0 +int style Widget_MaterialComponents_Chip_Filter 0x0 +int style Widget_MaterialComponents_FloatingActionButton 0x0 +int style Widget_MaterialComponents_NavigationView 0x0 +int style Widget_MaterialComponents_Snackbar 0x0 +int style Widget_MaterialComponents_Snackbar_FullWidth 0x0 +int style Widget_MaterialComponents_TabLayout 0x0 +int style Widget_MaterialComponents_TabLayout_Colored 0x0 +int style Widget_MaterialComponents_TextInputEditText_FilledBox 0x0 +int style Widget_MaterialComponents_TextInputEditText_FilledBox_Dense 0x0 +int style Widget_MaterialComponents_TextInputEditText_OutlinedBox 0x0 +int style Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense 0x0 +int style Widget_MaterialComponents_TextInputLayout_FilledBox 0x0 +int style Widget_MaterialComponents_TextInputLayout_FilledBox_Dense 0x0 +int style Widget_MaterialComponents_TextInputLayout_OutlinedBox 0x0 +int style Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense 0x0 +int style Widget_MaterialComponents_Toolbar 0x0 +int style Widget_Support_CoordinatorLayout 0x0 +int style dialogstyle 0x0 +int[] styleable ActionBar { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable ActionBar_background 0 +int styleable ActionBar_backgroundSplit 1 +int styleable ActionBar_backgroundStacked 2 +int styleable ActionBar_contentInsetEnd 3 +int styleable ActionBar_contentInsetEndWithActions 4 +int styleable ActionBar_contentInsetLeft 5 +int styleable ActionBar_contentInsetRight 6 +int styleable ActionBar_contentInsetStart 7 +int styleable ActionBar_contentInsetStartWithNavigation 8 +int styleable ActionBar_customNavigationLayout 9 +int styleable ActionBar_displayOptions 10 +int styleable ActionBar_divider 11 +int styleable ActionBar_elevation 12 +int styleable ActionBar_height 13 +int styleable ActionBar_hideOnContentScroll 14 +int styleable ActionBar_homeAsUpIndicator 15 +int styleable ActionBar_homeLayout 16 +int styleable ActionBar_icon 17 +int styleable ActionBar_indeterminateProgressStyle 18 +int styleable ActionBar_itemPadding 19 +int styleable ActionBar_logo 20 +int styleable ActionBar_navigationMode 21 +int styleable ActionBar_popupTheme 22 +int styleable ActionBar_progressBarPadding 23 +int styleable ActionBar_progressBarStyle 24 +int styleable ActionBar_subtitle 25 +int styleable ActionBar_subtitleTextStyle 26 +int styleable ActionBar_title 27 +int styleable ActionBar_titleTextStyle 28 +int[] styleable ActionBarLayout { 0x10100b3 } +int styleable ActionBarLayout_android_layout_gravity 0 +int[] styleable ActionMenuItemView { 0x101013f } +int styleable ActionMenuItemView_android_minWidth 0 +int[] styleable ActionMenuView { } +int[] styleable ActionMode { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable ActionMode_background 0 +int styleable ActionMode_backgroundSplit 1 +int styleable ActionMode_closeItemLayout 2 +int styleable ActionMode_height 3 +int styleable ActionMode_subtitleTextStyle 4 +int styleable ActionMode_titleTextStyle 5 +int[] styleable ActivityChooserView { 0x0, 0x0 } +int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0 +int styleable ActivityChooserView_initialActivityCount 1 +int[] styleable AdaptiveListView { 0x0 } +int styleable AdaptiveListView_maxHeight 0 +int[] styleable AlertDialog { 0x10100f2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable AlertDialog_android_layout 0 +int styleable AlertDialog_buttonIconDimen 1 +int styleable AlertDialog_buttonPanelSideLayout 2 +int styleable AlertDialog_listItemLayout 3 +int styleable AlertDialog_listLayout 4 +int styleable AlertDialog_multiChoiceItemLayout 5 +int styleable AlertDialog_showTitle 6 +int styleable AlertDialog_singleChoiceItemLayout 7 +int[] styleable AndRatingBar { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable AndRatingBar_bgColor 0 +int styleable AndRatingBar_bgDrawable 1 +int styleable AndRatingBar_keepOriginColor 2 +int styleable AndRatingBar_right2Left 3 +int styleable AndRatingBar_scaleFactor 4 +int styleable AndRatingBar_starColor 5 +int styleable AndRatingBar_starDrawable 6 +int styleable AndRatingBar_starSpacing 7 +int styleable AndRatingBar_subStarColor 8 +int[] styleable AnimatedStateListDrawableCompat { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } +int styleable AnimatedStateListDrawableCompat_android_constantSize 0 +int styleable AnimatedStateListDrawableCompat_android_dither 1 +int styleable AnimatedStateListDrawableCompat_android_enterFadeDuration 2 +int styleable AnimatedStateListDrawableCompat_android_exitFadeDuration 3 +int styleable AnimatedStateListDrawableCompat_android_variablePadding 4 +int styleable AnimatedStateListDrawableCompat_android_visible 5 +int[] styleable AnimatedStateListDrawableItem { 0x1010199, 0x10100d0 } +int styleable AnimatedStateListDrawableItem_android_drawable 0 +int styleable AnimatedStateListDrawableItem_android_id 1 +int[] styleable AnimatedStateListDrawableTransition { 0x1010199, 0x101044a, 0x101044b, 0x1010449 } +int styleable AnimatedStateListDrawableTransition_android_drawable 0 +int styleable AnimatedStateListDrawableTransition_android_fromId 1 +int styleable AnimatedStateListDrawableTransition_android_reversible 2 +int styleable AnimatedStateListDrawableTransition_android_toId 3 +int[] styleable AppBarLayout { 0x10100d4, 0x1010540, 0x101048f, 0x0, 0x0, 0x0 } +int styleable AppBarLayout_android_background 0 +int styleable AppBarLayout_android_keyboardNavigationCluster 1 +int styleable AppBarLayout_android_touchscreenBlocksFocus 2 +int styleable AppBarLayout_elevation 3 +int styleable AppBarLayout_expanded 4 +int styleable AppBarLayout_liftOnScroll 5 +int[] styleable AppBarLayoutStates { 0x0, 0x0, 0x0, 0x0 } +int styleable AppBarLayoutStates_state_collapsed 0 +int styleable AppBarLayoutStates_state_collapsible 1 +int styleable AppBarLayoutStates_state_liftable 2 +int styleable AppBarLayoutStates_state_lifted 3 +int[] styleable AppBarLayout_Layout { 0x0, 0x0 } +int styleable AppBarLayout_Layout_layout_scrollFlags 0 +int styleable AppBarLayout_Layout_layout_scrollInterpolator 1 +int[] styleable AppCompatImageView { 0x1010119, 0x0, 0x0, 0x0 } +int styleable AppCompatImageView_android_src 0 +int styleable AppCompatImageView_srcCompat 1 +int styleable AppCompatImageView_tint 2 +int styleable AppCompatImageView_tintMode 3 +int[] styleable AppCompatSeekBar { 0x1010142, 0x0, 0x0, 0x0 } +int styleable AppCompatSeekBar_android_thumb 0 +int styleable AppCompatSeekBar_tickMark 1 +int styleable AppCompatSeekBar_tickMarkTint 2 +int styleable AppCompatSeekBar_tickMarkTintMode 3 +int[] styleable AppCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 } +int styleable AppCompatTextHelper_android_drawableBottom 0 +int styleable AppCompatTextHelper_android_drawableEnd 1 +int styleable AppCompatTextHelper_android_drawableLeft 2 +int styleable AppCompatTextHelper_android_drawableRight 3 +int styleable AppCompatTextHelper_android_drawableStart 4 +int styleable AppCompatTextHelper_android_drawableTop 5 +int styleable AppCompatTextHelper_android_textAppearance 6 +int[] styleable AppCompatTextView { 0x1010034, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable AppCompatTextView_android_textAppearance 0 +int styleable AppCompatTextView_autoSizeMaxTextSize 1 +int styleable AppCompatTextView_autoSizeMinTextSize 2 +int styleable AppCompatTextView_autoSizePresetSizes 3 +int styleable AppCompatTextView_autoSizeStepGranularity 4 +int styleable AppCompatTextView_autoSizeTextType 5 +int styleable AppCompatTextView_drawableBottomCompat 6 +int styleable AppCompatTextView_drawableEndCompat 7 +int styleable AppCompatTextView_drawableLeftCompat 8 +int styleable AppCompatTextView_drawableRightCompat 9 +int styleable AppCompatTextView_drawableStartCompat 10 +int styleable AppCompatTextView_drawableTint 11 +int styleable AppCompatTextView_drawableTintMode 12 +int styleable AppCompatTextView_drawableTopCompat 13 +int styleable AppCompatTextView_firstBaselineToTopHeight 14 +int styleable AppCompatTextView_fontFamily 15 +int styleable AppCompatTextView_fontVariationSettings 16 +int styleable AppCompatTextView_lastBaselineToBottomHeight 17 +int styleable AppCompatTextView_lineHeight 18 +int styleable AppCompatTextView_textAllCaps 19 +int styleable AppCompatTextView_textLocale 20 +int[] styleable AppCompatTheme { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10100ae, 0x1010057, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable AppCompatTheme_actionBarDivider 0 +int styleable AppCompatTheme_actionBarItemBackground 1 +int styleable AppCompatTheme_actionBarPopupTheme 2 +int styleable AppCompatTheme_actionBarSize 3 +int styleable AppCompatTheme_actionBarSplitStyle 4 +int styleable AppCompatTheme_actionBarStyle 5 +int styleable AppCompatTheme_actionBarTabBarStyle 6 +int styleable AppCompatTheme_actionBarTabStyle 7 +int styleable AppCompatTheme_actionBarTabTextStyle 8 +int styleable AppCompatTheme_actionBarTheme 9 +int styleable AppCompatTheme_actionBarWidgetTheme 10 +int styleable AppCompatTheme_actionButtonStyle 11 +int styleable AppCompatTheme_actionDropDownStyle 12 +int styleable AppCompatTheme_actionMenuTextAppearance 13 +int styleable AppCompatTheme_actionMenuTextColor 14 +int styleable AppCompatTheme_actionModeBackground 15 +int styleable AppCompatTheme_actionModeCloseButtonStyle 16 +int styleable AppCompatTheme_actionModeCloseDrawable 17 +int styleable AppCompatTheme_actionModeCopyDrawable 18 +int styleable AppCompatTheme_actionModeCutDrawable 19 +int styleable AppCompatTheme_actionModeFindDrawable 20 +int styleable AppCompatTheme_actionModePasteDrawable 21 +int styleable AppCompatTheme_actionModePopupWindowStyle 22 +int styleable AppCompatTheme_actionModeSelectAllDrawable 23 +int styleable AppCompatTheme_actionModeShareDrawable 24 +int styleable AppCompatTheme_actionModeSplitBackground 25 +int styleable AppCompatTheme_actionModeStyle 26 +int styleable AppCompatTheme_actionModeWebSearchDrawable 27 +int styleable AppCompatTheme_actionOverflowButtonStyle 28 +int styleable AppCompatTheme_actionOverflowMenuStyle 29 +int styleable AppCompatTheme_activityChooserViewStyle 30 +int styleable AppCompatTheme_alertDialogButtonGroupStyle 31 +int styleable AppCompatTheme_alertDialogCenterButtons 32 +int styleable AppCompatTheme_alertDialogStyle 33 +int styleable AppCompatTheme_alertDialogTheme 34 +int styleable AppCompatTheme_android_windowAnimationStyle 35 +int styleable AppCompatTheme_android_windowIsFloating 36 +int styleable AppCompatTheme_autoCompleteTextViewStyle 37 +int styleable AppCompatTheme_borderlessButtonStyle 38 +int styleable AppCompatTheme_buttonBarButtonStyle 39 +int styleable AppCompatTheme_buttonBarNegativeButtonStyle 40 +int styleable AppCompatTheme_buttonBarNeutralButtonStyle 41 +int styleable AppCompatTheme_buttonBarPositiveButtonStyle 42 +int styleable AppCompatTheme_buttonBarStyle 43 +int styleable AppCompatTheme_buttonStyle 44 +int styleable AppCompatTheme_buttonStyleSmall 45 +int styleable AppCompatTheme_checkboxStyle 46 +int styleable AppCompatTheme_checkedTextViewStyle 47 +int styleable AppCompatTheme_colorAccent 48 +int styleable AppCompatTheme_colorBackgroundFloating 49 +int styleable AppCompatTheme_colorButtonNormal 50 +int styleable AppCompatTheme_colorControlActivated 51 +int styleable AppCompatTheme_colorControlHighlight 52 +int styleable AppCompatTheme_colorControlNormal 53 +int styleable AppCompatTheme_colorError 54 +int styleable AppCompatTheme_colorPrimary 55 +int styleable AppCompatTheme_colorPrimaryDark 56 +int styleable AppCompatTheme_colorSwitchThumbNormal 57 +int styleable AppCompatTheme_controlBackground 58 +int styleable AppCompatTheme_dialogCornerRadius 59 +int styleable AppCompatTheme_dialogPreferredPadding 60 +int styleable AppCompatTheme_dialogTheme 61 +int styleable AppCompatTheme_dividerHorizontal 62 +int styleable AppCompatTheme_dividerVertical 63 +int styleable AppCompatTheme_dropDownListViewStyle 64 +int styleable AppCompatTheme_dropdownListPreferredItemHeight 65 +int styleable AppCompatTheme_editTextBackground 66 +int styleable AppCompatTheme_editTextColor 67 +int styleable AppCompatTheme_editTextStyle 68 +int styleable AppCompatTheme_homeAsUpIndicator 69 +int styleable AppCompatTheme_imageButtonStyle 70 +int styleable AppCompatTheme_listChoiceBackgroundIndicator 71 +int styleable AppCompatTheme_listChoiceIndicatorMultipleAnimated 72 +int styleable AppCompatTheme_listChoiceIndicatorSingleAnimated 73 +int styleable AppCompatTheme_listDividerAlertDialog 74 +int styleable AppCompatTheme_listMenuViewStyle 75 +int styleable AppCompatTheme_listPopupWindowStyle 76 +int styleable AppCompatTheme_listPreferredItemHeight 77 +int styleable AppCompatTheme_listPreferredItemHeightLarge 78 +int styleable AppCompatTheme_listPreferredItemHeightSmall 79 +int styleable AppCompatTheme_listPreferredItemPaddingEnd 80 +int styleable AppCompatTheme_listPreferredItemPaddingLeft 81 +int styleable AppCompatTheme_listPreferredItemPaddingRight 82 +int styleable AppCompatTheme_listPreferredItemPaddingStart 83 +int styleable AppCompatTheme_panelBackground 84 +int styleable AppCompatTheme_panelMenuListTheme 85 +int styleable AppCompatTheme_panelMenuListWidth 86 +int styleable AppCompatTheme_popupMenuStyle 87 +int styleable AppCompatTheme_popupWindowStyle 88 +int styleable AppCompatTheme_radioButtonStyle 89 +int styleable AppCompatTheme_ratingBarStyle 90 +int styleable AppCompatTheme_ratingBarStyleIndicator 91 +int styleable AppCompatTheme_ratingBarStyleSmall 92 +int styleable AppCompatTheme_searchViewStyle 93 +int styleable AppCompatTheme_seekBarStyle 94 +int styleable AppCompatTheme_selectableItemBackground 95 +int styleable AppCompatTheme_selectableItemBackgroundBorderless 96 +int styleable AppCompatTheme_spinnerDropDownItemStyle 97 +int styleable AppCompatTheme_spinnerStyle 98 +int styleable AppCompatTheme_switchStyle 99 +int styleable AppCompatTheme_textAppearanceLargePopupMenu 100 +int styleable AppCompatTheme_textAppearanceListItem 101 +int styleable AppCompatTheme_textAppearanceListItemSecondary 102 +int styleable AppCompatTheme_textAppearanceListItemSmall 103 +int styleable AppCompatTheme_textAppearancePopupMenuHeader 104 +int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 105 +int styleable AppCompatTheme_textAppearanceSearchResultTitle 106 +int styleable AppCompatTheme_textAppearanceSmallPopupMenu 107 +int styleable AppCompatTheme_textColorAlertDialogListItem 108 +int styleable AppCompatTheme_textColorSearchUrl 109 +int styleable AppCompatTheme_toolbarNavigationButtonStyle 110 +int styleable AppCompatTheme_toolbarStyle 111 +int styleable AppCompatTheme_tooltipForegroundColor 112 +int styleable AppCompatTheme_tooltipFrameBackground 113 +int styleable AppCompatTheme_viewInflaterClass 114 +int styleable AppCompatTheme_windowActionBar 115 +int styleable AppCompatTheme_windowActionBarOverlay 116 +int styleable AppCompatTheme_windowActionModeOverlay 117 +int styleable AppCompatTheme_windowFixedHeightMajor 118 +int styleable AppCompatTheme_windowFixedHeightMinor 119 +int styleable AppCompatTheme_windowFixedWidthMajor 120 +int styleable AppCompatTheme_windowFixedWidthMinor 121 +int styleable AppCompatTheme_windowMinWidthMajor 122 +int styleable AppCompatTheme_windowMinWidthMinor 123 +int styleable AppCompatTheme_windowNoTitle 124 +int[] styleable ArcMenu { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable ArcMenu_arcRadius 0 +int styleable ArcMenu_closeOnClick 1 +int styleable ArcMenu_duration 2 +int styleable ArcMenu_fromDegrees 3 +int styleable ArcMenu_mainImage 4 +int styleable ArcMenu_toDegrees 5 +int[] styleable BottomAppBar { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable BottomAppBar_backgroundTint 0 +int styleable BottomAppBar_fabAlignmentMode 1 +int styleable BottomAppBar_fabCradleMargin 2 +int styleable BottomAppBar_fabCradleRoundedCornerRadius 3 +int styleable BottomAppBar_fabCradleVerticalOffset 4 +int styleable BottomAppBar_hideOnScroll 5 +int[] styleable BottomNavigationView { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable BottomNavigationView_elevation 0 +int styleable BottomNavigationView_itemBackground 1 +int styleable BottomNavigationView_itemHorizontalTranslationEnabled 2 +int styleable BottomNavigationView_itemIconSize 3 +int styleable BottomNavigationView_itemIconTint 4 +int styleable BottomNavigationView_itemTextAppearanceActive 5 +int styleable BottomNavigationView_itemTextAppearanceInactive 6 +int styleable BottomNavigationView_itemTextColor 7 +int styleable BottomNavigationView_labelVisibilityMode 8 +int styleable BottomNavigationView_menu 9 +int[] styleable BottomSheetBehavior_Layout { 0x0, 0x0, 0x0, 0x0 } +int styleable BottomSheetBehavior_Layout_behavior_fitToContents 0 +int styleable BottomSheetBehavior_Layout_behavior_hideable 1 +int styleable BottomSheetBehavior_Layout_behavior_peekHeight 2 +int styleable BottomSheetBehavior_Layout_behavior_skipCollapsed 3 +int[] styleable ButtonBarLayout { 0x0 } +int styleable ButtonBarLayout_allowStacking 0 +int[] styleable CardView { 0x1010140, 0x101013f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable CardView_android_minHeight 0 +int styleable CardView_android_minWidth 1 +int styleable CardView_cardBackgroundColor 2 +int styleable CardView_cardCornerRadius 3 +int styleable CardView_cardElevation 4 +int styleable CardView_cardMaxElevation 5 +int styleable CardView_cardPreventCornerOverlap 6 +int styleable CardView_cardUseCompatPadding 7 +int styleable CardView_contentPadding 8 +int styleable CardView_contentPaddingBottom 9 +int styleable CardView_contentPaddingLeft 10 +int styleable CardView_contentPaddingRight 11 +int styleable CardView_contentPaddingTop 12 +int[] styleable Chip { 0x10101e5, 0x10100ab, 0x101011f, 0x101014f, 0x1010034, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable Chip_android_checkable 0 +int styleable Chip_android_ellipsize 1 +int styleable Chip_android_maxWidth 2 +int styleable Chip_android_text 3 +int styleable Chip_android_textAppearance 4 +int styleable Chip_checkedIcon 5 +int styleable Chip_checkedIconEnabled 6 +int styleable Chip_checkedIconVisible 7 +int styleable Chip_chipBackgroundColor 8 +int styleable Chip_chipCornerRadius 9 +int styleable Chip_chipEndPadding 10 +int styleable Chip_chipIcon 11 +int styleable Chip_chipIconEnabled 12 +int styleable Chip_chipIconSize 13 +int styleable Chip_chipIconTint 14 +int styleable Chip_chipIconVisible 15 +int styleable Chip_chipMinHeight 16 +int styleable Chip_chipStartPadding 17 +int styleable Chip_chipStrokeColor 18 +int styleable Chip_chipStrokeWidth 19 +int styleable Chip_closeIcon 20 +int styleable Chip_closeIconEnabled 21 +int styleable Chip_closeIconEndPadding 22 +int styleable Chip_closeIconSize 23 +int styleable Chip_closeIconStartPadding 24 +int styleable Chip_closeIconTint 25 +int styleable Chip_closeIconVisible 26 +int styleable Chip_hideMotionSpec 27 +int styleable Chip_iconEndPadding 28 +int styleable Chip_iconStartPadding 29 +int styleable Chip_rippleColor 30 +int styleable Chip_showMotionSpec 31 +int styleable Chip_textEndPadding 32 +int styleable Chip_textStartPadding 33 +int[] styleable ChipGroup { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable ChipGroup_checkedChip 0 +int styleable ChipGroup_chipSpacing 1 +int styleable ChipGroup_chipSpacingHorizontal 2 +int styleable ChipGroup_chipSpacingVertical 3 +int styleable ChipGroup_singleLine 4 +int styleable ChipGroup_singleSelection 5 +int[] styleable CollapsingToolbarLayout { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable CollapsingToolbarLayout_collapsedTitleGravity 0 +int styleable CollapsingToolbarLayout_collapsedTitleTextAppearance 1 +int styleable CollapsingToolbarLayout_contentScrim 2 +int styleable CollapsingToolbarLayout_expandedTitleGravity 3 +int styleable CollapsingToolbarLayout_expandedTitleMargin 4 +int styleable CollapsingToolbarLayout_expandedTitleMarginBottom 5 +int styleable CollapsingToolbarLayout_expandedTitleMarginEnd 6 +int styleable CollapsingToolbarLayout_expandedTitleMarginStart 7 +int styleable CollapsingToolbarLayout_expandedTitleMarginTop 8 +int styleable CollapsingToolbarLayout_expandedTitleTextAppearance 9 +int styleable CollapsingToolbarLayout_scrimAnimationDuration 10 +int styleable CollapsingToolbarLayout_scrimVisibleHeightTrigger 11 +int styleable CollapsingToolbarLayout_statusBarScrim 12 +int styleable CollapsingToolbarLayout_title 13 +int styleable CollapsingToolbarLayout_titleEnabled 14 +int styleable CollapsingToolbarLayout_toolbarId 15 +int[] styleable CollapsingToolbarLayout_Layout { 0x0, 0x0 } +int styleable CollapsingToolbarLayout_Layout_layout_collapseMode 0 +int styleable CollapsingToolbarLayout_Layout_layout_collapseParallaxMultiplier 1 +int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5 } +int styleable ColorStateListItem_alpha 0 +int styleable ColorStateListItem_android_alpha 1 +int styleable ColorStateListItem_android_color 2 +int[] styleable CompoundButton { 0x1010107, 0x0, 0x0, 0x0 } +int styleable CompoundButton_android_button 0 +int styleable CompoundButton_buttonCompat 1 +int styleable CompoundButton_buttonTint 2 +int styleable CompoundButton_buttonTintMode 3 +int[] styleable CoordinatorLayout { 0x0, 0x0 } +int styleable CoordinatorLayout_keylines 0 +int styleable CoordinatorLayout_statusBarBackground 1 +int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable CoordinatorLayout_Layout_android_layout_gravity 0 +int styleable CoordinatorLayout_Layout_layout_anchor 1 +int styleable CoordinatorLayout_Layout_layout_anchorGravity 2 +int styleable CoordinatorLayout_Layout_layout_behavior 3 +int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4 +int styleable CoordinatorLayout_Layout_layout_insetEdge 5 +int styleable CoordinatorLayout_Layout_layout_keyline 6 +int[] styleable DashLine { 0x0, 0x0, 0x0, 0x0 } +int styleable DashLine_dashGap 0 +int styleable DashLine_dashOrientation 1 +int styleable DashLine_dashWidth 2 +int styleable DashLine_lineColor 3 +int[] styleable DesignTheme { 0x0, 0x0, 0x0 } +int styleable DesignTheme_bottomSheetDialogTheme 0 +int styleable DesignTheme_bottomSheetStyle 1 +int styleable DesignTheme_textColorError 2 +int[] styleable DrawerArrowToggle { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable DrawerArrowToggle_arrowHeadLength 0 +int styleable DrawerArrowToggle_arrowShaftLength 1 +int styleable DrawerArrowToggle_barLength 2 +int styleable DrawerArrowToggle_color 3 +int styleable DrawerArrowToggle_drawableSize 4 +int styleable DrawerArrowToggle_gapBetweenBars 5 +int styleable DrawerArrowToggle_spinBars 6 +int styleable DrawerArrowToggle_thickness 7 +int[] styleable Emotion { 0x0, 0x0, 0x0 } +int styleable Emotion_emotionHeight 0 +int styleable Emotion_emotionSize 1 +int styleable Emotion_emotionWidth 2 +int[] styleable FloatingActionButton { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FloatingActionButton_backgroundTint 0 +int styleable FloatingActionButton_backgroundTintMode 1 +int styleable FloatingActionButton_borderWidth 2 +int styleable FloatingActionButton_elevation 3 +int styleable FloatingActionButton_fabCustomSize 4 +int styleable FloatingActionButton_fabSize 5 +int styleable FloatingActionButton_hideMotionSpec 6 +int styleable FloatingActionButton_hoveredFocusedTranslationZ 7 +int styleable FloatingActionButton_maxImageSize 8 +int styleable FloatingActionButton_pressedTranslationZ 9 +int styleable FloatingActionButton_rippleColor 10 +int styleable FloatingActionButton_showMotionSpec 11 +int styleable FloatingActionButton_useCompatPadding 12 +int[] styleable FloatingActionButton_Behavior_Layout { 0x0 } +int styleable FloatingActionButton_Behavior_Layout_behavior_autoHide 0 +int[] styleable FlowLayout { 0x0, 0x0 } +int styleable FlowLayout_itemSpacing 0 +int styleable FlowLayout_lineSpacing 1 +int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FontFamily_fontProviderAuthority 0 +int styleable FontFamily_fontProviderCerts 1 +int styleable FontFamily_fontProviderFetchStrategy 2 +int styleable FontFamily_fontProviderFetchTimeout 3 +int styleable FontFamily_fontProviderPackage 4 +int styleable FontFamily_fontProviderQuery 5 +int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable FontFamilyFont_android_font 0 +int styleable FontFamilyFont_android_fontStyle 1 +int styleable FontFamilyFont_android_fontVariationSettings 2 +int styleable FontFamilyFont_android_fontWeight 3 +int styleable FontFamilyFont_android_ttcIndex 4 +int styleable FontFamilyFont_font 5 +int styleable FontFamilyFont_fontStyle 6 +int styleable FontFamilyFont_fontVariationSettings 7 +int styleable FontFamilyFont_fontWeight 8 +int styleable FontFamilyFont_ttcIndex 9 +int[] styleable ForegroundLinearLayout { 0x1010109, 0x1010200, 0x0 } +int styleable ForegroundLinearLayout_android_foreground 0 +int styleable ForegroundLinearLayout_android_foregroundGravity 1 +int styleable ForegroundLinearLayout_foregroundInsidePadding 2 +int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } +int styleable GradientColor_android_centerColor 0 +int styleable GradientColor_android_centerX 1 +int styleable GradientColor_android_centerY 2 +int styleable GradientColor_android_endColor 3 +int styleable GradientColor_android_endX 4 +int styleable GradientColor_android_endY 5 +int styleable GradientColor_android_gradientRadius 6 +int styleable GradientColor_android_startColor 7 +int styleable GradientColor_android_startX 8 +int styleable GradientColor_android_startY 9 +int styleable GradientColor_android_tileMode 10 +int styleable GradientColor_android_type 11 +int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } +int styleable GradientColorItem_android_color 0 +int styleable GradientColorItem_android_offset 1 +int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x0, 0x0, 0x0, 0x0 } +int styleable LinearLayoutCompat_android_baselineAligned 0 +int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1 +int styleable LinearLayoutCompat_android_gravity 2 +int styleable LinearLayoutCompat_android_orientation 3 +int styleable LinearLayoutCompat_android_weightSum 4 +int styleable LinearLayoutCompat_divider 5 +int styleable LinearLayoutCompat_dividerPadding 6 +int styleable LinearLayoutCompat_measureWithLargestChild 7 +int styleable LinearLayoutCompat_showDividers 8 +int[] styleable LinearLayoutCompat_Layout { 0x10100b3, 0x10100f5, 0x1010181, 0x10100f4 } +int styleable LinearLayoutCompat_Layout_android_layout_gravity 0 +int styleable LinearLayoutCompat_Layout_android_layout_height 1 +int styleable LinearLayoutCompat_Layout_android_layout_weight 2 +int styleable LinearLayoutCompat_Layout_android_layout_width 3 +int[] styleable ListPopupWindow { 0x10102ac, 0x10102ad } +int styleable ListPopupWindow_android_dropDownHorizontalOffset 0 +int styleable ListPopupWindow_android_dropDownVerticalOffset 1 +int[] styleable MaterialButton { 0x10101ba, 0x10101b7, 0x10101b8, 0x10101b9, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable MaterialButton_android_insetBottom 0 +int styleable MaterialButton_android_insetLeft 1 +int styleable MaterialButton_android_insetRight 2 +int styleable MaterialButton_android_insetTop 3 +int styleable MaterialButton_backgroundTint 4 +int styleable MaterialButton_backgroundTintMode 5 +int styleable MaterialButton_cornerRadius 6 +int styleable MaterialButton_icon 7 +int styleable MaterialButton_iconGravity 8 +int styleable MaterialButton_iconPadding 9 +int styleable MaterialButton_iconSize 10 +int styleable MaterialButton_iconTint 11 +int styleable MaterialButton_iconTintMode 12 +int styleable MaterialButton_rippleColor 13 +int styleable MaterialButton_strokeColor 14 +int styleable MaterialButton_strokeWidth 15 +int[] styleable MaterialCardView { 0x0, 0x0 } +int styleable MaterialCardView_strokeColor 0 +int styleable MaterialCardView_strokeWidth 1 +int[] styleable MaterialComponentsTheme { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable MaterialComponentsTheme_bottomSheetDialogTheme 0 +int styleable MaterialComponentsTheme_bottomSheetStyle 1 +int styleable MaterialComponentsTheme_chipGroupStyle 2 +int styleable MaterialComponentsTheme_chipStandaloneStyle 3 +int styleable MaterialComponentsTheme_chipStyle 4 +int styleable MaterialComponentsTheme_colorAccent 5 +int styleable MaterialComponentsTheme_colorBackgroundFloating 6 +int styleable MaterialComponentsTheme_colorPrimary 7 +int styleable MaterialComponentsTheme_colorPrimaryDark 8 +int styleable MaterialComponentsTheme_colorSecondary 9 +int styleable MaterialComponentsTheme_editTextStyle 10 +int styleable MaterialComponentsTheme_floatingActionButtonStyle 11 +int styleable MaterialComponentsTheme_materialButtonStyle 12 +int styleable MaterialComponentsTheme_materialCardViewStyle 13 +int styleable MaterialComponentsTheme_navigationViewStyle 14 +int styleable MaterialComponentsTheme_scrimBackground 15 +int styleable MaterialComponentsTheme_snackbarButtonStyle 16 +int styleable MaterialComponentsTheme_tabStyle 17 +int styleable MaterialComponentsTheme_textAppearanceBody1 18 +int styleable MaterialComponentsTheme_textAppearanceBody2 19 +int styleable MaterialComponentsTheme_textAppearanceButton 20 +int styleable MaterialComponentsTheme_textAppearanceCaption 21 +int styleable MaterialComponentsTheme_textAppearanceHeadline1 22 +int styleable MaterialComponentsTheme_textAppearanceHeadline2 23 +int styleable MaterialComponentsTheme_textAppearanceHeadline3 24 +int styleable MaterialComponentsTheme_textAppearanceHeadline4 25 +int styleable MaterialComponentsTheme_textAppearanceHeadline5 26 +int styleable MaterialComponentsTheme_textAppearanceHeadline6 27 +int styleable MaterialComponentsTheme_textAppearanceOverline 28 +int styleable MaterialComponentsTheme_textAppearanceSubtitle1 29 +int styleable MaterialComponentsTheme_textAppearanceSubtitle2 30 +int styleable MaterialComponentsTheme_textInputStyle 31 +int[] styleable MenuGroup { 0x10101e0, 0x101000e, 0x10100d0, 0x10101de, 0x10101df, 0x1010194 } +int styleable MenuGroup_android_checkableBehavior 0 +int styleable MenuGroup_android_enabled 1 +int styleable MenuGroup_android_id 2 +int styleable MenuGroup_android_menuCategory 3 +int styleable MenuGroup_android_orderInCategory 4 +int styleable MenuGroup_android_visible 5 +int[] styleable MenuItem { 0x0, 0x0, 0x0, 0x0, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable MenuItem_actionLayout 0 +int styleable MenuItem_actionProviderClass 1 +int styleable MenuItem_actionViewClass 2 +int styleable MenuItem_alphabeticModifiers 3 +int styleable MenuItem_android_alphabeticShortcut 4 +int styleable MenuItem_android_checkable 5 +int styleable MenuItem_android_checked 6 +int styleable MenuItem_android_enabled 7 +int styleable MenuItem_android_icon 8 +int styleable MenuItem_android_id 9 +int styleable MenuItem_android_menuCategory 10 +int styleable MenuItem_android_numericShortcut 11 +int styleable MenuItem_android_onClick 12 +int styleable MenuItem_android_orderInCategory 13 +int styleable MenuItem_android_title 14 +int styleable MenuItem_android_titleCondensed 15 +int styleable MenuItem_android_visible 16 +int styleable MenuItem_contentDescription 17 +int styleable MenuItem_iconTint 18 +int styleable MenuItem_iconTintMode 19 +int styleable MenuItem_numericModifiers 20 +int styleable MenuItem_showAsAction 21 +int styleable MenuItem_tooltipText 22 +int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x0, 0x0 } +int styleable MenuView_android_headerBackground 0 +int styleable MenuView_android_horizontalDivider 1 +int styleable MenuView_android_itemBackground 2 +int styleable MenuView_android_itemIconDisabledAlpha 3 +int styleable MenuView_android_itemTextAppearance 4 +int styleable MenuView_android_verticalDivider 5 +int styleable MenuView_android_windowAnimationStyle 6 +int styleable MenuView_preserveIconSpacing 7 +int styleable MenuView_subMenuArrow 8 +int[] styleable NavigationView { 0x10100d4, 0x10100dd, 0x101011f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable NavigationView_android_background 0 +int styleable NavigationView_android_fitsSystemWindows 1 +int styleable NavigationView_android_maxWidth 2 +int styleable NavigationView_elevation 3 +int styleable NavigationView_headerLayout 4 +int styleable NavigationView_itemBackground 5 +int styleable NavigationView_itemHorizontalPadding 6 +int styleable NavigationView_itemIconPadding 7 +int styleable NavigationView_itemIconTint 8 +int styleable NavigationView_itemTextAppearance 9 +int styleable NavigationView_itemTextColor 10 +int styleable NavigationView_menu 11 +int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x0 } +int styleable PopupWindow_android_popupAnimationStyle 0 +int styleable PopupWindow_android_popupBackground 1 +int styleable PopupWindow_overlapAnchor 2 +int[] styleable PopupWindowBackgroundState { 0x0 } +int styleable PopupWindowBackgroundState_state_above_anchor 0 +int[] styleable RatioLayout { 0x0 } +int styleable RatioLayout_ratio 0 +int[] styleable RecycleListView { 0x0, 0x0 } +int styleable RecycleListView_paddingBottomNoButtons 0 +int styleable RecycleListView_paddingTopNoTitle 1 +int[] styleable RecyclerView { 0x10100f1, 0x10100c4, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable RecyclerView_android_descendantFocusability 0 +int styleable RecyclerView_android_orientation 1 +int styleable RecyclerView_fastScrollEnabled 2 +int styleable RecyclerView_fastScrollHorizontalThumbDrawable 3 +int styleable RecyclerView_fastScrollHorizontalTrackDrawable 4 +int styleable RecyclerView_fastScrollVerticalThumbDrawable 5 +int styleable RecyclerView_fastScrollVerticalTrackDrawable 6 +int styleable RecyclerView_layoutManager 7 +int styleable RecyclerView_reverseLayout 8 +int styleable RecyclerView_spanCount 9 +int styleable RecyclerView_stackFromEnd 10 +int[] styleable ScrimInsetsFrameLayout { 0x0 } +int styleable ScrimInsetsFrameLayout_insetForeground 0 +int[] styleable ScrollingViewBehavior_Layout { 0x0 } +int styleable ScrollingViewBehavior_Layout_behavior_overlapTop 0 +int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable SearchView_android_focusable 0 +int styleable SearchView_android_imeOptions 1 +int styleable SearchView_android_inputType 2 +int styleable SearchView_android_maxWidth 3 +int styleable SearchView_closeIcon 4 +int styleable SearchView_commitIcon 5 +int styleable SearchView_defaultQueryHint 6 +int styleable SearchView_goIcon 7 +int styleable SearchView_iconifiedByDefault 8 +int styleable SearchView_layout 9 +int styleable SearchView_queryBackground 10 +int styleable SearchView_queryHint 11 +int styleable SearchView_searchHintIcon 12 +int styleable SearchView_searchIcon 13 +int styleable SearchView_submitBackground 14 +int styleable SearchView_suggestionRowLayout 15 +int styleable SearchView_voiceIcon 16 +int[] styleable ShelvesView { 0x0 } +int styleable ShelvesView_shelfBackground 0 +int[] styleable SlidingMenu { 0x0 } +int styleable SlidingMenu_rightPadding 0 +int[] styleable Snackbar { 0x0, 0x0 } +int styleable Snackbar_snackbarButtonStyle 0 +int styleable Snackbar_snackbarStyle 1 +int[] styleable SnackbarLayout { 0x101011f, 0x0, 0x0 } +int styleable SnackbarLayout_android_maxWidth 0 +int styleable SnackbarLayout_elevation 1 +int styleable SnackbarLayout_maxActionInlineWidth 2 +int[] styleable SpinKitView { 0x0, 0x0 } +int styleable SpinKitView_SpinKit_Color 0 +int styleable SpinKitView_SpinKit_Style 1 +int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x0 } +int styleable Spinner_android_dropDownWidth 0 +int styleable Spinner_android_entries 1 +int styleable Spinner_android_popupBackground 2 +int styleable Spinner_android_prompt 3 +int styleable Spinner_popupTheme 4 +int[] styleable StateListDrawable { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } +int styleable StateListDrawable_android_constantSize 0 +int styleable StateListDrawable_android_dither 1 +int styleable StateListDrawable_android_enterFadeDuration 2 +int styleable StateListDrawable_android_exitFadeDuration 3 +int styleable StateListDrawable_android_variablePadding 4 +int styleable StateListDrawable_android_visible 5 +int[] styleable StateListDrawableItem { 0x1010199 } +int styleable StateListDrawableItem_android_drawable 0 +int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable SwitchCompat_android_textOff 0 +int styleable SwitchCompat_android_textOn 1 +int styleable SwitchCompat_android_thumb 2 +int styleable SwitchCompat_showText 3 +int styleable SwitchCompat_splitTrack 4 +int styleable SwitchCompat_switchMinWidth 5 +int styleable SwitchCompat_switchPadding 6 +int styleable SwitchCompat_switchTextAppearance 7 +int styleable SwitchCompat_thumbTextPadding 8 +int styleable SwitchCompat_thumbTint 9 +int styleable SwitchCompat_thumbTintMode 10 +int styleable SwitchCompat_track 11 +int styleable SwitchCompat_trackTint 12 +int styleable SwitchCompat_trackTintMode 13 +int[] styleable TabItem { 0x1010002, 0x10100f2, 0x101014f } +int styleable TabItem_android_icon 0 +int styleable TabItem_android_layout 1 +int styleable TabItem_android_text 2 +int[] styleable TabLayout { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable TabLayout_tabBackground 0 +int styleable TabLayout_tabContentStart 1 +int styleable TabLayout_tabGravity 2 +int styleable TabLayout_tabIconTint 3 +int styleable TabLayout_tabIconTintMode 4 +int styleable TabLayout_tabIndicator 5 +int styleable TabLayout_tabIndicatorAnimationDuration 6 +int styleable TabLayout_tabIndicatorColor 7 +int styleable TabLayout_tabIndicatorFullWidth 8 +int styleable TabLayout_tabIndicatorGravity 9 +int styleable TabLayout_tabIndicatorHeight 10 +int styleable TabLayout_tabInlineLabel 11 +int styleable TabLayout_tabMaxWidth 12 +int styleable TabLayout_tabMinWidth 13 +int styleable TabLayout_tabMode 14 +int styleable TabLayout_tabPadding 15 +int styleable TabLayout_tabPaddingBottom 16 +int styleable TabLayout_tabPaddingEnd 17 +int styleable TabLayout_tabPaddingStart 18 +int styleable TabLayout_tabPaddingTop 19 +int styleable TabLayout_tabRippleColor 20 +int styleable TabLayout_tabSelectedTextColor 21 +int styleable TabLayout_tabTextAppearance 22 +int styleable TabLayout_tabTextColor 23 +int styleable TabLayout_tabUnboundedRipple 24 +int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010585, 0x1010095, 0x1010097, 0x1010096, 0x0, 0x0, 0x0, 0x0 } +int styleable TextAppearance_android_fontFamily 0 +int styleable TextAppearance_android_shadowColor 1 +int styleable TextAppearance_android_shadowDx 2 +int styleable TextAppearance_android_shadowDy 3 +int styleable TextAppearance_android_shadowRadius 4 +int styleable TextAppearance_android_textColor 5 +int styleable TextAppearance_android_textColorHint 6 +int styleable TextAppearance_android_textColorLink 7 +int styleable TextAppearance_android_textFontWeight 8 +int styleable TextAppearance_android_textSize 9 +int styleable TextAppearance_android_textStyle 10 +int styleable TextAppearance_android_typeface 11 +int styleable TextAppearance_fontFamily 12 +int styleable TextAppearance_fontVariationSettings 13 +int styleable TextAppearance_textAllCaps 14 +int styleable TextAppearance_textLocale 15 +int[] styleable TextInputLayout { 0x1010150, 0x101009a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable TextInputLayout_android_hint 0 +int styleable TextInputLayout_android_textColorHint 1 +int styleable TextInputLayout_boxBackgroundColor 2 +int styleable TextInputLayout_boxBackgroundMode 3 +int styleable TextInputLayout_boxCollapsedPaddingTop 4 +int styleable TextInputLayout_boxCornerRadiusBottomEnd 5 +int styleable TextInputLayout_boxCornerRadiusBottomStart 6 +int styleable TextInputLayout_boxCornerRadiusTopEnd 7 +int styleable TextInputLayout_boxCornerRadiusTopStart 8 +int styleable TextInputLayout_boxStrokeColor 9 +int styleable TextInputLayout_boxStrokeWidth 10 +int styleable TextInputLayout_counterEnabled 11 +int styleable TextInputLayout_counterMaxLength 12 +int styleable TextInputLayout_counterOverflowTextAppearance 13 +int styleable TextInputLayout_counterTextAppearance 14 +int styleable TextInputLayout_errorEnabled 15 +int styleable TextInputLayout_errorTextAppearance 16 +int styleable TextInputLayout_helperText 17 +int styleable TextInputLayout_helperTextEnabled 18 +int styleable TextInputLayout_helperTextTextAppearance 19 +int styleable TextInputLayout_hintAnimationEnabled 20 +int styleable TextInputLayout_hintEnabled 21 +int styleable TextInputLayout_hintTextAppearance 22 +int styleable TextInputLayout_passwordToggleContentDescription 23 +int styleable TextInputLayout_passwordToggleDrawable 24 +int styleable TextInputLayout_passwordToggleEnabled 25 +int styleable TextInputLayout_passwordToggleTint 26 +int styleable TextInputLayout_passwordToggleTintMode 27 +int[] styleable ThemeEnforcement { 0x1010034, 0x0, 0x0 } +int styleable ThemeEnforcement_android_textAppearance 0 +int styleable ThemeEnforcement_enforceMaterialTheme 1 +int styleable ThemeEnforcement_enforceTextAppearance 2 +int[] styleable Toolbar { 0x10100af, 0x1010140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } +int styleable Toolbar_android_gravity 0 +int styleable Toolbar_android_minHeight 1 +int styleable Toolbar_buttonGravity 2 +int styleable Toolbar_collapseContentDescription 3 +int styleable Toolbar_collapseIcon 4 +int styleable Toolbar_contentInsetEnd 5 +int styleable Toolbar_contentInsetEndWithActions 6 +int styleable Toolbar_contentInsetLeft 7 +int styleable Toolbar_contentInsetRight 8 +int styleable Toolbar_contentInsetStart 9 +int styleable Toolbar_contentInsetStartWithNavigation 10 +int styleable Toolbar_logo 11 +int styleable Toolbar_logoDescription 12 +int styleable Toolbar_maxButtonHeight 13 +int styleable Toolbar_menu 14 +int styleable Toolbar_navigationContentDescription 15 +int styleable Toolbar_navigationIcon 16 +int styleable Toolbar_popupTheme 17 +int styleable Toolbar_subtitle 18 +int styleable Toolbar_subtitleTextAppearance 19 +int styleable Toolbar_subtitleTextColor 20 +int styleable Toolbar_title 21 +int styleable Toolbar_titleMargin 22 +int styleable Toolbar_titleMarginBottom 23 +int styleable Toolbar_titleMarginEnd 24 +int styleable Toolbar_titleMarginStart 25 +int styleable Toolbar_titleMarginTop 26 +int styleable Toolbar_titleMargins 27 +int styleable Toolbar_titleTextAppearance 28 +int styleable Toolbar_titleTextColor 29 +int[] styleable View { 0x10100da, 0x1010000, 0x0, 0x0, 0x0 } +int styleable View_android_focusable 0 +int styleable View_android_theme 1 +int styleable View_paddingEnd 2 +int styleable View_paddingStart 3 +int styleable View_theme 4 +int[] styleable ViewBackgroundHelper { 0x10100d4, 0x0, 0x0 } +int styleable ViewBackgroundHelper_android_background 0 +int styleable ViewBackgroundHelper_backgroundTint 1 +int styleable ViewBackgroundHelper_backgroundTintMode 2 +int[] styleable ViewStubCompat { 0x10100d0, 0x10100f3, 0x10100f2 } +int styleable ViewStubCompat_android_id 0 +int styleable ViewStubCompat_android_inflatedId 1 +int styleable ViewStubCompat_android_layout 2 diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_enter.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_enter.xml.flat new file mode 100644 index 0000000..62a1fd1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_enter.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_exit.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_exit.xml.flat new file mode 100644 index 0000000..32ea550 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_bottom_dialog_exit.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_enter.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_enter.xml.flat new file mode 100644 index 0000000..7276be1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_enter.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_exit.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_exit.xml.flat new file mode 100644 index 0000000..c03f49f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/anim_sliding_dialog_exit.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight.png.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight.png.flat new file mode 100644 index 0000000..6dc19d8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight.png.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight_blue.png.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight_blue.png.flat new file mode 100644 index 0000000..623386a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-hdpi-v4_spotlight_blue.png.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_pause.png.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_pause.png.flat new file mode 100644 index 0000000..f33c5a8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_pause.png.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_play.png.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_play.png.flat new file mode 100644 index 0000000..9b91ff9 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable-xhdpi-v4_ic_media_play.png.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable_color_progressbar.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable_color_progressbar.xml.flat new file mode 100644 index 0000000..deac4b1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/drawable_color_progressbar.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_dialog_loading.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_dialog_loading.xml.flat new file mode 100644 index 0000000..983aba1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_dialog_loading.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_grid.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_grid.xml.flat new file mode 100644 index 0000000..7db187c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_grid.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_item.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_item.xml.flat new file mode 100644 index 0000000..066a125 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_emotion_item.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_fragment_webview_video.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_fragment_webview_video.xml.flat new file mode 100644 index 0000000..774da8d --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_fragment_webview_video.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_listview_footer.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_listview_footer.xml.flat new file mode 100644 index 0000000..06d18cb --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_listview_footer.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_media_controller.xml.flat b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_media_controller.xml.flat new file mode 100644 index 0000000..b441021 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/compiled_local_resources/debug/out/layout_media_controller.xml.flat Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml new file mode 100644 index 0000000..a0567bb --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\src\main\jniLibs"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build-types\debug\jniLibs"/></dataSet></merger> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugShaders/merger.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugShaders/merger.xml new file mode 100644 index 0000000..ee59316 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/mergeDebugShaders/merger.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\src\main\shaders"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build-types\debug\shaders"/></dataSet></merger> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugAssets/merger.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugAssets/merger.xml new file mode 100644 index 0000000..48e45f4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugAssets/merger.xml @@ -0,0 +1,2 @@ +<?xml version="1.0" encoding="utf-8"?> +<merger version="3"><dataSet config="main" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets"><file name="css/images/009.gif" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\images\009.gif"/><file name="css/images/android.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\images\android.png"/><file name="css/jquery.confirm/body_bg.jpg" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\jquery.confirm\body_bg.jpg"/><file name="css/jquery.confirm/buttons.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\jquery.confirm\buttons.png"/><file name="css/jquery.confirm/header_bg.jpg" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\jquery.confirm\header_bg.jpg"/><file name="css/jquery.confirm/ie.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\jquery.confirm\ie.png"/><file name="css/jquery.confirm.css" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\jquery.confirm.css"/><file name="css/main.css" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\main.css"/><file name="css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_flat_30_cccccc_40x100.png"/><file name="css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_flat_50_5c5c5c_40x100.png"/><file name="css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_glass_20_555555_1x400.png"/><file name="css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_glass_40_0078a3_1x400.png"/><file name="css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_glass_40_ffc73d_1x400.png"/><file name="css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_gloss-wave_25_333333_500x100.png"/><file name="css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_highlight-soft_80_eeeeee_1x100.png"/><file name="css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_inset-soft_25_000000_1x100.png"/><file name="css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-bg_inset-soft_30_f58400_1x100.png"/><file name="css/ui-darkness/images/ui-icons_222222_256x240.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-icons_222222_256x240.png"/><file name="css/ui-darkness/images/ui-icons_4b8e0b_256x240.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-icons_4b8e0b_256x240.png"/><file name="css/ui-darkness/images/ui-icons_a83300_256x240.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-icons_a83300_256x240.png"/><file name="css/ui-darkness/images/ui-icons_cccccc_256x240.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-icons_cccccc_256x240.png"/><file name="css/ui-darkness/images/ui-icons_ffffff_256x240.png" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\images\ui-icons_ffffff_256x240.png"/><file name="css/ui-darkness/jquery-ui-1.8.23.custom.css" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\css\ui-darkness\jquery-ui-1.8.23.custom.css"/><file name="index.html" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\index.html"/><file name="js/main.js" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\js\main.js"/><file name="lib/jquery-1.7.2.min.js" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\lib\jquery-1.7.2.min.js"/><file name="lib/jquery-ui-1.8.23.custom.min.js" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\lib\jquery-ui-1.8.23.custom.min.js"/><file name="lib/jquery.base64.min.js" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\lib\jquery.base64.min.js"/><file name="lib/jquery.confirm.js" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\assets\lib\jquery.confirm.js"/></source><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build\intermediates\shader_assets\debug\out"/></dataSet><dataSet config="debug" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build-types\debug\assets"/></dataSet></merger> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/compile-file-map.properties b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/compile-file-map.properties new file mode 100644 index 0000000..874b0d4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/compile-file-map.properties @@ -0,0 +1,16 @@ +#Fri Jan 07 18:46:01 CST 2022 +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\drawable-xhdpi\\ic_media_play.png=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\drawable-xhdpi-v4\\ic_media_play.png +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\layout\\media_controller.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\layout\\media_controller.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\layout\\dialog_loading.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\layout\\dialog_loading.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\layout\\fragment_webview_video.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\layout\\fragment_webview_video.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\anim\\bottom_dialog_enter.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\anim\\bottom_dialog_enter.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\drawable-hdpi\\spotlight.png=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\spotlight.png +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\anim\\sliding_dialog_enter.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\anim\\sliding_dialog_enter.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\anim\\sliding_dialog_exit.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\anim\\sliding_dialog_exit.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\layout\\listview_footer.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\layout\\listview_footer.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\layout\\emotion_item.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\layout\\emotion_item.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\layout\\emotion_grid.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\layout\\emotion_grid.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\drawable\\color_progressbar.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\drawable\\color_progressbar.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\anim\\bottom_dialog_exit.xml=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\anim\\bottom_dialog_exit.xml +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\drawable-hdpi\\spotlight_blue.png=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\drawable-hdpi-v4\\spotlight_blue.png +D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\res\\drawable-xhdpi\\ic_media_pause.png=D\:\\workspace\\codegenerator\\src\\main\\resources\\code\\android\\library-common\\build\\intermediates\\packaged_res\\debug\\drawable-xhdpi-v4\\ic_media_pause.png diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v11/values-v11.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v11/values-v11.xml new file mode 100644 index 0000000..5042c49 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v11/values-v11.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> + <!-- API 11 theme customizations can go here. --> + </style> + <style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v14/values-v14.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v14/values-v14.xml new file mode 100644 index 0000000..912b8ca --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values-v14/values-v14.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> + <!-- API 14 theme customizations can go here. --> + </style> + <style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values/values.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values/values.xml new file mode 100644 index 0000000..7be9b6b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merged.dir/values/values.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <attr format="dimension" name="rightPadding"/> + <color name="dim_foreground_dark">#bebebe</color> + <color name="loading_color">#FF03DAC5</color> + <color name="transparent">#00000000</color> + <string name="app_name">LcjianLibrary</string> + <style name="AppBaseTheme" parent="android:Theme.Light"> + <!-- + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + --> + </style> + <style name="AppTheme" parent="AppBaseTheme"> + <!-- All customizations that are NOT specific to a particular API-level can go here. --> + </style> + <style name="Dialog" parent="android:style/Theme.Dialog"> + <item name="android:background">@android:color/transparent</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowNoTitle">true</item> + <item name="android:windowIsFloating">true</item> + </style> + <style name="SlidingDialogAnimation" parent="android:Animation"> + <item name="android:windowEnterAnimation">@anim/sliding_dialog_enter</item> + <item name="android:windowExitAnimation">@anim/sliding_dialog_exit</item> + </style> + <style name="SlidingDialogTheme" parent="android:Theme"> + + </style> + <style name="Theme.Sliding.Dialog" parent="SlidingDialogTheme"> + <item name="android:windowNoTitle">true</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowAnimationStyle">@style/SlidingDialogAnimation</item> + <item name="android:windowCloseOnTouchOutside">true</item> + </style> + <style name="dialogstyle" parent="android:Animation"> + <item name="@android:windowEnterAnimation">@anim/bottom_dialog_enter</item> + <item name="@android:windowExitAnimation">@anim/bottom_dialog_exit</item> + </style> + <declare-styleable name="AdaptiveListView"> + <attr format="dimension|reference" name="maxHeight"/> + </declare-styleable> + <declare-styleable name="ArcMenu"> + <attr format="float|reference" name="fromDegrees"/> + <attr format="float|reference" name="toDegrees"/> + <attr format="dimension|reference" name="arcRadius"/> + <attr format="integer|reference" name="duration"/> + <attr format="boolean" name="closeOnClick"/> + <attr format="reference" name="mainImage"/> + </declare-styleable> + <declare-styleable name="DashLine"> + <attr format="dimension|reference" name="dashWidth"/> + <attr format="dimension|reference" name="dashGap"/> + <attr format="color|reference" name="lineColor"/> + <attr name="dashOrientation"> + <enum name="horizontal" value="0"/> + <enum name="vertical" value="1"/> + </attr> + </declare-styleable> + <declare-styleable name="Emotion"> + <attr format="dimension|reference" name="emotionSize"/> + <attr format="dimension|reference" name="emotionHeight"/> + <attr format="dimension|reference" name="emotionWidth"/> + </declare-styleable> + <declare-styleable name="RatioLayout"> + <attr format="float|reference" name="ratio"/> + </declare-styleable> + <declare-styleable name="ShelvesView"> + <attr format="reference" name="shelfBackground"/> + </declare-styleable> + <declare-styleable name="SlidingMenu"> + <attr name="rightPadding"/> + </declare-styleable> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merger.xml b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merger.xml new file mode 100644 index 0000000..872ed9a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/incremental/packageDebugResources/merger.xml @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="utf-8"?> +<merger version="3"><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res"/><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build\generated\res\rs\debug"/><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build\generated\res\resValues\debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="main" generated-set="main$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res"><file name="bottom_dialog_enter" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\anim\bottom_dialog_enter.xml" qualifiers="" type="anim"/><file name="bottom_dialog_exit" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\anim\bottom_dialog_exit.xml" qualifiers="" type="anim"/><file name="sliding_dialog_enter" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\anim\sliding_dialog_enter.xml" qualifiers="" type="anim"/><file name="sliding_dialog_exit" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\anim\sliding_dialog_exit.xml" qualifiers="" type="anim"/><file name="color_progressbar" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\drawable\color_progressbar.xml" qualifiers="" type="drawable"/><file name="spotlight" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\drawable-hdpi\spotlight.png" qualifiers="hdpi-v4" type="drawable"/><file name="spotlight_blue" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\drawable-hdpi\spotlight_blue.png" qualifiers="hdpi-v4" type="drawable"/><file name="ic_media_pause" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\drawable-xhdpi\ic_media_pause.png" qualifiers="xhdpi-v4" type="drawable"/><file name="ic_media_play" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\drawable-xhdpi\ic_media_play.png" qualifiers="xhdpi-v4" type="drawable"/><file name="dialog_loading" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\layout\dialog_loading.xml" qualifiers="" type="layout"/><file name="emotion_grid" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\layout\emotion_grid.xml" qualifiers="" type="layout"/><file name="emotion_item" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\layout\emotion_item.xml" qualifiers="" type="layout"/><file name="fragment_webview_video" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\layout\fragment_webview_video.xml" qualifiers="" type="layout"/><file name="listview_footer" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\layout\listview_footer.xml" qualifiers="" type="layout"/><file name="media_controller" path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\layout\media_controller.xml" qualifiers="" type="layout"/><file path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\values\attrs.xml" qualifiers=""><declare-styleable name="DashLine"> + <attr format="dimension|reference" name="dashWidth"/> + <attr format="dimension|reference" name="dashGap"/> + <attr format="color|reference" name="lineColor"/> + <attr name="dashOrientation"> + <enum name="horizontal" value="0"/> + <enum name="vertical" value="1"/> + </attr> + </declare-styleable><declare-styleable name="ArcMenu"> + <attr format="float|reference" name="fromDegrees"/> + <attr format="float|reference" name="toDegrees"/> + <attr format="dimension|reference" name="arcRadius"/> + <attr format="integer|reference" name="duration"/> + <attr format="boolean" name="closeOnClick"/> + <attr format="reference" name="mainImage"/> + </declare-styleable><declare-styleable name="ShelvesView"> + <attr format="reference" name="shelfBackground"/> + </declare-styleable><declare-styleable name="Emotion"> + <attr format="dimension|reference" name="emotionSize"/> + <attr format="dimension|reference" name="emotionHeight"/> + <attr format="dimension|reference" name="emotionWidth"/> + </declare-styleable><declare-styleable name="AdaptiveListView"> + <attr format="dimension|reference" name="maxHeight"/> + </declare-styleable><declare-styleable name="RatioLayout"> + <attr format="float|reference" name="ratio"/> + </declare-styleable><attr format="dimension" name="rightPadding"/><declare-styleable name="SlidingMenu"> + <attr name="rightPadding"/> + </declare-styleable></file><file path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\values\colors.xml" qualifiers=""><color name="dim_foreground_dark">#bebebe</color><color name="loading_color">#FF03DAC5</color><color name="transparent">#00000000</color></file><file path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\values\strings.xml" qualifiers=""><string name="app_name">LcjianLibrary</string></file><file path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\values\styles.xml" qualifiers=""><style name="AppBaseTheme" parent="android:Theme.Light"> + + </style><style name="AppTheme" parent="AppBaseTheme"> + + </style><style name="dialogstyle" parent="android:Animation"> + <item name="@android:windowEnterAnimation">@anim/bottom_dialog_enter</item> + <item name="@android:windowExitAnimation">@anim/bottom_dialog_exit</item> + </style><style name="SlidingDialogAnimation" parent="android:Animation"> + <item name="android:windowEnterAnimation">@anim/sliding_dialog_enter</item> + <item name="android:windowExitAnimation">@anim/sliding_dialog_exit</item> + </style><style name="SlidingDialogTheme" parent="android:Theme"> + + </style><style name="Theme.Sliding.Dialog" parent="SlidingDialogTheme"> + <item name="android:windowNoTitle">true</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowAnimationStyle">@style/SlidingDialogAnimation</item> + <item name="android:windowCloseOnTouchOutside">true</item> + </style><style name="Dialog" parent="android:style/Theme.Dialog"> + <item name="android:background">@android:color/transparent</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowNoTitle">true</item> + <item name="android:windowIsFloating">true</item> + </style></file><file path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\values-v11\styles.xml" qualifiers="v11"><style name="AppBaseTheme" parent="android:Theme.Holo.Light"> + + </style><style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style></file><file path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\res\values-v14\styles.xml" qualifiers="v14"><style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> + + </style><style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style></file></source><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build\generated\res\rs\debug"/><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build\generated\res\resValues\debug"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug$Generated" generated="true" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build-types\debug\res"/></dataSet><dataSet aapt-namespace="http://schemas.android.com/apk/res-auto" config="debug" generated-set="debug$Generated" ignore_pattern="!.svn:!.git:!.ds_store:!*.scc:.*:<dir>_*:!CVS:!thumbs.db:!picasa.ini:!*~"><source path="D:\workspace\codegenerator\src\main\resources\code\android\library-common\build-types\debug\res"/></dataSet><mergedItems><configuration qualifiers=""><declare-styleable name="DashLine"> + <attr format="dimension|reference" name="dashWidth"/> + <attr format="dimension|reference" name="dashGap"/> + <attr format="color|reference" name="lineColor"/> + <attr name="dashOrientation"> + <enum name="horizontal" value="0"/> + <enum name="vertical" value="1"/> + </attr> + </declare-styleable><declare-styleable name="SlidingMenu"> + <attr name="rightPadding"/> + </declare-styleable><declare-styleable name="RatioLayout"> + <attr format="float|reference" name="ratio"/> + </declare-styleable><declare-styleable name="ArcMenu"> + <attr format="float|reference" name="fromDegrees"/> + <attr format="float|reference" name="toDegrees"/> + <attr format="dimension|reference" name="arcRadius"/> + <attr format="integer|reference" name="duration"/> + <attr format="boolean" name="closeOnClick"/> + <attr format="reference" name="mainImage"/> + </declare-styleable><declare-styleable name="AdaptiveListView"> + <attr format="dimension|reference" name="maxHeight"/> + </declare-styleable><declare-styleable name="Emotion"> + <attr format="dimension|reference" name="emotionSize"/> + <attr format="dimension|reference" name="emotionHeight"/> + <attr format="dimension|reference" name="emotionWidth"/> + </declare-styleable><declare-styleable name="ShelvesView"> + <attr format="reference" name="shelfBackground"/> + </declare-styleable></configuration></mergedItems></merger> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DatabaseContext.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DatabaseContext.class new file mode 100644 index 0000000..fcb6f54 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DatabaseContext.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DeviceUuidFactory.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DeviceUuidFactory.class new file mode 100644 index 0000000..b8ca1b1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/DeviceUuidFactory.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/Installation.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/Installation.class new file mode 100644 index 0000000..6208ee0 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/Installation.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/PhoneCallReceiver.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/PhoneCallReceiver.class new file mode 100644 index 0000000..6130aa0 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/PhoneCallReceiver.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/RetainViewFragment.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/RetainViewFragment.class new file mode 100644 index 0000000..bbe724e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/RetainViewFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/activity/BaseActivity.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/activity/BaseActivity.class new file mode 100644 index 0000000..d3bfadd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/activity/BaseActivity.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/animation/Rotate3dAnimation.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/animation/Rotate3dAnimation.class new file mode 100644 index 0000000..3671ae1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/animation/Rotate3dAnimation.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$1.class new file mode 100644 index 0000000..1c1c205 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$OnConnectivityChangeListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$OnConnectivityChangeListener.class new file mode 100644 index 0000000..e21a53f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper$OnConnectivityChangeListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper.class new file mode 100644 index 0000000..4f6446c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/ConnectivityChangeHelper.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/CursorLoader.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/CursorLoader.class new file mode 100644 index 0000000..e64448a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/content/CursorLoader.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/BottomDialog.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/BottomDialog.class new file mode 100644 index 0000000..d2630d0 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/BottomDialog.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/DialogUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/DialogUtil.class new file mode 100644 index 0000000..09f35fd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/DialogUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/SlidingDialog.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/SlidingDialog.class new file mode 100644 index 0000000..7bdc0a8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/dialog/SlidingDialog.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CircleDrawable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CircleDrawable.class new file mode 100644 index 0000000..4abbddd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CircleDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable$1.class new file mode 100644 index 0000000..4920ac2 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable.class new file mode 100644 index 0000000..1182c41 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/CrossFadeDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/FastBitmapDrawable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/FastBitmapDrawable.class new file mode 100644 index 0000000..2db3ddd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/FastBitmapDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$LayerState.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$LayerState.class new file mode 100644 index 0000000..e5a3555 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$LayerState.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$Rec.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$Rec.class new file mode 100644 index 0000000..c94bcfd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable$Rec.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable.class new file mode 100644 index 0000000..603c4d8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/LayerDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/SpotlightDrawable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/SpotlightDrawable.class new file mode 100644 index 0000000..f12f409 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/SpotlightDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$1.class new file mode 100644 index 0000000..35d9102 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$TransitionState.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$TransitionState.class new file mode 100644 index 0000000..32d4d48 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable$TransitionState.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable.class new file mode 100644 index 0000000..fda043d --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/drawable/TransitionDrawable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionEditText.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionEditText.class new file mode 100644 index 0000000..03a3da9 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionEditText.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$1.class new file mode 100644 index 0000000..dab4b8e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$EmotionAdapter.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$EmotionAdapter.class new file mode 100644 index 0000000..e6aeee9 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$EmotionAdapter.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$OnEditListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$OnEditListener.class new file mode 100644 index 0000000..f776d02 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment$OnEditListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment.class new file mode 100644 index 0000000..2b5ad59 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionGridFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionHandler.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionHandler.class new file mode 100644 index 0000000..78cab16 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionHandler.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionSpan.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionSpan.class new file mode 100644 index 0000000..93e8adc --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionSpan.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionTextView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionTextView.class new file mode 100644 index 0000000..adfefc1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionTextView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionsFragment.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionsFragment.class new file mode 100644 index 0000000..40d6260 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/emotion/EmotionsFragment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ClipCopyContent.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ClipCopyContent.class new file mode 100644 index 0000000..f34b7f1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ClipCopyContent.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ExpireTimeValue.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ExpireTimeValue.class new file mode 100644 index 0000000..fd37d82 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/ExpireTimeValue.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/IsSeeking.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/IsSeeking.class new file mode 100644 index 0000000..87c212a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/entity/IsSeeking.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$1.class new file mode 100644 index 0000000..c9a1f3a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$2.class new file mode 100644 index 0000000..c958aeb --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$3.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$3.class new file mode 100644 index 0000000..2767522 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$3.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$METHOD.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$METHOD.class new file mode 100644 index 0000000..e64cf53 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils$METHOD.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils.class new file mode 100644 index 0000000..e0b37eb --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/OkHttpUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/GetBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/GetBuilder.class new file mode 100644 index 0000000..19eec5a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/GetBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HasParamsable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HasParamsable.class new file mode 100644 index 0000000..f44a0ad --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HasParamsable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HeadBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HeadBuilder.class new file mode 100644 index 0000000..a58b15c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/HeadBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.class new file mode 100644 index 0000000..be1fcdc --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.class new file mode 100644 index 0000000..ecb3af1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFileBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFileBuilder.class new file mode 100644 index 0000000..0ea9e8f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFileBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder$FileInput.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder$FileInput.class new file mode 100644 index 0000000..bdeedc8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder$FileInput.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder.class new file mode 100644 index 0000000..10edae3 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostFormBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostStringBuilder.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostStringBuilder.class new file mode 100644 index 0000000..348f896 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/builder/PostStringBuilder.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/BitmapCallback.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/BitmapCallback.class new file mode 100644 index 0000000..346856e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/BitmapCallback.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback$1.class new file mode 100644 index 0000000..e05cbfa --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback.class new file mode 100644 index 0000000..4def386 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/Callback.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack$1.class new file mode 100644 index 0000000..739ec46 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack.class new file mode 100644 index 0000000..27199d1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/FileCallBack.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/GenericsCallback.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/GenericsCallback.class new file mode 100644 index 0000000..769ff14 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/GenericsCallback.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/IGenericsSerializator.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/IGenericsSerializator.class new file mode 100644 index 0000000..cd013b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/IGenericsSerializator.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/StringCallback.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/StringCallback.class new file mode 100644 index 0000000..4117225 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/callback/StringCallback.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/CookieJarImpl.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/CookieJarImpl.class new file mode 100644 index 0000000..0edfd32 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/CookieJarImpl.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/CookieStore.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/CookieStore.class new file mode 100644 index 0000000..7c255ea --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/CookieStore.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.class new file mode 100644 index 0000000..7d8744c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.class new file mode 100644 index 0000000..a24f5f0 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.class new file mode 100644 index 0000000..3cc5636 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.class new file mode 100644 index 0000000..b816f28 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$1.class new file mode 100644 index 0000000..8b8f254 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$MyTrustManager.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$MyTrustManager.class new file mode 100644 index 0000000..98b8a34 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$MyTrustManager.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$SSLParams.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$SSLParams.class new file mode 100644 index 0000000..0cd88c6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$SSLParams.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeHostnameVerifier.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeHostnameVerifier.class new file mode 100644 index 0000000..ea6b946 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeHostnameVerifier.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeTrustManager.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeTrustManager.class new file mode 100644 index 0000000..41553d6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils$UnSafeTrustManager.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils.class new file mode 100644 index 0000000..8335a53 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/https/HttpsUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/log/LoggerInterceptor.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/log/LoggerInterceptor.class new file mode 100644 index 0000000..77b8296 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/log/LoggerInterceptor.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$CountingSink.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$CountingSink.class new file mode 100644 index 0000000..74ec63c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$CountingSink.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$Listener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$Listener.class new file mode 100644 index 0000000..624ff22 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody$Listener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody.class new file mode 100644 index 0000000..250da3c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/CountingRequestBody.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/GetRequest.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/GetRequest.class new file mode 100644 index 0000000..f8924cd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/GetRequest.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OkHttpRequest.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OkHttpRequest.class new file mode 100644 index 0000000..83b7122 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OkHttpRequest.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OtherRequest.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OtherRequest.class new file mode 100644 index 0000000..84b28c6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/OtherRequest.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1$1.class new file mode 100644 index 0000000..accdf63 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1.class new file mode 100644 index 0000000..b322d48 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest.class new file mode 100644 index 0000000..1d7e860 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFileRequest.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1$1.class new file mode 100644 index 0000000..37d2083 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1.class new file mode 100644 index 0000000..2cde2e6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest.class new file mode 100644 index 0000000..f000541 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostFormRequest.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostStringRequest.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostStringRequest.class new file mode 100644 index 0000000..24925fb --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/PostStringRequest.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/RequestCall.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/RequestCall.class new file mode 100644 index 0000000..986fce5 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/request/RequestCall.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Exceptions.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Exceptions.class new file mode 100644 index 0000000..8ee2529 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Exceptions.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils$ImageSize.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils$ImageSize.class new file mode 100644 index 0000000..7127e19 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils$ImageSize.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils.class new file mode 100644 index 0000000..57996de --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/ImageUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/L.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/L.class new file mode 100644 index 0000000..4bd973e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/L.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android$MainThreadExecutor.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android$MainThreadExecutor.class new file mode 100644 index 0000000..5aa202e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android$MainThreadExecutor.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android.class new file mode 100644 index 0000000..adc2129 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform$Android.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform.class new file mode 100644 index 0000000..ce11f19 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/okhttp/utils/Platform.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/CheckUpdateService.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/CheckUpdateService.class new file mode 100644 index 0000000..28d84e2 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/CheckUpdateService.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$1.class new file mode 100644 index 0000000..41b1fec --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$2.class new file mode 100644 index 0000000..9bb82d8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity$2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity.class new file mode 100644 index 0000000..888f76b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateActivity.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService$1.class new file mode 100644 index 0000000..1090674 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService.class new file mode 100644 index 0000000..311aecc --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/UpdateService.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/Version.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/Version.class new file mode 100644 index 0000000..261a521 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/upgrade/Version.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/Environment.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/Environment.class new file mode 100644 index 0000000..9ede40b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/Environment.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelper.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelper.class new file mode 100644 index 0000000..c84b311 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelper.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelperV2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelperV2.class new file mode 100644 index 0000000..312111e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/FragmentSwitchHelperV2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper$Callback.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper$Callback.class new file mode 100644 index 0000000..0e888f7 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper$Callback.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper.class new file mode 100644 index 0000000..7c3b688 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ImageChooseHelper.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ManifestDataUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ManifestDataUtil.class new file mode 100644 index 0000000..ca5334f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ManifestDataUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/MarketUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/MarketUtils.class new file mode 100644 index 0000000..450ca36 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/MarketUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/PermissionsChecker.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/PermissionsChecker.class new file mode 100644 index 0000000..368d894 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/PermissionsChecker.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout$OnLoadListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout$OnLoadListener.class new file mode 100644 index 0000000..2f238a0 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout$OnLoadListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout.class new file mode 100644 index 0000000..53d9f0f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/RefreshLayout.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ScreenUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ScreenUtils.class new file mode 100644 index 0000000..f1dc3f4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ScreenUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast$1.class new file mode 100644 index 0000000..8737f78 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast.class new file mode 100644 index 0000000..6260d61 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SingleToast.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SystemCommon.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SystemCommon.class new file mode 100644 index 0000000..86acbc3 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/SystemCommon.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/AndroidCacheUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/AndroidCacheUtil.class new file mode 100644 index 0000000..b1915cc --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/AndroidCacheUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$1.class new file mode 100644 index 0000000..6f9ac8c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$2.class new file mode 100644 index 0000000..4ee4e6c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor$FaultHidingOutputStream.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor$FaultHidingOutputStream.class new file mode 100644 index 0000000..0fd9734 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor$FaultHidingOutputStream.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor.class new file mode 100644 index 0000000..3fd3617 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Editor.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Entry.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Entry.class new file mode 100644 index 0000000..6066661 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Entry.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Snapshot.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Snapshot.class new file mode 100644 index 0000000..f091697 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache$Snapshot.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache.class new file mode 100644 index 0000000..df66065 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/DiskLruCache.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$1.class new file mode 100644 index 0000000..b589a74 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$FileLastModifSort.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$FileLastModifSort.class new file mode 100644 index 0000000..d2616b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache$FileLastModifSort.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache.class new file mode 100644 index 0000000..5620f49 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageFileCache.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$1.class new file mode 100644 index 0000000..ec96592 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$2.class new file mode 100644 index 0000000..05ff721 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache$2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache.class new file mode 100644 index 0000000..870a705 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/ImageMemoryCache.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader$1.class new file mode 100644 index 0000000..77cd2df --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader.class new file mode 100644 index 0000000..b65319b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/StrictLineReader.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/Util.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/Util.class new file mode 100644 index 0000000..9155ab1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/cache/Util.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/BitmapUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/BitmapUtils.class new file mode 100644 index 0000000..05f026b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/BitmapUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil$1.class new file mode 100644 index 0000000..350eb13 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil.class new file mode 100644 index 0000000..dc4c459 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ClipboardUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$1.class new file mode 100644 index 0000000..fa0af43 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$2.class new file mode 100644 index 0000000..ec27768 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$3.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$3.class new file mode 100644 index 0000000..282da6b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils$3.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils.class new file mode 100644 index 0000000..84f405a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ConnectionUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DateUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DateUtils.class new file mode 100644 index 0000000..633e82f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DateUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DimenUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DimenUtils.class new file mode 100644 index 0000000..1e7043b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/DimenUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/FileUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/FileUtils.class new file mode 100644 index 0000000..1b6cfbf --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/FileUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/IClipboardContentListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/IClipboardContentListener.class new file mode 100644 index 0000000..4a3e8b8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/IClipboardContentListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ObjectUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ObjectUtils.class new file mode 100644 index 0000000..db9bf9b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/ObjectUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PackageUtils2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PackageUtils2.class new file mode 100644 index 0000000..247eb25 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PackageUtils2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PhotoCrop.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PhotoCrop.class new file mode 100644 index 0000000..8f2fc11 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/PhotoCrop.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/RandomUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/RandomUtils.class new file mode 100644 index 0000000..8a71017 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/RandomUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SerializeUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SerializeUtils.class new file mode 100644 index 0000000..61ca333 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SerializeUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SoftKeyboardUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SoftKeyboardUtils.class new file mode 100644 index 0000000..5c06dc4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/SoftKeyboardUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StorageUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StorageUtils.class new file mode 100644 index 0000000..3dc8341 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StorageUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StringUtils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StringUtils.class new file mode 100644 index 0000000..2a1fbc5 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/common/StringUtils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil$DeviceInfoType.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil$DeviceInfoType.class new file mode 100644 index 0000000..49b0f38 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil$DeviceInfoType.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil.class new file mode 100644 index 0000000..3677f0a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/DeviceInfoUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/MobileUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/MobileUtil.class new file mode 100644 index 0000000..9801ecb --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/device/MobileUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideCircleTransform.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideCircleTransform.class new file mode 100644 index 0000000..0dea1db --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideCircleTransform.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideRoundTransform.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideRoundTransform.class new file mode 100644 index 0000000..8d1fb77 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/glide/GlideRoundTransform.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AESOperator.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AESOperator.class new file mode 100644 index 0000000..738438b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AESOperator.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AEScrypt.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AEScrypt.class new file mode 100644 index 0000000..6fa6733 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/AEScrypt.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/DEScrypt.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/DEScrypt.class new file mode 100644 index 0000000..b028e3c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/DEScrypt.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/MD5Utils.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/MD5Utils.class new file mode 100644 index 0000000..92b6e65 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/security/MD5Utils.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/LoadingDialogUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/LoadingDialogUtil.class new file mode 100644 index 0000000..aba1472 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/LoadingDialogUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/StatusBarHeightUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/StatusBarHeightUtil.class new file mode 100644 index 0000000..5c8ae6e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/StatusBarHeightUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/SystemClipImageUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/SystemClipImageUtil.class new file mode 100644 index 0000000..d338888 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/SystemClipImageUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil$1.class new file mode 100644 index 0000000..81b54f5 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil.class new file mode 100644 index 0000000..a91141e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/util/ui/TextViewUtil.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/AdaptiveListView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/AdaptiveListView.class new file mode 100644 index 0000000..debb78f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/AdaptiveListView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$1.class new file mode 100644 index 0000000..1285423 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$OnDrawableClickListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$OnDrawableClickListener.class new file mode 100644 index 0000000..a62b870 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText$OnDrawableClickListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText.class new file mode 100644 index 0000000..23a11db --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ExtendEditText.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$1.class new file mode 100644 index 0000000..8dd6185 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller$1.class new file mode 100644 index 0000000..6aa50b9 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller.class new file mode 100644 index 0000000..062a3da --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView$IndexScroller.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView.class new file mode 100644 index 0000000..396cd18 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IndexableListView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IsPad.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IsPad.class new file mode 100644 index 0000000..6bab6c3 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/IsPad.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyGridView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyGridView.class new file mode 100644 index 0000000..01d3183 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyGridView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyListView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyListView.class new file mode 100644 index 0000000..6c901fc --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyListView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyViewPager.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyViewPager.class new file mode 100644 index 0000000..eff7435 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/MyViewPager.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView$WebChromeClient.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView$WebChromeClient.class new file mode 100644 index 0000000..8ec5c95 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView$WebChromeClient.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView.class new file mode 100644 index 0000000..f5a7e87 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ProgressWebView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RatioLayout.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RatioLayout.class new file mode 100644 index 0000000..d750323 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RatioLayout.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RefreshView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RefreshView.class new file mode 100644 index 0000000..cb5247c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/RefreshView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ResizableImageView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ResizableImageView.class new file mode 100644 index 0000000..c274470 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ResizableImageView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ShelfView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ShelfView.class new file mode 100644 index 0000000..3d0794f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/ShelfView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$1.class new file mode 100644 index 0000000..ad6d21e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$SystemBarConfig.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$SystemBarConfig.class new file mode 100644 index 0000000..02003cf --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager$SystemBarConfig.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager.class new file mode 100644 index 0000000..d36feba --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/SystemBarTintManager.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$FlingRunnable.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$FlingRunnable.class new file mode 100644 index 0000000..c007651 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$FlingRunnable.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$OnScrollListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$OnScrollListener.class new file mode 100644 index 0000000..50aa31b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$OnScrollListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$TagView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$TagView.class new file mode 100644 index 0000000..245f748 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout$TagView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout.class new file mode 100644 index 0000000..88e8213 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/TagCloudLayout.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/UnderLineTextView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/UnderLineTextView.class new file mode 100644 index 0000000..6e74db6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/UnderLineTextView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.class new file mode 100644 index 0000000..7028625 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$1.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$1.class new file mode 100644 index 0000000..1d17679 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$1.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$2.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$2.class new file mode 100644 index 0000000..623f975 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$2.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$3.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$3.class new file mode 100644 index 0000000..0732426 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$3.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$4.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$4.class new file mode 100644 index 0000000..9a6ce8e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$4.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$5.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$5.class new file mode 100644 index 0000000..a6360ad --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$5.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$6.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$6.class new file mode 100644 index 0000000..1fe42bc --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$6.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$7.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$7.class new file mode 100644 index 0000000..5093a56 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$7.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$BaseAnimationListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$BaseAnimationListener.class new file mode 100644 index 0000000..ce29171 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$BaseAnimationListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$Mode.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$Mode.class new file mode 100644 index 0000000..517eda2 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$Mode.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnLoadListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnLoadListener.class new file mode 100644 index 0000000..c1d924d --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnLoadListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnRefreshListener.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnRefreshListener.class new file mode 100644 index 0000000..9e8ecb6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout$OnRefreshListener.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.class new file mode 100644 index 0000000..0180c7c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.class new file mode 100644 index 0000000..1bfc29d --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.class new file mode 100644 index 0000000..7905e3f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.class new file mode 100644 index 0000000..db25330 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/lcjian/lcjianlibrary/BuildConfig.class b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/lcjian/lcjianlibrary/BuildConfig.class new file mode 100644 index 0000000..923eaee --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/javac/debug/classes/com/lcjian/lcjianlibrary/BuildConfig.class Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/009.gif b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/009.gif new file mode 100644 index 0000000..915c198 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/009.gif Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/android.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/android.png new file mode 100644 index 0000000..1959273 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/images/android.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm.css b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm.css new file mode 100644 index 0000000..f634304 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm.css @@ -0,0 +1,90 @@ +#confirmOverlay{ + width:100%; + height:100%; + position:fixed; + top:0; + left:0; + background:url('jquery.confirm/ie.png'); + background: -moz-linear-gradient(rgba(11,11,11,0.1), rgba(11,11,11,0.6)) repeat-x rgba(11,11,11,0.2); + background:-webkit-gradient(linear, 0% 0%, 0% 100%, from(rgba(11,11,11,0.1)), to(rgba(11,11,11,0.6))) repeat-x rgba(11,11,11,0.2); + z-index:100000; +} + +#confirmBox{ + background:url('jquery.confirm/body_bg.jpg') repeat-x left bottom #e5e5e5; + width:460px; + position:fixed; + left:50%; + top:50%; + margin:-130px 0 0 -230px; + border: 1px solid rgba(33, 33, 33, 0.6); + + -moz-box-shadow: 0 0 2px rgba(255, 255, 255, 0.6) inset; + -webkit-box-shadow: 0 0 2px rgba(255, 255, 255, 0.6) inset; + box-shadow: 0 0 2px rgba(255, 255, 255, 0.6) inset; + border-radius: 15px; +} + +#confirmBox h1, +#confirmBox p{ + font:26px/1 'Cuprum','Lucida Sans Unicode', 'Lucida Grande', sans-serif; + background:url('jquery.confirm/header_bg.jpg') repeat-x left bottom #f5f5f5; + padding: 10px 25px; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.6); + color:#666; +} + +#confirmBox h1{ + text-align:center; + letter-spacing:0.3px; + color:#888; +} + +#confirmBox p{ + text-align:center; + background:none; + font-size:20px; + line-height:1.4; + padding-top: 15px; +} + +#confirmButtons{ + padding:15px 0 25px; + text-align:center; +} + +#confirmBox .button{ + display:inline-block; + background:url('jquery.confirm/buttons.png') no-repeat; + color:white; + position:relative; + height: 33px; + + font:17px/33px 'Cuprum','Lucida Sans Unicode', 'Lucida Grande', sans-serif; + + margin-right: 15px; + padding: 0 35px 0 40px; + text-decoration:none; + border:none; +} + +#confirmBox .button:last-child{ margin-right:0;} + +#confirmBox .button span{ + position:absolute; + top:0; + right:-5px; + background:url('jquery.confirm/buttons.png') no-repeat; + width:5px; + height:33px +} + +#confirmBox .blue{ background-position:left top;text-shadow:1px 1px 0 #5889a2;} +#confirmBox .blue span{ background-position:-195px 0;} +#confirmBox .blue:hover{ background-position:left bottom;} +#confirmBox .blue:hover span{ background-position:-195px bottom;} + +#confirmBox .gray{ background-position:-200px top;text-shadow:1px 1px 0 #707070;} +#confirmBox .gray span{ background-position:-395px 0;} +#confirmBox .gray:hover{ background-position:-200px bottom;} +#confirmBox .gray:hover span{ background-position:-395px bottom;} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/body_bg.jpg b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/body_bg.jpg new file mode 100644 index 0000000..ef72119 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/body_bg.jpg Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/buttons.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/buttons.png new file mode 100644 index 0000000..49c2507 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/buttons.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/header_bg.jpg b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/header_bg.jpg new file mode 100644 index 0000000..ed23a76 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/header_bg.jpg Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/ie.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/ie.png new file mode 100644 index 0000000..b932a67 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/jquery.confirm/ie.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/main.css b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/main.css new file mode 100644 index 0000000..2ca9dd6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/main.css @@ -0,0 +1,4 @@ +@charset "utf-8"; +body { +} + diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png new file mode 100644 index 0000000..5473aff --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_30_cccccc_40x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png new file mode 100644 index 0000000..5950a8d --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_flat_50_5c5c5c_40x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png new file mode 100644 index 0000000..1ad224a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_20_555555_1x400.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png new file mode 100644 index 0000000..1cf1cac --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_0078a3_1x400.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png new file mode 100644 index 0000000..d683a41 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_glass_40_ffc73d_1x400.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png new file mode 100644 index 0000000..b1b03b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_gloss-wave_25_333333_500x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png new file mode 100644 index 0000000..e56eefd --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_highlight-soft_80_eeeeee_1x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png new file mode 100644 index 0000000..3525eb9 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_25_000000_1x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png new file mode 100644 index 0000000..2b6a9f9 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-bg_inset-soft_30_f58400_1x100.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_222222_256x240.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_222222_256x240.png new file mode 100644 index 0000000..b273ff1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_222222_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png new file mode 100644 index 0000000..c5d93b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_4b8e0b_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_a83300_256x240.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_a83300_256x240.png new file mode 100644 index 0000000..95993ea --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_a83300_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_cccccc_256x240.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_cccccc_256x240.png new file mode 100644 index 0000000..9254e05 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_cccccc_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_ffffff_256x240.png b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_ffffff_256x240.png new file mode 100644 index 0000000..42f8f99 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/images/ui-icons_ffffff_256x240.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/jquery-ui-1.8.23.custom.css b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/jquery-ui-1.8.23.custom.css new file mode 100644 index 0000000..659b634 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/css/ui-darkness/jquery-ui-1.8.23.custom.css @@ -0,0 +1,310 @@ +/*! + * jQuery UI CSS Framework 1.8.23 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + */ + +/* Layout helpers +----------------------------------*/ +.ui-helper-hidden { display: none; } +.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); } +.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; } +.ui-helper-clearfix:before, .ui-helper-clearfix:after { content: ""; display: table; } +.ui-helper-clearfix:after { clear: both; } +.ui-helper-clearfix { zoom: 1; } +.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); } + + +/* Interaction Cues +----------------------------------*/ +.ui-state-disabled { cursor: default !important; } + + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; } + + +/* Misc visuals +----------------------------------*/ + +/* Overlays */ +.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } + + +/*! + * jQuery UI CSS Framework 1.8.23 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Theming/API + * + * To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Segoe%20UI,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=6px&bgColorHeader=333333&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=25&borderColorHeader=333333&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=000000&bgTextureContent=05_inset_soft.png&bgImgOpacityContent=25&borderColorContent=666666&fcContent=ffffff&iconColorContent=cccccc&bgColorDefault=555555&bgTextureDefault=02_glass.png&bgImgOpacityDefault=20&borderColorDefault=666666&fcDefault=eeeeee&iconColorDefault=cccccc&bgColorHover=0078a3&bgTextureHover=02_glass.png&bgImgOpacityHover=40&borderColorHover=59b4d4&fcHover=ffffff&iconColorHover=ffffff&bgColorActive=f58400&bgTextureActive=05_inset_soft.png&bgImgOpacityActive=30&borderColorActive=ffaf0f&fcActive=ffffff&iconColorActive=222222&bgColorHighlight=eeeeee&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=80&borderColorHighlight=cccccc&fcHighlight=2e7db2&iconColorHighlight=4b8e0b&bgColorError=ffc73d&bgTextureError=02_glass.png&bgImgOpacityError=40&borderColorError=ffb73d&fcError=111111&iconColorError=a83300&bgColorOverlay=5c5c5c&bgTextureOverlay=01_flat.png&bgImgOpacityOverlay=50&opacityOverlay=80&bgColorShadow=cccccc&bgTextureShadow=01_flat.png&bgImgOpacityShadow=30&opacityShadow=60&thicknessShadow=7px&offsetTopShadow=-7px&offsetLeftShadow=-7px&cornerRadiusShadow=8px + */ + + +/* Component containers +----------------------------------*/ +.ui-widget { font-family: Segoe UI, Arial, sans-serif; font-size: 1.1em; } +.ui-widget .ui-widget { font-size: 1em; } +.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Segoe UI, Arial, sans-serif; font-size: 1em; } +.ui-widget-content { border: 1px solid #666666; background: #000000 url(images/ui-bg_inset-soft_25_000000_1x100.png) 50% bottom repeat-x; color: #ffffff; } +.ui-widget-content a { color: #ffffff; } +.ui-widget-header { border: 1px solid #333333; background: #333333 url(images/ui-bg_gloss-wave_25_333333_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; } +.ui-widget-header a { color: #ffffff; } + +/* Interaction states +----------------------------------*/ +.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #666666; background: #555555 url(images/ui-bg_glass_20_555555_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eeeeee; } +.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #eeeeee; text-decoration: none; } +.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #59b4d4; background: #0078a3 url(images/ui-bg_glass_40_0078a3_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } +.ui-state-hover a, .ui-state-hover a:hover { color: #ffffff; text-decoration: none; } +.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #ffaf0f; background: #f58400 url(images/ui-bg_inset-soft_30_f58400_1x100.png) 50% 50% repeat-x; font-weight: bold; color: #ffffff; } +.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #ffffff; text-decoration: none; } +.ui-widget :active { outline: none; } + +/* Interaction Cues +----------------------------------*/ +.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #cccccc; background: #eeeeee url(images/ui-bg_highlight-soft_80_eeeeee_1x100.png) 50% top repeat-x; color: #2e7db2; } +.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #2e7db2; } +.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #ffb73d; background: #ffc73d url(images/ui-bg_glass_40_ffc73d_1x400.png) 50% 50% repeat-x; color: #111111; } +.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #111111; } +.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #111111; } +.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; } +.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; } +.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; } + +/* Icons +----------------------------------*/ + +/* states and images */ +.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_cccccc_256x240.png); } +.ui-widget-content .ui-icon {background-image: url(images/ui-icons_cccccc_256x240.png); } +.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-default .ui-icon { background-image: url(images/ui-icons_cccccc_256x240.png); } +.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); } +.ui-state-active .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); } +.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_4b8e0b_256x240.png); } +.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_a83300_256x240.png); } + +/* positioning */ +.ui-icon-carat-1-n { background-position: 0 0; } +.ui-icon-carat-1-ne { background-position: -16px 0; } +.ui-icon-carat-1-e { background-position: -32px 0; } +.ui-icon-carat-1-se { background-position: -48px 0; } +.ui-icon-carat-1-s { background-position: -64px 0; } +.ui-icon-carat-1-sw { background-position: -80px 0; } +.ui-icon-carat-1-w { background-position: -96px 0; } +.ui-icon-carat-1-nw { background-position: -112px 0; } +.ui-icon-carat-2-n-s { background-position: -128px 0; } +.ui-icon-carat-2-e-w { background-position: -144px 0; } +.ui-icon-triangle-1-n { background-position: 0 -16px; } +.ui-icon-triangle-1-ne { background-position: -16px -16px; } +.ui-icon-triangle-1-e { background-position: -32px -16px; } +.ui-icon-triangle-1-se { background-position: -48px -16px; } +.ui-icon-triangle-1-s { background-position: -64px -16px; } +.ui-icon-triangle-1-sw { background-position: -80px -16px; } +.ui-icon-triangle-1-w { background-position: -96px -16px; } +.ui-icon-triangle-1-nw { background-position: -112px -16px; } +.ui-icon-triangle-2-n-s { background-position: -128px -16px; } +.ui-icon-triangle-2-e-w { background-position: -144px -16px; } +.ui-icon-arrow-1-n { background-position: 0 -32px; } +.ui-icon-arrow-1-ne { background-position: -16px -32px; } +.ui-icon-arrow-1-e { background-position: -32px -32px; } +.ui-icon-arrow-1-se { background-position: -48px -32px; } +.ui-icon-arrow-1-s { background-position: -64px -32px; } +.ui-icon-arrow-1-sw { background-position: -80px -32px; } +.ui-icon-arrow-1-w { background-position: -96px -32px; } +.ui-icon-arrow-1-nw { background-position: -112px -32px; } +.ui-icon-arrow-2-n-s { background-position: -128px -32px; } +.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; } +.ui-icon-arrow-2-e-w { background-position: -160px -32px; } +.ui-icon-arrow-2-se-nw { background-position: -176px -32px; } +.ui-icon-arrowstop-1-n { background-position: -192px -32px; } +.ui-icon-arrowstop-1-e { background-position: -208px -32px; } +.ui-icon-arrowstop-1-s { background-position: -224px -32px; } +.ui-icon-arrowstop-1-w { background-position: -240px -32px; } +.ui-icon-arrowthick-1-n { background-position: 0 -48px; } +.ui-icon-arrowthick-1-ne { background-position: -16px -48px; } +.ui-icon-arrowthick-1-e { background-position: -32px -48px; } +.ui-icon-arrowthick-1-se { background-position: -48px -48px; } +.ui-icon-arrowthick-1-s { background-position: -64px -48px; } +.ui-icon-arrowthick-1-sw { background-position: -80px -48px; } +.ui-icon-arrowthick-1-w { background-position: -96px -48px; } +.ui-icon-arrowthick-1-nw { background-position: -112px -48px; } +.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; } +.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; } +.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; } +.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; } +.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; } +.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; } +.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; } +.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; } +.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; } +.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; } +.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; } +.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; } +.ui-icon-arrowreturn-1-w { background-position: -64px -64px; } +.ui-icon-arrowreturn-1-n { background-position: -80px -64px; } +.ui-icon-arrowreturn-1-e { background-position: -96px -64px; } +.ui-icon-arrowreturn-1-s { background-position: -112px -64px; } +.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; } +.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; } +.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; } +.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; } +.ui-icon-arrow-4 { background-position: 0 -80px; } +.ui-icon-arrow-4-diag { background-position: -16px -80px; } +.ui-icon-extlink { background-position: -32px -80px; } +.ui-icon-newwin { background-position: -48px -80px; } +.ui-icon-refresh { background-position: -64px -80px; } +.ui-icon-shuffle { background-position: -80px -80px; } +.ui-icon-transfer-e-w { background-position: -96px -80px; } +.ui-icon-transferthick-e-w { background-position: -112px -80px; } +.ui-icon-folder-collapsed { background-position: 0 -96px; } +.ui-icon-folder-open { background-position: -16px -96px; } +.ui-icon-document { background-position: -32px -96px; } +.ui-icon-document-b { background-position: -48px -96px; } +.ui-icon-note { background-position: -64px -96px; } +.ui-icon-mail-closed { background-position: -80px -96px; } +.ui-icon-mail-open { background-position: -96px -96px; } +.ui-icon-suitcase { background-position: -112px -96px; } +.ui-icon-comment { background-position: -128px -96px; } +.ui-icon-person { background-position: -144px -96px; } +.ui-icon-print { background-position: -160px -96px; } +.ui-icon-trash { background-position: -176px -96px; } +.ui-icon-locked { background-position: -192px -96px; } +.ui-icon-unlocked { background-position: -208px -96px; } +.ui-icon-bookmark { background-position: -224px -96px; } +.ui-icon-tag { background-position: -240px -96px; } +.ui-icon-home { background-position: 0 -112px; } +.ui-icon-flag { background-position: -16px -112px; } +.ui-icon-calendar { background-position: -32px -112px; } +.ui-icon-cart { background-position: -48px -112px; } +.ui-icon-pencil { background-position: -64px -112px; } +.ui-icon-clock { background-position: -80px -112px; } +.ui-icon-disk { background-position: -96px -112px; } +.ui-icon-calculator { background-position: -112px -112px; } +.ui-icon-zoomin { background-position: -128px -112px; } +.ui-icon-zoomout { background-position: -144px -112px; } +.ui-icon-search { background-position: -160px -112px; } +.ui-icon-wrench { background-position: -176px -112px; } +.ui-icon-gear { background-position: -192px -112px; } +.ui-icon-heart { background-position: -208px -112px; } +.ui-icon-star { background-position: -224px -112px; } +.ui-icon-link { background-position: -240px -112px; } +.ui-icon-cancel { background-position: 0 -128px; } +.ui-icon-plus { background-position: -16px -128px; } +.ui-icon-plusthick { background-position: -32px -128px; } +.ui-icon-minus { background-position: -48px -128px; } +.ui-icon-minusthick { background-position: -64px -128px; } +.ui-icon-close { background-position: -80px -128px; } +.ui-icon-closethick { background-position: -96px -128px; } +.ui-icon-key { background-position: -112px -128px; } +.ui-icon-lightbulb { background-position: -128px -128px; } +.ui-icon-scissors { background-position: -144px -128px; } +.ui-icon-clipboard { background-position: -160px -128px; } +.ui-icon-copy { background-position: -176px -128px; } +.ui-icon-contact { background-position: -192px -128px; } +.ui-icon-image { background-position: -208px -128px; } +.ui-icon-video { background-position: -224px -128px; } +.ui-icon-script { background-position: -240px -128px; } +.ui-icon-alert { background-position: 0 -144px; } +.ui-icon-info { background-position: -16px -144px; } +.ui-icon-notice { background-position: -32px -144px; } +.ui-icon-help { background-position: -48px -144px; } +.ui-icon-check { background-position: -64px -144px; } +.ui-icon-bullet { background-position: -80px -144px; } +.ui-icon-radio-off { background-position: -96px -144px; } +.ui-icon-radio-on { background-position: -112px -144px; } +.ui-icon-pin-w { background-position: -128px -144px; } +.ui-icon-pin-s { background-position: -144px -144px; } +.ui-icon-play { background-position: 0 -160px; } +.ui-icon-pause { background-position: -16px -160px; } +.ui-icon-seek-next { background-position: -32px -160px; } +.ui-icon-seek-prev { background-position: -48px -160px; } +.ui-icon-seek-end { background-position: -64px -160px; } +.ui-icon-seek-start { background-position: -80px -160px; } +/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */ +.ui-icon-seek-first { background-position: -80px -160px; } +.ui-icon-stop { background-position: -96px -160px; } +.ui-icon-eject { background-position: -112px -160px; } +.ui-icon-volume-off { background-position: -128px -160px; } +.ui-icon-volume-on { background-position: -144px -160px; } +.ui-icon-power { background-position: 0 -176px; } +.ui-icon-signal-diag { background-position: -16px -176px; } +.ui-icon-signal { background-position: -32px -176px; } +.ui-icon-battery-0 { background-position: -48px -176px; } +.ui-icon-battery-1 { background-position: -64px -176px; } +.ui-icon-battery-2 { background-position: -80px -176px; } +.ui-icon-battery-3 { background-position: -96px -176px; } +.ui-icon-circle-plus { background-position: 0 -192px; } +.ui-icon-circle-minus { background-position: -16px -192px; } +.ui-icon-circle-close { background-position: -32px -192px; } +.ui-icon-circle-triangle-e { background-position: -48px -192px; } +.ui-icon-circle-triangle-s { background-position: -64px -192px; } +.ui-icon-circle-triangle-w { background-position: -80px -192px; } +.ui-icon-circle-triangle-n { background-position: -96px -192px; } +.ui-icon-circle-arrow-e { background-position: -112px -192px; } +.ui-icon-circle-arrow-s { background-position: -128px -192px; } +.ui-icon-circle-arrow-w { background-position: -144px -192px; } +.ui-icon-circle-arrow-n { background-position: -160px -192px; } +.ui-icon-circle-zoomin { background-position: -176px -192px; } +.ui-icon-circle-zoomout { background-position: -192px -192px; } +.ui-icon-circle-check { background-position: -208px -192px; } +.ui-icon-circlesmall-plus { background-position: 0 -208px; } +.ui-icon-circlesmall-minus { background-position: -16px -208px; } +.ui-icon-circlesmall-close { background-position: -32px -208px; } +.ui-icon-squaresmall-plus { background-position: -48px -208px; } +.ui-icon-squaresmall-minus { background-position: -64px -208px; } +.ui-icon-squaresmall-close { background-position: -80px -208px; } +.ui-icon-grip-dotted-vertical { background-position: 0 -224px; } +.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; } +.ui-icon-grip-solid-vertical { background-position: -32px -224px; } +.ui-icon-grip-solid-horizontal { background-position: -48px -224px; } +.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; } +.ui-icon-grip-diagonal-se { background-position: -80px -224px; } + + +/* Misc visuals +----------------------------------*/ + +/* Corner radius */ +.ui-corner-all, .ui-corner-top, .ui-corner-left, .ui-corner-tl { -moz-border-radius-topleft: 6px; -webkit-border-top-left-radius: 6px; -khtml-border-top-left-radius: 6px; border-top-left-radius: 6px; } +.ui-corner-all, .ui-corner-top, .ui-corner-right, .ui-corner-tr { -moz-border-radius-topright: 6px; -webkit-border-top-right-radius: 6px; -khtml-border-top-right-radius: 6px; border-top-right-radius: 6px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-left, .ui-corner-bl { -moz-border-radius-bottomleft: 6px; -webkit-border-bottom-left-radius: 6px; -khtml-border-bottom-left-radius: 6px; border-bottom-left-radius: 6px; } +.ui-corner-all, .ui-corner-bottom, .ui-corner-right, .ui-corner-br { -moz-border-radius-bottomright: 6px; -webkit-border-bottom-right-radius: 6px; -khtml-border-bottom-right-radius: 6px; border-bottom-right-radius: 6px; } + +/* Overlays */ +.ui-widget-overlay { background: #5c5c5c url(images/ui-bg_flat_50_5c5c5c_40x100.png) 50% 50% repeat-x; opacity: .80;filter:Alpha(Opacity=80); } +.ui-widget-shadow { margin: -7px 0 0 -7px; padding: 7px; background: #cccccc url(images/ui-bg_flat_30_cccccc_40x100.png) 50% 50% repeat-x; opacity: .60;filter:Alpha(Opacity=60); -moz-border-radius: 8px; -khtml-border-radius: 8px; -webkit-border-radius: 8px; border-radius: 8px; }/*! + * jQuery UI Slider 1.8.23 + * + * Copyright 2012, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Slider#theming + */ +.ui-slider { position: relative; text-align: left; } +.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; } +.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; } + +.ui-slider-horizontal { height: .8em; } +.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; } +.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; } +.ui-slider-horizontal .ui-slider-range-min { left: 0; } +.ui-slider-horizontal .ui-slider-range-max { right: 0; } + +.ui-slider-vertical { width: .8em; height: 100px; } +.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; } +.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; } +.ui-slider-vertical .ui-slider-range-min { bottom: 0; } +.ui-slider-vertical .ui-slider-range-max { top: 0; } \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/index.html b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/index.html new file mode 100644 index 0000000..5d35269 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/index.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> + <meta name="viewport" content=""/> + <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> + <title>FamilyAlbum</title> + + <link rel="stylesheet" type="text/css" href="css/main.css" media="all"/> + + <script type="text/javascript" src="lib/jquery-1.7.2.min.js"> </script> + <script type="text/javascript" src="lib/jquery-ui-1.8.23.custom.min.js"> </script> + <script type="text/javascript" src="lib/jquery.confirm.js"> </script> + <script type="text/javascript" src="js/main.js"> </script> +</head> + +<body> + <video src="file:///mnt/sdcard/big_buck_bunny.mp4" controls="controls" height="210px" width="380px"></video> +</body> +</html> diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/js/main.js b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/js/main.js new file mode 100644 index 0000000..931c686 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/js/main.js @@ -0,0 +1,99 @@ +//API_KEY && API_SIG for flickr +var API_KEY = "8873397f084b2390be0fca6d0058c937"; +var API_SIG = "e78c1066099b5954"; + +var url = "http://192.168.1.101:8080/web/"; + + +var PicasaMgr = { + + /** + * return true if send successfully, else return false + * + * data is a json object e.g. {a: "hello", b: "hi"} + * + * callback(status), + */ + sendReport : function(data, type, callback){ + var reportData = data; + + if(!callback){ + callback = this._defaultCallback; + } + + this._callback = callback; + + //send data timeout + var timeOutId = setTimeout(this._requestTimeoutCallback, this._requestTimeout); + + var xmlHttpRequest = this._getXmlHttpRequest(); + alert(url); + + var reqParam = this._getRequestPara("POST", url); + + xmlHttpRequest.open(reqParam.method, reqParam.url, reqParam.async); + xmlHttpRequest.setRequestHeader("Content-Type","application/x-www-form-urlencoded;"); + + xmlHttpRequest.onreadystatechange = function(){ + clearTimeout(timeOutId); + if(this.readyState == 4){ + alert(this.status); + callback(this.status == 200); + } + }; + + try{ + alert("send : "+ reportData); + xmlHttpRequest.send(reportData); + }catch(e){ + alert("send error: "+e); + } + + }, + + _requestTimeoutCallback: function(){ + var xmlHttp = Logger.Reporter._getXmlHttpRequest(); + if(xmlHttp != null){ + xmlHttp.onreadystatechange = null; + xmlHttp.abort(); //doesn't work correctly + Logger.Reporter._callback(false); + } + }, + + /** + * do nothing + */ + _defaultCallback : function(status){ + alert(status); + }, + + _getRequestPara : function(_method,_url){ + return {method : _method, url: _url, async : true}; + }, + + _getXmlHttpRequest : function(){ + var xmlHttpRequest = null; + + if (window.XMLHttpRequest) { + xmlHttpRequest = new XMLHttpRequest(); + } else { + var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', + 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP']; + for ( var i = 0; i < MSXML.length; i++) { + try { + xmlHttpRequest = new ActiveXObject(MSXML[i]); + } catch (e) { + } + } + } + + return xmlHttpRequest; + }, + + _callback : null, + _requestTimeout : 5000 +}; + +function test() { + PicasaMgr.sendReport("111"); +} diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-1.7.2.min.js b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-1.7.2.min.js new file mode 100644 index 0000000..16ad06c --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-1.7.2.min.js @@ -0,0 +1,4 @@ +/*! jQuery v1.7.2 jquery.com | jquery.org/license */ +(function(a,b){function cy(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cu(a){if(!cj[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ck||(ck=c.createElement("iframe"),ck.frameBorder=ck.width=ck.height=0),b.appendChild(ck);if(!cl||!ck.createElement)cl=(ck.contentWindow||ck.contentDocument).document,cl.write((f.support.boxModel?"<!doctype html>":"")+"<html><body>"),cl.close();d=cl.createElement(a),cl.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ck)}cj[a]=e}return cj[a]}function ct(a,b){var c={};f.each(cp.concat.apply([],cp.slice(0,b)),function(){c[this]=a});return c}function cs(){cq=b}function cr(){setTimeout(cs,0);return cq=f.now()}function ci(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ch(){try{return new a.XMLHttpRequest}catch(b){}}function cb(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function ca(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function b_(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bD.test(a)?d(a,e):b_(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&f.type(b)==="object")for(var e in b)b_(a+"["+e+"]",b[e],c,d);else d(a,b)}function b$(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bZ(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bS,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bZ(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bZ(a,c,d,e,"*",g));return l}function bY(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bO),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function bB(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?1:0,g=4;if(d>0){if(c!=="border")for(;e<g;e+=2)c||(d-=parseFloat(f.css(a,"padding"+bx[e]))||0),c==="margin"?d+=parseFloat(f.css(a,c+bx[e]))||0:d-=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0;return d+"px"}d=by(a,b);if(d<0||d==null)d=a.style[b];if(bt.test(d))return d;d=parseFloat(d)||0;if(c)for(;e<g;e+=2)d+=parseFloat(f.css(a,"padding"+bx[e]))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+bx[e]+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+bx[e]))||0);return d+"px"}function bo(a){var b=c.createElement("div");bh.appendChild(b),b.innerHTML=a.outerHTML;return b.firstChild}function bn(a){var b=(a.nodeName||"").toLowerCase();b==="input"?bm(a):b!=="script"&&typeof a.getElementsByTagName!="undefined"&&f.grep(a.getElementsByTagName("input"),bm)}function bm(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bl(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bk(a,b){var c;b.nodeType===1&&(b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?b.outerHTML=a.outerHTML:c!=="input"||a.type!=="checkbox"&&a.type!=="radio"?c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text):(a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value)),b.removeAttribute(f.expando),b.removeAttribute("_submit_attached"),b.removeAttribute("_change_attached"))}function bj(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c,d,e,g=f._data(a),h=f._data(b,g),i=g.events;if(i){delete h.handle,h.events={};for(c in i)for(d=0,e=i[c].length;d<e;d++)f.event.add(b,c,i[c][d])}h.data&&(h.data=f.extend({},h.data))}}function bi(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function U(a){var b=V.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function T(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(O.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function S(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function K(){return!0}function J(){return!1}function n(a,b,c){var d=b+"defer",e=b+"queue",g=b+"mark",h=f._data(a,d);h&&(c==="queue"||!f._data(a,e))&&(c==="mark"||!f._data(a,g))&&setTimeout(function(){!f._data(a,e)&&!f._data(a,g)&&(f.removeData(a,d,!0),h.fire())},0)}function m(a){for(var b in a){if(b==="data"&&f.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function l(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(k,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNumeric(d)?+d:j.test(d)?f.parseJSON(d):d}catch(g){}f.data(a,c,d)}else d=b}return d}function h(a){var b=g[a]={},c,d;a=a.split(/\s+/);for(c=0,d=a.length;c<d;c++)b[a[c]]=!0;return b}var c=a.document,d=a.navigator,e=a.location,f=function(){function J(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(J,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,n=/^[\],:{}\s]*$/,o=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,p=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,q=/(?:^|:|,)(?:\s*\[)+/g,r=/(webkit)[ \/]([\w.]+)/,s=/(opera)(?:.*version)?[ \/]([\w.]+)/,t=/(msie) ([\w.]+)/,u=/(mozilla)(?:.*? rv:([\w.]+))?/,v=/-([a-z]|[0-9])/ig,w=/^-ms-/,x=function(a,b){return(b+"").toUpperCase()},y=d.userAgent,z,A,B,C=Object.prototype.toString,D=Object.prototype.hasOwnProperty,E=Array.prototype.push,F=Array.prototype.slice,G=String.prototype.trim,H=Array.prototype.indexOf,I={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=m.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.7.2",length:0,size:function(){return this.length},toArray:function(){return F.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?E.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),A.add(a);return this},eq:function(a){a=+a;return a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(F.apply(this,arguments),"slice",F.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:E,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;A.fireWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").off("ready")}},bindReady:function(){if(!A){A=e.Callbacks("once memory");if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",B,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",B),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&J()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):I[C.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!D.call(a,"constructor")&&!D.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||D.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw new Error(a)},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(n.test(b.replace(o,"@").replace(p,"]").replace(q,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){if(typeof c!="string"||!c)return null;var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(w,"ms-").replace(v,x)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:G?function(a){return a==null?"":G.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?E.call(c,a):e.merge(c,a)}return c},inArray:function(a,b,c){var d;if(b){if(H)return H.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=F.call(arguments,2),g=function(){return a.apply(c,f.concat(F.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h,i){var j,k=d==null,l=0,m=a.length;if(d&&typeof d=="object"){for(l in d)e.access(a,c,l,d[l],1,h,f);g=1}else if(f!==b){j=i===b&&e.isFunction(f),k&&(j?(j=c,c=function(a,b,c){return j.call(e(a),c)}):(c.call(a,f),c=null));if(c)for(;l<m;l++)c(a[l],d,j?f.call(a[l],l,c(a[l],d)):f,i);g=1}return g?a:k?c.call(a):m?c(a[0],d):h},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=r.exec(a)||s.exec(a)||t.exec(a)||a.indexOf("compatible")<0&&u.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){I["[object "+b+"]"]=b.toLowerCase()}),z=e.uaMatch(y),z.browser&&(e.browser[z.browser]=!0,e.browser.version=z.version),e.browser.webkit&&(e.browser.safari=!0),j.test("聽")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?B=function(){c.removeEventListener("DOMContentLoaded",B,!1),e.ready()}:c.attachEvent&&(B=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",B),e.ready())});return e}(),g={};f.Callbacks=function(a){a=a?g[a]||h(a):{};var c=[],d=[],e,i,j,k,l,m,n=function(b){var d,e,g,h,i;for(d=0,e=b.length;d<e;d++)g=b[d],h=f.type(g),h==="array"?n(g):h==="function"&&(!a.unique||!p.has(g))&&c.push(g)},o=function(b,f){f=f||[],e=!a.memory||[b,f],i=!0,j=!0,m=k||0,k=0,l=c.length;for(;c&&m<l;m++)if(c[m].apply(b,f)===!1&&a.stopOnFalse){e=!0;break}j=!1,c&&(a.once?e===!0?p.disable():c=[]:d&&d.length&&(e=d.shift(),p.fireWith(e[0],e[1])))},p={add:function(){if(c){var a=c.length;n(arguments),j?l=c.length:e&&e!==!0&&(k=a,o(e[0],e[1]))}return this},remove:function(){if(c){var b=arguments,d=0,e=b.length;for(;d<e;d++)for(var f=0;f<c.length;f++)if(b[d]===c[f]){j&&f<=l&&(l--,f<=m&&m--),c.splice(f--,1);if(a.unique)break}}return this},has:function(a){if(c){var b=0,d=c.length;for(;b<d;b++)if(a===c[b])return!0}return!1},empty:function(){c=[];return this},disable:function(){c=d=e=b;return this},disabled:function(){return!c},lock:function(){d=b,(!e||e===!0)&&p.disable();return this},locked:function(){return!d},fireWith:function(b,c){d&&(j?a.once||d.push([b,c]):(!a.once||!e)&&o(b,c));return this},fire:function(){p.fireWith(this,arguments);return this},fired:function(){return!!i}};return p};var i=[].slice;f.extend({Deferred:function(a){var b=f.Callbacks("once memory"),c=f.Callbacks("once memory"),d=f.Callbacks("memory"),e="pending",g={resolve:b,reject:c,notify:d},h={done:b.add,fail:c.add,progress:d.add,state:function(){return e},isResolved:b.fired,isRejected:c.fired,then:function(a,b,c){i.done(a).fail(b).progress(c);return this},always:function(){i.done.apply(i,arguments).fail.apply(i,arguments);return this},pipe:function(a,b,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[b,"reject"],progress:[c,"notify"]},function(a,b){var c=b[0],e=b[1],g;f.isFunction(c)?i[a](function(){g=c.apply(this,arguments),g&&f.isFunction(g.promise)?g.promise().then(d.resolve,d.reject,d.notify):d[e+"With"](this===i?d:this,[g])}):i[a](d[e])})}).promise()},promise:function(a){if(a==null)a=h;else for(var b in h)a[b]=h[b];return a}},i=h.promise({}),j;for(j in g)i[j]=g[j].fire,i[j+"With"]=g[j].fireWith;i.done(function(){e="resolved"},c.disable,d.lock).fail(function(){e="rejected"},b.disable,d.lock),a&&a.call(i,i);return i},when:function(a){function m(a){return function(b){e[a]=arguments.length>1?i.call(arguments,0):b,j.notifyWith(k,e)}}function l(a){return function(c){b[a]=arguments.length>1?i.call(arguments,0):c,--g||j.resolveWith(j,b)}}var b=i.call(arguments,0),c=0,d=b.length,e=Array(d),g=d,h=d,j=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred(),k=j.promise();if(d>1){for(;c<d;c++)b[c]&&b[c].promise&&f.isFunction(b[c].promise)?b[c].promise().then(l(c),j.reject,m(c)):--g;g||j.resolveWith(j,b)}else j!==a&&j.resolveWith(j,d?[a]:[]);return k}}),f.support=function(){var b,d,e,g,h,i,j,k,l,m,n,o,p=c.createElement("div"),q=c.documentElement;p.setAttribute("className","t"),p.innerHTML=" <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=p.getElementsByTagName("*"),e=p.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=p.getElementsByTagName("input")[0],b={leadingWhitespace:p.firstChild.nodeType===3,tbody:!p.getElementsByTagName("tbody").length,htmlSerialize:!!p.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:p.className!=="t",enctype:!!c.createElement("form").enctype,html5Clone:c.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,pixelMargin:!0},f.boxModel=b.boxModel=c.compatMode==="CSS1Compat",i.checked=!0,b.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,b.optDisabled=!h.disabled;try{delete p.test}catch(r){b.deleteExpando=!1}!p.addEventListener&&p.attachEvent&&p.fireEvent&&(p.attachEvent("onclick",function(){b.noCloneEvent=!1}),p.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),b.radioValue=i.value==="t",i.setAttribute("checked","checked"),i.setAttribute("name","t"),p.appendChild(i),j=c.createDocumentFragment(),j.appendChild(p.lastChild),b.checkClone=j.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=i.checked,j.removeChild(i),j.appendChild(p);if(p.attachEvent)for(n in{submit:1,change:1,focusin:1})m="on"+n,o=m in p,o||(p.setAttribute(m,"return;"),o=typeof p[m]=="function"),b[n+"Bubbles"]=o;j.removeChild(p),j=g=h=p=i=null,f(function(){var d,e,g,h,i,j,l,m,n,q,r,s,t,u=c.getElementsByTagName("body")[0];!u||(m=1,t="padding:0;margin:0;border:",r="position:absolute;top:0;left:0;width:1px;height:1px;",s=t+"0;visibility:hidden;",n="style='"+r+t+"5px solid #000;",q="<div "+n+"display:block;'><div style='"+t+"0;display:block;overflow:hidden;'></div></div>"+"<table "+n+"' cellpadding='0' cellspacing='0'>"+"<tr><td></td></tr></table>",d=c.createElement("div"),d.style.cssText=s+"width:0;height:0;position:static;top:0;margin-top:"+m+"px",u.insertBefore(d,u.firstChild),p=c.createElement("div"),d.appendChild(p),p.innerHTML="<table><tr><td style='"+t+"0;display:none'></td><td>t</td></tr></table>",k=p.getElementsByTagName("td"),o=k[0].offsetHeight===0,k[0].style.display="",k[1].style.display="none",b.reliableHiddenOffsets=o&&k[0].offsetHeight===0,a.getComputedStyle&&(p.innerHTML="",l=c.createElement("div"),l.style.width="0",l.style.marginRight="0",p.style.width="2px",p.appendChild(l),b.reliableMarginRight=(parseInt((a.getComputedStyle(l,null)||{marginRight:0}).marginRight,10)||0)===0),typeof p.style.zoom!="undefined"&&(p.innerHTML="",p.style.width=p.style.padding="1px",p.style.border=0,p.style.overflow="hidden",p.style.display="inline",p.style.zoom=1,b.inlineBlockNeedsLayout=p.offsetWidth===3,p.style.display="block",p.style.overflow="visible",p.innerHTML="<div style='width:5px;'></div>",b.shrinkWrapBlocks=p.offsetWidth!==3),p.style.cssText=r+s,p.innerHTML=q,e=p.firstChild,g=e.firstChild,i=e.nextSibling.firstChild.firstChild,j={doesNotAddBorder:g.offsetTop!==5,doesAddBorderForTableAndCells:i.offsetTop===5},g.style.position="fixed",g.style.top="20px",j.fixedPosition=g.offsetTop===20||g.offsetTop===15,g.style.position=g.style.top="",e.style.overflow="hidden",e.style.position="relative",j.subtractsBorderForOverflowNotVisible=g.offsetTop===-5,j.doesNotIncludeMarginInBodyOffset=u.offsetTop!==m,a.getComputedStyle&&(p.style.marginTop="1%",b.pixelMargin=(a.getComputedStyle(p,null)||{marginTop:0}).marginTop!=="1%"),typeof d.style.zoom!="undefined"&&(d.style.zoom=1),u.removeChild(d),l=p=d=null,f.extend(b,j))});return b}();var j=/^(?:\{.*\}|\[.*\])$/,k=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!m(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i,j=f.expando,k=typeof c=="string",l=a.nodeType,m=l?f.cache:a,n=l?a[j]:a[j]&&j,o=c==="events";if((!n||!m[n]||!o&&!e&&!m[n].data)&&k&&d===b)return;n||(l?a[j]=n=++f.uuid:n=j),m[n]||(m[n]={},l||(m[n].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?m[n]=f.extend(m[n],c):m[n].data=f.extend(m[n].data,c);g=h=m[n],e||(h.data||(h.data={}),h=h.data),d!==b&&(h[f.camelCase(c)]=d);if(o&&!h[c])return g.events;k?(i=h[c],i==null&&(i=h[f.camelCase(c)])):i=h;return i}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e,g,h=f.expando,i=a.nodeType,j=i?f.cache:a,k=i?a[h]:h;if(!j[k])return;if(b){d=c?j[k]:j[k].data;if(d){f.isArray(b)||(b in d?b=[b]:(b=f.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,g=b.length;e<g;e++)delete d[b[e]];if(!(c?m:f.isEmptyObject)(d))return}}if(!c){delete j[k].data;if(!m(j[k]))return}f.support.deleteExpando||!j.setInterval?delete j[k]:j[k]=null,i&&(f.support.deleteExpando?delete a[h]:a.removeAttribute?a.removeAttribute(h):a[h]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d,e,g,h,i,j=this[0],k=0,m=null;if(a===b){if(this.length){m=f.data(j);if(j.nodeType===1&&!f._data(j,"parsedAttrs")){g=j.attributes;for(i=g.length;k<i;k++)h=g[k].name,h.indexOf("data-")===0&&(h=f.camelCase(h.substring(5)),l(j,h,m[h]));f._data(j,"parsedAttrs",!0)}}return m}if(typeof a=="object")return this.each(function(){f.data(this,a)});d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!";return f.access(this,function(c){if(c===b){m=this.triggerHandler("getData"+e,[d[0]]),m===b&&j&&(m=f.data(j,a),m=l(j,a,m));return m===b&&d[1]?this.data(d[0]):m}d[1]=c,this.each(function(){var b=f(this);b.triggerHandler("setData"+e,d),f.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1)},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,b){a&&(b=(b||"fx")+"mark",f._data(a,b,(f._data(a,b)||0)+1))},_unmark:function(a,b,c){a!==!0&&(c=b,b=a,a=!1);if(b){c=c||"fx";var d=c+"mark",e=a?0:(f._data(b,d)||1)-1;e?f._data(b,d,e):(f.removeData(b,d,!0),n(b,c,"mark"))}},queue:function(a,b,c){var d;if(a){b=(b||"fx")+"queue",d=f._data(a,b),c&&(!d||f.isArray(c)?d=f._data(a,b,f.makeArray(c)):d.push(c));return d||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e={};d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),f._data(a,b+".run",e),d.call(a,function(){f.dequeue(a,b)},e)),c.length||(f.removeData(a,b+"queue "+b+".run",!0),n(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){var d=2;typeof a!="string"&&(c=a,a="fx",d--);if(arguments.length<d)return f.queue(this[0],a);return c===b?this:this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f.Callbacks("once memory"),!0))h++,l.add(m);m();return d.promise(c)}});var o=/[\n\t\r]/g,p=/\s+/,q=/\r/g,r=/^(?:button|input)$/i,s=/^(?:button|input|object|select|textarea)$/i,t=/^a(?:rea)?$/i,u=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,v=f.support.getSetAttribute,w,x,y;f.fn.extend({attr:function(a,b){return f.access(this,f.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,f.prop,a,b,arguments.length>1)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(p);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(p);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(o," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(p);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(o," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e,g=this[0];{if(!!arguments.length){e=f.isFunction(a);return this.each(function(d){var g=f(this),h;if(this.nodeType===1){e?h=a.call(this,d,g.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.type]||f.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}if(g){c=f.valHooks[g.type]||f.valHooks[g.nodeName.toLowerCase()];if(c&&"get"in c&&(d=c.get(g,"value"))!==b)return d;d=g.value;return typeof d=="string"?d.replace(q,""):d==null?"":d}}}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,g=a.selectedIndex,h=[],i=a.options,j=a.type==="select-one";if(g<0)return null;c=j?g:0,d=j?g+1:i.length;for(;c<d;c++){e=i[c];if(e.selected&&(f.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!f.nodeName(e.parentNode,"optgroup"))){b=f(e).val();if(j)return b;h.push(b)}}if(j&&!h.length&&i.length)return f(i[g]).val();return h},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attr:function(a,c,d,e){var g,h,i,j=a.nodeType;if(!!a&&j!==3&&j!==8&&j!==2){if(e&&c in f.attrFn)return f(a)[c](d);if(typeof a.getAttribute=="undefined")return f.prop(a,c,d);i=j!==1||!f.isXMLDoc(a),i&&(c=c.toLowerCase(),h=f.attrHooks[c]||(u.test(c)?x:w));if(d!==b){if(d===null){f.removeAttr(a,c);return}if(h&&"set"in h&&i&&(g=h.set(a,d,c))!==b)return g;a.setAttribute(c,""+d);return d}if(h&&"get"in h&&i&&(g=h.get(a,c))!==null)return g;g=a.getAttribute(c);return g===null?b:g}},removeAttr:function(a,b){var c,d,e,g,h,i=0;if(b&&a.nodeType===1){d=b.toLowerCase().split(p),g=d.length;for(;i<g;i++)e=d[i],e&&(c=f.propFix[e]||e,h=u.test(e),h||f.attr(a,e,""),a.removeAttribute(v?e:c),h&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(r.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(w&&f.nodeName(a,"button"))return w.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(w&&f.nodeName(a,"button"))return w.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,g,h,i=a.nodeType;if(!!a&&i!==3&&i!==8&&i!==2){h=i!==1||!f.isXMLDoc(a),h&&(c=f.propFix[c]||c,g=f.propHooks[c]);return d!==b?g&&"set"in g&&(e=g.set(a,d,c))!==b?e:a[c]=d:g&&"get"in g&&(e=g.get(a,c))!==null?e:a[c]}},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):s.test(a.nodeName)||t.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabindex=f.propHooks.tabIndex,x={get:function(a,c){var d,e=f.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},v||(y={name:!0,id:!0,coords:!0},w=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&(y[c]?d.nodeValue!=="":d.specified)?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.attrHooks.tabindex.set=w.set,f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})}),f.attrHooks.contenteditable={get:w.get,set:function(a,b,c){b===""&&(b="false"),w.set(a,b,c)}}),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.enctype||(f.propFix.enctype="encoding"),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var z=/^(?:textarea|input|select)$/i,A=/^([^\.]*)?(?:\.(.+))?$/,B=/(?:^|\s)hover(\.\S+)?\b/,C=/^key/,D=/^(?:mouse|contextmenu)|click/,E=/^(?:focusinfocus|focusoutblur)$/,F=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,G=function( +a){var b=F.exec(a);b&&(b[1]=(b[1]||"").toLowerCase(),b[3]=b[3]&&new RegExp("(?:^|\\s)"+b[3]+"(?:\\s|$)"));return b},H=function(a,b){var c=a.attributes||{};return(!b[1]||a.nodeName.toLowerCase()===b[1])&&(!b[2]||(c.id||{}).value===b[2])&&(!b[3]||b[3].test((c["class"]||{}).value))},I=function(a){return f.event.special.hover?a:a.replace(B,"mouseenter$1 mouseleave$1")};f.event={add:function(a,c,d,e,g){var h,i,j,k,l,m,n,o,p,q,r,s;if(!(a.nodeType===3||a.nodeType===8||!c||!d||!(h=f._data(a)))){d.handler&&(p=d,d=p.handler,g=p.selector),d.guid||(d.guid=f.guid++),j=h.events,j||(h.events=j={}),i=h.handle,i||(h.handle=i=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.dispatch.apply(i.elem,arguments):b},i.elem=a),c=f.trim(I(c)).split(" ");for(k=0;k<c.length;k++){l=A.exec(c[k])||[],m=l[1],n=(l[2]||"").split(".").sort(),s=f.event.special[m]||{},m=(g?s.delegateType:s.bindType)||m,s=f.event.special[m]||{},o=f.extend({type:m,origType:l[1],data:e,handler:d,guid:d.guid,selector:g,quick:g&&G(g),namespace:n.join(".")},p),r=j[m];if(!r){r=j[m]=[],r.delegateCount=0;if(!s.setup||s.setup.call(a,e,n,i)===!1)a.addEventListener?a.addEventListener(m,i,!1):a.attachEvent&&a.attachEvent("on"+m,i)}s.add&&(s.add.call(a,o),o.handler.guid||(o.handler.guid=d.guid)),g?r.splice(r.delegateCount++,0,o):r.push(o),f.event.global[m]=!0}a=null}},global:{},remove:function(a,b,c,d,e){var g=f.hasData(a)&&f._data(a),h,i,j,k,l,m,n,o,p,q,r,s;if(!!g&&!!(o=g.events)){b=f.trim(I(b||"")).split(" ");for(h=0;h<b.length;h++){i=A.exec(b[h])||[],j=k=i[1],l=i[2];if(!j){for(j in o)f.event.remove(a,j+b[h],c,d,!0);continue}p=f.event.special[j]||{},j=(d?p.delegateType:p.bindType)||j,r=o[j]||[],m=r.length,l=l?new RegExp("(^|\\.)"+l.split(".").sort().join("\\.(?:.*\\.)?")+"(\\.|$)"):null;for(n=0;n<r.length;n++)s=r[n],(e||k===s.origType)&&(!c||c.guid===s.guid)&&(!l||l.test(s.namespace))&&(!d||d===s.selector||d==="**"&&s.selector)&&(r.splice(n--,1),s.selector&&r.delegateCount--,p.remove&&p.remove.call(a,s));r.length===0&&m!==r.length&&((!p.teardown||p.teardown.call(a,l)===!1)&&f.removeEvent(a,j,g.handle),delete o[j])}f.isEmptyObject(o)&&(q=g.handle,q&&(q.elem=null),f.removeData(a,["events","handle"],!0))}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){if(!e||e.nodeType!==3&&e.nodeType!==8){var h=c.type||c,i=[],j,k,l,m,n,o,p,q,r,s;if(E.test(h+f.event.triggered))return;h.indexOf("!")>=0&&(h=h.slice(0,-1),k=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if((!e||f.event.customEvent[h])&&!f.event.global[h])return;c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.isTrigger=!0,c.exclusive=k,c.namespace=i.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)"):null,o=h.indexOf(":")<0?"on"+h:"";if(!e){j=f.cache;for(l in j)j[l].events&&j[l].events[h]&&f.event.trigger(c,d,j[l].handle.elem,!0);return}c.result=b,c.target||(c.target=e),d=d!=null?f.makeArray(d):[],d.unshift(c),p=f.event.special[h]||{};if(p.trigger&&p.trigger.apply(e,d)===!1)return;r=[[e,p.bindType||h]];if(!g&&!p.noBubble&&!f.isWindow(e)){s=p.delegateType||h,m=E.test(s+h)?e:e.parentNode,n=null;for(;m;m=m.parentNode)r.push([m,s]),n=m;n&&n===e.ownerDocument&&r.push([n.defaultView||n.parentWindow||a,s])}for(l=0;l<r.length&&!c.isPropagationStopped();l++)m=r[l][0],c.type=r[l][1],q=(f._data(m,"events")||{})[c.type]&&f._data(m,"handle"),q&&q.apply(m,d),q=o&&m[o],q&&f.acceptData(m)&&q.apply(m,d)===!1&&c.preventDefault();c.type=h,!g&&!c.isDefaultPrevented()&&(!p._default||p._default.apply(e.ownerDocument,d)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)&&o&&e[h]&&(h!=="focus"&&h!=="blur"||c.target.offsetWidth!==0)&&!f.isWindow(e)&&(n=e[o],n&&(e[o]=null),f.event.triggered=h,e[h](),f.event.triggered=b,n&&(e[o]=n));return c.result}},dispatch:function(c){c=f.event.fix(c||a.event);var d=(f._data(this,"events")||{})[c.type]||[],e=d.delegateCount,g=[].slice.call(arguments,0),h=!c.exclusive&&!c.namespace,i=f.event.special[c.type]||{},j=[],k,l,m,n,o,p,q,r,s,t,u;g[0]=c,c.delegateTarget=this;if(!i.preDispatch||i.preDispatch.call(this,c)!==!1){if(e&&(!c.button||c.type!=="click")){n=f(this),n.context=this.ownerDocument||this;for(m=c.target;m!=this;m=m.parentNode||this)if(m.disabled!==!0){p={},r=[],n[0]=m;for(k=0;k<e;k++)s=d[k],t=s.selector,p[t]===b&&(p[t]=s.quick?H(m,s.quick):n.is(t)),p[t]&&r.push(s);r.length&&j.push({elem:m,matches:r})}}d.length>e&&j.push({elem:this,matches:d.slice(e)});for(k=0;k<j.length&&!c.isPropagationStopped();k++){q=j[k],c.currentTarget=q.elem;for(l=0;l<q.matches.length&&!c.isImmediatePropagationStopped();l++){s=q.matches[l];if(h||!c.namespace&&!s.namespace||c.namespace_re&&c.namespace_re.test(s.namespace))c.data=s.data,c.handleObj=s,o=((f.event.special[s.origType]||{}).handle||s.handler).apply(q.elem,g),o!==b&&(c.result=o,o===!1&&(c.preventDefault(),c.stopPropagation()))}}i.postDispatch&&i.postDispatch.call(this,c);return c.result}},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode);return a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,d){var e,f,g,h=d.button,i=d.fromElement;a.pageX==null&&d.clientX!=null&&(e=a.target.ownerDocument||c,f=e.documentElement,g=e.body,a.pageX=d.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=d.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?d.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0);return a}},fix:function(a){if(a[f.expando])return a;var d,e,g=a,h=f.event.fixHooks[a.type]||{},i=h.props?this.props.concat(h.props):this.props;a=f.Event(g);for(d=i.length;d;)e=i[--d],a[e]=g[e];a.target||(a.target=g.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey===b&&(a.metaKey=a.ctrlKey);return h.filter?h.filter(a,g):a},special:{ready:{setup:f.bindReady},load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=f.extend(new f.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?f.event.trigger(e,null,b):f.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},f.event.handle=f.event.dispatch,f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!(this instanceof f.Event))return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?K:J):this.type=a,b&&f.extend(this,b),this.timeStamp=a&&a.timeStamp||f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=K;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=K;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=K,this.stopPropagation()},isDefaultPrevented:J,isPropagationStopped:J,isImmediatePropagationStopped:J},f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c=this,d=a.relatedTarget,e=a.handleObj,g=e.selector,h;if(!d||d!==c&&!f.contains(c,d))a.type=e.origType,h=e.handler.apply(this,arguments),a.type=b;return h}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(){if(f.nodeName(this,"form"))return!1;f.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=f.nodeName(c,"input")||f.nodeName(c,"button")?c.form:b;d&&!d._submit_attached&&(f.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),d._submit_attached=!0)})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&f.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(f.nodeName(this,"form"))return!1;f.event.remove(this,"._submit")}}),f.support.changeBubbles||(f.event.special.change={setup:function(){if(z.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")f.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),f.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1,f.event.simulate("change",this,a,!0))});return!1}f.event.add(this,"beforeactivate._change",function(a){var b=a.target;z.test(b.nodeName)&&!b._change_attached&&(f.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&f.event.simulate("change",this.parentNode,a,!0)}),b._change_attached=!0)})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){f.event.remove(this,"._change");return z.test(this.nodeName)}}),f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){var d=0,e=function(a){f.event.simulate(b,a.target,f.event.fix(a),!0)};f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.fn.extend({on:function(a,c,d,e,g){var h,i;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(i in a)this.on(i,c,d,a[i],g);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=J;else if(!e)return this;g===1&&(h=e,e=function(a){f().off(a);return h.apply(this,arguments)},e.guid=h.guid||(h.guid=f.guid++));return this.each(function(){f.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){if(a&&a.preventDefault&&a.handleObj){var e=a.handleObj;f(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler);return this}if(typeof a=="object"){for(var g in a)this.off(g,c,a[g]);return this}if(c===!1||typeof c=="function")d=c,c=b;d===!1&&(d=J);return this.each(function(){f.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){f(this.context).on(a,this.selector,b,c);return this},die:function(a,b){f(this.context).off(a,this.selector||"**",b);return this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length==1?this.off(a,"**"):this.off(b,a,c)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f._data(this,"lastToggle"+a.guid)||0)%d;f._data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),f.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.on(b,null,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0),C.test(b)&&(f.event.fixHooks[b]=f.event.keyHooks),D.test(b)&&(f.event.fixHooks[b]=f.event.mouseHooks)}),function(){function x(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}if(j.nodeType===1){g||(j[d]=c,j.sizset=h);if(typeof b!="string"){if(j===b){k=!0;break}}else if(m.filter(b,[j]).length>0){k=j;break}}j=j[a]}e[h]=k}}}function w(a,b,c,e,f,g){for(var h=0,i=e.length;h<i;h++){var j=e[h];if(j){var k=!1;j=j[a];while(j){if(j[d]===c){k=e[j.sizset];break}j.nodeType===1&&!g&&(j[d]=c,j.sizset=h);if(j.nodeName.toLowerCase()===b){k=j;break}j=j[a]}e[h]=k}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d="sizcache"+(Math.random()+"").replace(".",""),e=0,g=Object.prototype.toString,h=!1,i=!0,j=/\\/g,k=/\r\n/g,l=/\W/;[0,0].sort(function(){i=!1;return 0});var m=function(b,d,e,f){e=e||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return e;var i,j,k,l,n,q,r,t,u=!0,v=m.isXML(d),w=[],x=b;do{a.exec(""),i=a.exec(x);if(i){x=i[3],w.push(i[1]);if(i[2]){l=i[3];break}}}while(i);if(w.length>1&&p.exec(b))if(w.length===2&&o.relative[w[0]])j=y(w[0]+w[1],d,f);else{j=o.relative[w[0]]?[d]:m(w.shift(),d);while(w.length)b=w.shift(),o.relative[b]&&(b+=w.shift()),j=y(b,j,f)}else{!f&&w.length>1&&d.nodeType===9&&!v&&o.match.ID.test(w[0])&&!o.match.ID.test(w[w.length-1])&&(n=m.find(w.shift(),d,v),d=n.expr?m.filter(n.expr,n.set)[0]:n.set[0]);if(d){n=f?{expr:w.pop(),set:s(f)}:m.find(w.pop(),w.length===1&&(w[0]==="~"||w[0]==="+")&&d.parentNode?d.parentNode:d,v),j=n.expr?m.filter(n.expr,n.set):n.set,w.length>0?k=s(j):u=!1;while(w.length)q=w.pop(),r=q,o.relative[q]?r=w.pop():q="",r==null&&(r=d),o.relative[q](k,r,v)}else k=w=[]}k||(k=j),k||m.error(q||b);if(g.call(k)==="[object Array]")if(!u)e.push.apply(e,k);else if(d&&d.nodeType===1)for(t=0;k[t]!=null;t++)k[t]&&(k[t]===!0||k[t].nodeType===1&&m.contains(d,k[t]))&&e.push(j[t]);else for(t=0;k[t]!=null;t++)k[t]&&k[t].nodeType===1&&e.push(j[t]);else s(k,e);l&&(m(l,h,e,f),m.uniqueSort(e));return e};m.uniqueSort=function(a){if(u){h=i,a.sort(u);if(h)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},m.matches=function(a,b){return m(a,null,null,b)},m.matchesSelector=function(a,b){return m(b,null,null,[a]).length>0},m.find=function(a,b,c){var d,e,f,g,h,i;if(!a)return[];for(e=0,f=o.order.length;e<f;e++){h=o.order[e];if(g=o.leftMatch[h].exec(a)){i=g[1],g.splice(1,1);if(i.substr(i.length-1)!=="\\"){g[1]=(g[1]||"").replace(j,""),d=o.find[h](g,b,c);if(d!=null){a=a.replace(o.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},m.filter=function(a,c,d,e){var f,g,h,i,j,k,l,n,p,q=a,r=[],s=c,t=c&&c[0]&&m.isXML(c[0]);while(a&&c.length){for(h in o.filter)if((f=o.leftMatch[h].exec(a))!=null&&f[2]){k=o.filter[h],l=f[1],g=!1,f.splice(1,1);if(l.substr(l.length-1)==="\\")continue;s===r&&(r=[]);if(o.preFilter[h]){f=o.preFilter[h](f,s,d,r,e,t);if(!f)g=i=!0;else if(f===!0)continue}if(f)for(n=0;(j=s[n])!=null;n++)j&&(i=k(j,f,n,s),p=e^i,d&&i!=null?p?g=!0:s[n]=!1:p&&(r.push(j),g=!0));if(i!==b){d||(s=r),a=a.replace(o.match[h],"");if(!g)return[];break}}if(a===q)if(g==null)m.error(a);else break;q=a}return s},m.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)};var n=m.getText=function(a){var b,c,d=a.nodeType,e="";if(d){if(d===1||d===9||d===11){if(typeof a.textContent=="string")return a.textContent;if(typeof a.innerText=="string")return a.innerText.replace(k,"");for(a=a.firstChild;a;a=a.nextSibling)e+=n(a)}else if(d===3||d===4)return a.nodeValue}else for(b=0;c=a[b];b++)c.nodeType!==8&&(e+=n(c));return e},o=m.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!l.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&m.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!l.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&m.filter(b,a,!0)}},"":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("parentNode",b,f,a,d,c)},"~":function(a,b,c){var d,f=e++,g=x;typeof b=="string"&&!l.test(b)&&(b=b.toLowerCase(),d=b,g=w),g("previousSibling",b,f,a,d,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(j,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(j,"")},TAG:function(a,b){return a[1].replace(j,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||m.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&m.error(a[0]);a[0]=e++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(j,"");!f&&o.attrMap[g]&&(a[1]=o.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(j,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=m(b[3],null,null,c);else{var g=m.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(o.match.POS.test(b[0])||o.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!m(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=o.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||n([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}m.error(e)},CHILD:function(a,b){var c,e,f,g,h,i,j,k=b[1],l=a;switch(k){case"only":case"first":while(l=l.previousSibling)if(l.nodeType===1)return!1;if(k==="first")return!0;l=a;case"last":while(l=l.nextSibling)if(l.nodeType===1)return!1;return!0;case"nth":c=b[2],e=b[3];if(c===1&&e===0)return!0;f=b[0],g=a.parentNode;if(g&&(g[d]!==f||!a.nodeIndex)){i=0;for(l=g.firstChild;l;l=l.nextSibling)l.nodeType===1&&(l.nodeIndex=++i);g[d]=f}j=a.nodeIndex-e;return c===0?j===0:j%c===0&&j/c>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||!!a.nodeName&&a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=m.attr?m.attr(a,c):o.attrHandle[c]?o.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":!f&&m.attr?d!=null:f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=o.setFilters[e];if(f)return f(a,c,b,d)}}},p=o.match.POS,q=function(a,b){return"\\"+(b-0+1)};for(var r in o.match)o.match[r]=new RegExp(o.match[r].source+/(?![^\[]*\])(?![^\(]*\))/.source),o.leftMatch[r]=new RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[r].source.replace(/\\(\d+)/g,q));o.match.globalPOS=p;var s=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(t){s=function(a,b){var c=0,d=b||[];if(g.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var e=a.length;c<e;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var u,v;c.documentElement.compareDocumentPosition?u=function(a,b){if(a===b){h=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(u=function(a,b){if(a===b){h=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,i=b.parentNode,j=g;if(g===i)return v(a,b);if(!g)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return v(e[k],f[k]);return k===c?v(a,f[k],-1):v(e[k],b,1)},v=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(o.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},o.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(o.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(o.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=m,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){m=function(b,e,f,g){e=e||c;if(!g&&!m.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return s(e.getElementsByTagName(b),f);if(h[2]&&o.find.CLASS&&e.getElementsByClassName)return s(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return s([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return s([],f);if(i.id===h[3])return s([i],f)}try{return s(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var k=e,l=e.getAttribute("id"),n=l||d,p=e.parentNode,q=/^\s*[+~]/.test(b);l?n=n.replace(/'/g,"\\$&"):e.setAttribute("id",n),q&&p&&(e=e.parentNode);try{if(!q||p)return s(e.querySelectorAll("[id='"+n+"'] "+b),f)}catch(r){}finally{l||k.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)m[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}m.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!m.isXML(a))try{if(e||!o.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return m(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;o.order.splice(1,0,"CLASS"),o.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?m.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?m.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:m.contains=function(){return!1},m.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var y=function(a,b,c){var d,e=[],f="",g=b.nodeType?[b]:b;while(d=o.match.PSEUDO.exec(a))f+=d[0],a=a.replace(o.match.PSEUDO,"");a=o.relative[a]?a+"*":a;for(var h=0,i=g.length;h<i;h++)m(a,g[h],e,c);return m.filter(f,e)};m.attr=f.attr,m.selectors.attrMap={},f.find=m,f.expr=m.selectors,f.expr[":"]=f.expr.filters,f.unique=m.uniqueSort,f.text=m.getText,f.isXMLDoc=m.isXML,f.contains=m.contains}();var L=/Until$/,M=/^(?:parents|prevUntil|prevAll)/,N=/,/,O=/^.[^:#\[\.,]*$/,P=Array.prototype.slice,Q=f.expr.match.globalPOS,R={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(T(this,a,!1),"not",a)},filter:function(a){return this.pushStack(T(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?Q.test(a)?f(a,this.context).index(this[0])>=0:f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h=1;while(g&&g.ownerDocument&&g!==b){for(d=0;d<a.length;d++)f(g).is(a[d])&&c.push({selector:a[d],elem:g,level:h});g=g.parentNode,h++}return c}var i=Q.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(i?i.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(S(c[0])||S(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c);L.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!R[a]?f.unique(e):e,(this.length>1||N.test(d))&&M.test(a)&&(e=e.reverse());return this.pushStack(e,a,P.call(arguments).join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var V="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|style)/i,bb=/<(?:script|object|embed|option|style)/i,bc=new RegExp("<(?:"+V+")[\\s/>]","i"),bd=/checked\s*(?:[^=]|=\s*.checked.)/i,be=/\/(java|ecma)script/i,bf=/^\s*<!(?:\[CDATA\[|\-\-)/,bg={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bh=U(c);bg.optgroup=bg.option,bg.tbody=bg.tfoot=bg.colgroup=bg.caption=bg.thead,bg.th=bg.td,f.support.htmlSerialize||(bg._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){return f.access(this,function(a){return a===b?f.text(this):this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=f.isFunction(a);return this.each(function(c){f(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f +.clean(arguments);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f.clean(arguments));return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){return f.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!bg[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(f.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(g){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bd.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bi(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,function(a,b){b.src?f.ajax({type:"GET",global:!1,url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bf,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i,j=a[0];b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof j=="string"&&j.length<512&&i===c&&j.charAt(0)==="<"&&!bb.test(j)&&(f.support.checkClone||!bd.test(j))&&(f.support.html5Clone||!bc.test(j))&&(g=!0,h=f.fragments[j],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean(a,i,e,d)),g&&(f.fragments[j]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d,e,g,h=f.support.html5Clone||f.isXMLDoc(a)||!bc.test("<"+a.nodeName+">")?a.cloneNode(!0):bo(a);if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bk(a,h),d=bl(a),e=bl(h);for(g=0;d[g];++g)e[g]&&bk(d[g],e[g])}if(b){bj(a,h);if(c){d=bl(a),e=bl(h);for(g=0;d[g];++g)bj(d[g],e[g])}}d=e=null;return h},clean:function(a,b,d,e){var g,h,i,j=[];b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);for(var k=0,l;(l=a[k])!=null;k++){typeof l=="number"&&(l+="");if(!l)continue;if(typeof l=="string")if(!_.test(l))l=b.createTextNode(l);else{l=l.replace(Y,"<$1></$2>");var m=(Z.exec(l)||["",""])[1].toLowerCase(),n=bg[m]||bg._default,o=n[0],p=b.createElement("div"),q=bh.childNodes,r;b===c?bh.appendChild(p):U(b).appendChild(p),p.innerHTML=n[1]+l+n[2];while(o--)p=p.lastChild;if(!f.support.tbody){var s=$.test(l),t=m==="table"&&!s?p.firstChild&&p.firstChild.childNodes:n[1]==="<table>"&&!s?p.childNodes:[];for(i=t.length-1;i>=0;--i)f.nodeName(t[i],"tbody")&&!t[i].childNodes.length&&t[i].parentNode.removeChild(t[i])}!f.support.leadingWhitespace&&X.test(l)&&p.insertBefore(b.createTextNode(X.exec(l)[0]),p.firstChild),l=p.childNodes,p&&(p.parentNode.removeChild(p),q.length>0&&(r=q[q.length-1],r&&r.parentNode&&r.parentNode.removeChild(r)))}var u;if(!f.support.appendChecked)if(l[0]&&typeof (u=l.length)=="number")for(i=0;i<u;i++)bn(l[i]);else bn(l);l.nodeType?j.push(l):j=f.merge(j,l)}if(d){g=function(a){return!a.type||be.test(a.type)};for(k=0;j[k];k++){h=j[k];if(e&&f.nodeName(h,"script")&&(!h.type||be.test(h.type)))e.push(h.parentNode?h.parentNode.removeChild(h):h);else{if(h.nodeType===1){var v=f.grep(h.getElementsByTagName("script"),g);j.splice.apply(j,[k+1,0].concat(v))}d.appendChild(h)}}}return j},cleanData:function(a){var b,c,d=f.cache,e=f.event.special,g=f.support.deleteExpando;for(var h=0,i;(i=a[h])!=null;h++){if(i.nodeName&&f.noData[i.nodeName.toLowerCase()])continue;c=i[f.expando];if(c){b=d[c];if(b&&b.events){for(var j in b.events)e[j]?f.event.remove(i,j):f.removeEvent(i,j,b.handle);b.handle&&(b.handle.elem=null)}g?delete i[f.expando]:i.removeAttribute&&i.removeAttribute(f.expando),delete d[c]}}}});var bp=/alpha\([^)]*\)/i,bq=/opacity=([^)]*)/,br=/([A-Z]|^ms)/g,bs=/^[\-+]?(?:\d*\.)?\d+$/i,bt=/^-?(?:\d*\.)?\d+(?!px)[^\d\s]+$/i,bu=/^([\-+])=([\-+.\de]+)/,bv=/^margin/,bw={position:"absolute",visibility:"hidden",display:"block"},bx=["Top","Right","Bottom","Left"],by,bz,bA;f.fn.css=function(a,c){return f.access(this,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)},a,c,arguments.length>1)},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=by(a,"opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=bu.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(by)return by(a,c)},swap:function(a,b,c){var d={},e,f;for(f in b)d[f]=a.style[f],a.style[f]=b[f];e=c.call(a);for(f in b)a.style[f]=d[f];return e}}),f.curCSS=f.css,c.defaultView&&c.defaultView.getComputedStyle&&(bz=function(a,b){var c,d,e,g,h=a.style;b=b.replace(br,"-$1").toLowerCase(),(d=a.ownerDocument.defaultView)&&(e=d.getComputedStyle(a,null))&&(c=e.getPropertyValue(b),c===""&&!f.contains(a.ownerDocument.documentElement,a)&&(c=f.style(a,b))),!f.support.pixelMargin&&e&&bv.test(b)&&bt.test(c)&&(g=h.width,h.width=c,c=e.width,h.width=g);return c}),c.documentElement.currentStyle&&(bA=function(a,b){var c,d,e,f=a.currentStyle&&a.currentStyle[b],g=a.style;f==null&&g&&(e=g[b])&&(f=e),bt.test(f)&&(c=g.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),g.left=b==="fontSize"?"1em":f,f=g.pixelLeft+"px",g.left=c,d&&(a.runtimeStyle.left=d));return f===""?"auto":f}),by=bz||bA,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth!==0?bB(a,b,d):f.swap(a,bw,function(){return bB(a,b,d)})},set:function(a,b){return bs.test(b)?b+"px":b}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bq.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNumeric(b)?"alpha(opacity="+b*100+")":"",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bp,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bp.test(g)?g.replace(bp,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){return f.swap(a,{display:"inline-block"},function(){return b?by(a,"margin-right"):a.style.marginRight})}})}),f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style&&a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)}),f.each({margin:"",padding:"",border:"Width"},function(a,b){f.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bx[d]+b]=e[d]||e[d-2]||e[0];return f}}});var bC=/%20/g,bD=/\[\]$/,bE=/\r?\n/g,bF=/#.*$/,bG=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bH=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bI=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bJ=/^(?:GET|HEAD)$/,bK=/^\/\//,bL=/\?/,bM=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bN=/^(?:select|textarea)/i,bO=/\s+/,bP=/([?&])_=[^&]*/,bQ=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bR=f.fn.load,bS={},bT={},bU,bV,bW=["*/"]+["*"];try{bU=e.href}catch(bX){bU=c.createElement("a"),bU.href="",bU=bU.href}bV=bQ.exec(bU.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bR)return bR.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bM,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bN.test(this.nodeName)||bH.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bE,"\r\n")}}):{name:b.name,value:c.replace(bE,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.on(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?b$(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),b$(a,b);return a},ajaxSettings:{url:bU,isLocal:bI.test(bV[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bW},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bY(bS),ajaxTransport:bY(bT),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?ca(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=cb(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.fireWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f.Callbacks("once memory"),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bG.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.add,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bF,"").replace(bK,bV[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bO),d.crossDomain==null&&(r=bQ.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bV[1]&&r[2]==bV[2]&&(r[3]||(r[1]==="http:"?80:443))==(bV[3]||(bV[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bZ(bS,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bJ.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bL.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bP,"$1_="+x);d.url=y+(y===d.url?(bL.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bW+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bZ(bT,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){if(s<2)w(-1,z);else throw z}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)b_(g,a[g],c,e);return d.join("&").replace(bC,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var cc=f.now(),cd=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+cc++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=typeof b.data=="string"&&/^application\/x\-www\-form\-urlencoded/.test(b.contentType);if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(cd.test(b.url)||e&&cd.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(cd,l),b.url===j&&(e&&(k=k.replace(cd,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var ce=a.ActiveXObject?function(){for(var a in cg)cg[a](0,1)}:!1,cf=0,cg;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ch()||ci()}:ch,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,ce&&delete cg[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n);try{m.text=h.responseText}catch(a){}try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cf,ce&&(cg||(cg={},f(a).unload(ce)),cg[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cj={},ck,cl,cm=/^(?:toggle|show|hide)$/,cn=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,co,cp=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cq;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(ct("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),(e===""&&f.css(d,"display")==="none"||!f.contains(d.ownerDocument.documentElement,d))&&f._data(d,"olddisplay",cu(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(ct("hide",3),a,b,c);var d,e,g=0,h=this.length;for(;g<h;g++)d=this[g],d.style&&(e=f.css(d,"display"),e!=="none"&&!f._data(d,"olddisplay")&&f._data(d,"olddisplay",e));for(g=0;g<h;g++)this[g].style&&(this[g].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(ct("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){function g(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o,p,q;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]);if((k=f.cssHooks[g])&&"expand"in k){l=k.expand(a[g]),delete a[g];for(i in l)i in a||(a[i]=l[i])}}for(g in a){h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(!f.support.inlineBlockNeedsLayout||cu(this.nodeName)==="inline"?this.style.display="inline-block":this.style.zoom=1))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)j=new f.fx(this,b,i),h=a[i],cm.test(h)?(q=f._data(this,"toggle"+i)||(h==="toggle"?d?"show":"hide":0),q?(f._data(this,"toggle"+i,q==="show"?"hide":"show"),j[q]()):j[h]()):(m=cn.exec(h),n=j.cur(),m?(o=parseFloat(m[2]),p=m[3]||(f.cssNumber[i]?"":"px"),p!=="px"&&(f.style(this,i,(o||1)+p),n=(o||1)/j.cur()*n,f.style(this,i,n+p)),m[1]&&(o=(m[1]==="-="?-1:1)*o+n),j.custom(n,o,p)):j.custom(n,h,""));return!0}var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return e.queue===!1?this.each(g):this.queue(e.queue,g)},stop:function(a,c,d){typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]);return this.each(function(){function h(a,b,c){var e=b[c];f.removeData(a,c,!0),e.stop(d)}var b,c=!1,e=f.timers,g=f._data(this);d||f._unmark(!0,this);if(a==null)for(b in g)g[b]&&g[b].stop&&b.indexOf(".run")===b.length-4&&h(this,g,b);else g[b=a+".run"]&&g[b].stop&&h(this,g,b);for(b=e.length;b--;)e[b].elem===this&&(a==null||e[b].queue===a)&&(d?e[b](!0):e[b].saveState(),c=!0,e.splice(b,1));(!d||!c)&&f.dequeue(this,a)})}}),f.each({slideDown:ct("show",1),slideUp:ct("hide",1),slideToggle:ct("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue?f.dequeue(this,d.queue):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a){return a},swing:function(a){return-Math.cos(a*Math.PI)/2+.5}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,c,d){function h(a){return e.step(a)}var e=this,g=f.fx;this.startTime=cq||cr(),this.end=c,this.now=this.start=a,this.pos=this.state=0,this.unit=d||this.unit||(f.cssNumber[this.prop]?"":"px"),h.queue=this.options.queue,h.elem=this.elem,h.saveState=function(){f._data(e.elem,"fxshow"+e.prop)===b&&(e.options.hide?f._data(e.elem,"fxshow"+e.prop,e.start):e.options.show&&f._data(e.elem,"fxshow"+e.prop,e.end))},h()&&f.timers.push(h)&&!co&&(co=setInterval(g.tick,g.interval))},show:function(){var a=f._data(this.elem,"fxshow"+this.prop);this.options.orig[this.prop]=a||f.style(this.elem,this.prop),this.options.show=!0,a!==b?this.custom(this.cur(),a):this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f._data(this.elem,"fxshow"+this.prop)||f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b,c,d,e=cq||cr(),g=!0,h=this.elem,i=this.options;if(a||e>=i.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),i.animatedProperties[this.prop]=!0;for(b in i.animatedProperties)i.animatedProperties[b]!==!0&&(g=!1);if(g){i.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){h.style["overflow"+b]=i.overflow[a]}),i.hide&&f(h).hide();if(i.hide||i.show)for(b in i.animatedProperties)f.style(h,b,i.orig[b]),f.removeData(h,"fxshow"+b,!0),f.removeData(h,"toggle"+b,!0);d=i.complete,d&&(i.complete=!1,d.call(h))}return!1}i.duration==Infinity?this.now=e:(c=e-this.startTime,this.state=c/i.duration,this.pos=f.easing[i.animatedProperties[this.prop]](this.state,c,0,1,i.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){var a,b=f.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||f.fx.stop()},interval:13,stop:function(){clearInterval(co),co=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=a.now+a.unit:a.elem[a.prop]=a.now}}}),f.each(cp.concat.apply([],cp),function(a,b){b.indexOf("margin")&&(f.fx.step[b]=function(a){f.style(a.elem,b,Math.max(0,a.now)+a.unit)})}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cv,cw=/^t(?:able|d|h)$/i,cx=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?cv=function(a,b,c,d){try{d=a.getBoundingClientRect()}catch(e){}if(!d||!f.contains(c,a))return d?{top:d.top,left:d.left}:{top:0,left:0};var g=b.body,h=cy(b),i=c.clientTop||g.clientTop||0,j=c.clientLeft||g.clientLeft||0,k=h.pageYOffset||f.support.boxModel&&c.scrollTop||g.scrollTop,l=h.pageXOffset||f.support.boxModel&&c.scrollLeft||g.scrollLeft,m=d.top+k-i,n=d.left+l-j;return{top:m,left:n}}:cv=function(a,b,c){var d,e=a.offsetParent,g=a,h=b.body,i=b.defaultView,j=i?i.getComputedStyle(a,null):a.currentStyle,k=a.offsetTop,l=a.offsetLeft;while((a=a.parentNode)&&a!==h&&a!==c){if(f.support.fixedPosition&&j.position==="fixed")break;d=i?i.getComputedStyle(a,null):a.currentStyle,k-=a.scrollTop,l-=a.scrollLeft,a===e&&(k+=a.offsetTop,l+=a.offsetLeft,f.support.doesNotAddBorder&&(!f.support.doesAddBorderForTableAndCells||!cw.test(a.nodeName))&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),g=e,e=a.offsetParent),f.support.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"&&(k+=parseFloat(d.borderTopWidth)||0,l+=parseFloat(d.borderLeftWidth)||0),j=d}if(j.position==="relative"||j.position==="static")k+=h.offsetTop,l+=h.offsetLeft;f.support.fixedPosition&&j.position==="fixed"&&(k+=Math.max(c.scrollTop,h.scrollTop),l+=Math.max(c.scrollLeft,h.scrollLeft));return{top:k,left:l}},f.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){f.offset.setOffset(this,a,b)});var c=this[0],d=c&&c.ownerDocument;if(!d)return null;if(c===d.body)return f.offset.bodyOffset(c);return cv(c,d,d.documentElement)},f.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=cx.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!cx.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);f.fn[a]=function(e){return f.access(this,function(a,e,g){var h=cy(a);if(g===b)return h?c in h?h[c]:f.support.boxModel&&h.document.documentElement[e]||h.document.body[e]:a[e];h?h.scrollTo(d?f(h).scrollLeft():g,d?g:f(h).scrollTop()):a[e]=g},a,e,arguments.length,null)}}),f.each({Height:"height",Width:"width"},function(a,c){var d="client"+a,e="scroll"+a,g="offset"+a;f.fn["inner"+a]=function(){var a=this[0];return a?a.style?parseFloat(f.css(a,c,"padding")):this[c]():null},f.fn["outer"+a]=function(a){var b=this[0];return b?b.style?parseFloat(f.css(b,c,a?"margin":"border")):this[c]():null},f.fn[c]=function(a){return f.access(this,function(a,c,h){var i,j,k,l;if(f.isWindow(a)){i=a.document,j=i.documentElement[d];return f.support.boxModel&&j||i.body&&i.body[d]||j}if(a.nodeType===9){i=a.documentElement;if(i[d]>=i[e])return i[d];return Math.max(a.body[e],i[e],a.body[g],i[g])}if(h===b){k=f.css(a,c),l=parseFloat(k);return f.isNumeric(l)?l:k}f(a).css(c,h)},c,a,arguments.length,null)}}),a.jQuery=a.$=f,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return f})})(window); \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-ui-1.8.23.custom.min.js b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-ui-1.8.23.custom.min.js new file mode 100644 index 0000000..b9edf70 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery-ui-1.8.23.custom.min.js @@ -0,0 +1,25 @@ +/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){function c(b,c){var e=b.nodeName.toLowerCase();if("area"===e){var f=b.parentNode,g=f.name,h;return!b.href||!g||f.nodeName.toLowerCase()!=="map"?!1:(h=a("img[usemap=#"+g+"]")[0],!!h&&d(h))}return(/input|select|textarea|button|object/.test(e)?!b.disabled:"a"==e?b.href||c:c)&&d(b)}function d(b){return!a(b).parents().andSelf().filter(function(){return a.curCSS(this,"visibility")==="hidden"||a.expr.filters.hidden(this)}).length}a.ui=a.ui||{};if(a.ui.version)return;a.extend(a.ui,{version:"1.8.23",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}}),a.fn.extend({propAttr:a.fn.prop||a.fn.attr,_focus:a.fn.focus,focus:function(b,c){return typeof b=="number"?this.each(function(){var d=this;setTimeout(function(){a(d).focus(),c&&c.call(d)},b)}):this._focus.apply(this,arguments)},scrollParent:function(){var b;return a.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?b=this.parents().filter(function(){return/(relative|absolute|fixed)/.test(a.curCSS(this,"position",1))&&/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0):b=this.parents().filter(function(){return/(auto|scroll)/.test(a.curCSS(this,"overflow",1)+a.curCSS(this,"overflow-y",1)+a.curCSS(this,"overflow-x",1))}).eq(0),/fixed/.test(this.css("position"))||!b.length?a(document):b},zIndex:function(c){if(c!==b)return this.css("zIndex",c);if(this.length){var d=a(this[0]),e,f;while(d.length&&d[0]!==document){e=d.css("position");if(e==="absolute"||e==="relative"||e==="fixed"){f=parseInt(d.css("zIndex"),10);if(!isNaN(f)&&f!==0)return f}d=d.parent()}}return 0},disableSelection:function(){return this.bind((a.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}}),a("<a>").outerWidth(1).jquery||a.each(["Width","Height"],function(c,d){function h(b,c,d,f){return a.each(e,function(){c-=parseFloat(a.curCSS(b,"padding"+this,!0))||0,d&&(c-=parseFloat(a.curCSS(b,"border"+this+"Width",!0))||0),f&&(c-=parseFloat(a.curCSS(b,"margin"+this,!0))||0)}),c}var e=d==="Width"?["Left","Right"]:["Top","Bottom"],f=d.toLowerCase(),g={innerWidth:a.fn.innerWidth,innerHeight:a.fn.innerHeight,outerWidth:a.fn.outerWidth,outerHeight:a.fn.outerHeight};a.fn["inner"+d]=function(c){return c===b?g["inner"+d].call(this):this.each(function(){a(this).css(f,h(this,c)+"px")})},a.fn["outer"+d]=function(b,c){return typeof b!="number"?g["outer"+d].call(this,b):this.each(function(){a(this).css(f,h(this,b,!0,c)+"px")})}}),a.extend(a.expr[":"],{data:a.expr.createPseudo?a.expr.createPseudo(function(b){return function(c){return!!a.data(c,b)}}):function(b,c,d){return!!a.data(b,d[3])},focusable:function(b){return c(b,!isNaN(a.attr(b,"tabindex")))},tabbable:function(b){var d=a.attr(b,"tabindex"),e=isNaN(d);return(e||d>=0)&&c(b,!e)}}),a(function(){var b=document.body,c=b.appendChild(c=document.createElement("div"));c.offsetHeight,a.extend(c.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0}),a.support.minHeight=c.offsetHeight===100,a.support.selectstart="onselectstart"in c,b.removeChild(c).style.display="none"}),a.curCSS||(a.curCSS=a.css),a.extend(a.ui,{plugin:{add:function(b,c,d){var e=a.ui[b].prototype;for(var f in d)e.plugins[f]=e.plugins[f]||[],e.plugins[f].push([c,d[f]])},call:function(a,b,c){var d=a.plugins[b];if(!d||!a.element[0].parentNode)return;for(var e=0;e<d.length;e++)a.options[d[e][0]]&&d[e][1].apply(a.element,c)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(b,c){if(a(b).css("overflow")==="hidden")return!1;var d=c&&c==="left"?"scrollLeft":"scrollTop",e=!1;return b[d]>0?!0:(b[d]=1,e=b[d]>0,b[d]=0,e)},isOverAxis:function(a,b,c){return a>b&&a<b+c},isOver:function(b,c,d,e,f,g){return a.ui.isOverAxis(b,d,f)&&a.ui.isOverAxis(c,e,g)}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.widget.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){if(a.cleanData){var c=a.cleanData;a.cleanData=function(b){for(var d=0,e;(e=b[d])!=null;d++)try{a(e).triggerHandler("remove")}catch(f){}c(b)}}else{var d=a.fn.remove;a.fn.remove=function(b,c){return this.each(function(){return c||(!b||a.filter(b,[this]).length)&&a("*",this).add([this]).each(function(){try{a(this).triggerHandler("remove")}catch(b){}}),d.call(a(this),b,c)})}}a.widget=function(b,c,d){var e=b.split(".")[0],f;b=b.split(".")[1],f=e+"-"+b,d||(d=c,c=a.Widget),a.expr[":"][f]=function(c){return!!a.data(c,b)},a[e]=a[e]||{},a[e][b]=function(a,b){arguments.length&&this._createWidget(a,b)};var g=new c;g.options=a.extend(!0,{},g.options),a[e][b].prototype=a.extend(!0,g,{namespace:e,widgetName:b,widgetEventPrefix:a[e][b].prototype.widgetEventPrefix||b,widgetBaseClass:f},d),a.widget.bridge(b,a[e][b])},a.widget.bridge=function(c,d){a.fn[c]=function(e){var f=typeof e=="string",g=Array.prototype.slice.call(arguments,1),h=this;return e=!f&&g.length?a.extend.apply(null,[!0,e].concat(g)):e,f&&e.charAt(0)==="_"?h:(f?this.each(function(){var d=a.data(this,c),f=d&&a.isFunction(d[e])?d[e].apply(d,g):d;if(f!==d&&f!==b)return h=f,!1}):this.each(function(){var b=a.data(this,c);b?b.option(e||{})._init():a.data(this,c,new d(e,this))}),h)}},a.Widget=function(a,b){arguments.length&&this._createWidget(a,b)},a.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:!1},_createWidget:function(b,c){a.data(c,this.widgetName,this),this.element=a(c),this.options=a.extend(!0,{},this.options,this._getCreateOptions(),b);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()}),this._create(),this._trigger("create"),this._init()},_getCreateOptions:function(){return a.metadata&&a.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName),this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled "+"ui-state-disabled")},widget:function(){return this.element},option:function(c,d){var e=c;if(arguments.length===0)return a.extend({},this.options);if(typeof c=="string"){if(d===b)return this.options[c];e={},e[c]=d}return this._setOptions(e),this},_setOptions:function(b){var c=this;return a.each(b,function(a,b){c._setOption(a,b)}),this},_setOption:function(a,b){return this.options[a]=b,a==="disabled"&&this.widget()[b?"addClass":"removeClass"](this.widgetBaseClass+"-disabled"+" "+"ui-state-disabled").attr("aria-disabled",b),this},enable:function(){return this._setOption("disabled",!1)},disable:function(){return this._setOption("disabled",!0)},_trigger:function(b,c,d){var e,f,g=this.options[b];d=d||{},c=a.Event(c),c.type=(b===this.widgetEventPrefix?b:this.widgetEventPrefix+b).toLowerCase(),c.target=this.element[0],f=c.originalEvent;if(f)for(e in f)e in c||(c[e]=f[e]);return this.element.trigger(c,d),!(a.isFunction(g)&&g.call(this.element[0],c,d)===!1||c.isDefaultPrevented())}}})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.mouse.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=!1;a(document).mouseup(function(a){c=!1}),a.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var b=this;this.element.bind("mousedown."+this.widgetName,function(a){return b._mouseDown(a)}).bind("click."+this.widgetName,function(c){if(!0===a.data(c.target,b.widgetName+".preventClickEvent"))return a.removeData(c.target,b.widgetName+".preventClickEvent"),c.stopImmediatePropagation(),!1}),this.started=!1},_mouseDestroy:function(){this.element.unbind("."+this.widgetName),this._mouseMoveDelegate&&a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate)},_mouseDown:function(b){if(c)return;this._mouseStarted&&this._mouseUp(b),this._mouseDownEvent=b;var d=this,e=b.which==1,f=typeof this.options.cancel=="string"&&b.target.nodeName?a(b.target).closest(this.options.cancel).length:!1;if(!e||f||!this._mouseCapture(b))return!0;this.mouseDelayMet=!this.options.delay,this.mouseDelayMet||(this._mouseDelayTimer=setTimeout(function(){d.mouseDelayMet=!0},this.options.delay));if(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)){this._mouseStarted=this._mouseStart(b)!==!1;if(!this._mouseStarted)return b.preventDefault(),!0}return!0===a.data(b.target,this.widgetName+".preventClickEvent")&&a.removeData(b.target,this.widgetName+".preventClickEvent"),this._mouseMoveDelegate=function(a){return d._mouseMove(a)},this._mouseUpDelegate=function(a){return d._mouseUp(a)},a(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate),b.preventDefault(),c=!0,!0},_mouseMove:function(b){return!a.browser.msie||document.documentMode>=9||!!b.button?this._mouseStarted?(this._mouseDrag(b),b.preventDefault()):(this._mouseDistanceMet(b)&&this._mouseDelayMet(b)&&(this._mouseStarted=this._mouseStart(this._mouseDownEvent,b)!==!1,this._mouseStarted?this._mouseDrag(b):this._mouseUp(b)),!this._mouseStarted):this._mouseUp(b)},_mouseUp:function(b){return a(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate),this._mouseStarted&&(this._mouseStarted=!1,b.target==this._mouseDownEvent.target&&a.data(b.target,this.widgetName+".preventClickEvent",!0),this._mouseStop(b)),!1},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(a){return this.mouseDelayMet},_mouseStart:function(a){},_mouseDrag:function(a){},_mouseStop:function(a){},_mouseCapture:function(a){return!0}})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.ui.slider.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){var c=5;a.widget("ui.slider",a.ui.mouse,{widgetEventPrefix:"slide",options:{animate:!1,distance:0,max:100,min:0,orientation:"horizontal",range:!1,step:1,value:0,values:null},_create:function(){var b=this,d=this.options,e=this.element.find(".ui-slider-handle").addClass("ui-state-default ui-corner-all"),f="<a class='ui-slider-handle ui-state-default ui-corner-all' href='#'></a>",g=d.values&&d.values.length||1,h=[];this._keySliding=!1,this._mouseSliding=!1,this._animateOff=!0,this._handleIndex=null,this._detectOrientation(),this._mouseInit(),this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget"+" ui-widget-content"+" ui-corner-all"+(d.disabled?" ui-slider-disabled ui-disabled":"")),this.range=a([]),d.range&&(d.range===!0&&(d.values||(d.values=[this._valueMin(),this._valueMin()]),d.values.length&&d.values.length!==2&&(d.values=[d.values[0],d.values[0]])),this.range=a("<div></div>").appendTo(this.element).addClass("ui-slider-range ui-widget-header"+(d.range==="min"||d.range==="max"?" ui-slider-range-"+d.range:"")));for(var i=e.length;i<g;i+=1)h.push(f);this.handles=e.add(a(h.join("")).appendTo(b.element)),this.handle=this.handles.eq(0),this.handles.add(this.range).filter("a").click(function(a){a.preventDefault()}).hover(function(){d.disabled||a(this).addClass("ui-state-hover")},function(){a(this).removeClass("ui-state-hover")}).focus(function(){d.disabled?a(this).blur():(a(".ui-slider .ui-state-focus").removeClass("ui-state-focus"),a(this).addClass("ui-state-focus"))}).blur(function(){a(this).removeClass("ui-state-focus")}),this.handles.each(function(b){a(this).data("index.ui-slider-handle",b)}),this.handles.keydown(function(d){var e=a(this).data("index.ui-slider-handle"),f,g,h,i;if(b.options.disabled)return;switch(d.keyCode){case a.ui.keyCode.HOME:case a.ui.keyCode.END:case a.ui.keyCode.PAGE_UP:case a.ui.keyCode.PAGE_DOWN:case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:d.preventDefault();if(!b._keySliding){b._keySliding=!0,a(this).addClass("ui-state-active"),f=b._start(d,e);if(f===!1)return}}i=b.options.step,b.options.values&&b.options.values.length?g=h=b.values(e):g=h=b.value();switch(d.keyCode){case a.ui.keyCode.HOME:h=b._valueMin();break;case a.ui.keyCode.END:h=b._valueMax();break;case a.ui.keyCode.PAGE_UP:h=b._trimAlignValue(g+(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.PAGE_DOWN:h=b._trimAlignValue(g-(b._valueMax()-b._valueMin())/c);break;case a.ui.keyCode.UP:case a.ui.keyCode.RIGHT:if(g===b._valueMax())return;h=b._trimAlignValue(g+i);break;case a.ui.keyCode.DOWN:case a.ui.keyCode.LEFT:if(g===b._valueMin())return;h=b._trimAlignValue(g-i)}b._slide(d,e,h)}).keyup(function(c){var d=a(this).data("index.ui-slider-handle");b._keySliding&&(b._keySliding=!1,b._stop(c,d),b._change(c,d),a(this).removeClass("ui-state-active"))}),this._refreshValue(),this._animateOff=!1},destroy:function(){return this.handles.remove(),this.range.remove(),this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider"),this._mouseDestroy(),this},_mouseCapture:function(b){var c=this.options,d,e,f,g,h,i,j,k,l;return c.disabled?!1:(this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()},this.elementOffset=this.element.offset(),d={x:b.pageX,y:b.pageY},e=this._normValueFromMouse(d),f=this._valueMax()-this._valueMin()+1,h=this,this.handles.each(function(b){var c=Math.abs(e-h.values(b));f>c&&(f=c,g=a(this),i=b)}),c.range===!0&&this.values(1)===c.min&&(i+=1,g=a(this.handles[i])),j=this._start(b,i),j===!1?!1:(this._mouseSliding=!0,h._handleIndex=i,g.addClass("ui-state-active").focus(),k=g.offset(),l=!a(b.target).parents().andSelf().is(".ui-slider-handle"),this._clickOffset=l?{left:0,top:0}:{left:b.pageX-k.left-g.width()/2,top:b.pageY-k.top-g.height()/2-(parseInt(g.css("borderTopWidth"),10)||0)-(parseInt(g.css("borderBottomWidth"),10)||0)+(parseInt(g.css("marginTop"),10)||0)},this.handles.hasClass("ui-state-hover")||this._slide(b,i,e),this._animateOff=!0,!0))},_mouseStart:function(a){return!0},_mouseDrag:function(a){var b={x:a.pageX,y:a.pageY},c=this._normValueFromMouse(b);return this._slide(a,this._handleIndex,c),!1},_mouseStop:function(a){return this.handles.removeClass("ui-state-active"),this._mouseSliding=!1,this._stop(a,this._handleIndex),this._change(a,this._handleIndex),this._handleIndex=null,this._clickOffset=null,this._animateOff=!1,!1},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b,c,d,e,f;return this.orientation==="horizontal"?(b=this.elementSize.width,c=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)):(b=this.elementSize.height,c=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)),d=c/b,d>1&&(d=1),d<0&&(d=0),this.orientation==="vertical"&&(d=1-d),e=this._valueMax()-this._valueMin(),f=this._valueMin()+d*e,this._trimAlignValue(f)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};return this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("start",a,c)},_slide:function(a,b,c){var d,e,f;this.options.values&&this.options.values.length?(d=this.values(b?0:1),this.options.values.length===2&&this.options.range===!0&&(b===0&&c>d||b===1&&c<d)&&(c=d),c!==this.values(b)&&(e=this.values(),e[b]=c,f=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e}),d=this.values(b?0:1),f!==!1&&this.values(b,c,!0))):c!==this.value()&&(f=this._trigger("slide",a,{handle:this.handles[b],value:c}),f!==!1&&this.value(c))},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};this.options.values&&this.options.values.length&&(c.value=this.values(b),c.values=this.values()),this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=this._trimAlignValue(a),this._refreshValue(),this._change(null,0);return}return this._value()},values:function(b,c){var d,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(c),this._refreshValue(),this._change(null,b);return}if(!arguments.length)return this._values();if(!a.isArray(arguments[0]))return this.options.values&&this.options.values.length?this._values(b):this.value();d=this.options.values,e=arguments[0];for(f=0;f<d.length;f+=1)d[f]=this._trimAlignValue(e[f]),this._change(null,f);this._refreshValue()},_setOption:function(b,c){var d,e=0;a.isArray(this.options.values)&&(e=this.options.values.length),a.Widget.prototype._setOption.apply(this,arguments);switch(b){case"disabled":c?(this.handles.filter(".ui-state-focus").blur(),this.handles.removeClass("ui-state-hover"),this.handles.propAttr("disabled",!0),this.element.addClass("ui-disabled")):(this.handles.propAttr("disabled",!1),this.element.removeClass("ui-disabled"));break;case"orientation":this._detectOrientation(),this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation),this._refreshValue();break;case"value":this._animateOff=!0,this._refreshValue(),this._change(null,0),this._animateOff=!1;break;case"values":this._animateOff=!0,this._refreshValue();for(d=0;d<e;d+=1)this._change(null,d);this._animateOff=!1}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a),a},_values:function(a){var b,c,d;if(arguments.length)return b=this.options.values[a],b=this._trimAlignValue(b),b;c=this.options.values.slice();for(d=0;d<c.length;d+=1)c[d]=this._trimAlignValue(c[d]);return c},_trimAlignValue:function(a){if(a<=this._valueMin())return this._valueMin();if(a>=this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=(a-this._valueMin())%b,d=a-c;return Math.abs(c)*2>=b&&(d+=c>0?b:-b),parseFloat(d.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var b=this.options.range,c=this.options,d=this,e=this._animateOff?!1:c.animate,f,g={},h,i,j,k;this.options.values&&this.options.values.length?this.handles.each(function(b,i){f=(d.values(b)-d._valueMin())/(d._valueMax()-d._valueMin())*100,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",a(this).stop(1,1)[e?"animate":"css"](g,c.animate),d.options.range===!0&&(d.orientation==="horizontal"?(b===0&&d.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({width:f-h+"%"},{queue:!1,duration:c.animate})):(b===0&&d.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},c.animate),b===1&&d.range[e?"animate":"css"]({height:f-h+"%"},{queue:!1,duration:c.animate}))),h=f}):(i=this.value(),j=this._valueMin(),k=this._valueMax(),f=k!==j?(i-j)/(k-j)*100:0,g[d.orientation==="horizontal"?"left":"bottom"]=f+"%",this.handle.stop(1,1)[e?"animate":"css"](g,c.animate),b==="min"&&this.orientation==="horizontal"&&this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},c.animate),b==="max"&&this.orientation==="horizontal"&&this.range[e?"animate":"css"]({width:100-f+"%"},{queue:!1,duration:c.animate}),b==="min"&&this.orientation==="vertical"&&this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},c.animate),b==="max"&&this.orientation==="vertical"&&this.range[e?"animate":"css"]({height:100-f+"%"},{queue:!1,duration:c.animate}))}}),a.extend(a.ui.slider,{version:"1.8.23"})})(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.core.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +jQuery.effects||function(a,b){function c(b){var c;return b&&b.constructor==Array&&b.length==3?b:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(b))?[parseInt(c[1],10),parseInt(c[2],10),parseInt(c[3],10)]:(c=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(b))?[parseFloat(c[1])*2.55,parseFloat(c[2])*2.55,parseFloat(c[3])*2.55]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(b))?[parseInt(c[1],16),parseInt(c[2],16),parseInt(c[3],16)]:(c=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(b))?[parseInt(c[1]+c[1],16),parseInt(c[2]+c[2],16),parseInt(c[3]+c[3],16)]:(c=/rgba\(0, 0, 0, 0\)/.exec(b))?e.transparent:e[a.trim(b).toLowerCase()]}function d(b,d){var e;do{e=(a.curCSS||a.css)(b,d);if(e!=""&&e!="transparent"||a.nodeName(b,"body"))break;d="backgroundColor"}while(b=b.parentNode);return c(e)}function h(){var a=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,b={},c,d;if(a&&a.length&&a[0]&&a[a[0]]){var e=a.length;while(e--)c=a[e],typeof a[c]=="string"&&(d=c.replace(/\-(\w)/g,function(a,b){return b.toUpperCase()}),b[d]=a[c])}else for(c in a)typeof a[c]=="string"&&(b[c]=a[c]);return b}function i(b){var c,d;for(c in b)d=b[c],(d==null||a.isFunction(d)||c in g||/scrollbar/.test(c)||!/color/i.test(c)&&isNaN(parseFloat(d)))&&delete b[c];return b}function j(a,b){var c={_:0},d;for(d in b)a[d]!=b[d]&&(c[d]=b[d]);return c}function k(b,c,d,e){typeof b=="object"&&(e=c,d=null,c=b,b=c.effect),a.isFunction(c)&&(e=c,d=null,c={});if(typeof c=="number"||a.fx.speeds[c])e=d,d=c,c={};return a.isFunction(d)&&(e=d,d=null),c=c||{},d=d||c.duration,d=a.fx.off?0:typeof d=="number"?d:d in a.fx.speeds?a.fx.speeds[d]:a.fx.speeds._default,e=e||c.complete,[b,c,d,e]}function l(b){return!b||typeof b=="number"||a.fx.speeds[b]?!0:typeof b=="string"&&!a.effects[b]?!0:!1}a.effects={},a.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor","borderColor","color","outlineColor"],function(b,e){a.fx.step[e]=function(a){a.colorInit||(a.start=d(a.elem,e),a.end=c(a.end),a.colorInit=!0),a.elem.style[e]="rgb("+Math.max(Math.min(parseInt(a.pos*(a.end[0]-a.start[0])+a.start[0],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[1]-a.start[1])+a.start[1],10),255),0)+","+Math.max(Math.min(parseInt(a.pos*(a.end[2]-a.start[2])+a.start[2],10),255),0)+")"}});var e={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},f=["add","remove","toggle"],g={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};a.effects.animateClass=function(b,c,d,e){return a.isFunction(d)&&(e=d,d=null),this.queue(function(){var g=a(this),k=g.attr("style")||" ",l=i(h.call(this)),m,n=g.attr("class")||"";a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),m=i(h.call(this)),g.attr("class",n),g.animate(j(l,m),{queue:!1,duration:c,easing:d,complete:function(){a.each(f,function(a,c){b[c]&&g[c+"Class"](b[c])}),typeof g.attr("style")=="object"?(g.attr("style").cssText="",g.attr("style").cssText=k):g.attr("style",k),e&&e.apply(this,arguments),a.dequeue(this)}})})},a.fn.extend({_addClass:a.fn.addClass,addClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{add:b},c,d,e]):this._addClass(b)},_removeClass:a.fn.removeClass,removeClass:function(b,c,d,e){return c?a.effects.animateClass.apply(this,[{remove:b},c,d,e]):this._removeClass(b)},_toggleClass:a.fn.toggleClass,toggleClass:function(c,d,e,f,g){return typeof d=="boolean"||d===b?e?a.effects.animateClass.apply(this,[d?{add:c}:{remove:c},e,f,g]):this._toggleClass(c,d):a.effects.animateClass.apply(this,[{toggle:c},d,e,f])},switchClass:function(b,c,d,e,f){return a.effects.animateClass.apply(this,[{add:c,remove:b},d,e,f])}}),a.extend(a.effects,{version:"1.8.23",save:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.data("ec.storage."+b[c],a[0].style[b[c]])},restore:function(a,b){for(var c=0;c<b.length;c++)b[c]!==null&&a.css(b[c],a.data("ec.storage."+b[c]))},setMode:function(a,b){return b=="toggle"&&(b=a.is(":hidden")?"show":"hide"),b},getBaseline:function(a,b){var c,d;switch(a[0]){case"top":c=0;break;case"middle":c=.5;break;case"bottom":c=1;break;default:c=a[0]/b.height}switch(a[1]){case"left":d=0;break;case"center":d=.5;break;case"right":d=1;break;default:d=a[1]/b.width}return{x:d,y:c}},createWrapper:function(b){if(b.parent().is(".ui-effects-wrapper"))return b.parent();var c={width:b.outerWidth(!0),height:b.outerHeight(!0),"float":b.css("float")},d=a("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0}),e=document.activeElement;try{e.id}catch(f){e=document.body}return b.wrap(d),(b[0]===e||a.contains(b[0],e))&&a(e).focus(),d=b.parent(),b.css("position")=="static"?(d.css({position:"relative"}),b.css({position:"relative"})):(a.extend(c,{position:b.css("position"),zIndex:b.css("z-index")}),a.each(["top","left","bottom","right"],function(a,d){c[d]=b.css(d),isNaN(parseInt(c[d],10))&&(c[d]="auto")}),b.css({position:"relative",top:0,left:0,right:"auto",bottom:"auto"})),d.css(c).show()},removeWrapper:function(b){var c,d=document.activeElement;return b.parent().is(".ui-effects-wrapper")?(c=b.parent().replaceWith(b),(b[0]===d||a.contains(b[0],d))&&a(d).focus(),c):b},setTransition:function(b,c,d,e){return e=e||{},a.each(c,function(a,c){var f=b.cssUnit(c);f[0]>0&&(e[c]=f[0]*d+f[1])}),e}}),a.fn.extend({effect:function(b,c,d,e){var f=k.apply(this,arguments),g={options:f[1],duration:f[2],callback:f[3]},h=g.options.mode,i=a.effects[b];return a.fx.off||!i?h?this[h](g.duration,g.callback):this.each(function(){g.callback&&g.callback.call(this)}):i.call(this,g)},_show:a.fn.show,show:function(a){if(l(a))return this._show.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="show",this.effect.apply(this,b)},_hide:a.fn.hide,hide:function(a){if(l(a))return this._hide.apply(this,arguments);var b=k.apply(this,arguments);return b[1].mode="hide",this.effect.apply(this,b)},__toggle:a.fn.toggle,toggle:function(b){if(l(b)||typeof b=="boolean"||a.isFunction(b))return this.__toggle.apply(this,arguments);var c=k.apply(this,arguments);return c[1].mode="toggle",this.effect.apply(this,c)},cssUnit:function(b){var c=this.css(b),d=[];return a.each(["em","px","%","pt"],function(a,b){c.indexOf(b)>0&&(d=[parseFloat(c),b])}),d}});var m={};a.each(["Quad","Cubic","Quart","Quint","Expo"],function(a,b){m[b]=function(b){return Math.pow(b,a+2)}}),a.extend(m,{Sine:function(a){return 1-Math.cos(a*Math.PI/2)},Circ:function(a){return 1-Math.sqrt(1-a*a)},Elastic:function(a){return a===0||a===1?a:-Math.pow(2,8*(a-1))*Math.sin(((a-1)*80-7.5)*Math.PI/15)},Back:function(a){return a*a*(3*a-2)},Bounce:function(a){var b,c=4;while(a<((b=Math.pow(2,--c))-1)/11);return 1/Math.pow(4,3-c)-7.5625*Math.pow((b*3-2)/22-a,2)}}),a.each(m,function(b,c){a.easing["easeIn"+b]=c,a.easing["easeOut"+b]=function(a){return 1-c(1-a)},a.easing["easeInOut"+b]=function(a){return a<.5?c(a*2)/2:c(a*-2+2)/-2+1}})}(jQuery);;/*! jQuery UI - v1.8.23 - 2012-08-15 +* https://github.com/jquery/jquery-ui +* Includes: jquery.effects.slide.js +* Copyright (c) 2012 AUTHORS.txt; Licensed MIT, GPL */ +(function(a,b){a.effects.slide=function(b){return this.queue(function(){var c=a(this),d=["position","top","bottom","left","right"],e=a.effects.setMode(c,b.options.mode||"show"),f=b.options.direction||"left";a.effects.save(c,d),c.show(),a.effects.createWrapper(c).css({overflow:"hidden"});var g=f=="up"||f=="down"?"top":"left",h=f=="up"||f=="left"?"pos":"neg",i=b.options.distance||(g=="top"?c.outerHeight(!0):c.outerWidth(!0));e=="show"&&c.css(g,h=="pos"?isNaN(i)?"-"+i:-i:i);var j={};j[g]=(e=="show"?h=="pos"?"+=":"-=":h=="pos"?"-=":"+=")+i,c.animate(j,{queue:!1,duration:b.duration,easing:b.options.easing,complete:function(){e=="hide"&&c.hide(),a.effects.restore(c,d),a.effects.removeWrapper(c),b.callback&&b.callback.apply(this,arguments),c.dequeue()}})})}})(jQuery);; \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.base64.min.js b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.base64.min.js new file mode 100644 index 0000000..2931f71 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.base64.min.js @@ -0,0 +1,126 @@ +/** + * * jQuery BASE64 functions * * + * <code> * Encodes the given data with base64. * String $.base64Encode ( String str ) * <br /> * Decodes a base64 encoded data. * String $.base64Decode ( String str ) * </code> * * + * Encodes and Decodes the given data in base64. * This encoding is designed to + * make binary data survive transport through transport layers that are not + * 8-bit clean, such as mail bodies. * Base64-encoded data takes about 33% more + * space than the original data. * This javascript code is used to encode / + * decode data using base64 (this encoding is designed to make binary data + * survive transport through transport layers that are not 8-bit clean). Script + * is fully compatible with UTF-8 encoding. You can use base64 encoded data as + * simple encryption mechanism. * If you plan using UTF-8 encoding in your + * project don't forget to set the page encoding to UTF-8 (Content-Type meta + * tag). * This function orginally get from the WebToolkit and rewrite for using + * as the jQuery plugin. * * Example * Code * + * <code> * $.base64Encode("I'm Persian."); * </code> * Result * + * <code> * "SSdtIFBlcnNpYW4u" * </code> * Code * + * <code> * $.base64Decode("SSdtIFBlcnNpYW4u"); * </code> * Result * + * <code> * "I'm Persian." * </code> * * + * + * @alias Muhammad Hussein Fattahizadeh < muhammad [AT] semnanweb [DOT] com > * + * @link http://www.semnanweb.com/jquery-plugin/base64.html (no longer + * available?) * + * @link https://gist.github.com/gists/1602210 * + * @see http://www.webtoolkit.info/ * + * @license http://www.gnu.org/licenses/gpl.html [GNU General Public License] * + * @param {jQuery} + * {base64Encode:function(input)) * + * @param {jQuery} + * {base64Decode:function(input)) * + * @return string + */ +(function($) { + var keyString = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + var uTF8Encode = function(string) { + string = string.replace(/\x0d\x0a/g, "\x0a"); + var output = ""; + for ( var n = 0; n < string.length; n++) { + var c = string.charCodeAt(n); + if (c < 128) { + output += String.fromCharCode(c); + } else if ((c > 127) && (c < 2048)) { + output += String.fromCharCode((c >> 6) | 192); + output += String.fromCharCode((c & 63) | 128); + } else { + output += String.fromCharCode((c >> 12) | 224); + output += String.fromCharCode(((c >> 6) & 63) | 128); + output += String.fromCharCode((c & 63) | 128); + } + } + return output; + }; + var uTF8Decode = function(input) { + var string = ""; + var i = 0; + var c = c1 = c2 = 0; + while (i < input.length) { + c = input.charCodeAt(i); + if (c < 128) { + string += String.fromCharCode(c); + i++; + } else if ((c > 191) && (c < 224)) { + c2 = input.charCodeAt(i + 1); + string += String.fromCharCode(((c & 31) << 6) | (c2 & 63)); + i += 2; + } else { + c2 = input.charCodeAt(i + 1); + c3 = input.charCodeAt(i + 2); + string += String.fromCharCode(((c & 15) << 12) + | ((c2 & 63) << 6) | (c3 & 63)); + i += 3; + } + } + return string; + } + $.extend({ + base64Encode : function(input) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + input = uTF8Encode(input); + while (i < input.length) { + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } else if (isNaN(chr3)) { + enc4 = 64; + } + output = output + keyString.charAt(enc1) + + keyString.charAt(enc2) + keyString.charAt(enc3) + + keyString.charAt(enc4); + } + return output; + }, + base64Decode : function(input) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + while (i < input.length) { + enc1 = keyString.indexOf(input.charAt(i++)); + enc2 = keyString.indexOf(input.charAt(i++)); + enc3 = keyString.indexOf(input.charAt(i++)); + enc4 = keyString.indexOf(input.charAt(i++)); + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + output = output + String.fromCharCode(chr1); + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + } + output = uTF8Decode(output); + return output; + } + }); +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.confirm.js b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.confirm.js new file mode 100644 index 0000000..f1fcb0f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_assets/debug/out/lib/jquery.confirm.js @@ -0,0 +1,85 @@ +(function($){ + + $.confirm = function(params){ + + if($('#confirmOverlay').length){ + // A confirm is already shown on the page: + return false; + } + + var buttonHTML = ''; + $.each(params.buttons,function(name,obj){ + + // Generating the markup for the buttons: + + buttonHTML += '<a href="#" class="button '+obj['class']+'">'+name+'<span></span></a>'; + + if(!obj.action){ + obj.action = function(){}; + } + }); + + var markup = [ + '<div id="confirmOverlay">', + '<div id="confirmBox">', + '<h1>',params.title,'</h1>', + '<p>',params.message,'</p>', + '<div id="confirmButtons">', + buttonHTML, + '</div></div></div>' + ].join(''); + + $(markup).hide().appendTo('body').fadeIn(); + + var buttons = $('#confirmBox .button'), + i = 0; + + $.each(params.buttons,function(name,obj){ + buttons.eq(i++).click(function(){ + + // Calling the action attribute when a + // click occurs, and hiding the confirm. + + obj.action(); + $.confirm.hide(); + return false; + }); + }); + } + + $.confirm.hide = function(){ + $('#confirmOverlay').fadeOut(function(){ + $(this).remove(); + }); + } + + $.alert = function(params, timeout){ + + if($('#confirmOverlay').length){ + // A confirm is already shown on the page: + return false; + } + + var markup = [ + '<div id="confirmOverlay">', + '<div id="confirmBox">', + '<h1>',params.title,'</h1>', + '<p>',params.message,'</p>', + '</div></div>' + ].join(''); + + $(markup).hide().appendTo('body').fadeIn(); + + if (timeout == null){ + timeout = 2000; + } + setTimeout(function(){$.alert.hide()}, timeout); + } + + $.alert.hide = function(){ + $('#confirmOverlay').fadeOut(function(){ + $(this).remove(); + }); + } + +})(jQuery); \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/library_manifest/debug/AndroidManifest.xml b/src/main/resources/code/android/library-common/build/intermediates/library_manifest/debug/AndroidManifest.xml new file mode 100644 index 0000000..9819138 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/library_manifest/debug/AndroidManifest.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + package="com.lcjian.lcjianlibrary" + android:versionCode="1" + android:versionName="1.0" > + + <uses-sdk + android:minSdkVersion="16" + android:targetSdkVersion="29" /> + + <application + android:allowBackup="true" + android:label="@string/app_name" + android:theme="@style/AppTheme" > + </application> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/local_only_symbol_list/debug/R-def.txt b/src/main/resources/code/android/library-common/build/intermediates/local_only_symbol_list/debug/R-def.txt new file mode 100644 index 0000000..04884b4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/local_only_symbol_list/debug/R-def.txt @@ -0,0 +1,68 @@ +R_DEF: Internal format may change without notice +local +anim bottom_dialog_enter +anim bottom_dialog_exit +anim sliding_dialog_enter +anim sliding_dialog_exit +attr? arcRadius +attr? closeOnClick +attr? dashGap +attr? dashOrientation +attr? dashWidth +attr? duration +attr? emotionHeight +attr? emotionSize +attr? emotionWidth +attr? fromDegrees +attr? lineColor +attr? mainImage +attr? maxHeight +attr? ratio +attr rightPadding +attr? shelfBackground +attr? toDegrees +color dim_foreground_dark +color loading_color +color transparent +drawable color_progressbar +drawable ic_media_pause +drawable ic_media_play +drawable spotlight +drawable spotlight_blue +id ffwd +id fullscreen_custom_content +id gv_emotion +id horizontal +id main_content +id mediacontroller_progress +id next +id pause +id prev +id rew +id spin_kit +id time +id time_current +id tv_msg +id vertical +id webview_player +layout dialog_loading +layout emotion_grid +layout emotion_item +layout fragment_webview_video +layout listview_footer +layout media_controller +string app_name +style AppBaseTheme +style AppTheme +style Dialog +style SlidingDialogAnimation +style SlidingDialogTheme +style Theme.Sliding.Dialog +style dialogstyle +styleable AdaptiveListView maxHeight +styleable ArcMenu fromDegrees toDegrees arcRadius duration closeOnClick mainImage +styleable DashLine dashWidth dashGap lineColor dashOrientation +styleable Emotion emotionSize emotionHeight emotionWidth +styleable RatioLayout ratio +styleable ShelvesView shelfBackground +styleable SlidingMenu rightPadding diff --git a/src/main/resources/code/android/library-common/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/src/main/resources/code/android/library-common/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt new file mode 100644 index 0000000..806e1ef --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt @@ -0,0 +1,23 @@ +1<?xml version="1.0" encoding="utf-8"?> +2<manifest xmlns:android="http://schemas.android.com/apk/res/android" +3 package="com.lcjian.lcjianlibrary" +4 android:versionCode="1" +5 android:versionName="1.0" > +6 +7 <uses-sdk +8 android:minSdkVersion="16" +8-->D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml +9 android:targetSdkVersion="29" /> +9-->D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml +10 +11 <application +11-->D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:6:5-10:19 +12 android:allowBackup="true" +12-->D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:7:9-35 +13 android:label="@string/app_name" +13-->D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:8:9-41 +14 android:theme="@style/AppTheme" > +14-->D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:9:9-40 +15 </application> +16 +17</manifest> diff --git a/src/main/resources/code/android/library-common/build/intermediates/navigation_json/debug/navigation.json b/src/main/resources/code/android/library-common/build/intermediates/navigation_json/debug/navigation.json new file mode 100644 index 0000000..0637a08 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/navigation_json/debug/navigation.json @@ -0,0 +1 @@ +[] \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_manifests/debug/output-metadata.json b/src/main/resources/code/android/library-common/build/intermediates/packaged_manifests/debug/output-metadata.json new file mode 100644 index 0000000..fbc1ea1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_manifests/debug/output-metadata.json @@ -0,0 +1,16 @@ +{ + "version": 2, + "artifactType": { + "type": "PACKAGED_MANIFESTS", + "kind": "Directory" + }, + "applicationId": "com.lcjian.lcjianlibrary", + "variantName": "debug", + "elements": [ + { + "type": "SINGLE", + "filters": [], + "outputFile": "../../library_manifest/debug/AndroidManifest.xml" + } + ] +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_enter.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_enter.xml new file mode 100644 index 0000000..8c7e15b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_enter.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="200" + android:fromYDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_exit.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_exit.xml new file mode 100644 index 0000000..7ff6ef3 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/bottom_dialog_exit.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="600" + android:toYDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_enter.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_enter.xml new file mode 100644 index 0000000..43c58c1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_enter.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="200" + android:fromXDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_exit.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_exit.xml new file mode 100644 index 0000000..eedc38d --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/anim/sliding_dialog_exit.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="600" + android:toXDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight.png b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight.png new file mode 100644 index 0000000..b930b36 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight_blue.png b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight_blue.png new file mode 100644 index 0000000..d80d706 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-hdpi-v4/spotlight_blue.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_pause.png b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_pause.png new file mode 100644 index 0000000..84ab76f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_pause.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_play.png b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_play.png new file mode 100644 index 0000000..82d328a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable-xhdpi-v4/ic_media_play.png Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable/color_progressbar.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable/color_progressbar.xml new file mode 100644 index 0000000..2bf62e8 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/drawable/color_progressbar.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > + + <!-- 璁剧疆鑳屾櫙鑹诧紙鐧借壊锛� --> + <item android:id="@android:id/background"> + <shape> + <corners android:radius="3dip" /> + <gradient android:startColor="#ffedeff2" + android:centerColor="#ffedeff2" + android:centerY="0.75" + android:endColor="#ffedeff2" + android:angle="270" + /> + </shape> + </item> + + <!-- 璁剧疆杩涘害鏉¢鑹诧紙钃濊壊锛� --> + <item android:id="@android:id/progress"> + <clip> + <shape> + <corners android:radius="3dip" /> + <gradient android:startColor="#FFf7db00" + android:endColor="#FFf7db00" /> + </shape> + </clip> + </item> + +</layer-list> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/dialog_loading.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/dialog_loading.xml new file mode 100644 index 0000000..2d66b85 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/dialog_loading.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:orientation="vertical"> + + <com.github.ybq.android.spinkit.SpinKitView + android:id="@+id/spin_kit" + style="@style/SpinKitView.Large.Circle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + app:SpinKit_Color="@color/loading_color" /> + + <TextView + android:id="@+id/tv_msg" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:textColor="@color/loading_color"></TextView> + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_grid.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_grid.xml new file mode 100644 index 0000000..26c28d4 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_grid.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<GridView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/gv_emotion" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/transparent" + android:cacheColorHint="@android:color/transparent" + android:columnWidth="40dip" + android:gravity="center" + android:horizontalSpacing="0dip" + android:numColumns="7" + android:scrollbars="vertical" + android:verticalSpacing="0dip" /> diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_item.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_item.xml new file mode 100644 index 0000000..435138e --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/emotion_item.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" > + + +</LinearLayout> diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/fragment_webview_video.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/fragment_webview_video.xml new file mode 100644 index 0000000..f8eb43f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/fragment_webview_video.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <FrameLayout + android:id="@+id/fullscreen_custom_content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + + <FrameLayout + android:id="@+id/main_content" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <WebView + android:id="@+id/webview_player" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="none" /> + </FrameLayout> + +</FrameLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/listview_footer.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/listview_footer.xml new file mode 100644 index 0000000..4482b05 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/listview_footer.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:padding="5dp"> + + <ProgressBar + style="@android:style/Widget.ProgressBar.Inverse" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + +</LinearLayout> diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/media_controller.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/media_controller.xml new file mode 100644 index 0000000..b5e58b1 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/layout/media_controller.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2007 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="#CC000000" + android:orientation="vertical" + android:layoutDirection="ltr"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:paddingTop="4dip" + android:orientation="horizontal"> + + <ImageButton android:id="@+id/prev" style="@android:style/MediaButton.Previous" /> + <ImageButton android:id="@+id/rew" style="@android:style/MediaButton.Rew" /> + <ImageButton android:id="@+id/pause" style="@android:style/MediaButton.Play" /> + <ImageButton android:id="@+id/ffwd" style="@android:style/MediaButton.Ffwd" /> + <ImageButton android:id="@+id/next" style="@android:style/MediaButton.Next" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <TextView android:id="@+id/time_current" + android:textSize="14sp" + android:textStyle="bold" + android:paddingTop="4dip" + android:paddingStart="4dip" + android:layout_gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingEnd="4dip" + android:textColor="?android:attr/textColorSecondary" /> + + <SeekBar + android:id="@+id/mediacontroller_progress" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="0dip" + android:layout_weight="1" + android:layout_height="32dip" + android:layout_alignParentStart="true" + android:layout_alignParentEnd="true" /> + + <TextView android:id="@+id/time" + android:textSize="14sp" + android:textStyle="bold" + android:paddingTop="4dip" + android:paddingEnd="4dip" + android:layout_gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="4dip" + android:textColor="?android:attr/textColorSecondary" /> + </LinearLayout> + +</LinearLayout> diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v11/values-v11.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v11/values-v11.xml new file mode 100644 index 0000000..5042c49 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v11/values-v11.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> + <!-- API 11 theme customizations can go here. --> + </style> + <style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v14/values-v14.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v14/values-v14.xml new file mode 100644 index 0000000..912b8ca --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values-v14/values-v14.xml @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> + <!-- API 14 theme customizations can go here. --> + </style> + <style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values/values.xml b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values/values.xml new file mode 100644 index 0000000..7be9b6b --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/packaged_res/debug/values/values.xml @@ -0,0 +1,75 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <attr format="dimension" name="rightPadding"/> + <color name="dim_foreground_dark">#bebebe</color> + <color name="loading_color">#FF03DAC5</color> + <color name="transparent">#00000000</color> + <string name="app_name">LcjianLibrary</string> + <style name="AppBaseTheme" parent="android:Theme.Light"> + <!-- + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + --> + </style> + <style name="AppTheme" parent="AppBaseTheme"> + <!-- All customizations that are NOT specific to a particular API-level can go here. --> + </style> + <style name="Dialog" parent="android:style/Theme.Dialog"> + <item name="android:background">@android:color/transparent</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowNoTitle">true</item> + <item name="android:windowIsFloating">true</item> + </style> + <style name="SlidingDialogAnimation" parent="android:Animation"> + <item name="android:windowEnterAnimation">@anim/sliding_dialog_enter</item> + <item name="android:windowExitAnimation">@anim/sliding_dialog_exit</item> + </style> + <style name="SlidingDialogTheme" parent="android:Theme"> + + </style> + <style name="Theme.Sliding.Dialog" parent="SlidingDialogTheme"> + <item name="android:windowNoTitle">true</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowAnimationStyle">@style/SlidingDialogAnimation</item> + <item name="android:windowCloseOnTouchOutside">true</item> + </style> + <style name="dialogstyle" parent="android:Animation"> + <item name="@android:windowEnterAnimation">@anim/bottom_dialog_enter</item> + <item name="@android:windowExitAnimation">@anim/bottom_dialog_exit</item> + </style> + <declare-styleable name="AdaptiveListView"> + <attr format="dimension|reference" name="maxHeight"/> + </declare-styleable> + <declare-styleable name="ArcMenu"> + <attr format="float|reference" name="fromDegrees"/> + <attr format="float|reference" name="toDegrees"/> + <attr format="dimension|reference" name="arcRadius"/> + <attr format="integer|reference" name="duration"/> + <attr format="boolean" name="closeOnClick"/> + <attr format="reference" name="mainImage"/> + </declare-styleable> + <declare-styleable name="DashLine"> + <attr format="dimension|reference" name="dashWidth"/> + <attr format="dimension|reference" name="dashGap"/> + <attr format="color|reference" name="lineColor"/> + <attr name="dashOrientation"> + <enum name="horizontal" value="0"/> + <enum name="vertical" value="1"/> + </attr> + </declare-styleable> + <declare-styleable name="Emotion"> + <attr format="dimension|reference" name="emotionSize"/> + <attr format="dimension|reference" name="emotionHeight"/> + <attr format="dimension|reference" name="emotionWidth"/> + </declare-styleable> + <declare-styleable name="RatioLayout"> + <attr format="float|reference" name="ratio"/> + </declare-styleable> + <declare-styleable name="ShelvesView"> + <attr format="reference" name="shelfBackground"/> + </declare-styleable> + <declare-styleable name="SlidingMenu"> + <attr name="rightPadding"/> + </declare-styleable> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar b/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar new file mode 100644 index 0000000..fef51a7 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/runtime_library_classes_jar/debug/classes.jar Binary files differ diff --git a/src/main/resources/code/android/library-common/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt b/src/main/resources/code/android/library-common/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt new file mode 100644 index 0000000..5ffb71f --- /dev/null +++ b/src/main/resources/code/android/library-common/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt @@ -0,0 +1,2123 @@ +com.lcjian.lcjianlibrary +anim abc_fade_in +anim abc_fade_out +anim abc_grow_fade_in_from_bottom +anim abc_popup_enter +anim abc_popup_exit +anim abc_shrink_fade_out_from_bottom +anim abc_slide_in_bottom +anim abc_slide_in_top +anim abc_slide_out_bottom +anim abc_slide_out_top +anim abc_tooltip_enter +anim abc_tooltip_exit +anim bottom_dialog_enter +anim bottom_dialog_exit +anim btn_checkbox_to_checked_box_inner_merged_animation +anim btn_checkbox_to_checked_box_outer_merged_animation +anim btn_checkbox_to_checked_icon_null_animation +anim btn_checkbox_to_unchecked_box_inner_merged_animation +anim btn_checkbox_to_unchecked_check_path_merged_animation +anim btn_checkbox_to_unchecked_icon_null_animation +anim btn_radio_to_off_mtrl_dot_group_animation +anim btn_radio_to_off_mtrl_ring_outer_animation +anim btn_radio_to_off_mtrl_ring_outer_path_animation +anim btn_radio_to_on_mtrl_dot_group_animation +anim btn_radio_to_on_mtrl_ring_outer_animation +anim btn_radio_to_on_mtrl_ring_outer_path_animation +anim design_bottom_sheet_slide_in +anim design_bottom_sheet_slide_out +anim design_snackbar_in +anim design_snackbar_out +anim sliding_dialog_enter +anim sliding_dialog_exit +animator design_appbar_state_list_animator +animator design_fab_hide_motion_spec +animator design_fab_show_motion_spec +animator mtrl_btn_state_list_anim +animator mtrl_btn_unelevated_state_list_anim +animator mtrl_chip_state_list_anim +animator mtrl_fab_hide_motion_spec +animator mtrl_fab_show_motion_spec +animator mtrl_fab_transformation_sheet_collapse_spec +animator mtrl_fab_transformation_sheet_expand_spec +attr SpinKitViewStyle +attr SpinKit_Color +attr SpinKit_Style +attr actionBarDivider +attr actionBarItemBackground +attr actionBarPopupTheme +attr actionBarSize +attr actionBarSplitStyle +attr actionBarStyle +attr actionBarTabBarStyle +attr actionBarTabStyle +attr actionBarTabTextStyle +attr actionBarTheme +attr actionBarWidgetTheme +attr actionButtonStyle +attr actionDropDownStyle +attr actionLayout +attr actionMenuTextAppearance +attr actionMenuTextColor +attr actionModeBackground +attr actionModeCloseButtonStyle +attr actionModeCloseDrawable +attr actionModeCopyDrawable +attr actionModeCutDrawable +attr actionModeFindDrawable +attr actionModePasteDrawable +attr actionModePopupWindowStyle +attr actionModeSelectAllDrawable +attr actionModeShareDrawable +attr actionModeSplitBackground +attr actionModeStyle +attr actionModeWebSearchDrawable +attr actionOverflowButtonStyle +attr actionOverflowMenuStyle +attr actionProviderClass +attr actionViewClass +attr activityChooserViewStyle +attr alertDialogButtonGroupStyle +attr alertDialogCenterButtons +attr alertDialogStyle +attr alertDialogTheme +attr allowStacking +attr alpha +attr alphabeticModifiers +attr arcRadius +attr arrowHeadLength +attr arrowShaftLength +attr autoCompleteTextViewStyle +attr autoSizeMaxTextSize +attr autoSizeMinTextSize +attr autoSizePresetSizes +attr autoSizeStepGranularity +attr autoSizeTextType +attr background +attr backgroundSplit +attr backgroundStacked +attr backgroundTint +attr backgroundTintMode +attr barLength +attr behavior_autoHide +attr behavior_fitToContents +attr behavior_hideable +attr behavior_overlapTop +attr behavior_peekHeight +attr behavior_skipCollapsed +attr bgColor +attr bgDrawable +attr borderWidth +attr borderlessButtonStyle +attr bottomAppBarStyle +attr bottomNavigationStyle +attr bottomSheetDialogTheme +attr bottomSheetStyle +attr boxBackgroundColor +attr boxBackgroundMode +attr boxCollapsedPaddingTop +attr boxCornerRadiusBottomEnd +attr boxCornerRadiusBottomStart +attr boxCornerRadiusTopEnd +attr boxCornerRadiusTopStart +attr boxStrokeColor +attr boxStrokeWidth +attr buttonBarButtonStyle +attr buttonBarNegativeButtonStyle +attr buttonBarNeutralButtonStyle +attr buttonBarPositiveButtonStyle +attr buttonBarStyle +attr buttonCompat +attr buttonGravity +attr buttonIconDimen +attr buttonPanelSideLayout +attr buttonStyle +attr buttonStyleSmall +attr buttonTint +attr buttonTintMode +attr cardBackgroundColor +attr cardCornerRadius +attr cardElevation +attr cardMaxElevation +attr cardPreventCornerOverlap +attr cardUseCompatPadding +attr cardViewStyle +attr checkboxStyle +attr checkedChip +attr checkedIcon +attr checkedIconEnabled +attr checkedIconVisible +attr checkedTextViewStyle +attr chipBackgroundColor +attr chipCornerRadius +attr chipEndPadding +attr chipGroupStyle +attr chipIcon +attr chipIconEnabled +attr chipIconSize +attr chipIconTint +attr chipIconVisible +attr chipMinHeight +attr chipSpacing +attr chipSpacingHorizontal +attr chipSpacingVertical +attr chipStandaloneStyle +attr chipStartPadding +attr chipStrokeColor +attr chipStrokeWidth +attr chipStyle +attr closeIcon +attr closeIconEnabled +attr closeIconEndPadding +attr closeIconSize +attr closeIconStartPadding +attr closeIconTint +attr closeIconVisible +attr closeItemLayout +attr closeOnClick +attr collapseContentDescription +attr collapseIcon +attr collapsedTitleGravity +attr collapsedTitleTextAppearance +attr color +attr colorAccent +attr colorBackgroundFloating +attr colorButtonNormal +attr colorControlActivated +attr colorControlHighlight +attr colorControlNormal +attr colorError +attr colorPrimary +attr colorPrimaryDark +attr colorSecondary +attr colorSwitchThumbNormal +attr commitIcon +attr contentDescription +attr contentInsetEnd +attr contentInsetEndWithActions +attr contentInsetLeft +attr contentInsetRight +attr contentInsetStart +attr contentInsetStartWithNavigation +attr contentPadding +attr contentPaddingBottom +attr contentPaddingLeft +attr contentPaddingRight +attr contentPaddingTop +attr contentScrim +attr controlBackground +attr coordinatorLayoutStyle +attr cornerRadius +attr counterEnabled +attr counterMaxLength +attr counterOverflowTextAppearance +attr counterTextAppearance +attr customNavigationLayout +attr dashGap +attr dashOrientation +attr dashWidth +attr defaultQueryHint +attr dialogCornerRadius +attr dialogPreferredPadding +attr dialogTheme +attr displayOptions +attr divider +attr dividerHorizontal +attr dividerPadding +attr dividerVertical +attr drawableBottomCompat +attr drawableEndCompat +attr drawableLeftCompat +attr drawableRightCompat +attr drawableSize +attr drawableStartCompat +attr drawableTint +attr drawableTintMode +attr drawableTopCompat +attr drawerArrowStyle +attr dropDownListViewStyle +attr dropdownListPreferredItemHeight +attr duration +attr editTextBackground +attr editTextColor +attr editTextStyle +attr elevation +attr emotionHeight +attr emotionSize +attr emotionWidth +attr enforceMaterialTheme +attr enforceTextAppearance +attr errorEnabled +attr errorTextAppearance +attr expandActivityOverflowButtonDrawable +attr expanded +attr expandedTitleGravity +attr expandedTitleMargin +attr expandedTitleMarginBottom +attr expandedTitleMarginEnd +attr expandedTitleMarginStart +attr expandedTitleMarginTop +attr expandedTitleTextAppearance +attr fabAlignmentMode +attr fabCradleMargin +attr fabCradleRoundedCornerRadius +attr fabCradleVerticalOffset +attr fabCustomSize +attr fabSize +attr fastScrollEnabled +attr fastScrollHorizontalThumbDrawable +attr fastScrollHorizontalTrackDrawable +attr fastScrollVerticalThumbDrawable +attr fastScrollVerticalTrackDrawable +attr firstBaselineToTopHeight +attr floatingActionButtonStyle +attr font +attr fontFamily +attr fontProviderAuthority +attr fontProviderCerts +attr fontProviderFetchStrategy +attr fontProviderFetchTimeout +attr fontProviderPackage +attr fontProviderQuery +attr fontStyle +attr fontVariationSettings +attr fontWeight +attr foregroundInsidePadding +attr fromDegrees +attr gapBetweenBars +attr goIcon +attr headerLayout +attr height +attr helperText +attr helperTextEnabled +attr helperTextTextAppearance +attr hideMotionSpec +attr hideOnContentScroll +attr hideOnScroll +attr hintAnimationEnabled +attr hintEnabled +attr hintTextAppearance +attr homeAsUpIndicator +attr homeLayout +attr hoveredFocusedTranslationZ +attr icon +attr iconEndPadding +attr iconGravity +attr iconPadding +attr iconSize +attr iconStartPadding +attr iconTint +attr iconTintMode +attr iconifiedByDefault +attr imageButtonStyle +attr indeterminateProgressStyle +attr initialActivityCount +attr insetForeground +attr isLightTheme +attr itemBackground +attr itemHorizontalPadding +attr itemHorizontalTranslationEnabled +attr itemIconPadding +attr itemIconSize +attr itemIconTint +attr itemPadding +attr itemSpacing +attr itemTextAppearance +attr itemTextAppearanceActive +attr itemTextAppearanceInactive +attr itemTextColor +attr keepOriginColor +attr keylines +attr labelVisibilityMode +attr lastBaselineToBottomHeight +attr layout +attr layoutManager +attr layout_anchor +attr layout_anchorGravity +attr layout_behavior +attr layout_collapseMode +attr layout_collapseParallaxMultiplier +attr layout_dodgeInsetEdges +attr layout_insetEdge +attr layout_keyline +attr layout_scrollFlags +attr layout_scrollInterpolator +attr liftOnScroll +attr lineColor +attr lineHeight +attr lineSpacing +attr listChoiceBackgroundIndicator +attr listChoiceIndicatorMultipleAnimated +attr listChoiceIndicatorSingleAnimated +attr listDividerAlertDialog +attr listItemLayout +attr listLayout +attr listMenuViewStyle +attr listPopupWindowStyle +attr listPreferredItemHeight +attr listPreferredItemHeightLarge +attr listPreferredItemHeightSmall +attr listPreferredItemPaddingEnd +attr listPreferredItemPaddingLeft +attr listPreferredItemPaddingRight +attr listPreferredItemPaddingStart +attr logo +attr logoDescription +attr mainImage +attr materialButtonStyle +attr materialCardViewStyle +attr maxActionInlineWidth +attr maxButtonHeight +attr maxHeight +attr maxImageSize +attr measureWithLargestChild +attr menu +attr multiChoiceItemLayout +attr navigationContentDescription +attr navigationIcon +attr navigationMode +attr navigationViewStyle +attr numericModifiers +attr overlapAnchor +attr paddingBottomNoButtons +attr paddingEnd +attr paddingStart +attr paddingTopNoTitle +attr panelBackground +attr panelMenuListTheme +attr panelMenuListWidth +attr passwordToggleContentDescription +attr passwordToggleDrawable +attr passwordToggleEnabled +attr passwordToggleTint +attr passwordToggleTintMode +attr popupMenuStyle +attr popupTheme +attr popupWindowStyle +attr preserveIconSpacing +attr pressedTranslationZ +attr progressBarPadding +attr progressBarStyle +attr queryBackground +attr queryHint +attr radioButtonStyle +attr ratingBarStyle +attr ratingBarStyleIndicator +attr ratingBarStyleSmall +attr ratio +attr reverseLayout +attr right2Left +attr rightPadding +attr rippleColor +attr scaleFactor +attr scrimAnimationDuration +attr scrimBackground +attr scrimVisibleHeightTrigger +attr searchHintIcon +attr searchIcon +attr searchViewStyle +attr seekBarStyle +attr selectableItemBackground +attr selectableItemBackgroundBorderless +attr shelfBackground +attr showAsAction +attr showDividers +attr showMotionSpec +attr showText +attr showTitle +attr singleChoiceItemLayout +attr singleLine +attr singleSelection +attr snackbarButtonStyle +attr snackbarStyle +attr spanCount +attr spinBars +attr spinnerDropDownItemStyle +attr spinnerStyle +attr splitTrack +attr srcCompat +attr stackFromEnd +attr starColor +attr starDrawable +attr starSpacing +attr state_above_anchor +attr state_collapsed +attr state_collapsible +attr state_liftable +attr state_lifted +attr statusBarBackground +attr statusBarScrim +attr strokeColor +attr strokeWidth +attr subMenuArrow +attr subStarColor +attr submitBackground +attr subtitle +attr subtitleTextAppearance +attr subtitleTextColor +attr subtitleTextStyle +attr suggestionRowLayout +attr switchMinWidth +attr switchPadding +attr switchStyle +attr switchTextAppearance +attr tabBackground +attr tabContentStart +attr tabGravity +attr tabIconTint +attr tabIconTintMode +attr tabIndicator +attr tabIndicatorAnimationDuration +attr tabIndicatorColor +attr tabIndicatorFullWidth +attr tabIndicatorGravity +attr tabIndicatorHeight +attr tabInlineLabel +attr tabMaxWidth +attr tabMinWidth +attr tabMode +attr tabPadding +attr tabPaddingBottom +attr tabPaddingEnd +attr tabPaddingStart +attr tabPaddingTop +attr tabRippleColor +attr tabSelectedTextColor +attr tabStyle +attr tabTextAppearance +attr tabTextColor +attr tabUnboundedRipple +attr textAllCaps +attr textAppearanceBody1 +attr textAppearanceBody2 +attr textAppearanceButton +attr textAppearanceCaption +attr textAppearanceHeadline1 +attr textAppearanceHeadline2 +attr textAppearanceHeadline3 +attr textAppearanceHeadline4 +attr textAppearanceHeadline5 +attr textAppearanceHeadline6 +attr textAppearanceLargePopupMenu +attr textAppearanceListItem +attr textAppearanceListItemSecondary +attr textAppearanceListItemSmall +attr textAppearanceOverline +attr textAppearancePopupMenuHeader +attr textAppearanceSearchResultSubtitle +attr textAppearanceSearchResultTitle +attr textAppearanceSmallPopupMenu +attr textAppearanceSubtitle1 +attr textAppearanceSubtitle2 +attr textColorAlertDialogListItem +attr textColorError +attr textColorSearchUrl +attr textEndPadding +attr textInputStyle +attr textLocale +attr textStartPadding +attr theme +attr thickness +attr thumbTextPadding +attr thumbTint +attr thumbTintMode +attr tickMark +attr tickMarkTint +attr tickMarkTintMode +attr tint +attr tintMode +attr title +attr titleEnabled +attr titleMargin +attr titleMarginBottom +attr titleMarginEnd +attr titleMarginStart +attr titleMarginTop +attr titleMargins +attr titleTextAppearance +attr titleTextColor +attr titleTextStyle +attr toDegrees +attr toolbarId +attr toolbarNavigationButtonStyle +attr toolbarStyle +attr tooltipForegroundColor +attr tooltipFrameBackground +attr tooltipText +attr track +attr trackTint +attr trackTintMode +attr ttcIndex +attr useCompatPadding +attr viewInflaterClass +attr voiceIcon +attr windowActionBar +attr windowActionBarOverlay +attr windowActionModeOverlay +attr windowFixedHeightMajor +attr windowFixedHeightMinor +attr windowFixedWidthMajor +attr windowFixedWidthMinor +attr windowMinWidthMajor +attr windowMinWidthMinor +attr windowNoTitle +bool abc_action_bar_embed_tabs +bool abc_allow_stacked_button_bar +bool abc_config_actionMenuItemAllCaps +bool abc_config_showMenuShortcutsWhenKeyboardPresent +bool mtrl_btn_textappearance_all_caps +color abc_background_cache_hint_selector_material_dark +color abc_background_cache_hint_selector_material_light +color abc_btn_colored_borderless_text_material +color abc_btn_colored_text_material +color abc_color_highlight_material +color abc_hint_foreground_material_dark +color abc_hint_foreground_material_light +color abc_input_method_navigation_guard +color abc_primary_text_disable_only_material_dark +color abc_primary_text_disable_only_material_light +color abc_primary_text_material_dark +color abc_primary_text_material_light +color abc_search_url_text +color abc_search_url_text_normal +color abc_search_url_text_pressed +color abc_search_url_text_selected +color abc_secondary_text_material_dark +color abc_secondary_text_material_light +color abc_tint_btn_checkable +color abc_tint_default +color abc_tint_edittext +color abc_tint_seek_thumb +color abc_tint_spinner +color abc_tint_switch_track +color accent_material_dark +color accent_material_light +color background_floating_material_dark +color background_floating_material_light +color background_material_dark +color background_material_light +color bright_foreground_disabled_material_dark +color bright_foreground_disabled_material_light +color bright_foreground_inverse_material_dark +color bright_foreground_inverse_material_light +color bright_foreground_material_dark +color bright_foreground_material_light +color button_material_dark +color button_material_light +color cardview_dark_background +color cardview_light_background +color cardview_shadow_end_color +color cardview_shadow_start_color +color colorAccent +color colorPrimary +color colorPrimaryDark +color design_bottom_navigation_shadow_color +color design_default_color_primary +color design_default_color_primary_dark +color design_error +color design_fab_shadow_end_color +color design_fab_shadow_mid_color +color design_fab_shadow_start_color +color design_fab_stroke_end_inner_color +color design_fab_stroke_end_outer_color +color design_fab_stroke_top_inner_color +color design_fab_stroke_top_outer_color +color design_snackbar_background_color +color design_tint_password_toggle +color dim_foreground_dark +color dim_foreground_disabled_material_dark +color dim_foreground_disabled_material_light +color dim_foreground_material_dark +color dim_foreground_material_light +color error_color_material +color error_color_material_dark +color error_color_material_light +color foreground_material_dark +color foreground_material_light +color highlighted_text_material_dark +color highlighted_text_material_light +color loading_color +color material_blue_grey_800 +color material_blue_grey_900 +color material_blue_grey_950 +color material_deep_teal_200 +color material_deep_teal_500 +color material_grey_100 +color material_grey_300 +color material_grey_50 +color material_grey_600 +color material_grey_800 +color material_grey_850 +color material_grey_900 +color mtrl_bottom_nav_colored_item_tint +color mtrl_bottom_nav_item_tint +color mtrl_btn_bg_color_disabled +color mtrl_btn_bg_color_selector +color mtrl_btn_ripple_color +color mtrl_btn_stroke_color_selector +color mtrl_btn_text_btn_ripple_color +color mtrl_btn_text_color_disabled +color mtrl_btn_text_color_selector +color mtrl_btn_transparent_bg_color +color mtrl_chip_background_color +color mtrl_chip_close_icon_tint +color mtrl_chip_ripple_color +color mtrl_chip_text_color +color mtrl_fab_ripple_color +color mtrl_scrim_color +color mtrl_tabs_colored_ripple_color +color mtrl_tabs_icon_color_selector +color mtrl_tabs_icon_color_selector_colored +color mtrl_tabs_legacy_text_color_selector +color mtrl_tabs_ripple_color +color mtrl_text_btn_text_color_selector +color mtrl_textinput_default_box_stroke_color +color mtrl_textinput_disabled_color +color mtrl_textinput_filled_box_default_background_color +color mtrl_textinput_hovered_box_stroke_color +color notification_action_color_filter +color notification_icon_bg_color +color notification_material_background_media_default_color +color primary_dark_material_dark +color primary_dark_material_light +color primary_material_dark +color primary_material_light +color primary_text_default_material_dark +color primary_text_default_material_light +color primary_text_disabled_material_dark +color primary_text_disabled_material_light +color ripple_material_dark +color ripple_material_light +color secondary_text_default_material_dark +color secondary_text_default_material_light +color secondary_text_disabled_material_dark +color secondary_text_disabled_material_light +color switch_thumb_disabled_material_dark +color switch_thumb_disabled_material_light +color switch_thumb_material_dark +color switch_thumb_material_light +color switch_thumb_normal_material_dark +color switch_thumb_normal_material_light +color tooltip_background_dark +color tooltip_background_light +color transparent +dimen abc_action_bar_content_inset_material +dimen abc_action_bar_content_inset_with_nav +dimen abc_action_bar_default_height_material +dimen abc_action_bar_default_padding_end_material +dimen abc_action_bar_default_padding_start_material +dimen abc_action_bar_elevation_material +dimen abc_action_bar_icon_vertical_padding_material +dimen abc_action_bar_overflow_padding_end_material +dimen abc_action_bar_overflow_padding_start_material +dimen abc_action_bar_progress_bar_size +dimen abc_action_bar_stacked_max_height +dimen abc_action_bar_stacked_tab_max_width +dimen abc_action_bar_subtitle_bottom_margin_material +dimen abc_action_bar_subtitle_top_margin_material +dimen abc_action_button_min_height_material +dimen abc_action_button_min_width_material +dimen abc_action_button_min_width_overflow_material +dimen abc_alert_dialog_button_bar_height +dimen abc_alert_dialog_button_dimen +dimen abc_button_inset_horizontal_material +dimen abc_button_inset_vertical_material +dimen abc_button_padding_horizontal_material +dimen abc_button_padding_vertical_material +dimen abc_cascading_menus_min_smallest_width +dimen abc_config_prefDialogWidth +dimen abc_control_corner_material +dimen abc_control_inset_material +dimen abc_control_padding_material +dimen abc_dialog_corner_radius_material +dimen abc_dialog_fixed_height_major +dimen abc_dialog_fixed_height_minor +dimen abc_dialog_fixed_width_major +dimen abc_dialog_fixed_width_minor +dimen abc_dialog_list_padding_bottom_no_buttons +dimen abc_dialog_list_padding_top_no_title +dimen abc_dialog_min_width_major +dimen abc_dialog_min_width_minor +dimen abc_dialog_padding_material +dimen abc_dialog_padding_top_material +dimen abc_dialog_title_divider_material +dimen abc_disabled_alpha_material_dark +dimen abc_disabled_alpha_material_light +dimen abc_dropdownitem_icon_width +dimen abc_dropdownitem_text_padding_left +dimen abc_dropdownitem_text_padding_right +dimen abc_edit_text_inset_bottom_material +dimen abc_edit_text_inset_horizontal_material +dimen abc_edit_text_inset_top_material +dimen abc_floating_window_z +dimen abc_list_item_height_large_material +dimen abc_list_item_height_material +dimen abc_list_item_height_small_material +dimen abc_list_item_padding_horizontal_material +dimen abc_panel_menu_list_width +dimen abc_progress_bar_height_material +dimen abc_search_view_preferred_height +dimen abc_search_view_preferred_width +dimen abc_seekbar_track_background_height_material +dimen abc_seekbar_track_progress_height_material +dimen abc_select_dialog_padding_start_material +dimen abc_switch_padding +dimen abc_text_size_body_1_material +dimen abc_text_size_body_2_material +dimen abc_text_size_button_material +dimen abc_text_size_caption_material +dimen abc_text_size_display_1_material +dimen abc_text_size_display_2_material +dimen abc_text_size_display_3_material +dimen abc_text_size_display_4_material +dimen abc_text_size_headline_material +dimen abc_text_size_large_material +dimen abc_text_size_medium_material +dimen abc_text_size_menu_header_material +dimen abc_text_size_menu_material +dimen abc_text_size_small_material +dimen abc_text_size_subhead_material +dimen abc_text_size_subtitle_material_toolbar +dimen abc_text_size_title_material +dimen abc_text_size_title_material_toolbar +dimen cardview_compat_inset_shadow +dimen cardview_default_elevation +dimen cardview_default_radius +dimen compat_button_inset_horizontal_material +dimen compat_button_inset_vertical_material +dimen compat_button_padding_horizontal_material +dimen compat_button_padding_vertical_material +dimen compat_control_corner_material +dimen compat_notification_large_icon_max_height +dimen compat_notification_large_icon_max_width +dimen design_appbar_elevation +dimen design_bottom_navigation_active_item_max_width +dimen design_bottom_navigation_active_item_min_width +dimen design_bottom_navigation_active_text_size +dimen design_bottom_navigation_elevation +dimen design_bottom_navigation_height +dimen design_bottom_navigation_icon_size +dimen design_bottom_navigation_item_max_width +dimen design_bottom_navigation_item_min_width +dimen design_bottom_navigation_margin +dimen design_bottom_navigation_shadow_height +dimen design_bottom_navigation_text_size +dimen design_bottom_sheet_modal_elevation +dimen design_bottom_sheet_peek_height_min +dimen design_fab_border_width +dimen design_fab_elevation +dimen design_fab_image_size +dimen design_fab_size_mini +dimen design_fab_size_normal +dimen design_fab_translation_z_hovered_focused +dimen design_fab_translation_z_pressed +dimen design_navigation_elevation +dimen design_navigation_icon_padding +dimen design_navigation_icon_size +dimen design_navigation_item_horizontal_padding +dimen design_navigation_item_icon_padding +dimen design_navigation_max_width +dimen design_navigation_padding_bottom +dimen design_navigation_separator_vertical_padding +dimen design_snackbar_action_inline_max_width +dimen design_snackbar_background_corner_radius +dimen design_snackbar_elevation +dimen design_snackbar_extra_spacing_horizontal +dimen design_snackbar_max_width +dimen design_snackbar_min_width +dimen design_snackbar_padding_horizontal +dimen design_snackbar_padding_vertical +dimen design_snackbar_padding_vertical_2lines +dimen design_snackbar_text_size +dimen design_tab_max_width +dimen design_tab_scrollable_min_width +dimen design_tab_text_size +dimen design_tab_text_size_2line +dimen design_textinput_caption_translate_y +dimen disabled_alpha_material_dark +dimen disabled_alpha_material_light +dimen fastscroll_default_thickness +dimen fastscroll_margin +dimen fastscroll_minimum_range +dimen highlight_alpha_material_colored +dimen highlight_alpha_material_dark +dimen highlight_alpha_material_light +dimen hint_alpha_material_dark +dimen hint_alpha_material_light +dimen hint_pressed_alpha_material_dark +dimen hint_pressed_alpha_material_light +dimen item_touch_helper_max_drag_scroll_per_frame +dimen item_touch_helper_swipe_escape_max_velocity +dimen item_touch_helper_swipe_escape_velocity +dimen mtrl_bottomappbar_fabOffsetEndMode +dimen mtrl_bottomappbar_fab_cradle_margin +dimen mtrl_bottomappbar_fab_cradle_rounded_corner_radius +dimen mtrl_bottomappbar_fab_cradle_vertical_offset +dimen mtrl_bottomappbar_height +dimen mtrl_btn_corner_radius +dimen mtrl_btn_dialog_btn_min_width +dimen mtrl_btn_disabled_elevation +dimen mtrl_btn_disabled_z +dimen mtrl_btn_elevation +dimen mtrl_btn_focused_z +dimen mtrl_btn_hovered_z +dimen mtrl_btn_icon_btn_padding_left +dimen mtrl_btn_icon_padding +dimen mtrl_btn_inset +dimen mtrl_btn_letter_spacing +dimen mtrl_btn_padding_bottom +dimen mtrl_btn_padding_left +dimen mtrl_btn_padding_right +dimen mtrl_btn_padding_top +dimen mtrl_btn_pressed_z +dimen mtrl_btn_stroke_size +dimen mtrl_btn_text_btn_icon_padding +dimen mtrl_btn_text_btn_padding_left +dimen mtrl_btn_text_btn_padding_right +dimen mtrl_btn_text_size +dimen mtrl_btn_z +dimen mtrl_card_elevation +dimen mtrl_card_spacing +dimen mtrl_chip_pressed_translation_z +dimen mtrl_chip_text_size +dimen mtrl_fab_elevation +dimen mtrl_fab_translation_z_hovered_focused +dimen mtrl_fab_translation_z_pressed +dimen mtrl_navigation_elevation +dimen mtrl_navigation_item_horizontal_padding +dimen mtrl_navigation_item_icon_padding +dimen mtrl_snackbar_background_corner_radius +dimen mtrl_snackbar_margin +dimen mtrl_textinput_box_bottom_offset +dimen mtrl_textinput_box_corner_radius_medium +dimen mtrl_textinput_box_corner_radius_small +dimen mtrl_textinput_box_label_cutout_padding +dimen mtrl_textinput_box_padding_end +dimen mtrl_textinput_box_stroke_width_default +dimen mtrl_textinput_box_stroke_width_focused +dimen mtrl_textinput_outline_box_expanded_padding +dimen mtrl_toolbar_default_height +dimen notification_action_icon_size +dimen notification_action_text_size +dimen notification_big_circle_margin +dimen notification_content_margin_start +dimen notification_large_icon_height +dimen notification_large_icon_width +dimen notification_main_column_padding_top +dimen notification_media_narrow_margin +dimen notification_right_icon_size +dimen notification_right_side_padding_top +dimen notification_small_icon_background_padding +dimen notification_small_icon_size_as_large +dimen notification_subtext_size +dimen notification_top_pad +dimen notification_top_pad_large_text +dimen subtitle_corner_radius +dimen subtitle_outline_width +dimen subtitle_shadow_offset +dimen subtitle_shadow_radius +dimen tooltip_corner_radius +dimen tooltip_horizontal_padding +dimen tooltip_margin +dimen tooltip_precise_anchor_extra_offset +dimen tooltip_precise_anchor_threshold +dimen tooltip_vertical_padding +dimen tooltip_y_offset_non_touch +dimen tooltip_y_offset_touch +drawable abc_ab_share_pack_mtrl_alpha +drawable abc_action_bar_item_background_material +drawable abc_btn_borderless_material +drawable abc_btn_check_material +drawable abc_btn_check_material_anim +drawable abc_btn_check_to_on_mtrl_000 +drawable abc_btn_check_to_on_mtrl_015 +drawable abc_btn_colored_material +drawable abc_btn_default_mtrl_shape +drawable abc_btn_radio_material +drawable abc_btn_radio_material_anim +drawable abc_btn_radio_to_on_mtrl_000 +drawable abc_btn_radio_to_on_mtrl_015 +drawable abc_btn_switch_to_on_mtrl_00001 +drawable abc_btn_switch_to_on_mtrl_00012 +drawable abc_cab_background_internal_bg +drawable abc_cab_background_top_material +drawable abc_cab_background_top_mtrl_alpha +drawable abc_control_background_material +drawable abc_dialog_material_background +drawable abc_edit_text_material +drawable abc_ic_ab_back_material +drawable abc_ic_arrow_drop_right_black_24dp +drawable abc_ic_clear_material +drawable abc_ic_commit_search_api_mtrl_alpha +drawable abc_ic_go_search_api_material +drawable abc_ic_menu_copy_mtrl_am_alpha +drawable abc_ic_menu_cut_mtrl_alpha +drawable abc_ic_menu_overflow_material +drawable abc_ic_menu_paste_mtrl_am_alpha +drawable abc_ic_menu_selectall_mtrl_alpha +drawable abc_ic_menu_share_mtrl_alpha +drawable abc_ic_search_api_material +drawable abc_ic_star_black_16dp +drawable abc_ic_star_black_36dp +drawable abc_ic_star_black_48dp +drawable abc_ic_star_half_black_16dp +drawable abc_ic_star_half_black_36dp +drawable abc_ic_star_half_black_48dp +drawable abc_ic_voice_search_api_material +drawable abc_item_background_holo_dark +drawable abc_item_background_holo_light +drawable abc_list_divider_material +drawable abc_list_divider_mtrl_alpha +drawable abc_list_focused_holo +drawable abc_list_longpressed_holo +drawable abc_list_pressed_holo_dark +drawable abc_list_pressed_holo_light +drawable abc_list_selector_background_transition_holo_dark +drawable abc_list_selector_background_transition_holo_light +drawable abc_list_selector_disabled_holo_dark +drawable abc_list_selector_disabled_holo_light +drawable abc_list_selector_holo_dark +drawable abc_list_selector_holo_light +drawable abc_menu_hardkey_panel_mtrl_mult +drawable abc_popup_background_mtrl_mult +drawable abc_ratingbar_indicator_material +drawable abc_ratingbar_material +drawable abc_ratingbar_small_material +drawable abc_scrubber_control_off_mtrl_alpha +drawable abc_scrubber_control_to_pressed_mtrl_000 +drawable abc_scrubber_control_to_pressed_mtrl_005 +drawable abc_scrubber_primary_mtrl_alpha +drawable abc_scrubber_track_mtrl_alpha +drawable abc_seekbar_thumb_material +drawable abc_seekbar_tick_mark_material +drawable abc_seekbar_track_material +drawable abc_spinner_mtrl_am_alpha +drawable abc_spinner_textfield_background_material +drawable abc_switch_thumb_material +drawable abc_switch_track_mtrl_alpha +drawable abc_tab_indicator_material +drawable abc_tab_indicator_mtrl_alpha +drawable abc_text_cursor_material +drawable abc_text_select_handle_left_mtrl_dark +drawable abc_text_select_handle_left_mtrl_light +drawable abc_text_select_handle_middle_mtrl_dark +drawable abc_text_select_handle_middle_mtrl_light +drawable abc_text_select_handle_right_mtrl_dark +drawable abc_text_select_handle_right_mtrl_light +drawable abc_textfield_activated_mtrl_alpha +drawable abc_textfield_default_mtrl_alpha +drawable abc_textfield_search_activated_mtrl_alpha +drawable abc_textfield_search_default_mtrl_alpha +drawable abc_textfield_search_material +drawable abc_vector_test +drawable avd_hide_password +drawable avd_hide_password_1 +drawable avd_hide_password_2 +drawable avd_hide_password_3 +drawable avd_show_password +drawable avd_show_password_1 +drawable avd_show_password_2 +drawable avd_show_password_3 +drawable btn_checkbox_checked_mtrl +drawable btn_checkbox_checked_to_unchecked_mtrl_animation +drawable btn_checkbox_unchecked_mtrl +drawable btn_checkbox_unchecked_to_checked_mtrl_animation +drawable btn_radio_off_mtrl +drawable btn_radio_off_to_on_mtrl_animation +drawable btn_radio_on_mtrl +drawable btn_radio_on_to_off_mtrl_animation +drawable color_progressbar +drawable design_bottom_navigation_item_background +drawable design_fab_background +drawable design_ic_visibility +drawable design_ic_visibility_off +drawable design_password_eye +drawable design_snackbar_background +drawable ic_media_pause +drawable ic_media_play +drawable ic_mtrl_chip_checked_black +drawable ic_mtrl_chip_checked_circle +drawable ic_mtrl_chip_close_circle +drawable ic_rating_star_border +drawable ic_rating_star_solid +drawable mtrl_snackbar_background +drawable mtrl_tabs_default_indicator +drawable navigation_empty_icon +drawable notification_action_background +drawable notification_bg +drawable notification_bg_low +drawable notification_bg_low_normal +drawable notification_bg_low_pressed +drawable notification_bg_normal +drawable notification_bg_normal_pressed +drawable notification_icon_background +drawable notification_template_icon_bg +drawable notification_template_icon_low_bg +drawable notification_tile_bg +drawable notify_panel_notification_icon_bg +drawable spotlight +drawable spotlight_blue +drawable tooltip_frame_dark +drawable tooltip_frame_light +id ALT +id CTRL +id ChasingDots +id Circle +id CubeGrid +id DoubleBounce +id FUNCTION +id FadingCircle +id FoldingCube +id META +id MultiplePulse +id MultiplePulseRing +id Pulse +id PulseRing +id RotatingCircle +id RotatingPlane +id SHIFT +id SYM +id ThreeBounce +id WanderingCubes +id Wave +id accessibility_action_clickable_span +id accessibility_custom_action_0 +id accessibility_custom_action_1 +id accessibility_custom_action_10 +id accessibility_custom_action_11 +id accessibility_custom_action_12 +id accessibility_custom_action_13 +id accessibility_custom_action_14 +id accessibility_custom_action_15 +id accessibility_custom_action_16 +id accessibility_custom_action_17 +id accessibility_custom_action_18 +id accessibility_custom_action_19 +id accessibility_custom_action_2 +id accessibility_custom_action_20 +id accessibility_custom_action_21 +id accessibility_custom_action_22 +id accessibility_custom_action_23 +id accessibility_custom_action_24 +id accessibility_custom_action_25 +id accessibility_custom_action_26 +id accessibility_custom_action_27 +id accessibility_custom_action_28 +id accessibility_custom_action_29 +id accessibility_custom_action_3 +id accessibility_custom_action_30 +id accessibility_custom_action_31 +id accessibility_custom_action_4 +id accessibility_custom_action_5 +id accessibility_custom_action_6 +id accessibility_custom_action_7 +id accessibility_custom_action_8 +id accessibility_custom_action_9 +id action0 +id action_bar +id action_bar_activity_content +id action_bar_container +id action_bar_root +id action_bar_spinner +id action_bar_subtitle +id action_bar_title +id action_container +id action_context_bar +id action_divider +id action_image +id action_menu_divider +id action_menu_presenter +id action_mode_bar +id action_mode_bar_stub +id action_mode_close_button +id action_text +id actions +id activity_chooser_view_content +id add +id alertTitle +id all +id always +id async +id auto +id beginning +id blocking +id bottom +id buttonPanel +id cancel_action +id center +id center_horizontal +id center_vertical +id checkbox +id checked +id chronometer +id clip_horizontal +id clip_vertical +id collapseActionView +id container +id content +id contentPanel +id coordinator +id custom +id customPanel +id decor_content_parent +id default_activity_button +id design_bottom_sheet +id design_menu_item_action_area +id design_menu_item_action_area_stub +id design_menu_item_text +id design_navigation_view +id dialog_button +id disableHome +id edit_query +id end +id end_padder +id enterAlways +id enterAlwaysCollapsed +id exitUntilCollapsed +id expand_activities_button +id expanded_menu +id ffwd +id fill +id fill_horizontal +id fill_vertical +id filled +id fixed +id forever +id fullscreen_custom_content +id ghost_view +id glide_custom_view_target_tag +id group_divider +id gv_emotion +id home +id homeAsUp +id horizontal +id icon +id icon_group +id ifRoom +id image +id info +id italic +id item_touch_helper_previous_elevation +id labeled +id largeLabel +id left +id line1 +id line3 +id listMode +id list_item +id main_content +id masked +id media_actions +id mediacontroller_progress +id message +id middle +id mini +id mtrl_child_content_container +id mtrl_internal_children_alpha_tag +id multiply +id navigation_header_container +id never +id next +id none +id normal +id notification_background +id notification_main_column +id notification_main_column_container +id off +id on +id outline +id parallax +id parentPanel +id parent_matrix +id pause +id pin +id prev +id progress_circular +id progress_horizontal +id radio +id rew +id right +id right_icon +id right_side +id save_image_matrix +id save_non_transition_alpha +id save_scale_type +id screen +id scroll +id scrollIndicatorDown +id scrollIndicatorUp +id scrollView +id scrollable +id search_badge +id search_bar +id search_button +id search_close_btn +id search_edit_frame +id search_go_btn +id search_mag_icon +id search_plate +id search_src_text +id search_voice_btn +id select_dialog_listview +id selected +id shortcut +id showCustom +id showHome +id showTitle +id smallLabel +id snackbar_action +id snackbar_text +id snap +id spacer +id spin_kit +id split_action_bar +id src_atop +id src_in +id src_over +id start +id status_bar_latest_event_content +id statusbarutil_fake_status_bar_view +id statusbarutil_translucent_view +id stretch +id submenuarrow +id submit_area +id tabMode +id tag_accessibility_actions +id tag_accessibility_clickable_spans +id tag_accessibility_heading +id tag_accessibility_pane_title +id tag_screen_reader_focusable +id tag_transition_group +id tag_unhandled_key_event_manager +id tag_unhandled_key_listeners +id text +id text2 +id textSpacerNoButtons +id textSpacerNoTitle +id text_input_password_toggle +id textinput_counter +id textinput_error +id textinput_helper_text +id time +id time_current +id title +id titleDividerNoCustom +id title_template +id top +id topPanel +id touch_outside +id transition_current_scene +id transition_layout_save +id transition_position +id transition_scene_layoutid_cache +id transition_transform +id tv_msg +id unchecked +id uniform +id unlabeled +id up +id useLogo +id vertical +id view_offset_helper +id visible +id webview_player +id withText +id wrap_content +integer abc_config_activityDefaultDur +integer abc_config_activityShortDur +integer app_bar_elevation_anim_duration +integer bottom_sheet_slide_duration +integer cancel_button_image_alpha +integer config_tooltipAnimTime +integer design_snackbar_text_max_lines +integer design_tab_indicator_anim_duration_ms +integer hide_password_duration +integer mtrl_btn_anim_delay_ms +integer mtrl_btn_anim_duration_ms +integer mtrl_chip_anim_duration +integer mtrl_tab_indicator_anim_duration_ms +integer show_password_duration +integer status_bar_notification_info_maxnum +interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 +interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 +interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 +interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 +interpolator btn_radio_to_off_mtrl_animation_interpolator_0 +interpolator btn_radio_to_on_mtrl_animation_interpolator_0 +interpolator fast_out_slow_in +interpolator mtrl_fast_out_linear_in +interpolator mtrl_fast_out_slow_in +interpolator mtrl_linear +interpolator mtrl_linear_out_slow_in +layout abc_action_bar_title_item +layout abc_action_bar_up_container +layout abc_action_menu_item_layout +layout abc_action_menu_layout +layout abc_action_mode_bar +layout abc_action_mode_close_item_material +layout abc_activity_chooser_view +layout abc_activity_chooser_view_list_item +layout abc_alert_dialog_button_bar_material +layout abc_alert_dialog_material +layout abc_alert_dialog_title_material +layout abc_cascading_menu_item_layout +layout abc_dialog_title_material +layout abc_expanded_menu_layout +layout abc_list_menu_item_checkbox +layout abc_list_menu_item_icon +layout abc_list_menu_item_layout +layout abc_list_menu_item_radio +layout abc_popup_menu_header_item_layout +layout abc_popup_menu_item_layout +layout abc_screen_content_include +layout abc_screen_simple +layout abc_screen_simple_overlay_action_mode +layout abc_screen_toolbar +layout abc_search_dropdown_item_icons_2line +layout abc_search_view +layout abc_select_dialog_material +layout abc_tooltip +layout custom_dialog +layout design_bottom_navigation_item +layout design_bottom_sheet_dialog +layout design_layout_snackbar +layout design_layout_snackbar_include +layout design_layout_tab_icon +layout design_layout_tab_text +layout design_menu_item_action_area +layout design_navigation_item +layout design_navigation_item_header +layout design_navigation_item_separator +layout design_navigation_item_subheader +layout design_navigation_menu +layout design_navigation_menu_item +layout design_text_input_password_icon +layout dialog_loading +layout emotion_grid +layout emotion_item +layout fragment_webview_video +layout listview_footer +layout media_controller +layout mtrl_layout_snackbar +layout mtrl_layout_snackbar_include +layout notification_action +layout notification_action_tombstone +layout notification_media_action +layout notification_media_cancel_action +layout notification_template_big_media +layout notification_template_big_media_custom +layout notification_template_big_media_narrow +layout notification_template_big_media_narrow_custom +layout notification_template_custom_big +layout notification_template_icon_group +layout notification_template_lines_media +layout notification_template_media +layout notification_template_media_custom +layout notification_template_part_chronometer +layout notification_template_part_time +layout select_dialog_item_material +layout select_dialog_multichoice_material +layout select_dialog_singlechoice_material +layout support_simple_spinner_dropdown_item +string abc_action_bar_home_description +string abc_action_bar_up_description +string abc_action_menu_overflow_description +string abc_action_mode_done +string abc_activity_chooser_view_see_all +string abc_activitychooserview_choose_application +string abc_capital_off +string abc_capital_on +string abc_font_family_body_1_material +string abc_font_family_body_2_material +string abc_font_family_button_material +string abc_font_family_caption_material +string abc_font_family_display_1_material +string abc_font_family_display_2_material +string abc_font_family_display_3_material +string abc_font_family_display_4_material +string abc_font_family_headline_material +string abc_font_family_menu_material +string abc_font_family_subhead_material +string abc_font_family_title_material +string abc_menu_alt_shortcut_label +string abc_menu_ctrl_shortcut_label +string abc_menu_delete_shortcut_label +string abc_menu_enter_shortcut_label +string abc_menu_function_shortcut_label +string abc_menu_meta_shortcut_label +string abc_menu_shift_shortcut_label +string abc_menu_space_shortcut_label +string abc_menu_sym_shortcut_label +string abc_prepend_shortcut_label +string abc_search_hint +string abc_searchview_description_clear +string abc_searchview_description_query +string abc_searchview_description_search +string abc_searchview_description_submit +string abc_searchview_description_voice +string abc_shareactionprovider_share_with +string abc_shareactionprovider_share_with_application +string abc_toolbar_collapse_description +string app_name +string appbar_scrolling_view_behavior +string bottom_sheet_behavior +string character_counter_content_description +string character_counter_pattern +string fab_transformation_scrim_behavior +string fab_transformation_sheet_behavior +string hide_bottom_view_on_scroll_behavior +string mtrl_chip_close_icon_content_description +string password_toggle_content_description +string path_password_eye +string path_password_eye_mask_strike_through +string path_password_eye_mask_visible +string path_password_strike_through +string search_menu_title +string status_bar_notification_info_overflow +style AlertDialog_AppCompat +style AlertDialog_AppCompat_Light +style Animation_AppCompat_Dialog +style Animation_AppCompat_DropDownUp +style Animation_AppCompat_Tooltip +style Animation_Design_BottomSheetDialog +style AppBaseTheme +style AppTheme +style Base_AlertDialog_AppCompat +style Base_AlertDialog_AppCompat_Light +style Base_Animation_AppCompat_Dialog +style Base_Animation_AppCompat_DropDownUp +style Base_Animation_AppCompat_Tooltip +style Base_CardView +style Base_DialogWindowTitleBackground_AppCompat +style Base_DialogWindowTitle_AppCompat +style Base_TextAppearance_AppCompat +style Base_TextAppearance_AppCompat_Body1 +style Base_TextAppearance_AppCompat_Body2 +style Base_TextAppearance_AppCompat_Button +style Base_TextAppearance_AppCompat_Caption +style Base_TextAppearance_AppCompat_Display1 +style Base_TextAppearance_AppCompat_Display2 +style Base_TextAppearance_AppCompat_Display3 +style Base_TextAppearance_AppCompat_Display4 +style Base_TextAppearance_AppCompat_Headline +style Base_TextAppearance_AppCompat_Inverse +style Base_TextAppearance_AppCompat_Large +style Base_TextAppearance_AppCompat_Large_Inverse +style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large +style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small +style Base_TextAppearance_AppCompat_Medium +style Base_TextAppearance_AppCompat_Medium_Inverse +style Base_TextAppearance_AppCompat_Menu +style Base_TextAppearance_AppCompat_SearchResult +style Base_TextAppearance_AppCompat_SearchResult_Subtitle +style Base_TextAppearance_AppCompat_SearchResult_Title +style Base_TextAppearance_AppCompat_Small +style Base_TextAppearance_AppCompat_Small_Inverse +style Base_TextAppearance_AppCompat_Subhead +style Base_TextAppearance_AppCompat_Subhead_Inverse +style Base_TextAppearance_AppCompat_Title +style Base_TextAppearance_AppCompat_Title_Inverse +style Base_TextAppearance_AppCompat_Tooltip +style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu +style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle +style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse +style Base_TextAppearance_AppCompat_Widget_ActionBar_Title +style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse +style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle +style Base_TextAppearance_AppCompat_Widget_ActionMode_Title +style Base_TextAppearance_AppCompat_Widget_Button +style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored +style Base_TextAppearance_AppCompat_Widget_Button_Colored +style Base_TextAppearance_AppCompat_Widget_Button_Inverse +style Base_TextAppearance_AppCompat_Widget_DropDownItem +style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header +style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large +style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small +style Base_TextAppearance_AppCompat_Widget_Switch +style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem +style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item +style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle +style Base_TextAppearance_Widget_AppCompat_Toolbar_Title +style Base_ThemeOverlay_AppCompat +style Base_ThemeOverlay_AppCompat_ActionBar +style Base_ThemeOverlay_AppCompat_Dark +style Base_ThemeOverlay_AppCompat_Dark_ActionBar +style Base_ThemeOverlay_AppCompat_Dialog +style Base_ThemeOverlay_AppCompat_Dialog_Alert +style Base_ThemeOverlay_AppCompat_Light +style Base_ThemeOverlay_MaterialComponents_Dialog +style Base_ThemeOverlay_MaterialComponents_Dialog_Alert +style Base_Theme_AppCompat +style Base_Theme_AppCompat_CompactMenu +style Base_Theme_AppCompat_Dialog +style Base_Theme_AppCompat_DialogWhenLarge +style Base_Theme_AppCompat_Dialog_Alert +style Base_Theme_AppCompat_Dialog_FixedSize +style Base_Theme_AppCompat_Dialog_MinWidth +style Base_Theme_AppCompat_Light +style Base_Theme_AppCompat_Light_DarkActionBar +style Base_Theme_AppCompat_Light_Dialog +style Base_Theme_AppCompat_Light_DialogWhenLarge +style Base_Theme_AppCompat_Light_Dialog_Alert +style Base_Theme_AppCompat_Light_Dialog_FixedSize +style Base_Theme_AppCompat_Light_Dialog_MinWidth +style Base_Theme_MaterialComponents +style Base_Theme_MaterialComponents_Bridge +style Base_Theme_MaterialComponents_CompactMenu +style Base_Theme_MaterialComponents_Dialog +style Base_Theme_MaterialComponents_DialogWhenLarge +style Base_Theme_MaterialComponents_Dialog_Alert +style Base_Theme_MaterialComponents_Dialog_FixedSize +style Base_Theme_MaterialComponents_Dialog_MinWidth +style Base_Theme_MaterialComponents_Light +style Base_Theme_MaterialComponents_Light_Bridge +style Base_Theme_MaterialComponents_Light_DarkActionBar +style Base_Theme_MaterialComponents_Light_DarkActionBar_Bridge +style Base_Theme_MaterialComponents_Light_Dialog +style Base_Theme_MaterialComponents_Light_DialogWhenLarge +style Base_Theme_MaterialComponents_Light_Dialog_Alert +style Base_Theme_MaterialComponents_Light_Dialog_FixedSize +style Base_Theme_MaterialComponents_Light_Dialog_MinWidth +style Base_V14_ThemeOverlay_MaterialComponents_Dialog +style Base_V14_ThemeOverlay_MaterialComponents_Dialog_Alert +style Base_V14_Theme_MaterialComponents +style Base_V14_Theme_MaterialComponents_Bridge +style Base_V14_Theme_MaterialComponents_Dialog +style Base_V14_Theme_MaterialComponents_Light +style Base_V14_Theme_MaterialComponents_Light_Bridge +style Base_V14_Theme_MaterialComponents_Light_DarkActionBar_Bridge +style Base_V14_Theme_MaterialComponents_Light_Dialog +style Base_V14_Widget_Design_AppBarLayout +style Base_V21_ThemeOverlay_AppCompat_Dialog +style Base_V21_Theme_AppCompat +style Base_V21_Theme_AppCompat_Dialog +style Base_V21_Theme_AppCompat_Light +style Base_V21_Theme_AppCompat_Light_Dialog +style Base_V21_Widget_Design_AppBarLayout +style Base_V22_Theme_AppCompat +style Base_V22_Theme_AppCompat_Light +style Base_V23_Theme_AppCompat +style Base_V23_Theme_AppCompat_Light +style Base_V26_Theme_AppCompat +style Base_V26_Theme_AppCompat_Light +style Base_V26_Widget_AppCompat_Toolbar +style Base_V26_Widget_Design_AppBarLayout +style Base_V28_Theme_AppCompat +style Base_V28_Theme_AppCompat_Light +style Base_V7_ThemeOverlay_AppCompat_Dialog +style Base_V7_Theme_AppCompat +style Base_V7_Theme_AppCompat_Dialog +style Base_V7_Theme_AppCompat_Light +style Base_V7_Theme_AppCompat_Light_Dialog +style Base_V7_Widget_AppCompat_AutoCompleteTextView +style Base_V7_Widget_AppCompat_EditText +style Base_V7_Widget_AppCompat_Toolbar +style Base_Widget_AppCompat_ActionBar +style Base_Widget_AppCompat_ActionBar_Solid +style Base_Widget_AppCompat_ActionBar_TabBar +style Base_Widget_AppCompat_ActionBar_TabText +style Base_Widget_AppCompat_ActionBar_TabView +style Base_Widget_AppCompat_ActionButton +style Base_Widget_AppCompat_ActionButton_CloseMode +style Base_Widget_AppCompat_ActionButton_Overflow +style Base_Widget_AppCompat_ActionMode +style Base_Widget_AppCompat_ActivityChooserView +style Base_Widget_AppCompat_AutoCompleteTextView +style Base_Widget_AppCompat_Button +style Base_Widget_AppCompat_ButtonBar +style Base_Widget_AppCompat_ButtonBar_AlertDialog +style Base_Widget_AppCompat_Button_Borderless +style Base_Widget_AppCompat_Button_Borderless_Colored +style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog +style Base_Widget_AppCompat_Button_Colored +style Base_Widget_AppCompat_Button_Small +style Base_Widget_AppCompat_CompoundButton_CheckBox +style Base_Widget_AppCompat_CompoundButton_RadioButton +style Base_Widget_AppCompat_CompoundButton_Switch +style Base_Widget_AppCompat_DrawerArrowToggle +style Base_Widget_AppCompat_DrawerArrowToggle_Common +style Base_Widget_AppCompat_DropDownItem_Spinner +style Base_Widget_AppCompat_EditText +style Base_Widget_AppCompat_ImageButton +style Base_Widget_AppCompat_Light_ActionBar +style Base_Widget_AppCompat_Light_ActionBar_Solid +style Base_Widget_AppCompat_Light_ActionBar_TabBar +style Base_Widget_AppCompat_Light_ActionBar_TabText +style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse +style Base_Widget_AppCompat_Light_ActionBar_TabView +style Base_Widget_AppCompat_Light_PopupMenu +style Base_Widget_AppCompat_Light_PopupMenu_Overflow +style Base_Widget_AppCompat_ListMenuView +style Base_Widget_AppCompat_ListPopupWindow +style Base_Widget_AppCompat_ListView +style Base_Widget_AppCompat_ListView_DropDown +style Base_Widget_AppCompat_ListView_Menu +style Base_Widget_AppCompat_PopupMenu +style Base_Widget_AppCompat_PopupMenu_Overflow +style Base_Widget_AppCompat_PopupWindow +style Base_Widget_AppCompat_ProgressBar +style Base_Widget_AppCompat_ProgressBar_Horizontal +style Base_Widget_AppCompat_RatingBar +style Base_Widget_AppCompat_RatingBar_Indicator +style Base_Widget_AppCompat_RatingBar_Small +style Base_Widget_AppCompat_SearchView +style Base_Widget_AppCompat_SearchView_ActionBar +style Base_Widget_AppCompat_SeekBar +style Base_Widget_AppCompat_SeekBar_Discrete +style Base_Widget_AppCompat_Spinner +style Base_Widget_AppCompat_Spinner_Underlined +style Base_Widget_AppCompat_TextView +style Base_Widget_AppCompat_TextView_SpinnerItem +style Base_Widget_AppCompat_Toolbar +style Base_Widget_AppCompat_Toolbar_Button_Navigation +style Base_Widget_Design_AppBarLayout +style Base_Widget_Design_TabLayout +style Base_Widget_MaterialComponents_Chip +style Base_Widget_MaterialComponents_TextInputEditText +style Base_Widget_MaterialComponents_TextInputLayout +style CardView +style CardView_Dark +style CardView_Light +style Dialog +style Platform_AppCompat +style Platform_AppCompat_Light +style Platform_MaterialComponents +style Platform_MaterialComponents_Dialog +style Platform_MaterialComponents_Light +style Platform_MaterialComponents_Light_Dialog +style Platform_ThemeOverlay_AppCompat +style Platform_ThemeOverlay_AppCompat_Dark +style Platform_ThemeOverlay_AppCompat_Light +style Platform_V21_AppCompat +style Platform_V21_AppCompat_Light +style Platform_V25_AppCompat +style Platform_V25_AppCompat_Light +style Platform_Widget_AppCompat_Spinner +style RtlOverlay_DialogWindowTitle_AppCompat +style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem +style RtlOverlay_Widget_AppCompat_DialogTitle_Icon +style RtlOverlay_Widget_AppCompat_PopupMenuItem +style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup +style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut +style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow +style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text +style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title +style RtlOverlay_Widget_AppCompat_SearchView_MagIcon +style RtlOverlay_Widget_AppCompat_Search_DropDown +style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 +style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 +style RtlOverlay_Widget_AppCompat_Search_DropDown_Query +style RtlOverlay_Widget_AppCompat_Search_DropDown_Text +style RtlUnderlay_Widget_AppCompat_ActionButton +style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow +style SlidingDialogAnimation +style SlidingDialogTheme +style SpinKitView +style SpinKitView_ChasingDots +style SpinKitView_Circle +style SpinKitView_CubeGrid +style SpinKitView_DoubleBounce +style SpinKitView_FadingCircle +style SpinKitView_FoldingCube +style SpinKitView_Large +style SpinKitView_Large_ChasingDots +style SpinKitView_Large_Circle +style SpinKitView_Large_CubeGrid +style SpinKitView_Large_DoubleBounce +style SpinKitView_Large_FadingCircle +style SpinKitView_Large_FoldingCube +style SpinKitView_Large_MultiplePulse +style SpinKitView_Large_MultiplePulseRing +style SpinKitView_Large_Pulse +style SpinKitView_Large_PulseRing +style SpinKitView_Large_RotatingCircle +style SpinKitView_Large_RotatingPlane +style SpinKitView_Large_ThreeBounce +style SpinKitView_Large_WanderingCubes +style SpinKitView_Large_Wave +style SpinKitView_MultiplePulse +style SpinKitView_MultiplePulseRing +style SpinKitView_Pulse +style SpinKitView_PulseRing +style SpinKitView_RotatingCircle +style SpinKitView_RotatingPlane +style SpinKitView_Small +style SpinKitView_Small_ChasingDots +style SpinKitView_Small_Circle +style SpinKitView_Small_CubeGrid +style SpinKitView_Small_DoubleBounce +style SpinKitView_Small_FadingCircle +style SpinKitView_Small_FoldingCube +style SpinKitView_Small_MultiplePulse +style SpinKitView_Small_MultiplePulseRing +style SpinKitView_Small_Pulse +style SpinKitView_Small_PulseRing +style SpinKitView_Small_RotatingCircle +style SpinKitView_Small_RotatingPlane +style SpinKitView_Small_ThreeBounce +style SpinKitView_Small_WanderingCubes +style SpinKitView_Small_Wave +style SpinKitView_ThreeBounce +style SpinKitView_WanderingCubes +style SpinKitView_Wave +style TextAppearance_AppCompat +style TextAppearance_AppCompat_Body1 +style TextAppearance_AppCompat_Body2 +style TextAppearance_AppCompat_Button +style TextAppearance_AppCompat_Caption +style TextAppearance_AppCompat_Display1 +style TextAppearance_AppCompat_Display2 +style TextAppearance_AppCompat_Display3 +style TextAppearance_AppCompat_Display4 +style TextAppearance_AppCompat_Headline +style TextAppearance_AppCompat_Inverse +style TextAppearance_AppCompat_Large +style TextAppearance_AppCompat_Large_Inverse +style TextAppearance_AppCompat_Light_SearchResult_Subtitle +style TextAppearance_AppCompat_Light_SearchResult_Title +style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large +style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small +style TextAppearance_AppCompat_Medium +style TextAppearance_AppCompat_Medium_Inverse +style TextAppearance_AppCompat_Menu +style TextAppearance_AppCompat_SearchResult_Subtitle +style TextAppearance_AppCompat_SearchResult_Title +style TextAppearance_AppCompat_Small +style TextAppearance_AppCompat_Small_Inverse +style TextAppearance_AppCompat_Subhead +style TextAppearance_AppCompat_Subhead_Inverse +style TextAppearance_AppCompat_Title +style TextAppearance_AppCompat_Title_Inverse +style TextAppearance_AppCompat_Tooltip +style TextAppearance_AppCompat_Widget_ActionBar_Menu +style TextAppearance_AppCompat_Widget_ActionBar_Subtitle +style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse +style TextAppearance_AppCompat_Widget_ActionBar_Title +style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse +style TextAppearance_AppCompat_Widget_ActionMode_Subtitle +style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse +style TextAppearance_AppCompat_Widget_ActionMode_Title +style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse +style TextAppearance_AppCompat_Widget_Button +style TextAppearance_AppCompat_Widget_Button_Borderless_Colored +style TextAppearance_AppCompat_Widget_Button_Colored +style TextAppearance_AppCompat_Widget_Button_Inverse +style TextAppearance_AppCompat_Widget_DropDownItem +style TextAppearance_AppCompat_Widget_PopupMenu_Header +style TextAppearance_AppCompat_Widget_PopupMenu_Large +style TextAppearance_AppCompat_Widget_PopupMenu_Small +style TextAppearance_AppCompat_Widget_Switch +style TextAppearance_AppCompat_Widget_TextView_SpinnerItem +style TextAppearance_Compat_Notification +style TextAppearance_Compat_Notification_Info +style TextAppearance_Compat_Notification_Info_Media +style TextAppearance_Compat_Notification_Line2 +style TextAppearance_Compat_Notification_Line2_Media +style TextAppearance_Compat_Notification_Media +style TextAppearance_Compat_Notification_Time +style TextAppearance_Compat_Notification_Time_Media +style TextAppearance_Compat_Notification_Title +style TextAppearance_Compat_Notification_Title_Media +style TextAppearance_Design_CollapsingToolbar_Expanded +style TextAppearance_Design_Counter +style TextAppearance_Design_Counter_Overflow +style TextAppearance_Design_Error +style TextAppearance_Design_HelperText +style TextAppearance_Design_Hint +style TextAppearance_Design_Snackbar_Message +style TextAppearance_Design_Tab +style TextAppearance_MaterialComponents_Body1 +style TextAppearance_MaterialComponents_Body2 +style TextAppearance_MaterialComponents_Button +style TextAppearance_MaterialComponents_Caption +style TextAppearance_MaterialComponents_Chip +style TextAppearance_MaterialComponents_Headline1 +style TextAppearance_MaterialComponents_Headline2 +style TextAppearance_MaterialComponents_Headline3 +style TextAppearance_MaterialComponents_Headline4 +style TextAppearance_MaterialComponents_Headline5 +style TextAppearance_MaterialComponents_Headline6 +style TextAppearance_MaterialComponents_Overline +style TextAppearance_MaterialComponents_Subtitle1 +style TextAppearance_MaterialComponents_Subtitle2 +style TextAppearance_MaterialComponents_Tab +style TextAppearance_Widget_AppCompat_ExpandedMenu_Item +style TextAppearance_Widget_AppCompat_Toolbar_Subtitle +style TextAppearance_Widget_AppCompat_Toolbar_Title +style ThemeOverlay_AppCompat +style ThemeOverlay_AppCompat_ActionBar +style ThemeOverlay_AppCompat_Dark +style ThemeOverlay_AppCompat_Dark_ActionBar +style ThemeOverlay_AppCompat_DayNight +style ThemeOverlay_AppCompat_DayNight_ActionBar +style ThemeOverlay_AppCompat_Dialog +style ThemeOverlay_AppCompat_Dialog_Alert +style ThemeOverlay_AppCompat_Light +style ThemeOverlay_MaterialComponents +style ThemeOverlay_MaterialComponents_ActionBar +style ThemeOverlay_MaterialComponents_Dark +style ThemeOverlay_MaterialComponents_Dark_ActionBar +style ThemeOverlay_MaterialComponents_Dialog +style ThemeOverlay_MaterialComponents_Dialog_Alert +style ThemeOverlay_MaterialComponents_Light +style ThemeOverlay_MaterialComponents_TextInputEditText +style ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox +style ThemeOverlay_MaterialComponents_TextInputEditText_FilledBox_Dense +style ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox +style ThemeOverlay_MaterialComponents_TextInputEditText_OutlinedBox_Dense +style Theme_AppCompat +style Theme_AppCompat_CompactMenu +style Theme_AppCompat_DayNight +style Theme_AppCompat_DayNight_DarkActionBar +style Theme_AppCompat_DayNight_Dialog +style Theme_AppCompat_DayNight_DialogWhenLarge +style Theme_AppCompat_DayNight_Dialog_Alert +style Theme_AppCompat_DayNight_Dialog_MinWidth +style Theme_AppCompat_DayNight_NoActionBar +style Theme_AppCompat_Dialog +style Theme_AppCompat_DialogWhenLarge +style Theme_AppCompat_Dialog_Alert +style Theme_AppCompat_Dialog_MinWidth +style Theme_AppCompat_Light +style Theme_AppCompat_Light_DarkActionBar +style Theme_AppCompat_Light_Dialog +style Theme_AppCompat_Light_DialogWhenLarge +style Theme_AppCompat_Light_Dialog_Alert +style Theme_AppCompat_Light_Dialog_MinWidth +style Theme_AppCompat_Light_NoActionBar +style Theme_AppCompat_NoActionBar +style Theme_Design +style Theme_Design_BottomSheetDialog +style Theme_Design_Light +style Theme_Design_Light_BottomSheetDialog +style Theme_Design_Light_NoActionBar +style Theme_Design_NoActionBar +style Theme_MaterialComponents +style Theme_MaterialComponents_BottomSheetDialog +style Theme_MaterialComponents_Bridge +style Theme_MaterialComponents_CompactMenu +style Theme_MaterialComponents_Dialog +style Theme_MaterialComponents_DialogWhenLarge +style Theme_MaterialComponents_Dialog_Alert +style Theme_MaterialComponents_Dialog_MinWidth +style Theme_MaterialComponents_Light +style Theme_MaterialComponents_Light_BottomSheetDialog +style Theme_MaterialComponents_Light_Bridge +style Theme_MaterialComponents_Light_DarkActionBar +style Theme_MaterialComponents_Light_DarkActionBar_Bridge +style Theme_MaterialComponents_Light_Dialog +style Theme_MaterialComponents_Light_DialogWhenLarge +style Theme_MaterialComponents_Light_Dialog_Alert +style Theme_MaterialComponents_Light_Dialog_MinWidth +style Theme_MaterialComponents_Light_NoActionBar +style Theme_MaterialComponents_Light_NoActionBar_Bridge +style Theme_MaterialComponents_NoActionBar +style Theme_MaterialComponents_NoActionBar_Bridge +style Theme_Sliding_Dialog +style Widget_AppCompat_ActionBar +style Widget_AppCompat_ActionBar_Solid +style Widget_AppCompat_ActionBar_TabBar +style Widget_AppCompat_ActionBar_TabText +style Widget_AppCompat_ActionBar_TabView +style Widget_AppCompat_ActionButton +style Widget_AppCompat_ActionButton_CloseMode +style Widget_AppCompat_ActionButton_Overflow +style Widget_AppCompat_ActionMode +style Widget_AppCompat_ActivityChooserView +style Widget_AppCompat_AutoCompleteTextView +style Widget_AppCompat_Button +style Widget_AppCompat_ButtonBar +style Widget_AppCompat_ButtonBar_AlertDialog +style Widget_AppCompat_Button_Borderless +style Widget_AppCompat_Button_Borderless_Colored +style Widget_AppCompat_Button_ButtonBar_AlertDialog +style Widget_AppCompat_Button_Colored +style Widget_AppCompat_Button_Small +style Widget_AppCompat_CompoundButton_CheckBox +style Widget_AppCompat_CompoundButton_RadioButton +style Widget_AppCompat_CompoundButton_Switch +style Widget_AppCompat_DrawerArrowToggle +style Widget_AppCompat_DropDownItem_Spinner +style Widget_AppCompat_EditText +style Widget_AppCompat_ImageButton +style Widget_AppCompat_Light_ActionBar +style Widget_AppCompat_Light_ActionBar_Solid +style Widget_AppCompat_Light_ActionBar_Solid_Inverse +style Widget_AppCompat_Light_ActionBar_TabBar +style Widget_AppCompat_Light_ActionBar_TabBar_Inverse +style Widget_AppCompat_Light_ActionBar_TabText +style Widget_AppCompat_Light_ActionBar_TabText_Inverse +style Widget_AppCompat_Light_ActionBar_TabView +style Widget_AppCompat_Light_ActionBar_TabView_Inverse +style Widget_AppCompat_Light_ActionButton +style Widget_AppCompat_Light_ActionButton_CloseMode +style Widget_AppCompat_Light_ActionButton_Overflow +style Widget_AppCompat_Light_ActionMode_Inverse +style Widget_AppCompat_Light_ActivityChooserView +style Widget_AppCompat_Light_AutoCompleteTextView +style Widget_AppCompat_Light_DropDownItem_Spinner +style Widget_AppCompat_Light_ListPopupWindow +style Widget_AppCompat_Light_ListView_DropDown +style Widget_AppCompat_Light_PopupMenu +style Widget_AppCompat_Light_PopupMenu_Overflow +style Widget_AppCompat_Light_SearchView +style Widget_AppCompat_Light_Spinner_DropDown_ActionBar +style Widget_AppCompat_ListMenuView +style Widget_AppCompat_ListPopupWindow +style Widget_AppCompat_ListView +style Widget_AppCompat_ListView_DropDown +style Widget_AppCompat_ListView_Menu +style Widget_AppCompat_PopupMenu +style Widget_AppCompat_PopupMenu_Overflow +style Widget_AppCompat_PopupWindow +style Widget_AppCompat_ProgressBar +style Widget_AppCompat_ProgressBar_Horizontal +style Widget_AppCompat_RatingBar +style Widget_AppCompat_RatingBar_Indicator +style Widget_AppCompat_RatingBar_Small +style Widget_AppCompat_SearchView +style Widget_AppCompat_SearchView_ActionBar +style Widget_AppCompat_SeekBar +style Widget_AppCompat_SeekBar_Discrete +style Widget_AppCompat_Spinner +style Widget_AppCompat_Spinner_DropDown +style Widget_AppCompat_Spinner_DropDown_ActionBar +style Widget_AppCompat_Spinner_Underlined +style Widget_AppCompat_TextView +style Widget_AppCompat_TextView_SpinnerItem +style Widget_AppCompat_Toolbar +style Widget_AppCompat_Toolbar_Button_Navigation +style Widget_Compat_NotificationActionContainer +style Widget_Compat_NotificationActionText +style Widget_Design_AppBarLayout +style Widget_Design_BottomNavigationView +style Widget_Design_BottomSheet_Modal +style Widget_Design_CollapsingToolbar +style Widget_Design_CoordinatorLayout +style Widget_Design_FloatingActionButton +style Widget_Design_NavigationView +style Widget_Design_ScrimInsetsFrameLayout +style Widget_Design_Snackbar +style Widget_Design_TabLayout +style Widget_Design_TextInputLayout +style Widget_MaterialComponents_BottomAppBar +style Widget_MaterialComponents_BottomAppBar_Colored +style Widget_MaterialComponents_BottomNavigationView +style Widget_MaterialComponents_BottomNavigationView_Colored +style Widget_MaterialComponents_BottomSheet_Modal +style Widget_MaterialComponents_Button +style Widget_MaterialComponents_Button_Icon +style Widget_MaterialComponents_Button_OutlinedButton +style Widget_MaterialComponents_Button_OutlinedButton_Icon +style Widget_MaterialComponents_Button_TextButton +style Widget_MaterialComponents_Button_TextButton_Dialog +style Widget_MaterialComponents_Button_TextButton_Dialog_Icon +style Widget_MaterialComponents_Button_TextButton_Icon +style Widget_MaterialComponents_Button_UnelevatedButton +style Widget_MaterialComponents_Button_UnelevatedButton_Icon +style Widget_MaterialComponents_CardView +style Widget_MaterialComponents_ChipGroup +style Widget_MaterialComponents_Chip_Action +style Widget_MaterialComponents_Chip_Choice +style Widget_MaterialComponents_Chip_Entry +style Widget_MaterialComponents_Chip_Filter +style Widget_MaterialComponents_FloatingActionButton +style Widget_MaterialComponents_NavigationView +style Widget_MaterialComponents_Snackbar +style Widget_MaterialComponents_Snackbar_FullWidth +style Widget_MaterialComponents_TabLayout +style Widget_MaterialComponents_TabLayout_Colored +style Widget_MaterialComponents_TextInputEditText_FilledBox +style Widget_MaterialComponents_TextInputEditText_FilledBox_Dense +style Widget_MaterialComponents_TextInputEditText_OutlinedBox +style Widget_MaterialComponents_TextInputEditText_OutlinedBox_Dense +style Widget_MaterialComponents_TextInputLayout_FilledBox +style Widget_MaterialComponents_TextInputLayout_FilledBox_Dense +style Widget_MaterialComponents_TextInputLayout_OutlinedBox +style Widget_MaterialComponents_TextInputLayout_OutlinedBox_Dense +style Widget_MaterialComponents_Toolbar +style Widget_Support_CoordinatorLayout +style dialogstyle +styleable ActionBar background backgroundSplit backgroundStacked contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation customNavigationLayout displayOptions divider elevation height hideOnContentScroll homeAsUpIndicator homeLayout icon indeterminateProgressStyle itemPadding logo navigationMode popupTheme progressBarPadding progressBarStyle subtitle subtitleTextStyle title titleTextStyle +styleable ActionBarLayout android_layout_gravity +styleable ActionMenuItemView android_minWidth +styleable ActionMenuView +styleable ActionMode background backgroundSplit closeItemLayout height subtitleTextStyle titleTextStyle +styleable ActivityChooserView expandActivityOverflowButtonDrawable initialActivityCount +styleable AdaptiveListView maxHeight +styleable AlertDialog android_layout buttonIconDimen buttonPanelSideLayout listItemLayout listLayout multiChoiceItemLayout showTitle singleChoiceItemLayout +styleable AndRatingBar bgColor bgDrawable keepOriginColor right2Left scaleFactor starColor starDrawable starSpacing subStarColor +styleable AnimatedStateListDrawableCompat android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible +styleable AnimatedStateListDrawableItem android_drawable android_id +styleable AnimatedStateListDrawableTransition android_drawable android_fromId android_reversible android_toId +styleable AppBarLayout android_background android_keyboardNavigationCluster android_touchscreenBlocksFocus elevation expanded liftOnScroll +styleable AppBarLayoutStates state_collapsed state_collapsible state_liftable state_lifted +styleable AppBarLayout_Layout layout_scrollFlags layout_scrollInterpolator +styleable AppCompatImageView android_src srcCompat tint tintMode +styleable AppCompatSeekBar android_thumb tickMark tickMarkTint tickMarkTintMode +styleable AppCompatTextHelper android_drawableBottom android_drawableEnd android_drawableLeft android_drawableRight android_drawableStart android_drawableTop android_textAppearance +styleable AppCompatTextView android_textAppearance autoSizeMaxTextSize autoSizeMinTextSize autoSizePresetSizes autoSizeStepGranularity autoSizeTextType drawableBottomCompat drawableEndCompat drawableLeftCompat drawableRightCompat drawableStartCompat drawableTint drawableTintMode drawableTopCompat firstBaselineToTopHeight fontFamily fontVariationSettings lastBaselineToBottomHeight lineHeight textAllCaps textLocale +styleable AppCompatTheme actionBarDivider actionBarItemBackground actionBarPopupTheme actionBarSize actionBarSplitStyle actionBarStyle actionBarTabBarStyle actionBarTabStyle actionBarTabTextStyle actionBarTheme actionBarWidgetTheme actionButtonStyle actionDropDownStyle actionMenuTextAppearance actionMenuTextColor actionModeBackground actionModeCloseButtonStyle actionModeCloseDrawable actionModeCopyDrawable actionModeCutDrawable actionModeFindDrawable actionModePasteDrawable actionModePopupWindowStyle actionModeSelectAllDrawable actionModeShareDrawable actionModeSplitBackground actionModeStyle actionModeWebSearchDrawable actionOverflowButtonStyle actionOverflowMenuStyle activityChooserViewStyle alertDialogButtonGroupStyle alertDialogCenterButtons alertDialogStyle alertDialogTheme android_windowAnimationStyle android_windowIsFloating autoCompleteTextViewStyle borderlessButtonStyle buttonBarButtonStyle buttonBarNegativeButtonStyle buttonBarNeutralButtonStyle buttonBarPositiveButtonStyle buttonBarStyle buttonStyle buttonStyleSmall checkboxStyle checkedTextViewStyle colorAccent colorBackgroundFloating colorButtonNormal colorControlActivated colorControlHighlight colorControlNormal colorError colorPrimary colorPrimaryDark colorSwitchThumbNormal controlBackground dialogCornerRadius dialogPreferredPadding dialogTheme dividerHorizontal dividerVertical dropDownListViewStyle dropdownListPreferredItemHeight editTextBackground editTextColor editTextStyle homeAsUpIndicator imageButtonStyle listChoiceBackgroundIndicator listChoiceIndicatorMultipleAnimated listChoiceIndicatorSingleAnimated listDividerAlertDialog listMenuViewStyle listPopupWindowStyle listPreferredItemHeight listPreferredItemHeightLarge listPreferredItemHeightSmall listPreferredItemPaddingEnd listPreferredItemPaddingLeft listPreferredItemPaddingRight listPreferredItemPaddingStart panelBackground panelMenuListTheme panelMenuListWidth popupMenuStyle popupWindowStyle radioButtonStyle ratingBarStyle ratingBarStyleIndicator ratingBarStyleSmall searchViewStyle seekBarStyle selectableItemBackground selectableItemBackgroundBorderless spinnerDropDownItemStyle spinnerStyle switchStyle textAppearanceLargePopupMenu textAppearanceListItem textAppearanceListItemSecondary textAppearanceListItemSmall textAppearancePopupMenuHeader textAppearanceSearchResultSubtitle textAppearanceSearchResultTitle textAppearanceSmallPopupMenu textColorAlertDialogListItem textColorSearchUrl toolbarNavigationButtonStyle toolbarStyle tooltipForegroundColor tooltipFrameBackground viewInflaterClass windowActionBar windowActionBarOverlay windowActionModeOverlay windowFixedHeightMajor windowFixedHeightMinor windowFixedWidthMajor windowFixedWidthMinor windowMinWidthMajor windowMinWidthMinor windowNoTitle +styleable ArcMenu arcRadius closeOnClick duration fromDegrees mainImage toDegrees +styleable BottomAppBar backgroundTint fabAlignmentMode fabCradleMargin fabCradleRoundedCornerRadius fabCradleVerticalOffset hideOnScroll +styleable BottomNavigationView elevation itemBackground itemHorizontalTranslationEnabled itemIconSize itemIconTint itemTextAppearanceActive itemTextAppearanceInactive itemTextColor labelVisibilityMode menu +styleable BottomSheetBehavior_Layout behavior_fitToContents behavior_hideable behavior_peekHeight behavior_skipCollapsed +styleable ButtonBarLayout allowStacking +styleable CardView android_minHeight android_minWidth cardBackgroundColor cardCornerRadius cardElevation cardMaxElevation cardPreventCornerOverlap cardUseCompatPadding contentPadding contentPaddingBottom contentPaddingLeft contentPaddingRight contentPaddingTop +styleable Chip android_checkable android_ellipsize android_maxWidth android_text android_textAppearance checkedIcon checkedIconEnabled checkedIconVisible chipBackgroundColor chipCornerRadius chipEndPadding chipIcon chipIconEnabled chipIconSize chipIconTint chipIconVisible chipMinHeight chipStartPadding chipStrokeColor chipStrokeWidth closeIcon closeIconEnabled closeIconEndPadding closeIconSize closeIconStartPadding closeIconTint closeIconVisible hideMotionSpec iconEndPadding iconStartPadding rippleColor showMotionSpec textEndPadding textStartPadding +styleable ChipGroup checkedChip chipSpacing chipSpacingHorizontal chipSpacingVertical singleLine singleSelection +styleable CollapsingToolbarLayout collapsedTitleGravity collapsedTitleTextAppearance contentScrim expandedTitleGravity expandedTitleMargin expandedTitleMarginBottom expandedTitleMarginEnd expandedTitleMarginStart expandedTitleMarginTop expandedTitleTextAppearance scrimAnimationDuration scrimVisibleHeightTrigger statusBarScrim title titleEnabled toolbarId +styleable CollapsingToolbarLayout_Layout layout_collapseMode layout_collapseParallaxMultiplier +styleable ColorStateListItem alpha android_alpha android_color +styleable CompoundButton android_button buttonCompat buttonTint buttonTintMode +styleable CoordinatorLayout keylines statusBarBackground +styleable CoordinatorLayout_Layout android_layout_gravity layout_anchor layout_anchorGravity layout_behavior layout_dodgeInsetEdges layout_insetEdge layout_keyline +styleable DashLine dashGap dashOrientation dashWidth lineColor +styleable DesignTheme bottomSheetDialogTheme bottomSheetStyle textColorError +styleable DrawerArrowToggle arrowHeadLength arrowShaftLength barLength color drawableSize gapBetweenBars spinBars thickness +styleable Emotion emotionHeight emotionSize emotionWidth +styleable FloatingActionButton backgroundTint backgroundTintMode borderWidth elevation fabCustomSize fabSize hideMotionSpec hoveredFocusedTranslationZ maxImageSize pressedTranslationZ rippleColor showMotionSpec useCompatPadding +styleable FloatingActionButton_Behavior_Layout behavior_autoHide +styleable FlowLayout itemSpacing lineSpacing +styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery +styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex +styleable ForegroundLinearLayout android_foreground android_foregroundGravity foregroundInsidePadding +styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type +styleable GradientColorItem android_color android_offset +styleable LinearLayoutCompat android_baselineAligned android_baselineAlignedChildIndex android_gravity android_orientation android_weightSum divider dividerPadding measureWithLargestChild showDividers +styleable LinearLayoutCompat_Layout android_layout_gravity android_layout_height android_layout_weight android_layout_width +styleable ListPopupWindow android_dropDownHorizontalOffset android_dropDownVerticalOffset +styleable MaterialButton android_insetBottom android_insetLeft android_insetRight android_insetTop backgroundTint backgroundTintMode cornerRadius icon iconGravity iconPadding iconSize iconTint iconTintMode rippleColor strokeColor strokeWidth +styleable MaterialCardView strokeColor strokeWidth +styleable MaterialComponentsTheme bottomSheetDialogTheme bottomSheetStyle chipGroupStyle chipStandaloneStyle chipStyle colorAccent colorBackgroundFloating colorPrimary colorPrimaryDark colorSecondary editTextStyle floatingActionButtonStyle materialButtonStyle materialCardViewStyle navigationViewStyle scrimBackground snackbarButtonStyle tabStyle textAppearanceBody1 textAppearanceBody2 textAppearanceButton textAppearanceCaption textAppearanceHeadline1 textAppearanceHeadline2 textAppearanceHeadline3 textAppearanceHeadline4 textAppearanceHeadline5 textAppearanceHeadline6 textAppearanceOverline textAppearanceSubtitle1 textAppearanceSubtitle2 textInputStyle +styleable MenuGroup android_checkableBehavior android_enabled android_id android_menuCategory android_orderInCategory android_visible +styleable MenuItem actionLayout actionProviderClass actionViewClass alphabeticModifiers android_alphabeticShortcut android_checkable android_checked android_enabled android_icon android_id android_menuCategory android_numericShortcut android_onClick android_orderInCategory android_title android_titleCondensed android_visible contentDescription iconTint iconTintMode numericModifiers showAsAction tooltipText +styleable MenuView android_headerBackground android_horizontalDivider android_itemBackground android_itemIconDisabledAlpha android_itemTextAppearance android_verticalDivider android_windowAnimationStyle preserveIconSpacing subMenuArrow +styleable NavigationView android_background android_fitsSystemWindows android_maxWidth elevation headerLayout itemBackground itemHorizontalPadding itemIconPadding itemIconTint itemTextAppearance itemTextColor menu +styleable PopupWindow android_popupAnimationStyle android_popupBackground overlapAnchor +styleable PopupWindowBackgroundState state_above_anchor +styleable RatioLayout ratio +styleable RecycleListView paddingBottomNoButtons paddingTopNoTitle +styleable RecyclerView android_descendantFocusability android_orientation fastScrollEnabled fastScrollHorizontalThumbDrawable fastScrollHorizontalTrackDrawable fastScrollVerticalThumbDrawable fastScrollVerticalTrackDrawable layoutManager reverseLayout spanCount stackFromEnd +styleable ScrimInsetsFrameLayout insetForeground +styleable ScrollingViewBehavior_Layout behavior_overlapTop +styleable SearchView android_focusable android_imeOptions android_inputType android_maxWidth closeIcon commitIcon defaultQueryHint goIcon iconifiedByDefault layout queryBackground queryHint searchHintIcon searchIcon submitBackground suggestionRowLayout voiceIcon +styleable ShelvesView shelfBackground +styleable SlidingMenu rightPadding +styleable Snackbar snackbarButtonStyle snackbarStyle +styleable SnackbarLayout android_maxWidth elevation maxActionInlineWidth +styleable SpinKitView SpinKit_Color SpinKit_Style +styleable Spinner android_dropDownWidth android_entries android_popupBackground android_prompt popupTheme +styleable StateListDrawable android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible +styleable StateListDrawableItem android_drawable +styleable SwitchCompat android_textOff android_textOn android_thumb showText splitTrack switchMinWidth switchPadding switchTextAppearance thumbTextPadding thumbTint thumbTintMode track trackTint trackTintMode +styleable TabItem android_icon android_layout android_text +styleable TabLayout tabBackground tabContentStart tabGravity tabIconTint tabIconTintMode tabIndicator tabIndicatorAnimationDuration tabIndicatorColor tabIndicatorFullWidth tabIndicatorGravity tabIndicatorHeight tabInlineLabel tabMaxWidth tabMinWidth tabMode tabPadding tabPaddingBottom tabPaddingEnd tabPaddingStart tabPaddingTop tabRippleColor tabSelectedTextColor tabTextAppearance tabTextColor tabUnboundedRipple +styleable TextAppearance android_fontFamily android_shadowColor android_shadowDx android_shadowDy android_shadowRadius android_textColor android_textColorHint android_textColorLink android_textFontWeight android_textSize android_textStyle android_typeface fontFamily fontVariationSettings textAllCaps textLocale +styleable TextInputLayout android_hint android_textColorHint boxBackgroundColor boxBackgroundMode boxCollapsedPaddingTop boxCornerRadiusBottomEnd boxCornerRadiusBottomStart boxCornerRadiusTopEnd boxCornerRadiusTopStart boxStrokeColor boxStrokeWidth counterEnabled counterMaxLength counterOverflowTextAppearance counterTextAppearance errorEnabled errorTextAppearance helperText helperTextEnabled helperTextTextAppearance hintAnimationEnabled hintEnabled hintTextAppearance passwordToggleContentDescription passwordToggleDrawable passwordToggleEnabled passwordToggleTint passwordToggleTintMode +styleable ThemeEnforcement android_textAppearance enforceMaterialTheme enforceTextAppearance +styleable Toolbar android_gravity android_minHeight buttonGravity collapseContentDescription collapseIcon contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation logo logoDescription maxButtonHeight menu navigationContentDescription navigationIcon popupTheme subtitle subtitleTextAppearance subtitleTextColor title titleMargin titleMarginBottom titleMarginEnd titleMarginStart titleMarginTop titleMargins titleTextAppearance titleTextColor +styleable View android_focusable android_theme paddingEnd paddingStart theme +styleable ViewBackgroundHelper android_background backgroundTint backgroundTintMode +styleable ViewStubCompat android_id android_inflatedId android_layout diff --git a/src/main/resources/code/android/library-common/build/outputs/logs/manifest-merger-debug-report.txt b/src/main/resources/code/android/library-common/build/outputs/logs/manifest-merger-debug-report.txt new file mode 100644 index 0000000..221a615 --- /dev/null +++ b/src/main/resources/code/android/library-common/build/outputs/logs/manifest-merger-debug-report.txt @@ -0,0 +1,45 @@ +-- Merging decision tree log --- +manifest +ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:1-12:12 + package + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:2:5-39 + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + android:versionName + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:4:5-30 + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + xmlns:android + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:1:11-69 + android:versionCode + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:3:5-28 + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml +application +ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:6:5-10:19 + android:label + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:8:9-41 + android:allowBackup + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:7:9-35 + android:theme + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml:9:9-40 +uses-sdk +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml reason: use-sdk injection requested +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml +INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + android:targetSdkVersion + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + android:minSdkVersion + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + ADDED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml + INJECTED from D:\workspace\codegenerator\src\main\resources\code\android\library-common\AndroidManifest.xml diff --git a/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt b/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt new file mode 100644 index 0000000..479ac9a --- /dev/null +++ b/src/main/resources/code/android/library-common/build/tmp/compileDebugJavaWithJavac/source-classes-mapping.txt @@ -0,0 +1,338 @@ +com/demo/lib/common/okhttp/request/CountingRequestBody.java + com.demo.lib.common.okhttp.request.CountingRequestBody + com.demo.lib.common.okhttp.request.CountingRequestBody$CountingSink + com.demo.lib.common.okhttp.request.CountingRequestBody$Listener +com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.java + com.demo.lib.common.okhttp.cookie.store.SerializableHttpCookie +com/demo/lib/common/activity/BaseActivity.java + com.demo.lib.common.activity.BaseActivity +com/demo/lib/common/upgrade/UpdateService.java + com.demo.lib.common.upgrade.UpdateService + com.demo.lib.common.upgrade.UpdateService$1 +com/demo/lib/common/dialog/DialogUtil.java + com.demo.lib.common.dialog.DialogUtil +com/demo/lib/common/emotion/EmotionsFragment.java + com.demo.lib.common.emotion.EmotionsFragment +com/demo/lib/common/drawable/LayerDrawable.java + com.demo.lib.common.drawable.LayerDrawable + com.demo.lib.common.drawable.LayerDrawable$LayerState + com.demo.lib.common.drawable.LayerDrawable$Rec +com/demo/lib/common/widget/ResizableImageView.java + com.demo.lib.common.widget.ResizableImageView +com/demo/lib/common/Installation.java + com.demo.lib.common.Installation +com/demo/lib/common/util/common/ConnectionUtils.java + com.demo.lib.common.util.common.ConnectionUtils + com.demo.lib.common.util.common.ConnectionUtils$1 + com.demo.lib.common.util.common.ConnectionUtils$2 + com.demo.lib.common.util.common.ConnectionUtils$3 +com/demo/lib/common/DatabaseContext.java + com.demo.lib.common.DatabaseContext +com/demo/lib/common/util/ui/LoadingDialogUtil.java + com.demo.lib.common.util.ui.LoadingDialogUtil +com/demo/lib/common/util/FragmentSwitchHelper.java + com.demo.lib.common.util.FragmentSwitchHelper +com/demo/lib/common/util/device/MobileUtil.java + com.demo.lib.common.util.device.MobileUtil +com/demo/lib/common/util/SystemCommon.java + com.demo.lib.common.util.SystemCommon +com/demo/lib/common/util/cache/ImageFileCache.java + com.demo.lib.common.util.cache.ImageFileCache + com.demo.lib.common.util.cache.ImageFileCache$1 + com.demo.lib.common.util.cache.ImageFileCache$FileLastModifSort +com/demo/lib/common/widget/SystemBarTintManager.java + com.demo.lib.common.widget.SystemBarTintManager + com.demo.lib.common.widget.SystemBarTintManager$1 + com.demo.lib.common.widget.SystemBarTintManager$SystemBarConfig +com/demo/lib/common/okhttp/builder/HeadBuilder.java + com.demo.lib.common.okhttp.builder.HeadBuilder +com/demo/lib/common/util/common/DimenUtils.java + com.demo.lib.common.util.common.DimenUtils +com/demo/lib/common/dialog/BottomDialog.java + com.demo.lib.common.dialog.BottomDialog +com/demo/lib/common/okhttp/builder/OtherRequestBuilder.java + com.demo.lib.common.okhttp.builder.OtherRequestBuilder +com/demo/lib/common/widget/ShelfView.java + com.demo.lib.common.widget.ShelfView +com/demo/lib/common/util/ManifestDataUtil.java + com.demo.lib.common.util.ManifestDataUtil +com/demo/lib/common/util/SingleToast.java + com.demo.lib.common.util.SingleToast + com.demo.lib.common.util.SingleToast$1 +com/demo/lib/common/dialog/SlidingDialog.java + com.demo.lib.common.dialog.SlidingDialog +com/demo/lib/common/okhttp/log/LoggerInterceptor.java + com.demo.lib.common.okhttp.log.LoggerInterceptor +com/demo/lib/common/util/common/SoftKeyboardUtils.java + com.demo.lib.common.util.common.SoftKeyboardUtils +com/demo/lib/common/emotion/EmotionEditText.java + com.demo.lib.common.emotion.EmotionEditText +com/demo/lib/common/util/MarketUtils.java + com.demo.lib.common.util.MarketUtils +com/demo/lib/common/upgrade/Version.java + com.demo.lib.common.upgrade.Version +com/demo/lib/common/okhttp/builder/PostStringBuilder.java + com.demo.lib.common.okhttp.builder.PostStringBuilder +com/demo/lib/common/okhttp/request/RequestCall.java + com.demo.lib.common.okhttp.request.RequestCall +com/demo/lib/common/drawable/SpotlightDrawable.java + com.demo.lib.common.drawable.SpotlightDrawable +com/lcjian/lcjianlibrary/BuildConfig.java + com.lcjian.lcjianlibrary.BuildConfig +com/demo/lib/common/okhttp/request/PostFileRequest.java + com.demo.lib.common.okhttp.request.PostFileRequest + com.demo.lib.common.okhttp.request.PostFileRequest$1 + com.demo.lib.common.okhttp.request.PostFileRequest$1$1 +com/demo/lib/common/drawable/CircleDrawable.java + com.demo.lib.common.drawable.CircleDrawable +com/demo/lib/common/util/glide/GlideRoundTransform.java + com.demo.lib.common.util.glide.GlideRoundTransform +com/demo/lib/common/okhttp/request/OtherRequest.java + com.demo.lib.common.okhttp.request.OtherRequest +com/demo/lib/common/content/ConnectivityChangeHelper.java + com.demo.lib.common.content.ConnectivityChangeHelper + com.demo.lib.common.content.ConnectivityChangeHelper$1 + com.demo.lib.common.content.ConnectivityChangeHelper$OnConnectivityChangeListener +com/demo/lib/common/util/security/AESOperator.java + com.demo.lib.common.util.security.AESOperator +com/demo/lib/common/okhttp/builder/GetBuilder.java + com.demo.lib.common.okhttp.builder.GetBuilder +com/demo/lib/common/okhttp/cookie/store/HasCookieStore.java + com.demo.lib.common.okhttp.cookie.store.HasCookieStore +com/demo/lib/common/util/ImageChooseHelper.java + com.demo.lib.common.util.ImageChooseHelper + com.demo.lib.common.util.ImageChooseHelper$Callback +com/demo/lib/common/entity/ExpireTimeValue.java + com.demo.lib.common.entity.ExpireTimeValue +com/demo/lib/common/util/cache/StrictLineReader.java + com.demo.lib.common.util.cache.StrictLineReader + com.demo.lib.common.util.cache.StrictLineReader$1 +com/demo/lib/common/emotion/EmotionTextView.java + com.demo.lib.common.emotion.EmotionTextView +com/demo/lib/common/entity/IsSeeking.java + com.demo.lib.common.entity.IsSeeking +com/demo/lib/common/util/security/MD5Utils.java + com.demo.lib.common.util.security.MD5Utils +com/demo/lib/common/okhttp/request/GetRequest.java + com.demo.lib.common.okhttp.request.GetRequest +com/demo/lib/common/util/common/DateUtils.java + com.demo.lib.common.util.common.DateUtils +com/demo/lib/common/util/common/ClipboardUtil.java + com.demo.lib.common.util.common.ClipboardUtil + com.demo.lib.common.util.common.ClipboardUtil$1 +com/demo/lib/common/okhttp/https/HttpsUtils.java + com.demo.lib.common.okhttp.https.HttpsUtils + com.demo.lib.common.okhttp.https.HttpsUtils$1 + com.demo.lib.common.okhttp.https.HttpsUtils$MyTrustManager + com.demo.lib.common.okhttp.https.HttpsUtils$SSLParams + com.demo.lib.common.okhttp.https.HttpsUtils$UnSafeHostnameVerifier + com.demo.lib.common.okhttp.https.HttpsUtils$UnSafeTrustManager +com/demo/lib/common/okhttp/cookie/CookieJarImpl.java + com.demo.lib.common.okhttp.cookie.CookieJarImpl +com/demo/lib/common/util/cache/ImageMemoryCache.java + com.demo.lib.common.util.cache.ImageMemoryCache + com.demo.lib.common.util.cache.ImageMemoryCache$1 + com.demo.lib.common.util.cache.ImageMemoryCache$2 +com/demo/lib/common/util/cache/AndroidCacheUtil.java + com.demo.lib.common.util.cache.AndroidCacheUtil +com/demo/lib/common/util/FragmentSwitchHelperV2.java + com.demo.lib.common.util.FragmentSwitchHelperV2 +com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.java + com.demo.lib.common.okhttp.cookie.store.PersistentCookieStore +com/demo/lib/common/okhttp/builder/PostFileBuilder.java + com.demo.lib.common.okhttp.builder.PostFileBuilder +com/demo/lib/common/widget/RatioLayout.java + com.demo.lib.common.widget.RatioLayout +com/demo/lib/common/upgrade/UpdateActivity.java + com.demo.lib.common.upgrade.UpdateActivity + com.demo.lib.common.upgrade.UpdateActivity$1 + com.demo.lib.common.upgrade.UpdateActivity$2 +com/demo/lib/common/emotion/EmotionGridFragment.java + com.demo.lib.common.emotion.EmotionGridFragment + com.demo.lib.common.emotion.EmotionGridFragment$1 + com.demo.lib.common.emotion.EmotionGridFragment$EmotionAdapter + com.demo.lib.common.emotion.EmotionGridFragment$OnEditListener +com/demo/lib/common/DeviceUuidFactory.java + com.demo.lib.common.DeviceUuidFactory +com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.java + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$1 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$2 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$3 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$4 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$5 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$6 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$7 + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$BaseAnimationListener + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$Mode + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$OnLoadListener + com.demo.lib.common.widget.myswiperefreshlayout.MySwipeRefreshLayout$OnRefreshListener +com/demo/lib/common/widget/MyListView.java + com.demo.lib.common.widget.MyListView +com/demo/lib/common/okhttp/callback/Callback.java + com.demo.lib.common.okhttp.callback.Callback + com.demo.lib.common.okhttp.callback.Callback$1 +com/demo/lib/common/util/cache/DiskLruCache.java + com.demo.lib.common.util.cache.DiskLruCache + com.demo.lib.common.util.cache.DiskLruCache$1 + com.demo.lib.common.util.cache.DiskLruCache$2 + com.demo.lib.common.util.cache.DiskLruCache$Editor + com.demo.lib.common.util.cache.DiskLruCache$Editor$FaultHidingOutputStream + com.demo.lib.common.util.cache.DiskLruCache$Entry + com.demo.lib.common.util.cache.DiskLruCache$Snapshot +com/demo/lib/common/animation/Rotate3dAnimation.java + com.demo.lib.common.animation.Rotate3dAnimation +com/demo/lib/common/okhttp/builder/PostFormBuilder.java + com.demo.lib.common.okhttp.builder.PostFormBuilder + com.demo.lib.common.okhttp.builder.PostFormBuilder$FileInput +com/demo/lib/common/drawable/CrossFadeDrawable.java + com.demo.lib.common.drawable.CrossFadeDrawable + com.demo.lib.common.drawable.CrossFadeDrawable$1 +com/demo/lib/common/util/RefreshLayout.java + com.demo.lib.common.util.RefreshLayout + com.demo.lib.common.util.RefreshLayout$OnLoadListener +com/demo/lib/common/util/common/SerializeUtils.java + com.demo.lib.common.util.common.SerializeUtils +com/demo/lib/common/okhttp/callback/StringCallback.java + com.demo.lib.common.okhttp.callback.StringCallback +com/demo/lib/common/okhttp/utils/Exceptions.java + com.demo.lib.common.okhttp.utils.Exceptions +com/demo/lib/common/upgrade/CheckUpdateService.java + com.demo.lib.common.upgrade.CheckUpdateService +com/demo/lib/common/util/ScreenUtils.java + com.demo.lib.common.util.ScreenUtils +com/demo/lib/common/widget/ExtendEditText.java + com.demo.lib.common.widget.ExtendEditText + com.demo.lib.common.widget.ExtendEditText$1 + com.demo.lib.common.widget.ExtendEditText$OnDrawableClickListener +com/demo/lib/common/widget/verticalviewpager/PagerAdapter.java + com.demo.lib.common.widget.verticalviewpager.PagerAdapter +com/demo/lib/common/okhttp/request/OkHttpRequest.java + com.demo.lib.common.okhttp.request.OkHttpRequest +com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.java + com.demo.lib.common.okhttp.builder.OkHttpRequestBuilder +com/demo/lib/common/util/glide/GlideCircleTransform.java + com.demo.lib.common.util.glide.GlideCircleTransform +com/demo/lib/common/RetainViewFragment.java + com.demo.lib.common.RetainViewFragment +com/demo/lib/common/emotion/EmotionHandler.java + com.demo.lib.common.emotion.EmotionHandler +com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.java + com.demo.lib.common.okhttp.cookie.store.MemoryCookieStore +com/demo/lib/common/widget/ProgressWebView.java + com.demo.lib.common.widget.ProgressWebView + com.demo.lib.common.widget.ProgressWebView$WebChromeClient +com/demo/lib/common/okhttp/builder/HasParamsable.java + com.demo.lib.common.okhttp.builder.HasParamsable +com/demo/lib/common/util/ui/TextViewUtil.java + com.demo.lib.common.util.ui.TextViewUtil + com.demo.lib.common.util.ui.TextViewUtil$1 +com/demo/lib/common/widget/IndexableListView.java + com.demo.lib.common.widget.IndexableListView + com.demo.lib.common.widget.IndexableListView$1 + com.demo.lib.common.widget.IndexableListView$IndexScroller + com.demo.lib.common.widget.IndexableListView$IndexScroller$1 +com/demo/lib/common/util/common/RandomUtils.java + com.demo.lib.common.util.common.RandomUtils +com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.java + com.demo.lib.common.widget.myswiperefreshlayout.SwipeProgressBar +com/demo/lib/common/drawable/TransitionDrawable.java + com.demo.lib.common.drawable.TransitionDrawable + com.demo.lib.common.drawable.TransitionDrawable$1 + com.demo.lib.common.drawable.TransitionDrawable$TransitionState +com/demo/lib/common/okhttp/utils/ImageUtils.java + com.demo.lib.common.okhttp.utils.ImageUtils + com.demo.lib.common.okhttp.utils.ImageUtils$ImageSize +com/demo/lib/common/util/common/PhotoCrop.java + com.demo.lib.common.util.common.PhotoCrop +com/demo/lib/common/util/common/PackageUtils2.java + com.demo.lib.common.util.common.PackageUtils2 +com/demo/lib/common/widget/UnderLineTextView.java + com.demo.lib.common.widget.UnderLineTextView +com/demo/lib/common/widget/IsPad.java + com.demo.lib.common.widget.IsPad +com/demo/lib/common/util/common/BitmapUtils.java + com.demo.lib.common.util.common.BitmapUtils +com/demo/lib/common/okhttp/callback/BitmapCallback.java + com.demo.lib.common.okhttp.callback.BitmapCallback +com/demo/lib/common/emotion/EmotionSpan.java + com.demo.lib.common.emotion.EmotionSpan +com/demo/lib/common/okhttp/callback/GenericsCallback.java + com.demo.lib.common.okhttp.callback.GenericsCallback +com/demo/lib/common/widget/RefreshView.java + com.demo.lib.common.widget.RefreshView +com/demo/lib/common/util/common/ObjectUtils.java + com.demo.lib.common.util.common.ObjectUtils +com/demo/lib/common/util/common/StorageUtils.java + com.demo.lib.common.util.common.StorageUtils +com/demo/lib/common/util/ui/SystemClipImageUtil.java + com.demo.lib.common.util.ui.SystemClipImageUtil +com/demo/lib/common/okhttp/cookie/store/CookieStore.java + com.demo.lib.common.okhttp.cookie.store.CookieStore +com/demo/lib/common/util/ui/StatusBarHeightUtil.java + com.demo.lib.common.util.ui.StatusBarHeightUtil +com/demo/lib/common/util/device/DeviceInfoUtil.java + com.demo.lib.common.util.device.DeviceInfoUtil + com.demo.lib.common.util.device.DeviceInfoUtil$DeviceInfoType +com/demo/lib/common/util/common/FileUtils.java + com.demo.lib.common.util.common.FileUtils +com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.java + com.demo.lib.common.widget.myswiperefreshlayout.BakedBezierInterpolator +com/demo/lib/common/util/security/AEScrypt.java + com.demo.lib.common.util.security.AEScrypt +com/demo/lib/common/okhttp/OkHttpUtils.java + com.demo.lib.common.okhttp.OkHttpUtils + com.demo.lib.common.okhttp.OkHttpUtils$1 + com.demo.lib.common.okhttp.OkHttpUtils$2 + com.demo.lib.common.okhttp.OkHttpUtils$3 + com.demo.lib.common.okhttp.OkHttpUtils$METHOD +com/demo/lib/common/util/security/DEScrypt.java + com.demo.lib.common.util.security.DEScrypt +com/demo/lib/common/util/Environment.java + com.demo.lib.common.util.Environment +com/demo/lib/common/PhoneCallReceiver.java + com.demo.lib.common.PhoneCallReceiver +com/demo/lib/common/util/cache/Util.java + com.demo.lib.common.util.cache.Util +com/demo/lib/common/okhttp/callback/IGenericsSerializator.java + com.demo.lib.common.okhttp.callback.IGenericsSerializator +com/demo/lib/common/okhttp/callback/FileCallBack.java + com.demo.lib.common.okhttp.callback.FileCallBack + com.demo.lib.common.okhttp.callback.FileCallBack$1 +com/demo/lib/common/util/common/IClipboardContentListener.java + com.demo.lib.common.util.common.IClipboardContentListener +com/demo/lib/common/drawable/FastBitmapDrawable.java + com.demo.lib.common.drawable.FastBitmapDrawable +com/demo/lib/common/widget/AdaptiveListView.java + com.demo.lib.common.widget.AdaptiveListView +com/demo/lib/common/content/CursorLoader.java + com.demo.lib.common.content.CursorLoader +com/demo/lib/common/okhttp/utils/Platform.java + com.demo.lib.common.okhttp.utils.Platform + com.demo.lib.common.okhttp.utils.Platform$Android + com.demo.lib.common.okhttp.utils.Platform$Android$MainThreadExecutor +com/demo/lib/common/widget/MyViewPager.java + com.demo.lib.common.widget.MyViewPager +com/demo/lib/common/util/common/StringUtils.java + com.demo.lib.common.util.common.StringUtils +com/demo/lib/common/util/PermissionsChecker.java + com.demo.lib.common.util.PermissionsChecker +com/demo/lib/common/entity/ClipCopyContent.java + com.demo.lib.common.entity.ClipCopyContent +com/demo/lib/common/widget/MyGridView.java + com.demo.lib.common.widget.MyGridView +com/demo/lib/common/okhttp/request/PostStringRequest.java + com.demo.lib.common.okhttp.request.PostStringRequest +com/demo/lib/common/okhttp/request/PostFormRequest.java + com.demo.lib.common.okhttp.request.PostFormRequest + com.demo.lib.common.okhttp.request.PostFormRequest$1 + com.demo.lib.common.okhttp.request.PostFormRequest$1$1 +com/demo/lib/common/widget/TagCloudLayout.java + com.demo.lib.common.widget.TagCloudLayout + com.demo.lib.common.widget.TagCloudLayout$FlingRunnable + com.demo.lib.common.widget.TagCloudLayout$OnScrollListener + com.demo.lib.common.widget.TagCloudLayout$TagView +com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java + com.demo.lib.common.widget.verticalviewpager.ExtendedWebView +com/demo/lib/common/okhttp/utils/L.java + com.demo.lib.common.okhttp.utils.L diff --git a/src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/BuildConfig.java b/src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/BuildConfig.java new file mode 100644 index 0000000..85d9bfe --- /dev/null +++ b/src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/BuildConfig.java @@ -0,0 +1,6 @@ +/** Automatically generated file. DO NOT MODIFY */ +package com.lcjian.lcjianlibrary; + +public final class BuildConfig { + public final static boolean DEBUG = true; +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/R.java b/src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/R.java new file mode 100644 index 0000000..a0d2341 --- /dev/null +++ b/src/main/resources/code/android/library-common/gen/com/lcjian/lcjianlibrary/R.java @@ -0,0 +1,509 @@ +/* AUTO-GENERATED FILE. DO NOT MODIFY. + * + * This class was automatically generated by the + * aapt tool from the resource data it found. It + * should not be modified by hand. + */ + +package com.lcjian.lcjianlibrary; + +public final class R { + public static final class anim { + public static int bottom_dialog_enter=0x7f040000; + public static int bottom_dialog_exit=0x7f040001; + public static int sliding_dialog_enter=0x7f040002; + public static int sliding_dialog_exit=0x7f040003; + } + public static final class attr { + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int arcRadius=0x7f010006; + /** <p>Must be a boolean value, either "<code>true</code>" or "<code>false</code>". +<p>This may also be a reference to a resource (in the form +"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or +theme attribute (in the form +"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>") +containing a value of this type. + */ + public static int closeOnClick=0x7f010008; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int dashGap=0x7f010001; + /** <p>Must be one of the following constant values.</p> +<table> +<colgroup align="left" /> +<colgroup align="left" /> +<colgroup align="left" /> +<tr><th>Constant</th><th>Value</th><th>Description</th></tr> +<tr><td><code>horizontal</code></td><td>0</td><td></td></tr> +<tr><td><code>vertical</code></td><td>1</td><td></td></tr> +</table> + */ + public static int dashOrientation=0x7f010003; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int dashWidth=0x7f010000; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be an integer value, such as "<code>100</code>". + */ + public static int duration=0x7f010007; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int emotionHeight=0x7f01000c; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int emotionSize=0x7f01000b; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int emotionWidth=0x7f01000d; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a floating point value, such as "<code>1.2</code>". + */ + public static int fromDegrees=0x7f010004; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>", +"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>". + */ + public static int lineColor=0x7f010002; + /** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". + */ + public static int mainImage=0x7f010009; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + */ + public static int maxHeight=0x7f01000e; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a floating point value, such as "<code>1.2</code>". + */ + public static int ratio=0x7f01000f; + /** <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". + */ + public static int shelfBackground=0x7f01000a; + /** <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a floating point value, such as "<code>1.2</code>". + */ + public static int toDegrees=0x7f010005; + } + public static final class color { + public static int dim_foreground_dark=0x7f080000; + } + public static final class drawable { + public static int ic_launcher=0x7f020000; + public static int ic_media_pause=0x7f020001; + public static int ic_media_play=0x7f020002; + public static int spotlight=0x7f020003; + public static int spotlight_blue=0x7f020004; + } + public static final class id { + public static int ffwd=0x7f070009; + public static int fullscreen_custom_content=0x7f070003; + public static int gv_emotion=0x7f070002; + public static int horizontal=0x7f070000; + public static int main_content=0x7f070004; + public static int mediacontroller_progress=0x7f07000c; + public static int next=0x7f07000a; + public static int pause=0x7f070008; + public static int prev=0x7f070006; + public static int rew=0x7f070007; + public static int time=0x7f07000d; + public static int time_current=0x7f07000b; + public static int vertical=0x7f070001; + public static int webview_player=0x7f070005; + } + public static final class layout { + public static int emotion_grid=0x7f030000; + public static int emotion_item=0x7f030001; + public static int fragment_webview_video=0x7f030002; + public static int media_controller=0x7f030003; + } + public static final class string { + public static int app_name=0x7f050000; + } + public static final class style { + /** + Base application theme, dependent on API level. This theme is replaced + by AppBaseTheme from res/values-vXX/styles.xml on newer devices. + + + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + + + Base application theme for API 11+. This theme completely replaces + AppBaseTheme from res/values/styles.xml on API 11+ devices. + + API 11 theme customizations can go here. + + Base application theme for API 14+. This theme completely replaces + AppBaseTheme from BOTH res/values/styles.xml and + res/values-v11/styles.xml on API 14+ devices. + + API 14 theme customizations can go here. + + Base application theme, dependent on API level. This theme is replaced + by AppBaseTheme from res/values-vXX/styles.xml on newer devices. + + + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + + + Base application theme for API 11+. This theme completely replaces + AppBaseTheme from res/values/styles.xml on API 11+ devices. + + API 11 theme customizations can go here. + + Base application theme for API 14+. This theme completely replaces + AppBaseTheme from BOTH res/values/styles.xml and + res/values-v11/styles.xml on API 14+ devices. + + API 14 theme customizations can go here. + */ + public static int AppBaseTheme=0x7f060000; + /** Application theme. + All customizations that are NOT specific to a particular API-level can go here. + Application theme. + All customizations that are NOT specific to a particular API-level can go here. + */ + public static int AppTheme=0x7f060001; + public static int SlidingDialogAnimation=0x7f060003; + public static int SlidingDialogTheme=0x7f060004; + public static int Theme_Sliding_Dialog=0x7f060005; + public static int dialogstyle=0x7f060002; + } + public static final class styleable { + /** Attributes that can be used with a AdaptiveListView. + <p>Includes the following attributes:</p> + <table> + <colgroup align="left" /> + <colgroup align="left" /> + <tr><th>Attribute</th><th>Description</th></tr> + <tr><td><code>{@link #AdaptiveListView_maxHeight com.lcjian.lcjianlibrary:maxHeight}</code></td><td></td></tr> + </table> + @see #AdaptiveListView_maxHeight + */ + public static final int[] AdaptiveListView = { + 0x7f01000e + }; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#maxHeight} + attribute's value can be found in the {@link #AdaptiveListView} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:maxHeight + */ + public static final int AdaptiveListView_maxHeight = 0; + /** Attributes that can be used with a ArcMenu. + <p>Includes the following attributes:</p> + <table> + <colgroup align="left" /> + <colgroup align="left" /> + <tr><th>Attribute</th><th>Description</th></tr> + <tr><td><code>{@link #ArcMenu_arcRadius com.lcjian.lcjianlibrary:arcRadius}</code></td><td></td></tr> + <tr><td><code>{@link #ArcMenu_closeOnClick com.lcjian.lcjianlibrary:closeOnClick}</code></td><td></td></tr> + <tr><td><code>{@link #ArcMenu_duration com.lcjian.lcjianlibrary:duration}</code></td><td></td></tr> + <tr><td><code>{@link #ArcMenu_fromDegrees com.lcjian.lcjianlibrary:fromDegrees}</code></td><td></td></tr> + <tr><td><code>{@link #ArcMenu_mainImage com.lcjian.lcjianlibrary:mainImage}</code></td><td></td></tr> + <tr><td><code>{@link #ArcMenu_toDegrees com.lcjian.lcjianlibrary:toDegrees}</code></td><td></td></tr> + </table> + @see #ArcMenu_arcRadius + @see #ArcMenu_closeOnClick + @see #ArcMenu_duration + @see #ArcMenu_fromDegrees + @see #ArcMenu_mainImage + @see #ArcMenu_toDegrees + */ + public static final int[] ArcMenu = { + 0x7f010004, 0x7f010005, 0x7f010006, 0x7f010007, + 0x7f010008, 0x7f010009 + }; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#arcRadius} + attribute's value can be found in the {@link #ArcMenu} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:arcRadius + */ + public static final int ArcMenu_arcRadius = 2; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#closeOnClick} + attribute's value can be found in the {@link #ArcMenu} array. + + + <p>Must be a boolean value, either "<code>true</code>" or "<code>false</code>". +<p>This may also be a reference to a resource (in the form +"<code>@[<i>package</i>:]<i>type</i>:<i>name</i></code>") or +theme attribute (in the form +"<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>") +containing a value of this type. + @attr name com.lcjian.lcjianlibrary:closeOnClick + */ + public static final int ArcMenu_closeOnClick = 4; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#duration} + attribute's value can be found in the {@link #ArcMenu} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be an integer value, such as "<code>100</code>". + @attr name com.lcjian.lcjianlibrary:duration + */ + public static final int ArcMenu_duration = 3; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#fromDegrees} + attribute's value can be found in the {@link #ArcMenu} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a floating point value, such as "<code>1.2</code>". + @attr name com.lcjian.lcjianlibrary:fromDegrees + */ + public static final int ArcMenu_fromDegrees = 0; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#mainImage} + attribute's value can be found in the {@link #ArcMenu} array. + + + <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". + @attr name com.lcjian.lcjianlibrary:mainImage + */ + public static final int ArcMenu_mainImage = 5; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#toDegrees} + attribute's value can be found in the {@link #ArcMenu} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a floating point value, such as "<code>1.2</code>". + @attr name com.lcjian.lcjianlibrary:toDegrees + */ + public static final int ArcMenu_toDegrees = 1; + /** Attributes that can be used with a DashLine. + <p>Includes the following attributes:</p> + <table> + <colgroup align="left" /> + <colgroup align="left" /> + <tr><th>Attribute</th><th>Description</th></tr> + <tr><td><code>{@link #DashLine_dashGap com.lcjian.lcjianlibrary:dashGap}</code></td><td></td></tr> + <tr><td><code>{@link #DashLine_dashOrientation com.lcjian.lcjianlibrary:dashOrientation}</code></td><td></td></tr> + <tr><td><code>{@link #DashLine_dashWidth com.lcjian.lcjianlibrary:dashWidth}</code></td><td></td></tr> + <tr><td><code>{@link #DashLine_lineColor com.lcjian.lcjianlibrary:lineColor}</code></td><td></td></tr> + </table> + @see #DashLine_dashGap + @see #DashLine_dashOrientation + @see #DashLine_dashWidth + @see #DashLine_lineColor + */ + public static final int[] DashLine = { + 0x7f010000, 0x7f010001, 0x7f010002, 0x7f010003 + }; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#dashGap} + attribute's value can be found in the {@link #DashLine} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:dashGap + */ + public static final int DashLine_dashGap = 1; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#dashOrientation} + attribute's value can be found in the {@link #DashLine} array. + + + <p>Must be one of the following constant values.</p> +<table> +<colgroup align="left" /> +<colgroup align="left" /> +<colgroup align="left" /> +<tr><th>Constant</th><th>Value</th><th>Description</th></tr> +<tr><td><code>horizontal</code></td><td>0</td><td></td></tr> +<tr><td><code>vertical</code></td><td>1</td><td></td></tr> +</table> + @attr name com.lcjian.lcjianlibrary:dashOrientation + */ + public static final int DashLine_dashOrientation = 3; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#dashWidth} + attribute's value can be found in the {@link #DashLine} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:dashWidth + */ + public static final int DashLine_dashWidth = 0; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#lineColor} + attribute's value can be found in the {@link #DashLine} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a color value, in the form of "<code>#<i>rgb</i></code>", "<code>#<i>argb</i></code>", +"<code>#<i>rrggbb</i></code>", or "<code>#<i>aarrggbb</i></code>". + @attr name com.lcjian.lcjianlibrary:lineColor + */ + public static final int DashLine_lineColor = 2; + /** Attributes that can be used with a Emotion. + <p>Includes the following attributes:</p> + <table> + <colgroup align="left" /> + <colgroup align="left" /> + <tr><th>Attribute</th><th>Description</th></tr> + <tr><td><code>{@link #Emotion_emotionHeight com.lcjian.lcjianlibrary:emotionHeight}</code></td><td></td></tr> + <tr><td><code>{@link #Emotion_emotionSize com.lcjian.lcjianlibrary:emotionSize}</code></td><td></td></tr> + <tr><td><code>{@link #Emotion_emotionWidth com.lcjian.lcjianlibrary:emotionWidth}</code></td><td></td></tr> + </table> + @see #Emotion_emotionHeight + @see #Emotion_emotionSize + @see #Emotion_emotionWidth + */ + public static final int[] Emotion = { + 0x7f01000b, 0x7f01000c, 0x7f01000d + }; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#emotionHeight} + attribute's value can be found in the {@link #Emotion} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:emotionHeight + */ + public static final int Emotion_emotionHeight = 1; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#emotionSize} + attribute's value can be found in the {@link #Emotion} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:emotionSize + */ + public static final int Emotion_emotionSize = 0; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#emotionWidth} + attribute's value can be found in the {@link #Emotion} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a dimension value, which is a floating point number appended with a unit such as "<code>14.5sp</code>". +Available units are: px (pixels), dp (density-independent pixels), sp (scaled pixels based on preferred font size), +in (inches), mm (millimeters). + @attr name com.lcjian.lcjianlibrary:emotionWidth + */ + public static final int Emotion_emotionWidth = 2; + /** Attributes that can be used with a RatioLayout. + <p>Includes the following attributes:</p> + <table> + <colgroup align="left" /> + <colgroup align="left" /> + <tr><th>Attribute</th><th>Description</th></tr> + <tr><td><code>{@link #RatioLayout_ratio com.lcjian.lcjianlibrary:ratio}</code></td><td></td></tr> + </table> + @see #RatioLayout_ratio + */ + public static final int[] RatioLayout = { + 0x7f01000f + }; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#ratio} + attribute's value can be found in the {@link #RatioLayout} array. + + + <p>May be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". +<p>May be a floating point value, such as "<code>1.2</code>". + @attr name com.lcjian.lcjianlibrary:ratio + */ + public static final int RatioLayout_ratio = 0; + /** Attributes that can be used with a ShelvesView. + <p>Includes the following attributes:</p> + <table> + <colgroup align="left" /> + <colgroup align="left" /> + <tr><th>Attribute</th><th>Description</th></tr> + <tr><td><code>{@link #ShelvesView_shelfBackground com.lcjian.lcjianlibrary:shelfBackground}</code></td><td></td></tr> + </table> + @see #ShelvesView_shelfBackground + */ + public static final int[] ShelvesView = { + 0x7f01000a + }; + /** + <p>This symbol is the offset where the {@link com.lcjian.lcjianlibrary.R.attr#shelfBackground} + attribute's value can be found in the {@link #ShelvesView} array. + + + <p>Must be a reference to another resource, in the form "<code>@[+][<i>package</i>:]<i>type</i>:<i>name</i></code>" +or to a theme attribute in the form "<code>?[<i>package</i>:][<i>type</i>:]<i>name</i></code>". + @attr name com.lcjian.lcjianlibrary:shelfBackground + */ + public static final int ShelvesView_shelfBackground = 0; + }; +} diff --git a/src/main/resources/code/android/library-common/libs/AndRatingBar-1.0.3.aar b/src/main/resources/code/android/library-common/libs/AndRatingBar-1.0.3.aar new file mode 100644 index 0000000..771e4cd --- /dev/null +++ b/src/main/resources/code/android/library-common/libs/AndRatingBar-1.0.3.aar Binary files differ diff --git a/src/main/resources/code/android/library-common/libs/android-query-full.0.26.7.jar b/src/main/resources/code/android/library-common/libs/android-query-full.0.26.7.jar new file mode 100644 index 0000000..bf19f35 --- /dev/null +++ b/src/main/resources/code/android/library-common/libs/android-query-full.0.26.7.jar Binary files differ diff --git a/src/main/resources/code/android/library-common/libs/universal-image-loader-1.9.5.jar b/src/main/resources/code/android/library-common/libs/universal-image-loader-1.9.5.jar new file mode 100644 index 0000000..520dac3 --- /dev/null +++ b/src/main/resources/code/android/library-common/libs/universal-image-loader-1.9.5.jar Binary files differ diff --git a/src/main/resources/code/android/library-common/lint.xml b/src/main/resources/code/android/library-common/lint.xml new file mode 100644 index 0000000..ee0eead --- /dev/null +++ b/src/main/resources/code/android/library-common/lint.xml @@ -0,0 +1,3 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lint> +</lint> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/proguard-project.txt b/src/main/resources/code/android/library-common/proguard-project.txt new file mode 100644 index 0000000..f2fe155 --- /dev/null +++ b/src/main/resources/code/android/library-common/proguard-project.txt @@ -0,0 +1,20 @@ +# To enable ProGuard in your project, edit project.properties +# to define the proguard.config property as described in that file. +# +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in ${sdk.dir}/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the ProGuard +# include property in project.properties. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} diff --git a/src/main/resources/code/android/library-common/project.properties b/src/main/resources/code/android/library-common/project.properties new file mode 100644 index 0000000..42a4610 --- /dev/null +++ b/src/main/resources/code/android/library-common/project.properties @@ -0,0 +1,17 @@ +# This file is automatically generated by Android Tools. +# Do not modify this file -- YOUR CHANGES WILL BE ERASED! +# +# This file must be checked in Version Control Systems. +# +# To customize properties used by the Ant build system edit +# "ant.properties", and override values to adapt the script to your +# project structure. +# +# To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): +#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt + +# Project target. +target=android-19 +android.library=true +android.library.reference.1=..\\library-NineOldAndroids +android.library.reference.2=../AndroidSupportV4Lib diff --git a/src/main/resources/code/android/library-common/res/anim/bottom_dialog_enter.xml b/src/main/resources/code/android/library-common/res/anim/bottom_dialog_enter.xml new file mode 100644 index 0000000..8c7e15b --- /dev/null +++ b/src/main/resources/code/android/library-common/res/anim/bottom_dialog_enter.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="200" + android:fromYDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/anim/bottom_dialog_exit.xml b/src/main/resources/code/android/library-common/res/anim/bottom_dialog_exit.xml new file mode 100644 index 0000000..7ff6ef3 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/anim/bottom_dialog_exit.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="600" + android:toYDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/anim/sliding_dialog_enter.xml b/src/main/resources/code/android/library-common/res/anim/sliding_dialog_enter.xml new file mode 100644 index 0000000..43c58c1 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/anim/sliding_dialog_enter.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="200" + android:fromXDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/anim/sliding_dialog_exit.xml b/src/main/resources/code/android/library-common/res/anim/sliding_dialog_exit.xml new file mode 100644 index 0000000..eedc38d --- /dev/null +++ b/src/main/resources/code/android/library-common/res/anim/sliding_dialog_exit.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<set xmlns:android="http://schemas.android.com/apk/res/android" > + + <translate + android:duration="600" + android:toXDelta="100%p" /> + +</set> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight.png b/src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight.png new file mode 100644 index 0000000..b930b36 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight.png Binary files differ diff --git a/src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight_blue.png b/src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight_blue.png new file mode 100644 index 0000000..d80d706 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/drawable-hdpi/spotlight_blue.png Binary files differ diff --git a/src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_pause.png b/src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_pause.png new file mode 100644 index 0000000..84ab76f --- /dev/null +++ b/src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_pause.png Binary files differ diff --git a/src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_play.png b/src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_play.png new file mode 100644 index 0000000..82d328a --- /dev/null +++ b/src/main/resources/code/android/library-common/res/drawable-xhdpi/ic_media_play.png Binary files differ diff --git a/src/main/resources/code/android/library-common/res/drawable/color_progressbar.xml b/src/main/resources/code/android/library-common/res/drawable/color_progressbar.xml new file mode 100644 index 0000000..2bf62e8 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/drawable/color_progressbar.xml @@ -0,0 +1,28 @@ +<?xml version="1.0" encoding="UTF-8"?> +<layer-list xmlns:android="http://schemas.android.com/apk/res/android" > + + <!-- 璁剧疆鑳屾櫙鑹诧紙鐧借壊锛� --> + <item android:id="@android:id/background"> + <shape> + <corners android:radius="3dip" /> + <gradient android:startColor="#ffedeff2" + android:centerColor="#ffedeff2" + android:centerY="0.75" + android:endColor="#ffedeff2" + android:angle="270" + /> + </shape> + </item> + + <!-- 璁剧疆杩涘害鏉¢鑹诧紙钃濊壊锛� --> + <item android:id="@android:id/progress"> + <clip> + <shape> + <corners android:radius="3dip" /> + <gradient android:startColor="#FFf7db00" + android:endColor="#FFf7db00" /> + </shape> + </clip> + </item> + +</layer-list> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/layout/dialog_loading.xml b/src/main/resources/code/android/library-common/res/layout/dialog_loading.xml new file mode 100644 index 0000000..2d66b85 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/layout/dialog_loading.xml @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:gravity="center" + android:orientation="vertical"> + + <com.github.ybq.android.spinkit.SpinKitView + android:id="@+id/spin_kit" + style="@style/SpinKitView.Large.Circle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + app:SpinKit_Color="@color/loading_color" /> + + <TextView + android:id="@+id/tv_msg" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="5dp" + android:textColor="@color/loading_color"></TextView> + + +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/layout/emotion_grid.xml b/src/main/resources/code/android/library-common/res/layout/emotion_grid.xml new file mode 100644 index 0000000..26c28d4 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/layout/emotion_grid.xml @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8"?> +<GridView xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/gv_emotion" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@android:color/transparent" + android:cacheColorHint="@android:color/transparent" + android:columnWidth="40dip" + android:gravity="center" + android:horizontalSpacing="0dip" + android:numColumns="7" + android:scrollbars="vertical" + android:verticalSpacing="0dip" /> diff --git a/src/main/resources/code/android/library-common/res/layout/emotion_item.xml b/src/main/resources/code/android/library-common/res/layout/emotion_item.xml new file mode 100644 index 0000000..435138e --- /dev/null +++ b/src/main/resources/code/android/library-common/res/layout/emotion_item.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical" > + + +</LinearLayout> diff --git a/src/main/resources/code/android/library-common/res/layout/fragment_webview_video.xml b/src/main/resources/code/android/library-common/res/layout/fragment_webview_video.xml new file mode 100644 index 0000000..f8eb43f --- /dev/null +++ b/src/main/resources/code/android/library-common/res/layout/fragment_webview_video.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <FrameLayout + android:id="@+id/fullscreen_custom_content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:visibility="gone" /> + + <FrameLayout + android:id="@+id/main_content" + android:layout_width="match_parent" + android:layout_height="match_parent" > + + <WebView + android:id="@+id/webview_player" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:scrollbars="none" /> + </FrameLayout> + +</FrameLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/layout/listview_footer.xml b/src/main/resources/code/android/library-common/res/layout/listview_footer.xml new file mode 100644 index 0000000..4482b05 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/layout/listview_footer.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:padding="5dp"> + + <ProgressBar + style="@android:style/Widget.ProgressBar.Inverse" + android:layout_width="wrap_content" + android:layout_height="wrap_content" /> + + +</LinearLayout> diff --git a/src/main/resources/code/android/library-common/res/layout/media_controller.xml b/src/main/resources/code/android/library-common/res/layout/media_controller.xml new file mode 100644 index 0000000..b5e58b1 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/layout/media_controller.xml @@ -0,0 +1,76 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2007 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:background="#CC000000" + android:orientation="vertical" + android:layoutDirection="ltr"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="center" + android:paddingTop="4dip" + android:orientation="horizontal"> + + <ImageButton android:id="@+id/prev" style="@android:style/MediaButton.Previous" /> + <ImageButton android:id="@+id/rew" style="@android:style/MediaButton.Rew" /> + <ImageButton android:id="@+id/pause" style="@android:style/MediaButton.Play" /> + <ImageButton android:id="@+id/ffwd" style="@android:style/MediaButton.Ffwd" /> + <ImageButton android:id="@+id/next" style="@android:style/MediaButton.Next" /> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal"> + + <TextView android:id="@+id/time_current" + android:textSize="14sp" + android:textStyle="bold" + android:paddingTop="4dip" + android:paddingStart="4dip" + android:layout_gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingEnd="4dip" + android:textColor="?android:attr/textColorSecondary" /> + + <SeekBar + android:id="@+id/mediacontroller_progress" + style="?android:attr/progressBarStyleHorizontal" + android:layout_width="0dip" + android:layout_weight="1" + android:layout_height="32dip" + android:layout_alignParentStart="true" + android:layout_alignParentEnd="true" /> + + <TextView android:id="@+id/time" + android:textSize="14sp" + android:textStyle="bold" + android:paddingTop="4dip" + android:paddingEnd="4dip" + android:layout_gravity="center_horizontal" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:paddingStart="4dip" + android:textColor="?android:attr/textColorSecondary" /> + </LinearLayout> + +</LinearLayout> diff --git a/src/main/resources/code/android/library-common/res/values-v11/styles.xml b/src/main/resources/code/android/library-common/res/values-v11/styles.xml new file mode 100644 index 0000000..4503df4 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/values-v11/styles.xml @@ -0,0 +1,14 @@ +<resources> + + <!-- + Base application theme for API 11+. This theme completely replaces + AppBaseTheme from res/values/styles.xml on API 11+ devices. + --> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> + <!-- API 11 theme customizations can go here. --> + </style> + + <style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style> +</resources> diff --git a/src/main/resources/code/android/library-common/res/values-v14/styles.xml b/src/main/resources/code/android/library-common/res/values-v14/styles.xml new file mode 100644 index 0000000..2dbba70 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/values-v14/styles.xml @@ -0,0 +1,15 @@ +<resources> + + <!-- + Base application theme for API 14+. This theme completely replaces + AppBaseTheme from BOTH res/values/styles.xml and + res/values-v11/styles.xml on API 14+ devices. + --> + <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> + <!-- API 14 theme customizations can go here. --> + </style> + + <style name="SlidingDialogTheme" parent="android:Theme.Holo"> + + </style> +</resources> diff --git a/src/main/resources/code/android/library-common/res/values/attrs.xml b/src/main/resources/code/android/library-common/res/values/attrs.xml new file mode 100644 index 0000000..d76637a --- /dev/null +++ b/src/main/resources/code/android/library-common/res/values/attrs.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <declare-styleable name="DashLine"> + <attr name="dashWidth" format="dimension|reference" /> + <attr name="dashGap" format="dimension|reference" /> + <attr name="lineColor" format="color|reference" /> + <attr name="dashOrientation"> + <enum name="horizontal" value="0" /> + <enum name="vertical" value="1" /> + </attr> + </declare-styleable> + <declare-styleable name="ArcMenu"> + <attr name="fromDegrees" format="float|reference" /> + <attr name="toDegrees" format="float|reference" /> + <attr name="arcRadius" format="dimension|reference" /> + <attr name="duration" format="integer|reference" /> + <attr name="closeOnClick" format="boolean" /> + <attr name="mainImage" format="reference" /> + </declare-styleable> + <declare-styleable name="ShelvesView"> + <attr name="shelfBackground" format="reference" /> + </declare-styleable> + <declare-styleable name="Emotion"> + <attr name="emotionSize" format="dimension|reference" /> + <attr name="emotionHeight" format="dimension|reference" /> + <attr name="emotionWidth" format="dimension|reference" /> + </declare-styleable> + <declare-styleable name="AdaptiveListView"> + <attr name="maxHeight" format="dimension|reference" /> + </declare-styleable> + <declare-styleable name="RatioLayout"> + <attr name="ratio" format="float|reference" /> + </declare-styleable> + <attr name="rightPadding" format="dimension" /> + <declare-styleable name="SlidingMenu"> + <attr name="rightPadding" /> + </declare-styleable> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/values/colors.xml b/src/main/resources/code/android/library-common/res/values/colors.xml new file mode 100644 index 0000000..d65a3ff --- /dev/null +++ b/src/main/resources/code/android/library-common/res/values/colors.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* //device/apps/common/assets/res/any/colors.xml +** +** Copyright 2006, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> +<resources> + <color name="dim_foreground_dark">#bebebe</color> + <color name="loading_color">#FF03DAC5</color> + <color name="transparent">#00000000</color> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/res/values/strings.xml b/src/main/resources/code/android/library-common/res/values/strings.xml new file mode 100644 index 0000000..83364d2 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/values/strings.xml @@ -0,0 +1,5 @@ +<resources> + + <string name="app_name">LcjianLibrary</string> + +</resources> diff --git a/src/main/resources/code/android/library-common/res/values/styles.xml b/src/main/resources/code/android/library-common/res/values/styles.xml new file mode 100644 index 0000000..8f21553 --- /dev/null +++ b/src/main/resources/code/android/library-common/res/values/styles.xml @@ -0,0 +1,48 @@ +<resources> + + <!-- + Base application theme, dependent on API level. This theme is replaced + by AppBaseTheme from res/values-vXX/styles.xml on newer devices. + --> + <style name="AppBaseTheme" parent="android:Theme.Light"> + <!-- + Theme customizations available in newer API levels can go in + res/values-vXX/styles.xml, while customizations related to + backward-compatibility can go here. + --> + </style> + + <!-- Application theme. --> + <style name="AppTheme" parent="AppBaseTheme"> + <!-- All customizations that are NOT specific to a particular API-level can go here. --> + </style> + + <style name="dialogstyle" parent="android:Animation"> + <item name="@android:windowEnterAnimation">@anim/bottom_dialog_enter</item> + <item name="@android:windowExitAnimation">@anim/bottom_dialog_exit</item> + </style> + + <style name="SlidingDialogAnimation" parent="android:Animation"> + <item name="android:windowEnterAnimation">@anim/sliding_dialog_enter</item> + <item name="android:windowExitAnimation">@anim/sliding_dialog_exit</item> + </style> + + <style name="SlidingDialogTheme" parent="android:Theme"> + + </style> + + <style name="Theme.Sliding.Dialog" parent="SlidingDialogTheme"> + <item name="android:windowNoTitle">true</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowAnimationStyle">@style/SlidingDialogAnimation</item> + <item name="android:windowCloseOnTouchOutside">true</item> + </style> + + <style name="Dialog" parent="android:style/Theme.Dialog"> + <item name="android:background">@android:color/transparent</item> + <item name="android:windowBackground">@android:color/transparent</item> + <item name="android:windowNoTitle">true</item> + <item name="android:windowIsFloating">true</item> + </style> + +</resources> diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/DatabaseContext.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/DatabaseContext.java new file mode 100644 index 0000000..85a04f2 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/DatabaseContext.java @@ -0,0 +1,108 @@ +package com.demo.lib.common; + +import java.io.File; +import java.io.IOException; + +import android.content.Context; +import android.content.ContextWrapper; +import android.database.DatabaseErrorHandler; +import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteDatabase.CursorFactory; +import android.util.Log; + +/** + * 鐢ㄤ簬鏀寔瀵瑰瓨鍌ㄥ湪SD鍗′笂鐨勬暟鎹簱鐨勮闂� + **/ +public class DatabaseContext extends ContextWrapper { + + /** + * 鏋勯�犲嚱鏁� + * + * @param base 涓婁笅鏂囩幆澧� + */ + public DatabaseContext(Context base) { + super(base); + } + + /** + * 鑾峰緱鏁版嵁搴撹矾寰勶紝濡傛灉涓嶅瓨鍦紝鍒欏垱寤哄璞″璞� + * + * @param name + * @param mode + * @param factory + */ + @Override + public File getDatabasePath(String name) { + // 鍒ゆ柇鏄惁瀛樺湪sd鍗� + boolean sdExist = android.os.Environment.MEDIA_MOUNTED + .equals(android.os.Environment.getExternalStorageState()); + if (!sdExist) {// 濡傛灉涓嶅瓨鍦�, + Log.e("SD鍗$鐞嗭細", "SD鍗′笉瀛樺湪锛岃鍔犺浇SD鍗�"); + return null; + } else {// 濡傛灉瀛樺湪 + // 鑾峰彇sd鍗¤矾寰� + String dbDir = android.os.Environment.getExternalStorageDirectory() + .getAbsolutePath(); + dbDir += "/database";// 鏁版嵁搴撴墍鍦ㄧ洰褰� + String dbPath = dbDir + "/" + name;// 鏁版嵁搴撹矾寰� + // 鍒ゆ柇鐩綍鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤鸿鐩綍 + File dirFile = new File(dbDir); + if (!dirFile.exists()) + dirFile.mkdirs(); + + // 鏁版嵁搴撴枃浠舵槸鍚﹀垱寤烘垚鍔� + boolean isFileCreateSuccess = false; + // 鍒ゆ柇鏂囦欢鏄惁瀛樺湪锛屼笉瀛樺湪鍒欏垱寤鸿鏂囦欢 + File dbFile = new File(dbPath); + if (!dbFile.exists()) { + try { + isFileCreateSuccess = dbFile.createNewFile();// 鍒涘缓鏂囦欢 + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } else + isFileCreateSuccess = true; + + // 杩斿洖鏁版嵁搴撴枃浠跺璞� + if (isFileCreateSuccess) + return dbFile; + else + return null; + } + } + + /** + * 閲嶈浇杩欎釜鏂规硶锛屾槸鐢ㄦ潵鎵撳紑SD鍗′笂鐨勬暟鎹簱鐨勶紝android 2.3鍙婁互涓嬩細璋冪敤杩欎釜鏂规硶銆� + * + * @param name + * @param mode + * @param factory + */ + @Override + public SQLiteDatabase openOrCreateDatabase(String name, int mode, + SQLiteDatabase.CursorFactory factory) { + SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase( + getDatabasePath(name), null); + return result; + } + + /** + * Android 4.0浼氳皟鐢ㄦ鏂规硶鑾峰彇鏁版嵁搴撱�� + * + * @see android.content.ContextWrapper#openOrCreateDatabase(java.lang.String, + * int, android.database.sqlite.SQLiteDatabase.CursorFactory, + * android.database.DatabaseErrorHandler) + * @param name + * @param mode + * @param factory + * @param errorHandler + */ + @Override + public SQLiteDatabase openOrCreateDatabase(String name, int mode, + CursorFactory factory, DatabaseErrorHandler errorHandler) { + SQLiteDatabase result = SQLiteDatabase.openOrCreateDatabase( + getDatabasePath(name), null); + return result; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/DeviceUuidFactory.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/DeviceUuidFactory.java new file mode 100644 index 0000000..c2bdf3d --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/DeviceUuidFactory.java @@ -0,0 +1,83 @@ +package com.demo.lib.common; + +import java.nio.charset.StandardCharsets; +import java.util.UUID; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.pm.PackageManager; +import android.provider.Settings.Secure; +import androidx.core.content.ContextCompat; +import android.telephony.TelephonyManager; + +public class DeviceUuidFactory { + + + protected static final String PREFS_FILE = "device_id.xml"; + + protected static final String PREFS_DEVICE_ID = "device_id"; + + protected volatile static UUID uuid; + + public DeviceUuidFactory(Context context) { + if (uuid == null) { + synchronized (DeviceUuidFactory.class) { + if (uuid == null) { + final SharedPreferences prefs = context.getSharedPreferences(PREFS_FILE, Context.MODE_PRIVATE); + final String id = prefs.getString(PREFS_DEVICE_ID, null); + if (id != null) { + // Use the ids previously computed and stored in the prefs file + uuid = UUID.fromString(id); + } else { + final String androidId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); + if (androidId == null) + return; + // Use the Android ID unless it's broken, in which case fallback on deviceId, + // unless it's not available, then fallback on a random number which we store + // to a prefs file + if (!"9774d56d682e549c".equals(androidId)) { + uuid = UUID.nameUUIDFromBytes(androidId.getBytes(StandardCharsets.UTF_8)); + } else { + TelephonyManager tm = (TelephonyManager) context + .getSystemService(Context.TELEPHONY_SERVICE); + String deviceId=""; + if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED + || ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { + deviceId = tm.getDeviceId();// 鑾峰彇deviceId + } + uuid = deviceId != null ? UUID.nameUUIDFromBytes(deviceId.getBytes(StandardCharsets.UTF_8)) : UUID.randomUUID(); + } + // Write the value out to the prefs file + prefs.edit().putString(PREFS_DEVICE_ID, uuid.toString()).commit(); + } + } + } + } + } + + /** + * Returns a unique UUID for the current android device. As with all UUIDs, this unique ID is "very highly likely" + * to be unique across all Android devices. Much more so than ANDROID_ID is. + * <p> + * The UUID is generated by using ANDROID_ID as the base key if appropriate, falling back on + * TelephonyManager.getDeviceID() if ANDROID_ID is known to be incorrect, and finally falling back + * on a random UUID that's persisted to SharedPreferences if getDeviceID() does not return a + * usable value. + * <p> + * In some rare circumstances, this ID may change. In particular, if the device is factory reset a new device ID + * may be generated. In addition, if a user upgrades their phone from certain buggy implementations of Android 2.2 + * to a newer, non-buggy version of Android, the device ID may change. Or, if a user uninstalls your app on + * a device that has neither a proper Android ID nor a Device ID, this ID may change on reinstallation. + * <p> + * Note that if the code falls back on using TelephonyManager.getDeviceId(), the resulting ID will NOT + * change after a factory reset. Something to be aware of. + * <p> + * Works around a bug in Android 2.2 for many devices when using ANDROID_ID directly. + * + * @return a UUID that may be used to uniquely identify your device for most purposes. + * @see http://code.google.com/p/android/issues/detail?id=10603 + */ + public UUID getDeviceUuid() { + return uuid; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/Installation.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/Installation.java new file mode 100644 index 0000000..d73dbcb --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/Installation.java @@ -0,0 +1,43 @@ +package com.demo.lib.common; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.UUID; + +import android.content.Context; + +public class Installation { + private static String sID = null; + private static final String INSTALLATION = "INSTALLATION"; + + public synchronized static String id(Context context) { + if (sID == null) { + File installation = new File(context.getFilesDir(), INSTALLATION); + try { + if (!installation.exists()) + writeInstallationFile(installation); + sID = readInstallationFile(installation); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + return sID; + } + + private static String readInstallationFile(File installation) throws IOException { + RandomAccessFile f = new RandomAccessFile(installation, "r"); + byte[] bytes = new byte[(int) f.length()]; + f.readFully(bytes); + f.close(); + return new String(bytes); + } + + private static void writeInstallationFile(File installation) throws IOException { + FileOutputStream out = new FileOutputStream(installation); + String id = UUID.randomUUID().toString(); + out.write(id.getBytes()); + out.close(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/PhoneCallReceiver.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/PhoneCallReceiver.java new file mode 100644 index 0000000..3e727d1 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/PhoneCallReceiver.java @@ -0,0 +1,72 @@ +package com.demo.lib.common; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.graphics.PixelFormat; +import android.telephony.TelephonyManager; +import android.util.Log; +import android.view.WindowManager; +import android.widget.TextView; + +public class PhoneCallReceiver extends BroadcastReceiver { + + private static final String TAG = "PhoneCallReceiver"; + + private static boolean incomingFlag = false; + + private static String incomingNumber = null; + + private static WindowManager wm; + + private static TextView tv; + + @Override + public void onReceive(Context context, Intent intent) { + // 濡傛灉鏄嫧鎵撶數璇� + if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { + incomingFlag = false; + String phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); + Log.i(TAG, "call OUT:" + phoneNumber); + } else { + // 濡傛灉鏄潵鐢� + TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + + switch (tm.getCallState()) { + case TelephonyManager.CALL_STATE_RINGING: { + incomingFlag = true;// 鏍囪瘑褰撳墠鏄潵鐢� + incomingNumber = intent.getStringExtra("incoming_number"); + + wm = (WindowManager) context.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); + WindowManager.LayoutParams params = new WindowManager.LayoutParams(); + params.type = WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY; + params.flags = WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE; + params.width = WindowManager.LayoutParams.WRAP_CONTENT; + params.height = WindowManager.LayoutParams.WRAP_CONTENT; + params.format = PixelFormat.RGBA_8888; + tv = new TextView(context); + tv.setText("杩欐槸鎮诞绐楀彛锛屾潵鐢靛彿鐮侊細" + incomingNumber); + wm.addView(tv, params); + + Log.i(TAG, "RINGING :" + incomingNumber); + break; + } + case TelephonyManager.CALL_STATE_OFFHOOK: { + if (incomingFlag) { + Log.i(TAG, "incoming ACCEPT :" + incomingNumber); + } + break; + } + case TelephonyManager.CALL_STATE_IDLE: { + if (incomingFlag) { + if (wm != null) { + wm.removeView(tv); + } + } + Log.i(TAG, "incoming IDLE"); + break; + } + } + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/RetainViewFragment.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/RetainViewFragment.java new file mode 100644 index 0000000..77c6aa0 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/RetainViewFragment.java @@ -0,0 +1,42 @@ +package com.demo.lib.common; + +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +public abstract class RetainViewFragment extends Fragment { + + private View mContentView; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if (mContentView == null) { + mContentView = inflater.inflate(getContentResource(), container, false); + onCreateView(mContentView, savedInstanceState); + } else { + try { + ((ViewGroup) mContentView.getParent()).removeView(mContentView); + } catch (Exception e) { + container.removeView(mContentView); + } + } + return mContentView; + } + + public abstract int getContentResource(); + + public abstract void onCreateView(View contentView, Bundle savedInstanceState); + + @Override + public void onResume() { + super.onResume(); + } + + @Override + public void onPause() { + super.onPause(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/activity/BaseActivity.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/activity/BaseActivity.java new file mode 100644 index 0000000..c9030b0 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/activity/BaseActivity.java @@ -0,0 +1,75 @@ +package com.demo.lib.common.activity; + +import android.app.Dialog; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.graphics.Color; +import android.os.Bundle; + + +import com.demo.lib.common.util.ui.LoadingDialogUtil; +import com.jaeger.library.StatusBarUtil; + +import androidx.fragment.app.FragmentActivity; + +public class BaseActivity extends FragmentActivity { + + protected Dialog loadingDialog; + + //鏄剧ず鍔犺浇 + protected void showLoading() { + if (loadingDialog != null && !loadingDialog.isShowing()) { + loadingDialog.show(); + } + } + + //闅愯棌鍔犺浇 + protected void hideLoading() { + if (loadingDialog != null && loadingDialog.isShowing()) { + loadingDialog.dismiss(); + } + } + + + @Override + protected void onCreate(Bundle arg0) { + super.onCreate(arg0); + loadingDialog = LoadingDialogUtil.getLoadingDialog(this, ""); + } + + @Override + public void setContentView(int layoutResID) { + super.setContentView(layoutResID); + //鐘舵�佹爮閫忔槑 + StatusBarUtil.setColorNoTranslucent(this, Color.TRANSPARENT); + //鐘舵�佹爮瀛椾綋娣辫壊 + StatusBarUtil.setLightMode(this); + } + + @Override + public void onConfigurationChanged(Configuration newConfig) { + if (newConfig.fontScale != 1)//闈為粯璁ゅ�� + getResources(); + super.onConfigurationChanged(newConfig); + } + + @Override + public Resources getResources() { + Resources res = super.getResources(); + if (res.getConfiguration().fontScale != 1.0) {//闈為粯璁ゅ�� + Configuration newConfig = new Configuration(); + newConfig.setToDefaults();//璁剧疆榛樿 + newConfig.fontScale = 1.0f; + res.updateConfiguration(newConfig, res.getDisplayMetrics()); + } + return res; + } + + public void onResume() { + super.onResume(); + } + + public void onPause() { + super.onPause(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/animation/Rotate3dAnimation.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/animation/Rotate3dAnimation.java new file mode 100644 index 0000000..b619c33 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/animation/Rotate3dAnimation.java @@ -0,0 +1,92 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.animation; + +import android.view.animation.Animation; +import android.view.animation.Transformation; +import android.graphics.Camera; +import android.graphics.Matrix; + +/** + * An animation that rotates the view on the Y axis between two specified angles. + * This animation also adds a translation on the Z axis (depth) to improve the effect. + */ +public class Rotate3dAnimation extends Animation { + private final float mFromDegrees; + private final float mToDegrees; + private final float mCenterX; + private final float mCenterY; + private final float mDepthZ; + private final boolean mReverse; + private Camera mCamera; + + /** + * Creates a new 3D rotation on the Y axis. The rotation is defined by its + * start angle and its end angle. Both angles are in degrees. The rotation + * is performed around a center point on the 2D space, definied by a pair + * of X and Y coordinates, called centerX and centerY. When the animation + * starts, a translation on the Z axis (depth) is performed. The length + * of the translation can be specified, as well as whether the translation + * should be reversed in time. + * + * @param fromDegrees the start angle of the 3D rotation + * @param toDegrees the end angle of the 3D rotation + * @param centerX the X center of the 3D rotation + * @param centerY the Y center of the 3D rotation + * @param reverse true if the translation should be reversed, false otherwise + */ + public Rotate3dAnimation(float fromDegrees, float toDegrees, + float centerX, float centerY, float depthZ, boolean reverse) { + mFromDegrees = fromDegrees; + mToDegrees = toDegrees; + mCenterX = centerX; + mCenterY = centerY; + mDepthZ = depthZ; + mReverse = reverse; + } + + @Override + public void initialize(int width, int height, int parentWidth, int parentHeight) { + super.initialize(width, height, parentWidth, parentHeight); + mCamera = new Camera(); + } + + @Override + protected void applyTransformation(float interpolatedTime, Transformation t) { + final float fromDegrees = mFromDegrees; + float degrees = fromDegrees + ((mToDegrees - fromDegrees) * interpolatedTime); + + final float centerX = mCenterX; + final float centerY = mCenterY; + final Camera camera = mCamera; + + final Matrix matrix = t.getMatrix(); + + camera.save(); + if (mReverse) { + camera.translate(0.0f, 0.0f, mDepthZ * interpolatedTime); + } else { + camera.translate(0.0f, 0.0f, mDepthZ * (1.0f - interpolatedTime)); + } + camera.rotateY(degrees); + camera.getMatrix(matrix); + camera.restore(); + + matrix.preTranslate(-centerX, -centerY); + matrix.postTranslate(centerX, centerY); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/content/ConnectivityChangeHelper.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/content/ConnectivityChangeHelper.java new file mode 100644 index 0000000..b91191a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/content/ConnectivityChangeHelper.java @@ -0,0 +1,66 @@ +package com.demo.lib.common.content; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +public class ConnectivityChangeHelper { + + private Context mContext; + + private OnConnectivityChangeListener mChangeListener; + + private BroadcastReceiver mReceiver = new BroadcastReceiver() { + + @Override + public void onReceive(Context context, Intent intent) { + String action = intent.getAction(); + if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) { + ConnectivityManager cm = (ConnectivityManager) context + .getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo info = cm.getActiveNetworkInfo(); + if (info != null && info.isAvailable()) { + if (info.getType() == ConnectivityManager.TYPE_MOBILE) { + if (mChangeListener != null) { + mChangeListener.onMobileAvailable(); + } + } else if (info.getType() == ConnectivityManager.TYPE_WIFI) { + if (mChangeListener != null) { + mChangeListener.onWiFiAvailable(); + } + } + } else { + if (mChangeListener != null) { + mChangeListener.onNetworkUnAvailable(); + } + } + } + } + }; + + public ConnectivityChangeHelper(Context context, + OnConnectivityChangeListener changeListener) { + super(); + this.mContext = context; + this.mChangeListener = changeListener; + } + + public void registerReceiver() { + IntentFilter filter = new IntentFilter(); + filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); + mContext.registerReceiver(mReceiver, filter); + } + + public void unregisterReceiver() { + mContext.unregisterReceiver(mReceiver); + } + + public interface OnConnectivityChangeListener { + void onNetworkUnAvailable(); + void onWiFiAvailable(); + void onMobileAvailable(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/content/CursorLoader.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/content/CursorLoader.java new file mode 100644 index 0000000..98e956d --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/content/CursorLoader.java @@ -0,0 +1,174 @@ +package com.demo.lib.common.content; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.util.Arrays; + +import android.content.Context; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.net.Uri; +import androidx.loader.content.AsyncTaskLoader; + +public class CursorLoader extends AsyncTaskLoader<Cursor> { + final ForceLoadContentObserver mObserver; + + SQLiteDatabase mSQLiteDatabase; + + Uri mUri; + String mSql; + String[] mSelectionArgs; + + Cursor mCursor; + + /* Runs on a worker thread */ + @Override + public Cursor loadInBackground() { + Cursor cursor = mSQLiteDatabase.rawQuery(mSql, mSelectionArgs); + if (cursor != null) { + // Ensure the cursor window is filled + cursor.getCount(); + cursor.setNotificationUri(getContext().getContentResolver(), mUri); + cursor.registerContentObserver(mObserver); + } + return cursor; + } + + /* Runs on the UI thread */ + @Override + public void deliverResult(Cursor cursor) { + if (isReset()) { + // An async query came in while the loader is stopped + if (cursor != null) { + cursor.close(); + } + return; + } + Cursor oldCursor = mCursor; + mCursor = cursor; + + if (isStarted()) { + super.deliverResult(cursor); + } + + if (oldCursor != null && oldCursor != cursor && !oldCursor.isClosed()) { + oldCursor.close(); + } + } + + /** + * Creates an empty unspecified CursorLoader. You must override + * {@link #loadInBackground()} to specify the query to perform. + */ + public CursorLoader(Context context) { + super(context); + mObserver = new ForceLoadContentObserver(); + } + + /** + * Creates an empty unspecified CursorLoader. You must follow this with + * calls to {@link #setUri(Uri)}, {@link #setSelectionArgs(String[])}, etc + * to specify the query to perform. + */ + public CursorLoader(Context context, SQLiteDatabase sqliteDatabase) { + super(context); + mObserver = new ForceLoadContentObserver(); + mSQLiteDatabase = sqliteDatabase; + } + + /** + * Creates a fully-specified CursorLoader. See + * {@link android.database.sqlite.SQLiteDatabase#rawQuery(String, String[])} + * for documentation on the meaning of the + * parameters. These will be passed as-is to that call. + */ + public CursorLoader(Context context, SQLiteDatabase sqliteDatabase, + Uri uri, String sql, String[] selectionArgs) { + super(context); + mObserver = new ForceLoadContentObserver(); + mSQLiteDatabase = sqliteDatabase; + mUri = uri; + mSql = sql; + mSelectionArgs = selectionArgs; + } + + /** + * Starts an asynchronous load of the contacts list data. When the result is ready the callbacks + * will be called on the UI thread. If a previous load has been completed and is still valid + * the result may be passed to the callbacks immediately. + * + * Must be called from the UI thread + */ + @Override + protected void onStartLoading() { + if (mCursor != null) { + deliverResult(mCursor); + } + if (takeContentChanged() || mCursor == null) { + forceLoad(); + } + } + + /** + * Must be called from the UI thread + */ + @Override + protected void onStopLoading() { + // Attempt to cancel the current load task if possible. + cancelLoad(); + } + + @Override + public void onCanceled(Cursor cursor) { + if (cursor != null && !cursor.isClosed()) { + cursor.close(); + } + } + + @Override + protected void onReset() { + super.onReset(); + + // Ensure the loader is stopped + onStopLoading(); + + if (mCursor != null && !mCursor.isClosed()) { + mCursor.close(); + } + mCursor = null; + } + + public Uri getUri() { + return mUri; + } + + public void setUri(Uri uri) { + mUri = uri; + } + + public String[] getSelectionArgs() { + return mSelectionArgs; + } + + public void setSelectionArgs(String[] selectionArgs) { + mSelectionArgs = selectionArgs; + } + + public String getSql() { + return mSql; + } + + public void setSql(String sql) { + this.mSql = sql; + } + + @Override + public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) { + super.dump(prefix, fd, writer, args); + writer.print(prefix); writer.print("mUri="); writer.println(mUri); + writer.print(prefix); writer.print("mSql="); writer.println(mSql); + writer.print(prefix); writer.print("mSelectionArgs="); + writer.println(Arrays.toString(mSelectionArgs)); + writer.print(prefix); writer.print("mCursor="); writer.println(mCursor); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/BottomDialog.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/BottomDialog.java new file mode 100644 index 0000000..e966da1 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/BottomDialog.java @@ -0,0 +1,32 @@ +package com.demo.lib.common.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.graphics.drawable.ColorDrawable; +import android.os.Bundle; +import android.view.Gravity; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; + +import com.lcjian.lcjianlibrary.R; + +public class BottomDialog extends Dialog { + + public BottomDialog(Context context) { + super(context, android.R.style.Theme_NoTitleBar_Fullscreen); + } + + @Override + public void onCreate(Bundle saveInstance) { + WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); + layoutParams.height = LayoutParams.WRAP_CONTENT; + layoutParams.width = LayoutParams.MATCH_PARENT; + layoutParams.dimAmount = 0.5f; + onWindowAttributesChanged(layoutParams); + getWindow().setBackgroundDrawable(new ColorDrawable()); + getWindow().setWindowAnimations(R.style.dialogstyle); + getWindow().setGravity(Gravity.BOTTOM); + getWindow().setAttributes(layoutParams); + getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/DialogUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/DialogUtil.java new file mode 100644 index 0000000..ac46a30 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/DialogUtil.java @@ -0,0 +1,28 @@ +package com.demo.lib.common.dialog; + +import android.app.Dialog; + +public class DialogUtil { + public static void show(Dialog dialog) { + try { + if (dialog != null && !dialog.isShowing()) { + dialog.show(); + } + } catch (Exception e) { + } + } + + public static void dismiss(Dialog dialog) { + try { + if (dialog != null && dialog.isShowing()) { + dialog.dismiss(); + } + } catch (Exception e) { + + } + } + + +} + + diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/SlidingDialog.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/SlidingDialog.java new file mode 100644 index 0000000..506604a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/dialog/SlidingDialog.java @@ -0,0 +1,27 @@ +package com.demo.lib.common.dialog; + +import android.app.Dialog; +import android.content.Context; +import android.os.Bundle; +import android.view.Gravity; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; + +import com.lcjian.lcjianlibrary.R; + +public class SlidingDialog extends Dialog { + + public SlidingDialog(Context context) { + super(context, R.style.Theme_Sliding_Dialog); + } + + @Override + public void onCreate(Bundle saveInstance) { + WindowManager.LayoutParams layoutParams = getWindow().getAttributes(); + layoutParams.height = LayoutParams.MATCH_PARENT; + layoutParams.width = LayoutParams.WRAP_CONTENT; + onWindowAttributesChanged(layoutParams); + getWindow().setGravity(Gravity.RIGHT); + getWindow().setAttributes(layoutParams); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CircleDrawable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CircleDrawable.java new file mode 100644 index 0000000..129c899 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CircleDrawable.java @@ -0,0 +1,93 @@ +package com.demo.lib.common.drawable; + +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Matrix; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.Rect; +import android.graphics.Shader; +import android.graphics.drawable.Drawable; + +/** + * Created With Android Studio User @47 Date 2014-07-28 Time 0:32 + */ +public class CircleDrawable extends Drawable { + public static final String TAG = "CircleDrawable"; + + protected final Paint paint; + + protected final int margin; + protected final BitmapShader bitmapShader; + protected float radius; + protected Bitmap oBitmap;// 鍘熷浘 + + public CircleDrawable(Bitmap bitmap) { + this(bitmap, 0); + } + + public CircleDrawable(Bitmap bitmap, int margin) { + this.margin = margin; + this.oBitmap = bitmap; + bitmapShader = new BitmapShader(bitmap, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP); + paint = new Paint(); + paint.setAntiAlias(true); + paint.setShader(bitmapShader); + } + + @Override + protected void onBoundsChange(Rect bounds) { + super.onBoundsChange(bounds); + computeBitmapShaderSize(); + computeRadius(); + + } + + @Override + public void draw(Canvas canvas) { + Rect bounds = getBounds();// 鐢讳竴涓渾鍦� + canvas.drawCircle(bounds.width() / 2F, bounds.height() / 2F, radius, paint); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void setAlpha(int alpha) { + paint.setAlpha(alpha); + } + + @Override + public void setColorFilter(ColorFilter cf) { + paint.setColorFilter(cf); + } + + /** + * 璁$畻Bitmap shader 澶у皬 + */ + public void computeBitmapShaderSize() { + Rect bounds = getBounds(); + if (bounds == null) + return; + // 閫夋嫨缂╂斁姣旇緝澶氱殑缂╂斁锛岃繖鏍峰浘鐗囧氨涓嶄細鏈夊浘鐗囨媺浼稿け琛� + Matrix matrix = new Matrix(); + float scaleX = bounds.width() / (float) oBitmap.getWidth(); + float scaleY = bounds.height() / (float) oBitmap.getHeight(); + float scale = scaleX > scaleY ? scaleX : scaleY; + matrix.postScale(scale, scale); + bitmapShader.setLocalMatrix(matrix); + } + + /** + * 璁$畻鍗婂緞鐨勫ぇ灏� + */ + public void computeRadius() { + Rect bounds = getBounds(); + radius = bounds.width() < bounds.height() ? bounds.width() / 2F + - margin : bounds.height() / 2F - margin; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CrossFadeDrawable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CrossFadeDrawable.java new file mode 100644 index 0000000..8b91cdf --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/CrossFadeDrawable.java @@ -0,0 +1,284 @@ +/* + * Copyright (C) 2008 The Android Open Source Project, Romain Guy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.drawable; + +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.PixelFormat; +import android.graphics.Bitmap; +import android.graphics.Paint; +import android.graphics.drawable.Drawable; +import android.os.SystemClock; +import android.os.Handler; + +public class CrossFadeDrawable extends Drawable { + private static final int TRANSITION_STARTING = 0; + private static final int TRANSITION_RUNNING = 1; + private static final int TRANSITION_NONE = 2; + + private int mTransitionState = TRANSITION_NONE; + + private boolean mCrossFade; + private boolean mReverse; + private long mStartTimeMillis; + private int mFrom; + private int mTo; + private int mDuration; + private int mOriginalDuration; + private int mAlpha; + + private Bitmap mStart; + private Bitmap mEnd; + + private final Paint mStartPaint = new Paint(Paint.FILTER_BITMAP_FLAG); + private final Paint mEndPaint = new Paint(Paint.FILTER_BITMAP_FLAG); + + private float mStartX; + private float mStartY; + private float mEndX; + private float mEndY; + + private final Handler mHandler; + private final Runnable mInvalidater; + + public CrossFadeDrawable(Bitmap start, Bitmap end) { + mStart = start; + mEnd = end; + mHandler = new Handler(); + mInvalidater = new Runnable() { + public void run() { + invalidateSelf(); + } + }; + } + + /** + * Begin the second layer on top of the first layer. + * + * @param durationMillis The length of the transition in milliseconds + */ + public void startTransition(int durationMillis) { + mFrom = 0; + mTo = 255; + mAlpha = 0; + mOriginalDuration = mDuration = durationMillis; + mReverse = false; + mTransitionState = mStart != mEnd ? TRANSITION_STARTING : TRANSITION_NONE; + invalidateSelf(); + } + + /** + * Show only the first layer. + */ + public void resetTransition() { + mAlpha = 0; + mTransitionState = TRANSITION_NONE; + invalidateSelf(); + } + + /** + * Reverses the transition, picking up where the transition currently is. + * If the transition is not currently running, this will start the transition + * with the specified duration. If the transition is already running, the last + * known duration will be used. + * + * @param duration The duration to use if no transition is running. + */ + public void reverseTransition(int duration) { + final long time = SystemClock.uptimeMillis(); + + if (time - mStartTimeMillis > mOriginalDuration) { + if (mAlpha == 0) { + mFrom = 0; + mTo = 255; + mAlpha = 0; + mReverse = false; + } else { + mFrom = 255; + mTo = 0; + mAlpha = 255; + mReverse = true; + } + mDuration = mOriginalDuration = duration; + mTransitionState = TRANSITION_STARTING; + mHandler.post(mInvalidater); + return; + } + + mReverse = !mReverse; + mFrom = mAlpha; + mTo = mReverse ? 0 : 255; + mDuration = (int) (mReverse ? time - mStartTimeMillis : + mOriginalDuration - (time - mStartTimeMillis)); + mTransitionState = TRANSITION_STARTING; + } + + @Override + public void draw(Canvas canvas) { + boolean done = true; + + switch (mTransitionState) { + case TRANSITION_STARTING: + mStartTimeMillis = SystemClock.uptimeMillis(); + done = false; + mTransitionState = TRANSITION_RUNNING; + break; + case TRANSITION_RUNNING: + if (mStartTimeMillis >= 0) { + float normalized = (float) (SystemClock.uptimeMillis() - mStartTimeMillis) / + mDuration; + + done = normalized >= 1.0f; + mAlpha = (int) (mFrom + (mTo - mFrom) * Math.min(normalized, 1.0f)); + + if (done) { + mTransitionState = TRANSITION_NONE; + mHandler.post(mInvalidater); + } + } + break; + } + + final int alpha = mAlpha; + final boolean crossFade = mCrossFade; + + Bitmap bitmap = mStart; + Paint paint = mStartPaint; + + if (!crossFade || 255 - alpha > 0) { + if (crossFade) { + paint.setAlpha(255 - alpha); + } + canvas.drawBitmap(bitmap, mStartX, mStartY, paint); + if (crossFade) { + paint.setAlpha(0xFF); + } + } + + if (alpha > 0) { + bitmap = mEnd; + paint = mEndPaint; + paint.setAlpha(alpha); + canvas.drawBitmap(bitmap, mEndX, mEndY, paint); + paint.setAlpha(0xFF); + } + + if (!done) { + mHandler.post(mInvalidater); + } + } + + Bitmap getStart() { + return mStart; + } + + void setStart(Bitmap start) { + mStart = start; + invalidateSelf(); + } + + Bitmap getEnd() { + return mEnd; + } + + public void setEnd(Bitmap end) { + mEnd = end; + invalidateSelf(); + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + super.setBounds(left, top, right, bottom); + + final int width = right - left; + final int height = bottom - top; + + mStartX = (width - mStart.getWidth()) / 2.0f; + mStartY = height - mStart.getHeight(); + + mEndX = (width - mEnd.getWidth()) / 2.0f; + mEndY = height - mEnd.getHeight(); + } + + @Override + public int getIntrinsicWidth() { + return Math.max(mStart.getWidth(), mEnd.getWidth()); + } + + @Override + public int getIntrinsicHeight() { + return Math.max(mStart.getHeight(), mEnd.getHeight()); + } + + @Override + public int getMinimumWidth() { + return Math.max(mStart.getWidth(), mEnd.getWidth()); + } + + @Override + public int getMinimumHeight() { + return Math.max(mStart.getHeight(), mEnd.getHeight()); + } + + @Override + public void setDither(boolean dither) { + mStartPaint.setDither(true); + mEndPaint.setDither(true); + } + + @Override + public void setFilterBitmap(boolean filter) { + mStartPaint.setFilterBitmap(true); + mEndPaint.setFilterBitmap(true); + } + + /** + * Ignored. + */ + public void setAlpha(int alpha) { + } + + public void setColorFilter(ColorFilter cf) { + mStartPaint.setColorFilter(cf); + mEndPaint.setColorFilter(cf); + } + + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + /** + * Enables or disables the cross fade of the drawables. When cross fade + * is disabled, the first drawable is always drawn opaque. With cross + * fade enabled, the first drawable is drawn with the opposite alpha of + * the second drawable. + * + * @param enabled True to enable cross fading, false otherwise. + */ + public void setCrossFadeEnabled(boolean enabled) { + mCrossFade = enabled; + } + + /** + * Indicates whether the cross fade is enabled for this transition. + * + * @return True if cross fading is enabled, false otherwise. + */ + boolean isCrossFadeEnabled() { + return mCrossFade; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/FastBitmapDrawable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/FastBitmapDrawable.java new file mode 100644 index 0000000..98822b1 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/FastBitmapDrawable.java @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2008 Romain Guy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.drawable; + +import android.graphics.drawable.Drawable; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.PixelFormat; +import android.graphics.ColorFilter; + +public class FastBitmapDrawable extends Drawable { + private final Bitmap mBitmap; + + public FastBitmapDrawable(Bitmap b) { + mBitmap = b; + } + + @Override + public void draw(Canvas canvas) { + canvas.drawBitmap(mBitmap, 0.0f, 0.0f, null); + } + + @Override + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public void setAlpha(int alpha) { + } + + @Override + public void setColorFilter(ColorFilter cf) { + } + + @Override + public int getIntrinsicWidth() { + return mBitmap.getWidth(); + } + + @Override + public int getIntrinsicHeight() { + return mBitmap.getHeight(); + } + + @Override + public int getMinimumWidth() { + return mBitmap.getWidth(); + } + + @Override + public int getMinimumHeight() { + return mBitmap.getHeight(); + } + + public Bitmap getBitmap() { + return mBitmap; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/LayerDrawable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/LayerDrawable.java new file mode 100644 index 0000000..7c5aa7b --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/LayerDrawable.java @@ -0,0 +1,434 @@ +/* + * Copyright (C) 2008 The Android Open Source Project, Romain Guy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.drawable; + +import android.graphics.*; +import android.graphics.drawable.Drawable; + +class LayerDrawable extends Drawable implements Drawable.Callback { + LayerState mLayerState; + + private int[] mPaddingL; + private int[] mPaddingT; + private int[] mPaddingR; + private int[] mPaddingB; + + private final Rect mTmpRect = new Rect(); + private Drawable mParent; + private boolean mBlockSetBounds; + + LayerDrawable(Drawable... layers) { + this(null, layers); + } + + LayerDrawable(LayerState state, Drawable... layers) { + this(state); + int length = layers.length; + Rec[] r = new Rec[length]; + + final LayerState layerState = mLayerState; + for (int i = 0; i < length; i++) { + r[i] = new Rec(); + r[i].mDrawable = layers[i]; + layers[i].setCallback(this); + layerState.mChildrenChangingConfigurations |= layers[i].getChangingConfigurations(); + } + layerState.mNum = length; + layerState.mArray = r; + + ensurePadding(); + } + + LayerDrawable(LayerState state) { + LayerState as = createConstantState(state); + mLayerState = as; + if (as.mNum > 0) { + ensurePadding(); + } + } + + LayerState createConstantState(LayerState state) { + return new LayerState(state, this); + } + + public void invalidateDrawable(Drawable who) { + invalidateSelf(); + } + + public void scheduleDrawable(Drawable who, Runnable what, long when) { + scheduleSelf(what, when); + } + + public void unscheduleDrawable(Drawable who, Runnable what) { + unscheduleSelf(what); + } + + @Override + public void draw(Canvas canvas) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.draw(canvas); + } + } + + @Override + public int getChangingConfigurations() { + return super.getChangingConfigurations() + | mLayerState.mChangingConfigurations + | mLayerState.mChildrenChangingConfigurations; + } + + @Override + public boolean getPadding(Rect padding) { + padding.left = 0; + padding.top = 0; + padding.right = 0; + padding.bottom = 0; + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + reapplyPadding(i, array[i]); + padding.left = Math.max(padding.left, mPaddingL[i]); + padding.top = Math.max(padding.top, mPaddingT[i]); + padding.right = Math.max(padding.right, mPaddingR[i]); + padding.bottom = Math.max(padding.bottom, mPaddingB[i]); + } + return true; + } + + @Override + public boolean setVisible(boolean visible, boolean restart) { + boolean changed = super.setVisible(visible, restart); + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.setVisible(visible, restart); + } + return changed; + } + + @Override + public void setDither(boolean dither) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.setDither(dither); + } + } + + @Override + public void setAlpha(int alpha) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.setAlpha(alpha); + } + } + + @Override + public void setColorFilter(ColorFilter cf) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + for (int i = 0; i < N; i++) { + array[i].mDrawable.setColorFilter(cf); + } + } + + @Override + public int getOpacity() { + return mLayerState.getOpacity(); + } + + @Override + public boolean isStateful() { + return mLayerState.isStateful(); + } + + @Override + protected boolean onStateChange(int[] state) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + boolean paddingChanged = false; + boolean changed = false; + for (int i = 0; i < N; i++) { + final Rec r = array[i]; + if (r.mDrawable.setState(state)) { + changed = true; + } + if (reapplyPadding(i, r)) { + paddingChanged = true; + } + } + if (paddingChanged) { + onBoundsChange(getBounds()); + } + return changed; + } + + @Override + protected boolean onLevelChange(int level) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + boolean paddingChanged = false; + boolean changed = false; + for (int i = 0; i < N; i++) { + final Rec r = array[i]; + if (r.mDrawable.setLevel(level)) { + changed = true; + } + if (reapplyPadding(i, r)) { + paddingChanged = true; + } + } + if (paddingChanged) { + onBoundsChange(getBounds()); + } + return changed; + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + if (mBlockSetBounds) return; + + final int width = mLayerState.mArray[0].mDrawable.getIntrinsicWidth(); + left -= (width - (right - left)) / 2.0f; + right = left + width; + bottom = top + getIntrinsicHeight(); + super.setBounds(left, top, right, bottom); + + if (mParent != null) { + mBlockSetBounds = true; + mParent.setBounds(left, top, right, bottom); + mBlockSetBounds = false; + } + } + + public void setParent(Drawable drawable) { + mParent = drawable; + } + + @Override + protected void onBoundsChange(Rect bounds) { + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + int padL = 0, padT = 0, padR = 0, padB = 0; + for (int i = 0; i < N; i++) { + final Rec r = array[i]; + r.mDrawable.setBounds(bounds.left + r.mInsetL + padL, + bounds.top + r.mInsetT + padT, + bounds.right - r.mInsetR - padR, + bounds.bottom - r.mInsetB - padB); + padL += mPaddingL[i]; + padR += mPaddingR[i]; + padT += mPaddingT[i]; + padB += mPaddingB[i]; + } + } + + @Override + public int getIntrinsicWidth() { + int width = -1; + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + int padL = 0, padR = 0; + for (int i = 0; i < N; i++) { + final Rec r = array[i]; + int w = r.mDrawable.getIntrinsicWidth() + + r.mInsetL + r.mInsetR + padL + padR; + if (w > width) { + width = w; + } + padL += mPaddingL[i]; + padR += mPaddingR[i]; + } + return width; + } + + @Override + public int getIntrinsicHeight() { + int height = -1; + final Rec[] array = mLayerState.mArray; + final int N = mLayerState.mNum; + int padT = 0, padB = 0; + for (int i = 0; i < N; i++) { + final Rec r = array[i]; + int h = r.mDrawable.getIntrinsicHeight() + r.mInsetT + r.mInsetB + +padT + padB; + if (h > height) { + height = h; + } + padT += mPaddingT[i]; + padB += mPaddingB[i]; + } + return height; + } + + private boolean reapplyPadding(int i, Rec r) { + final Rect rect = mTmpRect; + r.mDrawable.getPadding(rect); + if (rect.left != mPaddingL[i] || rect.top != mPaddingT[i] || + rect.right != mPaddingR[i] || rect.bottom != mPaddingB[i]) { + mPaddingL[i] = rect.left; + mPaddingT[i] = rect.top; + mPaddingR[i] = rect.right; + mPaddingB[i] = rect.bottom; + return true; + } + return false; + } + + private void ensurePadding() { + final int N = mLayerState.mNum; + if (mPaddingL != null && mPaddingL.length >= N) { + return; + } + mPaddingL = new int[N]; + mPaddingT = new int[N]; + mPaddingR = new int[N]; + mPaddingB = new int[N]; + } + + @Override + public ConstantState getConstantState() { + if (mLayerState.canConstantState()) { + mLayerState.mChangingConfigurations = super.getChangingConfigurations(); + return mLayerState; + } + return null; + } + + static class Rec { + public Drawable mDrawable; + public int mInsetL, mInsetT, mInsetR, mInsetB; + public int mId; + } + + static class LayerState extends ConstantState { + int mNum; + Rec[] mArray; + + int mChangingConfigurations; + int mChildrenChangingConfigurations; + + private boolean mHaveOpacity = false; + private int mOpacity; + + private boolean mHaveStateful = false; + private boolean mStateful; + + private boolean mCheckedConstantState; + private boolean mCanConstantState; + + LayerState(LayerState orig, LayerDrawable owner) { + if (orig != null) { + final Rec[] origRec = orig.mArray; + final int N = orig.mNum; + + mNum = N; + mArray = new Rec[N]; + + mChangingConfigurations = orig.mChangingConfigurations; + mChildrenChangingConfigurations = orig.mChildrenChangingConfigurations; + + for (int i = 0; i < N; i++) { + final Rec r = mArray[i] = new Rec(); + final Rec or = origRec[i]; + r.mDrawable = or.mDrawable.getConstantState().newDrawable(); + r.mDrawable.setCallback(owner); + r.mInsetL = or.mInsetL; + r.mInsetT = or.mInsetT; + r.mInsetR = or.mInsetR; + r.mInsetB = or.mInsetB; + r.mId = or.mId; + } + + mHaveOpacity = orig.mHaveOpacity; + mOpacity = orig.mOpacity; + mHaveStateful = orig.mHaveStateful; + mStateful = orig.mStateful; + mCheckedConstantState = mCanConstantState = true; + } else { + mNum = 0; + mArray = null; + } + } + + @Override + public Drawable newDrawable() { + return new LayerDrawable(this); + } + + @Override + public int getChangingConfigurations() { + return mChangingConfigurations; + } + + public final int getOpacity() { + if (mHaveOpacity) { + return mOpacity; + } + + final int N = mNum; + final Rec[] array = mArray; + int op = N > 0 ? array[0].mDrawable.getOpacity() : PixelFormat.TRANSPARENT; + for (int i = 1; i < N; i++) { + op = Drawable.resolveOpacity(op, array[i].mDrawable.getOpacity()); + } + mOpacity = op; + mHaveOpacity = true; + return op; + } + + public final boolean isStateful() { + if (mHaveStateful) { + return mStateful; + } + + boolean stateful = false; + final int N = mNum; + final Rec[] array = mArray; + for (int i = 0; i < N; i++) { + if (array[i].mDrawable.isStateful()) { + stateful = true; + break; + } + } + + mStateful = stateful; + mHaveStateful = true; + return stateful; + } + + public synchronized boolean canConstantState() { + final Rec[] array = mArray; + if (!mCheckedConstantState && array != null) { + mCanConstantState = true; + final int N = mNum; + for (int i = 0; i < N; i++) { + if (array[i].mDrawable.getConstantState() == null) { + mCanConstantState = false; + break; + } + } + mCheckedConstantState = true; + } + + return mCanConstantState; + } + } +} + diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/SpotlightDrawable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/SpotlightDrawable.java new file mode 100644 index 0000000..e2745d8 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/SpotlightDrawable.java @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2008 Romain Guy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.drawable; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Paint; +import android.graphics.PixelFormat; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffXfermode; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.view.View; +import android.view.ViewGroup; + +import com.lcjian.lcjianlibrary.R; + +public class SpotlightDrawable extends Drawable { + private final Bitmap mBitmap; + private final Paint mPaint; + private final ViewGroup mView; + + private boolean mOffsetDisabled; + private boolean mBlockSetBounds; + private Drawable mParent; + + public SpotlightDrawable(Context context, ViewGroup view) { + this(context, view, R.drawable.spotlight); + } + + public SpotlightDrawable(Context context, ViewGroup view, int resource) { + mView = view; + mBitmap = BitmapFactory.decodeResource(context.getResources(), resource); + + mPaint = new Paint(); + mPaint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SCREEN)); + } + + public void draw(Canvas canvas) { + if (mView.hasWindowFocus()) { + final Rect bounds = getBounds(); + canvas.save(); + canvas.drawBitmap(mBitmap, bounds.left, bounds.top, mPaint); + } + } + + @Override + public void setBounds(int left, int top, int right, int bottom) { + if (mBlockSetBounds) return; + + if (!mOffsetDisabled) { + final int width = getIntrinsicWidth(); + final View view = mView.getChildAt(0); + if (view != null) left -= (width - view.getWidth()) / 2.0f; + right = left + width; + bottom = top + getIntrinsicHeight(); + } else { + right = left + getIntrinsicWidth(); + bottom = top + getIntrinsicHeight(); + } + + super.setBounds(left, top, right, bottom); + + if (mParent != null) { + mBlockSetBounds = true; + mParent.setBounds(left, top, right, bottom); + mBlockSetBounds = false; + } + } + + public void setParent(Drawable drawable) { + mParent = drawable; + } + + @Override + protected boolean onStateChange(int[] state) { + invalidateSelf(); + return super.onStateChange(state); + } + + public void setAlpha(int alpha) { + mPaint.setAlpha(alpha); + } + + public void setColorFilter(ColorFilter cf) { + mPaint.setColorFilter(cf); + } + + public int getOpacity() { + return PixelFormat.TRANSLUCENT; + } + + @Override + public int getIntrinsicWidth() { + return mBitmap.getWidth(); + } + + @Override + public int getIntrinsicHeight() { + return mBitmap.getHeight(); + } + + public void disableOffset() { + mOffsetDisabled = true; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/TransitionDrawable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/TransitionDrawable.java new file mode 100644 index 0000000..0d843bf --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/drawable/TransitionDrawable.java @@ -0,0 +1,242 @@ +/* + * Copyright (C) 2008 The Android Open Source Project, Romain Guy + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.drawable; + +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.os.SystemClock; + +public class TransitionDrawable extends LayerDrawable implements Drawable.Callback { + + /** + * A transition is about to start. + */ + private static final int TRANSITION_STARTING = 0; + + /** + * The transition has started and the animation is in progress + */ + private static final int TRANSITION_RUNNING = 1; + + /** + * No transition will be applied + */ + private static final int TRANSITION_NONE = 2; + + /** + * The current state of the transition. One of {@link #TRANSITION_STARTING}, + * {@link #TRANSITION_RUNNING} and {@link #TRANSITION_NONE} + */ + private int mTransitionState = TRANSITION_NONE; + + private boolean mReverse; + private long mStartTimeMillis; + private int mFrom; + private int mTo; + private int mDuration; + private TransitionState mState; + + public TransitionDrawable(Drawable... layers) { + this(new TransitionState(null, null), layers); + } + + TransitionDrawable() { + this(new TransitionState(null, null)); + } + + private TransitionDrawable(TransitionState state) { + super(state); + mState = state; + } + + private TransitionDrawable(TransitionState state, Drawable... layers) { + super(state, layers); + mState = state; + } + + @Override + LayerState createConstantState(LayerState state) { + return new TransitionState((TransitionState) state, this); + } + + /** + * Begin the second layer on top of the first layer. + * + * @param durationMillis The length of the transition in milliseconds + */ + public void startTransition(int durationMillis) { + mFrom = 0; + mTo = 255; + mState.mAlpha = 0; + mState.mDuration = mDuration = durationMillis; + mReverse = false; + mTransitionState = TRANSITION_STARTING; + invalidateSelf(); + } + + /** + * Show only the first layer. + */ + public void resetTransition() { + mState.mAlpha = 0; + mTransitionState = TRANSITION_NONE; + invalidateSelf(); + } + + /** + * Reverses the transition, picking up where the transition currently is. + * If the transition is not currently running, this will start the transition + * with the specified duration. If the transition is already running, the last + * known duration will be used. + * + * @param duration The duration to use if no transition is running. + */ + public void reverseTransition(int duration) { + final long time = SystemClock.uptimeMillis(); + // Animation is over + if (time - mStartTimeMillis > mState.mDuration) { + if (mState.mAlpha == 0) { + mFrom = 0; + mTo = 255; + mState.mAlpha = 0; + mReverse = false; + } else { + mFrom = 255; + mTo = 0; + mState.mAlpha = 255; + mReverse = true; + } + mDuration = mState.mDuration = duration; + mTransitionState = TRANSITION_STARTING; + invalidateSelf(); + return; + } + + mReverse = !mReverse; + mFrom = mState.mAlpha; + mTo = mReverse ? 0 : 255; + mDuration = (int) (mReverse ? time - mStartTimeMillis : + mState.mDuration - (time - mStartTimeMillis)); + mTransitionState = TRANSITION_STARTING; + } + + @Override + public void draw(Canvas canvas) { + boolean done = true; + final TransitionState state = mState; + + switch (mTransitionState) { + case TRANSITION_STARTING: + mStartTimeMillis = SystemClock.uptimeMillis(); + done = false; + mTransitionState = TRANSITION_RUNNING; + break; + + case TRANSITION_RUNNING: + if (mStartTimeMillis >= 0) { + float normalized = (float) + (SystemClock.uptimeMillis() - mStartTimeMillis) / mDuration; + done = normalized >= 1.0f; + normalized = Math.min(normalized, 1.0f); + state.mAlpha = (int) (mFrom + (mTo - mFrom) * normalized); + } + break; + } + + final int alpha = state.mAlpha; + final boolean crossFade = state.mCrossFade; + final Rec[] array = mLayerState.mArray; + Drawable d; + + d = array[0].mDrawable; + if (crossFade) { + d.setAlpha(255 - alpha); + } + d.draw(canvas); + if (crossFade) { + d.setAlpha(0xFF); + } + + if (alpha > 0) { + d = array[1].mDrawable; + d.setAlpha(alpha); + d.draw(canvas); + d.setAlpha(0xFF); + } + + if (!done) { + invalidateSelf(); + } + } + + /** + * Enables or disables the cross fade of the drawables. When cross fade + * is disabled, the first drawable is always drawn opaque. With cross + * fade enabled, the first drawable is drawn with the opposite alpha of + * the second drawable. + * + * @param enabled True to enable cross fading, false otherwise. + */ + public void setCrossFadeEnabled(boolean enabled) { + mState.mCrossFade = enabled; + } + + /** + * Indicates whether the cross fade is enabled for this transition. + * + * @return True if cross fading is enabled, false otherwise. + */ + public boolean isCrossFadeEnabled() { + return mState.mCrossFade; + } + + static class TransitionState extends LayerState { + int mAlpha = 0; + int mDuration; + boolean mCrossFade; + + TransitionState(TransitionState orig, TransitionDrawable owner) { + super(orig, owner); + } + + @Override + public Drawable newDrawable() { + return new TransitionDrawable(this); + } + + @Override + public int getChangingConfigurations() { + return mChangingConfigurations; + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionEditText.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionEditText.java new file mode 100644 index 0000000..b86aff5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionEditText.java @@ -0,0 +1,110 @@ +package com.demo.lib.common.emotion; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.text.Spannable; +import android.util.AttributeSet; +import android.util.Log; +import android.widget.EditText; + +import com.lcjian.lcjianlibrary.R; + +public class EmotionEditText extends EditText { + + private int mEmotionSize; + + private int mEmotionWidth; + + private int mEmotionHeight; + + public EmotionEditText(Context context) { + super(context); + init(null); + mEmotionSize = (int) getTextSize(); + } + + public EmotionEditText(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public EmotionEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(attrs); + } + + private void init(AttributeSet attrs) { + if (attrs == null) { + mEmotionSize = (int) getTextSize(); + mEmotionWidth = mEmotionSize; + mEmotionHeight = mEmotionSize; + } else { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emotion); + mEmotionSize = (int) a.getDimension(R.styleable.Emotion_emotionSize, getTextSize()); + mEmotionWidth = (int) a.getDimension(R.styleable.Emotion_emotionWidth, 0); + mEmotionHeight = (int) a.getDimension(R.styleable.Emotion_emotionWidth, 0); + if (mEmotionWidth == 0 || mEmotionHeight == 0) { + mEmotionWidth = mEmotionSize; + mEmotionHeight = mEmotionSize; + } + a.recycle(); + } + setText(getText()); + } + + @Override + protected void onTextChanged(CharSequence text, int start, int lengthBefore, int lengthAfter) { + updateText(); + } + + /** + * Set the size of emotion in pixels. + */ + public void setEmotionSize(int pixels) { + mEmotionSize = pixels; + mEmotionWidth = mEmotionSize; + mEmotionHeight = mEmotionSize; + updateText(); + } + + public void setEmotionWidth(int pixels) { + mEmotionWidth = pixels; + updateText(); + } + + public void setEmotionHeight(int pixels) { + mEmotionHeight = pixels; + updateText(); + } + + private void updateText() { + Spannable text = getText(); + EmotionSpan[] oldSpans = text.getSpans(0, text.length(), EmotionSpan.class); + for (int i = 0; i < oldSpans.length; i++) { + text.removeSpan(oldSpans[i]); + } + + Pattern p = Pattern.compile("\\[[^\\[\\]]+\\]"); + Matcher m = p.matcher(getText()); + while(m.find()){ + try { + InputStream input = getContext().getAssets().open("emotions" + File.separator + EmotionHandler.faceMap.get(m.group())); + if(input != null) { + Bitmap bitmap = BitmapFactory.decodeStream(input); + EmotionSpan imageSpan = new EmotionSpan(getContext(), bitmap, mEmotionWidth, mEmotionHeight); + text.setSpan(imageSpan, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } catch (IOException e) { + Log.e("sms", "Failed to loaded content " + m.group(), e); + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionGridFragment.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionGridFragment.java new file mode 100644 index 0000000..42a5d05 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionGridFragment.java @@ -0,0 +1,107 @@ +package com.demo.lib.common.emotion; + +import android.os.Bundle; +import androidx.fragment.app.Fragment; +import android.view.Gravity; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.AdapterView; +import android.widget.AdapterView.OnItemClickListener; +import android.widget.BaseAdapter; +import android.widget.GridView; + +import com.lcjian.lcjianlibrary.R; +import com.demo.lib.common.util.common.DimenUtils; + +public class EmotionGridFragment extends Fragment { + + public static final View EmotionTextView = null; + + private OnEditListener mOnEditListener; + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + EmotionHandler.initEmotion(getActivity()); + return inflater.inflate(R.layout.emotion_grid, container, false); + } + + @Override + public void onViewCreated(View view, Bundle savedInstanceState) { + GridView gridView = view.findViewById(R.id.gv_emotion); + gridView.setAdapter(new EmotionAdapter()); + gridView.setOnItemClickListener(new OnItemClickListener() { + + @Override + public void onItemClick(AdapterView<?> parent, View view, int position, long id) { + CharSequence text = ((EmotionTextView) view).getText(); + if (text.toString().equals("[閫�鏍奸敭]")) { + if (mOnEditListener != null) { + mOnEditListener.onBack(); + } + } else { + if (mOnEditListener != null) { + mOnEditListener.onAdd(text); + } + } + } + }); + } + + private class EmotionAdapter extends BaseAdapter { + + private String[] thumbArray; + + public EmotionAdapter() { + thumbArray = EmotionHandler.faceMap.keySet().toArray(new String[] {}); + } + + @Override + public int getCount() { + return thumbArray.length; + } + + @Override + public Object getItem(int position) { + return thumbArray[position]; + } + + @Override + public long getItemId(int position) { + return position; + } + + @Override + public View getView(int position, View convertView, ViewGroup parent) { + if (convertView == null) { + convertView = new EmotionTextView(parent.getContext()); + convertView.setLayoutParams(new GridView.LayoutParams( + DimenUtils.dipToPixels(40, parent.getContext()), DimenUtils.dipToPixels(40, parent.getContext()))); + } + ((EmotionTextView) convertView).setGravity(Gravity.CENTER); + if (position == thumbArray.length - 1) { + ((EmotionTextView) convertView).setEmotionWidth(DimenUtils.dipToPixels(25, parent.getContext())); + ((EmotionTextView) convertView).setEmotionHeight(DimenUtils.dipToPixels(17, parent.getContext())); + } else { + ((EmotionTextView) convertView).setEmotionWidth(DimenUtils.dipToPixels(33, parent.getContext())); + ((EmotionTextView) convertView).setEmotionHeight(DimenUtils.dipToPixels(28, parent.getContext())); + } + ((EmotionTextView) convertView).setText(thumbArray[position]); + return convertView; + } + } + + public OnEditListener getOnEditListener() { + return mOnEditListener; + } + + public void setOnEditListener(OnEditListener onEditListener) { + this.mOnEditListener = onEditListener; + } + + public interface OnEditListener { + void onBack(); + void onAdd(CharSequence text); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionHandler.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionHandler.java new file mode 100644 index 0000000..d8e7074 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionHandler.java @@ -0,0 +1,54 @@ +package com.demo.lib.common.emotion; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.LinkedHashMap; +import java.util.Map; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.content.Context; +import android.util.Log; + +public class EmotionHandler { + + public static Map<String,String> faceMap = new LinkedHashMap<String,String>(); + + private static void prepareFaceMap(String arg) { + try { + JSONObject root = new JSONObject(arg); + JSONArray array = root.getJSONArray("emotions"); + if(array == null || array.length() == 0) + return; + for(int i=0; i < array.length(); i ++) { + JSONObject pair = array.getJSONObject(i); + faceMap.put(pair.optString("emotionString"), pair.optString("fileName")); + } + + } catch (JSONException e) { + Log.e("error", e.getMessage()); + } + + + } + + public static void initEmotion(Context context) { + InputStream is; + try { + is = context.getAssets().open("emotion_des.txt"); + BufferedReader br = new BufferedReader(new InputStreamReader(is)); + StringBuilder sbr = new StringBuilder(); + String str; + while((str = br.readLine())!= null) { + sbr.append(str); + } + prepareFaceMap(sbr.toString()); + } catch (IOException e) { + Log.e("error", e.getMessage()); + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionSpan.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionSpan.java new file mode 100644 index 0000000..4f6a9b0 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionSpan.java @@ -0,0 +1,78 @@ +package com.demo.lib.common.emotion; + +import java.io.InputStream; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; +import android.net.Uri; +import android.text.style.DynamicDrawableSpan; +import android.util.Log; + +public class EmotionSpan extends DynamicDrawableSpan { + + private Drawable mDrawable; + private Uri mContentUri; + private int mResourceId; + private Context mContext; + private int mWidth; + private int mHeight; + + public EmotionSpan(Context context, Bitmap b, int width, int height) { + super(); + mContext = context; + mDrawable = new BitmapDrawable(context.getResources(), b); + if (width == 0 || height == 0) { + width = mDrawable.getIntrinsicWidth(); + height = mDrawable.getIntrinsicHeight(); + } + mDrawable.setBounds(0, 0, width > 0 ? width : 0, height > 0 ? height : 0); + mWidth = width; + mHeight = height; + } + + public EmotionSpan(Context context, Uri uri, int width, int height) { + mContext = context; + mContentUri = uri; + mWidth = width; + mHeight = height; + } + + public EmotionSpan(Context context, int resourceId, int width, int height) { + mContext = context; + mResourceId = resourceId; + mWidth = width; + mHeight = height; + } + + + @Override + public Drawable getDrawable() { + Drawable drawable = null; + + if (mDrawable != null) { + drawable = mDrawable; + } else if (mContentUri != null) { + Bitmap bitmap = null; + try { + InputStream is = mContext.getContentResolver().openInputStream(mContentUri); + bitmap = BitmapFactory.decodeStream(is); + drawable = new BitmapDrawable(mContext.getResources(), bitmap); + drawable.setBounds(0, 0, mWidth, mHeight); + is.close(); + } catch (Exception e) { + Log.e("sms", "Failed to loaded content " + mContentUri, e); + } + } else { + try { + drawable = mContext.getResources().getDrawable(mResourceId); + drawable.setBounds(0, 0, mWidth, mHeight); + } catch (Exception e) { + Log.e("sms", "Unable to find resource: " + mResourceId); + } + } + return drawable; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionTextView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionTextView.java new file mode 100644 index 0000000..dbc16ec --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionTextView.java @@ -0,0 +1,106 @@ +package com.demo.lib.common.emotion; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.text.Spannable; +import android.text.SpannableStringBuilder; +import android.text.TextUtils; +import android.util.AttributeSet; +import android.util.Log; +import android.widget.TextView; + +import com.lcjian.lcjianlibrary.R; + +public class EmotionTextView extends TextView { + + private int mEmotionSize; + + private int mEmotionWidth; + + private int mEmotionHeight; + + public EmotionTextView(Context context) { + super(context); + init(null); + } + + public EmotionTextView(Context context, AttributeSet attrs) { + super(context, attrs); + init(attrs); + } + + public EmotionTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + init(attrs); + } + + private void init(AttributeSet attrs) { + if (attrs == null) { + mEmotionSize = (int) getTextSize(); + mEmotionWidth = mEmotionSize; + mEmotionHeight = mEmotionSize; + } else { + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.Emotion); + mEmotionSize = (int) a.getDimension(R.styleable.Emotion_emotionSize, getTextSize()); + mEmotionWidth = (int) a.getDimension(R.styleable.Emotion_emotionWidth, 0); + mEmotionHeight = (int) a.getDimension(R.styleable.Emotion_emotionWidth, 0); + if (mEmotionWidth == 0 || mEmotionHeight == 0) { + mEmotionWidth = mEmotionSize; + mEmotionHeight = mEmotionSize; + } + a.recycle(); + } + setText(getText()); + } + + @Override + public void setText(CharSequence text, BufferType type) { + if (!TextUtils.isEmpty(text)) { + SpannableStringBuilder builder = new SpannableStringBuilder(text); + Pattern p = Pattern.compile("\\[[^\\[\\]]+\\]"); + Matcher m = p.matcher(text); + while(m.find()){ + try { + InputStream input = getContext().getAssets().open("emotions" + File.separator + EmotionHandler.faceMap.get(m.group())); + if (input != null) { + Bitmap bitmap = BitmapFactory.decodeStream(input); + EmotionSpan emotionSpan = new EmotionSpan(getContext(), bitmap, mEmotionWidth, mEmotionHeight); + builder.setSpan(emotionSpan, m.start(), m.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } + } catch (IOException e) { + Log.e("sms", "Failed to loaded content " + m.group(), e); + } + } + text = builder; + } + super.setText(text, type); + } + + /** + * Set the size of emojicon in pixels. + */ + public void setEmotionSize(int pixels) { + mEmotionSize = pixels; + mEmotionWidth = mEmotionSize; + mEmotionHeight = mEmotionSize; + super.setText(getText()); + } + + public void setEmotionWidth(int pixels) { + mEmotionWidth = pixels; + super.setText(getText()); + } + + public void setEmotionHeight(int pixels) { + mEmotionHeight = pixels; + super.setText(getText()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionsFragment.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionsFragment.java new file mode 100644 index 0000000..b2c9c45 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/emotion/EmotionsFragment.java @@ -0,0 +1,9 @@ +package com.demo.lib.common.emotion; + +import androidx.fragment.app.Fragment; + +public class EmotionsFragment extends Fragment { + + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ClipCopyContent.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ClipCopyContent.java new file mode 100644 index 0000000..72bb07e --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ClipCopyContent.java @@ -0,0 +1,36 @@ +package com.demo.lib.common.entity; + +/** + *绮樿创鏉垮鍒剁殑鍐呭 + */ +public class ClipCopyContent { + + private String content; + private long time; + + public ClipCopyContent(String content, long time) { + this.content = content; + this.time = time; + } + + + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + + public long getTime() { + return time; + } + + public void setTime(long time) { + this.time = time; + } + + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ExpireTimeValue.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ExpireTimeValue.java new file mode 100644 index 0000000..939791c --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/ExpireTimeValue.java @@ -0,0 +1,27 @@ +package com.demo.lib.common.entity; + +public class ExpireTimeValue { + private String value; + private long expireTime; + + public ExpireTimeValue(String value, long expireTime) { + this.value = value; + this.expireTime = expireTime; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public long getExpireTime() { + return expireTime; + } + + public void setExpireTime(long expireTime) { + this.expireTime = expireTime; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/IsSeeking.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/IsSeeking.java new file mode 100644 index 0000000..8f0d626 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/entity/IsSeeking.java @@ -0,0 +1,17 @@ +package com.demo.lib.common.entity; + +/** + * Created by weikou2015 on 2016/10/19. + */ + +public class IsSeeking { + + private boolean isSeeking; + public boolean isSeeking() { + return isSeeking; + } + + public void setSeeking(boolean seeking) { + isSeeking = seeking; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/OkHttpUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/OkHttpUtils.java new file mode 100644 index 0000000..f8e04d5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/OkHttpUtils.java @@ -0,0 +1,218 @@ +package com.demo.lib.common.okhttp; + +import com.demo.lib.common.okhttp.builder.GetBuilder; +import com.demo.lib.common.okhttp.builder.HeadBuilder; +import com.demo.lib.common.okhttp.builder.OtherRequestBuilder; +import com.demo.lib.common.okhttp.builder.PostFileBuilder; +import com.demo.lib.common.okhttp.builder.PostFormBuilder; +import com.demo.lib.common.okhttp.builder.PostStringBuilder; +import com.demo.lib.common.okhttp.callback.Callback; +import com.demo.lib.common.okhttp.request.RequestCall; +import com.demo.lib.common.okhttp.utils.Platform; + +import java.io.IOException; +import java.util.concurrent.Executor; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Response; + +/** + * Created by zhy on 15/8/17. + */ +public class OkHttpUtils +{ + public static final long DEFAULT_MILLISECONDS = 10_000L; + private volatile static OkHttpUtils mInstance; + private OkHttpClient mOkHttpClient; + private Platform mPlatform; + + public OkHttpUtils(OkHttpClient okHttpClient) + { + if (okHttpClient == null) + { + mOkHttpClient = new OkHttpClient(); + } else + { + mOkHttpClient = okHttpClient; + } + + mPlatform = Platform.get(); + } + + + public static OkHttpUtils initClient(OkHttpClient okHttpClient) + { + if (mInstance == null) + { + synchronized (OkHttpUtils.class) + { + if (mInstance == null) + { + mInstance = new OkHttpUtils(okHttpClient); + } + } + } + return mInstance; + } + + public static OkHttpUtils getInstance() + { + return initClient(null); + } + + + public Executor getDelivery() + { + return mPlatform.defaultCallbackExecutor(); + } + + public OkHttpClient getOkHttpClient() + { + return mOkHttpClient; + } + + public static GetBuilder get() + { + return new GetBuilder(); + } + + public static PostStringBuilder postString() + { + return new PostStringBuilder(); + } + + public static PostFileBuilder postFile() + { + return new PostFileBuilder(); + } + + public static PostFormBuilder post() + { + return new PostFormBuilder(); + } + + public static OtherRequestBuilder put() + { + return new OtherRequestBuilder(METHOD.PUT); + } + + public static HeadBuilder head() + { + return new HeadBuilder(); + } + + public static OtherRequestBuilder delete() + { + return new OtherRequestBuilder(METHOD.DELETE); + } + + public static OtherRequestBuilder patch() + { + return new OtherRequestBuilder(METHOD.PATCH); + } + + public void execute(final RequestCall requestCall, Callback callback) + { + if (callback == null) + callback = Callback.CALLBACK_DEFAULT; + final Callback finalCallback = callback; + final int id = requestCall.getOkHttpRequest().getId(); + + requestCall.getCall().enqueue(new okhttp3.Callback() + { + @Override + public void onFailure(Call call, final IOException e) + { + sendFailResultCallback(call, e, finalCallback, id); + } + + @Override + public void onResponse(final Call call, final Response response) + { + try + { + if (call.isCanceled()) + { + sendFailResultCallback(call, new IOException("Canceled!"), finalCallback, id); + return; + } + + if (!finalCallback.validateReponse(response, id)) + { + sendFailResultCallback(call, new IOException("request failed , reponse's code is : " + response.code()), finalCallback, id); + return; + } + + Object o = finalCallback.parseNetworkResponse(response, id); + sendSuccessResultCallback(o, finalCallback, id); + } catch (Exception e) + { + sendFailResultCallback(call, e, finalCallback, id); + } finally + { + if (response.body() != null) + response.body().close(); + } + + } + }); + } + + + public void sendFailResultCallback(final Call call, final Exception e, final Callback callback, final int id) + { + if (callback == null) return; + + mPlatform.execute(new Runnable() + { + @Override + public void run() + { + callback.onError(call, e, id); + callback.onAfter(id); + } + }); + } + + public void sendSuccessResultCallback(final Object object, final Callback callback, final int id) + { + if (callback == null) return; + mPlatform.execute(new Runnable() + { + @Override + public void run() + { + callback.onResponse(object, id); + callback.onAfter(id); + } + }); + } + + public void cancelTag(Object tag) + { + for (Call call : mOkHttpClient.dispatcher().queuedCalls()) + { + if (tag.equals(call.request().tag())) + { + call.cancel(); + } + } + for (Call call : mOkHttpClient.dispatcher().runningCalls()) + { + if (tag.equals(call.request().tag())) + { + call.cancel(); + } + } + } + + public static class METHOD + { + public static final String HEAD = "HEAD"; + public static final String DELETE = "DELETE"; + public static final String PUT = "PUT"; + public static final String PATCH = "PATCH"; + } +} + diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/GetBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/GetBuilder.java new file mode 100644 index 0000000..1b0ca99 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/GetBuilder.java @@ -0,0 +1,57 @@ +package com.demo.lib.common.okhttp.builder; + +import android.net.Uri; + +import com.demo.lib.common.okhttp.request.GetRequest; +import com.demo.lib.common.okhttp.request.RequestCall; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; + +/** + * Created by zhy on 15/12/14. + */ +public class GetBuilder extends OkHttpRequestBuilder<GetBuilder> implements HasParamsable { + @Override + public RequestCall build() { + if (params != null) { + url = appendParams(url, params); + } + + return new GetRequest(url, tag, params, headers, id).build(); + } + + protected String appendParams(String url, Map<String, String> params) { + if (url == null || params == null || params.isEmpty()) { + return url; + } + Uri.Builder builder = Uri.parse(url).buildUpon(); + Set<String> keys = params.keySet(); + Iterator<String> iterator = keys.iterator(); + while (iterator.hasNext()) { + String key = iterator.next(); + builder.appendQueryParameter(key, params.get(key)); + } + return builder.build().toString(); + } + + + @Override + public GetBuilder params(Map<String, String> params) { + this.params = params; + return this; + } + + @Override + public GetBuilder addParams(String key, String val) { + if (this.params == null) { + params = new LinkedHashMap<>(); + } + params.put(key, val); + return this; + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HasParamsable.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HasParamsable.java new file mode 100644 index 0000000..e57def6 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HasParamsable.java @@ -0,0 +1,12 @@ +package com.demo.lib.common.okhttp.builder; + +import java.util.Map; + +/** + * Created by zhy on 16/3/1. + */ +public interface HasParamsable +{ + OkHttpRequestBuilder params(Map<String, String> params); + OkHttpRequestBuilder addParams(String key, String val); +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HeadBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HeadBuilder.java new file mode 100644 index 0000000..6b39b62 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/HeadBuilder.java @@ -0,0 +1,18 @@ +package com.demo.lib.common.okhttp.builder; + + +import com.demo.lib.common.okhttp.OkHttpUtils; +import com.demo.lib.common.okhttp.request.OtherRequest; +import com.demo.lib.common.okhttp.request.RequestCall; + +/** + * Created by zhy on 16/3/2. + */ +public class HeadBuilder extends GetBuilder +{ + @Override + public RequestCall build() + { + return new OtherRequest(null, null, OkHttpUtils.METHOD.HEAD, url, tag, params, headers,id).build(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.java new file mode 100644 index 0000000..7d35ecb --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OkHttpRequestBuilder.java @@ -0,0 +1,55 @@ +package com.demo.lib.common.okhttp.builder; + +import com.demo.lib.common.okhttp.request.RequestCall; + +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Created by zhy on 15/12/14. + */ +public abstract class OkHttpRequestBuilder<T extends OkHttpRequestBuilder> +{ + protected String url; + protected Object tag; + protected Map<String, String> headers; + protected Map<String, String> params; + protected int id; + + public T id(int id) + { + this.id = id; + return (T) this; + } + + public T url(String url) + { + this.url = url; + return (T) this; + } + + + public T tag(Object tag) + { + this.tag = tag; + return (T) this; + } + + public T headers(Map<String, String> headers) + { + this.headers = headers; + return (T) this; + } + + public T addHeader(String key, String val) + { + if (this.headers == null) + { + headers = new LinkedHashMap<>(); + } + headers.put(key, val); + return (T) this; + } + + public abstract RequestCall build(); +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.java new file mode 100644 index 0000000..615ba03 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/OtherRequestBuilder.java @@ -0,0 +1,42 @@ +package com.demo.lib.common.okhttp.builder; + + +import com.demo.lib.common.okhttp.request.OtherRequest; +import com.demo.lib.common.okhttp.request.RequestCall; + +import okhttp3.RequestBody; + +/** + * DELETE銆丳UT銆丳ATCH绛夊叾浠栨柟娉� + */ +public class OtherRequestBuilder extends OkHttpRequestBuilder<OtherRequestBuilder> +{ + private RequestBody requestBody; + private String method; + private String content; + + public OtherRequestBuilder(String method) + { + this.method = method; + } + + @Override + public RequestCall build() + { + return new OtherRequest(requestBody, content, method, url, tag, params, headers,id).build(); + } + + public OtherRequestBuilder requestBody(RequestBody requestBody) + { + this.requestBody = requestBody; + return this; + } + + public OtherRequestBuilder requestBody(String content) + { + this.content = content; + return this; + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFileBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFileBuilder.java new file mode 100644 index 0000000..5c296c5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFileBuilder.java @@ -0,0 +1,39 @@ +package com.demo.lib.common.okhttp.builder; + + +import com.demo.lib.common.okhttp.request.PostFileRequest; +import com.demo.lib.common.okhttp.request.RequestCall; + +import java.io.File; + +import okhttp3.MediaType; + +/** + * Created by zhy on 15/12/14. + */ +public class PostFileBuilder extends OkHttpRequestBuilder<PostFileBuilder> +{ + private File file; + private MediaType mediaType; + + + public OkHttpRequestBuilder file(File file) + { + this.file = file; + return this; + } + + public OkHttpRequestBuilder mediaType(MediaType mediaType) + { + this.mediaType = mediaType; + return this; + } + + @Override + public RequestCall build() + { + return new PostFileRequest(url, tag, params, headers, file, mediaType,id).build(); + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFormBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFormBuilder.java new file mode 100644 index 0000000..9655c04 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostFormBuilder.java @@ -0,0 +1,88 @@ +package com.demo.lib.common.okhttp.builder; + + +import com.demo.lib.common.okhttp.request.PostFormRequest; +import com.demo.lib.common.okhttp.request.RequestCall; + +import java.io.File; +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by zhy on 15/12/14. + */ +public class PostFormBuilder extends OkHttpRequestBuilder<PostFormBuilder> implements HasParamsable +{ + private List<FileInput> files = new ArrayList<>(); + + @Override + public RequestCall build() + { + return new PostFormRequest(url, tag, params, headers, files,id).build(); + } + + public PostFormBuilder files(String key, Map<String, File> files) + { + for (String filename : files.keySet()) + { + this.files.add(new FileInput(key, filename, files.get(filename))); + } + return this; + } + + public PostFormBuilder addFile(String name, String filename, File file) + { + files.add(new FileInput(name, filename, file)); + return this; + } + + public static class FileInput + { + public String key; + public String filename; + public File file; + + public FileInput(String name, String filename, File file) + { + this.key = name; + this.filename = filename; + this.file = file; + } + + @Override + public String toString() + { + return "FileInput{" + + "key='" + key + '\'' + + ", filename='" + filename + '\'' + + ", file=" + file + + '}'; + } + } + + + + @Override + public PostFormBuilder params(Map<String, String> params) + { + this.params = params; + return this; + } + + @Override + public PostFormBuilder addParams(String key, String val) + { + if (this.params == null) + { + params = new LinkedHashMap<>(); + } + params.put(key, val); + return this; + } + + + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostStringBuilder.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostStringBuilder.java new file mode 100644 index 0000000..a14a172 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/builder/PostStringBuilder.java @@ -0,0 +1,37 @@ +package com.demo.lib.common.okhttp.builder; + + +import com.demo.lib.common.okhttp.request.PostStringRequest; +import com.demo.lib.common.okhttp.request.RequestCall; + +import okhttp3.MediaType; + +/** + * Created by zhy on 15/12/14. + */ +public class PostStringBuilder extends OkHttpRequestBuilder<PostStringBuilder> +{ + private String content; + private MediaType mediaType; + + + public PostStringBuilder content(String content) + { + this.content = content; + return this; + } + + public PostStringBuilder mediaType(MediaType mediaType) + { + this.mediaType = mediaType; + return this; + } + + @Override + public RequestCall build() + { + return new PostStringRequest(url, tag, params, headers, content, mediaType,id).build(); + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/BitmapCallback.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/BitmapCallback.java new file mode 100644 index 0000000..2007dc4 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/BitmapCallback.java @@ -0,0 +1,19 @@ +package com.demo.lib.common.okhttp.callback; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; + +import okhttp3.Response; + +/** + * Created by zhy on 15/12/14. + */ +public abstract class BitmapCallback extends Callback<Bitmap> +{ + @Override + public Bitmap parseNetworkResponse(Response response , int id) throws Exception + { + return BitmapFactory.decodeStream(response.body().byteStream()); + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/Callback.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/Callback.java new file mode 100644 index 0000000..d4b094a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/Callback.java @@ -0,0 +1,82 @@ +package com.demo.lib.common.okhttp.callback; + +import okhttp3.Call; +import okhttp3.Request; +import okhttp3.Response; + +public abstract class Callback<T> +{ + /** + * UI Thread + * + * @param request + */ + public void onBefore(Request request, int id) + { + } + + /** + * UI Thread + * + * @param + */ + public void onAfter(int id) + { + } + + /** + * UI Thread + * + * @param progress + */ + public void inProgress(float progress, long total , int id) + { + + } + + /** + * if you parse reponse code in parseNetworkResponse, you should make this method return true. + * + * @param response + * @return + */ + public boolean validateReponse(Response response, int id) + { + return response.isSuccessful(); + } + + /** + * Thread Pool Thread + * + * @param response + */ + public abstract T parseNetworkResponse(Response response, int id) throws Exception; + + public abstract void onError(Call call, Exception e, int id); + + public abstract void onResponse(T response, int id); + + + public static Callback CALLBACK_DEFAULT = new Callback() + { + + @Override + public Object parseNetworkResponse(Response response, int id) throws Exception + { + return null; + } + + @Override + public void onError(Call call, Exception e, int id) + { + + } + + @Override + public void onResponse(Object response, int id) + { + + } + }; + +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/FileCallBack.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/FileCallBack.java new file mode 100644 index 0000000..da8af26 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/FileCallBack.java @@ -0,0 +1,100 @@ +package com.demo.lib.common.okhttp.callback; + +import com.demo.lib.common.okhttp.OkHttpUtils; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import okhttp3.Response; + +/** + * Created by zhy on 15/12/15. + */ +public abstract class FileCallBack extends Callback<File> +{ + /** + * 鐩爣鏂囦欢瀛樺偍鐨勬枃浠跺す璺緞 + */ + private String destFileDir; + /** + * 鐩爣鏂囦欢瀛樺偍鐨勬枃浠跺悕 + */ + private String destFileName; + + + public FileCallBack(String destFileDir, String destFileName) + { + this.destFileDir = destFileDir; + this.destFileName = destFileName; + } + + + @Override + public File parseNetworkResponse(Response response, int id) throws Exception + { + return saveFile(response,id); + } + + + public File saveFile(Response response,final int id) throws IOException + { + InputStream is = null; + byte[] buf = new byte[2048]; + int len = 0; + FileOutputStream fos = null; + try + { + is = response.body().byteStream(); + final long total = response.body().contentLength(); + + long sum = 0; + + File dir = new File(destFileDir); + if (!dir.exists()) + { + dir.mkdirs(); + } + File file = new File(dir, destFileName); + fos = new FileOutputStream(file); + while ((len = is.read(buf)) != -1) + { + sum += len; + fos.write(buf, 0, len); + final long finalSum = sum; + OkHttpUtils.getInstance().getDelivery().execute(new Runnable() + { + @Override + public void run() + { + + inProgress(finalSum * 1.0f / total,total,id); + } + }); + } + fos.flush(); + + return file; + + } finally + { + try + { + response.body().close(); + if (is != null) is.close(); + } catch (IOException e) + { + } + try + { + if (fos != null) fos.close(); + } catch (IOException e) + { + } + + } + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/GenericsCallback.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/GenericsCallback.java new file mode 100644 index 0000000..5c105cf --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/GenericsCallback.java @@ -0,0 +1,30 @@ +package com.demo.lib.common.okhttp.callback; + +import java.io.IOException; +import java.lang.reflect.ParameterizedType; + +import okhttp3.Response; + +/** + * Created by JimGong on 2016/6/23. + */ + +public abstract class GenericsCallback<T> extends Callback<T> { + IGenericsSerializator mGenericsSerializator; + + public GenericsCallback(IGenericsSerializator serializator) { + mGenericsSerializator = serializator; + } + + @Override + public T parseNetworkResponse(Response response, int id) throws IOException { + String string = response.body().string(); + Class<T> entityClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; + if (entityClass == String.class) { + return (T) string; + } + T bean = mGenericsSerializator.transform(string, entityClass); + return bean; + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/IGenericsSerializator.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/IGenericsSerializator.java new file mode 100644 index 0000000..c4b87be --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/IGenericsSerializator.java @@ -0,0 +1,8 @@ +package com.demo.lib.common.okhttp.callback; + +/** + * Created by JimGong on 2016/6/23. + */ +public interface IGenericsSerializator { + <T> T transform(String response, Class<T> classOfT); +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/StringCallback.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/StringCallback.java new file mode 100644 index 0000000..6aba680 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/callback/StringCallback.java @@ -0,0 +1,17 @@ +package com.demo.lib.common.okhttp.callback; + +import java.io.IOException; + +import okhttp3.Response; + +/** + * Created by zhy on 15/12/14. + */ +public abstract class StringCallback extends Callback<String> +{ + @Override + public String parseNetworkResponse(Response response, int id) throws IOException + { + return response.body().string(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/CookieJarImpl.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/CookieJarImpl.java new file mode 100644 index 0000000..89c659a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/CookieJarImpl.java @@ -0,0 +1,41 @@ +package com.demo.lib.common.okhttp.cookie; + +import com.demo.lib.common.okhttp.cookie.store.CookieStore; +import com.demo.lib.common.okhttp.utils.Exceptions; + +import java.util.List; + +import okhttp3.Cookie; +import okhttp3.CookieJar; +import okhttp3.HttpUrl; + +/** + * Created by zhy on 16/3/10. + */ +public class CookieJarImpl implements CookieJar +{ + private CookieStore cookieStore; + + public CookieJarImpl(CookieStore cookieStore) + { + if (cookieStore == null) Exceptions.illegalArgument("cookieStore can not be null."); + this.cookieStore = cookieStore; + } + + @Override + public synchronized void saveFromResponse(HttpUrl url, List<Cookie> cookies) + { + cookieStore.add(url, cookies); + } + + @Override + public synchronized List<Cookie> loadForRequest(HttpUrl url) + { + return cookieStore.get(url); + } + + public CookieStore getCookieStore() + { + return cookieStore; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/CookieStore.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/CookieStore.java new file mode 100644 index 0000000..d4e4e6e --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/CookieStore.java @@ -0,0 +1,21 @@ +package com.demo.lib.common.okhttp.cookie.store; + +import java.util.List; + +import okhttp3.Cookie; +import okhttp3.HttpUrl; + +public interface CookieStore +{ + + void add(HttpUrl uri, List<Cookie> cookie); + + List<Cookie> get(HttpUrl uri); + + List<Cookie> getCookies(); + + boolean remove(HttpUrl uri, Cookie cookie); + + boolean removeAll(); + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.java new file mode 100644 index 0000000..755980a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/HasCookieStore.java @@ -0,0 +1,9 @@ +package com.demo.lib.common.okhttp.cookie.store; + +/** + * Created by zhy on 16/3/10. + */ +public interface HasCookieStore +{ + CookieStore getCookieStore(); +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.java new file mode 100644 index 0000000..41fd677 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/MemoryCookieStore.java @@ -0,0 +1,94 @@ +package com.demo.lib.common.okhttp.cookie.store; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import okhttp3.Cookie; +import okhttp3.HttpUrl; + +/** + * Created by zhy on 16/3/10. + */ +public class MemoryCookieStore implements CookieStore +{ + private final HashMap<String, List<Cookie>> allCookies = new HashMap<>(); + + @Override + public void add(HttpUrl url, List<Cookie> cookies) + { + List<Cookie> oldCookies = allCookies.get(url.host()); + + if (oldCookies != null) + { + Iterator<Cookie> itNew = cookies.iterator(); + Iterator<Cookie> itOld = oldCookies.iterator(); + while (itNew.hasNext()) + { + String va = itNew.next().name(); + while (va != null && itOld.hasNext()) + { + String v = itOld.next().name(); + if (v != null && va.equals(v)) + { + itOld.remove(); + } + } + } + oldCookies.addAll(cookies); + } else + { + allCookies.put(url.host(), cookies); + } + + + } + + @Override + public List<Cookie> get(HttpUrl uri) + { + List<Cookie> cookies = allCookies.get(uri.host()); + if (cookies == null) + { + cookies = new ArrayList<>(); + allCookies.put(uri.host(), cookies); + } + return cookies; + + } + + @Override + public boolean removeAll() + { + allCookies.clear(); + return true; + } + + @Override + public List<Cookie> getCookies() + { + List<Cookie> cookies = new ArrayList<>(); + Set<String> httpUrls = allCookies.keySet(); + for (String url : httpUrls) + { + cookies.addAll(allCookies.get(url)); + } + return cookies; + } + + + @Override + public boolean remove(HttpUrl uri, Cookie cookie) + { + List<Cookie> cookies = allCookies.get(uri.host()); + if (cookie != null) + { + return cookies.remove(cookie); + } + return false; + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.java new file mode 100644 index 0000000..f484b7c --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/PersistentCookieStore.java @@ -0,0 +1,281 @@ +package com.demo.lib.common.okhttp.cookie.store; + +import android.content.Context; +import android.content.SharedPreferences; +import android.text.TextUtils; +import android.util.Log; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +import okhttp3.Cookie; +import okhttp3.HttpUrl; + +/** + * <pre> + * OkHttpClient client = new OkHttpClient.Builder() + * .cookieJar(new JavaNetCookieJar(new CookieManager( + * new PersistentCookieStore(getApplicationContext()), + * CookiePolicy.ACCEPT_ALL)) + * .build(); + * + * </pre> + * <p/> + * from http://stackoverflow.com/questions/25461792/persistent-cookie-store-using-okhttp-2-on-android + * <p/> + * <br/> + * A persistent cookie store which implements the Apache HttpClient CookieStore interface. + * Cookies are stored and will persist on the user's device between application sessions since they + * are serialized and stored in SharedPreferences. Instances of this class are + * designed to be used with AsyncHttpClient#setCookieStore, but can also be used with a + * regular old apache HttpClient/HttpContext if you prefer. + */ +public class PersistentCookieStore implements CookieStore +{ + + private static final String LOG_TAG = "PersistentCookieStore"; + private static final String COOKIE_PREFS = "CookiePrefsFile"; + private static final String COOKIE_NAME_PREFIX = "cookie_"; + + private final HashMap<String, ConcurrentHashMap<String, Cookie>> cookies; + private final SharedPreferences cookiePrefs; + + /** + * Construct a persistent cookie store. + * + * @param context Context to attach cookie store to + */ + public PersistentCookieStore(Context context) + { + cookiePrefs = context.getSharedPreferences(COOKIE_PREFS, 0); + cookies = new HashMap<String, ConcurrentHashMap<String, Cookie>>(); + + // Load any previously stored cookies into the store + Map<String, ?> prefsMap = cookiePrefs.getAll(); + for (Map.Entry<String, ?> entry : prefsMap.entrySet()) + { + if (entry.getValue() != null && !((String) entry.getValue()).startsWith(COOKIE_NAME_PREFIX)) + { + String[] cookieNames = TextUtils.split((String) entry.getValue(), ","); + for (String name : cookieNames) + { + String encodedCookie = cookiePrefs.getString(COOKIE_NAME_PREFIX + name, null); + if (encodedCookie != null) + { + Cookie decodedCookie = decodeCookie(encodedCookie); + if (decodedCookie != null) + { + if (!cookies.containsKey(entry.getKey())) + cookies.put(entry.getKey(), new ConcurrentHashMap<String, Cookie>()); + cookies.get(entry.getKey()).put(name, decodedCookie); + } + } + } + + } + } + } + + protected void add(HttpUrl uri, Cookie cookie) + { + String name = getCookieToken(cookie); + + if (cookie.persistent()) + { + if (!cookies.containsKey(uri.host())) + { + cookies.put(uri.host(), new ConcurrentHashMap<String, Cookie>()); + } + cookies.get(uri.host()).put(name, cookie); + } else + { + if (cookies.containsKey(uri.host())) + { + cookies.get(uri.host()).remove(name); + }else + { + return ; + } + } + + // Save cookie into persistent store + SharedPreferences.Editor prefsWriter = cookiePrefs.edit(); + prefsWriter.putString(uri.host(), TextUtils.join(",", cookies.get(uri.host()).keySet())); + prefsWriter.putString(COOKIE_NAME_PREFIX + name, encodeCookie(new SerializableHttpCookie(cookie))); + prefsWriter.apply(); + } + + protected String getCookieToken(Cookie cookie) + { + return cookie.name() + cookie.domain(); + } + + @Override + public void add(HttpUrl uri, List<Cookie> cookies) + { + for (Cookie cookie : cookies) + { + add(uri, cookie); + } + } + + @Override + public List<Cookie> get(HttpUrl uri) + { + ArrayList<Cookie> ret = new ArrayList<Cookie>(); + if (cookies.containsKey(uri.host())) + { + Collection<Cookie> cookies = this.cookies.get(uri.host()).values(); + for (Cookie cookie : cookies) + { + if (isCookieExpired(cookie)) + { + remove(uri, cookie); + } else + { + ret.add(cookie); + } + } + } + + return ret; + } + + private static boolean isCookieExpired(Cookie cookie) + { + return cookie.expiresAt() < System.currentTimeMillis(); + } + + @Override + public boolean removeAll() + { + SharedPreferences.Editor prefsWriter = cookiePrefs.edit(); + prefsWriter.clear(); + prefsWriter.apply(); + cookies.clear(); + return true; + } + + + @Override + public boolean remove(HttpUrl uri, Cookie cookie) + { + String name = getCookieToken(cookie); + + if (cookies.containsKey(uri.host()) && cookies.get(uri.host()).containsKey(name)) + { + cookies.get(uri.host()).remove(name); + + SharedPreferences.Editor prefsWriter = cookiePrefs.edit(); + if (cookiePrefs.contains(COOKIE_NAME_PREFIX + name)) + { + prefsWriter.remove(COOKIE_NAME_PREFIX + name); + } + prefsWriter.putString(uri.host(), TextUtils.join(",", cookies.get(uri.host()).keySet())); + prefsWriter.apply(); + + return true; + } else + { + return false; + } + } + + @Override + public List<Cookie> getCookies() + { + ArrayList<Cookie> ret = new ArrayList<Cookie>(); + for (String key : cookies.keySet()) + ret.addAll(cookies.get(key).values()); + + return ret; + } + + + protected String encodeCookie(SerializableHttpCookie cookie) + { + if (cookie == null) + return null; + ByteArrayOutputStream os = new ByteArrayOutputStream(); + try + { + ObjectOutputStream outputStream = new ObjectOutputStream(os); + outputStream.writeObject(cookie); + } catch (IOException e) + { + Log.d(LOG_TAG, "IOException in encodeCookie", e); + return null; + } + + return byteArrayToHexString(os.toByteArray()); + } + + protected Cookie decodeCookie(String cookieString) + { + byte[] bytes = hexStringToByteArray(cookieString); + ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes); + Cookie cookie = null; + try + { + ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream); + cookie = ((SerializableHttpCookie) objectInputStream.readObject()).getCookie(); + } catch (IOException e) + { + Log.d(LOG_TAG, "IOException in decodeCookie", e); + } catch (ClassNotFoundException e) + { + Log.d(LOG_TAG, "ClassNotFoundException in decodeCookie", e); + } + + return cookie; + } + + /** + * Using some super basic byte array <-> hex conversions so we don't have to rely on any + * large Base64 libraries. Can be overridden if you like! + * + * @param bytes byte array to be converted + * @return string containing hex values + */ + protected String byteArrayToHexString(byte[] bytes) + { + StringBuilder sb = new StringBuilder(bytes.length * 2); + for (byte element : bytes) + { + int v = element & 0xff; + if (v < 16) + { + sb.append('0'); + } + sb.append(Integer.toHexString(v)); + } + return sb.toString().toUpperCase(Locale.US); + } + + /** + * Converts hex values from strings to byte arra + * + * @param hexString string of hex-encoded values + * @return decoded byte array + */ + protected byte[] hexStringToByteArray(String hexString) + { + int len = hexString.length(); + byte[] data = new byte[len / 2]; + for (int i = 0; i < len; i += 2) + { + data[i / 2] = (byte) ((Character.digit(hexString.charAt(i), 16) << 4) + Character.digit(hexString.charAt(i + 1), 16)); + } + return data; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.java new file mode 100644 index 0000000..179a25d --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/cookie/store/SerializableHttpCookie.java @@ -0,0 +1,74 @@ +package com.demo.lib.common.okhttp.cookie.store; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +import okhttp3.Cookie; + +/** + * from http://stackoverflow.com/questions/25461792/persistent-cookie-store-using-okhttp-2-on-android + * and<br/> + * http://www.geebr.com/post/okHttp3%E4%B9%8BCookies%E7%AE%A1%E7%90%86%E5%8F%8A%E6%8C%81%E4%B9%85%E5%8C%96 + */ + +public class SerializableHttpCookie implements Serializable +{ + private static final long serialVersionUID = 6374381323722046732L; + + private transient final Cookie cookie; + private transient Cookie clientCookie; + + public SerializableHttpCookie(Cookie cookie) + { + this.cookie = cookie; + } + + public Cookie getCookie() + { + Cookie bestCookie = cookie; + if (clientCookie != null) + { + bestCookie = clientCookie; + } + + return bestCookie; + } + + private void writeObject(ObjectOutputStream out) throws IOException + { + out.writeObject(cookie.name()); + out.writeObject(cookie.value()); + out.writeLong(cookie.expiresAt()); + out.writeObject(cookie.domain()); + out.writeObject(cookie.path()); + out.writeBoolean(cookie.secure()); + out.writeBoolean(cookie.httpOnly()); + out.writeBoolean(cookie.hostOnly()); + out.writeBoolean(cookie.persistent()); + } + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException + { + String name = (String) in.readObject(); + String value = (String) in.readObject(); + long expiresAt = in.readLong(); + String domain = (String) in.readObject(); + String path = (String) in.readObject(); + boolean secure = in.readBoolean(); + boolean httpOnly = in.readBoolean(); + boolean hostOnly = in.readBoolean(); + boolean persistent = in.readBoolean(); + Cookie.Builder builder = new Cookie.Builder(); + builder = builder.name(name); + builder = builder.value(value); + builder = builder.expiresAt(expiresAt); + builder = hostOnly ? builder.hostOnlyDomain(domain) : builder.domain(domain); + builder = builder.path(path); + builder = secure ? builder.secure() : builder; + builder = httpOnly ? builder.httpOnly() : builder; + clientCookie = builder.build(); + + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/https/HttpsUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/https/HttpsUtils.java new file mode 100644 index 0000000..ee712da --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/https/HttpsUtils.java @@ -0,0 +1,232 @@ +package com.demo.lib.common.okhttp.https; + +import java.io.IOException; +import java.io.InputStream; +import java.security.KeyManagementException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; + +import javax.net.ssl.HostnameVerifier; +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSocketFactory; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509TrustManager; + +/** + * Created by zhy on 15/12/14. + */ +public class HttpsUtils +{ + public static class SSLParams + { + public SSLSocketFactory sSLSocketFactory; + public X509TrustManager trustManager; + } + + public static SSLParams getSslSocketFactory(InputStream[] certificates, InputStream bksFile, String password) + { + SSLParams sslParams = new SSLParams(); + try + { + TrustManager[] trustManagers = prepareTrustManager(certificates); + KeyManager[] keyManagers = prepareKeyManager(bksFile, password); + SSLContext sslContext = SSLContext.getInstance("TLS"); + X509TrustManager trustManager = null; + if (trustManagers != null) + { + trustManager = new MyTrustManager(chooseTrustManager(trustManagers)); + } else + { + trustManager = new UnSafeTrustManager(); + } + sslContext.init(keyManagers, new TrustManager[]{trustManager},null); + sslParams.sSLSocketFactory = sslContext.getSocketFactory(); + sslParams.trustManager = trustManager; + return sslParams; + } catch (NoSuchAlgorithmException e) + { + throw new AssertionError(e); + } catch (KeyManagementException e) + { + throw new AssertionError(e); + } catch (KeyStoreException e) + { + throw new AssertionError(e); + } + } + + private class UnSafeHostnameVerifier implements HostnameVerifier + { + @Override + public boolean verify(String hostname, SSLSession session) + { + return true; + } + } + + private static class UnSafeTrustManager implements X509TrustManager + { + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) + throws CertificateException + { + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) + throws CertificateException + { + } + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[]{}; + } + } + + private static TrustManager[] prepareTrustManager(InputStream... certificates) + { + if (certificates == null || certificates.length <= 0) return null; + try + { + + CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509"); + KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType()); + keyStore.load(null); + int index = 0; + for (InputStream certificate : certificates) + { + String certificateAlias = Integer.toString(index++); + keyStore.setCertificateEntry(certificateAlias, certificateFactory.generateCertificate(certificate)); + try + { + if (certificate != null) + certificate.close(); + } catch (IOException e) + + { + } + } + TrustManagerFactory trustManagerFactory = null; + + trustManagerFactory = TrustManagerFactory. + getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init(keyStore); + + TrustManager[] trustManagers = trustManagerFactory.getTrustManagers(); + + return trustManagers; + } catch (NoSuchAlgorithmException e) + { + e.printStackTrace(); + } catch (CertificateException e) + { + e.printStackTrace(); + } catch (KeyStoreException e) + { + e.printStackTrace(); + } catch (Exception e) + { + e.printStackTrace(); + } + return null; + + } + + private static KeyManager[] prepareKeyManager(InputStream bksFile, String password) + { + try + { + if (bksFile == null || password == null) return null; + + KeyStore clientKeyStore = KeyStore.getInstance("BKS"); + clientKeyStore.load(bksFile, password.toCharArray()); + KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + keyManagerFactory.init(clientKeyStore, password.toCharArray()); + return keyManagerFactory.getKeyManagers(); + + } catch (KeyStoreException e) + { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) + { + e.printStackTrace(); + } catch (UnrecoverableKeyException e) + { + e.printStackTrace(); + } catch (CertificateException e) + { + e.printStackTrace(); + } catch (IOException e) + { + e.printStackTrace(); + } catch (Exception e) + { + e.printStackTrace(); + } + return null; + } + + private static X509TrustManager chooseTrustManager(TrustManager[] trustManagers) + { + for (TrustManager trustManager : trustManagers) + { + if (trustManager instanceof X509TrustManager) + { + return (X509TrustManager) trustManager; + } + } + return null; + } + + + private static class MyTrustManager implements X509TrustManager + { + private X509TrustManager defaultTrustManager; + private X509TrustManager localTrustManager; + + public MyTrustManager(X509TrustManager localTrustManager) throws NoSuchAlgorithmException, KeyStoreException + { + TrustManagerFactory var4 = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + var4.init((KeyStore) null); + defaultTrustManager = chooseTrustManager(var4.getTrustManagers()); + this.localTrustManager = localTrustManager; + } + + + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException + { + + } + + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException + { + try + { + defaultTrustManager.checkServerTrusted(chain, authType); + } catch (CertificateException ce) + { + localTrustManager.checkServerTrusted(chain, authType); + } + } + + + @Override + public X509Certificate[] getAcceptedIssuers() + { + return new X509Certificate[0]; + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/log/LoggerInterceptor.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/log/LoggerInterceptor.java new file mode 100644 index 0000000..da7aecf --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/log/LoggerInterceptor.java @@ -0,0 +1,163 @@ +package com.demo.lib.common.okhttp.log; + +import android.text.TextUtils; +import android.util.Log; + +import java.io.IOException; + +import okhttp3.Headers; +import okhttp3.Interceptor; +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.Response; +import okhttp3.ResponseBody; +import okio.Buffer; + +/** + * Created by zhy on 16/3/1. + */ +public class LoggerInterceptor implements Interceptor +{ + public static final String TAG = "OkHttpUtils"; + private String tag; + private boolean showResponse; + + public LoggerInterceptor(String tag, boolean showResponse) + { + if (TextUtils.isEmpty(tag)) + { + tag = TAG; + } + this.showResponse = showResponse; + this.tag = tag; + } + + public LoggerInterceptor(String tag) + { + this(tag, false); + } + + @Override + public Response intercept(Chain chain) throws IOException + { + Request request = chain.request(); + logForRequest(request); + Response response = chain.proceed(request); + return logForResponse(response); + } + + private Response logForResponse(Response response) + { + try + { + //===>response log + Log.e(tag, "========response'log======="); + Response.Builder builder = response.newBuilder(); + Response clone = builder.build(); + Log.e(tag, "url : " + clone.request().url()); + Log.e(tag, "code : " + clone.code()); + Log.e(tag, "protocol : " + clone.protocol()); + if (!TextUtils.isEmpty(clone.message())) + Log.e(tag, "message : " + clone.message()); + + if (showResponse) + { + ResponseBody body = clone.body(); + if (body != null) + { + MediaType mediaType = body.contentType(); + if (mediaType != null) + { + Log.e(tag, "responseBody's contentType : " + mediaType.toString()); + if (isText(mediaType)) + { + String resp = body.string(); + Log.e(tag, "responseBody's content : " + resp); + + body = ResponseBody.create(mediaType, resp); + return response.newBuilder().body(body).build(); + } else + { + Log.e(tag, "responseBody's content : " + " maybe [file part] , too large too print , ignored!"); + } + } + } + } + + Log.e(tag, "========response'log=======end"); + } catch (Exception e) + { +// e.printStackTrace(); + } + + return response; + } + + private void logForRequest(Request request) + { + try + { + String url = request.url().toString(); + Headers headers = request.headers(); + + Log.e(tag, "========request'log======="); + Log.e(tag, "method : " + request.method()); + Log.e(tag, "url : " + url); + if (headers != null && headers.size() > 0) + { + Log.e(tag, "headers : " + headers.toString()); + } + RequestBody requestBody = request.body(); + if (requestBody != null) + { + MediaType mediaType = requestBody.contentType(); + if (mediaType != null) + { + Log.e(tag, "requestBody's contentType : " + mediaType.toString()); + if (isText(mediaType)) + { + Log.e(tag, "requestBody's content : " + bodyToString(request)); + } else + { + Log.e(tag, "requestBody's content : " + " maybe [file part] , too large too print , ignored!"); + } + } + } + Log.e(tag, "========request'log=======end"); + } catch (Exception e) + { +// e.printStackTrace(); + } + } + + private boolean isText(MediaType mediaType) + { + if (mediaType.type() != null && mediaType.type().equals("text")) + { + return true; + } + if (mediaType.subtype() != null) + { + return mediaType.subtype().equals("json") || + mediaType.subtype().equals("xml") || + mediaType.subtype().equals("html") || + mediaType.subtype().equals("webviewhtml"); + } + return false; + } + + private String bodyToString(final Request request) + { + try + { + final Request copy = request.newBuilder().build(); + final Buffer buffer = new Buffer(); + copy.body().writeTo(buffer); + return buffer.readUtf8(); + } catch (final IOException e) + { + return "something error when show requestBody."; + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/CountingRequestBody.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/CountingRequestBody.java new file mode 100644 index 0000000..1fd05c5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/CountingRequestBody.java @@ -0,0 +1,91 @@ +package com.demo.lib.common.okhttp.request; + +import java.io.IOException; + +import okhttp3.MediaType; +import okhttp3.RequestBody; +import okio.Buffer; +import okio.BufferedSink; +import okio.ForwardingSink; +import okio.Okio; +import okio.Sink; + +/** + * Decorates an OkHttp request body to count the number of bytes written when writing it. Can + * decorate any request body, but is most useful for tracking the upload progress of large + * multipart requests. + * + * @author Leo Nikkil盲 + */ +public class CountingRequestBody extends RequestBody +{ + + protected RequestBody delegate; + protected Listener listener; + + protected CountingSink countingSink; + + public CountingRequestBody(RequestBody delegate, Listener listener) + { + this.delegate = delegate; + this.listener = listener; + } + + @Override + public MediaType contentType() + { + return delegate.contentType(); + } + + @Override + public long contentLength() + { + try + { + return delegate.contentLength(); + } catch (IOException e) + { + e.printStackTrace(); + } + return -1; + } + + @Override + public void writeTo(BufferedSink sink) throws IOException + { + + countingSink = new CountingSink(sink); + BufferedSink bufferedSink = Okio.buffer(countingSink); + + delegate.writeTo(bufferedSink); + + bufferedSink.flush(); + } + + protected final class CountingSink extends ForwardingSink + { + + private long bytesWritten = 0; + + public CountingSink(Sink delegate) + { + super(delegate); + } + + @Override + public void write(Buffer source, long byteCount) throws IOException + { + super.write(source, byteCount); + + bytesWritten += byteCount; + listener.onRequestProgress(bytesWritten, contentLength()); + } + + } + + public interface Listener + { + void onRequestProgress(long bytesWritten, long contentLength); + } + +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/GetRequest.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/GetRequest.java new file mode 100644 index 0000000..6375009 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/GetRequest.java @@ -0,0 +1,31 @@ +package com.demo.lib.common.okhttp.request; + +import java.util.Map; + +import okhttp3.Request; +import okhttp3.RequestBody; + +/** + * Created by zhy on 15/12/14. + */ +public class GetRequest extends OkHttpRequest +{ + public GetRequest(String url, Object tag, Map<String, String> params, Map<String, String> headers,int id) + { + super(url, tag, params, headers,id); + } + + @Override + protected RequestBody buildRequestBody() + { + return null; + } + + @Override + protected Request buildRequest(RequestBody requestBody) + { + return builder.get().build(); + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OkHttpRequest.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OkHttpRequest.java new file mode 100644 index 0000000..46f4a24 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OkHttpRequest.java @@ -0,0 +1,95 @@ +package com.demo.lib.common.okhttp.request; + + +import com.demo.lib.common.okhttp.callback.Callback; +import com.demo.lib.common.okhttp.utils.Exceptions; + +import java.util.Map; + +import okhttp3.Headers; +import okhttp3.Request; +import okhttp3.RequestBody; + +/** + * Created by zhy on 15/11/6. + */ +public abstract class OkHttpRequest +{ + protected String url; + protected Object tag; + protected Map<String, String> params; + protected Map<String, String> headers; + protected int id; + + protected Request.Builder builder = new Request.Builder(); + + protected OkHttpRequest(String url, Object tag, + Map<String, String> params, Map<String, String> headers,int id) + { + this.url = url; + this.tag = tag; + this.params = params; + this.headers = headers; + this.id = id ; + + if (url == null) + { + Exceptions.illegalArgument("url can not be null."); + } + + initBuilder(); + } + + + + /** + * 鍒濆鍖栦竴浜涘熀鏈弬鏁� url , tag , headers + */ + private void initBuilder() + { + builder.url(url).tag(tag); + appendHeaders(); + } + + protected abstract RequestBody buildRequestBody(); + + protected RequestBody wrapRequestBody(RequestBody requestBody, final Callback callback) + { + return requestBody; + } + + protected abstract Request buildRequest(RequestBody requestBody); + + public RequestCall build() + { + return new RequestCall(this); + } + + + public Request generateRequest(Callback callback) + { + RequestBody requestBody = buildRequestBody(); + RequestBody wrappedRequestBody = wrapRequestBody(requestBody, callback); + Request request = buildRequest(wrappedRequestBody); + return request; + } + + + protected void appendHeaders() + { + Headers.Builder headerBuilder = new Headers.Builder(); + if (headers == null || headers.isEmpty()) return; + + for (String key : headers.keySet()) + { + headerBuilder.add(key, headers.get(key)); + } + builder.headers(headerBuilder.build()); + } + + public int getId() + { + return id ; + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OtherRequest.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OtherRequest.java new file mode 100644 index 0000000..71ad1a8 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/OtherRequest.java @@ -0,0 +1,74 @@ +package com.demo.lib.common.okhttp.request; + +import android.text.TextUtils; + +import com.demo.lib.common.okhttp.OkHttpUtils; +import com.demo.lib.common.okhttp.utils.Exceptions; + +import java.util.Map; + +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; +import okhttp3.internal.http.HttpMethod; + +/** + * Created by zhy on 16/2/23. + */ +public class OtherRequest extends OkHttpRequest +{ + private static MediaType MEDIA_TYPE_PLAIN = MediaType.parse("text/plain;charset=utf-8"); + + private RequestBody requestBody; + private String method; + private String content; + + public OtherRequest(RequestBody requestBody, String content, String method, String url, Object tag, Map<String, String> params, Map<String, String> headers,int id) + { + super(url, tag, params, headers,id); + this.requestBody = requestBody; + this.method = method; + this.content = content; + + } + + @Override + protected RequestBody buildRequestBody() + { + if (requestBody == null && TextUtils.isEmpty(content) && HttpMethod.requiresRequestBody(method)) + { + Exceptions.illegalArgument("requestBody and content can not be null in method:" + method); + } + + if (requestBody == null && !TextUtils.isEmpty(content)) + { + requestBody = RequestBody.create(MEDIA_TYPE_PLAIN, content); + } + + return requestBody; + } + + @Override + protected Request buildRequest(RequestBody requestBody) + { + if (method.equals(OkHttpUtils.METHOD.PUT)) + { + builder.put(requestBody); + } else if (method.equals(OkHttpUtils.METHOD.DELETE)) + { + if (requestBody == null) + builder.delete(); + else + builder.delete(requestBody); + } else if (method.equals(OkHttpUtils.METHOD.HEAD)) + { + builder.head(); + } else if (method.equals(OkHttpUtils.METHOD.PATCH)) + { + builder.patch(requestBody); + } + + return builder.build(); + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFileRequest.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFileRequest.java new file mode 100644 index 0000000..40e7b0e --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFileRequest.java @@ -0,0 +1,79 @@ +package com.demo.lib.common.okhttp.request; + + +import com.demo.lib.common.okhttp.OkHttpUtils; +import com.demo.lib.common.okhttp.callback.Callback; +import com.demo.lib.common.okhttp.utils.Exceptions; + +import java.io.File; +import java.util.Map; + +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; + +/** + * Created by zhy on 15/12/14. + */ +public class PostFileRequest extends OkHttpRequest +{ + private static MediaType MEDIA_TYPE_STREAM = MediaType.parse("application/octet-stream"); + + private File file; + private MediaType mediaType; + + public PostFileRequest(String url, Object tag, Map<String, String> params, Map<String, String> headers, File file, MediaType mediaType,int id) + { + super(url, tag, params, headers,id); + this.file = file; + this.mediaType = mediaType; + + if (this.file == null) + { + Exceptions.illegalArgument("the file can not be null !"); + } + if (this.mediaType == null) + { + this.mediaType = MEDIA_TYPE_STREAM; + } + } + + @Override + protected RequestBody buildRequestBody() + { + return RequestBody.create(mediaType, file); + } + + @Override + protected RequestBody wrapRequestBody(RequestBody requestBody, final Callback callback) + { + if (callback == null) return requestBody; + CountingRequestBody countingRequestBody = new CountingRequestBody(requestBody, new CountingRequestBody.Listener() + { + @Override + public void onRequestProgress(final long bytesWritten, final long contentLength) + { + + OkHttpUtils.getInstance().getDelivery().execute(new Runnable() + { + @Override + public void run() + { + callback.inProgress(bytesWritten * 1.0f / contentLength,contentLength,id); + } + }); + + } + }); + return countingRequestBody; + } + + @Override + protected Request buildRequest(RequestBody requestBody) + { + return builder.post(requestBody).build(); + } + + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFormRequest.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFormRequest.java new file mode 100644 index 0000000..2549dcb --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostFormRequest.java @@ -0,0 +1,131 @@ +package com.demo.lib.common.okhttp.request; + + +import com.demo.lib.common.okhttp.OkHttpUtils; +import com.demo.lib.common.okhttp.builder.PostFormBuilder; +import com.demo.lib.common.okhttp.callback.Callback; + +import java.io.UnsupportedEncodingException; +import java.net.FileNameMap; +import java.net.URLConnection; +import java.net.URLEncoder; +import java.util.List; +import java.util.Map; + +import okhttp3.FormBody; +import okhttp3.Headers; +import okhttp3.MediaType; +import okhttp3.MultipartBody; +import okhttp3.Request; +import okhttp3.RequestBody; + +/** + * Created by zhy on 15/12/14. + */ +public class PostFormRequest extends OkHttpRequest +{ + private List<PostFormBuilder.FileInput> files; + + public PostFormRequest(String url, Object tag, Map<String, String> params, Map<String, String> headers, List<PostFormBuilder.FileInput> files, int id) + { + super(url, tag, params, headers,id); + this.files = files; + } + + @Override + protected RequestBody buildRequestBody() + { + if (files == null || files.isEmpty()) + { + FormBody.Builder builder = new FormBody.Builder(); + addParams(builder); + FormBody formBody = builder.build(); + return formBody; + } else + { + MultipartBody.Builder builder = new MultipartBody.Builder() + .setType(MultipartBody.FORM); + addParams(builder); + + for (int i = 0; i < files.size(); i++) + { + PostFormBuilder.FileInput fileInput = files.get(i); + RequestBody fileBody = RequestBody.create(MediaType.parse(guessMimeType(fileInput.filename)), fileInput.file); + builder.addFormDataPart(fileInput.key, fileInput.filename, fileBody); + } + return builder.build(); + } + } + + @Override + protected RequestBody wrapRequestBody(RequestBody requestBody, final Callback callback) + { + if (callback == null) return requestBody; + CountingRequestBody countingRequestBody = new CountingRequestBody(requestBody, new CountingRequestBody.Listener() + { + @Override + public void onRequestProgress(final long bytesWritten, final long contentLength) + { + + OkHttpUtils.getInstance().getDelivery().execute(new Runnable() + { + @Override + public void run() + { + callback.inProgress(bytesWritten * 1.0f / contentLength,contentLength,id); + } + }); + + } + }); + return countingRequestBody; + } + + @Override + protected Request buildRequest(RequestBody requestBody) + { + return builder.post(requestBody).build(); + } + + private String guessMimeType(String path) + { + FileNameMap fileNameMap = URLConnection.getFileNameMap(); + String contentTypeFor = null; + try + { + contentTypeFor = fileNameMap.getContentTypeFor(URLEncoder.encode(path, "UTF-8")); + } catch (UnsupportedEncodingException e) + { + e.printStackTrace(); + } + if (contentTypeFor == null) + { + contentTypeFor = "application/octet-stream"; + } + return contentTypeFor; + } + + private void addParams(MultipartBody.Builder builder) + { + if (params != null && !params.isEmpty()) + { + for (String key : params.keySet()) + { + builder.addPart(Headers.of("Content-Disposition", "form-data; name=\"" + key + "\""), + RequestBody.create(null, params.get(key))); + } + } + } + + private void addParams(FormBody.Builder builder) + { + if (params != null) + { + for (String key : params.keySet()) + { + builder.add(key, params.get(key)); + } + } + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostStringRequest.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostStringRequest.java new file mode 100644 index 0000000..e32aaee --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/PostStringRequest.java @@ -0,0 +1,52 @@ +package com.demo.lib.common.okhttp.request; + +import com.demo.lib.common.okhttp.utils.Exceptions; + +import java.util.Map; + +import okhttp3.MediaType; +import okhttp3.Request; +import okhttp3.RequestBody; + +/** + * Created by zhy on 15/12/14. + */ +public class PostStringRequest extends OkHttpRequest +{ + private static MediaType MEDIA_TYPE_PLAIN = MediaType.parse("text/plain;charset=utf-8"); + + private String content; + private MediaType mediaType; + + + public PostStringRequest(String url, Object tag, Map<String, String> params, Map<String, String> headers, String content, MediaType mediaType,int id) + { + super(url, tag, params, headers,id); + this.content = content; + this.mediaType = mediaType; + + if (this.content == null) + { + Exceptions.illegalArgument("the content can not be null !"); + } + if (this.mediaType == null) + { + this.mediaType = MEDIA_TYPE_PLAIN; + } + + } + + @Override + protected RequestBody buildRequestBody() + { + return RequestBody.create(mediaType, content); + } + + @Override + protected Request buildRequest( RequestBody requestBody) + { + return builder.post(requestBody).build(); + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/RequestCall.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/RequestCall.java new file mode 100644 index 0000000..127aa68 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/request/RequestCall.java @@ -0,0 +1,124 @@ +package com.demo.lib.common.okhttp.request; + +import com.demo.lib.common.okhttp.OkHttpUtils; +import com.demo.lib.common.okhttp.callback.Callback; + +import java.io.IOException; +import java.util.concurrent.TimeUnit; + +import okhttp3.Call; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; + +/** + * Created by zhy on 15/12/15. + * 瀵筄kHttpRequest鐨勫皝瑁咃紝瀵瑰鎻愪緵鏇村鐨勬帴鍙o細cancel(),readTimeOut()... + */ +public class RequestCall +{ + private OkHttpRequest okHttpRequest; + private Request request; + private Call call; + + private long readTimeOut; + private long writeTimeOut; + private long connTimeOut; + + private OkHttpClient clone; + + public RequestCall(OkHttpRequest request) + { + this.okHttpRequest = request; + } + + public RequestCall readTimeOut(long readTimeOut) + { + this.readTimeOut = readTimeOut; + return this; + } + + public RequestCall writeTimeOut(long writeTimeOut) + { + this.writeTimeOut = writeTimeOut; + return this; + } + + public RequestCall connTimeOut(long connTimeOut) + { + this.connTimeOut = connTimeOut; + return this; + } + + public Call buildCall(Callback callback) + { + request = generateRequest(callback); + + if (readTimeOut > 0 || writeTimeOut > 0 || connTimeOut > 0) + { + readTimeOut = readTimeOut > 0 ? readTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS; + writeTimeOut = writeTimeOut > 0 ? writeTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS; + connTimeOut = connTimeOut > 0 ? connTimeOut : OkHttpUtils.DEFAULT_MILLISECONDS; + + clone = OkHttpUtils.getInstance().getOkHttpClient().newBuilder() + .readTimeout(readTimeOut, TimeUnit.MILLISECONDS) + .writeTimeout(writeTimeOut, TimeUnit.MILLISECONDS) + .connectTimeout(connTimeOut, TimeUnit.MILLISECONDS) + .build(); + + call = clone.newCall(request); + } else + { + call = OkHttpUtils.getInstance().getOkHttpClient().newCall(request); + } + return call; + } + + private Request generateRequest(Callback callback) + { + return okHttpRequest.generateRequest(callback); + } + + public void execute(Callback callback) + { + buildCall(callback); + + if (callback != null) + { + callback.onBefore(request, getOkHttpRequest().getId()); + } + + OkHttpUtils.getInstance().execute(this, callback); + } + + public Call getCall() + { + return call; + } + + public Request getRequest() + { + return request; + } + + public OkHttpRequest getOkHttpRequest() + { + return okHttpRequest; + } + + public Response execute() throws IOException + { + buildCall(null); + return call.execute(); + } + + public void cancel() + { + if (call != null) + { + call.cancel(); + } + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Exceptions.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Exceptions.java new file mode 100644 index 0000000..ba696ff --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Exceptions.java @@ -0,0 +1,14 @@ +package com.demo.lib.common.okhttp.utils; + +/** + * Created by zhy on 15/12/14. + */ +public class Exceptions +{ + public static void illegalArgument(String msg, Object... params) + { + throw new IllegalArgumentException(String.format(msg, params)); + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/ImageUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/ImageUtils.java new file mode 100644 index 0000000..7033124 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/ImageUtils.java @@ -0,0 +1,196 @@ +package com.demo.lib.common.okhttp.utils; + +import android.graphics.BitmapFactory; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; + +import java.io.InputStream; +import java.lang.reflect.Field; + +/** + * Created by zhy on 15/11/6. + */ +public class ImageUtils +{ + /** + * 鏍规嵁InputStream鑾峰彇鍥剧墖瀹為檯鐨勫搴﹀拰楂樺害 + * + * @param imageStream + * @return + */ + public static ImageSize getImageSize(InputStream imageStream) + { + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeStream(imageStream, null, options); + return new ImageSize(options.outWidth, options.outHeight); + } + + public static class ImageSize + { + int width; + int height; + + public ImageSize() + { + } + + public ImageSize(int width, int height) + { + this.width = width; + this.height = height; + } + + @Override + public String toString() + { + return "ImageSize{" + + "width=" + width + + ", height=" + height + + '}'; + } + } + + public static int calculateInSampleSize(ImageSize srcSize, ImageSize targetSize) + { + // 婧愬浘鐗囩殑瀹藉害 + int width = srcSize.width; + int height = srcSize.height; + int inSampleSize = 1; + + int reqWidth = targetSize.width; + int reqHeight = targetSize.height; + + if (width > reqWidth && height > reqHeight) + { + // 璁$畻鍑哄疄闄呭搴﹀拰鐩爣瀹藉害鐨勬瘮鐜� + int widthRatio = Math.round((float) width / (float) reqWidth); + int heightRatio = Math.round((float) height / (float) reqHeight); + inSampleSize = Math.max(widthRatio, heightRatio); + } + return inSampleSize; + } + + /** + * 鏍规嵁ImageView鑾烽�傚綋鐨勫帇缂╃殑瀹藉拰楂� + * + * @param view + * @return + */ + public static ImageSize getImageViewSize(View view) + { + + ImageSize imageSize = new ImageSize(); + + imageSize.width = getExpectWidth(view); + imageSize.height = getExpectHeight(view); + + return imageSize; + } + + /** + * 鏍规嵁view鑾峰緱鏈熸湜鐨勯珮搴� + * + * @param view + * @return + */ + private static int getExpectHeight(View view) + { + + int height = 0; + if (view == null) return 0; + + final ViewGroup.LayoutParams params = view.getLayoutParams(); + //濡傛灉鏄疻RAP_CONTENT锛屾鏃跺浘鐗囪繕娌″姞杞斤紝getWidth鏍规湰鏃犳晥 + if (params != null && params.height != ViewGroup.LayoutParams.WRAP_CONTENT) + { + height = view.getWidth(); // 鑾峰緱瀹為檯鐨勫搴� + } + if (height <= 0 && params != null) + { + height = params.height; // 鑾峰緱甯冨眬鏂囦欢涓殑澹版槑鐨勫搴� + } + + if (height <= 0) + { + height = getImageViewFieldValue(view, "mMaxHeight");// 鑾峰緱璁剧疆鐨勬渶澶х殑瀹藉害 + } + + //濡傛灉瀹藉害杩樻槸娌℃湁鑾峰彇鍒帮紝鎲嬪ぇ鎷涳紝浣跨敤灞忓箷鐨勫搴� + if (height <= 0) + { + DisplayMetrics displayMetrics = view.getContext().getResources() + .getDisplayMetrics(); + height = displayMetrics.heightPixels; + } + + return height; + } + + /** + * 鏍规嵁view鑾峰緱鏈熸湜鐨勫搴� + * + * @param view + * @return + */ + private static int getExpectWidth(View view) + { + int width = 0; + if (view == null) return 0; + + final ViewGroup.LayoutParams params = view.getLayoutParams(); + //濡傛灉鏄疻RAP_CONTENT锛屾鏃跺浘鐗囪繕娌″姞杞斤紝getWidth鏍规湰鏃犳晥 + if (params != null && params.width != ViewGroup.LayoutParams.WRAP_CONTENT) + { + width = view.getWidth(); // 鑾峰緱瀹為檯鐨勫搴� + } + if (width <= 0 && params != null) + { + width = params.width; // 鑾峰緱甯冨眬鏂囦欢涓殑澹版槑鐨勫搴� + } + + if (width <= 0) + + { + width = getImageViewFieldValue(view, "mMaxWidth");// 鑾峰緱璁剧疆鐨勬渶澶х殑瀹藉害 + } + //濡傛灉瀹藉害杩樻槸娌℃湁鑾峰彇鍒帮紝鎲嬪ぇ鎷涳紝浣跨敤灞忓箷鐨勫搴� + if (width <= 0) + + { + DisplayMetrics displayMetrics = view.getContext().getResources() + .getDisplayMetrics(); + width = displayMetrics.widthPixels; + } + + return width; + } + + /** + * 閫氳繃鍙嶅皠鑾峰彇imageview鐨勬煇涓睘鎬у�� + * + * @param object + * @param fieldName + * @return + */ + private static int getImageViewFieldValue(Object object, String fieldName) + { + int value = 0; + try + { + Field field = ImageView.class.getDeclaredField(fieldName); + field.setAccessible(true); + int fieldValue = field.getInt(object); + if (fieldValue > 0 && fieldValue < Integer.MAX_VALUE) + { + value = fieldValue; + } + } catch (Exception e) + { + } + return value; + + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/L.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/L.java new file mode 100644 index 0000000..83842a5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/L.java @@ -0,0 +1,21 @@ +package com.demo.lib.common.okhttp.utils; + +import android.util.Log; + +/** + * Created by zhy on 15/11/6. + */ +public class L +{ + private static boolean debug = false; + + public static void e(String msg) + { + if (debug) + { + Log.e("OkHttp", msg); + } + } + +} + diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Platform.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Platform.java new file mode 100644 index 0000000..bdbeb84 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/okhttp/utils/Platform.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2013 Square, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.demo.lib.common.okhttp.utils; + +import android.os.Build; +import android.os.Handler; +import android.os.Looper; + +import java.util.concurrent.Executor; +import java.util.concurrent.Executors; + +public class Platform +{ + private static final Platform PLATFORM = findPlatform(); + + public static Platform get() + { + L.e(PLATFORM.getClass().toString()); + return PLATFORM; + } + + private static Platform findPlatform() + { + try + { + Class.forName("android.os.Build"); + if (Build.VERSION.SDK_INT != 0) + { + return new Android(); + } + } catch (ClassNotFoundException ignored) + { + } + return new Platform(); + } + + public Executor defaultCallbackExecutor() + { + return Executors.newCachedThreadPool(); + } + + public void execute(Runnable runnable) + { + defaultCallbackExecutor().execute(runnable); + } + + + static class Android extends Platform + { + @Override + public Executor defaultCallbackExecutor() + { + return new MainThreadExecutor(); + } + + static class MainThreadExecutor implements Executor + { + private final Handler handler = new Handler(Looper.getMainLooper()); + + @Override + public void execute(Runnable r) + { + handler.post(r); + } + } + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/CheckUpdateService.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/CheckUpdateService.java new file mode 100644 index 0000000..e2f06be --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/CheckUpdateService.java @@ -0,0 +1,54 @@ +package com.demo.lib.common.upgrade; + +import android.app.IntentService; +import android.content.Intent; + +import com.demo.lib.common.util.common.PackageUtils2; + +public abstract class CheckUpdateService extends IntentService { + + public static final int UPDATE_NONE = -1; + + public static final int UPDATE_COMPULSION_NOT = 0; + + public static final int UPDATE_COMPULSION = 1; + + public CheckUpdateService() { + super("CheckUpdateService"); + } + + @Override + protected void onHandleIntent(Intent intent) { + Version version = getVersion(PackageUtils2.getVersionCode(this)); + if (version == null) { + return; + } + switch (version.getType()) { + case UPDATE_NONE: + + break; + case UPDATE_COMPULSION_NOT: { + Intent intentUpdate = new Intent(this, UpdateActivity.class); + intentUpdate.putExtra("download_url", version.getDownloadUrl()); + intentUpdate.putExtra("file_name", version.getFileName()); + intentUpdate.putExtra("notification_title", version.getTitle()); + intentUpdate.putExtra("notification_description", version.getDescription()); + startActivity(intentUpdate); + } + break; + case UPDATE_COMPULSION: { + Intent intentUpdate = new Intent(this, UpdateService.class); + intentUpdate.putExtra("download_url", version.getDownloadUrl()); + intentUpdate.putExtra("file_name", version.getFileName()); + intentUpdate.putExtra("notification_title", version.getTitle()); + intentUpdate.putExtra("notification_description", version.getDescription()); + startService(intentUpdate); + } + break; + default: + break; + } + } + + public abstract Version getVersion(int currentVersionCode); +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateActivity.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateActivity.java new file mode 100644 index 0000000..2ee2338 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateActivity.java @@ -0,0 +1,38 @@ +package com.demo.lib.common.upgrade; + +import android.app.Activity; +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.os.Bundle; + +public class UpdateActivity extends Activity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle("鍙戠幇涓�涓柊鐗堟湰锛屾槸鍚︽洿鏂�"); + builder.setPositiveButton("鐜板湪鏇存柊", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + Intent intentUpdate = new Intent(UpdateActivity.this, UpdateService.class); + intentUpdate.putExtra("download_url", getIntent().getStringExtra("download_url")); + intentUpdate.putExtra("file_name", getIntent().getStringExtra("file_name")); + intentUpdate.putExtra("notification_title", getIntent().getStringExtra("notification_title")); + intentUpdate.putExtra("notification_description", getIntent().getStringExtra("notification_description")); + startService(intentUpdate); + finish(); + } + }); + builder.setNegativeButton("涓嬫鍐嶈", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + finish(); + } + }); + builder.create().show(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateService.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateService.java new file mode 100644 index 0000000..9126113 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/UpdateService.java @@ -0,0 +1,105 @@ +package com.demo.lib.common.upgrade; + +import android.annotation.SuppressLint; +import android.app.DownloadManager; +import android.app.DownloadManager.Request; +import android.app.IntentService; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build; +import androidx.core.content.FileProvider; +import per.wsj.library.BuildConfig; + +import android.util.Log; +import android.webkit.MimeTypeMap; + + +import java.io.File; + +@SuppressLint("NewApi") +public class UpdateService extends IntentService { + + private long mDownLoadId; + + public UpdateService() { + super("UpdateService"); + } + + @Override + protected void onHandleIntent(Intent intent) { + DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); + DownloadManager.Request request = new DownloadManager.Request(Uri.parse(intent.getStringExtra("download_url"))); + request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_MOBILE | DownloadManager.Request.NETWORK_WIFI); + request.setAllowedOverRoaming(false); + //璁剧疆鏂囦欢绫诲瀷 + MimeTypeMap mimeTypeMap = MimeTypeMap.getSingleton(); + String mimeString = mimeTypeMap.getMimeTypeFromExtension(MimeTypeMap.getFileExtensionFromUrl(intent.getStringExtra("download_url"))); + request.setMimeType(mimeString); + //鍦ㄩ�氱煡鏍忎腑鏄剧ず + request.setNotificationVisibility(Request.VISIBILITY_VISIBLE); + request.setVisibleInDownloadsUi(true); + // sdcard鐨勭洰褰曚笅鐨刣ownload鏂囦欢澶� + request.setDestinationInExternalPublicDir("/download/", intent.getStringExtra("file_name")); + request.setTitle(intent.getStringExtra("notification_title")); + request.setDescription(intent.getStringExtra("notification_description")); + mDownLoadId = downloadManager.enqueue(request); + registerReceiver(receiver, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE)); + } + + private BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + // 杩欓噷鍙互鍙栧緱涓嬭浇鐨刬d锛岃繖鏍峰氨鍙互鐭ラ亾鍝釜鏂囦欢涓嬭浇瀹屾垚浜嗐�傞�傜敤涓庡涓笅杞戒换鍔$殑鐩戝惉 + if (intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0) == mDownLoadId) { + queryDownloadStatus(context, intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0)); + } + } + }; + + private void queryDownloadStatus(Context context, long downloadId) { + DownloadManager downloadManager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); + DownloadManager.Query query = new DownloadManager.Query(); + query.setFilterById(downloadId); + Cursor c = downloadManager.query(query); + if (c.moveToFirst()) { + int status = c.getInt(c.getColumnIndex(DownloadManager.COLUMN_STATUS)); + switch (status) { + case DownloadManager.STATUS_PAUSED: + Log.v("DownloadManager", "STATUS_PAUSED"); + case DownloadManager.STATUS_PENDING: + Log.v("DownloadManager", "STATUS_PENDING"); + case DownloadManager.STATUS_RUNNING: + // 姝e湪涓嬭浇锛屼笉鍋氫换浣曚簨鎯� + Log.v("DownloadManager", "STATUS_RUNNING"); + break; + case DownloadManager.STATUS_SUCCESSFUL: + Intent intent = new Intent(Intent.ACTION_VIEW); + File file = new File("file://" + c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI))); + //鍒ゆ柇鏄惁鏄疉ndroidN浠ュ強鏇撮珮鐨勭増鏈� + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + Uri contentUri = FileProvider.getUriForFile(context.getApplicationContext(), BuildConfig.APPLICATION_ID + ".fileprovider", file); + intent.setDataAndType(contentUri, "application/vnd.android.package-archive"); + } else { + Uri uri = Uri.fromFile(file); + intent.setDataAndType(uri, "application/vnd.android.package-archive"); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + } + context.startActivity(intent); + // 瀹屾垚 + Log.v("DownloadManager", "STATUS_SUCCESSFUL"); + break; + case DownloadManager.STATUS_FAILED: + // 娓呴櫎宸蹭笅杞界殑鍐呭锛岄噸鏂颁笅杞� + Log.v("DownloadManager", "STATUS_FAILED"); + downloadManager.remove(downloadId); + break; + } + } + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/Version.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/Version.java new file mode 100644 index 0000000..76dde29 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/upgrade/Version.java @@ -0,0 +1,67 @@ +package com.demo.lib.common.upgrade; + +import java.io.Serializable; + +public class Version implements Serializable { + + /** + * serialVersionUID + */ + private static final long serialVersionUID = 1L; + + private String versionCode; + private String description; + private String downloadUrl; + private String fileName; + private String title; + + private int type; + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getVersionCode() { + return versionCode; + } + + public void setVersionCode(String versionCode) { + this.versionCode = versionCode; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getDownloadUrl() { + return downloadUrl; + } + + public void setDownloadUrl(String downloadUrl) { + this.downloadUrl = downloadUrl; + } + + public String getFileName() { + return fileName; + } + + public void setFileName(String fileName) { + this.fileName = fileName; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/Environment.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/Environment.java new file mode 100644 index 0000000..1561033 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/Environment.java @@ -0,0 +1,191 @@ +package com.demo.lib.common.util; + +import java.io.File; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +import android.content.Context; +import android.os.Build; +import android.os.storage.StorageManager; + +/** + * An {@link android.os.Environment} wrapper that adds + * support for phones that have multiple external storage directories. + */ +public class Environment extends android.os.Environment { + + /** + * SDCard File List + */ + private static File[] mStorageList; + + + /** + * List Of The Potential Volume Daemons + */ + private static final File[] mVolumeDaemonList = new File[]{ + new File(getRootDirectory(), "etc/vold.fstab"), + new File(getRootDirectory(), "etc/vold.conf") + }; + + + /** + * Returns an array of files containing the paths to all of the external + * storage directories (Emulated/Removable). As a fall back, it reads in the volume daemon file + * and parses the contents. + * <p/> + * <b>Note:</b> This method takes advantage of a hidden method inside {@link StorageManager} which + * was not introduced until API 14 (ICE_CREAM_SANDWICH/4.0.1). + * <p/> + * + * @param context {@link Context} used to get StorageManager + */ + public static File[] getExternalStorageList(Context context) { + mStorageList = null; + if (mStorageList == null) { + try { + mStorageList = (Build.VERSION.SDK_INT >= 14) + ? getExternalStorageList((StorageManager) context.getSystemService(Context.STORAGE_SERVICE)) + : getVolumeDaemonExternalStorageList(); + } catch (Exception e) { + e.printStackTrace(); + } + } + return mStorageList; + } + + + /** + * Checks to see if more than one external storage directory exists. + * + * @param context {@link Context} used to get StorageManager + */ + public static boolean doesExtraExternalStorageDirectoryExist(Context context) { + getExternalStorageList(context); + return mStorageList != null && mStorageList.length >= 2; + } + + + /** + * Returns an array of files containing the paths to all of the external + * storage directories (Emulated/Removable) provided by the volume daemon + * config file. + * + */ + public static File[] getVolumeDaemonExternalStorageList() { + for (File daemon : mVolumeDaemonList) { + try { + if (daemon.exists() && daemon.canRead()) { + final String[] stringArray = readFileIntoStringArray(daemon); + final List<File> fileList = new ArrayList<File>(); + if (stringArray != null) { + for (String str : stringArray) { + final File f = new File(str.split(" ")[2].split(":")[0]); + if (!doesFileExistInList(fileList, f)) { + fileList.add(f); + } + } + } + return (!fileList.isEmpty() ? fileList.toArray(new File[fileList.size()]) : null); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + return null; + } + + private static File[] getExternalStorageList(StorageManager storageManager) throws Exception { + final Method method = storageManager.getClass().getMethod("getVolumePaths"); + final String[] strList = (String[]) method.invoke(storageManager); + final List<File> fileList = new ArrayList<File>(); + + for (String path : strList) { + final File file = new File(path); + if (!doesFileExistInList(fileList, file)) { + fileList.add(file); + } + } + + return (!fileList.isEmpty() ? fileList.toArray(new File[fileList.size()]) : null); + } + + private static boolean doesFileExistInList(List<File> fileList, File newFile) { + if (newFile == null || fileList == null) { + // File Is Null Or List Is Null + return true; + } + + if (!newFile.exists()) { + // The File Doesn't Exist + return true; + } + + if (!newFile.isDirectory()) { + // File Is Not A Directory + return true; + } + + if (!newFile.canRead()) { + // Can't Read The File + return true; + } + + if (newFile.getTotalSpace() <= 0) { + // File Has No Space + // Filters Usbdisk Out + return true; + } + + if (newFile.getName().equalsIgnoreCase("tmp")) { + // This Folder Showed Up On My Droid X, Filter It Out. + return true; + } + + if (fileList.contains(newFile)) { + // File Is In The List + return true; + } + + // Make Sure The File Isn't In The List As A Link Of Some Sort + // More Of An In Depth Look + for (File file : fileList) { + if (file.getFreeSpace() == newFile.getFreeSpace() && file.getUsableSpace() == newFile.getUsableSpace()) { + // Same Free/Usable Space + // Must Be Same Files + return true; + } + } + + // File Passed All Of My Tests + return false; + } + + private static String[] readFileIntoStringArray(File file) { + Scanner scanner = null; + try { + scanner = new Scanner(file); + final List<String> stringList = new ArrayList<String>(); + while (scanner.hasNext()) { + final String line = scanner.nextLine(); + if (line != null) { + if (line.length() > 0) { + if (!line.startsWith("#")) { + stringList.add(line); + } + } + } + } + return !stringList.isEmpty() ? stringList.toArray(new String[stringList.size()]) : null; + } catch (Exception e) { + return null; + } finally { + if (scanner != null) { + scanner.close(); + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelper.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelper.java new file mode 100644 index 0000000..9304f5c --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelper.java @@ -0,0 +1,80 @@ +package com.demo.lib.common.util; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; +import android.util.Log; + +public class FragmentSwitchHelper { + + private static final String TAG = "FragmentSwitchHelper"; + + public FragmentManager mFragmentManager; + + private Fragment[] mFragments; + + private Fragment mCurrentFragment; + + private int mContainerId; + + public Fragment getFragmentByName(String name) { + if (mFragments == null || mFragments.length == 0) + return null; + for (Fragment m : mFragments) + if (name.contains(m.getClass().getName())) { + return m; + } + return null; + } + + public static FragmentSwitchHelper create(int containerId, + FragmentManager fragmentManager, Fragment... fragments) { + return new FragmentSwitchHelper(containerId, fragmentManager, fragments); + } + + private FragmentSwitchHelper(int containerId, + FragmentManager fragmentManager, Fragment... fragments) { + this.mContainerId = containerId; + this.mFragments = fragments; + this.mFragmentManager = fragmentManager; + } + + public void changeFragment(Class<? extends Fragment> replaceFragmentClass) { + if (!mFragmentManager.isDestroyed()) { + Fragment replaceFragment = mFragmentManager + .findFragmentByTag(replaceFragmentClass.getName()); + if (mCurrentFragment == replaceFragment && mCurrentFragment != null) { + Log.d(TAG, "changeFragment noChange "); + return; + } + FragmentTransaction fragmentTransaction = mFragmentManager + .beginTransaction(); + if (mCurrentFragment != null) { + fragmentTransaction.detach(mCurrentFragment); + Log.d(TAG, "changeFragment detach " + + mCurrentFragment.getClass().getName()); + } + if (replaceFragment == null) { + for (Fragment item : mFragments) { + if (item.getClass().getName() + .equals(replaceFragmentClass.getName())) { + replaceFragment = item; + break; + } + } + fragmentTransaction.add(mContainerId, replaceFragment, + replaceFragmentClass.getName()); + mCurrentFragment = replaceFragment; + Log.d(TAG, + "changeFragment add " + replaceFragmentClass.getName()); + } else { + fragmentTransaction.attach(replaceFragment); + mCurrentFragment = replaceFragment; + Log.d(TAG, + "changeFragment attach " + + replaceFragmentClass.getName()); + } + fragmentTransaction.commitAllowingStateLoss(); + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelperV2.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelperV2.java new file mode 100644 index 0000000..f17adef --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/FragmentSwitchHelperV2.java @@ -0,0 +1,81 @@ +package com.demo.lib.common.util; + +import android.util.Log; + +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentManager; +import androidx.fragment.app.FragmentTransaction; + +public class FragmentSwitchHelperV2 { + + private static final String TAG = "FragmentSwitchHelper"; + + public FragmentManager mFragmentManager; + + private Fragment[] mFragments; + + private Fragment mCurrentFragment; + + private int mContainerId; + + public Fragment getFragmentByName(String name) { + if (mFragments == null || mFragments.length == 0) + return null; + for (Fragment m : mFragments) + if (name.contains(m.getClass().getName())) { + return m; + } + return null; + } + + public static FragmentSwitchHelperV2 create(int containerId, + FragmentManager fragmentManager, Fragment... fragments) { + return new FragmentSwitchHelperV2(containerId, fragmentManager, fragments); + } + + private FragmentSwitchHelperV2(int containerId, + FragmentManager fragmentManager, Fragment... fragments) { + this.mContainerId = containerId; + this.mFragments = fragments; + this.mFragmentManager = fragmentManager; + } + + public void changeFragment(Class<? extends Fragment> replaceFragmentClass) { + if (!mFragmentManager.isDestroyed()) { + Fragment replaceFragment = mFragmentManager + .findFragmentByTag(replaceFragmentClass.getName()); + if (mCurrentFragment == replaceFragment && mCurrentFragment != null) { + Log.d(TAG, "changeFragment noChange "); + return; + } + FragmentTransaction fragmentTransaction = mFragmentManager + .beginTransaction(); + if (mCurrentFragment != null) { + fragmentTransaction.hide(mCurrentFragment); + Log.d(TAG, "changeFragment detach " + + mCurrentFragment.getClass().getName()); + } + if (replaceFragment == null) { + for (Fragment item : mFragments) { + if (item.getClass().getName() + .equals(replaceFragmentClass.getName())) { + replaceFragment = item; + break; + } + } + fragmentTransaction.add(mContainerId, replaceFragment, + replaceFragmentClass.getName()); + mCurrentFragment = replaceFragment; + Log.d(TAG, + "changeFragment add " + replaceFragmentClass.getName()); + } else { + fragmentTransaction.show(replaceFragment); + mCurrentFragment = replaceFragment; + Log.d(TAG, + "changeFragment attach " + + replaceFragmentClass.getName()); + } + fragmentTransaction.commitAllowingStateLoss(); + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ImageChooseHelper.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ImageChooseHelper.java new file mode 100644 index 0000000..ac6b923 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ImageChooseHelper.java @@ -0,0 +1,225 @@ +package com.demo.lib.common.util; + +import java.io.BufferedOutputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Locale; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.database.Cursor; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Environment; +import android.provider.MediaStore; +import androidx.fragment.app.Fragment; + +public class ImageChooseHelper { + + private static final int REQUEST_CODE_GET = 0; + + private static final int REQUEST_CODE_CAPTURE = 1; + + private static final int REQUEST_CODE_CROP = 2; + + private static final int REQUEST_CODE_CAPTURE_ORIGIN = 3; + + private Activity mActivity; + + private Fragment mFragment; + + private Context mContext; + + private boolean mNeedCrop; + + private Callback mCallback; + + public interface Callback { + void onResult(Bitmap bitmap, String path); + void onError(); + } + + public static ImageChooseHelper create(Activity activity, boolean needCrop, Callback callback) { + return new ImageChooseHelper(activity, needCrop, callback); + } + + public static ImageChooseHelper create(Fragment fragment, boolean needCrop, Callback callback) { + return new ImageChooseHelper(fragment, needCrop, callback); + } + + private ImageChooseHelper(Activity activity, boolean needCrop, Callback callback) { + this.mActivity = activity; + this.mContext = activity; + this.mNeedCrop = needCrop; + this.mCallback = callback; + } + + private ImageChooseHelper(Fragment fragment, boolean needCrop, Callback callback) { + this.mFragment = fragment; + this.mContext = fragment.getActivity(); + this.mNeedCrop = needCrop; + this.mCallback = callback; + } + + public void startActivityGet() { + /*** + * 杩欎釜鏄皟鐢╝ndroid鍐呯疆鐨刬ntent锛屾潵杩囨护鍥剧墖鏂囦欢锛屽悓鏃朵篃鍙互杩囨护鍏朵粬鐨� + */ + Intent intent = new Intent(); + intent.setType("image/*"); + intent.setAction(Intent.ACTION_GET_CONTENT); + if (mActivity == null) { + mFragment.startActivityForResult(intent, REQUEST_CODE_GET); + } else { + mActivity.startActivityForResult(intent, REQUEST_CODE_GET); + } + } + + public void startActivityCapture() { + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + if (mActivity == null) { + mFragment.startActivityForResult(intent, REQUEST_CODE_CAPTURE); + } else { + mActivity.startActivityForResult(intent, REQUEST_CODE_CAPTURE); + } + } + + private Uri mUri; + + public void startActivityCaptureOrigin() { + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + String name = new SimpleDateFormat("yyyyMMddhhmmss", Locale.CHINA).format(new Date()) + ".jpg"; + mUri = Uri.fromFile(new File(mContext.getExternalFilesDir(Environment.DIRECTORY_PICTURES), + name)); + Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); + intent.putExtra(MediaStore.Images.Media.ORIENTATION, 0); + intent.putExtra(MediaStore.EXTRA_OUTPUT, mUri); + if (mActivity == null) { + mFragment.startActivityForResult(intent, REQUEST_CODE_CAPTURE_ORIGIN); + } else { + mActivity.startActivityForResult(intent, REQUEST_CODE_CAPTURE_ORIGIN); + } + } + } + + private void startCrop(Uri uri, int size) { + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setDataAndType(uri, "image/*"); + // crop涓簍rue鏄缃湪寮�鍚殑intent涓缃樉绀虹殑view鍙互鍓 + intent.putExtra("crop", "true"); + + // aspectX aspectY 鏄楂樼殑姣斾緥 + intent.putExtra("aspectX", 1); + intent.putExtra("aspectY", 1); + + // outputX,outputY 鏄壀瑁佸浘鐗囩殑瀹介珮 + intent.putExtra("outputX", size); + intent.putExtra("outputY", size); + intent.putExtra("return-data", true); + + if (mActivity == null) { + mFragment.startActivityForResult(intent, REQUEST_CODE_CROP); + } else { + mActivity.startActivityForResult(intent, REQUEST_CODE_CROP); + } + } + + public void handleActivityResult(int requestCode, int resultCode, Intent data) { + if (resultCode == Activity.RESULT_OK) { + switch (requestCode) { + case REQUEST_CODE_GET: { + if (mNeedCrop) { + startCrop(data.getData(), 150); + } else { + /** + * 褰撻�夋嫨鐨勫浘鐗囦笉涓虹┖鐨勮瘽锛屽湪鑾峰彇鍒板浘鐗囩殑閫斿緞 + */ + Uri uri = data.getData(); + String[] pojo = { MediaStore.Images.Media.DATA }; + Cursor cursor = mContext.getContentResolver().query(uri, pojo, null, null, null); + + if (cursor != null) { + int colunm_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); + cursor.moveToFirst(); + String path = cursor.getString(colunm_index); + mCallback.onResult(null, path); + } else { + mCallback.onError(); + } + cursor.close(); + } + } + break; + case REQUEST_CODE_CAPTURE: + if (mNeedCrop) { + Bitmap bitmap = (Bitmap) data.getExtras().get("data"); + startCrop(Uri.fromFile(new File(saveBitmap(bitmap))), 150); + } else { + mCallback.onResult((Bitmap) data.getExtras().getParcelable("data"), null); + } + break; + case REQUEST_CODE_CAPTURE_ORIGIN: + if (mNeedCrop) { + startCrop(mUri, 150); + } else { + mCallback.onResult(null, mUri.getPath()); + } + break; + case REQUEST_CODE_CROP: + mCallback.onResult((Bitmap) data.getExtras().getParcelable("data"), null); + break; + default: + break; + } + } + } + + public String saveBitmap(Bitmap bitmap) { + String name = new SimpleDateFormat("yyyyMMddhhmmss", Locale.CHINA).format(new Date()); + String fileNmae; + if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + fileNmae = mContext.getExternalFilesDir(null) + File.separator + "save/" + name + ".jpg"; + } else { + fileNmae = mContext.getFilesDir() + File.separator + "save/" + name + ".jpg"; + } + File myCaptureFile = new File(fileNmae); + if (!myCaptureFile.getParentFile().exists()) { + myCaptureFile.getParentFile().mkdirs(); + } + FileOutputStream fis = null; + try { + fis = new FileOutputStream(myCaptureFile); + BufferedOutputStream bos = new BufferedOutputStream(fis); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos); + try { + bos.flush(); + } catch (IOException e) { + fileNmae = null; + e.printStackTrace(); + } finally { + try { + bos.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } catch (FileNotFoundException e) { + fileNmae = null; + e.printStackTrace(); + } finally { + if (fis != null) { + try { + fis.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return fileNmae; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ManifestDataUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ManifestDataUtil.java new file mode 100644 index 0000000..6a37cf2 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ManifestDataUtil.java @@ -0,0 +1,40 @@ +package com.demo.lib.common.util; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.text.TextUtils; + +/** + * Created by weikou2015 on 2018/7/26. + */ + +public class ManifestDataUtil { + /** + * 鑾峰彇application涓寚瀹氱殑meta-data銆傛湰渚嬩腑锛岃皟鐢ㄦ柟娉曟椂key灏辨槸UMENG_CHANNEL + * + * @return 濡傛灉娌℃湁鑾峰彇鎴愬姛(娌℃湁瀵瑰簲鍊硷紝鎴栬�呭紓甯�)锛屽垯杩斿洖鍊间负绌� + */ + public static String getAppMetaData(Context ctx, String key) { + if (ctx == null || TextUtils.isEmpty(key)) { + return null; + } + String resultData = null; + try { + PackageManager packageManager = ctx.getPackageManager(); + if (packageManager != null) { + ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA); + if (applicationInfo != null) { + if (applicationInfo.metaData != null) { + resultData = applicationInfo.metaData.getString(key); + } + } + + } + } catch (PackageManager.NameNotFoundException e) { + e.printStackTrace(); + } + + return resultData; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/MarketUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/MarketUtils.java new file mode 100644 index 0000000..6b64aa4 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/MarketUtils.java @@ -0,0 +1,218 @@ +package com.demo.lib.common.util; + +/** + * Created by weikou2015 on 2016/12/10. + */ + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.pm.ActivityInfo; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; +import android.os.Build; +import android.text.TextUtils; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +/** + * 搴旂敤鍟嗗簵璇勫垎宸ュ叿绫� + */ +public class MarketUtils { + private static List<String> MarketPackages = new ArrayList<>(); + + static { + MarketPackages.add("com.lenovo.leos.appstore"); + MarketPackages.add("com.android.vending"); + MarketPackages.add("com.meizu.mstore"); + MarketPackages.add("com.xiaomi.market"); + MarketPackages.add("com.huawei.appmarket"); + MarketPackages.add("com.qihoo.appstore"); + MarketPackages.add("com.wandoujia.phoenix2"); + MarketPackages.add("com.baidu.appsearch"); + MarketPackages.add("com.bbk.appstore"); + MarketPackages.add("com.yulong.android.coolmart"); + MarketPackages.add("com.oppo.market"); + MarketPackages.add("com.tencent.android.qqdownloader"); + } + + /** + * 杩囨护鎺夋墜鏈轰笂娌℃湁瀹夎鐨勫簲鐢ㄥ晢搴� + */ + public static List<ActivityInfo> queryInstalledMarketInfos(Context context) { + List<ActivityInfo> infos = new ArrayList<>(); + if (context == null) return infos; + Intent intent = new Intent(); + intent.setAction(Intent.ACTION_MAIN); + intent.addCategory(Intent.CATEGORY_APP_MARKET); + PackageManager pm = context.getPackageManager(); + List<ResolveInfo> resolveInfos = pm.queryIntentActivities(intent, 0); + if (resolveInfos == null || infos.size() == 0) { + return infos; + } + for (int i = 0; i < resolveInfos.size(); i++) { + try { + infos.add(resolveInfos.get(i).activityInfo); + } catch (Exception e) { + e.printStackTrace(); + } + } + Log.i("mResult", "娌℃湁搴旂敤鍟嗗簵鐨勬暟閲�:" + infos.size()); + return infos; + } + + public static List<ApplicationInfo> filterInstalledPkgs(Context context, String packageName) { + List<ApplicationInfo> infos = new ArrayList<>(); + if (context == null || MarketPackages == null || MarketPackages.size() == 0) + return infos; + PackageManager pm = context.getPackageManager(); + List<PackageInfo> installedPkgs = pm.getInstalledPackages(0); + int li = installedPkgs.size(); + int lj = MarketPackages.size(); + for (int j = 0; j < lj; j++) { + for (int i = 0; i < li; i++) { + String installPkg = ""; + String checkPkg = MarketPackages.get(j); + try { + installPkg = installedPkgs.get(i).applicationInfo.packageName; + } catch (Exception e) { + e.printStackTrace(); + } + if (TextUtils.isEmpty(installPkg)) + continue; + if (installPkg.equals(checkPkg)) { + infos.add(installedPkgs.get(i).applicationInfo); + break; + } + } + } + String phoneName = Build.BRAND; + if (infos.size() > 0) { + + } +// launchAppDetail(context, packageName, infos.get(0).packageName); +// Toast.makeText(context, "鍖呭悕鏈�:" + infos.get(0).packageName + "鎵嬫満鐗屽瓙涓�:" + phoneName, Toast.LENGTH_LONG).show(); +//// + "/n" + infos.get(1).packageName+"/n" + infos.get(2).packageName+"/n" + infos.get(3).packageName,Toast.LENGTH_SHORT).show(); +// Log.i("mResult", "鍖呭悕鏈�:" + "鍖呭悕鏈�:" + infos.get(0).packageName); +//// + "----------" + infos.get(1).packageName+"----------" + infos.get(2).packageName+"---------" + infos.get(3).packageName); + return infos; + } + + /** + * 鑾峰彇宸插畨瑁呭簲鐢ㄥ晢搴楃殑鍖呭悕鍒楄〃 + * + * @param context + * @return + */ + public static ArrayList<String> queryInstalledMarketPkgs(Context context) { + ArrayList<String> pkgs = new ArrayList<String>(); + if (context == null) + return pkgs; + Intent intent = new Intent(); + intent.setAction("android.intent.action.MAIN"); + intent.addCategory("android.intent.category.APP_MARKET"); + PackageManager pm = context.getPackageManager(); + List<ResolveInfo> infos = pm.queryIntentActivities(intent, 0); + if (infos == null || infos.size() == 0) + return pkgs; + int size = infos.size(); + for (int i = 0; i < size; i++) { + String pkgName = ""; + try { + ActivityInfo activityInfo = infos.get(i).activityInfo; + pkgName = activityInfo.packageName; + } catch (Exception e) { + e.printStackTrace(); + } + if (!TextUtils.isEmpty(pkgName)) + pkgs.add(pkgName); + } + return pkgs; + } + + /** + * 杩囨护鍑哄凡缁忓畨瑁呯殑鍖呭悕闆嗗悎 + * + * @param context + * @param pkgs 寰呰繃婊ゅ寘鍚嶉泦鍚� + * @return 宸插畨瑁呯殑鍖呭悕闆嗗悎 + */ + public static ArrayList<String> filterInstalledPkgs(Context context, ArrayList<String> pkgs) { + ArrayList<String> empty = new ArrayList<String>(); + if (context == null || pkgs == null || pkgs.size() == 0) + return empty; + PackageManager pm = context.getPackageManager(); + List<PackageInfo> installedPkgs = pm.getInstalledPackages(0); + int li = installedPkgs.size(); + int lj = pkgs.size(); + for (int j = 0; j < lj; j++) { + for (int i = 0; i < li; i++) { + String installPkg = ""; + String checkPkg = pkgs.get(j); + try { + installPkg = installedPkgs.get(i).applicationInfo.packageName; + } catch (Exception e) { + e.printStackTrace(); + } + if (TextUtils.isEmpty(installPkg)) + continue; + if (installPkg.equals(checkPkg)) { + empty.add(installPkg); + break; + } + } + } + return empty; + } + + /** + * 鍚姩鍒癮pp璇︽儏鐣岄潰 + * + * @param appPkg App鐨勫寘鍚� + * @param marketPkg 搴旂敤鍟嗗簵鍖呭悕 ,濡傛灉涓�""鍒欑敱绯荤粺寮瑰嚭搴旂敤鍟嗗簵鍒楄〃渚涚敤鎴烽�夋嫨,鍚﹀垯璋冭浆鍒扮洰鏍囧競鍦虹殑搴旂敤璇︽儏鐣岄潰锛屾煇浜涘簲鐢ㄥ晢搴楀彲鑳戒細澶辫触 + */ + public static void launchAppDetail(Context context, String appPkg, String marketPkg) { + try { + if (TextUtils.isEmpty(appPkg)) + return; + Uri uri = Uri.parse("market://details?id=" + appPkg); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + if (!TextUtils.isEmpty(marketPkg)) + intent.setPackage(marketPkg); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + SharedPreferences sp = context.getSharedPreferences("user", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = sp.edit(); + editor.putBoolean("isReview", true); + editor.commit(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 鍚姩鍒癮pp璇︽儏鐣岄潰 + * + * @param appPkg App鐨勫寘鍚� + * @param marketPkg 搴旂敤鍟嗗簵鍖呭悕 ,濡傛灉涓�""鍒欑敱绯荤粺寮瑰嚭搴旂敤鍟嗗簵鍒楄〃渚涚敤鎴烽�夋嫨,鍚﹀垯璋冭浆鍒扮洰鏍囧競鍦虹殑搴旂敤璇︽儏鐣岄潰锛屾煇浜涘簲鐢ㄥ晢搴楀彲鑳戒細澶辫触 + */ + public static void launchAppDetailtoDownload(Context context, String appPkg, String marketPkg) { + try { + if (TextUtils.isEmpty(appPkg)) + return; + Uri uri = Uri.parse("market://details?id=" + appPkg); + Intent intent = new Intent(Intent.ACTION_VIEW, uri); + if (!TextUtils.isEmpty(marketPkg)) + intent.setPackage(marketPkg); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + context.startActivity(intent); + } catch (Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/PermissionsChecker.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/PermissionsChecker.java new file mode 100644 index 0000000..bd6c4ae --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/PermissionsChecker.java @@ -0,0 +1,32 @@ +package com.demo.lib.common.util; + + +import android.content.Context; +import android.content.pm.PackageManager; + +import androidx.core.content.ContextCompat; + + +public class PermissionsChecker { + private final Context mContext; + + public PermissionsChecker(Context context) { + mContext = context.getApplicationContext(); + } + + // 鍒ゆ柇鏉冮檺闆嗗悎 + public boolean lacksPermissions(String... permissions) { + for (String permission : permissions) { + if (lacksPermission(permission)) { + return true; + } + } + return false; + } + + // 鍒ゆ柇鏄惁缂哄皯鏉冮檺 + private boolean lacksPermission(String permission) { + return ContextCompat.checkSelfPermission(mContext, permission) == + PackageManager.PERMISSION_DENIED; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/RefreshLayout.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/RefreshLayout.java new file mode 100644 index 0000000..3e6c141 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/RefreshLayout.java @@ -0,0 +1,248 @@ +package com.demo.lib.common.util; + +import android.content.Context; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; + +import android.graphics.Color; +import android.util.AttributeSet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.widget.AbsListView; +import android.widget.ListView; + +import com.lcjian.lcjianlibrary.R; + +/** + * Created by Administrator on 2016/6/23. + */ +public class RefreshLayout extends SwipeRefreshLayout implements AbsListView.OnScrollListener { + /** + * 婊戝姩鍒版渶涓嬮潰鏃剁殑涓婃媺鎿嶄綔 + */ + + private int mTouchSlop; + /** + * listview瀹炰緥 + */ + private ListView mListView; + + /** + * 涓婃媺鐩戝惉鍣�, 鍒颁簡鏈�搴曢儴鐨勪笂鎷夊姞杞芥搷浣� + */ + private OnLoadListener mOnLoadListener; + + /** + * ListView鐨勫姞杞戒腑footer + */ + private View mListViewFooter; + + /** + * 鎸変笅鏃剁殑y鍧愭爣 + */ + private int mYDown; + /** + * 鎶捣鏃剁殑y鍧愭爣, 涓巑YDown涓�璧风敤浜庢粦鍔ㄥ埌搴曢儴鏃跺垽鏂槸涓婃媺杩樻槸涓嬫媺 + */ + private int mLastY; + /** + * 鏄惁鍦ㄥ姞杞戒腑 ( 涓婃媺鍔犺浇鏇村 ) + */ + private boolean isLoading = false; + + private Context mContext; + + /** + * @param context + */ + public RefreshLayout(Context context) { + this(context, null); + mContext = context; + } + + public RefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + mContext = context; + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + mListViewFooter = LayoutInflater.from(context).inflate(R.layout.listview_footer, null, + false); + setColorSchemeColors(Color.parseColor("#FFFF4D88")); + } + + public void setFooter(View view) { + if (view != null) + mListViewFooter = view; + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top + , right, bottom); +// Log.i("result","changed:"+changed); +// Log.i("result","left:"+left); +// Log.i("result","top:"+top); +// Log.i("result","right:"+right); +// Log.i("result","bottom:"+bottom); + // 鍒濆鍖朙istView瀵硅薄 + if (mListView == null) { + getListView(); + } + } + + /** + * 鑾峰彇ListView瀵硅薄 + */ + private void getListView() { + int childs = getChildCount(); + if (childs > 0) { + View childView = getChildAt(0); + if (childView instanceof ListView) { + mListView = (ListView) childView; + // 璁剧疆婊氬姩鐩戝惉鍣ㄧ粰ListView, 浣垮緱婊氬姩鐨勬儏鍐典笅涔熷彲浠ヨ嚜鍔ㄥ姞杞� + mListView.setOnScrollListener(this); + Log.d(VIEW_LOG_TAG, "### 鎵惧埌listview"); + } + } + } + + /* + * (non-Javadoc) + * @see android.view.ViewGroup#dispatchTouchEvent(android.view.MotionEvent) + */ + @Override + public boolean dispatchTouchEvent(MotionEvent event) { + final int action = event.getAction(); + + switch (action) { + case MotionEvent.ACTION_DOWN: + // 鎸変笅 + mYDown = (int) event.getRawY(); + break; + + case MotionEvent.ACTION_MOVE: + // 绉诲姩 + mLastY = (int) event.getRawY(); + break; + + case MotionEvent.ACTION_UP: + // 鎶捣 + if (canLoad()) { + loadData(); + } + break; + default: + break; + } + try { + return super.dispatchTouchEvent(event); + } catch (Exception e) { + return false; + } + + } + + /** + * 鏄惁鍙互鍔犺浇鏇村, 鏉′欢鏄埌浜嗘渶搴曢儴, listview涓嶅湪鍔犺浇涓�, 涓斾负涓婃媺鎿嶄綔. + * + * @return + */ + private boolean canLoad() { + return isBottom() && !isLoading && isPullUp() && isMore; + } + + /** + * 鏄惁鏈夋洿澶� + */ + public boolean isMore = true; + + /** + * 鍒ゆ柇鏄惁鍒颁簡鏈�搴曢儴 + */ + private boolean isBottom() { + + if (mListView != null && mListView.getAdapter() != null) { + return mListView.getLastVisiblePosition() == (mListView.getAdapter().getCount() - 1); + } + return false; + } + + /** + * 鏄惁鏄笂鎷夋搷浣� + * + * @return + */ + private boolean isPullUp() { + return (mYDown - mLastY) >= mTouchSlop; + } + + /** + * 濡傛灉鍒颁簡鏈�搴曢儴,鑰屼笖鏄笂鎷夋搷浣�.閭d箞鎵цonLoad鏂规硶 + */ + private void loadData() { + if (mOnLoadListener != null) { + // 璁剧疆鐘舵�� + setLoading(true); + // + mOnLoadListener.onLoad(); + } + } + + /** + * @param loading + */ + public void setLoading(boolean loading) { + if (disableLoading) + return; + isLoading = loading; + if (isLoading) { + mListView.addFooterView(mListViewFooter); + } else { + if (mListView != null && mListViewFooter != null) { + mListView.removeFooterView(mListViewFooter); + mYDown = 0; + mLastY = 0; + } + } + } + + //鏄惁鍏佽鍔犺浇鏇村 榛樿鍏佽鍔犺浇鏇村 + boolean disableLoading = false; + + public void disableLoad() { + disableLoading = true; + } + + public void enableLoad() { + disableLoading = false; + } + + /** + * @param loadListener + */ + public void setOnLoadListener(OnLoadListener loadListener) { + mOnLoadListener = loadListener; + } + + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + // 婊氬姩鏃跺埌浜嗘渶搴曢儴涔熷彲浠ュ姞杞芥洿澶� + + if (!disableLoading && canLoad()) { + loadData(); + } + } + + + public interface OnLoadListener { + void onLoad(); + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ScreenUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ScreenUtils.java new file mode 100644 index 0000000..e4a3c10 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ScreenUtils.java @@ -0,0 +1,126 @@ +package com.demo.lib.common.util; + +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Rect; +import android.util.DisplayMetrics; +import android.view.View; +import android.view.WindowManager; + +/** + * 鑾峰緱灞忓箷鐩稿叧鐨勮緟鍔╃被 + * + * @author zhy + * + */ +public class ScreenUtils +{ + private ScreenUtils() + { + /* cannot be instantiated */ + throw new UnsupportedOperationException("cannot be instantiated"); + } + + /** + * 鑾峰緱灞忓箷楂樺害 + * + * @param context + * @return + */ + public static int getScreenWidth(Context context) + { + WindowManager wm = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics outMetrics = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(outMetrics); + return outMetrics.widthPixels; + } + + /** + * 鑾峰緱灞忓箷瀹藉害 + * + * @param context + * @return + */ + public static int getScreenHeight(Context context) + { + WindowManager wm = (WindowManager) context + .getSystemService(Context.WINDOW_SERVICE); + DisplayMetrics outMetrics = new DisplayMetrics(); + wm.getDefaultDisplay().getMetrics(outMetrics); + return outMetrics.heightPixels; + } + + /** + * 鑾峰緱鐘舵�佹爮鐨勯珮搴� + * + * @param context + * @return + */ + public static int getStatusHeight(Context context) + { + + int statusHeight = -1; + try + { + Class<?> clazz = Class.forName("com.android.internal.R$dimen"); + Object object = clazz.newInstance(); + int height = Integer.parseInt(clazz.getField("status_bar_height") + .get(object).toString()); + statusHeight = context.getResources().getDimensionPixelSize(height); + } catch (Exception e) + { + e.printStackTrace(); + } + return statusHeight; + } + + /** + * 鑾峰彇褰撳墠灞忓箷鎴浘锛屽寘鍚姸鎬佹爮 + * + * @param activity + * @return + */ + public static Bitmap snapShotWithStatusBar(Activity activity) + { + View view = activity.getWindow().getDecorView(); + view.setDrawingCacheEnabled(true); + view.buildDrawingCache(); + Bitmap bmp = view.getDrawingCache(); + int width = getScreenWidth(activity); + int height = getScreenHeight(activity); + Bitmap bp = null; + bp = Bitmap.createBitmap(bmp, 0, 0, width, height); + view.destroyDrawingCache(); + return bp; + + } + + /** + * 鑾峰彇褰撳墠灞忓箷鎴浘锛屼笉鍖呭惈鐘舵�佹爮 + * + * @param activity + * @return + */ + public static Bitmap snapShotWithoutStatusBar(Activity activity) + { + View view = activity.getWindow().getDecorView(); + view.setDrawingCacheEnabled(true); + view.buildDrawingCache(); + Bitmap bmp = view.getDrawingCache(); + Rect frame = new Rect(); + activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(frame); + int statusBarHeight = frame.top; + + int width = getScreenWidth(activity); + int height = getScreenHeight(activity); + Bitmap bp = null; + bp = Bitmap.createBitmap(bmp, 0, statusBarHeight, width, height + - statusBarHeight); + view.destroyDrawingCache(); + return bp; + + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SingleToast.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SingleToast.java new file mode 100644 index 0000000..bae9fbe --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SingleToast.java @@ -0,0 +1,32 @@ +package com.demo.lib.common.util; + +import android.content.Context; +import android.os.Handler; +import android.widget.Toast; + +public class SingleToast { + private static Toast mToast; + private static Handler mHandler = new Handler(); + private static Runnable r = new Runnable() { + public void run() { + mToast.cancel(); + } + }; + + public static void showToast(Context mContext, String text) { + + mHandler.removeCallbacks(r); + if (mToast != null) + mToast.setText(text); + else + mToast = Toast.makeText(mContext, text, Toast.LENGTH_LONG); + mHandler.postDelayed(r, 2000); + + mToast.show(); + } + + public static void showToast(Context mContext, int resId, int duration) { + showToast(mContext, mContext.getResources().getString(resId)); + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SystemCommon.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SystemCommon.java new file mode 100644 index 0000000..65b3e6c --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/SystemCommon.java @@ -0,0 +1,53 @@ +package com.demo.lib.common.util; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.view.WindowManager; + +public class SystemCommon { + + /** + * 鑾峰彇褰撳墠APP 鐗堟湰鍙� + * + * @param activity + * @return + */ + public static int getVersonCode(Context activity) { + int versionCode = 1; + try { + versionCode = activity.getPackageManager().getPackageInfo( + activity.getPackageName(), + PackageManager.GET_CONFIGURATIONS).versionCode;// 鑾峰彇app鐗堟湰鍙� + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + return versionCode; + } + + /** + * 鑾峰彇灞忓箷瀹藉害 + * + * @param activity + * @return + */ + public static float getScreenWidth(Context activity) { + WindowManager wm = (WindowManager) activity + .getSystemService(Context.WINDOW_SERVICE); + + return wm.getDefaultDisplay().getWidth(); + } + + /** + * 鑾峰彇灞忓箷楂樺害 + * + * @param activity + * @return + */ + public static float getScreenHeight(Context activity) { + WindowManager wm = (WindowManager) activity + .getSystemService(Context.WINDOW_SERVICE); + + return wm.getDefaultDisplay().getHeight(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/AndroidCacheUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/AndroidCacheUtil.java new file mode 100644 index 0000000..b1e2e3e --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/AndroidCacheUtil.java @@ -0,0 +1,107 @@ +package com.demo.lib.common.util.cache; + +import android.content.Context; + +import java.io.File; +import java.text.DecimalFormat; + +/** + * 缂撳瓨宸ュ叿绫� + */ +public class AndroidCacheUtil { + + public static long getFileSize(File f) throws Exception// 鍙栧緱鏂囦欢澶瑰ぇ灏� + { + long size = 0; + File flist[] = f.listFiles(); + + for (int i = 0; i < flist.length; i++) { + if (flist[i].isDirectory()) { + size = size + getFileSize(flist[i]); + } else { + size = size + flist[i].length(); + } + } + return size; + } + + public static String formetFileSize(long fileS) {// 杞崲鏂囦欢澶у皬 + if (fileS == 0) { + return "0KB"; + } + DecimalFormat df = new DecimalFormat("#.00"); + String fileSizeString = ""; + if (fileS < 1024) { + fileSizeString = df.format((double) fileS) + "B"; + } else if (fileS < 1048576) { + fileSizeString = df.format((double) fileS / 1024) + "K"; + } else if (fileS < 1073741824) { + fileSizeString = df.format((double) fileS / 1048576) + "M"; + } else { + fileSizeString = df.format((double) fileS / 1073741824) + "G"; + } + return fileSizeString; + } + + public static long getCacheSize(Context context) throws Exception { + return getFileSize(context.getCacheDir()) + + getFileSize(context.getExternalCacheDir()); + } + + public static String getCacheSizeDesc(Context context) throws Exception { + long size = getCacheSize(context); + return formetFileSize(size); + } + + + public static boolean trimCache(Context context) { + File dir = context.getCacheDir(); + if (dir != null && dir.isDirectory() && dir.listFiles().length != 0) { + return deleteDir(dir); + } else { + return false; + } + } + + public static boolean trimExternalCache(Context context) { + + File dir = context.getExternalCacheDir(); + if (dir != null && dir.isDirectory() && dir.listFiles().length != 0) { + return deleteDir(dir); + } else { + return false; + } + + } + + /** + * 娓呴櫎鎵�鏈夌紦瀛� + * @param context + * @return + */ + public static boolean trimAllCache(Context context) { + try { + trimCache(context); + trimExternalCache(context); + return true; + } catch (Exception e) { + return false; + } + } + + + private static boolean deleteDir(File dir) { + if (dir != null && dir.isDirectory()) { + String[] children = dir.list(); + for (int i = 0; i < children.length; i++) { + boolean success = deleteDir(new File(dir, children[i])); + if (!success) { + return false; + } + } + } + return dir.delete(); + + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/DiskLruCache.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/DiskLruCache.java new file mode 100644 index 0000000..145de6a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/DiskLruCache.java @@ -0,0 +1,943 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.util.cache; + +import java.io.BufferedWriter; +import java.io.Closeable; +import java.io.EOFException; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.Callable; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * A cache that uses a bounded amount of space on a filesystem. Each cache + * entry has a string key and a fixed number of values. Each key must match + * the regex <strong>[a-z0-9_-]{1,120}</strong>. Values are byte sequences, + * accessible as streams or files. Each value must be between {@code 0} and + * {@code Integer.MAX_VALUE} bytes in length. + * + * <p>The cache stores its data in a directory on the filesystem. This + * directory must be exclusive to the cache; the cache may delete or overwrite + * files from its directory. It is an error for multiple processes to use the + * same cache directory at the same time. + * + * <p>This cache limits the number of bytes that it will store on the + * filesystem. When the number of stored bytes exceeds the limit, the cache will + * remove entries in the background until the limit is satisfied. The limit is + * not strict: the cache may temporarily exceed it while waiting for files to be + * deleted. The limit does not include filesystem overhead or the cache + * journal so space-sensitive applications should set a conservative limit. + * + * <p>Clients call {@link #edit} to create or update the values of an entry. An + * entry may have only one editor at one time; if a value is not available to be + * edited then {@link #edit} will return null. + * <ul> + * <li>When an entry is being <strong>created</strong> it is necessary to + * supply a full set of values; the empty value should be used as a + * placeholder if necessary. + * <li>When an entry is being <strong>edited</strong>, it is not necessary + * to supply data for every value; values default to their previous + * value. + * </ul> + * Every {@link #edit} call must be matched by a call to {@link Editor#commit} + * or {@link Editor#abort}. Committing is atomic: a read observes the full set + * of values as they were before or after the commit, but never a mix of values. + * + * <p>Clients call {@link #get} to read a snapshot of an entry. The read will + * observe the value at the time that {@link #get} was called. Updates and + * removals after the call do not impact ongoing reads. + * + * <p>This class is tolerant of some I/O errors. If files are missing from the + * filesystem, the corresponding entries will be dropped from the cache. If + * an error occurs while writing a cache value, the edit will fail silently. + * Callers should handle other problems by catching {@code IOException} and + * responding appropriately. + */ +public final class DiskLruCache implements Closeable { + static final String JOURNAL_FILE = "journal"; + static final String JOURNAL_FILE_TEMP = "journal.tmp"; + static final String JOURNAL_FILE_BACKUP = "journal.bkp"; + static final String MAGIC = "libcore.io.DiskLruCache"; + static final String VERSION_1 = "1"; + static final long ANY_SEQUENCE_NUMBER = -1; + static final String STRING_KEY_PATTERN = "[a-z0-9_-]{1,120}"; + static final Pattern LEGAL_KEY_PATTERN = Pattern.compile(STRING_KEY_PATTERN); + private static final String CLEAN = "CLEAN"; + private static final String DIRTY = "DIRTY"; + private static final String REMOVE = "REMOVE"; + private static final String READ = "READ"; + + /* + * This cache uses a journal file named "journal". A typical journal file + * looks like this: + * libcore.io.DiskLruCache + * 1 + * 100 + * 2 + * + * CLEAN 3400330d1dfc7f3f7f4b8d4d803dfcf6 832 21054 + * DIRTY 335c4c6028171cfddfbaae1a9c313c52 + * CLEAN 335c4c6028171cfddfbaae1a9c313c52 3934 2342 + * REMOVE 335c4c6028171cfddfbaae1a9c313c52 + * DIRTY 1ab96a171faeeee38496d8b330771a7a + * CLEAN 1ab96a171faeeee38496d8b330771a7a 1600 234 + * READ 335c4c6028171cfddfbaae1a9c313c52 + * READ 3400330d1dfc7f3f7f4b8d4d803dfcf6 + * + * The first five lines of the journal form its header. They are the + * constant string "libcore.io.DiskLruCache", the disk cache's version, + * the application's version, the value count, and a blank line. + * + * Each of the subsequent lines in the file is a record of the state of a + * cache entry. Each line contains space-separated values: a state, a key, + * and optional state-specific values. + * o DIRTY lines track that an entry is actively being created or updated. + * Every successful DIRTY action should be followed by a CLEAN or REMOVE + * action. DIRTY lines without a matching CLEAN or REMOVE indicate that + * temporary files may need to be deleted. + * o CLEAN lines track a cache entry that has been successfully published + * and may be read. A publish line is followed by the lengths of each of + * its values. + * o READ lines track accesses for LRU. + * o REMOVE lines track entries that have been deleted. + * + * The journal file is appended to as cache operations occur. The journal may + * occasionally be compacted by dropping redundant lines. A temporary file named + * "journal.tmp" will be used during compaction; that file should be deleted if + * it exists when the cache is opened. + */ + + private final File directory; + private final File journalFile; + private final File journalFileTmp; + private final File journalFileBackup; + private final int appVersion; + private long maxSize; + private final int valueCount; + private long size = 0; + private Writer journalWriter; + private final LinkedHashMap<String, Entry> lruEntries = + new LinkedHashMap<String, Entry>(0, 0.75f, true); + private int redundantOpCount; + + /** + * To differentiate between old and current snapshots, each entry is given + * a sequence number each time an edit is committed. A snapshot is stale if + * its sequence number is not equal to its entry's sequence number. + */ + private long nextSequenceNumber = 0; + + /** This cache uses a single background thread to evict entries. */ + final ThreadPoolExecutor executorService = + new ThreadPoolExecutor(0, 1, 60L, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()); + private final Callable<Void> cleanupCallable = new Callable<Void>() { + public Void call() throws Exception { + synchronized (DiskLruCache.this) { + if (journalWriter == null) { + return null; // Closed. + } + trimToSize(); + if (journalRebuildRequired()) { + rebuildJournal(); + redundantOpCount = 0; + } + } + return null; + } + }; + + private DiskLruCache(File directory, int appVersion, int valueCount, long maxSize) { + this.directory = directory; + this.appVersion = appVersion; + this.journalFile = new File(directory, JOURNAL_FILE); + this.journalFileTmp = new File(directory, JOURNAL_FILE_TEMP); + this.journalFileBackup = new File(directory, JOURNAL_FILE_BACKUP); + this.valueCount = valueCount; + this.maxSize = maxSize; + } + + /** + * Opens the cache in {@code directory}, creating a cache if none exists + * there. + * + * @param directory a writable directory + * @param valueCount the number of values per cache entry. Must be positive. + * @param maxSize the maximum number of bytes this cache should use to store + * @throws IOException if reading or writing the cache directory fails + */ + public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize) + throws IOException { + if (maxSize <= 0) { + throw new IllegalArgumentException("maxSize <= 0"); + } + if (valueCount <= 0) { + throw new IllegalArgumentException("valueCount <= 0"); + } + + // If a bkp file exists, use it instead. + File backupFile = new File(directory, JOURNAL_FILE_BACKUP); + if (backupFile.exists()) { + File journalFile = new File(directory, JOURNAL_FILE); + // If journal file also exists just delete backup file. + if (journalFile.exists()) { + backupFile.delete(); + } else { + renameTo(backupFile, journalFile, false); + } + } + + // Prefer to pick up where we left off. + DiskLruCache cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); + if (cache.journalFile.exists()) { + try { + cache.readJournal(); + cache.processJournal(); + return cache; + } catch (IOException journalIsCorrupt) { + System.out + .println("DiskLruCache " + + directory + + " is corrupt: " + + journalIsCorrupt.getMessage() + + ", removing"); + cache.delete(); + } + } + + // Create a new empty cache. + directory.mkdirs(); + cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); + cache.rebuildJournal(); + return cache; + } + + private void readJournal() throws IOException { + StrictLineReader reader = new StrictLineReader(new FileInputStream(journalFile), Util.US_ASCII); + try { + String magic = reader.readLine(); + String version = reader.readLine(); + String appVersionString = reader.readLine(); + String valueCountString = reader.readLine(); + String blank = reader.readLine(); + if (!MAGIC.equals(magic) + || !VERSION_1.equals(version) + || !Integer.toString(appVersion).equals(appVersionString) + || !Integer.toString(valueCount).equals(valueCountString) + || !"".equals(blank)) { + throw new IOException("unexpected journal header: [" + magic + ", " + version + ", " + + valueCountString + ", " + blank + "]"); + } + + int lineCount = 0; + while (true) { + try { + readJournalLine(reader.readLine()); + lineCount++; + } catch (EOFException endOfJournal) { + break; + } + } + redundantOpCount = lineCount - lruEntries.size(); + + // If we ended on a truncated line, rebuild the journal before appending to it. + if (reader.hasUnterminatedLine()) { + rebuildJournal(); + } else { + journalWriter = new BufferedWriter(new OutputStreamWriter( + new FileOutputStream(journalFile, true), Util.US_ASCII)); + } + } finally { + Util.closeQuietly(reader); + } + } + + private void readJournalLine(String line) throws IOException { + int firstSpace = line.indexOf(' '); + if (firstSpace == -1) { + throw new IOException("unexpected journal line: " + line); + } + + int keyBegin = firstSpace + 1; + int secondSpace = line.indexOf(' ', keyBegin); + final String key; + if (secondSpace == -1) { + key = line.substring(keyBegin); + if (firstSpace == REMOVE.length() && line.startsWith(REMOVE)) { + lruEntries.remove(key); + return; + } + } else { + key = line.substring(keyBegin, secondSpace); + } + + Entry entry = lruEntries.get(key); + if (entry == null) { + entry = new Entry(key); + lruEntries.put(key, entry); + } + + if (secondSpace != -1 && firstSpace == CLEAN.length() && line.startsWith(CLEAN)) { + String[] parts = line.substring(secondSpace + 1).split(" "); + entry.readable = true; + entry.currentEditor = null; + entry.setLengths(parts); + } else if (secondSpace == -1 && firstSpace == DIRTY.length() && line.startsWith(DIRTY)) { + entry.currentEditor = new Editor(entry); + } else if (secondSpace == -1 && firstSpace == READ.length() && line.startsWith(READ)) { + // This work was already done by calling lruEntries.get(). + } else { + throw new IOException("unexpected journal line: " + line); + } + } + + /** + * Computes the initial size and collects garbage as a part of opening the + * cache. Dirty entries are assumed to be inconsistent and will be deleted. + */ + private void processJournal() throws IOException { + deleteIfExists(journalFileTmp); + for (Iterator<Entry> i = lruEntries.values().iterator(); i.hasNext(); ) { + Entry entry = i.next(); + if (entry.currentEditor == null) { + for (int t = 0; t < valueCount; t++) { + size += entry.lengths[t]; + } + } else { + entry.currentEditor = null; + for (int t = 0; t < valueCount; t++) { + deleteIfExists(entry.getCleanFile(t)); + deleteIfExists(entry.getDirtyFile(t)); + } + i.remove(); + } + } + } + + /** + * Creates a new journal that omits redundant information. This replaces the + * current journal if it exists. + */ + private synchronized void rebuildJournal() throws IOException { + if (journalWriter != null) { + journalWriter.close(); + } + + Writer writer = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(journalFileTmp), Util.US_ASCII)); + try { + writer.write(MAGIC); + writer.write("\n"); + writer.write(VERSION_1); + writer.write("\n"); + writer.write(Integer.toString(appVersion)); + writer.write("\n"); + writer.write(Integer.toString(valueCount)); + writer.write("\n"); + writer.write("\n"); + + for (Entry entry : lruEntries.values()) { + if (entry.currentEditor != null) { + writer.write(DIRTY + ' ' + entry.key + '\n'); + } else { + writer.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); + } + } + } finally { + writer.close(); + } + + if (journalFile.exists()) { + renameTo(journalFile, journalFileBackup, true); + } + renameTo(journalFileTmp, journalFile, false); + journalFileBackup.delete(); + + journalWriter = new BufferedWriter( + new OutputStreamWriter(new FileOutputStream(journalFile, true), Util.US_ASCII)); + } + + private static void deleteIfExists(File file) throws IOException { + if (file.exists() && !file.delete()) { + throw new IOException(); + } + } + + private static void renameTo(File from, File to, boolean deleteDestination) throws IOException { + if (deleteDestination) { + deleteIfExists(to); + } + if (!from.renameTo(to)) { + throw new IOException(); + } + } + + /** + * Returns a snapshot of the entry named {@code key}, or null if it doesn't + * exist is not currently readable. If a value is returned, it is moved to + * the head of the LRU queue. + */ + public synchronized Snapshot get(String key) throws IOException { + checkNotClosed(); + validateKey(key); + Entry entry = lruEntries.get(key); + if (entry == null) { + return null; + } + + if (!entry.readable) { + return null; + } + + // Open all streams eagerly to guarantee that we see a single published + // snapshot. If we opened streams lazily then the streams could come + // from different edits. + InputStream[] ins = new InputStream[valueCount]; + try { + for (int i = 0; i < valueCount; i++) { + ins[i] = new FileInputStream(entry.getCleanFile(i)); + } + } catch (FileNotFoundException e) { + // A file must have been deleted manually! + for (int i = 0; i < valueCount; i++) { + if (ins[i] != null) { + Util.closeQuietly(ins[i]); + } else { + break; + } + } + return null; + } + + redundantOpCount++; + journalWriter.append(READ + ' ' + key + '\n'); + if (journalRebuildRequired()) { + executorService.submit(cleanupCallable); + } + + return new Snapshot(key, entry.sequenceNumber, ins, entry.lengths); + } + + /** + * Returns an editor for the entry named {@code key}, or null if another + * edit is in progress. + */ + public Editor edit(String key) throws IOException { + return edit(key, ANY_SEQUENCE_NUMBER); + } + + private synchronized Editor edit(String key, long expectedSequenceNumber) throws IOException { + checkNotClosed(); + validateKey(key); + Entry entry = lruEntries.get(key); + if (expectedSequenceNumber != ANY_SEQUENCE_NUMBER && (entry == null + || entry.sequenceNumber != expectedSequenceNumber)) { + return null; // Snapshot is stale. + } + if (entry == null) { + entry = new Entry(key); + lruEntries.put(key, entry); + } else if (entry.currentEditor != null) { + return null; // Another edit is in progress. + } + + Editor editor = new Editor(entry); + entry.currentEditor = editor; + + // Flush the journal before creating files to prevent file leaks. + journalWriter.write(DIRTY + ' ' + key + '\n'); + journalWriter.flush(); + return editor; + } + + /** Returns the directory where this cache stores its data. */ + public File getDirectory() { + return directory; + } + + /** + * Returns the maximum number of bytes that this cache should use to store + * its data. + */ + public synchronized long getMaxSize() { + return maxSize; + } + + /** + * Changes the maximum number of bytes the cache can store and queues a job + * to trim the existing store, if necessary. + */ + public synchronized void setMaxSize(long maxSize) { + this.maxSize = maxSize; + executorService.submit(cleanupCallable); + } + + /** + * Returns the number of bytes currently being used to store the values in + * this cache. This may be greater than the max size if a background + * deletion is pending. + */ + public synchronized long size() { + return size; + } + + private synchronized void completeEdit(Editor editor, boolean success) throws IOException { + Entry entry = editor.entry; + if (entry.currentEditor != editor) { + throw new IllegalStateException(); + } + + // If this edit is creating the entry for the first time, every index must have a value. + if (success && !entry.readable) { + for (int i = 0; i < valueCount; i++) { + if (!editor.written[i]) { + editor.abort(); + throw new IllegalStateException("Newly created entry didn't create value for index " + i); + } + if (!entry.getDirtyFile(i).exists()) { + editor.abort(); + return; + } + } + } + + for (int i = 0; i < valueCount; i++) { + File dirty = entry.getDirtyFile(i); + if (success) { + if (dirty.exists()) { + File clean = entry.getCleanFile(i); + dirty.renameTo(clean); + long oldLength = entry.lengths[i]; + long newLength = clean.length(); + entry.lengths[i] = newLength; + size = size - oldLength + newLength; + } + } else { + deleteIfExists(dirty); + } + } + + redundantOpCount++; + entry.currentEditor = null; + if (entry.readable | success) { + entry.readable = true; + journalWriter.write(CLEAN + ' ' + entry.key + entry.getLengths() + '\n'); + if (success) { + entry.sequenceNumber = nextSequenceNumber++; + } + } else { + lruEntries.remove(entry.key); + journalWriter.write(REMOVE + ' ' + entry.key + '\n'); + } + journalWriter.flush(); + + if (size > maxSize || journalRebuildRequired()) { + executorService.submit(cleanupCallable); + } + } + + /** + * We only rebuild the journal when it will halve the size of the journal + * and eliminate at least 2000 ops. + */ + private boolean journalRebuildRequired() { + final int redundantOpCompactThreshold = 2000; + return redundantOpCount >= redundantOpCompactThreshold // + && redundantOpCount >= lruEntries.size(); + } + + /** + * Drops the entry for {@code key} if it exists and can be removed. Entries + * actively being edited cannot be removed. + * + * @return true if an entry was removed. + */ + public synchronized boolean remove(String key) throws IOException { + checkNotClosed(); + validateKey(key); + Entry entry = lruEntries.get(key); + if (entry == null || entry.currentEditor != null) { + return false; + } + + for (int i = 0; i < valueCount; i++) { + File file = entry.getCleanFile(i); + if (file.exists() && !file.delete()) { + throw new IOException("failed to delete " + file); + } + size -= entry.lengths[i]; + entry.lengths[i] = 0; + } + + redundantOpCount++; + journalWriter.append(REMOVE + ' ' + key + '\n'); + lruEntries.remove(key); + + if (journalRebuildRequired()) { + executorService.submit(cleanupCallable); + } + + return true; + } + + /** Returns true if this cache has been closed. */ + public synchronized boolean isClosed() { + return journalWriter == null; + } + + private void checkNotClosed() { + if (journalWriter == null) { + throw new IllegalStateException("cache is closed"); + } + } + + /** Force buffered operations to the filesystem. */ + public synchronized void flush() throws IOException { + checkNotClosed(); + trimToSize(); + journalWriter.flush(); + } + + /** Closes this cache. Stored values will remain on the filesystem. */ + public synchronized void close() throws IOException { + if (journalWriter == null) { + return; // Already closed. + } + for (Entry entry : new ArrayList<Entry>(lruEntries.values())) { + if (entry.currentEditor != null) { + entry.currentEditor.abort(); + } + } + trimToSize(); + journalWriter.close(); + journalWriter = null; + } + + private void trimToSize() throws IOException { + while (size > maxSize) { + Map.Entry<String, Entry> toEvict = lruEntries.entrySet().iterator().next(); + remove(toEvict.getKey()); + } + } + + /** + * Closes the cache and deletes all of its stored values. This will delete + * all files in the cache directory including files that weren't created by + * the cache. + */ + public void delete() throws IOException { + close(); + Util.deleteContents(directory); + } + + private void validateKey(String key) { + Matcher matcher = LEGAL_KEY_PATTERN.matcher(key); + if (!matcher.matches()) { + throw new IllegalArgumentException("keys must match regex " + + STRING_KEY_PATTERN + ": \"" + key + "\""); + } + } + + private static String inputStreamToString(InputStream in) throws IOException { + return Util.readFully(new InputStreamReader(in, Util.UTF_8)); + } + + /** A snapshot of the values for an entry. */ + public final class Snapshot implements Closeable { + private final String key; + private final long sequenceNumber; + private final InputStream[] ins; + private final long[] lengths; + + private Snapshot(String key, long sequenceNumber, InputStream[] ins, long[] lengths) { + this.key = key; + this.sequenceNumber = sequenceNumber; + this.ins = ins; + this.lengths = lengths; + } + + /** + * Returns an editor for this snapshot's entry, or null if either the + * entry has changed since this snapshot was created or if another edit + * is in progress. + */ + public Editor edit() throws IOException { + return DiskLruCache.this.edit(key, sequenceNumber); + } + + /** Returns the unbuffered stream with the value for {@code index}. */ + public InputStream getInputStream(int index) { + return ins[index]; + } + + /** Returns the string value for {@code index}. */ + public String getString(int index) throws IOException { + return inputStreamToString(getInputStream(index)); + } + + /** Returns the byte length of the value for {@code index}. */ + public long getLength(int index) { + return lengths[index]; + } + + public void close() { + for (InputStream in : ins) { + Util.closeQuietly(in); + } + } + } + + private static final OutputStream NULL_OUTPUT_STREAM = new OutputStream() { + @Override + public void write(int b) throws IOException { + // Eat all writes silently. Nom nom. + } + }; + + /** Edits the values for an entry. */ + public final class Editor { + private final Entry entry; + private final boolean[] written; + private boolean hasErrors; + private boolean committed; + + private Editor(Entry entry) { + this.entry = entry; + this.written = (entry.readable) ? null : new boolean[valueCount]; + } + + /** + * Returns an unbuffered input stream to read the last committed value, + * or null if no value has been committed. + */ + public InputStream newInputStream(int index) throws IOException { + synchronized (DiskLruCache.this) { + if (entry.currentEditor != this) { + throw new IllegalStateException(); + } + if (!entry.readable) { + return null; + } + try { + return new FileInputStream(entry.getCleanFile(index)); + } catch (FileNotFoundException e) { + return null; + } + } + } + + /** + * Returns the last committed value as a string, or null if no value + * has been committed. + */ + public String getString(int index) throws IOException { + InputStream in = newInputStream(index); + return in != null ? inputStreamToString(in) : null; + } + + /** + * Returns a new unbuffered output stream to write the value at + * {@code index}. If the underlying output stream encounters errors + * when writing to the filesystem, this edit will be aborted when + * {@link #commit} is called. The returned output stream does not throw + * IOExceptions. + */ + public OutputStream newOutputStream(int index) throws IOException { + if (index < 0 || index >= valueCount) { + throw new IllegalArgumentException("Expected index " + index + " to " + + "be greater than 0 and less than the maximum value count " + + "of " + valueCount); + } + synchronized (DiskLruCache.this) { + if (entry.currentEditor != this) { + throw new IllegalStateException(); + } + if (!entry.readable) { + written[index] = true; + } + File dirtyFile = entry.getDirtyFile(index); + FileOutputStream outputStream; + try { + outputStream = new FileOutputStream(dirtyFile); + } catch (FileNotFoundException e) { + // Attempt to recreate the cache directory. + directory.mkdirs(); + try { + outputStream = new FileOutputStream(dirtyFile); + } catch (FileNotFoundException e2) { + // We are unable to recover. Silently eat the writes. + return NULL_OUTPUT_STREAM; + } + } + return new FaultHidingOutputStream(outputStream); + } + } + + /** Sets the value at {@code index} to {@code value}. */ + public void set(int index, String value) throws IOException { + Writer writer = null; + try { + writer = new OutputStreamWriter(newOutputStream(index), Util.UTF_8); + writer.write(value); + } finally { + Util.closeQuietly(writer); + } + } + + /** + * Commits this edit so it is visible to readers. This releases the + * edit lock so another edit may be started on the same key. + */ + public void commit() throws IOException { + if (hasErrors) { + completeEdit(this, false); + remove(entry.key); // The previous entry is stale. + } else { + completeEdit(this, true); + } + committed = true; + } + + /** + * Aborts this edit. This releases the edit lock so another edit may be + * started on the same key. + */ + public void abort() throws IOException { + completeEdit(this, false); + } + + public void abortUnlessCommitted() { + if (!committed) { + try { + abort(); + } catch (IOException ignored) { + } + } + } + + private class FaultHidingOutputStream extends FilterOutputStream { + private FaultHidingOutputStream(OutputStream out) { + super(out); + } + + @Override public void write(int oneByte) { + try { + out.write(oneByte); + } catch (IOException e) { + hasErrors = true; + } + } + + @Override public void write(byte[] buffer, int offset, int length) { + try { + out.write(buffer, offset, length); + } catch (IOException e) { + hasErrors = true; + } + } + + @Override public void close() { + try { + out.close(); + } catch (IOException e) { + hasErrors = true; + } + } + + @Override public void flush() { + try { + out.flush(); + } catch (IOException e) { + hasErrors = true; + } + } + } + } + + private final class Entry { + private final String key; + + /** Lengths of this entry's files. */ + private final long[] lengths; + + /** True if this entry has ever been published. */ + private boolean readable; + + /** The ongoing edit or null if this entry is not being edited. */ + private Editor currentEditor; + + /** The sequence number of the most recently committed edit to this entry. */ + private long sequenceNumber; + + private Entry(String key) { + this.key = key; + this.lengths = new long[valueCount]; + } + + public String getLengths() throws IOException { + StringBuilder result = new StringBuilder(); + for (long size : lengths) { + result.append(' ').append(size); + } + return result.toString(); + } + + /** Set lengths using decimal numbers like "10123". */ + private void setLengths(String[] strings) throws IOException { + if (strings.length != valueCount) { + throw invalidLengths(strings); + } + + try { + for (int i = 0; i < strings.length; i++) { + lengths[i] = Long.parseLong(strings[i]); + } + } catch (NumberFormatException e) { + throw invalidLengths(strings); + } + } + + private IOException invalidLengths(String[] strings) throws IOException { + throw new IOException("unexpected journal line: " + java.util.Arrays.toString(strings)); + } + + public File getCleanFile(int i) { + return new File(directory, key + "." + i); + } + + public File getDirtyFile(int i) { + return new File(directory, key + "." + i + ".tmp"); + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageFileCache.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageFileCache.java new file mode 100644 index 0000000..8952560 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageFileCache.java @@ -0,0 +1,170 @@ +package com.demo.lib.common.util.cache; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Comparator; + +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Environment; +import android.os.StatFs; +import android.util.Log; + +public class ImageFileCache { + private static final String CACHDIR = "ImgCach"; + private static final String WHOLESALE_CONV = ".cach"; + + private static final int MB = 1024 * 1024; + private static final int CACHE_SIZE = 10; + private static final int FREE_SD_SPACE_NEEDED_TO_CACHE = 10; + + public ImageFileCache() { + // 娓呯悊鏂囦欢缂撳瓨 + removeCache(getDirectory()); + } + + /** 浠庣紦瀛樹腑鑾峰彇鍥剧墖 **/ + public Bitmap getImage(final String url) { + final String path = getDirectory() + "/" + convertUrlToFileName(url); + File file = new File(path); + if (file.exists()) { + Bitmap bmp = BitmapFactory.decodeFile(path); + if (bmp == null) { + file.delete(); + } else { + updateFileTime(path); + return bmp; + } + } + return null; + } + + /** 灏嗗浘鐗囧瓨鍏ユ枃浠剁紦瀛� **/ + public void saveBitmap(Bitmap bm, String url) { + if (bm == null) { + return; + } + // 鍒ゆ柇sdcard涓婄殑绌洪棿 + if (FREE_SD_SPACE_NEEDED_TO_CACHE > freeSpaceOnSd()) { + // SD绌洪棿涓嶈冻 + return; + } + String filename = convertUrlToFileName(url); + String dir = getDirectory(); + File dirFile = new File(dir); + if (!dirFile.exists()) { + dirFile.mkdirs(); + } + File file = new File(dir, filename); + try { + file.createNewFile(); + OutputStream outStream = new FileOutputStream(file); + bm.compress(Bitmap.CompressFormat.JPEG, 100, outStream); + outStream.flush(); + outStream.close(); + } catch (FileNotFoundException e) { + Log.w("ImageFileCache", "FileNotFoundException"); + } catch (IOException e) { + e.printStackTrace(); + Log.w("ImageFileCache", "IOException"); + } + } + + /** + * 璁$畻瀛樺偍鐩綍涓嬬殑鏂囦欢澶у皬锛� + * 褰撴枃浠舵�诲ぇ灏忓ぇ浜庤瀹氱殑CACHE_SIZE鎴栬�卻dcard鍓╀綑绌洪棿灏忎簬FREE_SD_SPACE_NEEDED_TO_CACHE鐨勮瀹� + * 閭d箞鍒犻櫎40%鏈�杩戞病鏈夎浣跨敤鐨勬枃浠� + */ + private boolean removeCache(String dirPath) { + File dir = new File(dirPath); + File[] files = dir.listFiles(); + if (files == null) { + return true; + } + if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { + return false; + } + + int dirSize = 0; + for (int i = 0; i < files.length; i++) { + if (files[i].getName().contains(WHOLESALE_CONV)) { + dirSize += files[i].length(); + } + } + + if (dirSize > CACHE_SIZE * MB + || FREE_SD_SPACE_NEEDED_TO_CACHE > freeSpaceOnSd()) { + int removeFactor = (int) ((0.4 * files.length) + 1); + Arrays.sort(files, new FileLastModifSort()); + for (int i = 0; i < removeFactor; i++) { + if (files[i].getName().contains(WHOLESALE_CONV)) { + files[i].delete(); + } + } + } + + return freeSpaceOnSd() > CACHE_SIZE; + } + + /** 淇敼鏂囦欢鐨勬渶鍚庝慨鏀规椂闂� **/ + public void updateFileTime(String path) { + File file = new File(path); + long newModifiedTime = System.currentTimeMillis(); + file.setLastModified(newModifiedTime); + } + + /** 璁$畻sdcard涓婄殑鍓╀綑绌洪棿 **/ + private int freeSpaceOnSd() { + StatFs stat = new StatFs(Environment.getExternalStorageDirectory().getPath()); + double sdFreeMB = ((double) stat.getAvailableBlocks() * (double) stat.getBlockSize()) / MB; + return (int) sdFreeMB; + } + + /** 灏唘rl杞垚鏂囦欢鍚� **/ + private String convertUrlToFileName(String url) { + String filename = url; + filename = filename.replace("http://", ""); + filename = filename.replace("/", "."); + filename = filename.replace(":", "."); + return filename + WHOLESALE_CONV; + } + + /** 鑾峰緱缂撳瓨鐩綍 **/ + private String getDirectory() { + String dir = getSDPath() + "/" + CACHDIR; + return dir; + } + + /** 鍙朣D鍗¤矾寰� **/ + private String getSDPath() { + File sdDir = null; + boolean sdCardExist = Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED); // 鍒ゆ柇sd鍗℃槸鍚﹀瓨鍦� + if (sdCardExist) { + sdDir = Environment.getExternalStorageDirectory(); // 鑾峰彇鏍圭洰褰� + } + if (sdDir != null) { + return sdDir.toString(); + } else { + return ""; + } + } + + /** + * 鏍规嵁鏂囦欢鐨勬渶鍚庝慨鏀规椂闂磋繘琛屾帓搴� + */ + private class FileLastModifSort implements Comparator<File> { + public int compare(File arg0, File arg1) { + if (arg0.lastModified() > arg1.lastModified()) { + return 1; + } else if (arg0.lastModified() == arg1.lastModified()) { + return 0; + } else { + return -1; + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageMemoryCache.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageMemoryCache.java new file mode 100644 index 0000000..24e62eb --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/ImageMemoryCache.java @@ -0,0 +1,109 @@ +package com.demo.lib.common.util.cache; + +import java.lang.ref.SoftReference; +import java.util.LinkedHashMap; + +import android.app.ActivityManager; +import android.content.Context; +import android.graphics.Bitmap; +import androidx.collection.LruCache; + +/** + * 浠庡唴瀛樿鍙栨暟鎹�熷害鏄渶蹇殑锛屼负浜嗘洿澶ч檺搴︿娇鐢ㄥ唴瀛橈紝杩欓噷浣跨敤浜嗕袱灞傜紦瀛樸�� 纭紩鐢ㄧ紦瀛樹笉浼氳交鏄撹鍥炴敹锛岀敤鏉ヤ繚瀛樺父鐢ㄦ暟鎹紝涓嶅父鐢ㄧ殑杞叆杞紩鐢ㄧ紦瀛樸�� + */ +public class ImageMemoryCache { + + /** + * 杞紩鐢ㄧ紦瀛樺閲� + */ + private static final int SOFT_CACHE_SIZE = 15; + + /** + * 纭紩鐢ㄧ紦瀛� + */ + private static LruCache<String, Bitmap> mLruCache; + + /** + * 杞紩鐢ㄧ紦瀛� + */ + private static LinkedHashMap<String, SoftReference<Bitmap>> mSoftCache; + + public ImageMemoryCache(Context context) { + int memClass = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).getMemoryClass(); + int cacheSize = 1024 * 1024 * memClass / 8; // 纭紩鐢ㄧ紦瀛樺閲忥紝涓虹郴缁熷彲鐢ㄥ唴瀛樼殑1/8 + mLruCache = new LruCache<String, Bitmap>(cacheSize) { + @Override + protected int sizeOf(String key, Bitmap value) { + if (value != null) { + return value.getRowBytes() * value.getHeight(); + } else { + return 0; + } + } + + @Override + protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) { + if (oldValue != null) { + // 纭紩鐢ㄧ紦瀛樺閲忔弧鐨勬椂鍊欙紝浼氭牴鎹甃RU绠楁硶鎶婃渶杩戞病鏈夎浣跨敤鐨勫浘鐗囪浆鍏ユ杞紩鐢ㄧ紦瀛� + mSoftCache.put(key, new SoftReference<Bitmap>(oldValue)); + } + } + }; + mSoftCache = new LinkedHashMap<String, SoftReference<Bitmap>>(SOFT_CACHE_SIZE, 0.75f, true) { + private static final long serialVersionUID = 6040103833179403725L; + + @Override + protected boolean removeEldestEntry(Entry<String, SoftReference<Bitmap>> eldest) { + return size() > SOFT_CACHE_SIZE; + } + }; + } + + /** + * 浠庣紦瀛樹腑鑾峰彇鍥剧墖 + */ + public Bitmap getBitmapFromCache(String url) { + Bitmap bitmap; + // 鍏堜粠纭紩鐢ㄧ紦瀛樹腑鑾峰彇 + synchronized (mLruCache) { + bitmap = mLruCache.get(url); + if (bitmap != null) { + // 濡傛灉鎵惧埌鐨勮瘽锛屾妸鍏冪礌绉诲埌LinkedHashMap鐨勬渶鍓嶉潰锛屼粠鑰屼繚璇佸湪LRU绠楁硶涓槸鏈�鍚庤鍒犻櫎 + mLruCache.remove(url); + mLruCache.put(url, bitmap); + return bitmap; + } + } + // 濡傛灉纭紩鐢ㄧ紦瀛樹腑鎵句笉鍒帮紝鍒拌蒋寮曠敤缂撳瓨涓壘 + synchronized (mSoftCache) { + SoftReference<Bitmap> bitmapReference = mSoftCache.get(url); + if (bitmapReference != null) { + bitmap = bitmapReference.get(); + if (bitmap != null) { + // 灏嗗浘鐗囩Щ鍥炵‖缂撳瓨 + mLruCache.put(url, bitmap); + mSoftCache.remove(url); + return bitmap; + } else { + mSoftCache.remove(url); + } + } + } + return null; + } + + /** + * 娣诲姞鍥剧墖鍒扮紦瀛� + */ + public void addBitmapToCache(String url, Bitmap bitmap) { + if (bitmap != null) { + synchronized (mLruCache) { + mLruCache.put(url, bitmap); + } + } + } + + public void clearCache() { + mSoftCache.clear(); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/StrictLineReader.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/StrictLineReader.java new file mode 100644 index 0000000..42e8958 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/StrictLineReader.java @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.util.cache; + +import java.io.ByteArrayOutputStream; +import java.io.Closeable; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; + +/** + * Buffers input from an {@link InputStream} for reading lines. + * + * <p>This class is used for buffered reading of lines. For purposes of this class, a line ends + * with "\n" or "\r\n". End of input is reported by throwing {@code EOFException}. Unterminated + * line at end of input is invalid and will be ignored, the caller may use {@code + * hasUnterminatedLine()} to detect it after catching the {@code EOFException}. + * + * <p>This class is intended for reading input that strictly consists of lines, such as line-based + * cache entries or cache journal. Unlike the {@link java.io.BufferedReader} which in conjunction + * with {@link java.io.InputStreamReader} provides similar functionality, this class uses different + * end-of-input reporting and a more restrictive definition of a line. + * + * <p>This class supports only charsets that encode '\r' and '\n' as a single byte with value 13 + * and 10, respectively, and the representation of no other character contains these values. + * We currently check in constructor that the charset is one of US-ASCII, UTF-8 and ISO-8859-1. + * The default charset is US_ASCII. + */ +class StrictLineReader implements Closeable { + private static final byte CR = (byte) '\r'; + private static final byte LF = (byte) '\n'; + + private final InputStream in; + private final Charset charset; + + /* + * Buffered data is stored in {@code buf}. As long as no exception occurs, 0 <= pos <= end + * and the data in the range [pos, end) is buffered for reading. At end of input, if there is + * an unterminated line, we set end == -1, otherwise end == pos. If the underlying + * {@code InputStream} throws an {@code IOException}, end may remain as either pos or -1. + */ + private byte[] buf; + private int pos; + private int end; + + /** + * Constructs a new {@code LineReader} with the specified charset and the default capacity. + * + * @param in the {@code InputStream} to read data from. + * @param charset the charset used to decode data. Only US-ASCII, UTF-8 and ISO-8859-1 are + * supported. + * @throws NullPointerException if {@code in} or {@code charset} is null. + * @throws IllegalArgumentException if the specified charset is not supported. + */ + public StrictLineReader(InputStream in, Charset charset) { + this(in, 8192, charset); + } + + /** + * Constructs a new {@code LineReader} with the specified capacity and charset. + * + * @param in the {@code InputStream} to read data from. + * @param capacity the capacity of the buffer. + * @param charset the charset used to decode data. Only US-ASCII, UTF-8 and ISO-8859-1 are + * supported. + * @throws NullPointerException if {@code in} or {@code charset} is null. + * @throws IllegalArgumentException if {@code capacity} is negative or zero + * or the specified charset is not supported. + */ + public StrictLineReader(InputStream in, int capacity, Charset charset) { + if (in == null || charset == null) { + throw new NullPointerException(); + } + if (capacity < 0) { + throw new IllegalArgumentException("capacity <= 0"); + } + if (!(charset.equals(Util.US_ASCII))) { + throw new IllegalArgumentException("Unsupported encoding"); + } + + this.in = in; + this.charset = charset; + buf = new byte[capacity]; + } + + /** + * Closes the reader by closing the underlying {@code InputStream} and + * marking this reader as closed. + * + * @throws IOException for errors when closing the underlying {@code InputStream}. + */ + public void close() throws IOException { + synchronized (in) { + if (buf != null) { + buf = null; + in.close(); + } + } + } + + /** + * Reads the next line. A line ends with {@code "\n"} or {@code "\r\n"}, + * this end of line marker is not included in the result. + * + * @return the next line from the input. + * @throws IOException for underlying {@code InputStream} errors. + * @throws EOFException for the end of source stream. + */ + public String readLine() throws IOException { + synchronized (in) { + if (buf == null) { + throw new IOException("LineReader is closed"); + } + + // Read more data if we are at the end of the buffered data. + // Though it's an error to read after an exception, we will let {@code fillBuf()} + // throw again if that happens; thus we need to handle end == -1 as well as end == pos. + if (pos >= end) { + fillBuf(); + } + // Try to find LF in the buffered data and return the line if successful. + for (int i = pos; i != end; ++i) { + if (buf[i] == LF) { + int lineEnd = (i != pos && buf[i - 1] == CR) ? i - 1 : i; + String res = new String(buf, pos, lineEnd - pos, charset.name()); + pos = i + 1; + return res; + } + } + + // Let's anticipate up to 80 characters on top of those already read. + ByteArrayOutputStream out = new ByteArrayOutputStream(end - pos + 80) { + @Override + public String toString() { + int length = (count > 0 && buf[count - 1] == CR) ? count - 1 : count; + try { + return new String(buf, 0, length, charset.name()); + } catch (UnsupportedEncodingException e) { + throw new AssertionError(e); // Since we control the charset this will never happen. + } + } + }; + + while (true) { + out.write(buf, pos, end - pos); + // Mark unterminated line in case fillBuf throws EOFException or IOException. + end = -1; + fillBuf(); + // Try to find LF in the buffered data and return the line if successful. + for (int i = pos; i != end; ++i) { + if (buf[i] == LF) { + if (i != pos) { + out.write(buf, pos, i - pos); + } + pos = i + 1; + return out.toString(); + } + } + } + } + } + + public boolean hasUnterminatedLine() { + return end == -1; + } + + /** + * Reads new input data into the buffer. Call only with pos == end or end == -1, + * depending on the desired outcome if the function throws. + */ + private void fillBuf() throws IOException { + int result = in.read(buf, 0, buf.length); + if (result == -1) { + throw new EOFException(); + } + pos = 0; + end = result; + } +} + diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/Util.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/Util.java new file mode 100644 index 0000000..ad77bd5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/cache/Util.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2010 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.util.cache; + +import java.io.Closeable; +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.io.StringWriter; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +/** Junk drawer of utility methods. */ +final class Util { + static final Charset US_ASCII = StandardCharsets.US_ASCII; + static final Charset UTF_8 = StandardCharsets.UTF_8; + + private Util() { + } + + static String readFully(Reader reader) throws IOException { + try { + StringWriter writer = new StringWriter(); + char[] buffer = new char[1024]; + int count; + while ((count = reader.read(buffer)) != -1) { + writer.write(buffer, 0, count); + } + return writer.toString(); + } finally { + reader.close(); + } + } + + /** + * Deletes the contents of {@code dir}. Throws an IOException if any file + * could not be deleted, or if {@code dir} is not a readable directory. + */ + static void deleteContents(File dir) throws IOException { + File[] files = dir.listFiles(); + if (files == null) { + throw new IOException("not a readable directory: " + dir); + } + for (File file : files) { + if (file.isDirectory()) { + deleteContents(file); + } + if (!file.delete()) { + throw new IOException("failed to delete file: " + file); + } + } + } + + static void closeQuietly(/*Auto*/Closeable closeable) { + if (closeable != null) { + try { + closeable.close(); + } catch (RuntimeException rethrown) { + throw rethrown; + } catch (Exception ignored) { + } + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/BitmapUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/BitmapUtils.java new file mode 100644 index 0000000..ab123a6 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/BitmapUtils.java @@ -0,0 +1,208 @@ +package com.demo.lib.common.util.common; + +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Bitmap.Config; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.Matrix; +import android.view.View; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +/** + * ImageUtils + * + * @author LCJIAN + */ +public class BitmapUtils { + + /** + * 浠巚iew 寰楀埌鍥剧墖 + * + * @param view + * @return + */ + public static Bitmap getBitmapFromView(View view) { + view.destroyDrawingCache(); + view.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED)); + view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight()); + view.setDrawingCacheEnabled(true); + Bitmap bitmap = view.getDrawingCache(true); + return bitmap; + } + + /** + * convert Bitmap to byte array + * + * @param b + * @return + */ + public static byte[] bitmapToByte(Bitmap b) { + if (b == null) { + return null; + } + ByteArrayOutputStream o = new ByteArrayOutputStream(); + b.compress(Bitmap.CompressFormat.PNG, 100, o); + byte[] result = null; + result = o.toByteArray(); + try { + o.close(); + } catch (IOException e) { + e.printStackTrace(); + } + return result; + } + + /** + * scale image + * + * @param org + * @param newWidth + * @param newHeight + * @return + */ + public static Bitmap scaleImageTo(Bitmap org, int newWidth, int newHeight) { + return scaleImage(org, (float) newWidth / org.getWidth(), (float) newHeight / org.getHeight()); + } + + /** + * scale image + * + * @param org + * @param scaleWidth sacle of width + * @param scaleHeight scale of height + * @return + */ + public static Bitmap scaleImage(Bitmap org, float scaleWidth, float scaleHeight) { + if (org == null) { + return null; + } + Matrix matrix = new Matrix(); + matrix.postScale(scaleWidth, scaleHeight); + return Bitmap.createBitmap(org, 0, 0, org.getWidth(), org.getHeight(), matrix, true); + } + + /** + * Round the corners of a {@link Bitmap} + * + * @param source + * @param radius + * @return rounded corner bitmap + */ +// public static Bitmap roundCorners(final Bitmap source, float radius) { +// int width = source.getWidth(); +// int height = source.getHeight(); +// Paint paint = new Paint(); +// paint.setAntiAlias(true); +// paint.setColor(Color.WHITE); +// Bitmap clipped = Bitmap.createBitmap(width, height, Config.ARGB_8888); +// Canvas canvas = new Canvas(clipped); +// canvas.drawRoundRect(new RectF(0, 0, width, height), radius, radius, paint); +// paint.setXfermode(new PorterDuffXfermode(android.graphics.PorterDuff.Mode.DST_IN)); +// Bitmap rounded = Bitmap.createBitmap(width, height, Config.ARGB_8888); +// canvas = new Canvas(rounded); +// canvas.drawBitmap(source, 0, 0, null); +// canvas.drawBitmap(clipped, 0, 0, paint); +// source.recycle(); +// clipped.recycle(); +// return rounded; +// } + public static Bitmap mergeBitmap(Bitmap background, Bitmap foreground) { + int w = background.getWidth() > foreground.getWidth() ? background.getWidth() : foreground.getWidth(); + int h = background.getHeight() > foreground.getHeight() ? background.getHeight() : foreground.getHeight(); + Bitmap bitmap = Bitmap.createBitmap(w, h, Config.ARGB_8888); + Canvas canvas = new Canvas(bitmap); + canvas.drawBitmap(background, 0, 0, null); + canvas.drawBitmap(foreground, 0, 0, null); + background.recycle(); + foreground.recycle(); + return bitmap; + } + + public static Bitmap mergeBitmap(int firstResId, int secondResId, Resources res) { + Bitmap firstBitmap = BitmapFactory.decodeResource(res, firstResId); + Bitmap secondBitmap = BitmapFactory.decodeResource(res, secondResId); + Bitmap result = mergeBitmap(firstBitmap, secondBitmap); + firstBitmap.recycle(); + secondBitmap.recycle(); + return result; + } + + /** + * Decode and sample down a bitmap from a file to the requested width and height. + * + * @param filename The full path of the file to decode + * @param reqWidth The requested width of the resulting bitmap + * @param reqHeight The requested height of the resulting bitmap + * @return A bitmap sampled down from the original with the same aspect ratio and dimensions + * that are equal to or greater than the requested width and height + */ + public static Bitmap decodeSampledBitmapFromFile(String filename, + int reqWidth, int reqHeight) { + + // First decode with inJustDecodeBounds=true to check dimensions + final BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; + BitmapFactory.decodeFile(filename, options); + + // Calculate inSampleSize + options.inSampleSize = calculateInSampleSize(options, reqWidth, reqHeight); + + // Decode bitmap with inSampleSize set + options.inJustDecodeBounds = false; + return BitmapFactory.decodeFile(filename, options); + } + + /** + * Calculate an inSampleSize for use in a {@link BitmapFactory.Options} object when decoding + * bitmaps using the decode* methods from {@link BitmapFactory}. This implementation calculates + * the closest inSampleSize that is a power of 2 and will result in the final decoded bitmap + * having a width and height equal to or larger than the requested width and height. + * + * @param options An options object with out* params already populated (run through a decode* + * method with inJustDecodeBounds==true + * @param reqWidth The requested width of the resulting bitmap + * @param reqHeight The requested height of the resulting bitmap + * @return The value to be used for inSampleSize + */ + public static int calculateInSampleSize(BitmapFactory.Options options, + int reqWidth, int reqHeight) { + // Raw height and width of image + final int height = options.outHeight; + final int width = options.outWidth; + int inSampleSize = 1; + + if (height > reqHeight || width > reqWidth) { + + final int halfHeight = height / 2; + final int halfWidth = width / 2; + + // Calculate the largest inSampleSize value that is a power of 2 and keeps both + // height and width larger than the requested height and width. + while ((halfHeight / inSampleSize) > reqHeight + && (halfWidth / inSampleSize) > reqWidth) { + inSampleSize *= 2; + } + + // This offers some additional logic in case the image has a strange + // aspect ratio. For example, a panorama may have a much larger + // width than height. In these cases the total pixels might still + // end up being too large to fit comfortably in memory, so we should + // be more aggressive with sample down the image (=larger inSampleSize). + + long totalPixels = width * height / inSampleSize; + + // Anything more than 2x the requested pixels we'll sample down further + final long totalReqPixelsCap = reqWidth * reqHeight * 2; + + while (totalPixels > totalReqPixelsCap) { + inSampleSize *= 2; + totalPixels /= 2; + } + } + return inSampleSize; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ClipboardUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ClipboardUtil.java new file mode 100644 index 0000000..7c572c1 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ClipboardUtil.java @@ -0,0 +1,73 @@ +package com.demo.lib.common.util.common; + +import android.app.Activity; +import android.content.ClipData; +import android.content.ClipboardManager; +import android.content.Context; +import android.os.Build; + +import com.demo.lib.common.entity.ClipCopyContent; + +public class ClipboardUtil { + + public static ClipCopyContent latestCopyContent; + + /** + * 鑾峰彇绮樿创鏉垮唴瀹� + * + * @param context + * @return + */ + public static String getClipboardContent(Context context) { + ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboardManager != null) + if (clipboardManager.getPrimaryClip() != null) + if (clipboardManager.getPrimaryClip().getItemCount() > 0 && clipboardManager.getPrimaryClip().getItemAt(0).getText() != null) + return + clipboardManager.getPrimaryClip().getItemAt(0).getText().toString(); + return ""; + } + + + public static void getClipboardContent(final Activity context, final IClipboardContentListener listener) { + + if (Build.VERSION.SDK_INT >= 29) {//Q浠ュ悗鐗堟湰閲囩敤 + context.getWindow().getDecorView().post(new Runnable() { + @Override + public void run() { + ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboardManager != null) + if (clipboardManager.getPrimaryClip() != null) + if (clipboardManager.getPrimaryClip().getItemCount() > 0 && clipboardManager.getPrimaryClip().getItemAt(0).getText() != null) + listener.getContent(clipboardManager.getPrimaryClip().getItemAt(0).getText().toString()); + } + }); + } else { + ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + if (clipboardManager != null) + if (clipboardManager.getPrimaryClip() != null) + if (clipboardManager.getPrimaryClip().getItemCount() > 0 && clipboardManager.getPrimaryClip().getItemAt(0).getText() != null) + listener.getContent(clipboardManager.getPrimaryClip().getItemAt(0).getText().toString()); + } + } + + + public static void emptyClipboard(Context context) { + final ClipboardManager manager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + if (manager != null) { + try { + manager.setPrimaryClip(manager.getPrimaryClip()); + manager.setText(null); + latestCopyContent = null; + } catch (Exception e) { + } + } + } + + + public static void copy(Context context, String content) { + ClipboardManager cm = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE); + cm.setPrimaryClip(ClipData.newPlainText("text", content)); + latestCopyContent = new ClipCopyContent(content, System.currentTimeMillis()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ConnectionUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ConnectionUtils.java new file mode 100644 index 0000000..dffd44d --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ConnectionUtils.java @@ -0,0 +1,85 @@ +package com.demo.lib.common.util.common; + +import android.app.AlertDialog; +import android.content.ComponentName; +import android.content.Context; +import android.content.DialogInterface; +import android.content.Intent; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; + +public class ConnectionUtils { + /** + * 妫�鏌ョ綉缁滄槸鍚﹀彲鐢� + * + * @param context + * 搴旂敤绋嬪簭鐨勪笂涓嬫枃瀵硅薄 + * @return + */ + public static boolean isNetworkAvailable(Context context) { + ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); // 鑾峰彇绯荤粺缃戠粶杩炴帴绠$悊鍣� + if (connectivity == null) { // 濡傛灉缃戠粶绠$悊鍣ㄤ负null + return false; // 杩斿洖false琛ㄦ槑缃戠粶鏃犳硶杩炴帴 + } else { + NetworkInfo[] info = connectivity.getAllNetworkInfo(); // 鑾峰彇鎵�鏈夌殑缃戠粶杩炴帴瀵硅薄 + if (info != null) { // 缃戠粶淇℃伅涓嶄负null鏃� + for (int i = 0; i < info.length; i++) { // 閬嶅巻缃戣矾杩炴帴瀵硅薄 + if (info[i].isConnected()) { // 褰撴湁涓�涓綉缁滆繛鎺ュ璞¤繛鎺ヤ笂缃戠粶鏃� + return true; // 杩斿洖true琛ㄦ槑缃戠粶杩炴帴姝e父 + } + } + } + } + return false; + } + + /** + * 鎵撳紑璁剧疆缃戠粶鐣岄潰 + */ + public static void setNetworkMethod(final Context context) { + // 鎻愮ず瀵硅瘽妗� + AlertDialog.Builder builder = new AlertDialog.Builder(context); + builder.setTitle("缃戠粶璁剧疆鎻愮ず") + .setMessage("缃戠粶杩炴帴涓嶅彲鐢�,鏄惁杩涜璁剧疆?") + .setPositiveButton("璁剧疆", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + Intent intent = null; + // 鍒ゆ柇鎵嬫満绯荤粺鐨勭増鏈� 鍗矨PI澶т簬10 灏辨槸3.0鎴栦互涓婄増鏈� + if (android.os.Build.VERSION.SDK_INT > 10) { + intent = new Intent(android.provider.Settings.ACTION_WIRELESS_SETTINGS); + } else { + intent = new Intent(); + ComponentName component = new ComponentName("com.android.settings", "com.android.settings.WirelessSettings"); + intent.setComponent(component); + intent.setAction("android.intent.action.VIEW"); + } + context.startActivity(intent); + } + }) + .setNegativeButton("鍙栨秷", new DialogInterface.OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }).show(); + } + + public static void httpTest(final Context context, String title, String msg) { + if (!isNetworkAvailable(context)) { + AlertDialog.Builder builders = new AlertDialog.Builder(context); + builders.setTitle(title); + builders.setMessage(msg); + final AlertDialog alert = builders.create(); + builders.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + alert.dismiss(); + } + }); + alert.show(); + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DateUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DateUtils.java new file mode 100644 index 0000000..a6f2afe --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DateUtils.java @@ -0,0 +1,375 @@ +package com.demo.lib.common.util.common; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.HashMap; +import java.util.Locale; +import java.util.Map; +import android.annotation.SuppressLint; +import android.util.Log; + +/** + * 鏃ユ湡宸ュ叿绫� + * + * @author LCJIAN + */ +public class DateUtils { + + private static final String TAG = "DateUtils"; + + public static final String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; + + public static final String YYYY_MM_DD_HH_MM_SS_2 = "yyMMddHHmmss"; + /** 骞�-鏈�-鏃ワ紝榛樿鏃ユ湡鏍煎紡 */ + public static final String YYYY_MM_DD = "yyyy-MM-dd"; + + public static final String YYYY_MM_DD_2 = "yyyyMMdd"; + + public static final String YY_MM_DD = "yy-MM-dd"; + + public static final String HH_MM_SS = "HH:mm:ss"; + + public static final long DAY = 24 * 60 * 60 * 1000L; + + private static final Map<String, SimpleDateFormat> DFS = new HashMap<String, SimpleDateFormat>(); + + public static SimpleDateFormat getFormat(String pattern) { + SimpleDateFormat format = DFS.get(pattern); + if (format == null) { + format = new SimpleDateFormat(pattern, Locale.CHINA); + DFS.put(pattern, format); + } + return format; + } + + /** protected鏋勯�犳柟娉� */ + protected DateUtils() { + } + + /** + * 浣跨敤榛樿鏍煎紡灏嗘棩鏈熻浆鎹㈡垚瀛楃涓� + * + * @param date + * 闇�瑕佽浆鎹㈢殑鏃ユ湡 + * @return 杞崲鍚庣殑瀛楃涓诧紝濡傛灉鍙戠敓寮傚父锛岃繑鍥炵┖瀛楃涓� + */ + public static String convertDateToStr(Date date) { + if (date == null) { + return ""; + } else { + return convertDateToStr(date, YYYY_MM_DD); + } + } + + /** + * 浣跨敤鑷畾涔夋牸寮忥紝灏嗘棩鏈熻浆鎹㈡垚瀛楃涓� + * + * @param date + * 闇�瑕佽浆鎹㈢殑鏃ユ湡 + * @param pattern + * 鑷畾涔夋牸寮� + * @return 杞崲鍚庣殑瀛楃涓诧紝濡傛灉鍙戠敓寮傚父锛岃繑鍥炵┖瀛楃涓� + */ + public static String convertDateToStr(Date date, String pattern) { + if (date == null) { + return ""; + } + SimpleDateFormat dateFormat = getFormat(pattern); + return dateFormat.format(date); + } + + /** + * 浣跨敤榛樿鏍煎紡锛屽皢瀛楃涓茶浆鎹㈡垚鏃ユ湡 + * + * @param str + * 闇�瑕佽浆鎹㈢殑瀛楃涓� + * @return 杞崲鍚庣殑鏃ユ湡锛屽鏋滃彂鐢熷紓甯革紝杩斿洖null + */ + public static Date convertStrToDate(String str) { + if (str == null || str.equals("")) { + return null; + } else { + return convertStrToDate(str, YYYY_MM_DD); + } + } + + /** + * 鏍规嵁鑷畾涔塸attern灏嗗瓧绗︿覆鏃ユ湡杞崲鎴怐ate绫诲瀷 + * + * @param str + * 闇�瑕佽浆鎹㈢殑瀛楃涓� + * @param pattern + * 鑷畾涔夋牸寮� + * @return 杞崲鍚庣殑鏃ユ湡锛屽鏋滃彂鐢熷紓甯革紝杩斿洖null + */ + public static Date convertStrToDate(String str, String pattern) { + if (str == null || str.equals("")) { + return null; + } + SimpleDateFormat dateFormat = getFormat(pattern); + try { + return dateFormat.parse(str); + } catch (ParseException ex) { + Log.i(TAG, "convertStrToDate: " + ex.getMessage()); + return null; + } + } + + /** + * 灏唒atternSrc鏍煎紡鐨剆tr杞崲涓簆atterDst鐨勫瓧绗︿覆 + * + * @param str + * 闇�瑕佽浆鎹㈢殑瀛楃涓� + * @param patternSrc + * 鍘熸牸寮� + * @param patterDst + * 鐩爣鏍煎紡 + * @return + */ + public static String formatDateStr(String str, String patternSrc, + String patterDst) { + return convertDateToStr(convertStrToDate(str, patternSrc), patterDst); + } + + /** + * 鍒ゆ柇鍘熸棩鏈熸槸鍚﹀湪鐩爣鏃ユ湡涔嬪墠 + * + * @param src + * @param dst + * @return + */ + public static boolean isBefore(Date src, Date dst) { + return src.before(dst); + } + + /** + * 鍒ゆ柇鍘熸棩鏈熸槸鍚﹀湪鐩爣鏃ユ湡涔嬪悗 + * + * @param src + * @param dst + * @return + */ + public static boolean isAfter(Date src, Date dst) { + return src.after(dst); + } + + /** + * 杩斿洖涓や釜鏃ユ湡闂寸殑宸紓澶╂暟 + * + * @param date1 + * 鍙傜収鏃ユ湡 + * @param date2 + * 姣旇緝鏃ユ湡 + * @return 鍙傜収鏃ユ湡涓庢瘮杈冩棩鏈熶箣闂寸殑澶╂暟宸紓锛屾鏁拌〃绀哄弬鐓ф棩鏈熷湪姣旇緝鏃ユ湡涔嬪悗锛�0琛ㄧず涓や釜鏃ユ湡鍚屽ぉ锛岃礋鏁拌〃绀哄弬鐓ф棩鏈熷湪姣旇緝鏃ユ湡涔嬪墠 + */ + public static int dayDiff(Date date1, Date date2) { + Date fromDate = convertStrToDate(convertDateToStr(date1)); + Date toDate = convertStrToDate(convertDateToStr(date2)); + return (int) ((fromDate.getTime() - toDate.getTime()) / (DAY)); + } + + /* + * 鑾峰彇绗簩澶╁噷鏅ㄦ椂闂� + */ + @SuppressLint("SimpleDateFormat") + public static Long getSecondDay(Long time) { + Date d = new Date(); + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + String s = format.format(d); + try { + d = format.parse(s); + time = d.getTime(); + } catch (ParseException e) { + e.printStackTrace(); + } + + return time + 86400000; + } + + public static boolean isSameDay(Date date1, Date date2) { + SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINESE); + String sp_time = sf.format(date1); + String current_time = sf.format(date2); + + return sp_time.equals(current_time); + } + + /** + * 鍒ゆ柇涓ゆ棩鏈熸槸鍚︾浉鍚�(姣) + * + * @param date1 + * @param date2 + * @return + */ + public static boolean isEqual(Date date1, Date date2) { + return date1.compareTo(date2) == 0; + } + + @SuppressLint("SimpleDateFormat") + public static String getRelativeTimeStr(Date date) { + long l = now().getTime() - date.getTime(); + long oneDay = 1000 * 60 * 60 * 24; + String str = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + str = format.format(new Date(date.getTime() + oneDay)); + long secondDay = getTime(str) * 1000; + long timeLag = secondDay - date.getTime(); + if (l < 1000 * 60) { + return "鍒氬垰"; + } else if (l < 1000 * 60 * 60) { + return (l / (1000 * 60) + 1) + "鍒嗛挓鍓�"; + } else if (l < oneDay) { + return (l / (1000 * 60 * 60)) + "灏忔椂鍓�"; + } else if (l < oneDay * 2) { + if (now().getTime() < secondDay + oneDay) { + return "鏄ㄥぉ"; + } else { + return "鍓嶅ぉ"; + } + } else if (l < oneDay * 3) { + if (now().getTime() < secondDay + oneDay * 2) { + return "鍓嶅ぉ"; + } else { + return "3澶╁墠"; + } + } else if (l < (oneDay * 7)) { + return "3澶╁墠"; + } else if (l < (oneDay * 30)) { + return "涓�涓槦鏈熶互鍓�"; + } else if (l < (oneDay * 183)) { + return "涓�涓湀浠ュ墠"; + } else if (l < (oneDay * 365)) { + return "鍗婂勾鍓�"; + } else { + return format.format(new Date(date.getTime())); + } + // { + // return convertDateToStr(date); + // } + } + + /** + * 瀛楃涓茶浆鍖栦负鏃堕棿鎴� + * + * @param user_time + * @return + */ + public static long getTime(String user_time) { + long re_time = 0; + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + Date d; + try { + d = sdf.parse(user_time); + long l = d.getTime(); + String str = String.valueOf(l); + re_time = Long.parseLong(str.substring(0, 10)); + + } catch (Exception e) { + e.printStackTrace(); + } + return re_time; + } + + /** + * 鑾峰緱褰撳墠鏃堕棿鐨凞ate瀵硅薄 + * + * @return + */ + public static Date now() { + return new Date(); + } + + /** + * 鑾峰彇鏄熸湡鍑� + */ + public static String getWeekDay(Date date) { + // String[] weeks = { "鏄熸湡鏃�", "鏄熸湡涓�", "鏄熸湡浜�", "鏄熸湡涓�", "鏄熸湡鍥�", "鏄熸湡浜�", "鏄熸湡鍏�" }; + // Calendar cal = Calendar.getInstance(); + // cal.setTime(date); + // int week_index = cal.get(Calendar.DAY_OF_WEEK) - 1; + // if (week_index < 0) { + // week_index = 0; + // } + // return weeks[week_index]; + SimpleDateFormat sdf = getFormat("EEEE"); + String week = sdf.format(date); + return week; + } + + /** + * 杩斿洖褰撴湀绗竴澶╃殑鏃ユ湡 + */ + public static Date firstDay(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DATE, 1); + return calendar.getTime(); + } + + /** + * 杩斿洖褰撴湀鏈�鍚庝竴澶╃殑鏃ユ湡 + */ + public static Date lastDay(Date date) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DATE)); + return calendar.getTime(); + } + + /** + * 澧炲姞鏈堜唤 + */ + public static Date addMonths(Date src, int num) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(src); + calendar.add(Calendar.MONTH, num); + return calendar.getTime(); + } + + /** + * 澧炲姞澶╂暟 + */ + public static Date addDays(Date src, int num) { + Calendar calendar = Calendar.getInstance(); + calendar.setTime(src); + calendar.add(Calendar.DATE, num); + return calendar.getTime(); + } + + /** + * @param year + * 骞� + * @param month + * 鏈�(1-12) + * @param day + * 鏃�(1-31) + * @return 杈撳叆鐨勫勾銆佹湀銆佹棩鏄惁鏄湁鏁堟棩鏈� + */ + public static boolean isValid(int year, int month, int day) { + if (month > 0 && month < 13 && day > 0 && day < 32) { + // month of calendar is 0-based + int mon = month - 1; + Calendar calendar = new GregorianCalendar(year, mon, day); + return calendar.get(Calendar.YEAR) == year + && calendar.get(Calendar.MONTH) == mon + && calendar.get(Calendar.DAY_OF_MONTH) == day; + } + return false; + } + + /** + * 鏃堕棿鎴宠浆鍖栧畾浣� + * + * @param date + * @return + */ + public static String getTimeToString(Long date) { + String str = ""; + SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); + str = format.format(new Date(date)); + return str; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DimenUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DimenUtils.java new file mode 100644 index 0000000..acc13b6 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/DimenUtils.java @@ -0,0 +1,64 @@ +package com.demo.lib.common.util.common; + +import android.app.Activity; +import android.content.Context; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.util.TypedValue; + +public class DimenUtils { + + public static int dipToPixels(int dip, Context context) { + Resources r = context.getResources(); + float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, + r.getDisplayMetrics()); + return (int) px; + } + + public static int pxToDip(int px, Context context) { + Resources r = context.getResources(); + // float dip = TypedValue.complexToDimensionPixelSize(data, metrics) + // TypedValue.complexToDimensionPixelOffset(data, metrics) + return 0; + } + + public static int spToPixels(int sp, Context context) { + Resources r = context.getResources(); + float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, + r.getDisplayMetrics()); + return (int) px; + } + + private static int deviceWidth = 0; + + public static int getScreenWidth(Activity activity) { + if (deviceWidth == 0) { + DisplayMetrics metric = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(metric); + deviceWidth = metric.widthPixels; + } + return deviceWidth; + } + + public static int getScreenHeight(Activity activity) { + DisplayMetrics metric = new DisplayMetrics(); + activity.getWindowManager().getDefaultDisplay().getMetrics(metric); + return metric.heightPixels; + } + + /** + * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� dp 鐨勫崟浣� 杞垚涓� px(鍍忕礌) + */ + public static int dip2px(Context context, float dpValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (dpValue * scale + 0.5f); + } + + /** + * 鏍规嵁鎵嬫満鐨勫垎杈ㄧ巼浠� px(鍍忕礌) 鐨勫崟浣� 杞垚涓� dp + */ + public static int px2dip(Context context, float pxValue) { + final float scale = context.getResources().getDisplayMetrics().density; + return (int) (pxValue / scale + 0.5f); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/FileUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/FileUtils.java new file mode 100644 index 0000000..338dd87 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/FileUtils.java @@ -0,0 +1,461 @@ +package com.demo.lib.common.util.common; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.FileWriter; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.util.ArrayList; +import java.util.List; + + +/** + * File Utils + * <ul> + * Read or write file + * <li>{@link #readFile(String)} read file</li> + * <li>{@link #readFileToList(String)} read file to string list</li> + * <li>{@link #writeFile(String, String, boolean)} write file</li> + * <li>{@link #writeFile(String, InputStream)} write file</li> + * </ul> + * <ul> + * Operate file + * <li>{@link #getFileExtension(String)}</li> + * <li>{@link #getFileName(String)}</li> + * <li>{@link #getFileNameWithoutExtension(String)}</li> + * <li>{@link #getFileSize(String)}</li> + * <li>{@link #deleteFile(String)}</li> + * <li>{@link #isFileExist(String)}</li> + * <li>{@link #isFolderExist(String)}</li> + * <li>{@link #makeFolders(String)}</li> + * <li>{@link #makeDirs(String)}</li> + * </ul> + * + * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-5-12 + */ +public class FileUtils { + + public final static String FILE_EXTENSION_SEPARATOR = "."; + + /** + * read file + * + * @param filePath + * @param charsetName + * The name of a supported {@link java.nio.charset.Charset + * </code>charset<code>} + * @return if file not exist, return null, else return content of file + * @throws IOException + * if an error occurs while operator BufferedReader + */ + public static StringBuilder readFile(String filePath, String charsetName) { + File file = new File(filePath); + StringBuilder fileContent = new StringBuilder(); + if (file == null || !file.isFile()) { + return null; + } + + BufferedReader reader = null; + try { + InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName); + reader = new BufferedReader(is); + String line = null; + while ((line = reader.readLine()) != null) { + if (!fileContent.toString().equals("")) { + fileContent.append("\r\n"); + } + fileContent.append(line); + } + reader.close(); + return fileContent; + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } + } + } + } + + /** + * write file + * + * @param filePath + * @param content + * @param append + * is append, if true, write to the end of file, else clear + * content of file and write into it + * @return return true + * @throws IOException + * if an error occurs while operator FileWriter + */ + public static boolean writeFile(String filePath, String content, boolean append) { + FileWriter fileWriter = null; + try { + fileWriter = new FileWriter(filePath, append); + fileWriter.write(content); + fileWriter.close(); + return true; + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } finally { + if (fileWriter != null) { + try { + fileWriter.close(); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } + } + } + } + + /** + * write file + * + * @param filePath + * @param stream + * @return return true + * @throws IOException + * if an error occurs while operator FileWriter + */ + public static boolean writeFile(String filePath, InputStream stream) { + OutputStream o = null; + try { + o = new FileOutputStream(filePath); + byte[] data = new byte[1024]; + int length = -1; + while ((length = stream.read(data)) != -1) { + o.write(data, 0, length); + } + o.flush(); + return true; + } catch (FileNotFoundException e) { + throw new RuntimeException("FileNotFoundException occurred. ", e); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } finally { + if (o != null) { + try { + o.close(); + stream.close(); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } + } + } + } + + /** + * read file to string list, a element of list is a line + * + * @param filePath + * @param charsetName + * The name of a supported {@link java.nio.charset.Charset + * </code>charset<code>} + * @return if file not exist, return null, else return content of file + * @throws IOException + * if an error occurs while operator BufferedReader + */ + public static List<String> readFileToList(String filePath, + String charsetName) { + File file = new File(filePath); + List<String> fileContent = new ArrayList<String>(); + if (file == null || !file.isFile()) { + return null; + } + + BufferedReader reader = null; + try { + InputStreamReader is = new InputStreamReader(new FileInputStream(file), charsetName); + reader = new BufferedReader(is); + String line = null; + while ((line = reader.readLine()) != null) { + fileContent.add(line); + } + reader.close(); + return fileContent; + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } + } + } + } + + /** + * get file name from path, not include suffix + * + * <pre> + * getFileNameWithoutExtension(null) = null + * getFileNameWithoutExtension("") = "" + * getFileNameWithoutExtension(" ") = " " + * getFileNameWithoutExtension("abc") = "abc" + * getFileNameWithoutExtension("a.mp3") = "a" + * getFileNameWithoutExtension("a.b.rmvb") = "a.b" + * getFileNameWithoutExtension("c:\\") = "" + * getFileNameWithoutExtension("c:\\a") = "a" + * getFileNameWithoutExtension("c:\\a.b") = "a" + * getFileNameWithoutExtension("c:a.txt\\a") = "a" + * getFileNameWithoutExtension("/home/admin") = "admin" + * getFileNameWithoutExtension("/home/admin/a.txt/b.mp3") = "b" + * </pre> + * + * @param filePath + * @return file name from path, not include suffix + * @see + */ + public static String getFileNameWithoutExtension(String filePath) { + if (StringUtils.isEmpty(filePath)) { + return filePath; + } + + int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); + int filePosi = filePath.lastIndexOf(File.separator); + if (filePosi == -1) { + return (extenPosi == -1 ? filePath : filePath.substring(0, extenPosi)); + } + if (extenPosi == -1) { + return filePath.substring(filePosi + 1); + } + return (filePosi < extenPosi ? filePath.substring(filePosi + 1, extenPosi) : filePath.substring(filePosi + 1)); + } + + /** + * get file name from path, include suffix + * + * <pre> + * getFileName(null) = null + * getFileName("") = "" + * getFileName(" ") = " " + * getFileName("a.mp3") = "a.mp3" + * getFileName("a.b.rmvb") = "a.b.rmvb" + * getFileName("abc") = "abc" + * getFileName("c:\\") = "" + * getFileName("c:\\a") = "a" + * getFileName("c:\\a.b") = "a.b" + * getFileName("c:a.txt\\a") = "a" + * getFileName("/home/admin") = "admin" + * getFileName("/home/admin/a.txt/b.mp3") = "b.mp3" + * </pre> + * + * @param filePath + * @return file name from path, include suffix + */ + public static String getFileName(String filePath) { + if (StringUtils.isEmpty(filePath)) { + return filePath; + } + + int filePosi = filePath.lastIndexOf(File.separator); + return (filePosi == -1) ? filePath : filePath.substring(filePosi + 1); + } + + /** + * get folder name from path + * + * <pre> + * getFolderName(null) = null + * getFolderName("") = "" + * getFolderName(" ") = "" + * getFolderName("a.mp3") = "" + * getFolderName("a.b.rmvb") = "" + * getFolderName("abc") = "" + * getFolderName("c:\\") = "c:" + * getFolderName("c:\\a") = "c:" + * getFolderName("c:\\a.b") = "c:" + * getFolderName("c:a.txt\\a") = "c:a.txt" + * getFolderName("c:a\\b\\c\\d.txt") = "c:a\\b\\c" + * getFolderName("/home/admin") = "/home" + * getFolderName("/home/admin/a.txt/b.mp3") = "/home/admin/a.txt" + * </pre> + * + * @param filePath + * @return + */ + public static String getFolderName(String filePath) { + + if (StringUtils.isEmpty(filePath)) { + return filePath; + } + + int filePosi = filePath.lastIndexOf(File.separator); + return (filePosi == -1) ? "" : filePath.substring(0, filePosi); + } + + /** + * get suffix of file from path + * + * <pre> + * getFileExtension(null) = "" + * getFileExtension("") = "" + * getFileExtension(" ") = " " + * getFileExtension("a.mp3") = "mp3" + * getFileExtension("a.b.rmvb") = "rmvb" + * getFileExtension("abc") = "" + * getFileExtension("c:\\") = "" + * getFileExtension("c:\\a") = "" + * getFileExtension("c:\\a.b") = "b" + * getFileExtension("c:a.txt\\a") = "" + * getFileExtension("/home/admin") = "" + * getFileExtension("/home/admin/a.txt/b") = "" + * getFileExtension("/home/admin/a.txt/b.mp3") = "mp3" + * </pre> + * + * @param filePath + * @return + */ + public static String getFileExtension(String filePath) { + if (StringUtils.isBlank(filePath)) { + return filePath; + } + + int extenPosi = filePath.lastIndexOf(FILE_EXTENSION_SEPARATOR); + int filePosi = filePath.lastIndexOf(File.separator); + if (extenPosi == -1) { + return ""; + } + return (filePosi >= extenPosi) ? "" : filePath.substring(extenPosi + 1); + } + + /** + * Creates the directory named by the trailing filename of this file, + * including the complete directory path required to create this directory. <br/> + * <br/> + * <ul> + * <strong>Attentions:</strong> + * <li>makeDirs("C:\\Users\\Trinea") can only create users folder</li> + * <li>makeFolder("C:\\Users\\Trinea\\") can create Trinea folder</li> + * </ul> + * + * @param filePath + * @return true if the necessary directories have been created or the target + * directory already exists, false one of the directories can not be + * created. + * <ul> + * <li>if {@link FileUtils#getFolderName(String)} return null, + * return false</li> + * <li>if target directory already exists, return true</li> + * <li>return {@link java.io.File#makeFolder}</li> + * </ul> + */ + public static boolean makeDirs(String filePath) { + String folderName = getFolderName(filePath); + if (StringUtils.isEmpty(folderName)) { + return false; + } + + File folder = new File(folderName); + return (folder.exists() && folder.isDirectory()) || folder.mkdirs(); + } + + /** + * @param filePath + * @return + * @see #makeDirs(String) + */ + public static boolean makeFolders(String filePath) { + return makeDirs(filePath); + } + + /** + * Indicates if this file represents a file on the underlying file system. + * + * @param filePath + * @return + */ + public static boolean isFileExist(String filePath) { + if (StringUtils.isBlank(filePath)) { + return false; + } + + File file = new File(filePath); + return (file.exists() && file.isFile()); + } + + /** + * Indicates if this file represents a directory on the underlying file + * system. + * + * @param directoryPath + * @return + */ + public static boolean isFolderExist(String directoryPath) { + if (StringUtils.isBlank(directoryPath)) { + return false; + } + + File dire = new File(directoryPath); + return (dire.exists() && dire.isDirectory()); + } + + /** + * delete file or directory + * <ul> + * <li>if path is null or empty, return true</li> + * <li>if path not exist, return true</li> + * <li>if path exist, delete recursion. return true</li> + * <ul> + * + * @param path + * @return + */ + public static boolean deleteFile(String path) { + if (StringUtils.isBlank(path)) { + return true; + } + + File file = new File(path); + if (!file.exists()) { + return true; + } + if (file.isFile()) { + return file.delete(); + } + if (!file.isDirectory()) { + return false; + } + for (File f : file.listFiles()) { + if (f.isFile()) { + f.delete(); + } else if (f.isDirectory()) { + deleteFile(f.getAbsolutePath()); + } + } + return file.delete(); + } + + /** + * get file size + * <ul> + * <li>if path is null or empty, return -1</li> + * <li>if path exist and it is a file, return file size, else return -1</li> + * <ul> + * + * @param path + * @return + */ + public static long getFileSize(String path) { + if (StringUtils.isBlank(path)) { + return -1; + } + + File file = new File(path); + return (file.exists() && file.isFile() ? file.length() : -1); + } + + +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/IClipboardContentListener.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/IClipboardContentListener.java new file mode 100644 index 0000000..b01b57c --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/IClipboardContentListener.java @@ -0,0 +1,5 @@ +package com.demo.lib.common.util.common; + +public interface IClipboardContentListener { + void getContent(String content); +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ObjectUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ObjectUtils.java new file mode 100644 index 0000000..c8069af --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/ObjectUtils.java @@ -0,0 +1,48 @@ +package com.demo.lib.common.util.common; + +/** + * Object Utils + * + * @author LCJIAN + */ +public class ObjectUtils { + + /** + * compare two object + * + * @param actual + * @param expected + * @return <ul> + * <li>if both are null, return true</li> + * <li>return actual.{@link Object#equals(Object)}</li> + * </ul> + */ + public static boolean isEquals(Object actual, Object expected) { + return actual == expected || (actual == null ? expected == null : actual.equals(expected)); + } + + /** + * compare two object + * <ul> + * <strong>About result</strong> + * <li>if v1 > v2, return 1</li> + * <li>if v1 = v2, return 0</li> + * <li>if v1 < v2, return -1</li> + * </ul> + * <ul> + * <strong>About rule</strong> + * <li>if v1 is null, v2 is null, then return 0</li> + * <li>if v1 is null, v2 is not null, then return -1</li> + * <li>if v1 is not null, v2 is null, then return 1</li> + * <li>return v1.{@link Comparable#compareTo(Object)}</li> + * </ul> + * + * @param v1 + * @param v2 + * @return + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public static <V> int compare(V v1, V v2) { + return v1 == null ? (v2 == null ? 0 : -1) : (v2 == null ? 1 : ((Comparable) v1).compareTo(v2)); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PackageUtils2.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PackageUtils2.java new file mode 100644 index 0000000..c56c4c1 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PackageUtils2.java @@ -0,0 +1,55 @@ +package com.demo.lib.common.util.common; + +import android.content.Context; +import android.content.SharedPreferences; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager.NameNotFoundException; +import android.preference.PreferenceManager; + +public class PackageUtils2 { + + public static boolean isFirstStartup(Context context) { + try { + PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + int currentVersion = info.versionCode; + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); + int lastVersion = prefs.getInt("version_code", 0); + if (currentVersion > lastVersion) { // 濡傛灉褰撳墠鐗堟湰澶т簬涓婃鐗堟湰锛岃鐗堟湰灞炰簬绗竴娆″惎鍔� + // 灏嗗綋鍓嶇増鏈啓鍏reference涓紝鍒欎笅娆″惎鍔ㄧ殑鏃跺�欙紝鎹鍒ゆ柇锛屼笉鍐嶄负棣栨鍚姩 + prefs.edit().putInt("version_code", currentVersion).commit(); + return true; + } else { + return false; + } + } catch (NameNotFoundException e) { + e.printStackTrace(); + } + return false; + } + + /** + * 鑾峰彇versionCode + * + * @param context + * @return 鐗堟湰鍙� + */ + public static int getVersionCode(Context context) { + try { + PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return pi.versionCode; + } catch (NameNotFoundException e) { + e.printStackTrace(); + return 0; + } + } + + public static String getVersionName(Context context) { + try { + PackageInfo pi = context.getPackageManager().getPackageInfo(context.getPackageName(), 0); + return pi.versionName; + } catch (NameNotFoundException e) { + e.printStackTrace(); + return ""; + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PhotoCrop.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PhotoCrop.java new file mode 100644 index 0000000..5760311 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/PhotoCrop.java @@ -0,0 +1,184 @@ +package com.demo.lib.common.util.common; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.provider.MediaStore; +import android.util.Log; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + +public class PhotoCrop { + + /** + * 鑾峰彇鐩稿唽鍥剧墖 + * + * @param uri + */ + public Uri startPhotoZoom(Uri uri, Context mContext) { + Uri uriClipUri = null; + //com.android.camera.action.CROP锛岃繖涓猘ction鏄皟鐢ㄧ郴缁熻嚜甯︾殑鍥剧墖瑁佸垏鍔熻兘 + Intent intent = new Intent("com.android.camera.action.CROP"); + intent.setDataAndType(uri, "image/*");//瑁佸壀鐨勫浘鐗噓ri鍜屽浘鐗囩被鍨� + intent.putExtra("crop", "true");//璁剧疆鍏佽瑁佸壀锛屽鏋滀笉璁剧疆锛屽氨浼氳烦杩囪鍓殑杩囩▼锛岃繕鍙互璁剧疆putExtra("crop", "circle") + if (Build.MANUFACTURER.equals("HUAWEI")) { //鍗庝负鐗规畩澶勭悊 涓嶇劧浼氭樉绀哄渾 + intent.putExtra("aspectX", 9998); + intent.putExtra("aspectY", 9999); + } else { + intent.putExtra("aspectX", 1);//瑁佸壀妗嗙殑 X 鏂瑰悜鐨勬瘮渚�,闇�瑕佷负鏁存暟 + intent.putExtra("aspectY", 1);//瑁佸壀妗嗙殑 Y 鏂瑰悜鐨勬瘮渚�,闇�瑕佷负鏁存暟 + } + intent.putExtra("outputX", 600);//杩斿洖鏁版嵁鐨勬椂鍊欑殑X鍍忕礌澶у皬銆� + intent.putExtra("outputY", 600);//杩斿洖鏁版嵁鐨勬椂鍊欑殑Y鍍忕礌澶у皬銆� + //瑁佸壀鏃舵槸鍚︿繚鐣欏浘鐗囩殑姣斾緥锛岃繖閲岀殑姣斾緥鏄�1:1 + intent.putExtra("scale", true); + //鏄惁鏄渾褰㈣鍓尯鍩焧rue锛岃缃簡涔熶笉涓�瀹氭湁鏁� + intent.putExtra("circleCrop", false); + //uritempFile涓篣ri绫诲彉閲忥紝瀹炰緥鍖杣ritempFile + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + //濡傛灉鏄�7.0鐨勭浉鍐� + //璁剧疆瑁佸壀鐨勫浘鐗囧湴鍧�Uri + uriClipUri = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/FLQImg/" + "clip.jpg"); + } else { + uriClipUri = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/FLQImg/" + "clip.jpg"); + } + Log.e("uriClipUri=====", "" + uriClipUri); + //Android 瀵笽ntent涓墍鍖呭惈鏁版嵁鐨勫ぇ灏忔槸鏈夐檺鍒剁殑锛屼竴鑸笉鑳借秴杩� 1M锛屽惁鍒欎細浣跨敤缂╃暐鍥� ,鎵�浠ユ垜浠鎸囧畾杈撳嚭瑁佸壀鐨勫浘鐗囪矾寰� + intent.putExtra(MediaStore.EXTRA_OUTPUT, uriClipUri); + intent.putExtra("return-data", false);//鏄惁灏嗘暟鎹繚鐣欏湪Bitmap涓繑鍥� + intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());//杈撳嚭鏍煎紡锛屼竴鑸涓築itmap鏍煎紡鍙婂浘鐗囩被鍨� + intent.putExtra("noFaceDetection", false);//浜鸿劯璇嗗埆鍔熻兘 + ((Activity) mContext).startActivityForResult(intent, 1002);//瑁佸壀瀹屾垚鐨勬爣璇� + return uriClipUri; + } + + /** + * 鍥剧墖鍘嬬缉鐨勬柟娉�(鍙槸鍐呭瓨鍑忓皯锛岄伩鍏峯om锛屽浘鐗囨湰韬湪disk鐩樹綋绉笉鍙�) + * 鏄剧ず鐨凚itmap鍗犵敤鐨勫唴瀛樺皯涓�鐐癸紝杩樻槸闇�瑕佸幓璁剧疆鍔犺浇鐨勫儚绱犻暱搴﹀拰瀹藉害锛堝彉鎴愮缉鐣ュ浘锛� + * + * @param mFile + * @param crop 鏄惁鍓鍦嗗舰鍥剧墖 true 鏄� false 鍚� + * @return + */ + public boolean compressPhto(File mFile, boolean crop) { +// BitmapFactory杩欎釜绫诲氨鎻愪緵浜嗗涓В鏋愭柟娉曪紙decodeResource銆乨ecodeStream銆乨ecodeFile绛夛級鐢ㄤ簬鍒涘缓Bitmap銆� +// 姣斿濡傛灉鍥剧墖鏉ユ簮浜庣綉缁滐紝灏卞彲浠ヤ娇鐢╠ecodeStream鏂规硶锛� +// 濡傛灉鏄痵d鍗¢噷闈㈢殑鍥剧墖锛屽氨鍙互閫夋嫨decodeFile鏂规硶锛� +// 濡傛灉鏄祫婧愭枃浠堕噷闈㈢殑鍥剧墖锛屽氨鍙互浣跨敤decodeResource鏂规硶绛� + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; // 鑾峰彇褰撳墠鍥剧墖鐨勮竟鐣屽ぇ灏� + //BitmapFactory.decodeResource(getResources(), R.drawable.bg, options); + BitmapFactory.decodeFile(mFile.getAbsolutePath(), options); + int outHeight = options.outHeight; //鑾峰彇鍥剧墖鏈韩鐨勯珮鍍忕礌 + int outWidth = options.outWidth;//鑾峰彇鍥剧墖鏈韩鐨勫鐨勫儚绱� + String outMimeType = options.outMimeType; + options.inJustDecodeBounds = false; + //inSampleSize鐨勪綔鐢ㄥ氨鏄彲浠ユ妸鍥剧墖鐨勯暱鐭缉灏廼nSampleSize鍊嶏紝鎵�鍗犲唴瀛樼缉灏廼nSampleSize鐨勫钩鏂� + //瀵逛簬inSampleSize鍊肩殑澶у皬鏈夎姹傦紝鏈�濂芥槸鏁存暟涓�2鐨勫�嶆暟 + options.inSampleSize = caculateSampleSize(options, 500, 500); + //etPath()寰楀埌鐨勬槸鏋勯�爁ile鐨勬椂鍊欑殑璺緞銆俫etAbsolutePath()寰楀埌鐨勬槸鍏ㄨ矾寰� + String path = mFile.getPath(); + String absPath = mFile.getAbsolutePath(); + Bitmap bitmap = BitmapFactory.decodeFile(absPath, options); + try { + return saveBitmap(bitmap, "avatar.png", crop);//淇濆瓨鎴愬姛 + } catch (IOException e) { + e.printStackTrace(); + return false; + } +// ivUserPhoto.setImageBitmap(bitmap); +// //灏哄鍘嬬缉缁撴灉 +// ivSize.setImageBitmap(bitmap); + } + + + public Bitmap compressPhto(File mFile) { +// BitmapFactory杩欎釜绫诲氨鎻愪緵浜嗗涓В鏋愭柟娉曪紙decodeResource銆乨ecodeStream銆乨ecodeFile绛夛級鐢ㄤ簬鍒涘缓Bitmap銆� +// 姣斿濡傛灉鍥剧墖鏉ユ簮浜庣綉缁滐紝灏卞彲浠ヤ娇鐢╠ecodeStream鏂规硶锛� +// 濡傛灉鏄痵d鍗¢噷闈㈢殑鍥剧墖锛屽氨鍙互閫夋嫨decodeFile鏂规硶锛� +// 濡傛灉鏄祫婧愭枃浠堕噷闈㈢殑鍥剧墖锛屽氨鍙互浣跨敤decodeResource鏂规硶绛� + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inJustDecodeBounds = true; // 鑾峰彇褰撳墠鍥剧墖鐨勮竟鐣屽ぇ灏� + //BitmapFactory.decodeResource(getResources(), R.drawable.bg, options); + BitmapFactory.decodeFile(mFile.getAbsolutePath(), options); + int outHeight = options.outHeight; //鑾峰彇鍥剧墖鏈韩鐨勯珮鍍忕礌 + int outWidth = options.outWidth;//鑾峰彇鍥剧墖鏈韩鐨勫鐨勫儚绱� + String outMimeType = options.outMimeType; + options.inJustDecodeBounds = false; + //inSampleSize鐨勪綔鐢ㄥ氨鏄彲浠ユ妸鍥剧墖鐨勯暱鐭缉灏廼nSampleSize鍊嶏紝鎵�鍗犲唴瀛樼缉灏廼nSampleSize鐨勫钩鏂� + //瀵逛簬inSampleSize鍊肩殑澶у皬鏈夎姹傦紝鏈�濂芥槸鏁存暟涓�2鐨勫�嶆暟 + options.inSampleSize = caculateSampleSize(options, 500, 500); + //etPath()寰楀埌鐨勬槸鏋勯�爁ile鐨勬椂鍊欑殑璺緞銆俫etAbsolutePath()寰楀埌鐨勬槸鍏ㄨ矾寰� + String path = mFile.getPath(); + String absPath = mFile.getAbsolutePath(); + Bitmap bitmap = BitmapFactory.decodeFile(absPath, options); + return bitmap; + } + + /** + * 璁$畻鍑烘墍闇�瑕佸帇缂╃殑澶у皬 + * + * @param options + * @param reqWidth 甯屾湜鐨勫浘鐗囧澶у皬 + * @param reqHeight 甯屾湜鐨勫浘鐗囬珮澶у皬 + * @return + */ + private int caculateSampleSize(BitmapFactory.Options options, int reqWidth, int reqHeight) { + int sampleSize = 1; + int picWidth = options.outWidth; + int picHeight = options.outHeight; + if (picWidth > reqWidth || picHeight > reqHeight) { + int halfPicWidth = picWidth / 2; + int halfPicHeight = picHeight / 2; + while (halfPicWidth / sampleSize > reqWidth || halfPicHeight / sampleSize > reqHeight) { + sampleSize *= 2; + } + } + return sampleSize; + } + + + /** + * 淇濆瓨鏂囦欢锛� + * + * @param bitmap + * @param bitName 鏂囦欢鍚� + * @param crop + * @return + * @throws IOException + */ + private boolean saveBitmap(Bitmap bitmap, String bitName, boolean crop) throws IOException { + boolean save = false; + File storageDir = new File(Environment.getExternalStorageDirectory().getPath() + "/FLQImg/"); + if (!storageDir.exists()) {//娌℃湁鏂囦欢澶瑰垯鍒涘缓 + storageDir.mkdir(); + } + String fileName; + File file; + fileName = Environment.getExternalStorageDirectory().getPath() + "/FLQImg/" + bitName; + file = new File(fileName); + if (bitmap != null) { + if (file.exists()) { + file.delete(); + } + FileOutputStream out; + + out = new FileOutputStream(file); + // 鏍煎紡涓� JPEG锛岀収鐩告満鎷嶅嚭鐨勫浘鐗囦负JPEG鏍煎紡鐨勶紝PNG鏍煎紡鐨勪笉鑳芥樉绀哄湪鐩稿唽涓� + if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)) { + out.flush(); + out.close(); + } + save = true;//淇濆瓨鎴愬姛 + } + return save; + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/RandomUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/RandomUtils.java new file mode 100644 index 0000000..017cbfd --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/RandomUtils.java @@ -0,0 +1,110 @@ +package com.demo.lib.common.util.common; + +import java.util.Random; + + +/** + * Random Utils + * + * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-5-12 + */ +public class RandomUtils { + + public static final String NUMBERS_AND_LETTERS = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + public static final String NUMBERS = "0123456789"; + public static final String LETTERS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; + public static final String CAPITAL_LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + public static final String LOWER_CASE_LETTERS = "abcdefghijklmnopqrstuvwxyz"; + + /** + * get a fixed-length random string, its a mixture of uppercase, lowercase letters and numbers + * + * @param length + * @return + * @see RandomUtils#getRandom(String source, int length) + */ + public static String getRandomNumbersAndLetters(int length) { + return getRandom(NUMBERS_AND_LETTERS, length); + } + + /** + * get a fixed-length random string, its a mixture of numbers + * + * @param length + * @return + * @see RandomUtils#getRandom(String source, int length) + */ + public static String getRandomNumbers(int length) { + return getRandom(NUMBERS, length); + } + + /** + * get a fixed-length random string, its a mixture of uppercase and lowercase letters + * + * @param length + * @return + * @see RandomUtils#getRandom(String source, int length) + */ + public static String getRandomLetters(int length) { + return getRandom(LETTERS, length); + } + + /** + * get a fixed-length random string, its a mixture of uppercase letters + * + * @param length + * @return + * @see RandomUtils#getRandom(String source, int length) + */ + public static String getRandomCapitalLetters(int length) { + return getRandom(CAPITAL_LETTERS, length); + } + + /** + * get a fixed-length random string, its a mixture of lowercase letters + * + * @param length + * @return + * @see RandomUtils#getRandom(String source, int length) + */ + public static String getRandomLowerCaseLetters(int length) { + return getRandom(LOWER_CASE_LETTERS, length); + } + + /** + * get a fixed-length random string, its a mixture of chars in source + * + * @param source + * @param length + * @return <ul> + * <li>if source is null or empty, return null</li> + * <li>else see {@link RandomUtils#getRandom(char[] sourceChar, int length)}</li> + * </ul> + */ + public static String getRandom(String source, int length) { + return StringUtils.isEmpty(source) ? null : getRandom(source.toCharArray(), length); + } + + /** + * get a fixed-length random string, its a mixture of chars in sourceChar + * + * @param sourceChar + * @param length + * @return <ul> + * <li>if sourceChar is null or empty, return null</li> + * <li>if length less than 0, return null</li> + * </ul> + */ + public static String getRandom(char[] sourceChar, int length) { + if (sourceChar == null || sourceChar.length == 0 || length < 0) { + return null; + } + + StringBuilder str = new StringBuilder(length); + Random random = new Random(); + for (int i = 0; i < length; i++) { + str.append(sourceChar[random.nextInt(sourceChar.length)]); + } + return str.toString(); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SerializeUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SerializeUtils.java new file mode 100644 index 0000000..82e1e54 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SerializeUtils.java @@ -0,0 +1,75 @@ +package com.demo.lib.common.util.common; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; + +/** + * Serialize Utils + * + * @author <a href="http://www.trinea.cn" target="_blank">Trinea</a> 2012-5-14 + */ +public class SerializeUtils { + + /** + * deserialization from file + * + * @param filePath + * @return + * @throws RuntimeException if an error occurs + */ + public static Object deserialization(String filePath) { + ObjectInputStream in = null; + try { + in = new ObjectInputStream(new FileInputStream(filePath)); + Object o = in.readObject(); + in.close(); + return o; + } catch (FileNotFoundException e) { + throw new RuntimeException("FileNotFoundException occurred. ", e); + } catch (ClassNotFoundException e) { + throw new RuntimeException("ClassNotFoundException occurred. ", e); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } finally { + if (in != null) { + try { + in.close(); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } + } + } + } + + /** + * serialize to file + * + * @param filePath + * @param obj + * @return + * @throws RuntimeException if an error occurs + */ + public static void serialization(String filePath, Object obj) { + ObjectOutputStream out = null; + try { + out = new ObjectOutputStream(new FileOutputStream(filePath)); + out.writeObject(obj); + out.close(); + } catch (FileNotFoundException e) { + throw new RuntimeException("FileNotFoundException occurred. ", e); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } finally { + if (out != null) { + try { + out.close(); + } catch (IOException e) { + throw new RuntimeException("IOException occurred. ", e); + } + } + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SoftKeyboardUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SoftKeyboardUtils.java new file mode 100644 index 0000000..bf4ee5b --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/SoftKeyboardUtils.java @@ -0,0 +1,29 @@ +package com.demo.lib.common.util.common; + +import android.app.Activity; +import android.content.Context; +import android.view.View; +import android.view.inputmethod.InputMethodManager; + +public class SoftKeyboardUtils { + + /** + * 闅愯棌閿洏 + * + * @param context Activity + */ + public static void hideSoftInput(Context context) { + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.hideSoftInputFromWindow(((Activity) context).getCurrentFocus().getWindowToken(), 0); + } + + /** + * 鏄剧ず閿洏 + * + * @param context Activity + */ + public static void showSoftInput(Context context, View view) { + InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); + imm.showSoftInput(view, InputMethodManager.HIDE_NOT_ALWAYS); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StorageUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StorageUtils.java new file mode 100644 index 0000000..12feb64 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StorageUtils.java @@ -0,0 +1,166 @@ +/******************************************************************************* + * Copyright 2011-2013 Sergey Tarasevich + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + *******************************************************************************/ +package com.demo.lib.common.util.common; + +import static android.os.Environment.MEDIA_MOUNTED; + +import java.io.File; +import java.io.IOException; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.Environment; +import android.util.Log; + +/** + * Provides application storage paths + * + * @author Sergey Tarasevich (nostra13[at]gmail[dot]com) + * @since 1.0.0 + */ +public final class StorageUtils { + + private static final String EXTERNAL_STORAGE_PERMISSION = "android.permission.WRITE_EXTERNAL_STORAGE"; + private static final String INDIVIDUAL_DIR_NAME = "uil-images"; + + private StorageUtils() { + } + + /** + * Returns application cache directory. Cache directory will be created on + * SD card <i>("/Android/data/[app_package_name]/cache")</i> if card is + * mounted and app has appropriate permission. Else - Android defines cache + * directory on device's file system. + * + * @param context + * Application context + * @return Cache {@link File directory}.<br /> + * <b>NOTE:</b> Can be null in some unpredictable cases (if SD card + * is unmounted and {@link android.content.Context#getCacheDir() + * Context.getCacheDir()} returns null). + */ + public static File getCacheDirectory(Context context) { + return getCacheDirectory(context, true); + } + + /** + * Returns application cache directory. Cache directory will be created on + * SD card <i>("/Android/data/[app_package_name]/cache")</i> (if card is + * mounted and app has appropriate permission) or on device's file system + * depending incoming parameters. + * + * @param context + * Application context + * @param preferExternal + * Whether prefer external location for cache + * @return Cache {@link File directory}.<br /> + * <b>NOTE:</b> Can be null in some unpredictable cases (if SD card + * is unmounted and {@link android.content.Context#getCacheDir() + * Context.getCacheDir()} returns null). + */ + public static File getCacheDirectory(Context context, boolean preferExternal) { + File appCacheDir = null; + if (preferExternal + && MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) + && hasExternalStoragePermission(context)) { + appCacheDir = getExternalCacheDir(context); + } + if (appCacheDir == null) { + appCacheDir = context.getCacheDir(); + } + if (appCacheDir == null) { + String cacheDirPath = "/data/data/" + context.getPackageName() + "/cache/"; + Log.w("Can't define system cache directory! '%s' will be used.", + cacheDirPath); + appCacheDir = new File(cacheDirPath); + } + return appCacheDir; + } + + /** + * Returns individual application cache directory (for only image caching + * from ImageLoader). Cache directory will be created on SD card + * <i>("/Android/data/[app_package_name]/cache/uil-images")</i> if card is + * mounted and app has appropriate permission. Else - Android defines cache + * directory on device's file system. + * + * @param context + * Application context + * @return Cache {@link File directory} + */ + public static File getIndividualCacheDirectory(Context context) { + File cacheDir = getCacheDirectory(context); + File individualCacheDir = new File(cacheDir, INDIVIDUAL_DIR_NAME); + if (!individualCacheDir.exists()) { + if (!individualCacheDir.mkdir()) { + individualCacheDir = cacheDir; + } + } + return individualCacheDir; + } + + /** + * Returns specified application cache directory. Cache directory will be + * created on SD card by defined path if card is mounted and app has + * appropriate permission. Else - Android defines cache directory on + * device's file system. + * + * @param context + * Application context + * @param cacheDir + * Cache directory path (e.g.: "AppCacheDir", + * "AppDir/cache/images") + * @return Cache {@link File directory} + */ + public static File getOwnCacheDirectory(Context context, String cacheDir) { + File appCacheDir = null; + if (MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) + && hasExternalStoragePermission(context)) { + appCacheDir = new File(Environment.getExternalStorageDirectory(), + cacheDir); + } + if (appCacheDir == null + || (!appCacheDir.exists() && !appCacheDir.mkdirs())) { + appCacheDir = context.getCacheDir(); + } + return appCacheDir; + } + + private static File getExternalCacheDir(Context context) { + File dataDir = new File(new File( + Environment.getExternalStorageDirectory(), "Android"), "data"); + File appCacheDir = new File( + new File(dataDir, context.getPackageName()), "cache"); + if (!appCacheDir.exists()) { + if (!appCacheDir.mkdirs()) { + Log.w("", "Unable to create external cache directory"); + return null; + } + try { + new File(appCacheDir, ".nomedia").createNewFile(); + } catch (IOException e) { + Log.i("", "Can't create \".nomedia\" file in application external cache directory"); + } + } + return appCacheDir; + } + + private static boolean hasExternalStoragePermission(Context context) { + int perm = context + .checkCallingOrSelfPermission(EXTERNAL_STORAGE_PERMISSION); + return perm == PackageManager.PERMISSION_GRANTED; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StringUtils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StringUtils.java new file mode 100644 index 0000000..c811e34 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/common/StringUtils.java @@ -0,0 +1,237 @@ +package com.demo.lib.common.util.common; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; +import java.util.StringTokenizer; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + +/** + * 瀛楃蹇嵎鏂瑰紡锛氬垽鏂瓧绗︿覆<涓枃瀛楃銆侀偖绠便�佹墜鏈哄彿銆佺┖瀛楃銆佹暣鏁般�佹诞鐐规暟> + */ +public class StringUtils { + public static final String EMPTY_STRING = ""; // 绌哄瓧绗︿覆 + + public static String join(String[] strs) { + StringBuilder result = new StringBuilder(); + if (strs != null) { + for (String str : strs) { + result.append(str).append(","); + } + } + if (result.length() > 0) { + return result.substring(0, result.length() - 1); + } + return ""; + } + + // 瑙f瀽鐭俊鎺ㄩ�佸唴瀹� + public static Map<String, Object> getParameterMap(String data) { + Map<String, Object> map = null; + if (data != null) { + map = new HashMap<String, Object>(); + String[] params = data.split("&"); + for (int i = 0; i < params.length; i++) { + int idx = params[i].indexOf("="); + if (idx >= 0) { + map.put(params[i].substring(0, idx), params[i].substring(idx + 1)); + } + } + } + return map; + } + + /** + * 杈撳叆娴佽浆鍖栦负瀛楃涓� + * + * @param is + * @return + */ + public static String convertStreamToString(InputStream is) { + /* + * To convert the InputStream to String we use the BufferedReader.readLine() + * method. We iterate until the BufferedReader return null which means + * there's no more data to read. Each line will appended to a StringBuilder + * and returned as String. + */ + BufferedReader reader = new BufferedReader(new InputStreamReader(is)); + StringBuilder sb = new StringBuilder(); + + String line = null; + try { + while ((line = reader.readLine()) != null) { + sb.append(line + "\n"); + } + } catch (IOException e) { + e.printStackTrace(); + } finally { + try { + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + return sb.toString(); + } + + // 妫�娴嬪瓧绗︿覆鏄惁绗﹀悎鐢ㄦ埛鍚� + public static boolean checkingMsg(int len) { + boolean isValid = true; + isValid = 5 >= len || len >= 21; + return isValid; + } + + // 妫�娴� + public static boolean isVaild(int len) { + boolean isValid = true; + if (1 < len && len < 17) { + isValid = false; + } + return isValid; + } + + // 鍒ゆ柇瀛楃涓叉槸鍚︽槸鏁存暟 + public static boolean isInteger(String aString) { + try { + Integer.parseInt(aString); + return true; + } catch (NumberFormatException e) { + return false; + } + } + + // 鍒ゆ柇瀛楃涓叉槸鍚︽槸娴偣鏁� + public static boolean isDouble(String value) { + try { + Double.parseDouble(value); + return value.contains("."); + } catch (NumberFormatException e) { + return false; + } + } + + // 妫�娴嬪瓧绗︿覆鏄惁涓轰腑鏂囧瓧绗� + public static boolean isChinesrChar(String str) { + return str.length() < str.getBytes().length; + } + + // 鍒ゆ柇瀛楃涓叉槸鍚︿负閭 + public static boolean isEmail(String aEmail) { + boolean isValid = false; + Pattern pattern = Pattern.compile( + "^([a-zA-Z0-9]+[_|-|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|-|.]?)*[a-zA-Z0-9]+\\.[a-zA-Z]{2,3}$", + Pattern.CASE_INSENSITIVE); + Matcher matcher = pattern.matcher(aEmail); + if (matcher.matches()) { + isValid = true; + } + return isValid; + } + + // 鍒ゆ柇瀛楃涓叉槸鍚︿负鎵嬫満鍙风爜 + public static boolean isMobileNumber(String aTelNumber) { + Pattern p = Pattern.compile("(^1((((3[5-9])|(47)|(5[0-2])|(5[7-9])|(82)|(8[7-8]))\\d{8})|((34[0-8])\\d{7}))$)|(^1((3[0-2])|(5[5-6])|(8[0-6]))\\d{8}$)|(^1((33[0-9])|(349)|(53[0-9])|(80[0-9])|(89[0-9]))\\d{7}$)"); + Matcher m = p.matcher(aTelNumber); + return m.matches(); + } + + // 鏍煎紡鍖栨墜鏈哄彿鐮� + public static String formatPhoneNum(String aPhoneNum) { + String first = aPhoneNum.substring(0, 3); + String end = aPhoneNum.substring(7, 11); + String phoneNumber = first + "****" + end; + return phoneNumber; + } + + // 妫�鏌ュ瓧绗︿覆鏄惁涓虹函鏁板瓧 + public static boolean isNumeric(String str) { + for (int i = str.length(); --i >= 0; ) { + if (!Character.isDigit(str.charAt(i))) { + return false; + } + } + return true; + } + + public static boolean isLetter(String s) { + for (int i = 0; i < s.length(); i++) { + if (!(s.charAt(i) >= 'A' && s.charAt(i) <= 'Z') + && !(s.charAt(i) >= 'a' && s.charAt(i) <= 'z')) { + return false; + } + } + return true; + } + + // 鍘婚櫎瀛楃涓蹭腑绌烘牸 + public static String clearSpaces(String aString) { + StringTokenizer aStringTok = new StringTokenizer(aString, " ", false); + String aResult = ""; + while (aStringTok.hasMoreElements()) { + aResult += aStringTok.nextElement(); + } + return aResult; + } + + /** + * is null or its length is 0 or it is made by space + * + * @param str + * @return if string is null or its size is 0 or it is made by space, return true, else return false. + */ + public static boolean isBlank(String str) { + return (str == null || str.trim().length() == 0); + } + + /** + * is null or its length is 0 + * + * @param str + * @return if string is null or its size is 0, return true, else return false. + */ + public static boolean isEmpty(String str) { + return (str == null || str.length() == 0); + } + + /** + * compare two string + * + * @param actual + * @param expected + * @return + * @see ObjectUtils#isEquals(Object, Object) + */ + public static boolean isEquals(String actual, String expected) { + return ObjectUtils.isEquals(actual, expected); + } + + /** + * capitalize first letter + * <p/> + * <pre> + * capitalizeFirstLetter(null) = null; + * capitalizeFirstLetter("") = ""; + * capitalizeFirstLetter("2ab") = "2ab" + * capitalizeFirstLetter("a") = "A" + * capitalizeFirstLetter("ab") = "Ab" + * capitalizeFirstLetter("Abc") = "Abc" + * </pre> + * + * @param str + * @return + */ + public static String capitalizeFirstLetter(String str) { + if (isEmpty(str)) { + return str; + } + char c = str.charAt(0); + return (!Character.isLetter(c) || Character.isUpperCase(c)) ? str + : new StringBuilder(str.length()).append(Character.toUpperCase(c)).append(str.substring(1)).toString(); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/DeviceInfoUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/DeviceInfoUtil.java new file mode 100644 index 0000000..a5adbae --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/DeviceInfoUtil.java @@ -0,0 +1,88 @@ +package com.demo.lib.common.util.device; + +import android.content.Context; +import android.content.SharedPreferences; + +import com.google.gson.Gson; +import com.demo.lib.common.DeviceUuidFactory; +import com.demo.lib.common.entity.ExpireTimeValue; +import com.demo.lib.common.util.common.StringUtils; + +import static android.content.Context.MODE_PRIVATE; + +public class DeviceInfoUtil { + enum DeviceInfoType { + deviceId("device_id_"), imei("imei_"), androidId("android_id_"), mac("mac_"), utdid("utdid_"), systemModel("system_model_"), systemVersion("system_version_"); + private String key; + + public String getKey() { + return key; + } + + private DeviceInfoType(String key) { + this.key = key; + } + } + + + private static String getDeviceInfo(Context context, DeviceInfoType deviceInfoType) { + SharedPreferences deviceInfo = context.getSharedPreferences("deviceInfo", MODE_PRIVATE); + String data = deviceInfo.getString(deviceInfoType.getKey(), ""); + ExpireTimeValue value = null; + if (!StringUtils.isEmpty(data)) { + value = new Gson().fromJson(data, ExpireTimeValue.class); + if (value.getExpireTime() < System.currentTimeMillis()) { + value = null; + } + } + + if (value == null) { + String v = ""; + if (deviceInfoType == DeviceInfoType.imei) { + v = MobileUtil.getIMEI(context); + } else if (deviceInfoType == DeviceInfoType.utdid) { + v = com.ta.utdid2.device.UTDevice.getUtdid(context); + } else if (deviceInfoType == DeviceInfoType.systemModel) { + v = MobileUtil.getSystemModel(); + } else if (deviceInfoType == DeviceInfoType.systemVersion) { + v = MobileUtil.getSystemVersion(); + } else if (deviceInfoType == DeviceInfoType.deviceId) { + v = new DeviceUuidFactory(context).getDeviceUuid() + ""; + } + value = new ExpireTimeValue(v, System.currentTimeMillis() + 1000 * 60 * 10); + SharedPreferences.Editor editor = deviceInfo.edit(); + editor.putString(deviceInfoType.getKey(), new Gson().toJson(value)); + editor.commit(); + } + if (value == null) + return ""; + else + return value.getValue(); + } + + public static String getIMEI(Context context) { + return getDeviceInfo(context, DeviceInfoType.imei); + } + + public static String getAndroidId(Context context) { + return getDeviceInfo(context, DeviceInfoType.androidId); + } + + public static String getUtdid(Context context) { + return getDeviceInfo(context, DeviceInfoType.utdid); + } + + public static String getSystemModel(Context context) { + return getDeviceInfo(context, DeviceInfoType.systemModel); + } + + public static String getSystemVersion(Context context) { + return getDeviceInfo(context, DeviceInfoType.systemVersion); + } + + public static String getDeviceId(Context context) { + return getDeviceInfo(context, DeviceInfoType.deviceId); + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/MobileUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/MobileUtil.java new file mode 100644 index 0000000..baea361 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/device/MobileUtil.java @@ -0,0 +1,156 @@ +package com.demo.lib.common.util.device; + +import android.content.Context; +import android.content.pm.PackageManager; +import android.telephony.TelephonyManager; + +import com.demo.lib.common.util.Environment; +import com.demo.lib.common.util.common.StringUtils; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.lang.reflect.Method; +import java.util.Locale; +import java.util.Properties; + +import androidx.core.content.ContextCompat; + +/** + * Created by weikou2015 on 2018/5/17. + * 鑾峰彇鎵嬫満灞炴�� + */ + +public class MobileUtil { + public static final String SYS_EMUI = "sys_emui"; + public static final String SYS_MIUI = "sys_miui"; + public static final String SYS_FLYME = "sys_flyme"; + private static final String KEY_MIUI_VERSION_CODE = "ro.miui.ui.version.code"; + private static final String KEY_MIUI_VERSION_NAME = "ro.miui.ui.version.name"; + private static final String KEY_MIUI_INTERNAL_STORAGE = "ro.miui.internal.storage"; + private static final String KEY_EMUI_API_LEVEL = "ro.build.hw_emui_api_level"; + private static final String KEY_EMUI_VERSION = "ro.build.version.emui"; + private static final String KEY_EMUI_CONFIG_HW_SYS_VERSION = "ro.confg.hw_systemversion"; + + /** + * 鑾峰彇褰撳墠鎵嬫満绯荤粺璇█銆� + * + * @return 杩斿洖褰撳墠绯荤粺璇█銆備緥濡傦細褰撳墠璁剧疆鐨勬槸鈥滀腑鏂�-涓浗鈥濓紝鍒欒繑鍥炩�渮h-CN鈥� + */ + public static String getSystemLanguage() { + return Locale.getDefault().getLanguage(); + } + + /** + * 鑾峰彇褰撳墠绯荤粺涓婄殑璇█鍒楄〃(Locale鍒楄〃) + * + * @return 璇█鍒楄〃 + */ + public static Locale[] getSystemLanguageList() { + return Locale.getAvailableLocales(); + } + + /** + * 鑾峰彇褰撳墠鎵嬫満绯荤粺鐗堟湰鍙� + * + * @return 绯荤粺鐗堟湰鍙� + */ + public static String getSystemVersion() { + return android.os.Build.VERSION.RELEASE; + } + + /** + * 鑾峰彇鎵嬫満鍨嬪彿 + * + * @return 鎵嬫満鍨嬪彿 + */ + public static String getSystemModel() { + return android.os.Build.MODEL; + } + + /** + * 鑾峰彇鎵嬫満鍘傚晢 + * + * @return 鎵嬫満鍘傚晢 + */ + public static String getDeviceBrand() { + return android.os.Build.BRAND; + } + + /** + * 鑾峰彇鎵嬫満IMEI(闇�瑕佲�渁ndroid.permission.READ_PHONE_STATE鈥濇潈闄�) + * + * @return 鎵嬫満IMEI + */ + public static String getIMEI(Context ctx) { + TelephonyManager tm = (TelephonyManager) ctx + .getSystemService(Context.TELEPHONY_SERVICE); + String deviceId=""; + if (ContextCompat.checkSelfPermission(ctx, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED + || ContextCompat.checkSelfPermission(ctx, android.Manifest.permission.READ_PHONE_STATE) == PackageManager.PERMISSION_GRANTED) { + deviceId = tm.getDeviceId();// 鑾峰彇deviceId + } + return deviceId; + } + + /** + * 楠岃瘉鎵嬫満鏍煎紡 + */ + /* + 绉诲姩锛�134銆�135銆�136銆�137銆�138銆�139銆�150銆�151銆�157(TD)銆�158銆�159銆�187銆�188 + 鑱旈�氾細130銆�131銆�132銆�152銆�155銆�156銆�185銆�186 + 鐢典俊锛�133銆�153銆�180銆�189銆侊紙1349鍗�氾級 + 鎬荤粨璧锋潵灏辨槸绗竴浣嶅繀瀹氫负1锛岀浜屼綅蹇呭畾涓�3鎴�5鎴�8锛屽叾浠栦綅缃殑鍙互涓�0-9 + + ------------------------------------------------ + 13(鑰�)鍙锋锛�130銆�131銆�132銆�133銆�134銆�135銆�136銆�137銆�138銆�139 + 14(鏂�)鍙锋锛�145銆�147 + 15(鏂�)鍙锋锛�150銆�151銆�152銆�153銆�154銆�155銆�156銆�157銆�158銆�159 + 17(鏂�)鍙锋锛�170銆�171銆�173銆�175銆�176銆�177銆�178 + 18(3G)鍙锋锛�180銆�181銆�182銆�183銆�184銆�185銆�186銆�187銆�188銆�189 + */ + public static boolean isMobileNum(String mobiles) { + String telRegex = "[1][34578]\\d{9}";//"[1]"浠h〃绗�1浣嶄负鏁板瓧1锛�"[358]"浠h〃绗簩浣嶅彲浠ヤ负3銆�4銆�5銆�7銆�8涓殑涓�涓紝"\\d{9}"浠h〃鍚庨潰鏄彲浠ユ槸0锝�9鐨勬暟瀛楋紝鏈�9浣嶃�� + if (StringUtils.isEmpty(mobiles)) + return false; + else + return mobiles.matches(telRegex); + } + + public static String getSystem() { + String SYS = SYS_MIUI; + try { + Properties prop = new Properties(); + prop.load(new FileInputStream(new File(Environment.getRootDirectory(), "build.prop"))); + if (prop.getProperty(KEY_MIUI_VERSION_CODE, null) != null + || prop.getProperty(KEY_MIUI_VERSION_NAME, null) != null + || prop.getProperty(KEY_MIUI_INTERNAL_STORAGE, null) != null) { + SYS = SYS_MIUI;//灏忕背 + } else if (prop.getProperty(KEY_EMUI_API_LEVEL, null) != null + || prop.getProperty(KEY_EMUI_VERSION, null) != null + || prop.getProperty(KEY_EMUI_CONFIG_HW_SYS_VERSION, null) != null) { + SYS = SYS_EMUI;//鍗庝负 + } else if (getMeizuFlymeOSFlag().toLowerCase().contains("flyme")) { + SYS = SYS_FLYME;//榄呮棌 + } + } catch (IOException e) { + e.printStackTrace(); + return SYS; + } + return SYS; + } + + public static String getMeizuFlymeOSFlag() { + return getSystemProperty("ro.build.display.id", ""); + } + + private static String getSystemProperty(String key, String defaultValue) { + try { + Class<?> clz = Class.forName("android.os.SystemProperties"); + Method get = clz.getMethod("get", String.class, String.class); + return (String) get.invoke(clz, key, defaultValue); + } catch (Exception e) { + } + return defaultValue; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideCircleTransform.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideCircleTransform.java new file mode 100644 index 0000000..ace76ec --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideCircleTransform.java @@ -0,0 +1,76 @@ +package com.demo.lib.common.util.glide; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; + +import java.io.UnsupportedEncodingException; +import java.security.MessageDigest; + +import androidx.annotation.NonNull; + +/** + * glide 鍔犺浇鍦嗗舰鍥剧墖 + * + * @author weikou2015 + */ +public class GlideCircleTransform extends BitmapTransformation { + + private static final String ID = GlideCircleTransform.class.getClass().getName(); + private static byte[] ID_BYTES = null; + + public GlideCircleTransform(Context context) { + try { + ID_BYTES = ID.getBytes(STRING_CHARSET_NAME); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + @Override + protected Bitmap transform(BitmapPool pool, Bitmap toTransform, + int outWidth, int outHeight) { + return circleCrop(pool, toTransform); + } + + private static Bitmap circleCrop(BitmapPool pool, Bitmap source) { + if (source == null) + return null; + + int size = Math.min(source.getWidth(), source.getHeight()); + int x = (source.getWidth() - size) / 2; + int y = (source.getHeight() - size) / 2; + + // TODO this could be acquired from the pool too + Bitmap squared = Bitmap.createBitmap(source, x, y, size, size); + + Bitmap result = pool.get(size, size, Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(size, size, Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(result); + Paint paint = new Paint(); + paint.setShader(new BitmapShader(squared, BitmapShader.TileMode.CLAMP, + BitmapShader.TileMode.CLAMP)); + paint.setAntiAlias(true); + float r = size / 2f; + canvas.drawCircle(r, r, r, paint); + return result; + } + + @Override + public int hashCode() { + return ID.hashCode(); + } + + @Override + public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { + messageDigest.update(ID_BYTES); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideRoundTransform.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideRoundTransform.java new file mode 100644 index 0000000..5596f35 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/glide/GlideRoundTransform.java @@ -0,0 +1,104 @@ +package com.demo.lib.common.util.glide; + +import android.content.Context; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.BitmapShader; +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.RectF; +import android.util.Log; + +import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool; +import com.bumptech.glide.load.resource.bitmap.BitmapTransformation; +import com.bumptech.glide.load.resource.bitmap.TransformationUtils; +import com.bumptech.glide.util.Util; + +import java.io.UnsupportedEncodingException; +import java.nio.ByteBuffer; +import java.security.MessageDigest; + +import androidx.annotation.NonNull; + +/** + * glide 鍦嗚鍥剧墖鍔犺浇 + * + * @author weikou2015 + */ +public class GlideRoundTransform extends BitmapTransformation { + private static final String ID = GlideRoundTransform.class.getClass().getName(); + private static final String TAG = "GlideRoundTransform"; + private static byte[] ID_BYTES = null; + private float radius = 0f; + + public GlideRoundTransform(Context context) { + this(context, 12); + try { + ID_BYTES = ID.getBytes(STRING_CHARSET_NAME); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + public GlideRoundTransform(Context context, int dp) { + this.radius = Resources.getSystem().getDisplayMetrics().density * dp; + try { + ID_BYTES = ID.getBytes(STRING_CHARSET_NAME); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + + @Override + protected Bitmap transform(BitmapPool pool, Bitmap toTransform, + int outWidth, int outHeight) { + //澶勭悊centercrop + Bitmap bitmap = TransformationUtils.centerCrop(pool, toTransform, outWidth, outHeight); + return roundCrop(pool, bitmap == null ? toTransform : bitmap); + } + + private Bitmap roundCrop(BitmapPool pool, Bitmap source) { + if (source == null) + return null; + + Log.i(TAG, "婧愬浘鐗囧ぇ灏�:" + source.getWidth() + "-" + source.getHeight()); + + Bitmap result = pool.get(source.getWidth(), source.getHeight(), + Bitmap.Config.ARGB_8888); + if (result == null) { + result = Bitmap.createBitmap(source.getWidth(), source.getHeight(), + Bitmap.Config.ARGB_8888); + } + + Canvas canvas = new Canvas(result); + Paint paint = new Paint(); + paint.setShader(new BitmapShader(source, BitmapShader.TileMode.CLAMP, + BitmapShader.TileMode.CLAMP)); + paint.setAntiAlias(true); + RectF rectF = new RectF(0f, 0f, source.getWidth(), source.getHeight()); + canvas.drawRoundRect(rectF, radius, radius, paint); + return result; + } + + @Override + public int hashCode() { + return Util.hashCode(ID.hashCode(), + Util.hashCode(radius)); + } + + @Override + public boolean equals(Object o) { + if (o instanceof GlideRoundTransform) { + GlideRoundTransform other = (GlideRoundTransform) o; + return radius == other.radius; + } + return false; + } + + @Override + public void updateDiskCacheKey(@NonNull MessageDigest messageDigest) { + messageDigest.update(ID_BYTES); + byte[] radiusData = ByteBuffer.allocate(4).putInt((int) radius).array(); + messageDigest.update(radiusData); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AESOperator.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AESOperator.java new file mode 100644 index 0000000..39a79d8 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AESOperator.java @@ -0,0 +1,63 @@ +package com.demo.lib.common.util.security; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; + +import android.util.Base64; + +import java.nio.charset.StandardCharsets; + +/** + * AES 鏄竴绉嶅彲閫嗗姞瀵嗙畻娉曪紝瀵圭敤鎴风殑鏁忔劅淇℃伅鍔犲瘑澶勭悊 瀵瑰師濮嬫暟鎹繘琛孉ES鍔犲瘑鍚庯紝鍦ㄨ繘琛孊ase64缂栫爜杞寲锛� + */ +public class AESOperator { + /* + * 鍔犲瘑鐢ㄧ殑Key 鍙互鐢�26涓瓧姣嶅拰鏁板瓧缁勬垚 姝ゅ浣跨敤AES-128-CBC鍔犲瘑妯″紡锛宬ey闇�瑕佷负16浣嶃�� + */ + private String sKey = "TgOIiObDqDXLbExlbM0rwbwLZc/XxLSwCMYqPAL6Cbg="; + private String ivParameter = "/PPwsH7HnWu27wxwRQQOfQ=="; + private static AESOperator instance = null; + + private AESOperator() { + + } + + public static AESOperator getInstance() { + if (instance == null) + instance = new AESOperator(); + return instance; + } + + // 鍔犲瘑 + public String encrypt(String data) { + try { + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + byte[] raw = Base64.decode(sKey, Base64.DEFAULT); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + IvParameterSpec iv = new IvParameterSpec(Base64.decode(ivParameter, Base64.DEFAULT));// 浣跨敤CBC妯″紡锛岄渶瑕佷竴涓悜閲廼v锛屽彲澧炲姞鍔犲瘑绠楁硶鐨勫己搴� + cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv); + byte[] encrypted = cipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); + return Base64.encodeToString(encrypted, Base64.DEFAULT);// 姝ゅ浣跨敤BASE64鍋氳浆鐮併�� + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } + + // 瑙e瘑 + public String decrypt(String data) { + try { + byte[] raw = Base64.decode(sKey, Base64.DEFAULT); + SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES"); + Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); + IvParameterSpec iv = new IvParameterSpec(Base64.decode(ivParameter, Base64.DEFAULT)); + cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv); + byte[] original = cipher.doFinal(Base64.decode(data, Base64.DEFAULT)); + return new String(original, StandardCharsets.UTF_8); + } catch (Exception e) { + e.printStackTrace(); + } + return ""; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AEScrypt.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AEScrypt.java new file mode 100644 index 0000000..f45da46 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/AEScrypt.java @@ -0,0 +1,117 @@ +package com.demo.lib.common.util.security; + +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; + +import javax.crypto.BadPaddingException; +import javax.crypto.Cipher; +import javax.crypto.IllegalBlockSizeException; +import javax.crypto.KeyGenerator; +import javax.crypto.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; + +public class AEScrypt { + + /** + * 鍔犲瘑 + * + * @param content + * 闇�瑕佸姞瀵嗙殑鍐呭 + * @param password + * 鍔犲瘑瀵嗙爜 + * @return + */ + public static byte[] encrypt(String content, String password) { + try { + KeyGenerator kgen = KeyGenerator.getInstance("AES"); + kgen.init(128, new SecureRandom(password.getBytes())); + SecretKey secretKey = kgen.generateKey(); + byte[] enCodeFormat = secretKey.getEncoded(); + SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); + Cipher cipher = Cipher.getInstance("AES");// 鍒涘缓瀵嗙爜鍣� + byte[] byteContent = content.getBytes(StandardCharsets.UTF_8); + cipher.init(Cipher.ENCRYPT_MODE, key);// 鍒濆鍖� + byte[] result = cipher.doFinal(byteContent); + return result; // 鍔犲瘑 + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (BadPaddingException e) { + e.printStackTrace(); + } + return null; + } + + /** + * 瑙e瘑 + * + * @param content + * 寰呰В瀵嗗唴瀹� + * @param password + * 瑙e瘑瀵嗛挜 + * @return + */ + public static byte[] decrypt(byte[] content, String password) { + try { + KeyGenerator kgen = KeyGenerator.getInstance("AES"); + kgen.init(128, new SecureRandom(password.getBytes())); + SecretKey secretKey = kgen.generateKey(); + byte[] enCodeFormat = secretKey.getEncoded(); + SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES"); + Cipher cipher = Cipher.getInstance("AES");// 鍒涘缓瀵嗙爜鍣� + cipher.init(Cipher.DECRYPT_MODE, key);// 鍒濆鍖� + byte[] result = cipher.doFinal(content); + return result; // 鍔犲瘑 + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (NoSuchPaddingException e) { + e.printStackTrace(); + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (IllegalBlockSizeException e) { + e.printStackTrace(); + } catch (BadPaddingException e) { + e.printStackTrace(); + } + return null; + } + + private static String bytesToHexString(byte[] bytes) { + // http://stackoverflow.com/questions/332079 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(0xFF & bytes[i]); + if (hex.length() == 1) { + sb.append('0'); + } + sb.append(hex); + } + return sb.toString(); + } + + /** + * 灏�16杩涘埗杞崲涓轰簩杩涘埗 + * + * @param hexStr + * @return + */ + public static byte[] hexStringToBytes(String hexStr) { + if (hexStr.length() < 1) + return null; + byte[] result = new byte[hexStr.length() / 2]; + for (int i = 0; i < hexStr.length() / 2; i++) { + int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16); + int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2), 16); + result[i] = (byte) (high * 16 + low); + } + return result; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/DEScrypt.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/DEScrypt.java new file mode 100644 index 0000000..784c7db --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/DEScrypt.java @@ -0,0 +1,74 @@ +package com.demo.lib.common.util.security; + +import java.nio.charset.StandardCharsets; +import java.security.InvalidKeyException; +import java.security.Key; +import java.security.NoSuchAlgorithmException; +import java.security.spec.AlgorithmParameterSpec; +import java.security.spec.InvalidKeySpecException; + +import javax.crypto.Cipher; +import javax.crypto.SecretKeyFactory; +import javax.crypto.spec.DESKeySpec; +import javax.crypto.spec.IvParameterSpec; + +import android.util.Base64; + +public class DEScrypt { + /** + * [鍔犲瘑]DES-->BASE64-->瀵嗘枃 + * + * [瑙e瘑]BASE64->DES-->鏄庢枃 + * + * 绉橀挜鍜屽悜閲忚鍙屾柟绾﹀畾涓�鑷� + * + * DES鍔犲瘑鐨勭閽ワ紝蹇呴』鏄�8浣嶉暱鐨勫瓧绗︿覆 + */ + private static final byte[] DESkey = Base64.decode("VW1nT3R2WVk=", Base64.DEFAULT);// 璁剧疆瀵嗛挜 + private static final byte[] DESIV = Base64.decode("WXlIeEhsY0o=", Base64.DEFAULT);// 璁剧疆鍚戦噺 + private static AlgorithmParameterSpec iv = null;// 鍔犲瘑绠楁硶鐨勫弬鏁版帴鍙o紝IvParameterSpec鏄畠鐨勪竴涓疄鐜� + private static Key key = null; + + static { + try { + DESKeySpec keySpec = new DESKeySpec(DESkey); + // 璁剧疆瀵嗛挜鍙傛暟 + iv = new IvParameterSpec(DESIV);// 璁剧疆鍚戦噺 + SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");// 鑾峰緱瀵嗛挜宸ュ巶 + key = keyFactory.generateSecret(keySpec);// 寰楀埌瀵嗛挜瀵硅薄 + } catch (InvalidKeyException e) { + e.printStackTrace(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } catch (InvalidKeySpecException e) { + e.printStackTrace(); + } + } + + public static String encode(String data) { + String result = ""; + try { + Cipher enCipher = Cipher.getInstance("DES/CBC/PKCS5Padding");// 寰楀埌鍔犲瘑瀵硅薄Cipher + enCipher.init(Cipher.ENCRYPT_MODE, key, iv);// 璁剧疆宸ヤ綔妯″紡涓哄姞瀵嗘ā寮忥紝缁欏嚭瀵嗛挜鍜屽悜閲� + byte[] pasByte = enCipher.doFinal(data.getBytes(StandardCharsets.UTF_8)); + result = Base64.encodeToString(pasByte, Base64.DEFAULT); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + public static String decode(String data) { + String result = ""; + Cipher deCipher; + try { + deCipher = Cipher.getInstance("DES/CBC/PKCS5Padding"); + deCipher.init(Cipher.DECRYPT_MODE, key, iv); + byte[] pasByte = deCipher.doFinal(Base64.decode(data, Base64.DEFAULT)); + result = new String(pasByte, StandardCharsets.UTF_8); + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/MD5Utils.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/MD5Utils.java new file mode 100644 index 0000000..9d3d1a2 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/security/MD5Utils.java @@ -0,0 +1,36 @@ +package com.demo.lib.common.util.security; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +import android.util.Log; + +public class MD5Utils { + + private static final String TAG = "MD5Util"; + + public static String getMD532(String key) { + String cacheKey = ""; + try { + final MessageDigest mDigest = MessageDigest.getInstance("MD5"); + mDigest.update(key.getBytes()); + cacheKey = bytesToHexString(mDigest.digest()); + } catch (NoSuchAlgorithmException e) { + Log.e(TAG, e.getMessage()); + } + return cacheKey; + } + + private static String bytesToHexString(byte[] bytes) { + // http://stackoverflow.com/questions/332079 + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + String hex = Integer.toHexString(0xFF & bytes[i]); + if (hex.length() == 1) { + sb.append('0'); + } + sb.append(hex); + } + return sb.toString(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/LoadingDialogUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/LoadingDialogUtil.java new file mode 100644 index 0000000..e26f7a4 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/LoadingDialogUtil.java @@ -0,0 +1,95 @@ +package com.demo.lib.common.util.ui; + +import android.app.Dialog; +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.TextView; + +import com.demo.lib.common.util.common.StringUtils; +import com.lcjian.lcjianlibrary.R; + + +/** + * 鐢ㄦ埛鍗忚寮规 + */ +public class LoadingDialogUtil { + + private static Dialog pd; + + public static void show(Context context) { + show(context, "", false); + } + + public static void show(Context context, String msg, boolean cancelable) { + try { + dismiss(); + //鎷垮埌dialog + pd = getLoadingDialog(context, msg); + //璁剧疆鐐瑰嚮澶栧洿鏄惁娑堝け + pd.setCancelable(cancelable); + pd.show(); + } catch (Exception e) { + } + } + + //杩欓噷鐨勫姞杞芥晥鏋滆嚜宸遍殢鎰忓畾涔� + public static Dialog getLoadingDialog(Context context, String msg) { + Dialog loading_dialog = new Dialog(context, R.style.Dialog); + View view = LayoutInflater.from(context).inflate(R.layout.dialog_loading, null); + TextView tv_msg = view.findViewById(R.id.tv_msg); + if (StringUtils.isEmpty(msg)) { + tv_msg.setVisibility(View.GONE); + } else { + tv_msg.setText(msg); + tv_msg.setVisibility(View.VISIBLE); + } + loading_dialog.setContentView(view); + loading_dialog.getWindow().setBackgroundDrawableResource(R.color.transparent); + loading_dialog.setCancelable(false); + return loading_dialog; + } + + + //鍦ㄨ繖閲岀洿鎺ュ仛浜嗗垽鏂紝澶ц儐鐨勬斁蹇冪殑浣跨敤锛屼繚璇佷笉浼氬嚭鐜扮┖鎸囬拡 + public static void dismiss() { + try { + if (pd != null && pd.isShowing()) { + pd.dismiss(); + } + pd = null; + } catch (Exception e) { + // TODO: handle exception + } finally { + pd = null; + } + } + + + public static boolean isShowing() { + try { + if (pd != null) { + return pd.isShowing(); + } + } catch (Exception e) { + // TODO: handle exception + } + return false; + } + + /** + * 璁剧疆dialog鐐瑰嚮澶栭儴鏄惁鍙互娑堝け + */ + public static void setCanceledOnTouchOutside(boolean b) { + try { + if (pd != null && pd.isShowing()) { + pd.setCanceledOnTouchOutside(b); + } + } catch (Exception e) { + // TODO: handle exception + } + + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/StatusBarHeightUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/StatusBarHeightUtil.java new file mode 100644 index 0000000..cb3426b --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/StatusBarHeightUtil.java @@ -0,0 +1,12 @@ +package com.demo.lib.common.util.ui; + +import android.content.Context; + +public class StatusBarHeightUtil { + + public static int getStatusBarHeight(Context context) { + int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android"); + return context.getResources().getDimensionPixelSize(resourceId); + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/SystemClipImageUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/SystemClipImageUtil.java new file mode 100644 index 0000000..f8250c5 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/SystemClipImageUtil.java @@ -0,0 +1,125 @@ +package com.demo.lib.common.util.ui; + +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.os.Build; +import android.os.Environment; +import android.os.FileUtils; +import android.provider.MediaStore; +import android.webkit.MimeTypeMap; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import androidx.core.content.FileProvider; + +/** + * 绯荤粺瑁佸壀鍥剧墖宸ュ叿绫� + */ +public class SystemClipImageUtil { + + /** + * 鍓垏鍥剧墖锛屽吋瀹筧ndroid10浠ヤ笂鐨勭増鏈紝 + * 娉ㄦ剰锛氶渶瑕丄ndroidManifest涓渶瑕侀厤缃瓼ileProvider + * @param context + * @param uri 鍘熷浘uri + * @param name 鍥剧墖鍚嶇О + * @param width 鍓垏鍚庣殑瀹� + * @param height 鍓垏鍚庣殑楂� + * @param requestCode 璇锋眰鐮� + * @return + */ + public static Uri startPhotoZoom(Activity context, Uri uri, String name, int width, int height, int requestCode) { + if (uri == null) { + return null; + } + File cropPhoto = new File(context.getExternalCacheDir(), name); + //m_ResultImagePath = CropPhoto.getPath(); + Uri mPhotoUri = Uri.fromFile(cropPhoto); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + cropPhoto = uriToFileApiQ(uri, context); + mPhotoUri = FileProvider.getUriForFile(context, + context.getPackageName() + ".fileprovider", cropPhoto); + } + String headPath = cropPhoto.getPath(); + + Intent intent = new Intent("com.android.camera.action.CROP"); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + intent.setDataAndType(mPhotoUri, "image/*"); + } else { + intent.setDataAndType(uri, "image/*"); + } + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); //娣诲姞杩欎竴鍙ヨ〃绀哄鐩爣搴旂敤涓存椂鎺堟潈璇ri鎵�浠h〃鐨勬枃浠� + } + intent.putExtra("crop", "true"); + intent.putExtra("scale", true); + if (Build.MANUFACTURER.equals("HUAWEI")) { + intent.putExtra("aspectX", 9998); + intent.putExtra("aspectY", 9999); + } else { + intent.putExtra("aspectX", 1); + intent.putExtra("aspectY", 1); + } + + intent.putExtra("outputX", width); + intent.putExtra("outputY", height); + intent.putExtra("return-data", false); + intent.putExtra(MediaStore.EXTRA_OUTPUT, mPhotoUri); + intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString()); + //intent.putExtra("noFaceDetection", true); // no face detection + + try { + context.startActivityForResult(intent, requestCode);//杩欓噷鐨凴ESULT_REQUEST_CODE鏄湪startActivityForResult閲屼娇鐢ㄧ殑杩斿洖鍊笺�� + } catch (Exception e) { + // 瑙e喅鎴彇鍚庨儴鍒嗘満鍨嬬閫� + e.printStackTrace(); + } + + return mPhotoUri; + } + + + @TargetApi(Build.VERSION_CODES.Q) + private static File uriToFileApiQ(Uri uri, Context context) { + File file = null; + if (uri == null) return file; + //android10浠ヤ笂杞崲 + if (uri.getScheme().equals(ContentResolver.SCHEME_FILE)) { + file = new File(uri.getPath()); + } else if (uri.getScheme().equals(ContentResolver.SCHEME_CONTENT)) { + //鎶婃枃浠跺鍒跺埌娌欑洅鐩綍 + ContentResolver contentResolver = context.getContentResolver(); + String displayName = System.currentTimeMillis() + Math.round((Math.random() + 1) * 1000) + + "." + MimeTypeMap.getSingleton().getExtensionFromMimeType(contentResolver.getType(uri)); + +// 娉ㄩ噴鎺夌殑鏂规硶鍙互鑾峰彇鍒板師鏂囦欢鐨勬枃浠跺悕锛屼絾鏄瘮杈冭�楁椂 +// Cursor cursor = contentResolver.query(uri, null, null, null, null); +// if (cursor.moveToFirst()) { +// String displayName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME));} + + try { + InputStream is = contentResolver.openInputStream(uri); + File cache = new File(context.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath(), displayName); + FileOutputStream fos = new FileOutputStream(cache); + FileUtils.copy(is, fos); + file = cache; + fos.close(); + is.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + return file; + } + + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/TextViewUtil.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/TextViewUtil.java new file mode 100644 index 0000000..4b53df2 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/util/ui/TextViewUtil.java @@ -0,0 +1,55 @@ +package com.demo.lib.common.util.ui; + +import android.content.Context; +import android.content.Intent; +import android.text.Html; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; +import android.text.style.ClickableSpan; +import android.text.style.URLSpan; +import android.view.View; + +public class TextViewUtil { + + /** + * 鑾峰彇鍙互鐐瑰嚮鐨刪tml鍐呭 + * + * @param html + * @param context + * @return + */ + public static CharSequence getClickableHtml(String html, Context context, Integer color,Class jumpClass) { + Spanned spannedHtml = Html.fromHtml(html); + SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml); + URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class); + for (final URLSpan span : urls) { + setLinkClickable(clickableHtmlBuilder, span, context, color,jumpClass); + } + return clickableHtmlBuilder; + } + + /** + * 璁剧疆鐐瑰嚮瓒呴摼鎺ュ搴旂殑澶勭悊鍐呭 + */ + private static void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan, final Context context, final Integer linkColor, final Class jumpClass) { + int start = clickableHtmlBuilder.getSpanStart(urlSpan); + int end = clickableHtmlBuilder.getSpanEnd(urlSpan); + int flags = clickableHtmlBuilder.getSpanFlags(urlSpan); + + ClickableSpan clickableSpan = new ClickableSpan() { + public void onClick(View view) { + context.startActivity(new Intent(context, jumpClass).putExtra("url", urlSpan.getURL())); + } + + public void updateDrawState(TextPaint ds) { + if (linkColor != null) + ds.setColor(linkColor); +// //璁剧疆鏄惁瑕佷笅鍒掔嚎 + ds.setUnderlineText(false); + } + }; + clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags); + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/AdaptiveListView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/AdaptiveListView.java new file mode 100644 index 0000000..2f706be --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/AdaptiveListView.java @@ -0,0 +1,41 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.ListView; + +import com.lcjian.lcjianlibrary.R; + +public class AdaptiveListView extends ListView { + + private int mMaxHeight; + + public AdaptiveListView(Context context) { + this(context, null); + } + + public AdaptiveListView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public AdaptiveListView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AdaptiveListView, defStyleAttr, 0); + mMaxHeight = a.getDimensionPixelSize(R.styleable.AdaptiveListView_maxHeight, 0); + a.recycle(); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (mMaxHeight !=0 && getMeasuredHeight() > mMaxHeight) { + setMeasuredDimension(getMeasuredWidth(), mMaxHeight); + } + } + + public void setMaxHeight(int maxHeight) { + this.mMaxHeight = maxHeight; + invalidate(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ExtendEditText.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ExtendEditText.java new file mode 100644 index 0000000..8df6de4 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ExtendEditText.java @@ -0,0 +1,73 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.view.View; +import android.widget.EditText; + +public class ExtendEditText extends EditText { + + public ExtendEditText(Context context) { + super(context); + } + + public ExtendEditText(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public ExtendEditText(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + private OnDrawableClickListener mOnDrawableClickListener; + + private GestureDetector gestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { + + @Override + public boolean onSingleTapUp(MotionEvent e) { + if (getCompoundDrawables()[0] != null + && e.getX() >= getPaddingLeft() + && e.getX() <= getPaddingLeft() + getCompoundDrawables()[0].getIntrinsicWidth()) { + if (mOnDrawableClickListener != null) { + return mOnDrawableClickListener.onRightDrawbleClick(ExtendEditText.this); + } + } + if (getCompoundDrawables()[2] != null + && e.getX() >= getWidth() - getCompoundDrawables()[2].getIntrinsicWidth() - getPaddingRight() + && e.getX() <= getWidth() - getPaddingRight()) { + if (mOnDrawableClickListener != null) { + return mOnDrawableClickListener.onRightDrawbleClick(ExtendEditText.this); + } + } + return false; + } + }); + + @Override + public boolean onTouchEvent(MotionEvent event) { + if (gestureDetector.onTouchEvent(event)) { + return true; + } + return super.onTouchEvent(event); + } + + public OnDrawableClickListener getOnDrawableClickListener() { + return mOnDrawableClickListener; + } + + public void setOnDrawableClickListener( + OnDrawableClickListener onDrawableClickListener) { + this.mOnDrawableClickListener = onDrawableClickListener; + } + + public interface OnDrawableClickListener { + + boolean onRightDrawbleClick(View view); + + boolean onLeftDrawbleClick(View view); + + } + +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/FlowLayout.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/FlowLayout.java new file mode 100644 index 0000000..f3fd3dd --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/FlowLayout.java @@ -0,0 +1,203 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; + +import java.util.ArrayList; +import java.util.List; + +/** + * 娴佸紡甯冨眬 + */ +public class FlowLayout extends ViewGroup { + + private static final String TAG = "FlowLayout"; + + + public FlowLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected LayoutParams generateLayoutParams( + LayoutParams p) { + return new MarginLayoutParams(p); + } + + @Override + public LayoutParams generateLayoutParams(AttributeSet attrs) { + return new MarginLayoutParams(getContext(), attrs); + } + + @Override + protected LayoutParams generateDefaultLayoutParams() { + return new MarginLayoutParams(LayoutParams.MATCH_PARENT, + LayoutParams.MATCH_PARENT); + } + + /** + * 璐熻矗璁剧疆瀛愭帶浠剁殑娴嬮噺妯″紡鍜屽ぇ灏� 鏍规嵁鎵�鏈夊瓙鎺т欢璁剧疆鑷繁鐨勫鍜岄珮 + */ + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + // 鑾峰緱瀹冪殑鐖跺鍣ㄤ负瀹冭缃殑娴嬮噺妯″紡鍜屽ぇ灏� + int sizeWidth = MeasureSpec.getSize(widthMeasureSpec); + int sizeHeight = MeasureSpec.getSize(heightMeasureSpec); + int modeWidth = MeasureSpec.getMode(widthMeasureSpec); + int modeHeight = MeasureSpec.getMode(heightMeasureSpec); + + Log.e(TAG, sizeWidth + "," + sizeHeight); + + // 濡傛灉鏄痺arp_content鎯呭喌涓嬶紝璁板綍瀹藉拰楂� + int width = 0; + int height = 0; + /** + * 璁板綍姣忎竴琛岀殑瀹藉害锛寃idth涓嶆柇鍙栨渶澶у搴� + */ + int lineWidth = 0; + /** + * 姣忎竴琛岀殑楂樺害锛岀疮鍔犺嚦height + */ + int lineHeight = 0; + + int cCount = getChildCount(); + + // 閬嶅巻姣忎釜瀛愬厓绱� + for (int i = 0; i < cCount; i++) { + View child = getChildAt(i); + // 娴嬮噺姣忎竴涓猚hild鐨勫鍜岄珮 + measureChild(child, widthMeasureSpec, heightMeasureSpec); + // 寰楀埌child鐨刲p + MarginLayoutParams lp = (MarginLayoutParams) child + .getLayoutParams(); + // 褰撳墠瀛愮┖闂村疄闄呭崰鎹殑瀹藉害 + int childWidth = child.getMeasuredWidth() + lp.leftMargin + + lp.rightMargin; + // 褰撳墠瀛愮┖闂村疄闄呭崰鎹殑楂樺害 + int childHeight = child.getMeasuredHeight() + lp.topMargin + + lp.bottomMargin; + /** + * 濡傛灉鍔犲叆褰撳墠child锛屽垯瓒呭嚭鏈�澶у搴︼紝鍒欑殑鍒扮洰鍓嶆渶澶у搴︾粰width锛岀被鍔爃eight 鐒跺悗寮�鍚柊琛� + */ + if (lineWidth + childWidth > sizeWidth) { + width = Math.max(lineWidth, childWidth);// 鍙栨渶澶х殑 + lineWidth = childWidth; // 閲嶆柊寮�鍚柊琛岋紝寮�濮嬭褰� + // 鍙犲姞褰撳墠楂樺害锛� + height += lineHeight; + // 寮�鍚褰曚笅涓�琛岀殑楂樺害 + lineHeight = childHeight; + } else + // 鍚﹀垯绱姞鍊糽ineWidth,lineHeight鍙栨渶澶ч珮搴� + { + lineWidth += childWidth; + lineHeight = Math.max(lineHeight, childHeight); + } + // 濡傛灉鏄渶鍚庝竴涓紝鍒欏皢褰撳墠璁板綍鐨勬渶澶у搴﹀拰褰撳墠lineWidth鍋氭瘮杈� + if (i == cCount - 1) { + width = Math.max(width, lineWidth); + height += lineHeight; + } + + } + setMeasuredDimension((modeWidth == MeasureSpec.EXACTLY) ? sizeWidth + : width, (modeHeight == MeasureSpec.EXACTLY) ? sizeHeight + : height); + + } + + /** + * 瀛樺偍鎵�鏈夌殑View锛屾寜琛岃褰� + */ + private List<List<View>> mAllViews = new ArrayList<List<View>>(); + /** + * 璁板綍姣忎竴琛岀殑鏈�澶ч珮搴� + */ + private List<Integer> mLineHeight = new ArrayList<Integer>(); + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + mAllViews.clear(); + mLineHeight.clear(); + + int width = getWidth(); + + int lineWidth = 0; + int lineHeight = 0; + // 瀛樺偍姣忎竴琛屾墍鏈夌殑childView + List<View> lineViews = new ArrayList<View>(); + int cCount = getChildCount(); + // 閬嶅巻鎵�鏈夌殑瀛╁瓙 + for (int i = 0; i < cCount; i++) { + View child = getChildAt(i); + MarginLayoutParams lp = (MarginLayoutParams) child + .getLayoutParams(); + int childWidth = child.getMeasuredWidth(); + int childHeight = child.getMeasuredHeight(); + + // 濡傛灉宸茬粡闇�瑕佹崲琛� + if (childWidth + lp.leftMargin + lp.rightMargin + lineWidth > width) { + // 璁板綍杩欎竴琛屾墍鏈夌殑View浠ュ強鏈�澶ч珮搴� + mLineHeight.add(lineHeight); + // 灏嗗綋鍓嶈鐨刢hildView淇濆瓨锛岀劧鍚庡紑鍚柊鐨凙rrayList淇濆瓨涓嬩竴琛岀殑childView + mAllViews.add(lineViews); + lineWidth = 0;// 閲嶇疆琛屽 + lineViews = new ArrayList<View>(); + } + /** + * 濡傛灉涓嶉渶瑕佹崲琛岋紝鍒欑疮鍔� + */ + lineWidth += childWidth + lp.leftMargin + lp.rightMargin; + lineHeight = Math.max(lineHeight, childHeight + lp.topMargin + + lp.bottomMargin); + lineViews.add(child); + } + // 璁板綍鏈�鍚庝竴琛� + mLineHeight.add(lineHeight); + mAllViews.add(lineViews); + + int left = 0; + int top = 0; + // 寰楀埌鎬昏鏁� + int lineNums = mAllViews.size(); + for (int i = 0; i < lineNums; i++) { + // 姣忎竴琛岀殑鎵�鏈夌殑views + lineViews = mAllViews.get(i); + // 褰撳墠琛岀殑鏈�澶ч珮搴� + lineHeight = mLineHeight.get(i); + + Log.e(TAG, "绗�" + i + "琛� 锛�" + lineViews.size() + " , " + lineViews); + Log.e(TAG, "绗�" + i + "琛岋紝 锛�" + lineHeight); + + // 閬嶅巻褰撳墠琛屾墍鏈夌殑View + for (int j = 0; j < lineViews.size(); j++) { + View child = lineViews.get(j); + if (child.getVisibility() == View.GONE) { + continue; + } + MarginLayoutParams lp = (MarginLayoutParams) child + .getLayoutParams(); + + //璁$畻childView鐨刲eft,top,right,bottom + int lc = left + lp.leftMargin; + int tc = top + lp.topMargin; + int rc = lc + child.getMeasuredWidth(); + int bc = tc + child.getMeasuredHeight(); + + Log.e(TAG, child + " , l = " + lc + " , t = " + t + " , r =" + + rc + " , b = " + bc); + + child.layout(lc, tc, rc, bc); + + left += child.getMeasuredWidth() + lp.rightMargin + + lp.leftMargin; + } + left = 0; + top += lineHeight; + } + + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IndexableListView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IndexableListView.java new file mode 100644 index 0000000..92e3575 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IndexableListView.java @@ -0,0 +1,363 @@ +/* + * Copyright 2011 woozzu + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.demo.lib.common.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.Color; +import android.graphics.Paint; +import android.graphics.RectF; +import android.os.Handler; +import android.os.Message; +import android.os.SystemClock; +import android.util.AttributeSet; +import android.view.GestureDetector; +import android.view.MotionEvent; +import android.widget.Adapter; +import android.widget.ListAdapter; +import android.widget.ListView; +import android.widget.SectionIndexer; + +public class IndexableListView extends ListView { + + private boolean mIsFastScrollEnabled = false; + private IndexScroller mScroller = null; + private GestureDetector mGestureDetector = null; + + public IndexableListView(Context context) { + super(context); + } + + public IndexableListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public IndexableListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + public boolean isFastScrollEnabled() { + return mIsFastScrollEnabled; + } + + @Override + public void setFastScrollEnabled(boolean enabled) { + mIsFastScrollEnabled = enabled; + if (mIsFastScrollEnabled) { + if (mScroller == null) + mScroller = new IndexScroller(getContext(), this); + } else { + if (mScroller != null) { + mScroller.hide(); + mScroller = null; + } + } + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + + // Overlay index bar + if (mScroller != null) + mScroller.draw(canvas); + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + // Intercept ListView's touch event + if (mScroller != null && mScroller.onTouchEvent(ev)) + return true; + + if (mGestureDetector == null) { + mGestureDetector = new GestureDetector(getContext(), new GestureDetector.SimpleOnGestureListener() { + + @Override + public boolean onFling(MotionEvent e1, MotionEvent e2, + float velocityX, float velocityY) { + // If fling happens, index bar shows + if (mScroller != null) { + mScroller.show(); + } + return super.onFling(e1, e2, velocityX, velocityY); + } + }); + } + mGestureDetector.onTouchEvent(ev); + + return super.onTouchEvent(ev); + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + return true; + } + + @Override + public void setAdapter(ListAdapter adapter) { + super.setAdapter(adapter); + if (mScroller != null) + mScroller.setAdapter(adapter); + } + + @Override + protected void onSizeChanged(int w, int h, int oldw, int oldh) { + super.onSizeChanged(w, h, oldw, oldh); + if (mScroller != null) + mScroller.onSizeChanged(w, h, oldw, oldh); + } + + public static class IndexScroller { + + private float mIndexbarWidth; + private float mIndexbarMargin; + private float mPreviewPadding; + private float mDensity; + private float mScaledDensity; + private float mAlphaRate; + private int mState = STATE_HIDDEN; + private int mListViewWidth; + private int mListViewHeight; + private int mCurrentSection = -1; + private boolean mIsIndexing = false; + private ListView mListView = null; + private SectionIndexer mIndexer = null; + private String[] mSections = null; + private RectF mIndexbarRect; + + private static final int STATE_HIDDEN = 0; + private static final int STATE_SHOWING = 1; + private static final int STATE_SHOWN = 2; + private static final int STATE_HIDING = 3; + + public IndexScroller(Context context, ListView lv) { + mDensity = context.getResources().getDisplayMetrics().density; + mScaledDensity = context.getResources().getDisplayMetrics().scaledDensity; + mListView = lv; + setAdapter(mListView.getAdapter()); + + mIndexbarWidth = 20 * mDensity; + mIndexbarMargin = 10 * mDensity; + mPreviewPadding = 5 * mDensity; + } + + public void draw(Canvas canvas) { + if (mState == STATE_HIDDEN) + return; + + // mAlphaRate determines the rate of opacity + Paint indexbarPaint = new Paint(); + indexbarPaint.setColor(Color.BLACK); + indexbarPaint.setAlpha((int) (64 * mAlphaRate)); + indexbarPaint.setAntiAlias(true); + canvas.drawRoundRect(mIndexbarRect, 5 * mDensity, 5 * mDensity, indexbarPaint); + + if (mSections != null && mSections.length > 0) { + // Preview is shown when mCurrentSection is set + if (mCurrentSection >= 0) { + Paint previewPaint = new Paint(); + previewPaint.setColor(Color.BLACK); + previewPaint.setAlpha(96); + previewPaint.setAntiAlias(true); + previewPaint.setShadowLayer(3, 0, 0, Color.argb(64, 0, 0, 0)); + + Paint previewTextPaint = new Paint(); + previewTextPaint.setColor(Color.WHITE); + previewTextPaint.setAntiAlias(true); + previewTextPaint.setTextSize(50 * mScaledDensity); + + float previewTextWidth = previewTextPaint.measureText(mSections[mCurrentSection]); + float previewSize = 2 * mPreviewPadding + previewTextPaint.descent() - previewTextPaint.ascent(); + RectF previewRect = new RectF((mListViewWidth - previewSize) / 2 + , (mListViewHeight - previewSize) / 2 + , (mListViewWidth - previewSize) / 2 + previewSize + , (mListViewHeight - previewSize) / 2 + previewSize); + + canvas.drawRoundRect(previewRect, 5 * mDensity, 5 * mDensity, previewPaint); + canvas.drawText(mSections[mCurrentSection], previewRect.left + (previewSize - previewTextWidth) / 2 - 1 + , previewRect.top + mPreviewPadding - previewTextPaint.ascent() + 1, previewTextPaint); + } + + Paint indexPaint = new Paint(); + indexPaint.setColor(Color.WHITE); + indexPaint.setAlpha((int) (255 * mAlphaRate)); + indexPaint.setAntiAlias(true); + indexPaint.setTextSize(12 * mScaledDensity); + + float sectionHeight = (mIndexbarRect.height() - 2 * mIndexbarMargin) / mSections.length; + float paddingTop = (sectionHeight - (indexPaint.descent() - indexPaint.ascent())) / 2; + for (int i = 0; i < mSections.length; i++) { + float paddingLeft = (mIndexbarWidth - indexPaint.measureText(mSections[i])) / 2; + canvas.drawText(mSections[i], mIndexbarRect.left + paddingLeft + , mIndexbarRect.top + mIndexbarMargin + sectionHeight * i + paddingTop - indexPaint.ascent(), indexPaint); + } + } + } + + public boolean onTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + // If down event occurs inside index bar region, start indexing + if (mState != STATE_HIDDEN && contains(ev.getX(), ev.getY())) { + setState(STATE_SHOWN); + + // It demonstrates that the motion event started from index bar + mIsIndexing = true; + // Determine which section the point is in, and move the list to that section + mCurrentSection = getSectionByPoint(ev.getY()); + mListView.setSelection(mIndexer.getPositionForSection(mCurrentSection)); + return true; + } + break; + case MotionEvent.ACTION_MOVE: + if (mIsIndexing) { + // If this event moves inside index bar + if (contains(ev.getX(), ev.getY())) { + // Determine which section the point is in, and move the list to that section + mCurrentSection = getSectionByPoint(ev.getY()); + mListView.setSelection(mIndexer.getPositionForSection(mCurrentSection)); + } + return true; + } + break; + case MotionEvent.ACTION_UP: + if (mIsIndexing) { + mIsIndexing = false; + mCurrentSection = -1; + } + if (mState == STATE_SHOWN) + setState(STATE_HIDING); + break; + } + return false; + } + + public void onSizeChanged(int w, int h, int oldw, int oldh) { + mListViewWidth = w; + mListViewHeight = h; + mIndexbarRect = new RectF(w - mIndexbarMargin - mIndexbarWidth + , mIndexbarMargin + , w - mIndexbarMargin + , h - mIndexbarMargin); + } + + public void show() { + if (mState == STATE_HIDDEN) + setState(STATE_SHOWING); + else if (mState == STATE_HIDING) + setState(STATE_HIDING); + } + + public void hide() { + if (mState == STATE_SHOWN) + setState(STATE_HIDING); + } + + public void setAdapter(Adapter adapter) { + if (adapter instanceof SectionIndexer) { + mIndexer = (SectionIndexer) adapter; + mSections = (String[]) mIndexer.getSections(); + } + } + + private void setState(int state) { + if (state < STATE_HIDDEN || state > STATE_HIDING) + return; + + mState = state; + switch (mState) { + case STATE_HIDDEN: + // Cancel any fade effect + mHandler.removeMessages(0); + break; + case STATE_SHOWING: + // Start to fade in + mAlphaRate = 0; + fade(0); + break; + case STATE_SHOWN: + // Cancel any fade effect + mHandler.removeMessages(0); + break; + case STATE_HIDING: + // Start to fade out after three seconds + mAlphaRate = 1; + fade(3000); + break; + } + } + + private boolean contains(float x, float y) { + // Determine if the point is in index bar region, which includes the right margin of the bar + return (x >= mIndexbarRect.left && y >= mIndexbarRect.top && y <= mIndexbarRect.top + mIndexbarRect.height()); + } + + private int getSectionByPoint(float y) { + if (mSections == null || mSections.length == 0) + return 0; + if (y < mIndexbarRect.top + mIndexbarMargin) + return 0; + if (y >= mIndexbarRect.top + mIndexbarRect.height() - mIndexbarMargin) + return mSections.length - 1; + return (int) ((y - mIndexbarRect.top - mIndexbarMargin) / ((mIndexbarRect.height() - 2 * mIndexbarMargin) / mSections.length)); + } + + private void fade(long delay) { + mHandler.removeMessages(0); + mHandler.sendEmptyMessageAtTime(0, SystemClock.uptimeMillis() + delay); + } + + private Handler mHandler = new Handler() { + + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + + switch (mState) { + case STATE_SHOWING: + // Fade in effect + mAlphaRate += (1 - mAlphaRate) * 0.2; + if (mAlphaRate > 0.9) { + mAlphaRate = 1; + setState(STATE_SHOWN); + } + + mListView.invalidate(); + fade(10); + break; + case STATE_SHOWN: + // If no action, hide automatically + setState(STATE_HIDING); + break; + case STATE_HIDING: + // Fade out effect + mAlphaRate -= mAlphaRate * 0.2; + if (mAlphaRate < 0.1) { + mAlphaRate = 0; + setState(STATE_HIDDEN); + } + + mListView.invalidate(); + fade(10); + break; + } + } + + }; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IsPad.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IsPad.java new file mode 100644 index 0000000..73da9b1 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/IsPad.java @@ -0,0 +1,16 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.content.res.Configuration; + +/** + * Created by weikou2015 on 2016/12/15. + */ + +public class IsPad { + public static boolean isPad(Context context) { + return (context.getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) + >= Configuration.SCREENLAYOUT_SIZE_LARGE; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyGridView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyGridView.java new file mode 100644 index 0000000..1a29449 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyGridView.java @@ -0,0 +1,27 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.GridView; + +public class MyGridView extends GridView { + + public MyGridView(Context context) { + super(context); + } + + public MyGridView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public MyGridView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, + MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyListView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyListView.java new file mode 100644 index 0000000..f54c19b --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyListView.java @@ -0,0 +1,27 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.widget.ListView; + +public class MyListView extends ListView { + + public MyListView(Context context) { + super(context); + } + + public MyListView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public MyListView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, + MeasureSpec.AT_MOST); + super.onMeasure(widthMeasureSpec, expandSpec); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyViewPager.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyViewPager.java new file mode 100644 index 0000000..6131bde --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/MyViewPager.java @@ -0,0 +1,49 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import androidx.viewpager.widget.ViewPager; +import android.util.AttributeSet; +import android.view.View; + +public class MyViewPager extends ViewPager { + + public MyViewPager(Context context) { + super(context); + } + + public MyViewPager(Context context, AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int widthSpecMode = MeasureSpec.getMode(widthMeasureSpec); + int heightSpecMode = MeasureSpec.getMode(heightMeasureSpec); + if (widthSpecMode != MeasureSpec.EXACTLY || heightSpecMode != MeasureSpec.EXACTLY) { + measureChildren(widthMeasureSpec, heightMeasureSpec); + if (widthSpecMode != MeasureSpec.EXACTLY) { + int width = 0; + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + int w = child.getMeasuredWidth(); + if (w > width) { + width = w; + } + } + widthMeasureSpec = MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY); + } + if (heightSpecMode != MeasureSpec.EXACTLY) { + int height = 0; + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + int h = child.getMeasuredHeight(); + if (h > height) { + height = h; + } + } + heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); + } + } + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ProgressWebView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ProgressWebView.java new file mode 100644 index 0000000..4ac6078 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ProgressWebView.java @@ -0,0 +1,46 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.util.AttributeSet; +import android.webkit.WebView; +import android.widget.ProgressBar; + +/** + * Created by weikou2015 on 2016/9/12. + */ +public class ProgressWebView extends WebView { + private ProgressBar progressbar; + + public ProgressWebView(Context context, AttributeSet attrs) { + super(context, attrs); + progressbar = new ProgressBar(context, null, android.R.attr.progressBarStyleHorizontal); + progressbar.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, 3, 0, 0)); + addView(progressbar); + // setWebViewClient(new WebViewClient(){}); + setWebChromeClient(new WebChromeClient()); + } + + public class WebChromeClient extends android.webkit.WebChromeClient { + @Override + public void onProgressChanged(WebView view, int newProgress) { + if (newProgress == 100) { + progressbar.setVisibility(GONE); + } else { + if (progressbar.getVisibility() == GONE) + progressbar.setVisibility(VISIBLE); + progressbar.setProgress(newProgress); + } + super.onProgressChanged(view, newProgress); + } + + } + + @Override + protected void onScrollChanged(int l, int t, int oldl, int oldt) { + LayoutParams lp = (LayoutParams) progressbar.getLayoutParams(); + lp.x = l; + lp.y = t; + progressbar.setLayoutParams(lp); + super.onScrollChanged(l, t, oldl, oldt); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RatioLayout.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RatioLayout.java new file mode 100644 index 0000000..a1f8cb9 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RatioLayout.java @@ -0,0 +1,61 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.content.res.TypedArray; +import android.util.AttributeSet; +import android.widget.RelativeLayout; + +import com.lcjian.lcjianlibrary.R; + +public class RatioLayout extends RelativeLayout { + + private float mRatio; + + public RatioLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + + TypedArray a = getContext().obtainStyledAttributes(attrs, + R.styleable.RatioLayout, defStyle, 0); + mRatio = a.getFloat(R.styleable.RatioLayout_ratio, 1); + a.recycle(); + } + + public RatioLayout(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public RatioLayout(Context context) { + this(context, null); + } + + @SuppressWarnings("unused") + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + // For simple implementation, or internal size is always 0. + // We depend on the container to specify the layout size of + // our view. We can't really know what it is since we will be + // adding and removing different arbitrary views and do not + // want the layout to change as this happens. + setMeasuredDimension(getDefaultSize(0, widthMeasureSpec), + getDefaultSize(0, heightMeasureSpec)); + + // Children are just made to fill our space. + int childWidthSize = getMeasuredWidth(); + int childHeightSize = getMeasuredHeight(); + // if(childWidthSize > childHeightSize) { + // childWidthSize = childHeightSize; + // }else { + // childHeightSize = childWidthSize; + // } + widthMeasureSpec = MeasureSpec.makeMeasureSpec(childWidthSize, + MeasureSpec.EXACTLY); + heightMeasureSpec = MeasureSpec.makeMeasureSpec( + (int) (childWidthSize * mRatio), MeasureSpec.EXACTLY); + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + + public void setRatio(float ratio) { + mRatio = ratio; + requestLayout(); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RefreshView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RefreshView.java new file mode 100644 index 0000000..cedd950 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/RefreshView.java @@ -0,0 +1,308 @@ +package com.demo.lib.common.widget; + +import android.content.res.Resources; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.ViewParent; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.AlphaAnimation; +import android.view.animation.Animation; +import android.view.animation.DecelerateInterpolator; +import android.widget.FrameLayout; +import android.widget.ProgressBar; + +/** + * A simple text label view that can be applied as a "refresh" to any given {@link android.view.View}. + * This class is intended to be instantiated at runtime rather than included in XML layouts. + * + * @author LCJIAN + */ +public class RefreshView { + + public static final int POSITION_TOP_LEFT = 1; + public static final int POSITION_TOP_RIGHT = 2; + public static final int POSITION_BOTTOM_LEFT = 3; + public static final int POSITION_BOTTOM_RIGHT = 4; + public static final int POSITION_CENTER = 5; + + private static final int DEFAULT_MARGIN_DIP = 5; + private static final int DEFAULT_POSITION = POSITION_CENTER; + + private static Animation fadeIn; + private static Animation fadeOut; + + private View refresh; + private View target; + + private int refreshPosition; + private int refreshMarginH; + private int refreshMarginV; + + public RefreshView(View target) { + init(new ProgressBar(target.getContext()), target); + } + + public RefreshView(View refresh, View target) { + init(refresh, target); + } + + private void init(View refresh, View target) { + + this.refresh = refresh; + this.target = target; + + // apply defaults + refreshPosition = DEFAULT_POSITION; + refreshMarginH = dipToPixels(DEFAULT_MARGIN_DIP); + refreshMarginV = refreshMarginH; + + fadeIn = new AlphaAnimation(0, 1); + fadeIn.setInterpolator(new DecelerateInterpolator()); + fadeIn.setDuration(200); + + fadeOut = new AlphaAnimation(1, 0); + fadeOut.setInterpolator(new AccelerateInterpolator()); + fadeOut.setDuration(200); + + if (this.target != null) { + applyTo(this.target); + } else { + show(); + } + } + + private void applyTo(View target) { + LayoutParams lp = target.getLayoutParams(); + ViewParent parent = target.getParent(); + FrameLayout container = new FrameLayout(target.getContext()); + + ViewGroup group = (ViewGroup) parent; + int index = group.indexOfChild(target); + + group.removeView(target); + group.addView(container, index, lp); + + container.addView(target); + + refresh.setVisibility(View.GONE); + container.addView(refresh); + + group.invalidate(); + } + + /** + * Make the refresh visible in the UI. + * + */ + public void show() { + show(false, null); + } + + /** + * Make the refresh visible in the UI. + * + * @param animate flag to apply the default fade-in animation. + */ + public void show(boolean animate) { + show(animate, fadeIn); + } + + /** + * Make the refresh visible in the UI. + * + * @param anim Animation to apply to the view when made visible. + */ + public void show(Animation anim) { + show(true, anim); + } + + /** + * Make the refresh non-visible in the UI. + * + */ + public void hide() { + hide(false, null); + } + + /** + * Make the refresh non-visible in the UI. + * + * @param animate flag to apply the default fade-out animation. + */ + public void hide(boolean animate) { + hide(animate, fadeOut); + } + + /** + * Make the refresh non-visible in the UI. + * + * @param anim Animation to apply to the view when made non-visible. + */ + public void hide(Animation anim) { + hide(true, anim); + } + + /** + * Toggle the refresh visibility in the UI. + * + */ + public void toggle() { + toggle(false, null, null); + } + + /** + * Toggle the refresh visibility in the UI. + * + * @param animate flag to apply the default fade-in/out animation. + */ + public void toggle(boolean animate) { + toggle(animate, fadeIn, fadeOut); + } + + /** + * Toggle the refresh visibility in the UI. + * + * @param animIn Animation to apply to the view when made visible. + * @param animOut Animation to apply to the view when made non-visible. + */ + public void toggle(Animation animIn, Animation animOut) { + toggle(true, animIn, animOut); + } + + private void show(boolean animate, Animation anim) { + applyLayoutParams(); + if (animate) { + refresh.startAnimation(anim); + } + refresh.setVisibility(View.VISIBLE); + } + + private void hide(boolean animate, Animation anim) { + refresh.setVisibility(View.GONE); + if (animate) { + refresh.startAnimation(anim); + } + } + + private void toggle(boolean animate, Animation animIn, Animation animOut) { + if (refresh.isShown()) { + hide(animate && (animOut != null), animOut); + } else { + show(animate && (animIn != null), animIn); + } + } + + private void applyLayoutParams() { + + FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + + switch (refreshPosition) { + case POSITION_TOP_LEFT: + lp.gravity = Gravity.LEFT | Gravity.TOP; + lp.setMargins(refreshMarginH, refreshMarginV, 0, 0); + break; + case POSITION_TOP_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.TOP; + lp.setMargins(0, refreshMarginV, refreshMarginH, 0); + break; + case POSITION_BOTTOM_LEFT: + lp.gravity = Gravity.LEFT | Gravity.BOTTOM; + lp.setMargins(refreshMarginH, 0, 0, refreshMarginV); + break; + case POSITION_BOTTOM_RIGHT: + lp.gravity = Gravity.RIGHT | Gravity.BOTTOM; + lp.setMargins(0, 0, refreshMarginH, refreshMarginV); + break; + case POSITION_CENTER: + lp.gravity = Gravity.CENTER; + lp.setMargins(0, 0, 0, 0); + break; + default: + break; + } + + refresh.setLayoutParams(lp); + } + + /** + * Returns the target View this refresh has been attached to. + * + */ + public View getTarget() { + return target; + } + + /** + * Is this refresh currently visible in the UI? + * + */ + public boolean isShown() { + return refresh.isShown(); + } + + /** + * Returns the positioning of this refresh. + * + * one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. + * + */ + public int getBadgePosition() { + return refreshPosition; + } + + /** + * Set the positioning of this refresh. + * + * @param layoutPosition one of POSITION_TOP_LEFT, POSITION_TOP_RIGHT, POSITION_BOTTOM_LEFT, POSITION_BOTTOM_RIGHT, POSTION_CENTER. + * + */ + public void setBadgePosition(int layoutPosition) { + this.refreshPosition = layoutPosition; + } + + /** + * Returns the horizontal margin from the target View that is applied to this refresh. + * + */ + public int getHorizontalBadgeMargin() { + return refreshMarginH; + } + + /** + * Returns the vertical margin from the target View that is applied to this refresh. + * + */ + public int getVerticalBadgeMargin() { + return refreshMarginV; + } + + /** + * Set the horizontal/vertical margin from the target View that is applied to this refresh. + * + * @param refreshMargin the margin in pixels. + */ + public void setBadgeMargin(int refreshMargin) { + this.refreshMarginH = refreshMargin; + this.refreshMarginV = refreshMargin; + } + + /** + * Set the horizontal/vertical margin from the target View that is applied to this refresh. + * + * @param horizontal margin in pixels. + * @param vertical margin in pixels. + */ + public void setBadgeMargin(int horizontal, int vertical) { + this.refreshMarginH = horizontal; + this.refreshMarginV = vertical; + } + + private int dipToPixels(int dip) { + Resources r = target.getResources(); + float px = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dip, r.getDisplayMetrics()); + return (int) px; + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ResizableImageView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ResizableImageView.java new file mode 100644 index 0000000..6af8a5b --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ResizableImageView.java @@ -0,0 +1,42 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import androidx.annotation.Nullable; +import android.util.AttributeSet; +import android.widget.ImageView; + +/** + * Created by weikou2015 on 2018/4/9. + */ + +public class ResizableImageView extends ImageView { + + public ResizableImageView(Context context) { + super(context); + } + + public ResizableImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public ResizableImageView(Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + Drawable d = getDrawable(); + + if (d != null) { + // ceil not round - avoid thin vertical gaps along the left/right edges + int width = MeasureSpec.getSize(widthMeasureSpec); + //楂樺害鏍规嵁浣垮緱鍥剧墖鐨勫搴﹀厖婊″睆骞曡绠楄�屽緱 + int height = (int) Math.ceil((float) width * (float) d.getIntrinsicHeight() / (float) d.getIntrinsicWidth()); + setMeasuredDimension(width, height); + } else { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ShelfView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ShelfView.java new file mode 100644 index 0000000..482d409 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/ShelfView.java @@ -0,0 +1,111 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.Canvas; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.StateListDrawable; +import android.util.AttributeSet; +import android.view.ViewConfiguration; +import android.widget.GridView; + +import com.lcjian.lcjianlibrary.R; +import com.demo.lib.common.drawable.SpotlightDrawable; +import com.demo.lib.common.drawable.TransitionDrawable; + +public class ShelfView extends GridView { + private Bitmap mShelfBackground; + private int mShelfWidth; + private int mShelfHeight; + + public ShelfView(Context context) { + super(context); + init(context); + } + + public ShelfView(Context context, AttributeSet attrs) { + super(context, attrs); + load(context, attrs, 0); + init(context); + } + + public ShelfView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + load(context, attrs, defStyle); + init(context); + } + + private void load(Context context, AttributeSet attrs, int defStyle) { + TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ShelvesView, defStyle, 0); + + final Resources resources = getResources(); + final int background = a.getResourceId(R.styleable.ShelvesView_shelfBackground, 0); + final Bitmap shelfBackground = BitmapFactory.decodeResource(resources, background); + if (shelfBackground != null) { + mShelfWidth = shelfBackground.getWidth(); + mShelfHeight = shelfBackground.getHeight(); + mShelfBackground = shelfBackground; + } + a.recycle(); + } + + private void init(Context context) { + StateListDrawable drawable = new StateListDrawable(); + + SpotlightDrawable start = new SpotlightDrawable(context, this); + start.disableOffset(); + SpotlightDrawable end = new SpotlightDrawable(context, this, R.drawable.spotlight_blue); + end.disableOffset(); + + TransitionDrawable transition = new TransitionDrawable(start, end); + drawable.addState(new int[] { android.R.attr.state_pressed }, transition); + + final SpotlightDrawable normal = new SpotlightDrawable(context, this); + drawable.addState(new int[] { }, normal); + + normal.setParent(drawable); + transition.setParent(drawable); + + setSelector(drawable); + setDrawSelectorOnTop(false); + } + + @Override + protected void dispatchDraw(Canvas canvas) { + final int count = getChildCount(); + final int top = count > 0 ? getChildAt(0).getTop() : 0; + final int shelfWidth = mShelfWidth; + final int shelfHeight = mShelfHeight; + final int width = getWidth(); + final int height = getHeight(); + final Bitmap background = mShelfBackground; + + for (int x = 0; x < width; x += shelfWidth) { + for (int y = top; y < height; y += shelfHeight) { + canvas.drawBitmap(background, x, y, null); + } + } + + super.dispatchDraw(canvas); + } + + + + @Override + public void setPressed(boolean pressed) { + super.setPressed(pressed); + + final Drawable current = getSelector().getCurrent(); + if (current instanceof TransitionDrawable) { + if (pressed) { + ((TransitionDrawable) current).startTransition( + ViewConfiguration.getLongPressTimeout()); + } else { + ((TransitionDrawable) current).resetTransition(); + } + } + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/SystemBarTintManager.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/SystemBarTintManager.java new file mode 100644 index 0000000..477d989 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/SystemBarTintManager.java @@ -0,0 +1,592 @@ +package com.demo.lib.common.widget; + +import java.lang.reflect.Method; + +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.Activity; +import android.content.Context; +import android.content.res.Configuration; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.drawable.Drawable; +import android.os.Build; +import android.util.DisplayMetrics; +import android.util.TypedValue; +import android.view.Gravity; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.FrameLayout.LayoutParams; + +/* + * Copyright (C) 2013 readyState Software Ltd + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * Class to manage status and navigation bar tint effects when using KitKat + * translucent system UI modes. + */ +public class SystemBarTintManager { + + static { + // Android allows a system property to override the presence of the + // navigation bar. + // Used by the emulator. + // See + // https://github.com/android/platform_frameworks_base/blob/master/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java#L1076 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + try { + Class c = Class.forName("android.os.SystemProperties"); + Method m = c.getDeclaredMethod("get", String.class); + m.setAccessible(true); + sNavBarOverride = (String) m.invoke(null, "qemu.hw.mainkeys"); + } catch (Throwable e) { + sNavBarOverride = null; + } + } + } + + /** + * The default system bar tint color value. + */ + public static final int DEFAULT_TINT_COLOR = 0x99000000; + + private static String sNavBarOverride; + + private final SystemBarConfig mConfig; + private boolean mStatusBarAvailable; + private boolean mNavBarAvailable; + private boolean mStatusBarTintEnabled; + private boolean mNavBarTintEnabled; + private View mStatusBarTintView; + private View mNavBarTintView; + + /** + * Constructor. Call this in the host activity onCreate method after its + * content view has been set. You should always create new instances when + * the host activity is recreated. + * + * @param activity The host activity. + */ + @TargetApi(19) + @SuppressWarnings("ResourceType") + public SystemBarTintManager(Activity activity) { + Window win = activity.getWindow(); + ViewGroup decorViewGroup = (ViewGroup) win.getDecorView(); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { + // check theme attrs + int[] attrs = {android.R.attr.windowTranslucentStatus, + android.R.attr.windowTranslucentNavigation}; + TypedArray a = activity.obtainStyledAttributes(attrs); + try { + mStatusBarAvailable = a.getBoolean(0, false); + mNavBarAvailable = a.getBoolean(1, false); + } finally { + a.recycle(); + } + + // check window flags + WindowManager.LayoutParams winParams = win.getAttributes(); + int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; + if ((winParams.flags & bits) != 0) { + mStatusBarAvailable = true; + } + bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; + if ((winParams.flags & bits) != 0) { + mNavBarAvailable = true; + } + } + + mConfig = new SystemBarConfig(activity, mStatusBarAvailable, + mNavBarAvailable); + // device might not have virtual navigation keys + if (!mConfig.hasNavigtionBar()) { + mNavBarAvailable = false; + } + + if (mStatusBarAvailable) { + setupStatusBarView(activity, decorViewGroup); + } + if (mNavBarAvailable) { + setupNavBarView(activity, decorViewGroup); + } + + } + + /** + * Enable tinting of the system status bar. + * <p/> + * If the platform is running Jelly Bean or earlier, or translucent system + * UI modes have not been enabled in either the theme or via window flags, + * then this method does nothing. + * + * @param enabled True to enable tinting, false to disable it (default). + */ + public void setStatusBarTintEnabled(boolean enabled) { + mStatusBarTintEnabled = enabled; + if (mStatusBarAvailable) { + mStatusBarTintView + .setVisibility(enabled ? View.VISIBLE : View.GONE); + } + } + + /** + * Enable tinting of the system navigation bar. + * <p/> + * If the platform does not have soft navigation keys, is running Jelly Bean + * or earlier, or translucent system UI modes have not been enabled in + * either the theme or via window flags, then this method does nothing. + * + * @param enabled True to enable tinting, false to disable it (default). + */ + public void setNavigationBarTintEnabled(boolean enabled) { + mNavBarTintEnabled = enabled; + if (mNavBarAvailable) { + mNavBarTintView.setVisibility(enabled ? View.VISIBLE : View.GONE); + } + } + + /** + * Apply the specified color tint to all system UI bars. + * + * @param color The color of the background tint. + */ + public void setTintColor(int color) { + setStatusBarTintColor(color); + setNavigationBarTintColor(color); + } + + /** + * Apply the specified drawable or color resource to all system UI bars. + * + * @param res The identifier of the resource. + */ + public void setTintResource(int res) { + setStatusBarTintResource(res); + setNavigationBarTintResource(res); + } + + /** + * Apply the specified drawable to all system UI bars. + * + * @param drawable The drawable to use as the background, or null to remove it. + */ + public void setTintDrawable(Drawable drawable) { + setStatusBarTintDrawable(drawable); + setNavigationBarTintDrawable(drawable); + } + + /** + * Apply the specified alpha to all system UI bars. + * + * @param alpha The alpha to use + */ + public void setTintAlpha(float alpha) { + setStatusBarAlpha(alpha); + setNavigationBarAlpha(alpha); + } + + /** + * Apply the specified color tint to the system status bar. + * + * @param color The color of the background tint. + */ + public void setStatusBarTintColor(int color) { + if (mStatusBarAvailable) { + mStatusBarTintView.setBackgroundColor(color); + } + } + + /** + * Apply the specified drawable or color resource to the system status bar. + * + * @param res The identifier of the resource. + */ + public void setStatusBarTintResource(int res) { + if (mStatusBarAvailable) { + mStatusBarTintView.setBackgroundResource(res); + } + } + + /** + * Apply the specified drawable to the system status bar. + * + * @param drawable The drawable to use as the background, or null to remove it. + */ + @SuppressWarnings("deprecation") + public void setStatusBarTintDrawable(Drawable drawable) { + if (mStatusBarAvailable) { + mStatusBarTintView.setBackgroundDrawable(drawable); + } + } + + /** + * Apply the specified alpha to the system status bar. + * + * @param alpha The alpha to use + */ + @TargetApi(11) + public void setStatusBarAlpha(float alpha) { + if (mStatusBarAvailable + && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + mStatusBarTintView.setAlpha(alpha); + } + } + + /** + * Apply the specified color tint to the system navigation bar. + * + * @param color The color of the background tint. + */ + public void setNavigationBarTintColor(int color) { + if (mNavBarAvailable) { + mNavBarTintView.setBackgroundColor(color); + } + } + + /** + * Apply the specified drawable or color resource to the system navigation + * bar. + * + * @param res The identifier of the resource. + */ + public void setNavigationBarTintResource(int res) { + if (mNavBarAvailable) { + mNavBarTintView.setBackgroundResource(res); + } + } + + /** + * Apply the specified drawable to the system navigation bar. + * + * @param drawable The drawable to use as the background, or null to remove it. + */ + @SuppressWarnings("deprecation") + public void setNavigationBarTintDrawable(Drawable drawable) { + if (mNavBarAvailable) { + mNavBarTintView.setBackgroundDrawable(drawable); + } + } + + /** + * Apply the specified alpha to the system navigation bar. + * + * @param alpha The alpha to use + */ + @TargetApi(11) + public void setNavigationBarAlpha(float alpha) { + if (mNavBarAvailable + && Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + mNavBarTintView.setAlpha(alpha); + } + } + + /** + * Get the system bar configuration. + * + * @return The system bar configuration for the current device + * configuration. + */ + public SystemBarConfig getConfig() { + return mConfig; + } + + /** + * Is tinting enabled for the system status bar? + * + * @return True if enabled, False otherwise. + */ + public boolean isStatusBarTintEnabled() { + return mStatusBarTintEnabled; + } + + /** + * Is tinting enabled for the system navigation bar? + * + * @return True if enabled, False otherwise. + */ + public boolean isNavBarTintEnabled() { + return mNavBarTintEnabled; + } + + private void setupStatusBarView(Context context, ViewGroup decorViewGroup) { + mStatusBarTintView = new View(context); + LayoutParams params = new LayoutParams( + android.view.ViewGroup.LayoutParams.MATCH_PARENT, + mConfig.getStatusBarHeight()); + params.gravity = Gravity.TOP; + if (mNavBarAvailable && !mConfig.isNavigationAtBottom()) { + params.rightMargin = mConfig.getNavigationBarWidth(); + } + mStatusBarTintView.setLayoutParams(params); + mStatusBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR); + mStatusBarTintView.setVisibility(View.GONE); + decorViewGroup.addView(mStatusBarTintView); + } + + private void setupNavBarView(Context context, ViewGroup decorViewGroup) { + mNavBarTintView = new View(context); + LayoutParams params; + if (mConfig.isNavigationAtBottom()) { + params = new LayoutParams( + android.view.ViewGroup.LayoutParams.MATCH_PARENT, + mConfig.getNavigationBarHeight()); + params.gravity = Gravity.BOTTOM; + } else { + params = new LayoutParams(mConfig.getNavigationBarWidth(), + android.view.ViewGroup.LayoutParams.MATCH_PARENT); + params.gravity = Gravity.RIGHT; + } + mNavBarTintView.setLayoutParams(params); + mNavBarTintView.setBackgroundColor(DEFAULT_TINT_COLOR); + mNavBarTintView.setVisibility(View.GONE); + decorViewGroup.addView(mNavBarTintView); + } + + /** + * Class which describes system bar sizing and other characteristics for the + * current device configuration. + */ + public static class SystemBarConfig { + + private static final String STATUS_BAR_HEIGHT_RES_NAME = "status_bar_height"; + private static final String NAV_BAR_HEIGHT_RES_NAME = "navigation_bar_height"; + private static final String NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME = "navigation_bar_height_landscape"; + private static final String NAV_BAR_WIDTH_RES_NAME = "navigation_bar_width"; + private static final String SHOW_NAV_BAR_RES_NAME = "config_showNavigationBar"; + + private final boolean mTranslucentStatusBar; + private final boolean mTranslucentNavBar; + private final int mStatusBarHeight; + private final int mActionBarHeight; + private final boolean mHasNavigationBar; + private final int mNavigationBarHeight; + private final int mNavigationBarWidth; + private final boolean mInPortrait; + private final float mSmallestWidthDp; + + private SystemBarConfig(Activity activity, + boolean translucentStatusBar, boolean traslucentNavBar) { + Resources res = activity.getResources(); + mInPortrait = (res.getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT); + mSmallestWidthDp = getSmallestWidthDp(activity); + mStatusBarHeight = getInternalDimensionSize(res, + STATUS_BAR_HEIGHT_RES_NAME); + mActionBarHeight = getActionBarHeight(activity); + mNavigationBarHeight = getNavigationBarHeight(activity); + mNavigationBarWidth = getNavigationBarWidth(activity); + mHasNavigationBar = (mNavigationBarHeight > 0); + mTranslucentStatusBar = translucentStatusBar; + mTranslucentNavBar = traslucentNavBar; + } + + @TargetApi(14) + private int getActionBarHeight(Context context) { + int result = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + TypedValue tv = new TypedValue(); + context.getTheme().resolveAttribute( + android.R.attr.actionBarSize, tv, true); + result = TypedValue.complexToDimensionPixelSize(tv.data, + context.getResources().getDisplayMetrics()); + } + return result; + } + + @TargetApi(14) + private int getNavigationBarHeight(Context context) { + Resources res = context.getResources(); + int result = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + if (hasNavBar(context)) { + String key; + if (mInPortrait) { + key = NAV_BAR_HEIGHT_RES_NAME; + } else { + key = NAV_BAR_HEIGHT_LANDSCAPE_RES_NAME; + } + return getInternalDimensionSize(res, key); + } + } + return result; + } + + @TargetApi(14) + private int getNavigationBarWidth(Context context) { + Resources res = context.getResources(); + int result = 0; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + if (hasNavBar(context)) { + return getInternalDimensionSize(res, NAV_BAR_WIDTH_RES_NAME); + } + } + return result; + } + + @TargetApi(14) + private boolean hasNavBar(Context context) { + Resources res = context.getResources(); + int resourceId = res.getIdentifier(SHOW_NAV_BAR_RES_NAME, "bool", + "android"); + if (resourceId != 0) { + boolean hasNav = res.getBoolean(resourceId); + // check override flag (see static block) + if ("1".equals(sNavBarOverride)) { + hasNav = false; + } else if ("0".equals(sNavBarOverride)) { + hasNav = true; + } + return hasNav; + } else { // fallback + return !ViewConfiguration.get(context).hasPermanentMenuKey(); + } + } + + private int getInternalDimensionSize(Resources res, String key) { + int result = 0; + int resourceId = res.getIdentifier(key, "dimen", "android"); + if (resourceId > 0) { + result = res.getDimensionPixelSize(resourceId); + } + return result; + } + + @SuppressLint("NewApi") + private float getSmallestWidthDp(Activity activity) { + DisplayMetrics metrics = new DisplayMetrics(); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { + activity.getWindowManager().getDefaultDisplay() + .getRealMetrics(metrics); + } else { + // TODO this is not correct, but we don't really care pre-kitkat + activity.getWindowManager().getDefaultDisplay() + .getMetrics(metrics); + } + float widthDp = metrics.widthPixels / metrics.density; + float heightDp = metrics.heightPixels / metrics.density; + return Math.min(widthDp, heightDp); + } + + /** + * Should a navigation bar appear at the bottom of the screen in the + * current device configuration? A navigation bar may appear on the + * right side of the screen in certain configurations. + * + * @return True if navigation should appear at the bottom of the screen, + * False otherwise. + */ + public boolean isNavigationAtBottom() { + return (mSmallestWidthDp >= 600 || mInPortrait); + } + + /** + * Get the height of the system status bar. + * + * @return The height of the status bar (in pixels). + */ + public int getStatusBarHeight() { + return mStatusBarHeight; + } + + /** + * Get the height of the action bar. + * + * @return The height of the action bar (in pixels). + */ + public int getActionBarHeight() { + return mActionBarHeight; + } + + /** + * Does this device have a system navigation bar? + * + * @return True if this device uses soft key navigation, False + * otherwise. + */ + public boolean hasNavigtionBar() { + return mHasNavigationBar; + } + + /** + * Get the height of the system navigation bar. + * + * @return The height of the navigation bar (in pixels). If the device + * does not have soft navigation keys, this will always return + * 0. + */ + public int getNavigationBarHeight() { + return mNavigationBarHeight; + } + + /** + * Get the width of the system navigation bar when it is placed + * vertically on the screen. + * + * @return The width of the navigation bar (in pixels). If the device + * does not have soft navigation keys, this will always return + * 0. + */ + public int getNavigationBarWidth() { + return mNavigationBarWidth; + } + + /** + * Get the layout inset for any system UI that appears at the top of the + * screen. + * + * @param withActionBar True to include the height of the action bar, False + * otherwise. + * @return The layout inset (in pixels). + */ + public int getPixelInsetTop(boolean withActionBar) { + return (mTranslucentStatusBar ? mStatusBarHeight : 0) + + (withActionBar ? mActionBarHeight : 0); + } + + /** + * Get the layout inset for any system UI that appears at the bottom of + * the screen. + * + * @return The layout inset (in pixels). + */ + public int getPixelInsetBottom() { + if (mTranslucentNavBar && isNavigationAtBottom()) { + return mNavigationBarHeight; + } else { + return 0; + } + } + + /** + * Get the layout inset for any system UI that appears at the right of + * the screen. + * + * @return The layout inset (in pixels). + */ + public int getPixelInsetRight() { + if (mTranslucentNavBar && !isNavigationAtBottom()) { + return mNavigationBarWidth; + } else { + return 0; + } + } + + } + +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/TagCloudLayout.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/TagCloudLayout.java new file mode 100644 index 0000000..acfdf0f --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/TagCloudLayout.java @@ -0,0 +1,334 @@ +package com.demo.lib.common.widget; + +import java.util.Arrays; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Build; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.widget.FrameLayout; +import android.widget.TextView; + +public class TagCloudLayout extends ViewGroup { + + private int radius; + + private double mAngleX; + private double mAngleY; + private double mAngleZ; + + private double sin_mAngleX; + private double cos_mAngleX; + private double sin_mAngleY; + private double cos_mAngleY; + private double sin_mAngleZ; + private double cos_mAngleZ; + + private TagView[] mcList; + + private int mTouchSlop = ViewConfiguration.get(getContext()).getScaledTouchSlop(); + + private OnScrollListener mOnScrollListener; + + private int mScrollState; + + public OnScrollListener getOnScrollListener() { + return mOnScrollListener; + } + + public void setOnScrollListener(OnScrollListener onScrollListener) { + this.mOnScrollListener = onScrollListener; + } + + public interface OnScrollListener { + + int SCROLL_STATE_IDLE = 0; + + int SCROLL_STATE_TOUCH_SCROLL = 1; + + int SCROLL_STATE_FLING = 2; + + void onScrollStateChanged(int scrollState); + } + + public TagCloudLayout(Context context) { + super(context); + } + + public TagCloudLayout(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public TagCloudLayout(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + @SuppressLint("NewApi") + @Override + protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + int witdh = Math.min(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec), + getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec)); + int height = witdh; + radius = (witdh - 40) / 2; + if (mcList == null) { + mcList = new TagView[getChildCount()]; + double phi = 0; + double theta = 0; + + for (int i = 0; i < getChildCount(); i++) { + mcList[i] = (TagView) getChildAt(i); + phi = Math.acos((double) -1 + (double) (2 * (i + 1) - 1) / (double) getChildCount()); + theta = Math.sqrt(getChildCount() * Math.PI) * phi; + // 鍧愭爣鍙樻崲 + mcList[i].cx = radius * Math.cos(theta) * Math.sin(phi); + mcList[i].cy = radius * Math.sin(theta) * Math.sin(phi); + mcList[i].cz = radius * Math.cos(phi); + + // add perspective + int diameter = 2 * radius; + double per = diameter / (diameter + mcList[i].cz); + + mcList[i].scale = per; + mcList[i].alpha = per; + mcList[i].alpha = (mcList[i].alpha - 0.6) * (10d / 6d); + ((TextView) mcList[i].mTarget).setTextSize((float) Math.ceil(12 * mcList[i].scale / 2) + 8); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + mcList[i].mTarget.setAlpha((float) mcList[i].alpha); + } + } + } + measureChildren(widthMeasureSpec, heightMeasureSpec); + setMeasuredDimension(witdh, height); + } + + @Override + protected void onLayout(boolean changed, int l, int t, int r, int b) { + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + child.layout((int) mcList[i].cx + getMeasuredWidth() / 2 - child.getMeasuredWidth() / 2, + (int) mcList[i].cy + getMeasuredHeight() / 2 - child.getMeasuredHeight() / 2, + (int) mcList[i].cx + getMeasuredWidth() / 2 + child.getMeasuredWidth() / 2, + (int) mcList[i].cy + getMeasuredHeight() / 2 + child.getMeasuredHeight() / 2); + } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + switch (ev.getAction()) { + case MotionEvent.ACTION_DOWN: + preX = -(ev.getX() - radius); + preY = ev.getY() - radius; + downX = ev.getX(); + downY = ev.getY(); + break; + case MotionEvent.ACTION_MOVE: + if (Math.sqrt((ev.getX() - downX) * (ev.getX() - downX) + (ev.getY() - downY) * (ev.getY() - downY)) + > mTouchSlop) { + return true; + } + default: + break; + } + return super.onInterceptTouchEvent(ev); + } + + private double preX; + private double preY; + private double preZ; + private double downX; + private double downY; + private boolean allowRotating; + @Override + public boolean onTouchEvent(MotionEvent event) { + switch (event.getAction()) { + case MotionEvent.ACTION_DOWN: + preX = -(event.getX() - radius); + preY = event.getY() - radius; + allowRotating = false; +// preZ = calculateZ(preX, preY); + break; + case MotionEvent.ACTION_CANCEL: + case MotionEvent.ACTION_UP: + allowRotating = true; + post((new FlingRunnable(mAngleX, mAngleY, mAngleZ))); + break; + case MotionEvent.ACTION_MOVE: + double x = -(event.getX() - radius); + double y = event.getY() - radius; +// double z = calculateZ(x, y); + + double dx = x - preX; + double dy = y - preY; +// double dz = z - preZ; + + mAngleX = dy / radius * 2; + mAngleY = dx / radius * 2; + mAngleZ = 0; + + preX = x; + preY = y; +// preZ = z; + + rotate(mAngleX, mAngleY, mAngleZ); + if (mOnScrollListener != null) { + if (mScrollState != OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { + mScrollState = OnScrollListener.SCROLL_STATE_TOUCH_SCROLL; + mOnScrollListener.onScrollStateChanged(OnScrollListener.SCROLL_STATE_TOUCH_SCROLL); + } + } + break; + default: + break; + } + return true; + } + + @SuppressLint("NewApi") + private void rotate(double angleX, double angleY, double angleZ) { + sineCosine(angleX, angleY, angleZ); + for (int i = 0; i < mcList.length; i++) { + TagView child = (TagView) getChildAt(i); + double rx1 = mcList[i].cx; + double ry1 = mcList[i].cy * cos_mAngleX + mcList[i].cz * (-sin_mAngleX); + double rz1 = mcList[i].cy * sin_mAngleX + mcList[i].cz * cos_mAngleX; + + double rx2 = rx1 * cos_mAngleY + rz1 * sin_mAngleY; + double ry2 = ry1; + double rz2 = rx1 * (-sin_mAngleY) + rz1 * cos_mAngleY; + + double rx3 = rx2 * cos_mAngleZ + ry2 * (-sin_mAngleZ); + double ry3 = rx2 * sin_mAngleZ + ry2 * cos_mAngleZ; + double rz3 = rz2; + + mcList[i].cx = rx3; + mcList[i].cy = ry3; + mcList[i].cz = rz3; + + // add perspective + int diameter = 2 * radius; + double per = diameter / (diameter + rz3); + + mcList[i].scale = per; + mcList[i].alpha = per; + mcList[i].alpha = (mcList[i].alpha - 0.6) * (10d / 6d); + + ((TextView) child.mTarget).setTextSize((float) Math.ceil(12 * mcList[i].scale / 2) + 8); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + child.mTarget.setAlpha((float) mcList[i].alpha); + } + } + requestLayout(); + invalidate(); + depthSort(); + } + + private void sineCosine(double angleX, double angleY, double angleZ) { + sin_mAngleX = Math.sin(angleX); + cos_mAngleX = Math.cos(angleX); + sin_mAngleY = Math.sin(angleY); + cos_mAngleY = Math.cos(angleY); + sin_mAngleZ = Math.sin(angleZ); + cos_mAngleZ = Math.cos(angleZ); + } + + public void depthSort() { + Arrays.sort(mcList); + for (TagView child : mcList) { + bringChildToFront(child); + } + } + + /** + * 璁$畻z鐨勫潗鏍� + * + * @param x coordinate x + * @param y coordinate y + * @return the z coordinate + */ + public double calculateZ(double x, double y) { + return Math.sqrt(radius * radius - (x * x + y * y)); + } + + private class FlingRunnable implements Runnable { + + private double angleX; + + private double angleY; + + private double angleZ; + + public FlingRunnable(double angleX, double angleY, double angleZ) { + this.angleX = angleX; + this.angleY = angleY; + this.angleZ = angleZ; + } + + public void run() { + if (!allowRotating + || Math.abs(angleX) <= 0.01 && Math.abs(angleY) <= 0.01 && Math.abs(angleZ) <= 0.01) { + if (mOnScrollListener != null) { + if (mScrollState != OnScrollListener.SCROLL_STATE_IDLE) { + mScrollState = OnScrollListener.SCROLL_STATE_IDLE; + mOnScrollListener.onScrollStateChanged(OnScrollListener.SCROLL_STATE_IDLE); + } + } + return; + } else { + angleX *= 0.98d; + angleY *= 0.98d; + angleZ *= 0.98d; + if (mOnScrollListener != null) { + if (mScrollState != OnScrollListener.SCROLL_STATE_FLING) { + mScrollState = OnScrollListener.SCROLL_STATE_FLING; + mOnScrollListener.onScrollStateChanged(OnScrollListener.SCROLL_STATE_FLING); + } + } + rotate(angleX, angleY, angleZ); + TagCloudLayout.this.post(this); + } + } + } + + public static class TagView extends FrameLayout implements Comparable<TagView>{ + + public double cx; + + public double cy; + + public double cz; + + public double scale; + + public double alpha; + + public View mTarget; + + public TagView(Context context, View target) { + super(context); + this.mTarget = target; + this.addView(mTarget); + } + + @Override + public int compareTo(TagView another) { + if (cz > another.cz) { + return -1; + } else if (cz < another.cz) { + return 1; + } else { + return 0; + } + } + } + + @Override + public void addView(View child) { + TagView tagView = new TagView(getContext(), child); + tagView.setLayoutParams(new LayoutParams(child.getLayoutParams())); + super.addView(tagView); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/UnderLineTextView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/UnderLineTextView.java new file mode 100644 index 0000000..a95df0d --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/UnderLineTextView.java @@ -0,0 +1,46 @@ +package com.demo.lib.common.widget; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.DashPathEffect; +import android.graphics.Paint; +import android.graphics.Paint.Style; +import android.graphics.Path; +import android.graphics.PathEffect; +import android.util.AttributeSet; +import android.widget.TextView; + +public class UnderLineTextView extends TextView { + + private Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG); + + private PathEffect pathEffect = new DashPathEffect(new float[] { 20, 4 , 20, 4 }, 0); + + private Path path = new Path(); + + public UnderLineTextView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public UnderLineTextView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public UnderLineTextView(Context context) { + super(context); + } + + @Override + protected void onDraw(Canvas canvas) { + super.onDraw(canvas); + + paint.setColor(getCurrentTextColor()); + paint.setStyle(Style.STROKE); + //璁剧疆绾跨矖 + paint.setStrokeWidth(2); + paint.setPathEffect(pathEffect); + path.moveTo(0, this.getHeight() - 1); + path.lineTo(this.getWidth(), this.getHeight() - 1); + canvas.drawPath(path, paint); + } +} diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.java new file mode 100644 index 0000000..ad4b32a --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/BakedBezierInterpolator.java @@ -0,0 +1,85 @@ +package com.demo.lib.common.widget.myswiperefreshlayout; + +/* + * Copyright (C) 2013 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import android.view.animation.Interpolator; + +/** + * A pre-baked bezier-curved interpolator for indeterminate progress animations. + */ +final class BakedBezierInterpolator implements Interpolator { + private static final BakedBezierInterpolator INSTANCE = new BakedBezierInterpolator(); + + public final static BakedBezierInterpolator getInstance() { + return INSTANCE; + } + + /** + * Use getInstance instead of instantiating. + */ + private BakedBezierInterpolator() { + super(); + } + + /** + * Lookup table values. + * Generated using a Bezier curve from (0,0) to (1,1) with control points: + * P0 (0,0) + * P1 (0.4, 0) + * P2 (0.2, 1.0) + * P3 (1.0, 1.0) + * + * Values sampled with x at regular intervals between 0 and 1. + */ + private static final float[] VALUES = new float[] { + 0.0f, 0.0002f, 0.0009f, 0.0019f, 0.0036f, 0.0059f, 0.0086f, 0.0119f, 0.0157f, 0.0209f, + 0.0257f, 0.0321f, 0.0392f, 0.0469f, 0.0566f, 0.0656f, 0.0768f, 0.0887f, 0.1033f, 0.1186f, + 0.1349f, 0.1519f, 0.1696f, 0.1928f, 0.2121f, 0.237f, 0.2627f, 0.2892f, 0.3109f, 0.3386f, + 0.3667f, 0.3952f, 0.4241f, 0.4474f, 0.4766f, 0.5f, 0.5234f, 0.5468f, 0.5701f, 0.5933f, + 0.6134f, 0.6333f, 0.6531f, 0.6698f, 0.6891f, 0.7054f, 0.7214f, 0.7346f, 0.7502f, 0.763f, + 0.7756f, 0.7879f, 0.8f, 0.8107f, 0.8212f, 0.8326f, 0.8415f, 0.8503f, 0.8588f, 0.8672f, + 0.8754f, 0.8833f, 0.8911f, 0.8977f, 0.9041f, 0.9113f, 0.9165f, 0.9232f, 0.9281f, 0.9328f, + 0.9382f, 0.9434f, 0.9476f, 0.9518f, 0.9557f, 0.9596f, 0.9632f, 0.9662f, 0.9695f, 0.9722f, + 0.9753f, 0.9777f, 0.9805f, 0.9826f, 0.9847f, 0.9866f, 0.9884f, 0.9901f, 0.9917f, 0.9931f, + 0.9944f, 0.9955f, 0.9964f, 0.9973f, 0.9981f, 0.9986f, 0.9992f, 0.9995f, 0.9998f, 1.0f, 1.0f + }; + + private static final float STEP_SIZE = 1.0f / (VALUES.length - 1); + + @Override + public float getInterpolation(float input) { + if (input >= 1.0f) { + return 1.0f; + } + + if (input <= 0f) { + return 0f; + } + + int position = Math.min( + (int)(input * (VALUES.length - 1)), + VALUES.length - 2); + + float quantized = position * STEP_SIZE; + float difference = input - quantized; + float weight = difference / STEP_SIZE; + + return VALUES[position] + weight * (VALUES[position + 1] - VALUES[position]); + } + +} + diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.java new file mode 100644 index 0000000..d69af14 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/MySwipeRefreshLayout.java @@ -0,0 +1,858 @@ +package com.demo.lib.common.widget.myswiperefreshlayout; + +import android.content.Context; +import android.content.res.Resources; +import android.content.res.TypedArray; +import android.graphics.Canvas; +import androidx.core.view.MotionEventCompat; +import androidx.core.view.ViewCompat; +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; +import android.util.AttributeSet; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.MotionEvent; +import android.view.View; +import android.view.ViewConfiguration; +import android.view.ViewGroup; +import android.view.animation.AccelerateInterpolator; +import android.view.animation.Animation; +import android.view.animation.Animation.AnimationListener; +import android.view.animation.DecelerateInterpolator; +import android.view.animation.Transformation; +import android.widget.AbsListView; + + +/** + * The SwipeRefreshLayout should be used whenever the user can refresh the + * contents of a view via a vertical swipe gesture. The activity that + * instantiates this view should add an OnRefreshListener to be notified + * whenever the swipe to refresh gesture is completed. The SwipeRefreshLayout + * will notify the listener each and every time the gesture is completed again; + * the listener is responsible for correctly determining when to actually + * initiate a refresh of its content. If the listener determines there should + * not be a refresh, it must call setRefreshing(false) to cancel any visual + * indication of a refresh. If an activity wishes to show just the progress + * animation, it should call setRefreshing(true). To disable the gesture and progress + * animation, call setEnabled(false) on the view. + * <p/> + * <p> This layout should be made the parent of the view that will be refreshed as a + * result of the gesture and can only support one direct child. This view will + * also be made the target of the gesture and will be forced to match both the + * width and the height supplied in this layout. The SwipeRefreshLayout does not + * provide accessibility events; instead, a menu item must be provided to allow + * refresh of the content wherever this gesture is used.</p> + */ +public class MySwipeRefreshLayout extends ViewGroup { + private static final String LOG_TAG = SwipeRefreshLayout.class.getSimpleName(); + + private static final long RETURN_TO_ORIGINAL_POSITION_TIMEOUT = 300; + private static final float ACCELERATE_INTERPOLATION_FACTOR = 1.5f; + private static final float DECELERATE_INTERPOLATION_FACTOR = 2f; + private static final float PROGRESS_BAR_HEIGHT = 4; + private static final float MAX_SWIPE_DISTANCE_FACTOR = .6f; + private static final int REFRESH_TRIGGER_DISTANCE = 120; + private static final int INVALID_POINTER = -1; + + private SwipeProgressBar mProgressBar; //the thing that shows progress is going + private SwipeProgressBar mProgressBarBottom; + private View mTarget; //the content that gets pulled down + private int mOriginalOffsetTop; + private OnRefreshListener mRefreshListener; + private OnLoadListener mLoadListener; + private int mFrom; + private boolean mRefreshing = false; + private boolean mLoading = false; + private int mTouchSlop; + private float mDistanceToTriggerSync = -1; + private int mMediumAnimationDuration; + private float mFromPercentage = 0; + private float mCurrPercentage = 0; + private int mProgressBarHeight; + private int mCurrentTargetOffsetTop; + + private float mInitialMotionY; + private float mLastMotionY; + private boolean mIsBeingDragged; + private int mActivePointerId = INVALID_POINTER; + + // Target is returning to its start offset because it was cancelled or a + // refresh was triggered. + private boolean mReturningToStart; + private final DecelerateInterpolator mDecelerateInterpolator; + private final AccelerateInterpolator mAccelerateInterpolator; + private static final int[] LAYOUT_ATTRS = new int[]{ + android.R.attr.enabled + }; + private Mode mMode = Mode.getDefault(); + //涔嬪墠鎵嬪娍鐨勬柟鍚戯紝涓轰簡瑙e喅鍚屼竴涓Е鐐瑰墠鍚庣Щ鍔ㄦ柟鍚戜笉鍚屽鑷村悗涓�涓柟鍚戜細鍒锋柊鐨勯棶棰橈紝 + //杩欓噷Mode.DISABLED鏃犳剰涔夛紝鍙槸涓�涓垵濮嬪�硷紝鍜屼笂鎷�/涓嬫媺鏂瑰悜杩涜鍖哄垎 + private Mode mLastDirection = Mode.DISABLED; + private int mDirection = 0; + //褰撳瓙鎺т欢绉诲姩鍒板敖澶存椂鎵嶅紑濮嬭绠楀垵濮嬬偣鐨勪綅缃� + private float mStartPoint; + private boolean up; + private boolean down; + //鏁版嵁涓嶈冻涓�灞忔椂鏄惁鎵撳紑涓婃媺鍔犺浇妯″紡 + private boolean loadNoFull = false; + + //瀵逛笅鎷夋垨涓婃媺杩涜澶嶄綅 + private final Animation mAnimateToStartPosition = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, Transformation t) { + int targetTop = 0; + if (mFrom != mOriginalOffsetTop) { + targetTop = (mFrom + (int) ((mOriginalOffsetTop - mFrom) * interpolatedTime)); + } + int offset = targetTop - mTarget.getTop(); + //娉ㄩ噴鎺夎繖閲岋紝涓嶇劧涓婃媺鍚庡洖澶嶅師浣嶇疆浼氬緢蹇紝涓嶅钩婊� +// final int currentTop = mTarget.getTop(); +// if (offset + currentTop < 0) { +// offset = 0 - currentTop; +// } + setTargetOffsetTopAndBottom(offset); + } + }; + + //璁剧疆涓婃柟杩涘害鏉$殑瀹屾垚搴︾櫨鍒嗘瘮 + private Animation mShrinkTrigger = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, Transformation t) { + float percent = mFromPercentage + ((0 - mFromPercentage) * interpolatedTime); + mProgressBar.setTriggerPercentage(percent); + } + }; + + //璁剧疆涓嬫柟杩涘害鏉$殑瀹屾垚搴︾櫨鍒嗘瘮 + private Animation mShrinkTriggerBottom = new Animation() { + @Override + public void applyTransformation(float interpolatedTime, Transformation t) { + float percent = mFromPercentage + ((0 - mFromPercentage) * interpolatedTime); + mProgressBarBottom.setTriggerPercentage(percent); + } + }; + + //鐩戝惉锛屽洖澶嶅垵濮嬩綅缃� + private final AnimationListener mReturnToStartPositionListener = new BaseAnimationListener() { + @Override + public void onAnimationEnd(Animation animation) { + // Once the target content has returned to its start position, reset + // the target offset to 0 + mCurrentTargetOffsetTop = 0; + mLastDirection = Mode.DISABLED; + } + }; + + //鍥炲杩涘害鏉$櫨鍒嗘瘮 + private final AnimationListener mShrinkAnimationListener = new BaseAnimationListener() { + @Override + public void onAnimationEnd(Animation animation) { + mCurrPercentage = 0; + } + }; + + //鍥炲鍒濆浣嶇疆 + private final Runnable mReturnToStartPosition = new Runnable() { + + @Override + public void run() { + mReturningToStart = true; + animateOffsetToStartPosition(mCurrentTargetOffsetTop + getPaddingTop(), + mReturnToStartPositionListener); + } + + }; + + // Cancel the refresh gesture and animate everything back to its original state. + private final Runnable mCancel = new Runnable() { + + @Override + public void run() { + mReturningToStart = true; + // Timeout fired since the user last moved their finger; animate the + // trigger to 0 and put the target back at its original position + if (mProgressBar != null || mProgressBarBottom != null) { + mFromPercentage = mCurrPercentage; + if (mDirection > 0 && ((mMode == Mode.PULL_FROM_START) || (mMode == Mode.BOTH))) { + mShrinkTrigger.setDuration(mMediumAnimationDuration); + mShrinkTrigger.setAnimationListener(mShrinkAnimationListener); + mShrinkTrigger.reset(); + mShrinkTrigger.setInterpolator(mDecelerateInterpolator); + startAnimation(mShrinkTrigger); + } else if (mDirection < 0 && ((mMode == Mode.PULL_FROM_END) || (mMode == Mode.BOTH))) { + mShrinkTriggerBottom.setDuration(mMediumAnimationDuration); + mShrinkTriggerBottom.setAnimationListener(mShrinkAnimationListener); + mShrinkTriggerBottom.reset(); + mShrinkTriggerBottom.setInterpolator(mDecelerateInterpolator); + startAnimation(mShrinkTriggerBottom); + } + } + mDirection = 0; + animateOffsetToStartPosition(mCurrentTargetOffsetTop + getPaddingTop(), + mReturnToStartPositionListener); + } + + }; + + /** + * Simple constructor to use when creating a SwipeRefreshLayout from code. + * + * @param context + */ + public MySwipeRefreshLayout(Context context) { + this(context, null); + } + + /** + * Constructor that is called when inflating SwipeRefreshLayout from XML. + * + * @param context + * @param attrs + */ + public MySwipeRefreshLayout(Context context, AttributeSet attrs) { + super(context, attrs); + + mTouchSlop = ViewConfiguration.get(context).getScaledTouchSlop(); + + mMediumAnimationDuration = getResources().getInteger( + android.R.integer.config_mediumAnimTime); + + setWillNotDraw(false); + mProgressBar = new SwipeProgressBar(this); + mProgressBarBottom = new SwipeProgressBar(this); + final DisplayMetrics metrics = getResources().getDisplayMetrics(); + mProgressBarHeight = (int) (metrics.density * PROGRESS_BAR_HEIGHT); + mDecelerateInterpolator = new DecelerateInterpolator(DECELERATE_INTERPOLATION_FACTOR); + mAccelerateInterpolator = new AccelerateInterpolator(ACCELERATE_INTERPOLATION_FACTOR); + + final TypedArray a = context.obtainStyledAttributes(attrs, LAYOUT_ATTRS); + setEnabled(a.getBoolean(0, true)); + a.recycle(); + } + + @Override + public void onAttachedToWindow() { + super.onAttachedToWindow(); + removeCallbacks(mCancel); + removeCallbacks(mReturnToStartPosition); + } + + @Override + public void onDetachedFromWindow() { + super.onDetachedFromWindow(); + removeCallbacks(mReturnToStartPosition); + removeCallbacks(mCancel); + } + + //瀵瑰瓙鎺т欢杩涜绉诲姩 + private void animateOffsetToStartPosition(int from, AnimationListener listener) { + mFrom = from; + mAnimateToStartPosition.reset(); + mAnimateToStartPosition.setDuration(mMediumAnimationDuration); + mAnimateToStartPosition.setAnimationListener(listener); + mAnimateToStartPosition.setInterpolator(mDecelerateInterpolator); + mTarget.startAnimation(mAnimateToStartPosition); + } + + /** + * Set the listener to be notified when a refresh is triggered via the swipe + * gesture. + */ + public void setOnRefreshListener(OnRefreshListener listener) { + mRefreshListener = listener; + } + + public void setOnLoadListener(OnLoadListener listener) { + mLoadListener = listener; + } + + //璁剧疆杩涘害鏉$殑鏄剧ず鐧惧垎姣� + private void setTriggerPercentage(float percent) { + if (percent == 0f) { + // No-op. A null trigger means it's uninitialized, and setting it to zero-percent + // means we're trying to reset state, so there's nothing to reset in this case. + mCurrPercentage = 0; + return; + } + mCurrPercentage = percent; + if (((mMode == Mode.PULL_FROM_START) || (mMode == Mode.BOTH)) + && mLastDirection != Mode.PULL_FROM_END && !mLoading) { + mProgressBar.setTriggerPercentage(percent); + } else if (((mMode == Mode.PULL_FROM_END) || (mMode == Mode.BOTH)) + && mLastDirection != Mode.PULL_FROM_START && !mRefreshing) { + mProgressBarBottom.setTriggerPercentage(percent); + } + } + + /** + * Notify the widget that refresh state has changed. Do not call this when + * refresh is triggered by a swipe gesture. + * + * @param refreshing Whether or not the view should show refresh progress. + */ + public void setRefreshing(boolean refreshing) { + if (mRefreshing != refreshing) { + ensureTarget(); + mCurrPercentage = 0; + mRefreshing = refreshing; + if (mRefreshing) { + mProgressBar.start(); + } else { + mLastDirection = Mode.DISABLED; + mProgressBar.stop(); + } + } + } + + public void setLoading(boolean loading) { + if (mLoading != loading) { + ensureTarget(); + mCurrPercentage = 0; + mLoading = loading; + if (mLoading) { + mProgressBarBottom.start(); + } else { + mLastDirection = Mode.DISABLED; + mProgressBarBottom.stop(); + } + } + } + + /** + * @deprecated Use {@link #setColorSchemeResources(int, int, int, int)} + */ + @Deprecated + private void setColorScheme(int colorRes1, int colorRes2, int colorRes3, int colorRes4) { + setColorSchemeResources(colorRes1, colorRes2, colorRes3, colorRes4); + } + + /** + * Set the four colors used in the progress animation from color resources. + * The first color will also be the color of the bar that grows in response + * to a user swipe gesture. + */ + public void setTopColor(int colorRes1, int colorRes2, int colorRes3, + int colorRes4) { + setColorSchemeResources(colorRes1, colorRes2, colorRes3, colorRes4); + } + + public void setBottomColor(int colorRes1, int colorRes2, int colorRes3, + int colorRes4) { + setColorSchemeResourcesBottom(colorRes1, colorRes2, colorRes3, colorRes4); + } + + public void setColor(int colorRes1, int colorRes2, int colorRes3, + int colorRes4) { + setColorSchemeResources(colorRes1, colorRes2, colorRes3, colorRes4); + setColorSchemeResourcesBottom(colorRes1, colorRes2, colorRes3, colorRes4); + } + + private void setColorSchemeResources(int colorRes1, int colorRes2, int colorRes3, + int colorRes4) { + final Resources res = getResources(); + setColorSchemeColors(res.getColor(colorRes1), res.getColor(colorRes2), + res.getColor(colorRes3), res.getColor(colorRes4)); + } + + private void setColorSchemeResourcesBottom(int colorRes1, int colorRes2, int colorRes3, + int colorRes4) { + final Resources res = getResources(); + setColorSchemeColorsBottom(res.getColor(colorRes1), res.getColor(colorRes2), + res.getColor(colorRes3), res.getColor(colorRes4)); + } + + /** + * Set the four colors used in the progress animation. The first color will + * also be the color of the bar that grows in response to a user swipe + * gesture. + */ + private void setColorSchemeColors(int color1, int color2, int color3, int color4) { + ensureTarget(); + mProgressBar.setColorScheme(color1, color2, color3, color4); + } + + private void setColorSchemeColorsBottom(int color1, int color2, int color3, int color4) { + ensureTarget(); + mProgressBarBottom.setColorScheme(color1, color2, color3, color4); + } + + /** + * @return Whether the SwipeRefreshWidget is actively showing refresh + * progress. + */ + public boolean isRefreshing() { + return mRefreshing; + } + + public boolean isLoading() { + return mLoading; + } + + private void ensureTarget() { + // Don't bother getting the parent height if the parent hasn't been laid out yet. + if (mTarget == null) { + if (getChildCount() > 1 && !isInEditMode()) { + throw new IllegalStateException( + "SwipeRefreshLayout can host only one direct child"); + } + mTarget = getChildAt(0); + mOriginalOffsetTop = mTarget.getTop() + getPaddingTop(); + } + if (mDistanceToTriggerSync == -1) { + if (getParent() != null && ((View) getParent()).getHeight() > 0) { + final DisplayMetrics metrics = getResources().getDisplayMetrics(); + mDistanceToTriggerSync = (int) Math.min( + ((View) getParent()).getHeight() * MAX_SWIPE_DISTANCE_FACTOR, + REFRESH_TRIGGER_DISTANCE * metrics.density); + } + } + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + mProgressBar.draw(canvas); + mProgressBarBottom.draw(canvas); + } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + final int width = getMeasuredWidth(); + final int height = getMeasuredHeight(); + mProgressBar.setBounds(0, 0, width, mProgressBarHeight); + if (getChildCount() == 0) { + return; + } + final View child = getChildAt(0); + final int childLeft = getPaddingLeft(); + final int childTop = mCurrentTargetOffsetTop + getPaddingTop(); + final int childWidth = width - getPaddingLeft() - getPaddingRight(); + final int childHeight = height - getPaddingTop() - getPaddingBottom(); + child.layout(childLeft, childTop, childLeft + childWidth, childTop + childHeight); + mProgressBarBottom.setBounds(0, height - mProgressBarHeight, width, height); + } + + @Override + public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { + super.onMeasure(widthMeasureSpec, heightMeasureSpec); + if (getChildCount() > 1 && !isInEditMode()) { + throw new IllegalStateException("SwipeRefreshLayout can host only one direct child"); + } + if (getChildCount() > 0) { + getChildAt(0).measure( + MeasureSpec.makeMeasureSpec( + getMeasuredWidth() - getPaddingLeft() - getPaddingRight(), + MeasureSpec.EXACTLY), + MeasureSpec.makeMeasureSpec( + getMeasuredHeight() - getPaddingTop() - getPaddingBottom(), + MeasureSpec.EXACTLY)); + } + } + + /** + * @return Whether it is possible for the child view of this layout to + * scroll up. Override this if the child view is a custom view. + */ + public boolean canChildScrollUp() { + if (android.os.Build.VERSION.SDK_INT < 14) { + if (mTarget instanceof AbsListView) { + final AbsListView absListView = (AbsListView) mTarget; + return absListView.getChildCount() > 0 + && (absListView.getFirstVisiblePosition() > 0 || absListView.getChildAt(0) + .getTop() < absListView.getPaddingTop()); + } else { + return mTarget.getScrollY() > 0; + } + } else { + return ViewCompat.canScrollVertically(mTarget, -1); + } + } + + public boolean canChildScrollDown() { + if (android.os.Build.VERSION.SDK_INT < 14) { + if (mTarget instanceof AbsListView) { + final AbsListView absListView = (AbsListView) mTarget; + View lastChild = absListView.getChildAt(absListView.getChildCount() - 1); + if (lastChild != null) { + return (absListView.getLastVisiblePosition() == (absListView.getCount() - 1)) + && lastChild.getBottom() > absListView.getPaddingBottom(); + } else { + return false; + } + } else { + return mTarget.getHeight() - mTarget.getScrollY() > 0; + } + } else { + return ViewCompat.canScrollVertically(mTarget, 1); + } + } + + @Override + public boolean onInterceptTouchEvent(MotionEvent ev) { + ensureTarget(); + + final int action = MotionEventCompat.getActionMasked(ev); + + if (mReturningToStart && action == MotionEvent.ACTION_DOWN) { + mReturningToStart = false; + } + + if (!isEnabled() || mReturningToStart) { + // Fail fast if we're not in a state where a swipe is possible + return false; + } + + switch (action) { + case MotionEvent.ACTION_DOWN: + mLastMotionY = mInitialMotionY = ev.getY(); + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + mIsBeingDragged = false; + mCurrPercentage = 0; + mStartPoint = mInitialMotionY; + + //杩欓噷鐢╱p/down璁板綍瀛愭帶浠惰兘鍚︿笅鎷夛紝濡傛灉褰撳墠瀛愭帶浠朵笉鑳戒笂涓嬫粦鍔紝浣嗗綋鎵嬫寚鎸変笅骞剁Щ鍔ㄥ瓙鎺т欢鏃讹紝鎺т欢灏变細鍙樺緱鍙粦鍔� + //鍚庨潰鐨勪竴浜涘鐞嗕笉鑳界洿鎺ヤ娇鐢╟anChildScrollUp/canChildScrollDown + //浣嗕粛瀛樺湪闂锛氬綋鏁版嵁涓嶆弧涓�灞忎笖璁剧疆鍙互涓婃媺妯″紡鍚庯紝澶氭蹇�熶笂鎷変細婵�鍙戜笂鎷夊姞杞� + up = canChildScrollUp(); + down = canChildScrollDown(); + break; + + case MotionEvent.ACTION_MOVE: + if (mActivePointerId == INVALID_POINTER) { + Log.e(LOG_TAG, "Got ACTION_MOVE event but don't have an active pointer id."); + return false; + } + + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + if (pointerIndex < 0) { + Log.e(LOG_TAG, "Got ACTION_MOVE event but have an invalid active pointer id."); + return false; + } + + final float y = MotionEventCompat.getY(ev, pointerIndex); +// final float yDiff = y - mInitialMotionY; + final float yDiff = y - mStartPoint; + //鑻ヤ笂涓墜鍔跨殑鏂瑰悜鍜屽綋鍓嶆墜鍔挎柟鍚戜笉涓�鑷达紝杩斿洖 + if ((mLastDirection == Mode.PULL_FROM_START && yDiff < 0) || + (mLastDirection == Mode.PULL_FROM_END && yDiff > 0)) { + return false; + } + //涓嬫媺鎴栦笂鎷夋椂锛屽瓙鎺т欢鏈韩鑳藉婊戝姩鏃讹紝璁板綍褰撳墠鎵嬫寚浣嶇疆锛屽綋鍏舵粦鍔ㄥ埌灏藉ご鏃讹紝 + //mStartPoint浣滀负涓嬫媺鍒锋柊鎴栦笂鎷夊姞杞界殑鎵嬪娍璧风偣 + if ((canChildScrollUp() && yDiff > 0) || (canChildScrollDown() && yDiff < 0)) { + mStartPoint = y; + } + + //涓嬫媺 + if (yDiff > mTouchSlop) { + //鑻ュ綋鍓嶅瓙鎺т欢鑳藉悜涓嬫粦鍔紝鎴栬�呬笂涓墜鍔夸负涓婃媺锛屽垯杩斿洖 + if (canChildScrollUp() || mLastDirection == Mode.PULL_FROM_END) { + mIsBeingDragged = false; + return false; + } + if ((mMode == Mode.PULL_FROM_START) || (mMode == Mode.BOTH)) { + mLastMotionY = y; + mIsBeingDragged = true; + mLastDirection = Mode.PULL_FROM_START; + } + } + //涓婃媺 + else if (-yDiff > mTouchSlop) { + //鑻ュ綋鍓嶅瓙鎺т欢鑳藉悜涓婃粦鍔紝鎴栬�呬笂涓墜鍔夸负涓嬫媺锛屽垯杩斿洖 + if (canChildScrollDown() || mLastDirection == Mode.PULL_FROM_START) { + mIsBeingDragged = false; + return false; + } + //鑻ュ瓙鎺т欢涓嶈兘涓婁笅婊戝姩锛岃鏄庢暟鎹笉瓒充竴灞忥紝鑻ヤ笉婊″睆涓嶅姞杞斤紝杩斿洖 + if (!up && !down && !loadNoFull) { + mIsBeingDragged = false; + return false; + } + if ((mMode == Mode.PULL_FROM_END) || (mMode == Mode.BOTH)) { + mLastMotionY = y; + mIsBeingDragged = true; + mLastDirection = Mode.PULL_FROM_END; + } + } + break; + + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + mIsBeingDragged = false; + mCurrPercentage = 0; + mActivePointerId = INVALID_POINTER; + mLastDirection = Mode.DISABLED; + break; + } + + return mIsBeingDragged; + } + + @Override + public void requestDisallowInterceptTouchEvent(boolean b) { + // Nope. + } + + @Override + public boolean onTouchEvent(MotionEvent ev) { + final int action = MotionEventCompat.getActionMasked(ev); + + if (mReturningToStart && action == MotionEvent.ACTION_DOWN) { + mReturningToStart = false; + } + + if (!isEnabled() || mReturningToStart) { + // Fail fast if we're not in a state where a swipe is possible + return false; + } + + switch (action) { + case MotionEvent.ACTION_DOWN: + mLastMotionY = mInitialMotionY = ev.getY(); + mActivePointerId = MotionEventCompat.getPointerId(ev, 0); + mIsBeingDragged = false; + mCurrPercentage = 0; + mStartPoint = mInitialMotionY; + + up = canChildScrollUp(); + down = canChildScrollDown(); + break; + + case MotionEvent.ACTION_MOVE: + final int pointerIndex = MotionEventCompat.findPointerIndex(ev, mActivePointerId); + if (pointerIndex < 0) { + Log.e(LOG_TAG, "Got ACTION_MOVE event but have an invalid active pointer id."); + return false; + } + + final float y = MotionEventCompat.getY(ev, pointerIndex); +// final float yDiff = y - mInitialMotionY; + final float yDiff = y - mStartPoint; + + if ((mLastDirection == Mode.PULL_FROM_START && yDiff < 0) || + (mLastDirection == Mode.PULL_FROM_END && yDiff > 0)) { + return true; + } + + if (!mIsBeingDragged && (yDiff > 0 && mLastDirection == Mode.PULL_FROM_START) + || (yDiff < 0 && mLastDirection == Mode.PULL_FROM_END)) { + mIsBeingDragged = true; + } + + if (mIsBeingDragged) { + // User velocity passed min velocity; trigger a refresh + if (yDiff > mDistanceToTriggerSync) { + // User movement passed distance; trigger a refresh + if (mLastDirection == Mode.PULL_FROM_END) { + return true; + + } + if ((mMode == Mode.PULL_FROM_START) || (mMode == Mode.BOTH)) { + mLastDirection = Mode.PULL_FROM_START; + startRefresh(); + } + } else if (-yDiff > mDistanceToTriggerSync) { + if ((!up && !down && !loadNoFull) || mLastDirection == Mode.PULL_FROM_START) { + return true; + } + if ((mMode == Mode.PULL_FROM_END) || (mMode == Mode.BOTH)) { + mLastDirection = Mode.PULL_FROM_END; + startLoad(); + } + } else { + if (!up && !down && yDiff < 0 && !loadNoFull) { + return true; + } + // Just track the user's movement + //鏍规嵁鎵嬫寚绉诲姩璺濈璁剧疆杩涘害鏉℃樉绀虹殑鐧惧垎姣� + setTriggerPercentage( + mAccelerateInterpolator.getInterpolation( + Math.abs(yDiff) / mDistanceToTriggerSync)); + updateContentOffsetTop((int) yDiff); + if (mTarget.getTop() == getPaddingTop()) { + // If the user puts the view back at the top, we + // don't need to. This shouldn't be considered + // cancelling the gesture as the user can restart from the top. + removeCallbacks(mCancel); + mLastDirection = Mode.DISABLED; + } else { + mDirection = (yDiff > 0 ? 1 : -1); + updatePositionTimeout(); + } + } + mLastMotionY = y; + } + break; + + case MotionEventCompat.ACTION_POINTER_DOWN: { + final int index = MotionEventCompat.getActionIndex(ev); + mLastMotionY = MotionEventCompat.getY(ev, index); + mActivePointerId = MotionEventCompat.getPointerId(ev, index); + break; + } + + case MotionEventCompat.ACTION_POINTER_UP: + onSecondaryPointerUp(ev); + break; + + case MotionEvent.ACTION_UP: + case MotionEvent.ACTION_CANCEL: + mIsBeingDragged = false; + mCurrPercentage = 0; + mActivePointerId = INVALID_POINTER; + mLastDirection = Mode.DISABLED; + return false; + } + + return true; + } + + private void startRefresh() { + if (!mLoading && !mRefreshing) { + removeCallbacks(mCancel); + mReturnToStartPosition.run(); + setRefreshing(true); + mRefreshListener.onRefresh(); + } + } + + private void startLoad() { + if (!mLoading && !mRefreshing) { + removeCallbacks(mCancel); + mReturnToStartPosition.run(); + setLoading(true); + mLoadListener.onLoad(); + } + } + + //鎵嬫寚绉诲姩鏃舵洿鏂板瓙鎺т欢鐨勪綅缃� + private void updateContentOffsetTop(int targetTop) { + final int currentTop = mTarget.getTop(); + if (targetTop > mDistanceToTriggerSync) { + targetTop = (int) mDistanceToTriggerSync; + } + //娉ㄩ噴鎺夛紝鍚﹀垯涓婃媺鐨勬椂鍊欏瓙鎺т欢浼氬悜涓嬬Щ鍔� +// else if (targetTop < 0) { +// targetTop = 0; +// } + setTargetOffsetTopAndBottom(targetTop - currentTop); + } + + //鏍规嵁鍋忕Щ閲忓瀛愭帶浠惰繘琛岀Щ鍔� + private void setTargetOffsetTopAndBottom(int offset) { + mTarget.offsetTopAndBottom(offset); + mCurrentTargetOffsetTop = mTarget.getTop(); + } + + private void updatePositionTimeout() { + removeCallbacks(mCancel); + postDelayed(mCancel, RETURN_TO_ORIGINAL_POSITION_TIMEOUT); + } + + private void onSecondaryPointerUp(MotionEvent ev) { + final int pointerIndex = MotionEventCompat.getActionIndex(ev); + final int pointerId = MotionEventCompat.getPointerId(ev, pointerIndex); + if (pointerId == mActivePointerId) { + // This was our active pointer going up. Choose a new + // active pointer and adjust accordingly. + final int newPointerIndex = pointerIndex == 0 ? 1 : 0; + mLastMotionY = MotionEventCompat.getY(ev, newPointerIndex); + mActivePointerId = MotionEventCompat.getPointerId(ev, newPointerIndex); + } + } + + /** + * Classes that wish to be notified when the swipe gesture correctly + * triggers a refresh should implement this interface. + */ + public interface OnRefreshListener { + void onRefresh(); + } + + public interface OnLoadListener { + void onLoad(); + } + + public void setMode(Mode mode) { + this.mMode = mode; + } + + public void setLoadNoFull(boolean load) { + this.loadNoFull = load; + } + + public enum Mode { + /** + * Disable all Pull-to-Refresh gesture and Refreshing handling + */ + DISABLED(0x0), + + /** + * Only allow the user to Pull from the start of the Refreshable View to + * refresh. The start is either the Top or Left, depending on the + * scrolling direction. + */ + PULL_FROM_START(0x1), + + /** + * Only allow the user to Pull from the end of the Refreshable View to + * refresh. The start is either the Bottom or Right, depending on the + * scrolling direction. + */ + PULL_FROM_END(0x2), + + /** + * Allow the user to both Pull from the start, from the end to refresh. + */ + BOTH(0x3); + + static Mode getDefault() { + return BOTH; + } + + boolean permitsPullToRefresh() { + return !(this == DISABLED); + } + + boolean permitsPullFromStart() { + return (this == Mode.BOTH || this == Mode.PULL_FROM_START); + } + + boolean permitsPullFromEnd() { + return (this == Mode.BOTH || this == Mode.PULL_FROM_END); + } + + private int mIntValue; + + // The modeInt values need to match those from attrs.xml + Mode(int modeInt) { + mIntValue = modeInt; + } + + int getIntValue() { + return mIntValue; + } + + } + + /** + * Simple AnimationListener to avoid having to implement unneeded methods in + * AnimationListeners. + */ + private class BaseAnimationListener implements AnimationListener { + @Override + public void onAnimationStart(Animation animation) { + } + + @Override + public void onAnimationEnd(Animation animation) { + } + + @Override + public void onAnimationRepeat(Animation animation) { + } + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.java new file mode 100644 index 0000000..223dc6b --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/myswiperefreshlayout/SwipeProgressBar.java @@ -0,0 +1,254 @@ +package com.demo.lib.common.widget.myswiperefreshlayout; + +import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Rect; +import android.graphics.RectF; +import androidx.core.view.ViewCompat; +import android.view.View; +import android.view.animation.AnimationUtils; +import android.view.animation.Interpolator; + +/** + * Created by weikou2015 on 2016/8/19. + */ +final class SwipeProgressBar { + + // Default progress animation colors are grays. + private final static int COLOR1 = 0xB3000000; + private final static int COLOR2 = 0x80000000; + private final static int COLOR3 = 0x4d000000; + private final static int COLOR4 = 0x1a000000; + + // The duration of the animation cycle. + private static final int ANIMATION_DURATION_MS = 2000; + + // The duration of the animation to clear the bar. + private static final int FINISH_ANIMATION_DURATION_MS = 1000; + + // Interpolator for varying the speed of the animation. + + private static final Interpolator INTERPOLATOR = BakedBezierInterpolator.getInstance(); + + private final Paint mPaint = new Paint(); + private final RectF mClipRect = new RectF(); + private float mTriggerPercentage; + private long mStartTime; + private long mFinishTime; + private boolean mRunning; + + // Colors used when rendering the animation, + private int mColor1; + private int mColor2; + private int mColor3; + private int mColor4; + private View mParent; + + private Rect mBounds = new Rect(); + + public SwipeProgressBar(View parent) { + mParent = parent; + mColor1 = COLOR1; + mColor2 = COLOR2; + mColor3 = COLOR3; + mColor4 = COLOR4; + } + + /** + * Set the four colors used in the progress animation. The first color will + * also be the color of the bar that grows in response to a user swipe + * gesture. + * + * @param color1 Integer representation of a color. + * @param color2 Integer representation of a color. + * @param color3 Integer representation of a color. + * @param color4 Integer representation of a color. + */ + void setColorScheme(int color1, int color2, int color3, int color4) { + mColor1 = color1; + mColor2 = color2; + mColor3 = color3; + mColor4 = color4; + } + + /** + * Update the progress the user has made toward triggering the swipe + * gesture. and use this value to update the percentage of the trigger that + * is shown. + */ + void setTriggerPercentage(float triggerPercentage) { + mTriggerPercentage = triggerPercentage; + mStartTime = 0; + ViewCompat.postInvalidateOnAnimation(mParent); + } + + /** + * Start showing the progress animation. + */ + void start() { + if (!mRunning) { + mTriggerPercentage = 0; + mStartTime = AnimationUtils.currentAnimationTimeMillis(); + mRunning = true; + mParent.postInvalidate(); + } + } + + /** + * Stop showing the progress animation. + */ + void stop() { + if (mRunning) { + mTriggerPercentage = 0; + mFinishTime = AnimationUtils.currentAnimationTimeMillis(); + mRunning = false; + mParent.postInvalidate(); + } + } + + /** + * @return Return whether the progress animation is currently running. + */ + boolean isRunning() { + return mRunning || mFinishTime > 0; + } + + void draw(Canvas canvas) { + final int width = mBounds.width(); + final int height = mBounds.height(); + final int cx = width / 2; +// final int cy = height / 2; + final int cy = mBounds.bottom - height / 2; + boolean drawTriggerWhileFinishing = false; + int restoreCount = canvas.save(); + canvas.clipRect(mBounds); + + if (mRunning || (mFinishTime > 0)) { + long now = AnimationUtils.currentAnimationTimeMillis(); + long elapsed = (now - mStartTime) % ANIMATION_DURATION_MS; + long iterations = (now - mStartTime) / ANIMATION_DURATION_MS; + float rawProgress = (elapsed / (ANIMATION_DURATION_MS / 100f)); + + // If we're not running anymore, that means we're running through + // the finish animation. + if (!mRunning) { + // If the finish animation is done, don't draw anything, and + // don't repost. + if ((now - mFinishTime) >= FINISH_ANIMATION_DURATION_MS) { + mFinishTime = 0; + return; + } + + // Otherwise, use a 0 opacity alpha layer to clear the animation + // from the inside out. This layer will prevent the circles from + // drawing within its bounds. + long finishElapsed = (now - mFinishTime) % FINISH_ANIMATION_DURATION_MS; + float finishProgress = (finishElapsed / (FINISH_ANIMATION_DURATION_MS / 100f)); + float pct = (finishProgress / 100f); + // Radius of the circle is half of the screen. + float clearRadius = width / 2 * INTERPOLATOR.getInterpolation(pct); + mClipRect.set(cx - clearRadius, 0, cx + clearRadius, height); + canvas.saveLayerAlpha(mClipRect, 0, 0); + // Only draw the trigger if there is a space in the center of + // this refreshing view that needs to be filled in by the + // trigger. If the progress view is just still animating, let it + // continue animating. + drawTriggerWhileFinishing = true; + } + + // First fill in with the last color that would have finished drawing. + if (iterations == 0) { + canvas.drawColor(mColor1); + } else { + if (rawProgress >= 0 && rawProgress < 25) { + canvas.drawColor(mColor4); + } else if (rawProgress >= 25 && rawProgress < 50) { + canvas.drawColor(mColor1); + } else if (rawProgress >= 50 && rawProgress < 75) { + canvas.drawColor(mColor2); + } else { + canvas.drawColor(mColor3); + } + } + + // Then draw up to 4 overlapping concentric circles of varying radii, based on how far + // along we are in the cycle. + // progress 0-50 draw mColor2 + // progress 25-75 draw mColor3 + // progress 50-100 draw mColor4 + // progress 75 (wrap to 25) draw mColor1 + if ((rawProgress >= 0 && rawProgress <= 25)) { + float pct = (((rawProgress + 25) * 2) / 100f); + drawCircle(canvas, cx, cy, mColor1, pct); + } + if (rawProgress >= 0 && rawProgress <= 50) { + float pct = ((rawProgress * 2) / 100f); + drawCircle(canvas, cx, cy, mColor2, pct); + } + if (rawProgress >= 25 && rawProgress <= 75) { + float pct = (((rawProgress - 25) * 2) / 100f); + drawCircle(canvas, cx, cy, mColor3, pct); + } + if (rawProgress >= 50 && rawProgress <= 100) { + float pct = (((rawProgress - 50) * 2) / 100f); + drawCircle(canvas, cx, cy, mColor4, pct); + } + if ((rawProgress >= 75 && rawProgress <= 100)) { + float pct = (((rawProgress - 75) * 2) / 100f); + drawCircle(canvas, cx, cy, mColor1, pct); + } + if (mTriggerPercentage > 0 && drawTriggerWhileFinishing) { + // There is some portion of trigger to draw. Restore the canvas, + // then draw the trigger. Otherwise, the trigger does not appear + // until after the bar has finished animating and appears to + // just jump in at a larger width than expected. + canvas.restoreToCount(restoreCount); + restoreCount = canvas.save(); + canvas.clipRect(mBounds); + drawTrigger(canvas, cx, cy); + } + // Keep running until we finish out the last cycle. + ViewCompat.postInvalidateOnAnimation(mParent); + } else { + // Otherwise if we're in the middle of a trigger, draw that. + if (mTriggerPercentage > 0 && mTriggerPercentage <= 1.0) { + drawTrigger(canvas, cx, cy); + } + } + canvas.restoreToCount(restoreCount); + } + + private void drawTrigger(Canvas canvas, int cx, int cy) { + mPaint.setColor(mColor1); + canvas.drawCircle(cx, cy, cx * mTriggerPercentage, mPaint); + } + + /** + * Draws a circle centered in the view. + * + * @param canvas the canvas to draw on + * @param cx the center x coordinate + * @param cy the center y coordinate + * @param color the color to draw + * @param pct the percentage of the view that the circle should cover + */ + private void drawCircle(Canvas canvas, float cx, float cy, int color, float pct) { + mPaint.setColor(color); + canvas.save(); + canvas.translate(cx, cy); + float radiusScale = INTERPOLATOR.getInterpolation(pct); + canvas.scale(radiusScale, radiusScale); + canvas.drawCircle(0, 0, cx, mPaint); + canvas.restore(); + } + + /** + * Set the drawing bounds of this SwipeProgressBar. + */ + void setBounds(int left, int top, int right, int bottom) { + mBounds.left = left; + mBounds.top = top; + mBounds.right = right; + mBounds.bottom = bottom; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java new file mode 100644 index 0000000..0a9243e --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/ExtendedWebView.java @@ -0,0 +1,30 @@ +package com.demo.lib.common.widget.verticalviewpager; + +import android.content.Context; +import android.util.AttributeSet; +import android.webkit.WebView; + +/** + * Created with IntelliJ IDEA. User: sash0k Date: 07.06.13 Time: 11:15 袛谢褟 + * 胁芯蟹屑芯卸薪芯褋褌懈 胁械褉褌懈泻邪谢褜薪芯谐芯 褋泻褉芯谢谢邪 薪邪 Android 2.x see + * http://stackoverflow.com/a/9925980 + */ +public class ExtendedWebView extends WebView { + public ExtendedWebView(Context context) { + super(context); + } + + public ExtendedWebView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public boolean canScrollVertical(int direction) { + final int offset = computeVerticalScrollOffset(); + final int range = computeVerticalScrollRange() + - computeVerticalScrollExtent(); + if (range == 0) + return false; + else + return (direction < 0) ? (offset > 0) : (offset < range - 1); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.java b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.java new file mode 100644 index 0000000..ae8fdb0 --- /dev/null +++ b/src/main/resources/code/android/library-common/src/com/demo/lib/common/widget/verticalviewpager/PagerAdapter.java @@ -0,0 +1,280 @@ +package com.demo.lib.common.widget.verticalviewpager; + +import android.database.DataSetObservable; +import android.database.DataSetObserver; +import android.os.Parcelable; +import android.view.View; +import android.view.ViewGroup; + +public abstract class PagerAdapter { + private DataSetObservable mObservable = new DataSetObservable(); + + public static final int POSITION_UNCHANGED = -1; + public static final int POSITION_NONE = -2; + + /** + * Return the number of views available. + */ + public abstract int getCount(); + + /** + * Called when a change in the shown pages is going to start being made. + * + * @param container + * The containing View which is displaying this adapter's page + * views. + */ + public void startUpdate(ViewGroup container) { + startUpdate((View) container); + } + + /** + * Create the page for the given position. The adapter is responsible for + * adding the view to the container given here, although it only must ensure + * this is done by the time it returns from {@link #finishUpdate(ViewGroup)} + * . + * + * @param container + * The containing View in which the page will be shown. + * @param position + * The page position to be instantiated. + * @return Returns an Object representing the new page. This does not need + * to be a View, but can be some other container of the page. + */ + public Object instantiateItem(ViewGroup container, int position) { + return instantiateItem((View) container, position); + } + + /** + * Remove a page for the given position. The adapter is responsible for + * removing the view from its container, although it only must ensure this + * is done by the time it returns from {@link #finishUpdate(ViewGroup)}. + * + * @param container + * The containing View from which the page will be removed. + * @param position + * The page position to be removed. + * @param object + * The same object that was returned by + * {@link #instantiateItem(View, int)}. + */ + public void destroyItem(ViewGroup container, int position, Object object) { + destroyItem((View) container, position, object); + } + + /** + * Called to inform the adapter of which item is currently considered to be + * the "primary", that is the one show to the user as the current page. + * + * @param container + * The containing View from which the page will be removed. + * @param position + * The page position that is now the primary. + * @param object + * The same object that was returned by + * {@link #instantiateItem(View, int)}. + */ + public void setPrimaryItem(ViewGroup container, int position, Object object) { + setPrimaryItem((View) container, position, object); + } + + /** + * Called when the a change in the shown pages has been completed. At this + * point you must ensure that all of the pages have actually been added or + * removed from the container as appropriate. + * + * @param container + * The containing View which is displaying this adapter's page + * views. + */ + public void finishUpdate(ViewGroup container) { + finishUpdate((View) container); + } + + /** + * Called when a change in the shown pages is going to start being made. + * + * @param container + * The containing View which is displaying this adapter's page + * views. + * + * @deprecated Use {@link #startUpdate(ViewGroup)} + */ + public void startUpdate(View container) { + } + + /** + * Create the page for the given position. The adapter is responsible for + * adding the view to the container given here, although it only must ensure + * this is done by the time it returns from {@link #finishUpdate(ViewGroup)} + * . + * + * @param container + * The containing View in which the page will be shown. + * @param position + * The page position to be instantiated. + * @return Returns an Object representing the new page. This does not need + * to be a View, but can be some other container of the page. + * + * @deprecated Use {@link #instantiateItem(ViewGroup, int)} + */ + public Object instantiateItem(View container, int position) { + throw new UnsupportedOperationException( + "Required method instantiateItem was not overridden"); + } + + /** + * Remove a page for the given position. The adapter is responsible for + * removing the view from its container, although it only must ensure this + * is done by the time it returns from {@link #finishUpdate(View)}. + * + * @param container + * The containing View from which the page will be removed. + * @param position + * The page position to be removed. + * @param object + * The same object that was returned by + * {@link #instantiateItem(View, int)}. + * + * @deprecated Use {@link #destroyItem(ViewGroup, int, Object)} + */ + public void destroyItem(View container, int position, Object object) { + throw new UnsupportedOperationException( + "Required method destroyItem was not overridden"); + } + + /** + * Called to inform the adapter of which item is currently considered to be + * the "primary", that is the one show to the user as the current page. + * + * @param container + * The containing View from which the page will be removed. + * @param position + * The page position that is now the primary. + * @param object + * The same object that was returned by + * {@link #instantiateItem(View, int)}. + * + * @deprecated Use {@link #setPrimaryItem(ViewGroup, int, Object)} + */ + public void setPrimaryItem(View container, int position, Object object) { + } + + /** + * Called when the a change in the shown pages has been completed. At this + * point you must ensure that all of the pages have actually been added or + * removed from the container as appropriate. + * + * @param container + * The containing View which is displaying this adapter's page + * views. + * + * @deprecated Use {@link #finishUpdate(ViewGroup)} + */ + public void finishUpdate(View container) { + } + + /** + * Determines whether a page View is associated with a specific key object + * as returned by {@link #instantiateItem(ViewGroup, int)}. This method is + * required for a PagerAdapter to function properly. + * + * @param view + * Page View to check for association with <code>object</code> + * @param object + * Object to check for association with <code>view</code> + * @return true if <code>view</code> is associated with the key object + * <code>object</code> + */ + public abstract boolean isViewFromObject(View view, Object object); + + /** + * Save any instance state associated with this adapter and its pages that + * should be restored if the current UI state needs to be reconstructed. + * + * @return Saved state for this adapter + */ + public Parcelable saveState() { + return null; + } + + /** + * Restore any instance state associated with this adapter and its pages + * that was previously saved by {@link #saveState()}. + * + * @param state + * State previously saved by a call to {@link #saveState()} + * @param loader + * A ClassLoader that should be used to instantiate any restored + * objects + */ + public void restoreState(Parcelable state, ClassLoader loader) { + } + + /** + * Called when the host view is attempting to determine if an item's + * position has changed. Returns {@link #POSITION_UNCHANGED} if the position + * of the given item has not changed or {@link #POSITION_NONE} if the item + * is no longer present in the adapter. + * + * <p> + * The default implementation assumes that items will never change position + * and always returns {@link #POSITION_UNCHANGED}. + * + * @param object + * Object representing an item, previously returned by a call to + * {@link #instantiateItem(View, int)}. + * @return object's new position index from [0, {@link #getCount()}), + * {@link #POSITION_UNCHANGED} if the object's position has not + * changed, or {@link #POSITION_NONE} if the item is no longer + * present. + */ + public int getItemPosition(Object object) { + return POSITION_UNCHANGED; + } + + /** + * This method should be called by the application if the data backing this + * adapter has changed and associated views should update. + */ + public void notifyDataSetChanged() { + mObservable.notifyChanged(); + } + + void registerDataSetObserver(DataSetObserver observer) { + mObservable.registerObserver(observer); + } + + void unregisterDataSetObserver(DataSetObserver observer) { + mObservable.unregisterObserver(observer); + } + + /** + * This method may be called by the ViewPager to obtain a title string to + * describe the specified page. This method may return null indicating no + * title for this page. The default implementation returns null. + * + * @param position + * The position of the title requested + * @return A title for the requested page + */ + public CharSequence getPageTitle(int position) { + return null; + } + + /** + * Returns the proportional width of a given page as a percentage of the + * ViewPager's measured width from (0.f-1.f] + * + * @param position + * The position of the page requested + * @return Proportional width for the given page position + */ + public float getPageWidth(int position) { + return 1.f; + } + + public float getPageHeight(int position) { + return 1.f; + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/.gitignore b/src/main/resources/code/android/library-dp/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/main/resources/code/android/library-dp/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/build.gradle b/src/main/resources/code/android/library-dp/build.gradle new file mode 100644 index 0000000..c531382 --- /dev/null +++ b/src/main/resources/code/android/library-dp/build.gradle @@ -0,0 +1,44 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 29 + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + implementation project(path: ':library-common') + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + api project(path: ':library-ad') + + api('com.pangle.cn:pangrowth-sdk:1.7.0.0') { + exclude group: 'com.pangle.cn', module: 'pangrowth-dpsdk-live' + exclude group: 'com.pangle.cn', module: 'pangrowth-game-sdk' + exclude group: 'com.pangle.cn', module: 'pangrowth-luckycat-sdk' + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/proguard-rules.pro b/src/main/resources/code/android/library-dp/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/main/resources/code/android/library-dp/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/androidTest/java/com/demo/library_dp/ExampleInstrumentedTest.java b/src/main/resources/code/android/library-dp/src/androidTest/java/com/demo/library_dp/ExampleInstrumentedTest.java new file mode 100644 index 0000000..5d90d52 --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/androidTest/java/com/demo/library_dp/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.demo.library_dp; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.demo.library_dp", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/main/AndroidManifest.xml b/src/main/resources/code/android/library-dp/src/main/AndroidManifest.xml new file mode 100644 index 0000000..e16e074 --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/main/AndroidManifest.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.demo.library_dp"> + + <uses-sdk tools:overrideLibrary="com.bytedance.pangrowthsdk,com.bytedance.novel.pangolin"></uses-sdk> + + <application + android:allowBackup="true" + tools:replace="android:allowBackup" /> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/main/java/com/demo/library_dp/DPUtil.java b/src/main/resources/code/android/library-dp/src/main/java/com/demo/library_dp/DPUtil.java new file mode 100644 index 0000000..6f0b57b --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/main/java/com/demo/library_dp/DPUtil.java @@ -0,0 +1,61 @@ +package com.demo.library_dp; + +import android.app.Application; + +import com.bytedance.novel.pangolin.NovelConfig; +import com.bytedance.novel.pangolin.NovelSDK; +import com.bytedance.novel.pangolin.PangolinDocker; +import com.bytedance.novel.pangolin.data.NormalFontType; +import com.bytedance.novel.pangolin.data.ReaderFontType; +import com.bytedance.sdk.dp.DPSdk; +import com.bytedance.sdk.dp.DPSdkConfig; +import com.demo.lib.common.util.ManifestDataUtil; +import com.demo.lib.common.util.common.PackageUtils2; + +public class DPUtil { + + + /** + * 灏忚鍒濆鍖� + * + * @param application + * @param settingFileName + */ + public static void initNovel(Application application, String settingFileName) { + NovelConfig config = new NovelConfig.Builder() + .appName(application.getString(R.string.app_name)) //鎺ュ叆灏忚SDK鐨凙pp鐨勮嫳鏂囧悕 蹇呭~ + .appVersionName(PackageUtils2.getVersionName(application)) //鎺ュ叆灏忚SDKApp鐨勭増鏈悕绉� 蹇呭~ + .appVersionCode(PackageUtils2.getVersionCode(application)) //鎺ュ叆灏忚SDK App鐨勭増鏈彿 蹇呭~ + .channel(ManifestDataUtil.getAppMetaData(application, "UMENG_CHANNEL")) //娓犻亾鍙风淮搴︺�傚紑鍙戣�呰嚜瀹氫箟瀛楃涓插嵆鍙�(寤鸿涓嶈鍖呭惈test)銆傞�夊~ + .initInnerApplog(true) // 鏄惁浣跨敤灏忚sdk鏉ュ垵濮嬪寲applog sdk銆傞粯璁や负false锛岄渶瑕佸紑鍙戣�呭湪App涓崟鐙垵濮嬪寲applog sdk锛屼笖蹇呴』鍦ㄥ皬璇磗dk涔嬪墠鍒濆鍖栥�� + .initInnerOpenAdSdk(true) //鏄惁浣跨敤灏忚sdk鏉ュ垵濮嬪寲骞垮憡sdk锛屽鏋滀负true锛岄渶瑕佽缃畇iteId銆傞粯璁や负false锛岄渶寮�鍙戣�呭湪App涓崟鐙垵濮嬪寲骞垮憡sdk骞跺湪灏忚sdk涔嬪墠鍒濆鍖栥�� + .jsonFileName(settingFileName)//json閰嶇疆鏂囦欢鐨勫悕绉� 蹇呭~ + .normalFontSize(NormalFontType.NORMAL) //鍏ㄥ眬瀛楀彿澶у皬 鍙�� + .readerFontSize(ReaderFontType.TWO) //闃呰鍣ㄥ瓧鍙峰ぇ灏� 鍙�� + .build(); + NovelSDK.INSTANCE.attach(new PangolinDocker(config), application); + } + + public static void initDPSDK(Application application, String settingFileName, DPSdkConfig.InitListener initListener) { + if (initListener == null) { + initListener = new DPSdkConfig.InitListener() { + @Override + public void onInitComplete(boolean b) { + } + }; + } + + DPSdkConfig.Builder configBuilder = new DPSdkConfig.Builder() + .debug(false) + .preloadDraw(true) + .needInitAppLog(false) + .setIsAndroidx(true) + .initListener(initListener) //鎺ュ叆浜嗙孩鍖呭姛鑳介渶瑕佷紶鍏ョ殑鍙傛暟锛屾病鏈夋帴鍏ョ殑璇濆彲浠ュ拷鐣ヨ閰嶇疆 +// .luckConfig(new DPSdkConfig.LuckConfig().application(application).enableLuck(false)) +// .liveConfig(new DPSdkConfig.LiveConfig()) + + ;//鑻ユ偍闇�瑕佹帴鍏ョ洿鎾紝鍙傝�冦�岀洿鎾帴鍏ユ枃妗c�嶏紱鍚﹀垯鍙拷鐣ユ鍙傛暟銆� + DPSdk.init(application, settingFileName, configBuilder.build()); + } + +} diff --git a/src/main/resources/code/android/library-dp/src/main/res/values-night/themes.xml b/src/main/resources/code/android/library-dp/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..7046965 --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_200</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/black</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_200</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/main/res/values/colors.xml b/src/main/resources/code/android/library-dp/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="purple_200">#FFBB86FC</color> + <color name="purple_500">#FF6200EE</color> + <color name="purple_700">#FF3700B3</color> + <color name="teal_200">#FF03DAC5</color> + <color name="teal_700">#FF018786</color> + <color name="black">#FF000000</color> + <color name="white">#FFFFFFFF</color> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/main/res/values/strings.xml b/src/main/resources/code/android/library-dp/src/main/res/values/strings.xml new file mode 100644 index 0000000..91ab9a0 --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">library-dp</string> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/main/res/values/themes.xml b/src/main/resources/code/android/library-dp/src/main/res/values/themes.xml new file mode 100644 index 0000000..eb6839e --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_500</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/white</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_700</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-dp/src/test/java/com/demo/library_dp/ExampleUnitTest.java b/src/main/resources/code/android/library-dp/src/test/java/com/demo/library_dp/ExampleUnitTest.java new file mode 100644 index 0000000..fdbbd2a --- /dev/null +++ b/src/main/resources/code/android/library-dp/src/test/java/com/demo/library_dp/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.demo.library_dp; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/.gitignore b/src/main/resources/code/android/library-ec/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/main/resources/code/android/library-ec/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/build.gradle b/src/main/resources/code/android/library-ec/build.gradle new file mode 100644 index 0000000..5ec7ae1 --- /dev/null +++ b/src/main/resources/code/android/library-ec/build.gradle @@ -0,0 +1,75 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 29 + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 29 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + multiDexEnabled true + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + + //-----------------闃块噷鐧惧窛寮�濮�--------------------- + implementation 'com.alibaba.baichuan.sdk:alibclogin:5.0.0.13' + // applink + implementation 'com.alibaba.baichuan.sdk:alibcapplink:5.0.0.13' + // 骞垮憡SDK + implementation 'com.alibaba.baichuan.sdk:alibcad:5.0.0.13' + // 灏忕▼搴� + implementation 'com.alibaba.baichuan.sdk:alibctriver:5.0.0.13' + // c++鍩虹搴擄紙濡傛灉宸ョ▼涓病鏈夋帴鍏ヨso鍖咃細libc++_shared.so锛岄渶瑕佹帴鍏ヨsdk锛� + implementation "llvm.stl:cpp_shared:0.0.3@aar" + // 鐩存挱 + implementation 'com.alibaba.baichuan.sdk:alibctriver_live:5.0.0.13' + // webview瀹瑰櫒 + implementation 'com.alibaba.baichuan.sdk:alibcwebview:5.0.0.13' + // 鐢靛晢鍩虹缁勪欢 + api 'com.alibaba.baichuan.sdk:alibctradecommon:5.0.0.13' + api 'com.alibaba.baichuan.sdk:alibcnbtrade:5.0.0.13' + api 'com.alibaba.baichuan.sdk:alibcprotocol:5.0.0.13' + // 杈呭姪鎺掓煡宸ュ叿锛堝彲閫夛級 + implementation "com.alibaba.baichuan.sdk:alibctools:5.0.0.13" + // 瀹夊叏淇濋晼v6鐗堟湰 + implementation files('libs/securitybodyaar3-5.0.0.9-v6.aar') + implementation files('libs/securityguardaar3-5.0.0.9-v6.aar') + implementation files('libs/sgmiddletieraar3-5.0.0.9-v6.aar') + + implementation 'com.alibaba:fastjson:1.1.71.android' + //-----------------闃块噷鐧惧窛缁撴潫--------------------- + + + //浜笢 + implementation files('libs/jd_crash_lib_release_210.jar') + implementation files('libs/JDSDK_h.jar') + + api 'com.umeng.umsdk:share-wx:7.1.6' //寰俊瀹屾暣鐗� + api 'com.tencent.mm.opensdk:wechat-sdk-android:6.8.0'//寰俊瀹樻柟渚濊禆搴擄紝蹇呴�� +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/libs/JDSDK_h.jar b/src/main/resources/code/android/library-ec/libs/JDSDK_h.jar new file mode 100644 index 0000000..9936e9d --- /dev/null +++ b/src/main/resources/code/android/library-ec/libs/JDSDK_h.jar Binary files differ diff --git a/src/main/resources/code/android/library-ec/libs/jd_crash_lib_release_210.jar b/src/main/resources/code/android/library-ec/libs/jd_crash_lib_release_210.jar new file mode 100644 index 0000000..688718a --- /dev/null +++ b/src/main/resources/code/android/library-ec/libs/jd_crash_lib_release_210.jar Binary files differ diff --git a/src/main/resources/code/android/library-ec/libs/securitybodyaar3-5.0.0.9-v6.aar b/src/main/resources/code/android/library-ec/libs/securitybodyaar3-5.0.0.9-v6.aar new file mode 100644 index 0000000..fb011d9 --- /dev/null +++ b/src/main/resources/code/android/library-ec/libs/securitybodyaar3-5.0.0.9-v6.aar Binary files differ diff --git a/src/main/resources/code/android/library-ec/libs/securityguardaar3-5.0.0.9-v6.aar b/src/main/resources/code/android/library-ec/libs/securityguardaar3-5.0.0.9-v6.aar new file mode 100644 index 0000000..ae11efa --- /dev/null +++ b/src/main/resources/code/android/library-ec/libs/securityguardaar3-5.0.0.9-v6.aar Binary files differ diff --git a/src/main/resources/code/android/library-ec/libs/sgmiddletieraar3-5.0.0.9-v6.aar b/src/main/resources/code/android/library-ec/libs/sgmiddletieraar3-5.0.0.9-v6.aar new file mode 100644 index 0000000..402d933 --- /dev/null +++ b/src/main/resources/code/android/library-ec/libs/sgmiddletieraar3-5.0.0.9-v6.aar Binary files differ diff --git a/src/main/resources/code/android/library-ec/proguard-rules.pro b/src/main/resources/code/android/library-ec/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/main/resources/code/android/library-ec/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/androidTest/java/com/demo/library_ec/ExampleInstrumentedTest.java b/src/main/resources/code/android/library-ec/src/androidTest/java/com/demo/library_ec/ExampleInstrumentedTest.java new file mode 100644 index 0000000..86695e9 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/androidTest/java/com/demo/library_ec/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.demo.library_ec; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.demo.library_ec", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/main/AndroidManifest.xml b/src/main/resources/code/android/library-ec/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a4efb1b --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.demo.library_ec"> + + <application + android:allowBackup="true" + tools:replace="android:allowBackup" /> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/AlibcTradeUtil.java b/src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/AlibcTradeUtil.java new file mode 100644 index 0000000..2cec914 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/AlibcTradeUtil.java @@ -0,0 +1,128 @@ +package com.demo.library_ec; + +import android.app.Activity; +import android.app.Application; +import android.util.Log; +import android.webkit.WebResourceRequest; +import android.webkit.WebView; +import android.webkit.WebViewClient; + +import com.alibaba.alibcprotocol.callback.AlibcTradeCallback; +import com.alibaba.alibcprotocol.param.AlibcShowParams; +import com.alibaba.alibcprotocol.param.AlibcTaokeParams; +import com.alibaba.alibcprotocol.param.OpenType; +import com.alibaba.baichuan.trade.common.utils.AlibcLogger; +import com.baichuan.nb_trade.AlibcTrade; +import com.baichuan.nb_trade.callback.AlibcTradeInitCallback; +import com.baichuan.nb_trade.core.AlibcTradeSDK; + +import java.util.HashMap; +import java.util.Map; + +public class AlibcTradeUtil { + private final static String TAG = "AlibcTradeUtil"; + + + /** + * 鍒濆鍖� + * + * @param application + * @param alibcTradeInitListener + */ + public static void init(Application application, AlibcTradeInitListener alibcTradeInitListener) { + Map<String, Object> params = new HashMap<>(); + AlibcTradeSDK.asyncInit(application, params, new AlibcTradeInitCallback() { + @Override + public void onSuccess() { + AlibcLogger.e(TAG, "SDK鍒濆鍖栨垚鍔�"); + if (alibcTradeInitListener != null) { + alibcTradeInitListener.onSuccess(); + } + } + + @Override + public void onFailure(int code, String msg) { + AlibcLogger.e(TAG, "SDK鍒濆鍖栧け璐ワ細 code = " + code + ", msg = " + msg); + if (alibcTradeInitListener != null) { + alibcTradeInitListener.onFailure(code, msg); + } + } + }); + + } + + /** + * 鎵撳紑閾炬帴 + * + * @param activity + * @param url + * @param showParams + * @param taokeParams + * @param trackParams + * @param callback + */ + public static void openUrl(Activity activity, final String url, AlibcShowParams showParams, AlibcTaokeParams taokeParams, + Map<String, String> trackParams, AlibcTradeCallback callback) { + + if (callback == null) { + callback = new AlibcTradeCallback() { + @Override + public void onSuccess(int code) { + AlibcLogger.i(TAG, "open success: code = " + code); + } + + @Override + public void onFailure(int code, String msg) { + AlibcLogger.e(TAG, "open fail: code = " + code + ", msg = " + msg); + } + }; + } + AlibcTrade.openByUrl(activity, url, showParams, taokeParams, trackParams, callback); + } + + + public static void openAuthLink(Activity activity, String authUrl) { + AlibcShowParams showParams = new AlibcShowParams(); + showParams.setOpenType(OpenType.Auto); + showParams.setNewWindow(false); + //璁剧疆杩斿洖灏忔妸鎵� + showParams.setBackUrl("alisdk://"); + Log.i(TAG, "openAuthLink-start"); + + WebViewClient client = new WebViewClient() { + @Override + public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { + Log.i(TAG, "shouldOverrideUrlLoading"); + return super.shouldOverrideUrlLoading(view, request); + } + + @Override + public boolean shouldOverrideUrlLoading(WebView view, String url) { + Log.i(TAG, url); + return super.shouldOverrideUrlLoading(view, url); + } + }; + + AlibcTrade.openByUrl(activity, authUrl, showParams, + null, + null, new AlibcTradeCallback() { + @Override + public void onSuccess(int i) { + + } + + @Override + public void onFailure(int i, final String s) { + Log.i(TAG, "澶辫触鍥炶皟:" + s); + } + }); + } + + interface AlibcTradeInitListener { + public void onSuccess(); + + public void onFailure(int code, String msg); + } + + +} diff --git a/src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/WXUtil.java b/src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/WXUtil.java new file mode 100644 index 0000000..436e490 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/java/com/demo/library_ec/WXUtil.java @@ -0,0 +1,29 @@ +package com.demo.library_ec; + +import android.content.Context; + +import com.ta.utdid2.android.utils.StringUtils; +import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; + +public class WXUtil { + + /** + * 璺宠浆寰俊灏忕▼搴� + * + * @param mContext + * @param appId + * @param userName + * @param path + */ + public static void jumpWXXCX(Context mContext, String appId, String userName, String path) { + IWXAPI api = WXAPIFactory.createWXAPI(mContext, appId); + WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req(); + req.userName = userName; + if (!StringUtils.isEmpty(path)) + req.path = path; ////鎷夎捣灏忕▼搴忛〉闈㈢殑鍙甫鍙傝矾寰勶紝涓嶅~榛樿鎷夎捣灏忕▼搴忛椤碉紝瀵逛簬灏忔父鎴忥紝鍙互鍙紶鍏� query 閮ㄥ垎锛屾潵瀹炵幇浼犲弬鏁堟灉锛屽锛氫紶鍏� "?foo=bar"銆� + req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;// 鍙�夋墦寮� 寮�鍙戠増锛屼綋楠岀増鍜屾寮忕増 + api.sendReq(req); + } +} diff --git a/src/main/resources/code/android/library-ec/src/main/res/values-night/themes.xml b/src/main/resources/code/android/library-ec/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..7046965 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_200</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/black</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_200</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/main/res/values/colors.xml b/src/main/resources/code/android/library-ec/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="purple_200">#FFBB86FC</color> + <color name="purple_500">#FF6200EE</color> + <color name="purple_700">#FF3700B3</color> + <color name="teal_200">#FF03DAC5</color> + <color name="teal_700">#FF018786</color> + <color name="black">#FF000000</color> + <color name="white">#FFFFFFFF</color> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/main/res/values/strings.xml b/src/main/resources/code/android/library-ec/src/main/res/values/strings.xml new file mode 100644 index 0000000..59d19d7 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ +<resources> + <string name="app_name">library-ec</string> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/main/res/values/themes.xml b/src/main/resources/code/android/library-ec/src/main/res/values/themes.xml new file mode 100644 index 0000000..eb6839e --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_500</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/white</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_700</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-ec/src/test/java/com/demo/library_ec/ExampleUnitTest.java b/src/main/resources/code/android/library-ec/src/test/java/com/demo/library_ec/ExampleUnitTest.java new file mode 100644 index 0000000..2f7f624 --- /dev/null +++ b/src/main/resources/code/android/library-ec/src/test/java/com/demo/library_ec/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.demo.library_ec; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/.gitignore b/src/main/resources/code/android/library-login/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/src/main/resources/code/android/library-login/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/build.gradle b/src/main/resources/code/android/library-login/build.gradle new file mode 100644 index 0000000..4863343 --- /dev/null +++ b/src/main/resources/code/android/library-login/build.gradle @@ -0,0 +1,37 @@ +plugins { + id 'com.android.library' +} + +android { + compileSdkVersion 31 + + defaultConfig { + minSdkVersion 19 + targetSdkVersion 31 + versionCode 1 + versionName "1.0" + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' + } + } + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } +} + +dependencies { + + implementation 'androidx.appcompat:appcompat:1.2.0' + implementation 'com.google.android.material:material:1.3.0' + testImplementation 'junit:junit:4.+' + androidTestImplementation 'androidx.test.ext:junit:1.1.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + implementation project(path: ':library-common') +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/proguard-rules.pro b/src/main/resources/code/android/library-login/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/src/main/resources/code/android/library-login/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/androidTest/java/com/ysvideo/zhibo/library_login/ExampleInstrumentedTest.java b/src/main/resources/code/android/library-login/src/androidTest/java/com/ysvideo/zhibo/library_login/ExampleInstrumentedTest.java new file mode 100644 index 0000000..2db4ac2 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/androidTest/java/com/ysvideo/zhibo/library_login/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package com.demo.library_login; + +import android.content.Context; + +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumented test, which will execute on an Android device. + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); + assertEquals("com.demo.library_login", appContext.getPackageName()); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/AndroidManifest.xml b/src/main/resources/code/android/library-login/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c7314ee --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/AndroidManifest.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="utf-8"?> +<manifest xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + package="com.demo.library_login"> + + <application + android:allowBackup="true" + android:label="@string/app_name" + android:supportsRtl="true" + tools:replace="android:theme" + android:theme="@style/Theme.Android"> + <activity android:name=".ui.RegisterActivity"></activity> + <activity android:name=".ui.ForgetPwdActivity"></activity> + <activity android:name=".ui.EmailLoginActivity"></activity> + </application> + +</manifest> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/entity/LoginApiResult.java b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/entity/LoginApiResult.java new file mode 100644 index 0000000..e58263f --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/entity/LoginApiResult.java @@ -0,0 +1,43 @@ +package com.demo.library_login.entity; + +public class LoginApiResult { + public static int CODE_OK = 0; + private int code; + private Object data; + private String msg; + + public LoginApiResult(int code, Object data, String msg) { + this.code = code; + this.data = data; + this.msg = msg; + } + + public LoginApiResult(int code, String msg) { + this.code = code; + this.msg = msg; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } + + public Object getData() { + return data; + } + + public void setData(Object data) { + this.data = data; + } + + public String getMsg() { + return msg; + } + + public void setMsg(String msg) { + this.msg = msg; + } +} diff --git a/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/ILoginListener.java b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/ILoginListener.java new file mode 100644 index 0000000..2c3a8ea --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/ILoginListener.java @@ -0,0 +1,118 @@ +package com.demo.library_login.inter; + +import android.content.Context; +import android.util.Log; + +import com.demo.library_login.entity.LoginApiResult; + +import java.io.Serializable; + +public class ILoginListener implements Serializable { + + final String TAG = "ILoginListener"; + + /** + * 鍙戦�侀偖绠遍獙璇佺爜 + * + * @param email + * @param callBack + */ + public void sendEmailCode(Context context, String email, LoginApiCallBack callBack) { + Log.i(TAG, "sendEmailCode"); + } + + /** + * 閭鐧诲綍 + * + * @param email + * @param pwd + * @param callBack + */ + public void emailLogin(Context context, String email, String pwd, LoginApiCallBack callBack) { + Log.i(TAG, "emailLogin"); + } + + /** + * 閭娉ㄥ唽 + * + * @param email + * @param vcode + * @param pwd + * @param callBack + */ + public void emailRegister(Context context, String email, String vcode, String pwd, LoginApiCallBack callBack) { + Log.i(TAG, "emailRegister"); + } + + + /** + * 閭淇敼瀵嗙爜 + * + * @param email + * @param vcode + * @param pwd + * @param callBack + */ + public void emailUpdatePwd(Context context, String email, String vcode, String pwd, LoginApiCallBack callBack) { + Log.i(TAG, "emailUpdatePwd"); + } + + + /** + * 鍙戦�佺煭淇¢獙璇佺爜 + * + * @param phone + * @param callBack + */ + public void sendSmsCode(Context context, String phone, LoginApiCallBack callBack) { + Log.i(TAG, "sendSmsCode"); + } + + + /** + * 鎵嬫満鍙风櫥褰� + * + * @param phone + * @param code + * @param callBack + */ + public void phoneLogin(Context context, String phone, String code, LoginApiCallBack callBack) { + Log.i(TAG, "phoneLogin"); + } + + /** + * 鎵嬫満涓�閿櫥褰� + * + * @param token + * @param callBack + */ + public void phoneLogin(Context context, String token, LoginApiCallBack callBack) { + Log.i(TAG, "phoneLogin"); + } + + + /** + * 闅愮鏀跨瓥 + */ + public void onPrivacy(Context context) { + Log.i(TAG, "onPrivacy"); + + } + + /** + * 鐢ㄦ埛鏈嶅姟鍗忚 + */ + public void onProtocol(Context context) { + Log.i(TAG, "onProtocol"); + } + + /** + * 鏄惁鐧诲綍 + * + * @return + */ + public boolean isLogin(Context context) { + return false; + } + +} diff --git a/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/LoginApiCallBack.java b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/LoginApiCallBack.java new file mode 100644 index 0000000..31798ee --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/inter/LoginApiCallBack.java @@ -0,0 +1,20 @@ +package com.demo.library_login.inter; + +import com.demo.library_login.entity.LoginApiResult; + +public abstract class LoginApiCallBack { + + public abstract void onCallBack(LoginApiResult result); + + public void onStart() { + + } + + public void onFinish() { + + } + + public void onFailture(String msg) { + + } +} diff --git a/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/EmailLoginActivity.java b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/EmailLoginActivity.java new file mode 100644 index 0000000..4026705 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/EmailLoginActivity.java @@ -0,0 +1,172 @@ +package com.demo.library_login.ui; + +import android.app.ProgressDialog; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.view.KeyEvent; +import android.view.View; +import android.view.View.OnClickListener; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.util.SingleToast; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.library_login.R; +import com.demo.library_login.entity.LoginApiResult; +import com.demo.library_login.inter.ILoginListener; +import com.demo.library_login.inter.LoginApiCallBack; + +public class EmailLoginActivity extends BaseActivity implements OnClickListener { + public static final int RESULT_LOGIN = 10; + private ProgressDialog dialog; + private TextView tv_cancel;// 鍙栨秷 + private boolean isTouchLogin;// 鐢ㄦ埛鏄惁鐐瑰嚮鐧诲綍 + private String uid; + private String loginType = "";// 鐧诲綍绫诲瀷 榛樿涓虹┖瀛楃 QQ涓�1 + private String openId = "";// 鐢ㄦ埛绗笁鏂圭櫥褰曞敮涓�璇嗗埆鐮� + + private LinearLayout ll_login_content; + private EditText et_name; + private EditText et_pwd; + private CheckBox cb_user_agreement; + private TextView tv_forget_pwd; + private TextView tv_register; + private TextView tv_login; + + private ILoginListener loginListener; + + public void setLoginListener(ILoginListener loginListener) { + this.loginListener = loginListener; + } + + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_login); + loginListener = (ILoginListener) (getIntent().getSerializableExtra("listener")); + + uid = getSharedPreferences("user", Context.MODE_PRIVATE).getString( + "uid", ""); + tv_cancel = findViewById(R.id.login_tv_cancel); + + tv_cancel.setOnClickListener(this); + + dialog = new ProgressDialog(this); + ll_login_content = findViewById(R.id.ll_login_content); + + int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + ll_login_content.measure(w, h); + + et_name = findViewById(R.id.et_name); + et_pwd = findViewById(R.id.et_pwd); + cb_user_agreement = findViewById(R.id.cb_user_agreement); + tv_forget_pwd = findViewById(R.id.tv_forget_pwd); + tv_register = findViewById(R.id.tv_register); + tv_login = findViewById(R.id.tv_login); + tv_forget_pwd.setOnClickListener(this); + tv_register.setOnClickListener(this); + tv_login.setOnClickListener(this); + findViewById(R.id.tv_user_agreement).setOnClickListener(this); + findViewById(R.id.tv_privacy_policy).setOnClickListener(this); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.login_tv_cancel) {// 鍙栨秷 + finish(); + } else if (id == R.id.tv_forget_pwd) { + + startActivity(new Intent(EmailLoginActivity.this, ForgetPwdActivity.class).putExtra("listener", loginListener)); + } else if (id == R.id.tv_user_agreement) { + loginListener.onProtocol(EmailLoginActivity.this); + } else if (id == R.id.tv_privacy_policy) { + loginListener.onPrivacy(EmailLoginActivity.this); + } else if (id == R.id.tv_register) { + startActivity(new Intent(EmailLoginActivity.this, RegisterActivity.class).putExtra("listener", loginListener)); + } else if (id == R.id.tv_login) { + if (cb_user_agreement.isChecked()) + emailLogin(); + else + SingleToast.showToast(EmailLoginActivity.this, "閫夋嫨鍚屾剰鐢ㄦ埛鍗忚鍚庢柟鍙櫥褰�"); + } + } + + /** + * Email鐧诲綍 + */ + private void emailLogin() { + String name = (et_name.getText() + "").trim(); + String pwd = (et_pwd.getText() + "").trim(); + if (StringUtils.isEmpty(name) || StringUtils.isEmpty(pwd)) { + SingleToast.showToast(this, "璐﹀彿鎴栧瘑鐮佷负绌猴紒"); + return; + } + loginListener.emailLogin(EmailLoginActivity.this, name, pwd, new LoginApiCallBack() { + @Override + public void onCallBack(LoginApiResult result) { + if (result.getCode() == LoginApiResult.CODE_OK) { + SingleToast.showToast(EmailLoginActivity.this, "鐧诲綍鎴愬姛锛�"); + EmailLoginActivity.this.finish(); + } else { + SingleToast.showToast(EmailLoginActivity.this, result.getMsg()); + } + } + + @Override + public void onStart() { + super.onStart(); + showLoading(); + } + + @Override + public void onFinish() { + super.onFinish(); + hideLoading(); + } + }); + + } + + @Override + public void onResume() { + super.onResume(); + if (loginListener != null && loginListener.isLogin(getApplicationContext())) { + finish(); + } + } + + @Override + public void onPause() { + super.onPause(); + } + + /** + * 閿佸畾杩斿洖 + */ + private void lockBack(boolean isSure) { + tv_cancel.setEnabled(!isSure); + isTouchLogin = isSure; + + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (isTouchLogin && keyCode == KeyEvent.KEYCODE_BACK) { + return false; + } + return super.onKeyDown(keyCode, event); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + } + +} diff --git a/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/ForgetPwdActivity.java b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/ForgetPwdActivity.java new file mode 100644 index 0000000..8321653 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/ForgetPwdActivity.java @@ -0,0 +1,175 @@ +package com.demo.library_login.ui; + +import android.content.pm.ActivityInfo; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.EditText; +import android.widget.TextView; + +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.util.SingleToast; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.library_login.R; +import com.demo.library_login.entity.LoginApiResult; +import com.demo.library_login.inter.ILoginListener; +import com.demo.library_login.inter.LoginApiCallBack; + +import java.util.Timer; +import java.util.TimerTask; + +/** + * 蹇樿瀵嗙爜锛屼慨鏀瑰瘑鐮� + */ + +public class ForgetPwdActivity extends BaseActivity implements View.OnClickListener { + + private EditText et_email; + private EditText et_verfication_code; + private TextView tv_obtain_verfication_code; + private EditText et_pwd; + private TextView tv_confirm; + + private ILoginListener loginListener; + + public void setLoginListener(ILoginListener loginListener) { + this.loginListener = loginListener; + } + + @Override + protected void onCreate(Bundle arg0) { + super.onCreate(arg0); + loginListener = (ILoginListener) (getIntent().getSerializableExtra("listener")); + setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); + setContentView(R.layout.activity_forget_pwd); + et_email = findViewById(R.id.et_email); + et_verfication_code = findViewById(R.id.et_verfication_code); + tv_obtain_verfication_code = findViewById(R.id.tv_obtain_verfication_code); + et_pwd = findViewById(R.id.et_pwd); + tv_confirm = findViewById(R.id.tv_confirm); + tv_obtain_verfication_code.setOnClickListener(this); + tv_confirm.setOnClickListener(this); + findViewById(R.id.tv_back).setOnClickListener(this); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.tv_obtain_verfication_code) { + String email = et_email.getText().toString(); + if (StringUtils.isEmpty(email)) { + SingleToast.showToast(ForgetPwdActivity.this, "璇峰厛杈撳叆閭鍙�"); + return; + } else { + if (StringUtils.isEmail(email)) { + getVerficationCode(email); + } else { + SingleToast.showToast(ForgetPwdActivity.this, "杈撳叆鐨勯偖绠辫处鍙锋湁璇紝璇锋煡璇侊紒"); + return; + } + } + } else if (id == R.id.tv_confirm) { + String str = et_email.getText().toString(); + if (StringUtils.isEmpty(str)) { + SingleToast.showToast(ForgetPwdActivity.this, "璇峰厛杈撳叆閭鍙�"); + return; + } else { + if (!StringUtils.isEmail(str)) { + SingleToast.showToast(ForgetPwdActivity.this, "杈撳叆鐨勯偖绠辫处鍙锋湁璇紝璇锋煡璇侊紒"); + return; + } + } + if (StringUtils.isEmpty(et_pwd.getText().toString())) { + SingleToast.showToast(ForgetPwdActivity.this, "瀵嗙爜涓嶈兘涓虹┖锛�"); + return; + } + if (et_pwd.getText().toString().length() < 6) { + SingleToast.showToast(ForgetPwdActivity.this, "瀵嗙爜闀垮害涓嶈兘浣庝簬6浣嶏紒"); + return; + } + revisePwd(); + } else if (id == R.id.tv_back) { + finish(); + } + } + + Timer timer; + int timecount = 59; + + /** + * 淇敼瀵嗙爜 + */ + private void revisePwd() { + + String email = (et_email.getText() + "").trim(); + String vcode = (et_verfication_code.getText() + "").trim(); + String pwd = (et_pwd.getText() + "").trim(); + if (StringUtils.isEmpty(email) || StringUtils.isEmpty(vcode) || StringUtils.isEmpty(pwd)) { + SingleToast.showToast(ForgetPwdActivity.this, "鏁版嵁涓嶅畬鏁达紒"); + return; + } + + + if (loginListener != null) + loginListener.emailUpdatePwd(ForgetPwdActivity.this, email, vcode, pwd, new LoginApiCallBack() { + @Override + public void onCallBack(LoginApiResult result) { + if (result.getCode() == LoginApiResult.CODE_OK) { + SingleToast.showToast(ForgetPwdActivity.this, "淇敼瀵嗙爜鎴愬姛锛�"); + ForgetPwdActivity.this.finish(); + } else { + SingleToast.showToast(ForgetPwdActivity.this, result.getMsg()); + } + } + }); + } + + private void getVerficationCode(String email) { + timer = new Timer(); + timer.schedule(new MyTask(), 1000, 1000); + if (loginListener != null) + loginListener.sendEmailCode(ForgetPwdActivity.this, email, new LoginApiCallBack() { + @Override + public void onCallBack(LoginApiResult result) { + if (result.getCode() == LoginApiResult.CODE_OK) { + SingleToast.showToast(ForgetPwdActivity.this, "鑾峰彇楠岃瘉鐮佹垚鍔燂紝璇锋墦寮�閭鏌ョ湅锛�"); + } else { + SingleToast.showToast(ForgetPwdActivity.this, result.getMsg()); + handler.sendEmptyMessage(1); + } + } + }); + } + + class MyTask extends TimerTask { + @Override + public void run() { + if (timecount > 0) { + handler.sendEmptyMessage(0); + } else { + handler.sendEmptyMessage(1); + } + } + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + tv_obtain_verfication_code.setClickable(false); + tv_obtain_verfication_code.setText("閲嶆柊鍙戦��(" + timecount + "s)"); + timecount--; + break; + case 1: + timer.cancel(); + tv_obtain_verfication_code.setText("鑾峰彇楠岃瘉鐮�"); + tv_obtain_verfication_code.setClickable(true); + timecount = 59; + break; + } + } + }; +} diff --git a/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/RegisterActivity.java b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/RegisterActivity.java new file mode 100644 index 0000000..ab597a4 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/java/com/demo/library_login/ui/RegisterActivity.java @@ -0,0 +1,239 @@ +package com.demo.library_login.ui; + +import android.content.SharedPreferences; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.view.View; +import android.widget.CheckBox; +import android.widget.EditText; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.demo.lib.common.activity.BaseActivity; +import com.demo.lib.common.util.SingleToast; +import com.demo.lib.common.util.common.StringUtils; +import com.demo.library_login.R; +import com.demo.library_login.entity.LoginApiResult; +import com.demo.library_login.inter.ILoginListener; +import com.demo.library_login.inter.LoginApiCallBack; + +import java.util.Timer; +import java.util.TimerTask; + +/** + * Created by weikou2015 on 2016/10/27. + */ + +public class RegisterActivity extends BaseActivity implements View.OnClickListener { + + private LinearLayout ll_login_content; + private EditText et_email; + private EditText et_pwd; + private EditText et_verfication_code; + private TextView tv_obtain_verfication_code; + private CheckBox cb_user_agreement; + private TextView tv_confirm; + + + private ILoginListener loginListener; + + public void setLoginListener(ILoginListener loginListener) { + this.loginListener = loginListener; + } + + + @Override + protected void onCreate(Bundle arg0) { + super.onCreate(arg0); + setContentView(R.layout.activity_register); + loginListener = (ILoginListener) (getIntent().getSerializableExtra("listener")); + et_email = findViewById(R.id.et_name); + et_pwd = findViewById(R.id.et_pwd); + et_verfication_code = findViewById(R.id.et_verfication_code); + tv_obtain_verfication_code = findViewById(R.id.tv_obtain_verfication_code); + cb_user_agreement = findViewById(R.id.cb_user_agreement); + tv_confirm = findViewById(R.id.tv_confirm); + ll_login_content = findViewById(R.id.ll_login_content); + + int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); + ll_login_content.measure(w, h); + tv_obtain_verfication_code.setOnClickListener(this); + tv_confirm.setOnClickListener(this); + findViewById(R.id.tv_back).setOnClickListener(this); + findViewById(R.id.tv_user_agreement).setOnClickListener(this); + } + + @Override + public void onClick(View v) { + int id = v.getId(); + if (id == R.id.tv_back) { + finish(); + } else if (id == R.id.tv_user_agreement) { + loginListener.onProtocol(RegisterActivity.this); + } else if (id == R.id.tv_obtain_verfication_code) { + String email = et_email.getText().toString(); + if (StringUtils.isEmpty(email)) { + SingleToast.showToast(RegisterActivity.this, "璇峰厛杈撳叆閭璐﹀彿"); + return; + } + + if (!email.endsWith("@qq.com")) { + SingleToast.showToast(RegisterActivity.this, "璇蜂娇鐢≦Q閭娉ㄥ唽"); + return; + } + + if (StringUtils.isEmail(email)) { + tv_obtain_verfication_code.setEnabled(false); + getVerficationCode(email); + } else { + SingleToast.showToast(RegisterActivity.this, "杈撳叆鐨勯偖绠辫处鍙锋湁璇紝璇锋煡璇侊紒"); + return; + } + } else if (id == R.id.tv_confirm) { + String email1 = et_email.getText().toString(); + String pwd = et_pwd.getText().toString(); + String verficationCode = et_verfication_code.getText().toString(); + if (StringUtils.isEmpty(email1)) { + SingleToast.showToast(RegisterActivity.this, "璇峰厛杈撳叆閭璐﹀彿"); + return; + } else { + if (!email1.endsWith("@qq.com")) { + SingleToast.showToast(RegisterActivity.this, "璇蜂娇鐢≦Q閭娉ㄥ唽"); + return; + } + + if (!StringUtils.isEmail(email1)) { + SingleToast.showToast(RegisterActivity.this, "杈撳叆鐨勯偖绠辫处鍙锋湁璇紝璇锋煡璇侊紒"); + return; + } + } + if (StringUtils.isEmpty(pwd)) { + SingleToast.showToast(RegisterActivity.this, "瀵嗙爜涓嶈兘涓虹┖"); + return; + } + if (pwd.length() < 6) { + SingleToast.showToast(RegisterActivity.this, "瀵嗙爜闀垮害涓嶈兘浣庝簬6浣�"); + return; + } + if (StringUtils.isEmpty(verficationCode)) { + SingleToast.showToast(RegisterActivity.this, "楠岃瘉鐮佷笉鑳戒负绌�"); + return; + } + + if (!cb_user_agreement.isChecked()) { + SingleToast.showToast(RegisterActivity.this, "閫夋嫨鍚屾剰鐢ㄦ埛鍗忚鍚庢柟鍙櫥褰�"); + return; + } + userRegister(); + } + } + + private void userRegister() { + loginListener.emailRegister(RegisterActivity.this, et_email.getText().toString(), et_verfication_code.getText().toString(), et_pwd.getText().toString(), new LoginApiCallBack() { + @Override + public void onCallBack(LoginApiResult result) { + if (result.getCode() == LoginApiResult.CODE_OK) { + SingleToast.showToast(RegisterActivity.this, "娉ㄥ唽鎴愬姛锛�"); + emailLogin(et_email.getText().toString(), et_pwd.getText().toString()); + } else { + SingleToast.showToast(RegisterActivity.this, result.getMsg()); + } + } + + @Override + public void onStart() { + super.onStart(); + showLoading(); + } + + @Override + public void onFinish() { + super.onFinish(); + hideLoading(); + } + }); + } + + /** + * 娉ㄥ唽鎴愬姛鍚庣櫥褰曪紝鑾峰彇鐧诲綍淇℃伅 + */ + /** + * Email鐧诲綍 + */ + private void emailLogin(String email, String pwd) { + loginListener.emailLogin(RegisterActivity.this, email, pwd, new LoginApiCallBack() { + @Override + public void onCallBack(LoginApiResult result) { + if (result.getCode() == LoginApiResult.CODE_OK) { + SingleToast.showToast(RegisterActivity.this, "鐧诲綍鎴愬姛"); + } else { + SingleToast.showToast(RegisterActivity.this, result.getMsg()); + } + } + }); + } + + + Timer timer; + int timecount = 59; + + private void getVerficationCode(String email) { + timer = new Timer(); + timer.schedule(new MyTask(), 1000, 1000); + SharedPreferences sp = getSharedPreferences("user", MODE_PRIVATE); + String uid = sp.getString("uid", ""); + loginListener.sendEmailCode(RegisterActivity.this, email, new LoginApiCallBack() { + @Override + public void onCallBack(LoginApiResult result) { + tv_obtain_verfication_code.setEnabled(true); + if (result == null) + return; + if (result.getCode() == LoginApiResult.CODE_OK) { + SingleToast.showToast(RegisterActivity.this, "鑾峰彇楠岃瘉鐮佹垚鍔燂紝璇锋墦寮�閭鏌ョ湅锛�"); + } else { + SingleToast.showToast(RegisterActivity.this, "鑾峰彇楠岃瘉鐮佸け璐�,璇烽噸鏂拌幏鍙栵紒"); + handler.sendEmptyMessage(1); + } + } + + @Override + public void onFinish() { + super.onFinish(); + tv_obtain_verfication_code.setEnabled(true); + } + }); + } + + class MyTask extends TimerTask { + @Override + public void run() { + if (timecount > 0) { + handler.sendEmptyMessage(0); + } else { + handler.sendEmptyMessage(1); + } + } + } + + Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + super.handleMessage(msg); + switch (msg.what) { + case 0: + tv_obtain_verfication_code.setClickable(false); + tv_obtain_verfication_code.setText("閲嶆柊鍙戦��(" + timecount + "s)"); + timecount--; + break; + case 1: + timer.cancel(); + tv_obtain_verfication_code.setText("鑾峰彇楠岃瘉鐮�"); + tv_obtain_verfication_code.setClickable(true); + timecount = 59; + break; + } + } + }; +} diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_back.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_back.png new file mode 100644 index 0000000..172b69f --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_back.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_login_close.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_login_close.png new file mode 100644 index 0000000..537aa37 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_login_close.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_checked.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_checked.png new file mode 100644 index 0000000..330e7c6 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_checked.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_unchecked.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_unchecked.png new file mode 100644 index 0000000..4d64771 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/ic_user_agreement_unchecked.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_account.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_account.png new file mode 100644 index 0000000..9f8de90 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_account.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_code.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_code.png new file mode 100644 index 0000000..af41700 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_code.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_password.png b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_password.png new file mode 100644 index 0000000..2f435be --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable-xhdpi/icon_login_password.png Binary files differ diff --git a/src/main/resources/code/android/library-login/src/main/res/drawable/selector_user_agreement_checkbox.xml b/src/main/resources/code/android/library-login/src/main/res/drawable/selector_user_agreement_checkbox.xml new file mode 100644 index 0000000..e463cb2 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/drawable/selector_user_agreement_checkbox.xml @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + + <item android:drawable="@drawable/ic_user_agreement_unchecked" android:state_checked="false"></item> + <item android:drawable="@drawable/ic_user_agreement_checked" android:state_checked="true"></item> + +</selector> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/layout/activity_forget_pwd.xml b/src/main/resources/code/android/library-login/src/main/res/layout/activity_forget_pwd.xml new file mode 100644 index 0000000..0566a14 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/layout/activity_forget_pwd.xml @@ -0,0 +1,193 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <View + android:id="@+id/v_status_bar" + android:layout_width="match_parent" + android:layout_height="15dp" /> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + + <FrameLayout + android:id="@+id/fl_nav" + android:layout_width="match_parent" + android:layout_height="48dp" + android:background="@color/transparent"> + + <TextView + android:id="@+id/tv_back" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:drawableLeft="@drawable/ic_back" + android:drawablePadding="3dp" + android:gravity="center_vertical" + android:padding="19dp" + android:text="" + android:textColor="@color/white" + android:textSize="16sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingTop="6dp" + android:paddingBottom="6dp" + android:text="蹇樿瀵嗙爜" + android:textColor="@color/white" + android:textSize="24sp" /> + </FrameLayout> + + + <ScrollView + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingLeft="47dp" + android:paddingRight="47dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_marginTop="30dp" + android:gravity="center" + android:orientation="vertical"> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="18dp" + android:src="@drawable/icon_login_account"></ImageView> + + <EditText + android:id="@+id/et_email" + style="@style/loginInputStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="18dp" + android:digits="@string/rule_email" + android:hint="璇疯緭鍏ユ敞鍐屾椂閭" + android:inputType="textEmailAddress" /> + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="end|bottom" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center_vertical"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="18dp" + android:src="@drawable/icon_login_code"></ImageView> + + <EditText + android:id="@+id/et_verfication_code" + style="@style/loginInputStyle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginLeft="18dp" + android:layout_weight="1" + android:digits="@string/rule_password" + android:hint="璇疯緭鍏ラ獙璇佺爜" + android:inputType="textPassword" /> + </LinearLayout> + + <TextView + android:id="@+id/tv_obtain_verfication_code" + android:layout_width="wrap_content" + android:layout_height="34dp" + android:layout_gravity="right|center_vertical" + android:layout_margin="3dp" + android:background="@color/small_btn" + android:gravity="center" + android:paddingLeft="15dp" + android:paddingRight="15dp" + android:text="鍙戦�侀獙璇佺爜" + android:textColor="@color/theme" + android:textSize="13sp"></TextView> + </FrameLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <ImageView + android:layout_width="wrap_content" + android:layout_height="18dp" + android:src="@drawable/icon_login_password"></ImageView> + + <EditText + android:id="@+id/et_pwd" + style="@style/loginInputStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="18dp" + android:digits="@string/rule_password" + android:hint="杈撳叆鏂板瘑鐮�" + android:inputType="textPassword" /> + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + + <TextView + android:id="@+id/tv_confirm" + android:layout_width="match_parent" + android:layout_height="37dp" + android:layout_marginTop="32dp" + android:background="@color/theme" + android:gravity="center" + android:paddingLeft="14dp" + android:paddingRight="14dp" + android:text="纭� 璁�" + android:textColor="@color/white" + android:textSize="17sp" /> + + </LinearLayout> + </ScrollView> + + </LinearLayout> +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/layout/activity_login.xml b/src/main/resources/code/android/library-login/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..53d6a1a --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/layout/activity_login.xml @@ -0,0 +1,247 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + <View + android:id="@+id/v_status_bar" + android:layout_width="match_parent" + android:layout_height="15dp" /> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"> + + + <LinearLayout + + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + + <FrameLayout + android:id="@+id/fl_nav" + android:layout_width="match_parent" + android:layout_height="48dp" + android:background="@color/transparent"> + + <TextView + android:id="@+id/login_tv_cancel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:drawableLeft="@drawable/ic_login_close" + android:gravity="center_vertical" + android:padding="19dp" + android:text="杩斿洖" + android:textColor="@color/white" + android:textSize="16sp" /> + + + </FrameLayout> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1" + android:orientation="vertical"> + + <LinearLayout + android:id="@+id/ll_login_content" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginLeft="50dp" + android:layout_marginTop="120dp" + android:layout_marginRight="50dp" + android:focusable="true" + android:focusableInTouchMode="true" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <ImageView + android:layout_width="18dp" + android:layout_height="wrap_content" + android:src="@drawable/icon_login_account"></ImageView> + + <EditText + android:id="@+id/et_name" + style="@style/loginInputStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="18dp" + android:background="@null" + android:digits="@string/rule_email" + android:hint="璇疯緭鍏ユ偍鐨勯偖绠�" + android:inputType="textEmailAddress" /> + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <ImageView + android:layout_width="18dp" + android:layout_height="wrap_content" + android:src="@drawable/icon_login_password"></ImageView> + + <EditText + android:id="@+id/et_pwd" + style="@style/loginInputStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="18dp" + android:background="@null" + android:digits="@string/rule_password" + android:hint="璇疯緭鍏ュ瘑鐮�" + android:inputType="textPassword" /> + </LinearLayout> + + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + </LinearLayout> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="10dp"> + + + <TextView + android:id="@+id/tv_register" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="娉ㄥ唽甯愬彿" + android:textColor="@color/theme" + android:textSize="12sp" /> + + + <TextView + android:id="@+id/tv_forget_pwd" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="right" + android:text="蹇樿瀵嗙爜" + android:textColor="@color/theme" + android:textSize="12sp" /> + + </FrameLayout> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="55dp" + android:orientation="horizontal"> + + + <TextView + android:id="@+id/tv_login" + android:layout_width="match_parent" + android:layout_height="39dp" + android:background="@color/theme" + android:gravity="center" + android:paddingLeft="14dp" + android:paddingRight="14dp" + android:text="鐧诲綍" + android:textColor="@color/white" + android:textSize="17sp" /> + </LinearLayout> + + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_weight="1"></View> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginBottom="14dp" + android:gravity="center_horizontal" + android:orientation="horizontal"> + + <CheckBox + android:id="@+id/cb_user_agreement" + android:layout_width="15dp" + android:layout_height="15dp" + android:layout_gravity="center_vertical" + android:background="@drawable/selector_user_agreement_checkbox" + android:button="@null" + android:gravity="center" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="6.5dp" + android:text="鍕鹃�夎〃绀哄悓鎰� " + android:textColor="#FF999999" + android:textSize="11sp" /> + + <TextView + android:id="@+id/tv_user_agreement" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/user_agreement" + android:textColor="@color/theme" + android:textSize="11sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text=" 鍜� " + android:textColor="#FF999999" + android:textSize="11sp" /> + + <TextView + android:id="@+id/tv_privacy_policy" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/privacy_policy" + android:textColor="@color/theme" + android:textSize="11sp" /> + </LinearLayout> + </LinearLayout> + </LinearLayout> + </FrameLayout> +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/layout/activity_register.xml b/src/main/resources/code/android/library-login/src/main/res/layout/activity_register.xml new file mode 100644 index 0000000..380dfce --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/layout/activity_register.xml @@ -0,0 +1,247 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:background="@color/white" + android:orientation="vertical"> + + + <View + android:id="@+id/v_status_bar" + android:layout_width="match_parent" + android:layout_height="15dp" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + + <FrameLayout + android:id="@+id/fl_nav" + android:layout_width="match_parent" + android:layout_height="48dp"> + + <TextView + android:id="@+id/tv_back" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center_vertical" + android:drawableLeft="@drawable/ic_back" + android:drawablePadding="3dp" + android:gravity="center_vertical" + android:padding="19dp" + android:text="杩斿洖" + android:textColor="@color/white" + android:textSize="16sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="center" + android:paddingTop="6dp" + android:paddingBottom="6dp" + android:text="娉ㄥ唽" + android:textColor="@color/white" + android:textSize="20sp" /> + </FrameLayout> + + + <LinearLayout + android:id="@+id/ll_login_content" + android:layout_width="match_parent" + android:layout_height="0dp" + android:layout_marginLeft="50dp" + android:layout_marginTop="120dp" + android:layout_marginRight="50dp" + android:layout_weight="1" + android:gravity="top" + android:orientation="vertical"> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <ImageView + android:layout_width="18dp" + android:layout_height="wrap_content" + android:src="@drawable/icon_login_account"></ImageView> + + <EditText + android:id="@+id/et_name" + style="@style/loginInputStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + + android:layout_marginLeft="18dp" + android:digits="@string/rule_email" + android:hint="璇疯緭鍏ラ偖绠�" + android:inputType="textEmailAddress" /> + </LinearLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + + <FrameLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="end|bottom" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:layout_gravity="center_vertical"> + + <ImageView + android:layout_width="18dp" + android:layout_height="wrap_content" + android:src="@drawable/icon_login_code"></ImageView> + + <EditText + android:id="@+id/et_verfication_code" + style="@style/loginInputStyle" + android:layout_width="0dp" + android:layout_height="wrap_content" + android:layout_gravity="bottom" + android:layout_marginLeft="18dp" + android:layout_weight="1" + android:digits="@string/rule_password" + android:hint="璇疯緭鍏ラ獙璇佺爜" + android:inputType="textPassword" /> + </LinearLayout> + + <TextView + android:id="@+id/tv_obtain_verfication_code" + android:layout_width="wrap_content" + android:layout_height="30dp" + android:layout_gravity="right|center_vertical" + android:layout_margin="3dp" + android:background="@color/small_btn" + android:gravity="center" + android:paddingLeft="15dp" + android:paddingRight="15dp" + android:text="鍙戦�侀獙璇佺爜" + android:textColor="@color/theme" + android:textSize="13sp"></TextView> + </FrameLayout> + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="15dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingTop="12dp" + android:paddingBottom="12dp"> + + <ImageView + android:layout_width="18dp" + android:layout_height="wrap_content" + android:src="@drawable/icon_login_password"></ImageView> + + <EditText + android:id="@+id/et_pwd" + style="@style/loginInputStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginLeft="18dp" + android:background="@null" + android:digits="@string/rule_password" + android:hint="璇疯缃瘑鐮�" /> + </LinearLayout> + + + <View + android:layout_width="match_parent" + android:layout_height="1px" + android:background="@color/cut_line"></View> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="58dp" + android:orientation="horizontal"> + + + <TextView + android:id="@+id/tv_confirm" + android:layout_width="match_parent" + android:layout_height="37dp" + android:background="@color/theme" + android:gravity="center" + android:paddingLeft="14dp" + android:paddingRight="14dp" + android:text="娉� 鍐�" + android:textColor="@color/white" + android:textSize="17sp" /> + </LinearLayout> + </LinearLayout> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center_horizontal" + android:layout_marginBottom="14dp" + android:gravity="center_horizontal" + android:orientation="horizontal"> + + <CheckBox + android:id="@+id/cb_user_agreement" + android:layout_width="15dp" + android:layout_height="15dp" + android:layout_gravity="center_vertical" + android:background="@drawable/selector_user_agreement_checkbox" + android:button="@null" + android:gravity="center" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="6.5dp" + android:text="娉ㄥ唽骞跺悓鎰� " + android:textColor="#FF999999" + android:textSize="11sp" /> + + <TextView + android:id="@+id/tv_user_agreement" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/user_agreement" + android:textColor="@color/theme" + android:textSize="11sp" /> + + <TextView + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text=" 鍜� " + android:textColor="#FF999999" + android:textSize="11sp" /> + + <TextView + android:id="@+id/tv_privacy_policy" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/privacy_policy" + android:textColor="@color/theme" + android:textSize="11sp" /> + </LinearLayout> + + + </LinearLayout> +</LinearLayout> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/values-night/themes.xml b/src/main/resources/code/android/library-login/src/main/res/values-night/themes.xml new file mode 100644 index 0000000..7046965 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/values-night/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_200</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/black</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_200</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/values/colors.xml b/src/main/resources/code/android/library-login/src/main/res/values/colors.xml new file mode 100644 index 0000000..80324ae --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/values/colors.xml @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + <color name="purple_200">#FFBB86FC</color> + <color name="purple_500">#FF6200EE</color> + <color name="purple_700">#FF3700B3</color> + <color name="teal_200">#FF03DAC5</color> + <color name="teal_700">#FF018786</color> + <color name="black">#FF000000</color> + <color name="white">#FFFFFFFF</color> + + <color name="theme">#FF00AFFF</color> + + <color name="cut_line">#FFDDDDDD</color> + + <color name="small_btn">#FFE5F5FF</color> + + <color name="input_text">#FF333333</color> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/values/strings.xml b/src/main/resources/code/android/library-login/src/main/res/values/strings.xml new file mode 100644 index 0000000..1fa473d --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/values/strings.xml @@ -0,0 +1,7 @@ +<resources> + <string name="app_name">library-login</string> + <string name="user_agreement">鐢ㄦ埛鍗忚</string> + <string name="privacy_policy">闅愮鏀跨瓥</string> + <string name="rule_password">0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ`卢!"拢$%^*()~=#{}[];':,./?/*-_+<>@&</string> + <string name="rule_email">0123456789abcdefghijklmnopqrstuvwxyz@.</string> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/values/styles.xml b/src/main/resources/code/android/library-login/src/main/res/values/styles.xml new file mode 100644 index 0000000..a049745 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/values/styles.xml @@ -0,0 +1,12 @@ +<?xml version="1.0" encoding="utf-8"?> +<resources> + + <style name="loginInputStyle"> + <item name="android:background">@null</item> + <item name="android:singleLine">true</item> + <item name="android:textColor">@color/input_text</item> +<!-- <item name="android:textCursorDrawable">@drawable/shape_login_input_cursor</item>--> + <item name="android:textSize">14sp</item> + </style> + +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/main/res/values/themes.xml b/src/main/resources/code/android/library-login/src/main/res/values/themes.xml new file mode 100644 index 0000000..eb6839e --- /dev/null +++ b/src/main/resources/code/android/library-login/src/main/res/values/themes.xml @@ -0,0 +1,16 @@ +<resources xmlns:tools="http://schemas.android.com/tools"> + <!-- Base application theme. --> + <style name="Theme.Android" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> + <!-- Primary brand color. --> + <item name="colorPrimary">@color/purple_500</item> + <item name="colorPrimaryVariant">@color/purple_700</item> + <item name="colorOnPrimary">@color/white</item> + <!-- Secondary brand color. --> + <item name="colorSecondary">@color/teal_200</item> + <item name="colorSecondaryVariant">@color/teal_700</item> + <item name="colorOnSecondary">@color/black</item> + <!-- Status bar color. --> + <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> + <!-- Customize your theme here. --> + </style> +</resources> \ No newline at end of file diff --git a/src/main/resources/code/android/library-login/src/test/java/com/ysvideo/zhibo/library_login/ExampleUnitTest.java b/src/main/resources/code/android/library-login/src/test/java/com/ysvideo/zhibo/library_login/ExampleUnitTest.java new file mode 100644 index 0000000..d147112 --- /dev/null +++ b/src/main/resources/code/android/library-login/src/test/java/com/ysvideo/zhibo/library_login/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package com.demo.library_login; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see <a href="http://d.android.com/tools/testing">Testing documentation</a> + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/src/main/resources/code/android/settings.gradle b/src/main/resources/code/android/settings.gradle new file mode 100644 index 0000000..f862837 --- /dev/null +++ b/src/main/resources/code/android/settings.gradle @@ -0,0 +1,37 @@ +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + maven { + url "https://maven.aliyun.com/repository/public" + } + + maven { + url "https://maven.aliyun.com/repository/google" + } + mavenCentral() + + //绌垮北鐢� + maven { + url 'https://artifact.bytedance.com/repository/pangle' + } + + //鐏北寮曟搸maven浠撳簱鍦板潃 + maven { url 'https://artifact.bytedance.com/repository/Volcengine/' } + + //闃块噷鐧惧窛 + maven { + url "http://repo.baichuan-android.taobao.com/content/groups/BaichuanRepositories/" + } + + jcenter() + + maven { url 'https://jitpack.io' } + } +} +rootProject.name = "Android" +include ':app' +include ':library-common' +include ':library-ad' +include ':library-ec' +include ':library-dp' +include ':library-login' \ No newline at end of file diff --git a/src/main/resources/static/android.html b/src/main/resources/static/android.html new file mode 100644 index 0000000..521c2de --- /dev/null +++ b/src/main/resources/static/android.html @@ -0,0 +1,101 @@ +<!doctype html> +<html class="x-admin-sm"> +<head> + <meta charset="UTF-8"> + <title>鏈嶅姟妯℃澘</title> + <meta name="renderer" content="webkit|ie-comp|ie-stand"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" + content="width=device-width,user-scalable=yes, minimum-scale=0.4, initial-scale=0.8,target-densitydpi=low-dpi"/> + <meta http-equiv="Cache-Control" content="no-siteapp"/> + + <link rel="stylesheet" href="./css/font.css"> + <link rel="stylesheet" href="./css/xadmin.css"> + <link rel="stylesheet" href="./css/theme3049.min.css"> + + <!-- <link rel="stylesheet" href="./css/theme5.css"> --> + + <script type="text/javascript" src="./js/xadmin.js"></script> + <script src="js/vue.min.js" type="text/javascript" charset="utf-8"></script> + <script src="js/http.js" type="text/javascript" charset="utf-8"></script> + <!-- 璁㊣E8/9鏀寔濯掍綋鏌ヨ锛屼粠鑰屽吋瀹规爡鏍� --> + <!--[if lt IE 9]> + <script src="https://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script> + <script src="https://cdn.staticfile.org/respond.js/1.4.2/respond.min.js"></script> + <![endif]--> + <script> + // 鏄惁寮�鍚埛鏂拌蹇唗ab鍔熻兘 + // var is_remember = false; + </script> + + <script type="text/javascript" src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script> + + <style> + + body { + padding: 2rem; + } + + button { + margin-top: 1rem; + } + + p { + line-height: 1.5rem; + } + + input[type=text] { + width: 20rem; + margin-top: 0.5rem; + } + + + </style> + + +</head> +<body> +<p><b>绠�浠�</b></p> +<p>Android妯℃澘鏄竴涓狝ndroid Studio鐨勯」鐩紝椤圭洰涓泦鎴愪簡甯哥敤鐨勬鏋讹細 </p> +<p style="color: red;">涓嬭浇浠g爜涔嬪墠闇�濉啓濡備笅淇℃伅锛�</p> + +<p> + <input type="text" class="layui-text" placeholder="璇峰~鍐欓」鐩悕绉�(涓枃)"> +</p> +<p> + <input type="text" class="layui-text" placeholder="璇峰~鍐欓」鐩寘鍚嶏紙濡俢om.demo锛�"> +</p> + + +<button class="layui-btn" onclick="startDownLoad()">涓嬭浇Android妯℃澘</button> + +<!-- 涓儴缁撴潫 --> +<script src="./lib/layui/layui.all.js" charset="utf-8"></script> +</body> +<script> + var $, layer; + layui.use(['layer', 'jquery'], function () { + layer = layui.layer; + $ = layui.jquery; + }); + + function startDownLoad() { + ksapp.post("api/generator/createAndroid", { + name: $("input[type=text]").eq(0).val(), + pks: $("input[type=text]").eq(1).val(), + subpks: $("input[type=text]").eq(2).val() + }, function (res) { + if (res.code == 0) { + window.location.href = "api/generator/downloadZIP?name=" + encodeURIComponent(res.data) + } else { + layer.msg(res.msg); + } + + }, function (res) { + + }); + } + + +</script> +</html> diff --git a/src/main/resources/static/index.html b/src/main/resources/static/index.html index 737408e..32dc304 100644 --- a/src/main/resources/static/index.html +++ b/src/main/resources/static/index.html @@ -47,7 +47,18 @@ <cite>鍚庡彴鏈嶅姟</cite> </a> + + </li> + + + <li> + <a onclick="xadmin.add_tab('Android妯℃澘','android.html')"> + <i class="iconfont left-nav-li" lay-tips="Android"></i> + <cite>Android</cite> + </a> + </li> + </ul> </div> </div> diff --git a/src/main/resources/static/service.html b/src/main/resources/static/service.html index 12c8a2e..81b5046 100644 --- a/src/main/resources/static/service.html +++ b/src/main/resources/static/service.html @@ -94,7 +94,7 @@ subpks: $("input[type=text]").eq(2).val() }, function (res) { if (res.code == 0) { - window.location.href = "api/generator/downloadServiceZIP?name=" + encodeURIComponent(res.data) + window.location.href = "api/generator/downloadZIP?name=" + encodeURIComponent(res.data) } else { layer.msg(res.msg); } -- Gitblit v1.8.0