├── .gitignore ├── LICENSE ├── README.md ├── Techo.rp ├── Techo.sketch ├── app ├── .gitignore ├── README.md ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── assets │ ├── font │ │ ├── CabinSketch-Regular.ttf │ │ ├── Catamaran-Regular.ttf │ │ ├── Dynalight-Regular.ttf │ │ ├── FrederickaTheGreat-Regular.ttf │ │ ├── Limelight-Regular.ttf │ │ ├── MissFajarDose-Regular.ttf │ │ ├── Monoton-Regular.ttf │ │ ├── Oregano-Regular.ttf │ │ ├── Playball-Regular.ttf │ │ ├── PoiretOne-Regular.ttf │ │ ├── RougeScript-Regular.ttf │ │ ├── Ruthie-Regular.ttf │ │ └── Tangerine-Regular.ttf │ └── split │ │ └── SplitConfig.json │ ├── ic_launcher-playstore.png │ ├── java │ └── com │ │ └── lollipop │ │ └── techo │ │ ├── LApplication.kt │ │ ├── activity │ │ ├── BaseActivity.kt │ │ ├── BasicListActivity.kt │ │ ├── DemoActivity.kt │ │ ├── HeaderActivity.kt │ │ ├── MainActivity.kt │ │ ├── SingleFragmentActivity.kt │ │ ├── TechoDetailActivity.kt │ │ ├── TechoEditActivity.kt │ │ ├── TechoThemeSelectActivity.kt │ │ └── WebActivity.kt │ │ ├── data │ │ ├── AppTheme.kt │ │ ├── CustomTechoTheme.kt │ │ ├── FontStyle.kt │ │ ├── HeaderImageInfo.kt │ │ ├── RequestService.kt │ │ ├── TechoDbUtil.kt │ │ ├── TechoFlag.kt │ │ ├── TechoInfo.kt │ │ ├── TechoItem.kt │ │ ├── TechoItemType.kt │ │ ├── TechoMode.kt │ │ ├── TechoModeBuilder.kt │ │ ├── TechoTheme.kt │ │ ├── TextSpan.kt │ │ └── json │ │ │ ├── Json.kt │ │ │ └── JsonInfo.kt │ │ ├── dialog │ │ ├── AudioPlayerDialog.kt │ │ ├── BaseBottomSheetDialog.kt │ │ ├── OptionMenuDialog.kt │ │ └── options │ │ │ └── OptionTextItem.kt │ │ ├── drawable │ │ ├── CircularProgressDrawable.kt │ │ └── MosaicDrawable.kt │ │ ├── edit │ │ ├── EditManager.kt │ │ ├── PanelController.kt │ │ ├── base │ │ │ ├── BottomEditDelegate.kt │ │ │ ├── EditDelegate.kt │ │ │ └── TopEditDelegate.kt │ │ └── impl │ │ │ ├── PhotoEditDelegate.kt │ │ │ ├── SplitEditDelegate.kt │ │ │ ├── TextEditDelegate.kt │ │ │ └── textOption │ │ │ └── FrameManager.kt │ │ ├── fragment │ │ ├── BaseFragment.kt │ │ ├── PageFragment.kt │ │ └── RichTextOptionFragment.kt │ │ ├── list │ │ ├── detail │ │ │ ├── DetailListAdapter.kt │ │ │ ├── EditHolder.kt │ │ │ ├── PhotoInfoHolder.kt │ │ │ ├── SplitInfoHolder.kt │ │ │ ├── TextInfoHolder.kt │ │ │ └── TitleInfoHolder.kt │ │ └── home │ │ │ ├── HomeListAdapter.kt │ │ │ └── TechoHolder.kt │ │ ├── option │ │ ├── OptionDialog.kt │ │ ├── item │ │ │ ├── Option.kt │ │ │ └── OptionDefault.kt │ │ └── share │ │ │ └── ShareType.kt │ │ ├── qr │ │ ├── QrCreateActivity.kt │ │ ├── QrResultActivity.kt │ │ ├── QrScanningActivity.kt │ │ └── result │ │ │ ├── QrResultBaseHolder.kt │ │ │ ├── QrResultContactHolder.kt │ │ │ ├── QrResultEmailHolder.kt │ │ │ ├── QrResultListAdapter.kt │ │ │ ├── QrResultTextHolder.kt │ │ │ └── QrResultWifiHolder.kt │ │ ├── recorder │ │ ├── RecorderActivity.kt │ │ ├── RecorderWave.kt │ │ └── RecorderWaveView.kt │ │ ├── split │ │ ├── SplitDrawable.kt │ │ ├── SplitLoader.kt │ │ ├── SplitView.kt │ │ └── impl │ │ │ └── DottedLineDrawable.kt │ │ ├── util │ │ ├── AnimationHelper.kt │ │ ├── AppUtil.kt │ │ ├── BlurTransformation.kt │ │ ├── CircleAnimationGroup.kt │ │ ├── FontHelper.kt │ │ ├── Preferences.kt │ │ ├── RichTextHelper.kt │ │ ├── TextSelectedHelper.kt │ │ └── permission │ │ │ ├── PermissionInfo.kt │ │ │ ├── PermissionLauncher.kt │ │ │ ├── PermissionLauncherManager.kt │ │ │ └── PermissionResult.kt │ │ └── view │ │ └── PassiveScrollView.kt │ └── res │ ├── anim │ ├── dialog_alpha_in.xml │ ├── dialog_alpha_out.xml │ ├── dialog_top_in.xml │ └── dialog_top_out.xml │ ├── color │ ├── color_rich_option_stroke.xml │ └── color_rich_option_surface.xml │ ├── drawable │ ├── ic_baseline_add_24.xml │ ├── ic_baseline_arrow_back_24.xml │ ├── ic_baseline_arrow_circle_right_24.xml │ ├── ic_baseline_arrow_forward_24.xml │ ├── ic_baseline_blur_linear_24.xml │ ├── ic_baseline_close_24.xml │ ├── ic_baseline_color_lens_24.xml │ ├── ic_baseline_delete_24.xml │ ├── ic_baseline_done_24.xml │ ├── ic_baseline_drag_handle_24.xml │ ├── ic_baseline_edit_24.xml │ ├── ic_baseline_flash_off_24.xml │ ├── ic_baseline_flash_on_24.xml │ ├── ic_baseline_format_bold_24.xml │ ├── ic_baseline_format_italic_24.xml │ ├── ic_baseline_format_line_spacing_24.xml │ ├── ic_baseline_format_list_numbered_24.xml │ ├── ic_baseline_format_paint_24.xml │ ├── ic_baseline_format_shapes_24.xml │ ├── ic_baseline_format_size_24.xml │ ├── ic_baseline_format_strikethrough_24.xml │ ├── ic_baseline_format_underlined_24.xml │ ├── ic_baseline_horizontal_split_24.xml │ ├── ic_baseline_mic_24.xml │ ├── ic_baseline_more_vert_24.xml │ ├── ic_baseline_notes_24.xml │ ├── ic_baseline_palette_24.xml │ ├── ic_baseline_qr_code_24.xml │ ├── ic_baseline_save_24.xml │ ├── ic_baseline_settings_24.xml │ ├── ic_baseline_stop_24.xml │ ├── ic_baseline_subscript_24.xml │ ├── ic_baseline_superscript_24.xml │ ├── ic_baseline_video_call_24.xml │ ├── ic_baseline_warning_24.xml │ ├── ic_launcher_background.xml │ ├── ic_launcher_foreground.xml │ ├── ic_launcher_foreground_line.xml │ ├── ic_like.xml │ ├── ic_moments.xml │ ├── ic_outline_check_box_24.xml │ ├── ic_outline_insert_photo_24.xml │ ├── ic_qq.xml │ ├── ic_qzone.xml │ ├── ic_splash_techo.xml │ ├── ic_topping.xml │ ├── ic_topping_not.xml │ ├── ic_unlike.xml │ ├── ic_wechat.xml │ └── ic_weibo.xml │ ├── layout │ ├── activity_basic_list.xml │ ├── activity_demo.xml │ ├── activity_header.xml │ ├── activity_main_floating.xml │ ├── activity_qr_create.xml │ ├── activity_qr_result.xml │ ├── activity_qr_scanning.xml │ ├── activity_recorder.xml │ ├── activity_single_fragment.xml │ ├── activity_techo_edit_floating.xml │ ├── activity_web.xml │ ├── dialog_audio_play.xml │ ├── dialog_option.xml │ ├── dialog_option_brackets_text_item.xml │ ├── dialog_option_menu.xml │ ├── fragment_rich_text_option.xml │ ├── item_color_histroy.xml │ ├── item_edit_group.xml │ ├── item_home_techo.xml │ ├── item_option.xml │ ├── item_panel_text_option_frame.xml │ ├── item_panel_text_option_frame_add.xml │ ├── item_photo.xml │ ├── item_photo_edit.xml │ ├── item_qr_result.xml │ ├── item_split.xml │ ├── item_techo_theme.xml │ ├── item_text.xml │ ├── item_title.xml │ ├── panel_photo_select.xml │ ├── panel_split_select.xml │ └── panel_text_edit.xml │ ├── menu │ └── menu_edit_rich_text_tab.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── values-night │ ├── colors.xml │ └── themes.xml │ ├── values-v31 │ └── themes.xml │ └── values │ ├── attrs.xml │ ├── colors.xml │ ├── dimens.xml │ ├── option_colors.xml │ ├── option_strings.xml │ ├── share_colors.xml │ ├── share_strings.xml │ ├── strings.xml │ ├── strings_vector.xml │ └── themes.xml ├── base ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── base │ ├── graphics │ └── LDrawable.kt │ ├── list │ ├── LoadMoreHelper.kt │ └── TouchableHolder.kt │ ├── listener │ ├── BackPressHandler.kt │ └── BackPressListener.kt │ └── util │ ├── ActivityHelper.kt │ ├── ActivityLauncherHelper.kt │ ├── ClassHelper.kt │ ├── Clipboard.kt │ ├── CommonUtil.kt │ ├── DatabaseHelper.kt │ ├── FragmentHelper.kt │ ├── ItemDecorationHelper.kt │ ├── ListenerManager.kt │ ├── ShareSheet.kt │ ├── SingleTouchHelper.kt │ ├── SingleTouchSlideHelper.kt │ ├── TxtHelper.kt │ ├── ViewBindingHelper.kt │ ├── ViewFindDelegate.kt │ └── richtext │ ├── CenterAlignImageSpan.kt │ └── RichText.kt ├── bigBoom ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── bigboom │ ├── Basket.kt │ ├── BigBoomManager.kt │ ├── BigBoomView.kt │ ├── BoomFlow.kt │ ├── Explosive.kt │ ├── PatchesHolder.kt │ ├── PatchesItemProvider.kt │ ├── PatchesStatus.kt │ ├── PresetExplosive.kt │ ├── explosive │ └── CharExplosive.kt │ └── item │ └── RectanglePatchesItemProvider.kt ├── browser ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── lollipop │ │ └── browser │ │ ├── BrowserApplication.kt │ │ ├── base │ │ ├── BaseBottomSheetDialog.kt │ │ └── HeaderActivity.kt │ │ ├── bridge │ │ └── BridgeConfig.kt │ │ ├── copyright │ │ ├── CopyrightActivity.kt │ │ └── CopyrightIcons8Activity.kt │ │ ├── download │ │ └── DownloadManager.kt │ │ ├── history │ │ ├── HistoryDao.kt │ │ ├── HistoryInfo.kt │ │ └── HistoryManager.kt │ │ ├── main │ │ ├── MainActivity.kt │ │ ├── MainPageDelegate.kt │ │ └── launcher │ │ │ ├── LauncherEditActivity.kt │ │ │ ├── LauncherHolder.kt │ │ │ ├── LauncherInfo.kt │ │ │ └── LauncherManager.kt │ │ ├── secret │ │ ├── SecretDialog.kt │ │ └── SecretKeyboardView.kt │ │ ├── test │ │ └── TestActivity.kt │ │ ├── utils │ │ └── FileInfoManager.kt │ │ ├── view │ │ ├── PageGroup.kt │ │ └── WebProgressBar.kt │ │ └── web │ │ ├── WebPageFragment.kt │ │ └── WebStatusManager.kt │ └── res │ ├── drawable-v24 │ └── ic_launcher_foreground.xml │ ├── drawable │ ├── bg_bottom_sheet_header.xml │ ├── header_main_1.png │ ├── ic_baidu.xml │ ├── ic_baseline_arrow_back_24.xml │ ├── ic_baseline_arrow_forward_24.xml │ ├── ic_baseline_bookmarks_24.xml │ ├── ic_baseline_clear_24.xml │ ├── ic_baseline_done_24.xml │ ├── ic_baseline_download_24.xml │ ├── ic_baseline_history_24.xml │ ├── ic_baseline_info_24.xml │ ├── ic_baseline_insert_drive_file_24.xml │ ├── ic_baseline_language_24.xml │ ├── ic_baseline_numbers_24.xml │ ├── ic_baseline_refresh_24.xml │ ├── ic_baseline_search_24.xml │ ├── ic_baseline_settings_24.xml │ ├── ic_baseline_share_24.xml │ ├── ic_baseline_star_24.xml │ ├── ic_bing.xml │ ├── ic_google.xml │ ├── ic_icons8.xml │ └── ic_launcher_background.xml │ ├── layout │ ├── activity_copyright_icons8.xml │ ├── activity_header.xml │ ├── activity_launcher_edit.xml │ ├── activity_main.xml │ ├── activity_test.xml │ ├── dialog_base_bottom_sheet.xml │ ├── dialog_secret.xml │ ├── dialog_secret_button.xml │ ├── fragment_web_page.xml │ ├── header_copyright.xml │ ├── item_copyright_icons8.xml │ ├── item_main_page_launcher.xml │ └── page_main.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── values-night │ └── themes.xml │ └── values │ ├── attrs_secret_keyboard.xml │ ├── colors.xml │ ├── dimens.xml │ ├── strings.xml │ └── themes.xml ├── build.gradle.kts ├── clip ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── lollipop │ │ └── clip │ │ ├── ClipLayout.kt │ │ ├── RoundClipLayout.kt │ │ ├── SquircleClipLayout.kt │ │ ├── VectorClipLayout.kt │ │ ├── VectorHelper.kt │ │ └── squircle │ │ ├── RectangleSquircle.kt │ │ └── SquircleCorner.kt │ └── res │ └── values │ └── attrs.xml ├── colorRes ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── res │ ├── values-night │ └── colors.xml │ └── values │ └── colors.xml ├── dotsCanvas ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── dotscanvas │ ├── DotsCanvas.kt │ └── DotsCanvasBitmapHelper.kt ├── faceIcon ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── lollipop │ │ └── faceicon │ │ ├── FaceAnimator.kt │ │ ├── FaceBuilder.kt │ │ ├── FaceEyes.kt │ │ ├── FaceIcon.kt │ │ ├── FaceIconDrawable.kt │ │ ├── FaceIconView.kt │ │ ├── FaceIcons.kt │ │ ├── FaceMouth.kt │ │ ├── FacePoint.kt │ │ └── SnapshotFaceIcon.kt │ └── res │ └── values │ └── attr_face_icon.xml ├── fileChooser ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── filechooser │ ├── FileChooseLauncher.kt │ ├── FileChooseRequest.kt │ ├── FileChooseResult.kt │ ├── FileChooseResultContract.kt │ ├── FileChooser.kt │ ├── FileChooserLauncherHelper.kt │ └── FileMime.kt ├── fragmentHelper ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── fragment │ ├── FragmentChangedCallback.kt │ ├── FragmentCreatedCallback.kt │ ├── FragmentCreator.kt │ ├── FragmentHelper.kt │ ├── FragmentInfo.kt │ ├── FragmentPager.kt │ ├── FragmentSwitcher.kt │ └── LollipopFragment.kt ├── gallery ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── lollipop │ │ └── gallery │ │ ├── Photo.kt │ │ ├── PhotoGridLayout.kt │ │ ├── PhotoManager.kt │ │ └── PhotoSelector.kt │ └── res │ └── values │ └── attrs.xml ├── gradle.properties ├── gradle ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── insets ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── insets │ ├── BoundsSnapshot.kt │ ├── MultipleInsetsDelegate.kt │ ├── WindowInsetsApplyType.kt │ ├── WindowInsetsAutoFix.kt │ ├── WindowInsetsAutoFixDelegate.kt │ ├── WindowInsetsEdge.kt │ ├── WindowInsetsEdgeStrategy.kt │ ├── WindowInsetsEdgeViewDelegate.kt │ ├── WindowInsetsHelper.kt │ ├── WindowInsetsOperator.kt │ ├── WindowInsetsType.kt │ └── WindowInsetsValue.kt ├── lBus ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── lbus │ ├── LBus.kt │ └── core │ ├── LBusEvent.kt │ ├── LBusManager.kt │ └── LBusReceiver.kt ├── lQR ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── ic_launcher-playstore-herder.png │ ├── ic_launcher-playstore.png │ ├── java │ └── com │ │ └── lollipop │ │ └── lqrdemo │ │ ├── CreatorActivity.kt │ │ ├── MainActivity.kt │ │ ├── MainDrawerFragment.kt │ │ ├── PhotoScanActivity.kt │ │ ├── QrApplication.kt │ │ ├── base │ │ ├── BaseBottomDialog.kt │ │ ├── BaseCenterDialog.kt │ │ ├── BaseFragment.kt │ │ ├── ColorModeActivity.kt │ │ ├── PigmentTheme.kt │ │ └── ScanResultActivity.kt │ │ ├── creator │ │ ├── HistoryColor.kt │ │ ├── PaletteDialog.kt │ │ ├── QrContentInputPopupWindow.kt │ │ ├── QrCornerSettingDialog.kt │ │ ├── QrCornerSettingHelper.kt │ │ ├── QrCreatorHelper.kt │ │ ├── QrCreatorPreviewDrawable.kt │ │ ├── background │ │ │ ├── BackgroundCorner.kt │ │ │ ├── BackgroundGravity.kt │ │ │ ├── BackgroundInfo.kt │ │ │ └── BackgroundStore.kt │ │ ├── bridge │ │ │ └── OnCodeContentChangedListener.kt │ │ ├── builder │ │ │ ├── IPositionDetectionBuilder.kt │ │ │ └── QrPoint.kt │ │ ├── content │ │ │ ├── ContentBuilder.kt │ │ │ ├── ContentBuilderActivity.kt │ │ │ ├── SimpleTextInputView.kt │ │ │ └── impl │ │ │ │ ├── CalendarEventContentBuilderPage.kt │ │ │ │ ├── ContactContentBuilderPage.kt │ │ │ │ ├── EmailContentBuilderPage.kt │ │ │ │ ├── GeoPointContentBuilderPage.kt │ │ │ │ ├── PhoneContentBuilderPage.kt │ │ │ │ ├── SmsContentBuilderPage.kt │ │ │ │ └── WifiContentBuilderPage.kt │ │ ├── layer │ │ │ ├── DefaultWriterLayer.kt │ │ │ ├── QrWriterLayerStore.kt │ │ │ └── TypedWriterLayer.kt │ │ ├── subpage │ │ │ ├── QrAlignmentFragment.kt │ │ │ ├── QrBackgroundFragment.kt │ │ │ ├── QrBaseSubpageFragment.kt │ │ │ ├── QrContentValueFragment.kt │ │ │ ├── QrCornerFragment.kt │ │ │ ├── QrDataPointFragment.kt │ │ │ ├── QrPositionDetectionFragment.kt │ │ │ ├── adjust │ │ │ │ ├── StyleAdjustContentFragment.kt │ │ │ │ └── StyleAdjustFragment.kt │ │ │ ├── alignment │ │ │ │ └── QrAlignmentRectangleFragment.kt │ │ │ ├── datapoint │ │ │ │ ├── QrDataPointBaseFragment.kt │ │ │ │ ├── QrDataPointHorizontalFragment.kt │ │ │ │ ├── QrDataPointRectangleFragment.kt │ │ │ │ └── QrDataPointVerticalFragment.kt │ │ │ └── position │ │ │ │ └── QrPositionRectangleFragment.kt │ │ └── writer │ │ │ ├── LayerDelegate.kt │ │ │ ├── QrWriter.kt │ │ │ ├── QrWriterDistributor.kt │ │ │ ├── QrWriterGroup.kt │ │ │ ├── QrWriterLayer.kt │ │ │ ├── QrWriterLayerType.kt │ │ │ └── background │ │ │ ├── BackgroundWriterLayer.kt │ │ │ ├── BaseBitmapBackgroundWriterLayer.kt │ │ │ ├── ColorBackgroundWriterLayer.kt │ │ │ ├── DefaultBackgroundWriterLayer.kt │ │ │ └── LocalBitmapBackgroundWriterLayer.kt │ │ ├── floating │ │ ├── FloatingActionButton.kt │ │ ├── FloatingScanHelper.kt │ │ ├── FloatingScanSettingsActivity.kt │ │ ├── FloatingViewDelegate.kt │ │ ├── MediaProjectionHelper.kt │ │ ├── MediaProjectionService.kt │ │ ├── NotificationHelper.kt │ │ ├── ScreenshotResult.kt │ │ ├── ServiceActionBroadcast.kt │ │ └── view │ │ │ ├── FloatingActionInvokeCallback.kt │ │ │ ├── FloatingDragListener.kt │ │ │ ├── FloatingView.kt │ │ │ ├── FloatingViewBerth.kt │ │ │ ├── FloatingViewConfig.kt │ │ │ ├── FloatingViewFactory.kt │ │ │ └── FloatingViewState.kt │ │ ├── other │ │ ├── AboutActivity.kt │ │ ├── AppSettings.kt │ │ ├── CharsetMenuDialog.kt │ │ ├── PrivacyAgreementActivity.kt │ │ └── ScanTileService.kt │ │ ├── preview │ │ ├── BarcodePreviewFragment.kt │ │ ├── BarcodePreviewProvider.kt │ │ ├── BarcodePreviewRenderer.kt │ │ ├── BarcodePreviewRendererMap.kt │ │ └── renderer │ │ │ ├── ContactViewRenderer.kt │ │ │ ├── WebViewRenderer.kt │ │ │ └── WifiViewRenderer.kt │ │ ├── router │ │ ├── BarcodeRouter.kt │ │ ├── CalendarEventRouter.kt │ │ ├── ContactRouter.kt │ │ ├── EmailRouter.kt │ │ ├── GeoRouter.kt │ │ ├── PhoneRouter.kt │ │ ├── SmsRouter.kt │ │ └── WifiRouter.kt │ │ └── view │ │ ├── CheckedButtonBackgroundDrawable.kt │ │ └── PreviewWindowView.kt │ └── res │ ├── drawable │ ├── ic_baseline_arrow_back_24.xml │ ├── ic_baseline_build_24.xml │ ├── ic_baseline_close_24.xml │ ├── ic_baseline_content_copy_24.xml │ ├── ic_baseline_do_not_disturb_24.xml │ ├── ic_baseline_done_24.xml │ ├── ic_baseline_email_24.xml │ ├── ic_baseline_error_outline_24.xml │ ├── ic_baseline_fax_24.xml │ ├── ic_baseline_flash_off_24.xml │ ├── ic_baseline_flash_on_24.xml │ ├── ic_baseline_fullscreen_24.xml │ ├── ic_baseline_home_24.xml │ ├── ic_baseline_keyboard_double_arrow_down_24.xml │ ├── ic_baseline_keyboard_double_arrow_left_24.xml │ ├── ic_baseline_keyboard_double_arrow_right_24.xml │ ├── ic_baseline_keyboard_double_arrow_up_24.xml │ ├── ic_baseline_location_on_24.xml │ ├── ic_baseline_menu_24.xml │ ├── ic_baseline_mode_off_on_24.xml │ ├── ic_baseline_numbers_24.xml │ ├── ic_baseline_palette_24.xml │ ├── ic_baseline_person_24.xml │ ├── ic_baseline_phone_24.xml │ ├── ic_baseline_phone_android_24.xml │ ├── ic_baseline_qr_code_24.xml │ ├── ic_baseline_share_24.xml │ ├── ic_baseline_view_in_ar_24.xml │ ├── ic_baseline_warning_amber_24.xml │ ├── ic_baseline_web_24.xml │ ├── ic_baseline_work_24.xml │ ├── ic_corner_fill_24.xml │ ├── ic_corner_outline_24.xml │ ├── ic_logo.xml │ ├── ic_lqr_24dp.xml │ ├── ic_outline_arrow_circle_right_24.xml │ ├── ic_outline_insert_photo_24.xml │ ├── ic_qr_data_point_default.xml │ ├── ic_qr_data_point_horizontal.xml │ ├── ic_qr_data_point_vertical.xml │ └── ic_qr_position_24.xml │ ├── font │ ├── brunoace_regular.ttf │ ├── font_logo.xml │ └── raleway_regular.ttf │ ├── layout-land │ ├── activity_creator.xml │ ├── activity_main.xml │ └── fragment_barcode_preview.xml │ ├── layout │ ├── activity_about.xml │ ├── activity_content_builder.xml │ ├── activity_creator.xml │ ├── activity_floating_scan_settings.xml │ ├── activity_main.xml │ ├── activity_photo_scan.xml │ ├── activity_privacy_agreement.xml │ ├── activity_scan_result.xml │ ├── barcode_preview_contact_item.xml │ ├── barcode_preview_web.xml │ ├── barcode_preview_wifi.xml │ ├── dialog_base_bottom.xml │ ├── dialog_charset_menu.xml │ ├── dialog_input.xml │ ├── dialog_palette.xml │ ├── dialog_qr_corner_setting.xml │ ├── floating_scan_button.xml │ ├── fragment_barcode_preview.xml │ ├── fragment_main_drawer.xml │ ├── fragment_qr_alignment_rectangle.xml │ ├── fragment_qr_content_value.xml │ ├── fragment_qr_corner.xml │ ├── fragment_qr_data_point_base.xml │ ├── fragment_qr_edit_background.xml │ ├── fragment_qr_position_rectangle.xml │ ├── fragment_style_adjust.xml │ ├── item_content_builder_date.xml │ ├── item_content_builder_input.xml │ ├── item_content_builder_space.xml │ ├── item_dialog_charset_menu.xml │ ├── item_main_drawer.xml │ ├── item_privacy_agreement.xml │ └── item_qr_position_detection_tab.xml │ ├── mipmap-anydpi-v26 │ ├── ic_launcher.xml │ └── ic_launcher_round.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ ├── ic_launcher_foreground.webp │ └── ic_launcher_round.webp │ ├── values-night │ └── themes.xml │ ├── values-zh │ ├── strings.xml │ └── strings_privacy_agreement.xml │ └── values │ ├── attr_preview_window_view.xml │ ├── colors.xml │ ├── ic_launcher_background.xml │ ├── strings.xml │ ├── strings_privacy_agreement.xml │ └── themes.xml ├── lqr_privacy.txt ├── ltabview ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── liang │ │ └── lollipop │ │ └── ltabview │ │ ├── LTabHelper.kt │ │ ├── LTabItem.kt │ │ ├── LTabView.kt │ │ ├── builder │ │ ├── BaseBuilder.kt │ │ ├── ExpandBuilder.kt │ │ └── MaterialBuilder.kt │ │ ├── drawable │ │ └── ExpandDrawable.kt │ │ ├── item │ │ ├── ExpandItem.kt │ │ ├── IconItem.kt │ │ └── MaterialItem.kt │ │ └── utils │ │ └── TintUtil.kt │ └── res │ ├── layout │ ├── item_expand.xml │ └── item_material.xml │ └── values │ └── strings.xml ├── maskGuide ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── guide │ ├── GuideHelper.kt │ ├── GuideManager.kt │ ├── GuideProvider.kt │ ├── GuideStep.kt │ └── impl │ ├── DefaultGuideProvider.kt │ └── DefaultGuideStepImpl.kt ├── palette ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com.lollipop.palette │ │ ├── AngleCalculator.kt │ │ ├── ColorHistoryHelper.kt │ │ ├── ColorWheelView.kt │ │ └── SingleTouchHelper.kt │ └── res │ └── values │ └── attr_color_wheel_view.xml ├── pigment ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── pigment │ ├── BlendMode.kt │ ├── Pigment.kt │ ├── PigmentActivityHelper.kt │ ├── PigmentPage.kt │ ├── PigmentProvider.kt │ ├── PigmentProviderHelper.kt │ ├── PigmentTint.kt │ └── PigmentWallpaperCenter.kt ├── privacy ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── privacy │ ├── PrivacyAgreementAdapter.kt │ ├── PrivacyAgreementHolder.kt │ └── PrivacyAgreementItem.kt ├── punch ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── com │ │ └── lollipop │ │ └── punch2 │ │ ├── activity │ │ ├── AddFlagActivity.kt │ │ └── MainActivity.kt │ │ ├── data │ │ ├── CountInfo.kt │ │ ├── DBHelper.kt │ │ ├── FlagInfo.kt │ │ └── RecordInfo.kt │ │ ├── list │ │ ├── PunchStampHolder.kt │ │ └── delegate │ │ │ ├── HomeListDelegate.kt │ │ │ ├── LiveDelegate.kt │ │ │ ├── ModeOption.kt │ │ │ └── ModeState.kt │ │ ├── ui │ │ └── theme │ │ │ ├── ComposableTheme.kt │ │ │ └── ComposableType.kt │ │ ├── utils │ │ ├── ColorBlend.kt │ │ ├── CommonUtil.kt │ │ ├── ComposableThemeHelper.kt │ │ ├── ThemeHelper.kt │ │ └── ViewBindingHelper.kt │ │ └── view │ │ ├── LimitHorizontalScrollView.kt │ │ ├── LimitWidthLinearLayout.kt │ │ └── StampBackgroundDrawable.kt │ └── res │ ├── drawable │ ├── baseline_add_24.xml │ ├── baseline_calendar_month_24.xml │ ├── baseline_check_circle_outline_24.xml │ ├── baseline_checklist_24.xml │ ├── baseline_format_list_bulleted_24.xml │ └── baseline_pie_chart_outline_24.xml │ ├── layout │ ├── activity_main.xml │ └── item_stamp.xml │ ├── mipmap-hdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-mdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── mipmap-xxxhdpi │ ├── ic_launcher.webp │ └── ic_launcher_round.webp │ ├── values-night │ └── themes.xml │ └── values │ ├── colors.xml │ ├── strings.xml │ └── themes.xml ├── qr ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── lollipop │ │ └── qr │ │ ├── BarcodeFormat.kt │ │ ├── BarcodeHelper.kt │ │ ├── BarcodeType.kt │ │ ├── comm │ │ ├── BarcodeExecutor.kt │ │ ├── BarcodeInfo.kt │ │ ├── ImageToBitmap.kt │ │ └── VCard.kt │ │ ├── reader │ │ ├── BarcodeReader.kt │ │ ├── CameraBarcodeReader.kt │ │ ├── ImageBarcodeReader.kt │ │ ├── ImageFormat.kt │ │ ├── OnBarcodeScanResultListener.kt │ │ ├── OnCameraFocusChangedListener.kt │ │ ├── QrPreviewMode.kt │ │ ├── QrPreviewScaleType.kt │ │ └── YuvToRgbConverter.kt │ │ ├── view │ │ ├── CameraFocusBoundsView.kt │ │ ├── CodeSelectionView.kt │ │ └── FocusAnimationHelper.kt │ │ └── writer │ │ ├── BarcodeWriter.kt │ │ ├── EncodeHintType.kt │ │ ├── ErrorCorrectionLevel.kt │ │ ├── ForceCodeSet.kt │ │ ├── LBitMatrix.kt │ │ ├── LQRCodeWriter.kt │ │ ├── LQrBitMatrix.kt │ │ ├── Pdf417Compaction.kt │ │ ├── SymbolShapeHint.kt │ │ ├── TypedBarcodeWriter.kt │ │ └── ZxingWrapper.kt │ └── res │ └── values │ └── attrs.xml ├── recorder ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── lollipop │ │ └── recorder │ │ ├── AudioPlayerHelper.kt │ │ ├── AudioVisualizerView.kt │ │ ├── RecorderHelper.kt │ │ ├── VisualizerHelper.kt │ │ └── VisualizerRenderer.kt │ └── res │ └── values │ └── attrs.xml ├── renderScript ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ ├── cpp │ ├── Blend.cpp │ ├── Blend_advsimd.S │ ├── Blend_neon.S │ ├── Blur.cpp │ ├── Blur_advsimd.S │ ├── Blur_neon.S │ ├── CMakeLists.txt │ ├── ColorMatrix.cpp │ ├── ColorMatrix_advsimd.S │ ├── ColorMatrix_neon.S │ ├── Convolve3x3.cpp │ ├── Convolve5x5.cpp │ ├── Convolve_advsimd.S │ ├── Convolve_neon.S │ ├── Histogram.cpp │ ├── JniEntryPoints.cpp │ ├── Lut.cpp │ ├── Lut3d.cpp │ ├── Lut3d_advsimd.S │ ├── Lut3d_neon.S │ ├── RenderScriptToolkit.cpp │ ├── RenderScriptToolkit.h │ ├── Resize.cpp │ ├── Resize_advsimd.S │ ├── Resize_neon.S │ ├── TaskProcessor.cpp │ ├── TaskProcessor.h │ ├── Utils.cpp │ ├── Utils.h │ ├── YuvToRgb.cpp │ ├── YuvToRgb_advsimd.S │ ├── YuvToRgb_neon.S │ └── x86.cpp │ └── java │ └── com │ └── google │ └── android │ └── renderscript │ └── Toolkit.kt ├── settings.gradle.kts ├── stitch ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── stitch │ ├── ColorStitchDrawable.kt │ ├── ColorStitchView.kt │ ├── StitchHelper.kt │ ├── StitchPiece.kt │ └── StitchVertex.kt ├── verticalPage ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── vertical_page │ ├── VerticalPageLayout.kt │ └── VerticalPageScrollView.kt ├── web ├── .gitignore ├── README.md ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ └── main │ ├── AndroidManifest.xml │ └── java │ └── com │ └── lollipop │ └── web │ ├── IWeb.kt │ ├── IWebConfig.kt │ ├── IWebFactory.kt │ ├── WebHelper.kt │ ├── WebHost.kt │ ├── bridge │ ├── Bridge.kt │ ├── BridgeAlias.kt │ ├── BridgeCluster.kt │ ├── BridgeIntercept.kt │ ├── BridgePayload.kt │ ├── BridgeRoot.kt │ ├── DefaultBridgeRoot.kt │ └── impl │ │ ├── WebFullScreenBridgeImpl.kt │ │ └── WebInsetsBridgeImpl.kt │ ├── compat │ ├── EngineVersion.kt │ └── WebX.kt │ ├── completion │ ├── UrlCompletion.kt │ ├── UrlCompletionResult.kt │ └── impl │ │ └── EmptyCompletion.kt │ ├── impl │ ├── DefaultIWeb.kt │ └── default │ │ ├── WebChromeClientImpl.kt │ │ └── WebViewClientImpl.kt │ ├── listener │ ├── CustomViewListener.kt │ ├── DownloadListener.kt │ ├── GeolocationPermissionsListener.kt │ ├── HintProvider.kt │ ├── LogPrinter.kt │ ├── ProgressListener.kt │ ├── SafeBrowsing.kt │ ├── TitleListener.kt │ └── WindowListener.kt │ ├── search │ ├── SearchCancelable.kt │ ├── SearchEngine.kt │ ├── SearchEngineCallback.kt │ ├── SearchEngineFilter.kt │ ├── SearchSuggestion.kt │ ├── SearchTask.kt │ ├── SimpleSearchEngine.kt │ └── impl │ │ ├── Baidu.kt │ │ ├── Bing.kt │ │ └── Google.kt │ └── util │ ├── BridgeCallback.kt │ └── HorizontalCustomViewHelper.kt └── widget ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src └── main ├── AndroidManifest.xml ├── java └── com │ └── lollipop │ └── widget │ ├── CheckableView.kt │ ├── OverflowScrollBar.kt │ └── RoundBackgroundView.kt └── res ├── drawable ├── bg_checkbox_circular.xml ├── bg_checkbox_square.xml ├── fg_checkbox_circular.xml ├── fg_checkbox_square.xml └── ic_baseline_check_24.xml └── values ├── attr_round_background_view.xml └── attrs.xml /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | local.properties 11 | -------------------------------------------------------------------------------- /Techo.rp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/Techo.rp -------------------------------------------------------------------------------- /Techo.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/Techo.sketch -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/README.md: -------------------------------------------------------------------------------- 1 | # Techo 设计规划文档 2 | ## 主题 3 | * [x] 每一篇笔记都有一个主题,默认为当前应用主题(浅色、深色) 4 | * [ ] 主题会影响整篇笔记中的所有元素,包括但不限于按钮、文本、图标等 5 | * [ ] 主题是允许切换的,切换的同时会影响所有页面元素 6 | * [ ] 主题的切换只会影响所有非用户设定的元素,如果用户修改过文字颜色,那么将无法完成颜色修改。用户设置的颜色优先级高于主题颜色。 7 | * [ ] 主题是向前兼容的,当找不到的时候,会使用缺省颜色(缺省颜色仅在发生时确定,确定后缺省颜色的变化不影响当前笔记) 8 | * [ ] 主题包括:背景色(背景图)、强调色、辅助色、背景中的文字颜色、强调色中的文字颜色等 9 | * [ ] 笔记主题与应用主题并不完全一致。应用主题中只分为深色与浅色,强调色与辅助色由系统桌面提供。笔记主题包括但不限于深色与浅色,还有定制主题。主题允许不设置部分颜色,而使用应用主题中的颜色。 10 | 11 | ## UI 12 | * [ ] 首页UI与系统主题同步,主题色与桌面颜色同步 13 | * [ ] 缺省情况下,详情页主题与首页主题同步 14 | * [ ] 打开已有主题的笔记,那么更新为指定主题 15 | * [ ] 桌面壁纸更新,将会影响笔记的主题UI更新 16 | * [ ] 17 | * [ ] 18 | 19 | ## 富文本 20 | * [ ] 富文本仅颜色类调整会覆盖主题颜色设置 21 | * [ ] 22 | * [ ] 23 | * [ ] 24 | * [ ] 25 | * [ ] 26 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/main/assets/font/CabinSketch-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/CabinSketch-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Catamaran-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Catamaran-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Dynalight-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Dynalight-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/FrederickaTheGreat-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/FrederickaTheGreat-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Limelight-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Limelight-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/MissFajarDose-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/MissFajarDose-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Monoton-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Monoton-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Oregano-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Oregano-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Playball-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Playball-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/PoiretOne-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/PoiretOne-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/RougeScript-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/RougeScript-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Ruthie-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Ruthie-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/font/Tangerine-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/assets/font/Tangerine-Regular.ttf -------------------------------------------------------------------------------- /app/src/main/assets/split/SplitConfig.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "flag": "3,2,1,2", 4 | "color": "#5E6565" 5 | }, 6 | { 7 | "flag": "3,2", 8 | "color": "#5E6565" 9 | }, 10 | { 11 | "flag": "3,1,1,1", 12 | "color": "#5E6565" 13 | }, 14 | { 15 | "flag": "2,1", 16 | "color": "#5E6565" 17 | }, 18 | { 19 | "flag": "3", 20 | "color": "#5E6565" 21 | } 22 | ] -------------------------------------------------------------------------------- /app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/activity/WebActivity.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.activity 2 | 3 | import android.os.Bundle 4 | import com.lollipop.base.util.lazyBind 5 | import com.lollipop.techo.databinding.ActivityWebBinding 6 | import com.lollipop.web.WebHelper 7 | import com.lollipop.web.WebHost 8 | 9 | class WebActivity : BaseActivity(), WebHost { 10 | 11 | private val binding: ActivityWebBinding by lazyBind() 12 | 13 | override fun onCreate(savedInstanceState: Bundle?) { 14 | super.onCreate(savedInstanceState) 15 | setContentView(binding.root) 16 | val webHelper = WebHelper.bind(this, binding.webView) 17 | // 需要处理一下三方网页的状态栏兼容 18 | } 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/data/TechoItemType.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.data 2 | 3 | enum class TechoItemType { 4 | Title, 5 | Text, 6 | Number, 7 | CheckBox, 8 | Photo, 9 | Split, 10 | Recording, 11 | Vcr; 12 | 13 | companion object { 14 | fun opt(name: String): TechoItemType { 15 | try { 16 | return valueOf(name) 17 | } catch (e: Throwable) { 18 | e.printStackTrace() 19 | } 20 | return Text 21 | } 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/data/json/JsonInfo.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.data.json 2 | 3 | import org.json.JSONObject 4 | 5 | interface JsonInfo { 6 | fun toJson(): JSONObject 7 | fun parse(json: JSONObject) 8 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/edit/PanelController.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.edit 2 | 3 | import androidx.appcompat.app.AppCompatActivity 4 | import com.lollipop.techo.edit.base.EditDelegate 5 | import com.lollipop.techo.util.permission.PermissionLauncher 6 | 7 | /** 8 | * @author lollipop 9 | * @date 2021/12/19 22:20 10 | */ 11 | interface PanelController { 12 | 13 | fun callClose(editDelegate: EditDelegate<*>) 14 | 15 | val context: AppCompatActivity 16 | 17 | fun findLauncher(who: Any, permission: Array): PermissionLauncher? 18 | 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/edit/base/BottomEditDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.edit.base 2 | 3 | import android.view.View 4 | import com.lollipop.techo.data.TechoItem 5 | 6 | abstract class BottomEditDelegate : EditDelegate() { 7 | 8 | abstract val contentGroup: View? 9 | 10 | abstract val backgroundView: View? 11 | 12 | override val animationEnable: Boolean 13 | get() = true 14 | 15 | override fun onAnimationUpdate(progress: Float) { 16 | super.onAnimationUpdate(progress) 17 | backgroundView?.let { 18 | animationAlpha(progress, it) 19 | } 20 | contentGroup?.let { 21 | animationUp(progress, it) 22 | } 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/edit/base/TopEditDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.edit.base 2 | 3 | import android.view.View 4 | import com.lollipop.techo.data.TechoItem 5 | 6 | abstract class TopEditDelegate : EditDelegate() { 7 | 8 | abstract val contentGroup: View? 9 | 10 | abstract val backgroundView: View? 11 | 12 | override val animationEnable: Boolean 13 | get() = true 14 | 15 | override fun onAnimationUpdate(progress: Float) { 16 | super.onAnimationUpdate(progress) 17 | backgroundView?.let { 18 | animationAlpha(progress, it) 19 | } 20 | contentGroup?.let { 21 | animationDown(progress, it) 22 | } 23 | } 24 | 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/fragment/PageFragment.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.fragment 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.view.View 6 | import com.lollipop.base.util.onClick 7 | 8 | open class PageFragment : BaseFragment() { 9 | 10 | protected fun bindBackButton(view: View) { 11 | view.onClick { 12 | notifyBackPressed() 13 | } 14 | } 15 | 16 | protected fun setResult(code: Int, data: Intent? = null) { 17 | activity?.setResult(code, data) 18 | } 19 | 20 | protected fun setResultSuccess(data: Intent?) { 21 | setResult(Activity.RESULT_OK, data) 22 | } 23 | 24 | protected fun setResultCanceled(data: Intent?) { 25 | setResult(Activity.RESULT_CANCELED, data) 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/list/detail/SplitInfoHolder.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.list.detail 2 | 3 | import android.view.ViewGroup 4 | import com.lollipop.techo.data.TechoItem 5 | import com.lollipop.techo.databinding.ItemSplitBinding 6 | 7 | /** 8 | * @author lollipop 9 | * @date 2021/11/20 12:53 10 | */ 11 | class SplitInfoHolder( 12 | view: EditItemView 13 | ) : EditHolder(view) { 14 | 15 | companion object { 16 | fun create(group: ViewGroup): SplitInfoHolder { 17 | return SplitInfoHolder(group.bindContent()) 18 | } 19 | } 20 | 21 | fun bind(info: TechoItem.Split) { 22 | update() 23 | binding.content.splitView.load(info) 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/list/home/HomeListAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.list.home 2 | 3 | import android.view.ViewGroup 4 | import androidx.recyclerview.widget.RecyclerView 5 | import com.lollipop.techo.data.TechoInfo 6 | 7 | class HomeListAdapter( 8 | private val data: List 9 | ) : RecyclerView.Adapter() { 10 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): TechoHolder { 11 | return TechoHolder.create(parent) 12 | } 13 | 14 | override fun onBindViewHolder(holder: TechoHolder, position: Int) { 15 | holder.bind(data[position]) 16 | } 17 | 18 | override fun getItemCount(): Int { 19 | return data.size 20 | } 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/option/item/Option.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.option.item 2 | 3 | import androidx.annotation.ColorRes 4 | import androidx.annotation.DrawableRes 5 | import androidx.annotation.StringRes 6 | 7 | /** 8 | * @author lollipop 9 | * @date 2021/12/30 21:03 10 | */ 11 | class Option( 12 | /** 13 | * 操作图标 14 | */ 15 | @DrawableRes 16 | val icon: Int, 17 | 18 | /** 19 | * 背景色 20 | */ 21 | @DrawableRes 22 | val background: Int, 23 | 24 | /** 25 | * 操作名称 26 | */ 27 | @StringRes 28 | val name: Int, 29 | 30 | /** 31 | * 操作ID 32 | */ 33 | val id: Int 34 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/lollipop/techo/util/permission/PermissionInfo.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.techo.util.permission 2 | 3 | import androidx.annotation.StringRes 4 | 5 | class PermissionInfo( 6 | val permission: Array, 7 | @StringRes 8 | val rationale: Int, 9 | val anyOne: Boolean = true 10 | ) -------------------------------------------------------------------------------- /app/src/main/res/anim/dialog_alpha_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/dialog_alpha_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/anim/dialog_top_in.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/anim/dialog_top_out.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/color/color_rich_option_stroke.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/color/color_rich_option_surface.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_add_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_arrow_back_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_arrow_circle_right_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_arrow_forward_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_close_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_delete_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_done_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_drag_handle_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_edit_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_flash_off_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_flash_on_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_bold_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_italic_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_line_spacing_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_list_numbered_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_paint_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_shapes_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_size_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_strikethrough_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_format_underlined_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_horizontal_split_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_mic_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_more_vert_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_notes_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_save_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_stop_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_subscript_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_superscript_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_video_call_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_baseline_warning_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_like.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_check_box_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_outline_insert_photo_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_qq.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_topping.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_basic_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_qr_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_single_fragment.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_panel_text_option_frame_add.xml: -------------------------------------------------------------------------------- 1 | 2 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_split.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 320dp 3 | 5dp 4 | 3dp 5 | 1dp 6 | 1dp 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/option_colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #4E6363 4 | #4E6363 5 | #4E6363 6 | #4E6363 7 | #4E6363 8 | #4E6363 9 | #F1306D 10 | #52B598 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/option_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 编辑 3 | 样式 4 | 图片 5 | 删除 6 | 置顶 7 | 取消置顶 8 | 收藏 9 | 取消收藏 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/share_colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF018786 4 | #06C160 5 | #FF52B6EF 6 | #FFD55926 7 | -------------------------------------------------------------------------------- /app/src/main/res/values/share_strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 保存图片 4 | 微信 5 | 朋友圈 6 | QQ 7 | QQ空间 8 | 微博 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings_vector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | M7.692,-0L16.308,0C18.983,-0 19.953,0.278 20.931,0.801C21.908,1.324 22.676,2.092 23.199,3.069C23.722,4.047 24,5.017 24,7.692L24,16.308C24,18.983 23.722,19.953 23.199,20.931C22.676,21.908 21.908,22.676 20.931,23.199C19.953,23.722 18.983,24 16.308,24L7.692,24C5.017,24 4.047,23.722 3.069,23.199C2.092,22.676 1.324,21.908 0.801,20.931C0.278,19.953 0,18.983 -0,16.308L0,7.692C-0,5.017 0.278,4.047 0.801,3.069C1.324,2.092 2.092,1.324 3.069,0.801C4.047,0.278 5.017,0 7.692,-0Z 4 | -------------------------------------------------------------------------------- /base/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /base/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/base/consumer-rules.pro -------------------------------------------------------------------------------- /base/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /base/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /base/src/main/java/com/lollipop/base/graphics/LDrawable.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.base.graphics 2 | 3 | import android.graphics.PixelFormat 4 | import android.graphics.drawable.Drawable 5 | 6 | abstract class LDrawable: Drawable() { 7 | 8 | @Deprecated("Deprecated in Java", 9 | ReplaceWith("PixelFormat.TRANSPARENT", "android.graphics.PixelFormat") 10 | ) 11 | override fun getOpacity(): Int { 12 | return PixelFormat.TRANSPARENT 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /base/src/main/java/com/lollipop/base/listener/BackPressListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.base.listener 2 | 3 | /** 4 | * @author lollipop 5 | * @date 4/16/21 22:06 6 | * 返回事件的监听器 7 | */ 8 | fun interface BackPressListener { 9 | 10 | fun onBackPressed() 11 | 12 | } -------------------------------------------------------------------------------- /base/src/main/java/com/lollipop/base/util/ClassHelper.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.base.util 2 | 3 | object ClassHelper { 4 | 5 | fun checkExtends(target: Class<*>, other: Class<*>): Boolean { 6 | if (target === other) { 7 | return true 8 | } 9 | target.interfaces.forEach { 10 | if (it === other) { 11 | return true 12 | } 13 | } 14 | val superclass = target.superclass 15 | if (superclass === other) { 16 | return true 17 | } 18 | if (superclass == null) { 19 | return false 20 | } 21 | return checkExtends(superclass, other) 22 | } 23 | 24 | } 25 | 26 | inline fun Class<*>.checkExtends(): Boolean { 27 | return ClassHelper.checkExtends(this, O::class.java) 28 | } 29 | -------------------------------------------------------------------------------- /base/src/main/java/com/lollipop/base/util/TxtHelper.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.base.util 2 | 3 | import java.io.File 4 | import java.nio.file.Files 5 | import java.nio.file.Paths 6 | 7 | object TxtHelper { 8 | 9 | fun writeToFile(value: String, file: File) { 10 | writeToFile(value, file.path) 11 | } 12 | 13 | fun writeToFile(value: String, path: String) { 14 | Files.write(Paths.get(path), value.toByteArray()) 15 | } 16 | 17 | fun readFromFile(file: File): String { 18 | return readFromFile(file.path) 19 | } 20 | 21 | fun readFromFile(path: String): String { 22 | val lines = Files.readAllLines(Paths.get(path)) 23 | val stringBuilder = StringBuilder() 24 | lines.forEach { 25 | stringBuilder.append(it) 26 | } 27 | return stringBuilder.toString() 28 | } 29 | 30 | } -------------------------------------------------------------------------------- /bigBoom/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /bigBoom/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/bigBoom/consumer-rules.pro -------------------------------------------------------------------------------- /bigBoom/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /bigBoom/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /bigBoom/src/main/java/com/lollipop/bigboom/Basket.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.bigboom 2 | 3 | /** 4 | * @author lollipop 5 | * @date 2022/1/7 22:35 6 | * 接收爆炸碎片的接收器 7 | */ 8 | interface Basket { 9 | 10 | /** 11 | * 好的结果 12 | * @param value 被炸出来的碎片 13 | */ 14 | fun goodPatches(value: Array) 15 | 16 | /** 17 | * 没能成功引爆 18 | * @param code 错误码 19 | * @param msg 错误描述 20 | * @param throwable 发生的异常(如果有) 21 | */ 22 | fun failedDetonate(code: Int, msg: String, throwable: Throwable?) 23 | 24 | } -------------------------------------------------------------------------------- /bigBoom/src/main/java/com/lollipop/bigboom/Explosive.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.bigboom 2 | 3 | /** 4 | * @author lollipop 5 | * @date 2022/1/7 22:31 6 | * 用来发生爆炸的炸药 7 | */ 8 | interface Explosive { 9 | 10 | /** 11 | * 点燃炸药 12 | * @param basket 需要一个篮子来接收炸出的碎片 13 | */ 14 | fun pilot(basket: Basket) 15 | 16 | /** 17 | * 放置燃料 18 | * @param any 任何资源都可以作为燃料, 19 | * 但是不同的炸药可能对于燃料会有不同的效果 20 | */ 21 | fun putFuel(any: Any) 22 | 23 | /** 24 | * 清理所有缓存的数据 25 | */ 26 | fun clear() 27 | 28 | } -------------------------------------------------------------------------------- /bigBoom/src/main/java/com/lollipop/bigboom/PatchesItemProvider.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.bigboom 2 | 3 | import android.view.ViewGroup 4 | 5 | interface PatchesItemProvider { 6 | 7 | fun createHolder(parent: ViewGroup): PatchesHolder 8 | 9 | } -------------------------------------------------------------------------------- /bigBoom/src/main/java/com/lollipop/bigboom/PatchesStatus.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.bigboom 2 | 3 | enum class PatchesStatus{ 4 | DEFAULT, 5 | SELECTED, 6 | DISABLE; 7 | 8 | val isDefault: Boolean 9 | get() { 10 | return this == DEFAULT 11 | } 12 | 13 | val isSelected: Boolean 14 | get() { 15 | return this == SELECTED 16 | } 17 | 18 | val isDisable: Boolean 19 | get() { 20 | return this == DISABLE 21 | } 22 | 23 | } -------------------------------------------------------------------------------- /bigBoom/src/main/java/com/lollipop/bigboom/PresetExplosive.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.bigboom 2 | 3 | import com.lollipop.bigboom.explosive.CharExplosive 4 | 5 | 6 | enum class PresetExplosive(val clazz: Class) { 7 | 8 | CHAR(CharExplosive::class.java) 9 | 10 | } -------------------------------------------------------------------------------- /browser/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /browser/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /browser/src/main/java/com/lollipop/browser/BrowserApplication.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.browser 2 | 3 | import android.app.Application 4 | import com.lollipop.browser.bridge.BridgeConfig 5 | import com.lollipop.browser.web.WebStatusManager 6 | 7 | class BrowserApplication : Application() { 8 | 9 | override fun onCreate() { 10 | super.onCreate() 11 | BridgeConfig.init() 12 | WebStatusManager.resume(this) 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /browser/src/main/java/com/lollipop/browser/bridge/BridgeConfig.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.browser.bridge 2 | 3 | import com.lollipop.web.WebHelper 4 | import com.lollipop.web.bridge.BridgeRoot 5 | 6 | object BridgeConfig { 7 | 8 | private val bridgeRootArray: Array> = arrayOf( 9 | // TODO 10 | ) 11 | 12 | fun init() { 13 | bridgeRootArray.forEach { 14 | WebHelper.register(it) 15 | } 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /browser/src/main/java/com/lollipop/browser/download/DownloadManager.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.browser.download 2 | 3 | object DownloadManager { 4 | 5 | fun startDownload(name: String, url: String) { 6 | // TODO 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /browser/src/main/java/com/lollipop/browser/history/HistoryInfo.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.browser.history 2 | 3 | data class HistoryInfo( 4 | val id: Int, 5 | val url: String, 6 | val title: String, 7 | val time: Long, 8 | val favicon: String 9 | ) -------------------------------------------------------------------------------- /browser/src/main/java/com/lollipop/browser/history/HistoryManager.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.browser.history 2 | 3 | object HistoryManager { 4 | 5 | 6 | 7 | } -------------------------------------------------------------------------------- /browser/src/main/res/drawable/bg_bottom_sheet_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/header_main_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/drawable/header_main_1.png -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_arrow_back_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_arrow_forward_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_bookmarks_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_clear_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_done_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_download_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_history_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_info_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_insert_drive_file_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_numbers_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_refresh_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_search_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_share_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_baseline_star_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/drawable/ic_google.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /browser/src/main/res/layout/activity_copyright_icons8.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /browser/src/main/res/layout/dialog_secret_button.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /browser/src/main/res/layout/item_copyright_icons8.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /browser/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/browser/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /browser/src/main/res/values/attrs_secret_keyboard.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /browser/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #323232 5 | 6 | #FFFFFF 7 | 8 | #FFFFFF 9 | #787878 10 | 11 | #CF2D1F 12 | #263AD8 13 | 14 | #00A1F1 15 | #7CBB00 16 | #FFBB00 17 | #F65314 18 | 19 | #4285F4 20 | #34A853 21 | #FBBC05 22 | #EA4335 23 | 24 | -------------------------------------------------------------------------------- /browser/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 56dp 4 | 36dp 5 | 160dp 6 | 90dp 7 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | google() 6 | mavenCentral() 7 | mavenLocal() 8 | } 9 | dependencies { 10 | classpath(libs.gradle) 11 | classpath(libs.kotlin.gradle.plugin) 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | mavenCentral() 21 | mavenLocal() 22 | } 23 | } 24 | 25 | //tasks.register("clean", Delete) { 26 | // delete rootProject.buildDir 27 | //} -------------------------------------------------------------------------------- /clip/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /clip/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/clip/consumer-rules.pro -------------------------------------------------------------------------------- /clip/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /clip/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /colorRes/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /colorRes/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/colorRes/consumer-rules.pro -------------------------------------------------------------------------------- /colorRes/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /colorRes/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /dotsCanvas/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /dotsCanvas/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/dotsCanvas/consumer-rules.pro -------------------------------------------------------------------------------- /dotsCanvas/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /dotsCanvas/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /faceIcon/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /faceIcon/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/faceIcon/consumer-rules.pro -------------------------------------------------------------------------------- /faceIcon/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /faceIcon/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /faceIcon/src/main/java/com/lollipop/faceicon/FaceIcon.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.faceicon 2 | 3 | interface FaceIcon { 4 | 5 | val left: Eyes 6 | val right: Eyes 7 | val mouth: Mouth 8 | 9 | interface Eyes { 10 | 11 | val left: Point 12 | val top: Point 13 | val right: Point 14 | val bottom: Point 15 | 16 | } 17 | 18 | interface Mouth { 19 | 20 | val leftTop: Point 21 | val leftBottom: Point 22 | val middleTop: Point 23 | val middleBottom: Point 24 | val rightTop: Point 25 | val rightBottom: Point 26 | 27 | } 28 | 29 | interface Point { 30 | val x: Float 31 | val y: Float 32 | } 33 | 34 | } -------------------------------------------------------------------------------- /faceIcon/src/main/java/com/lollipop/faceicon/FacePoint.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.faceicon 2 | 3 | class FacePoint(override val x: Float, override val y: Float) : FaceIcon.Point { 4 | 5 | operator fun plus(point: FacePoint): FacePoint { 6 | return FacePoint(this.x + point.x, this.y + point.y) 7 | } 8 | 9 | } -------------------------------------------------------------------------------- /faceIcon/src/main/res/values/attr_face_icon.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /fileChooser/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /fileChooser/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/fileChooser/consumer-rules.pro -------------------------------------------------------------------------------- /fileChooser/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /fileChooser/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /fileChooser/src/main/java/com/lollipop/filechooser/FileChooseLauncher.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.filechooser 2 | 3 | interface FileChooseLauncher { 4 | fun unregister() 5 | fun launch(): FileChooser.Builder 6 | } -------------------------------------------------------------------------------- /fileChooser/src/main/java/com/lollipop/filechooser/FileChooseRequest.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.filechooser 2 | 3 | import android.content.Intent 4 | 5 | class FileChooseRequest(val intent: Intent) -------------------------------------------------------------------------------- /fragmentHelper/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /fragmentHelper/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/fragmentHelper/consumer-rules.pro -------------------------------------------------------------------------------- /fragmentHelper/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /fragmentHelper/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /fragmentHelper/src/main/java/com/lollipop/fragment/FragmentChangedCallback.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.fragment 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | interface FragmentChangedCallback { 6 | 7 | fun onFragmentChanged(fragment: Fragment) 8 | 9 | } -------------------------------------------------------------------------------- /fragmentHelper/src/main/java/com/lollipop/fragment/FragmentCreatedCallback.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.fragment 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | interface FragmentCreatedCallback { 6 | 7 | fun onFragmentCreated(fragment: Fragment, info: FragmentInfo) 8 | 9 | } -------------------------------------------------------------------------------- /fragmentHelper/src/main/java/com/lollipop/fragment/FragmentInfo.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.fragment 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | interface FragmentInfo { 6 | val fragment: Class 7 | val tag: String 8 | } 9 | 10 | data class SimpleFragmentInfo( 11 | override val fragment: Class, 12 | override val tag: String 13 | ) : FragmentInfo 14 | -------------------------------------------------------------------------------- /fragmentHelper/src/main/java/com/lollipop/fragment/LollipopFragment.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.fragment 2 | 3 | interface LollipopFragment { 4 | 5 | fun onArgumentsChanged() 6 | 7 | } -------------------------------------------------------------------------------- /gallery/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /gallery/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/gallery/consumer-rules.pro -------------------------------------------------------------------------------- /gallery/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /gallery/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /gallery/src/main/java/com/lollipop/gallery/Photo.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.gallery 2 | 3 | import android.net.Uri 4 | 5 | /** 6 | * @author lollipop 7 | * @date 2021/5/10 22:36 8 | */ 9 | data class Photo( 10 | val uri: Uri, 11 | val title: String 12 | ) 13 | -------------------------------------------------------------------------------- /gallery/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-all.zip 6 | -------------------------------------------------------------------------------- /insets/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /insets/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/insets/consumer-rules.pro -------------------------------------------------------------------------------- /insets/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /insets/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /insets/src/main/java/com/lollipop/insets/BoundsSnapshot.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.insets 2 | 3 | class BoundsSnapshot( 4 | val left: Int, 5 | val top: Int, 6 | val right: Int, 7 | val bottom: Int 8 | ) { 9 | companion object { 10 | val EMPTY = BoundsSnapshot(0, 0, 0, 0) 11 | } 12 | } -------------------------------------------------------------------------------- /insets/src/main/java/com/lollipop/insets/WindowInsetsAutoFix.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.insets 2 | 3 | /** 4 | * 黑名单模式下,会被自动注册器忽略的身份接口 5 | * 在白名单模式(WindowInsetsAutoFixMode.ALLOW)下会被忽略 6 | */ 7 | interface WindowInsetsAutoFixBlock 8 | 9 | /** 10 | * 白名单模式下,会被自动设置的身份接口 11 | * 在黑名单模式(WindowInsetsAutoFixMode.BLOCK)下将会被忽略 12 | */ 13 | interface WindowInsetsAutoFixAllow 14 | 15 | /** 16 | * 自动注册的WindowInsets模式 17 | */ 18 | enum class WindowInsetsAutoFixMode { 19 | /** 20 | * 黑名单模式 21 | * 这种模式下,将会默认注册所有的Activity 22 | * 但是会忽略实现WindowInsetsAutoFixBlock接口的Activity 23 | */ 24 | BLOCK, 25 | 26 | /** 27 | * 白名单模式 28 | * 这种模式下,将默认不注册所有的Activity 29 | * 只会注册实现了WindowInsetsAutoFixAllow接口的Activity 30 | */ 31 | ALLOW 32 | } -------------------------------------------------------------------------------- /insets/src/main/java/com/lollipop/insets/WindowInsetsEdgeStrategy.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.insets 2 | 3 | enum class WindowInsetsEdgeStrategy { 4 | /** 5 | * 累加 6 | */ 7 | ACCUMULATE, 8 | 9 | /** 10 | * 比较 11 | */ 12 | COMPARE, 13 | 14 | /** 15 | * 原始 16 | */ 17 | ORIGINAL, 18 | 19 | /** 20 | * 缩紧 21 | */ 22 | INSETS 23 | } -------------------------------------------------------------------------------- /lBus/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lBus/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lBus/consumer-rules.pro -------------------------------------------------------------------------------- /lBus/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /lBus/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /lQR/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /lQR/src/main/ic_launcher-playstore-herder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/ic_launcher-playstore-herder.png -------------------------------------------------------------------------------- /lQR/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/background/BackgroundGravity.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.background 2 | 3 | enum class BackgroundGravity { 4 | 5 | LEFT, 6 | Top, 7 | RIGHT, 8 | BOTTOM, 9 | CENTER; 10 | 11 | companion object { 12 | val DEFAULT = CENTER 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/bridge/OnCodeContentChangedListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.bridge 2 | 3 | interface OnCodeContentChangedListener { 4 | 5 | fun onCodeContentChanged(value: String) 6 | 7 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/builder/IPositionDetectionBuilder.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.builder 2 | 3 | interface IPositionDetectionBuilder { 4 | 5 | 6 | 7 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/subpage/QrBaseSubpageFragment.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.subpage 2 | 3 | import com.lollipop.lqrdemo.base.BaseFragment 4 | import com.lollipop.lqrdemo.base.PigmentTheme 5 | import com.lollipop.pigment.Pigment 6 | 7 | open class QrBaseSubpageFragment : BaseFragment() { 8 | 9 | override fun onDecorationChanged(pigment: Pigment) { 10 | super.onDecorationChanged(pigment) 11 | PigmentTheme.getForePanelBackground(pigment) { bg, btn -> 12 | view?.setBackgroundColor(bg) 13 | } 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/writer/QrWriterDistributor.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.writer 2 | 3 | import androidx.lifecycle.LifecycleOwner 4 | 5 | class QrWriterDistributor(lifecycleOwner: LifecycleOwner) : QrWriter(lifecycleOwner) { 6 | 7 | 8 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/writer/QrWriterLayerType.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.writer 2 | 3 | /** 4 | * 孔位 5 | * 可以通过孔位的方式来分发和切换不同的绘制工具 6 | * 同一个绘制器可以支持多个孔位,同时也会占据多个孔位 7 | * 一旦他的某一个孔位被新的绘制器覆盖,那么它应该释放所有它已经占用的孔位 8 | */ 9 | enum class QrWriterLayerType { 10 | 11 | ALIGNMENT, 12 | CONTENT, 13 | POSITION, 14 | 15 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/writer/background/DefaultBackgroundWriterLayer.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.writer.background 2 | 3 | import android.graphics.Canvas 4 | import android.graphics.Color 5 | import android.graphics.Paint 6 | 7 | class DefaultBackgroundWriterLayer : BackgroundWriterLayer() { 8 | 9 | private val color = Color.WHITE 10 | 11 | private val paint = Paint().apply { 12 | isDither = true 13 | isAntiAlias = true 14 | style = Paint.Style.FILL 15 | } 16 | 17 | override fun draw(canvas: Canvas) { 18 | val c = color 19 | if (clipPath.isEmpty) { 20 | canvas.drawColor(c) 21 | } else { 22 | paint.color = c 23 | canvas.drawPath(clipPath, paint) 24 | } 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/creator/writer/background/LocalBitmapBackgroundWriterLayer.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.creator.writer.background 2 | 3 | import com.lollipop.lqrdemo.creator.background.BackgroundInfo 4 | import com.lollipop.lqrdemo.creator.background.BackgroundStore 5 | 6 | 7 | class LocalBitmapBackgroundWriterLayer : BaseBitmapBackgroundWriterLayer() { 8 | 9 | override fun getPhotoPathFromStore(): String { 10 | return BackgroundStore.getByType()?.file?.path ?: "" 11 | } 12 | 13 | 14 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/floating/view/FloatingActionInvokeCallback.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.floating.view 2 | 3 | import android.content.Context 4 | 5 | fun interface FloatingActionInvokeCallback { 6 | 7 | fun invoke(context: Context) 8 | 9 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/floating/view/FloatingView.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.floating.view 2 | 3 | import android.content.Context 4 | import android.view.View 5 | 6 | interface FloatingView { 7 | 8 | fun createView(context: Context, widthDp: Int, heightDp: Int, berthWeight: Float): View 9 | 10 | fun onBerthChanged(berth: FloatingViewBerth) 11 | 12 | fun onStateChanged(state: FloatingViewState) 13 | 14 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/floating/view/FloatingViewBerth.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.floating.view 2 | 3 | enum class FloatingViewBerth { 4 | 5 | LEFT, RIGHT, NONE 6 | 7 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/floating/view/FloatingViewConfig.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.floating.view 2 | 3 | class FloatingViewConfig( 4 | val widthDp: Int = 0, 5 | val heightDp: Int = 0, 6 | val berthWeight: Float = 0.5f 7 | ) -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/floating/view/FloatingViewFactory.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.floating.view 2 | 3 | interface FloatingViewFactory { 4 | 5 | fun create(callback: FloatingActionInvokeCallback): FloatingView 6 | 7 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/floating/view/FloatingViewState.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.floating.view 2 | 3 | enum class FloatingViewState { 4 | 5 | IDLE, DRAGGING, 6 | 7 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/other/ScanTileService.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.other 2 | 3 | import android.content.Intent 4 | import android.service.quicksettings.TileService 5 | import com.lollipop.lqrdemo.MainActivity 6 | 7 | class ScanTileService: TileService() { 8 | 9 | override fun onClick() { 10 | super.onClick() 11 | val intent = Intent(this, MainActivity::class.java) 12 | intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 13 | startActivity(intent) 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/preview/BarcodePreviewRenderer.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.preview 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import com.lollipop.pigment.Pigment 6 | import com.lollipop.qr.comm.BarcodeWrapper 7 | 8 | interface BarcodePreviewRenderer { 9 | 10 | fun getView(container: ViewGroup): View 11 | 12 | fun render(barcode: BarcodeWrapper) 13 | 14 | fun onDecorationChanged(pigment: Pigment) 15 | 16 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/router/EmailRouter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.router 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import com.lollipop.qr.comm.BarcodeInfo 6 | 7 | 8 | object EmailRouter : BarcodeRouter() { 9 | 10 | override fun getIntent(context: Context, barcodeInfo: BarcodeInfo.Email): Intent { 11 | val intent = Intent(Intent.ACTION_SEND) 12 | intent.setType("text/plain") 13 | intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(barcodeInfo.address)) 14 | intent.putExtra(Intent.EXTRA_SUBJECT, barcodeInfo.subject) 15 | intent.putExtra(Intent.EXTRA_TEXT, barcodeInfo.body) 16 | return Intent.createChooser(intent, "") 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/router/GeoRouter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.router 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.net.Uri 6 | import com.lollipop.qr.comm.BarcodeInfo 7 | 8 | object GeoRouter : BarcodeRouter() { 9 | 10 | override fun getIntent(context: Context, barcodeInfo: BarcodeInfo.GeoPoint): Intent { 11 | return Intent( 12 | Intent.ACTION_VIEW, 13 | Uri.parse("geo:${barcodeInfo.lat},${barcodeInfo.lng}") 14 | ) 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/router/PhoneRouter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.router 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.net.Uri 6 | import com.lollipop.qr.comm.BarcodeInfo 7 | 8 | object PhoneRouter : BarcodeRouter() { 9 | 10 | override fun getIntent(context: Context, barcodeInfo: BarcodeInfo.Phone): Intent { 11 | val intent = Intent(Intent.ACTION_DIAL) 12 | intent.setData(Uri.parse("tel:" + barcodeInfo.number)) 13 | return intent 14 | } 15 | 16 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/router/SmsRouter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.router 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.net.Uri 6 | import com.lollipop.qr.comm.BarcodeInfo 7 | 8 | 9 | object SmsRouter : BarcodeRouter() { 10 | 11 | override fun getIntent(context: Context, barcodeInfo: BarcodeInfo.Sms): Intent { 12 | val intent = Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:${barcodeInfo.phoneNumber}")) 13 | intent.putExtra("sms_body", barcodeInfo.message) 14 | return intent 15 | } 16 | 17 | } -------------------------------------------------------------------------------- /lQR/src/main/java/com/lollipop/lqrdemo/router/WifiRouter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.lqrdemo.router 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.provider.Settings 6 | import android.widget.Toast 7 | import com.lollipop.base.util.Clipboard 8 | import com.lollipop.lqrdemo.R 9 | import com.lollipop.qr.comm.BarcodeInfo 10 | 11 | 12 | object WifiRouter : BarcodeRouter() { 13 | 14 | override fun getIntent(context: Context, barcodeInfo: BarcodeInfo.Wifi): Intent { 15 | Clipboard.copy(context, value = barcodeInfo.password) 16 | Toast.makeText( 17 | context, 18 | context.getString(R.string.copied_wifi, barcodeInfo.ssid), 19 | Toast.LENGTH_LONG 20 | ).show() 21 | return Intent(Settings.ACTION_WIFI_SETTINGS) 22 | } 23 | 24 | } -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_arrow_back_24.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_build_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_close_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_content_copy_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_do_not_disturb_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_done_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_email_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_error_outline_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_flash_off_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_flash_on_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_fullscreen_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_home_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_keyboard_double_arrow_down_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_keyboard_double_arrow_left_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_keyboard_double_arrow_right_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_keyboard_double_arrow_up_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_location_on_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_menu_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_numbers_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_person_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_phone_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_phone_android_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_share_24.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_warning_amber_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_web_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_baseline_work_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_corner_fill_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_corner_outline_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_outline_arrow_circle_right_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/drawable/ic_outline_insert_photo_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /lQR/src/main/res/font/brunoace_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/font/brunoace_regular.ttf -------------------------------------------------------------------------------- /lQR/src/main/res/font/font_logo.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /lQR/src/main/res/font/raleway_regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/font/raleway_regular.ttf -------------------------------------------------------------------------------- /lQR/src/main/res/layout/activity_scan_result.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | 16 | 17 | -------------------------------------------------------------------------------- /lQR/src/main/res/layout/dialog_charset_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /lQR/src/main/res/layout/item_content_builder_space.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lQR/src/main/res/layout/item_dialog_charset_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /lQR/src/main/res/layout/item_main_drawer.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-hdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-hdpi/ic_launcher.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-hdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-hdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-mdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-mdpi/ic_launcher.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-mdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-mdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xxxhdpi/ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xxxhdpi/ic_launcher.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp -------------------------------------------------------------------------------- /lQR/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/lQR/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp -------------------------------------------------------------------------------- /lQR/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /lQR/src/main/res/values/attr_preview_window_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /lQR/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FF000000 4 | #FFFFFFFF 5 | 6 | -------------------------------------------------------------------------------- /lQR/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFFFFF 4 | -------------------------------------------------------------------------------- /lQR/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 16 | -------------------------------------------------------------------------------- /punch/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | -------------------------------------------------------------------------------- /punch/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | app 3 | 添加标签 4 | 你当前还没有任何打卡项\n快添加几个吧 5 | AddFlagActivity 6 | -------------------------------------------------------------------------------- /punch/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /qr/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /qr/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/qr/consumer-rules.pro -------------------------------------------------------------------------------- /qr/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /qr/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/BarcodeHelper.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr 2 | 3 | import androidx.lifecycle.LifecycleOwner 4 | import com.lollipop.qr.reader.CameraBarcodeReader 5 | import com.lollipop.qr.reader.ImageBarcodeReader 6 | import com.lollipop.qr.writer.BarcodeWriter 7 | import com.lollipop.qr.writer.TypedBarcodeWriter 8 | 9 | object BarcodeHelper { 10 | 11 | fun createCameraReader(lifecycleOwner: LifecycleOwner): CameraBarcodeReader { 12 | return CameraBarcodeReader(lifecycleOwner) 13 | } 14 | 15 | fun createLocalReader(lifecycleOwner: LifecycleOwner): ImageBarcodeReader { 16 | return ImageBarcodeReader(lifecycleOwner) 17 | } 18 | 19 | fun createWriter(lifecycleOwner: LifecycleOwner): TypedBarcodeWriter { 20 | return TypedBarcodeWriter(lifecycleOwner) 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/BarcodeType.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr 2 | 3 | import com.google.mlkit.vision.barcode.common.Barcode 4 | 5 | enum class BarcodeType(val code: Int) { 6 | UNKNOWN(Barcode.TYPE_UNKNOWN), 7 | CONTACT_INFO(Barcode.TYPE_CONTACT_INFO), 8 | EMAIL(Barcode.TYPE_EMAIL), 9 | ISBN(Barcode.TYPE_ISBN), 10 | PHONE(Barcode.TYPE_PHONE), 11 | PRODUCT(Barcode.TYPE_PRODUCT), 12 | SMS(Barcode.TYPE_SMS), 13 | TEXT(Barcode.TYPE_TEXT), 14 | URL(Barcode.TYPE_URL), 15 | WIFI(Barcode.TYPE_WIFI), 16 | GEO(Barcode.TYPE_GEO), 17 | CALENDAR_EVENT(Barcode.TYPE_CALENDAR_EVENT), 18 | DRIVER_LICENSE(Barcode.TYPE_DRIVER_LICENSE); 19 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/reader/ImageFormat.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.reader 2 | 3 | import com.google.mlkit.vision.common.InputImage 4 | 5 | enum class ImageFormat(val code: Int, val mediaCode: Int) { 6 | 7 | NV21(InputImage.IMAGE_FORMAT_NV21, android.graphics.ImageFormat.NV21), 8 | YV12(InputImage.IMAGE_FORMAT_YV12, android.graphics.ImageFormat.YV12), 9 | BITMAP(InputImage.IMAGE_FORMAT_BITMAP, android.graphics.ImageFormat.UNKNOWN), 10 | YUV_420_888(InputImage.IMAGE_FORMAT_YUV_420_888, android.graphics.ImageFormat.YUV_420_888) 11 | 12 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/reader/OnBarcodeScanResultListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.reader 2 | 3 | import com.lollipop.qr.comm.BarcodeResult 4 | 5 | fun interface OnBarcodeScanResultListener { 6 | 7 | fun onBarcodeScanResult(result: BarcodeResult) 8 | 9 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/reader/OnCameraFocusChangedListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.reader 2 | 3 | fun interface OnCameraFocusChangedListener { 4 | 5 | fun onCameraFocusChanged(isSuccessful: Boolean, x: Float, y: Float) 6 | 7 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/reader/QrPreviewMode.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.reader 2 | 3 | import androidx.camera.view.PreviewView 4 | 5 | enum class QrPreviewMode(val mode: PreviewView.ImplementationMode) { 6 | PERFORMANCE(PreviewView.ImplementationMode.PERFORMANCE), 7 | COMPATIBLE(PreviewView.ImplementationMode.COMPATIBLE), 8 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/reader/QrPreviewScaleType.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.reader 2 | 3 | import androidx.camera.view.PreviewView 4 | 5 | enum class QrPreviewScaleType(val type: PreviewView.ScaleType) { 6 | /** 7 | * 剪裁保留开始位置 8 | */ 9 | FILL_START(PreviewView.ScaleType.FILL_START), 10 | 11 | /** 12 | * 剪裁保留中间位置 13 | */ 14 | FILL_CENTER(PreviewView.ScaleType.FILL_CENTER), 15 | 16 | /** 17 | * 剪裁保留结束位置 18 | */ 19 | FILL_END(PreviewView.ScaleType.FILL_END), 20 | 21 | /** 22 | * 缩放居上 23 | */ 24 | FIT_START(PreviewView.ScaleType.FIT_START), 25 | 26 | /** 27 | * 缩放居中 28 | */ 29 | FIT_CENTER(PreviewView.ScaleType.FIT_CENTER), 30 | 31 | /** 32 | * 缩放居尾 33 | */ 34 | FIT_END(PreviewView.ScaleType.FIT_END); 35 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/writer/ErrorCorrectionLevel.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.writer 2 | 3 | enum class ErrorCorrectionLevel( 4 | override val zxing: com.google.zxing.qrcode.decoder.ErrorCorrectionLevel 5 | ) : ZxingWrapper { 6 | 7 | L(com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.L), 8 | 9 | /** M = ~15% correction */ 10 | M(com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.M), 11 | 12 | /** Q = ~25% correction */ 13 | Q(com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.Q), 14 | 15 | /** H = ~30% correction */ 16 | H(com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H) 17 | 18 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/writer/ForceCodeSet.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.writer 2 | 3 | enum class ForceCodeSet(override val zxing: String) : ZxingWrapper { 4 | 5 | A("A"), 6 | B("B"), 7 | C("C") 8 | 9 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/writer/Pdf417Compaction.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.writer 2 | 3 | enum class Pdf417Compaction( 4 | override val zxing: com.google.zxing.pdf417.encoder.Compaction 5 | ) : ZxingWrapper { 6 | 7 | AUTO(com.google.zxing.pdf417.encoder.Compaction.AUTO), 8 | TEXT(com.google.zxing.pdf417.encoder.Compaction.TEXT), 9 | BYTE(com.google.zxing.pdf417.encoder.Compaction.BYTE), 10 | NUMERIC(com.google.zxing.pdf417.encoder.Compaction.NUMERIC) 11 | 12 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/writer/SymbolShapeHint.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.writer 2 | 3 | 4 | enum class SymbolShapeHint( 5 | override val zxing: com.google.zxing.datamatrix.encoder.SymbolShapeHint 6 | ) : ZxingWrapper { 7 | 8 | FORCE_NONE(com.google.zxing.datamatrix.encoder.SymbolShapeHint.FORCE_NONE), 9 | FORCE_SQUARE(com.google.zxing.datamatrix.encoder.SymbolShapeHint.FORCE_SQUARE), 10 | FORCE_RECTANGLE(com.google.zxing.datamatrix.encoder.SymbolShapeHint.FORCE_RECTANGLE), 11 | 12 | } -------------------------------------------------------------------------------- /qr/src/main/java/com/lollipop/qr/writer/ZxingWrapper.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.qr.writer 2 | 3 | interface ZxingWrapper { 4 | 5 | val zxing: T 6 | 7 | } -------------------------------------------------------------------------------- /recorder/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /recorder/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/recorder/consumer-rules.pro -------------------------------------------------------------------------------- /recorder/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /recorder/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /recorder/src/main/java/com/lollipop/recorder/VisualizerRenderer.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.recorder 2 | 3 | interface VisualizerRenderer { 4 | 5 | fun onRender(data: VisualizerHelper.Wave) {} 6 | 7 | fun onRender(data: VisualizerHelper.Fft) {} 8 | 9 | fun onRender(data: VisualizerHelper.Frequency) {} 10 | 11 | } -------------------------------------------------------------------------------- /recorder/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /renderScript/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /renderScript/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/renderScript/consumer-rules.pro -------------------------------------------------------------------------------- /renderScript/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /renderScript/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | rootProject.name = "Techo" 2 | include(":base") 3 | include(":gallery") 4 | include(":palette") 5 | include(":maskGuide") 6 | include(":app") 7 | include(":bigBoom") 8 | include(":web") 9 | include(":browser") 10 | include(":recorder") 11 | include(":renderScript") 12 | include(":pigment") 13 | include(":ltabview") 14 | include(":qr") 15 | include(":clip") 16 | include(":fragmentHelper") 17 | include(":colorRes") 18 | include(":verticalPage") 19 | include(":stitch") 20 | include(":fileChooser") 21 | include(":lQR") 22 | include(":widget") 23 | include(":privacy") 24 | include(":faceIcon") 25 | include(":lBus") 26 | include(":dotsCanvas") 27 | include(":insets") 28 | include(":punch") 29 | -------------------------------------------------------------------------------- /stitch/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /stitch/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/stitch/consumer-rules.pro -------------------------------------------------------------------------------- /stitch/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /stitch/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /stitch/src/main/java/com/lollipop/stitch/StitchVertex.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.stitch 2 | 3 | class StitchVertex( 4 | val xWeight: Float, 5 | val yWeight: Float 6 | ) { 7 | 8 | fun x(width: Float): Float { 9 | return width * xWeight 10 | } 11 | 12 | fun y(height: Float): Float { 13 | return height * yWeight 14 | } 15 | 16 | override fun toString(): String { 17 | return "StitchVertex(x = $xWeight, y = $yWeight)" 18 | } 19 | 20 | } -------------------------------------------------------------------------------- /verticalPage/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /verticalPage/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/verticalPage/consumer-rules.pro -------------------------------------------------------------------------------- /verticalPage/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /verticalPage/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /web/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /web/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/web/consumer-rules.pro -------------------------------------------------------------------------------- /web/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /web/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/IWebFactory.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web 2 | 3 | import android.view.View 4 | import android.webkit.WebView 5 | import com.lollipop.web.impl.DefaultIWeb 6 | import java.lang.RuntimeException 7 | 8 | object IWebFactory { 9 | 10 | fun create(host: WebHost, view: View): IWeb { 11 | when (view) { 12 | is WebView -> { 13 | return DefaultIWeb(host, view) 14 | } 15 | else -> { 16 | throw RuntimeException("未知的WebView") 17 | } 18 | } 19 | } 20 | 21 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/bridge/Bridge.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.bridge 2 | 3 | import com.lollipop.web.IWeb 4 | import com.lollipop.web.WebHost 5 | 6 | /** 7 | * 桥,沟通JS与Java的桥梁 8 | * 它是一个通用的接口,它需要具体的实现方来触发 9 | */ 10 | interface Bridge { 11 | 12 | /** 13 | * 接口的名称 14 | */ 15 | val name: String 16 | 17 | /** 18 | * 接口的实现方法 19 | * @param host 上下文信息 20 | * @param web Web容器的对象 21 | * @param payload 函数的请求参数,以及要求的回调地址 22 | * 23 | * 但是对于直接注册的JavascriptInterface而言,它是不一样的 24 | * 并不能直接使用addJavascriptInterface时期生效,他只是一个规范后的工具类 25 | */ 26 | fun invoke(host: WebHost, web: IWeb, payload: BridgePayload) 27 | 28 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/bridge/BridgeAlias.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.bridge 2 | 3 | import com.lollipop.web.IWeb 4 | import com.lollipop.web.WebHost 5 | 6 | /** 7 | * 接口别名,为一个接口包装为另一个别名 8 | * 使得相似或者相同实现的Bridge可以被调用 9 | */ 10 | open class BridgeAlias(private val alias: String, val base: Bridge) : Bridge { 11 | 12 | override val name: String 13 | get() { 14 | return alias 15 | } 16 | 17 | override fun invoke(host: WebHost, web: IWeb, payload: BridgePayload) { 18 | if (base is AliasBridge) { 19 | base.invokeAlias(host, web, alias, payload) 20 | } else { 21 | base.invoke(host, web, payload) 22 | } 23 | } 24 | 25 | interface AliasBridge { 26 | fun invokeAlias(host: WebHost, web: IWeb, alias: String, payload: BridgePayload) 27 | } 28 | 29 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/bridge/BridgeIntercept.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.bridge 2 | 3 | sealed class BridgeIntercept { 4 | 5 | /** 6 | * 拒绝本次请求的内容,不做分发也不做回调响应 7 | */ 8 | data object Rejected : BridgeIntercept() 9 | 10 | /** 11 | * 分发为新的函数名 12 | */ 13 | class Dispatch(val newAction: String) : BridgeIntercept() 14 | 15 | /** 16 | * 通过,使用原有的函数名分发 17 | */ 18 | data object Pass : BridgeIntercept() 19 | 20 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/compat/EngineVersion.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.compat 2 | 3 | data class EngineVersion( 4 | val name: String, 5 | val code: Long 6 | ) { 7 | 8 | companion object { 9 | val EMPTY = EngineVersion("", 0L) 10 | } 11 | 12 | val isEmpty = name.isEmpty() && code == 0L 13 | 14 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/completion/UrlCompletion.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.completion 2 | 3 | fun interface UrlCompletion { 4 | 5 | fun complement(url: String, result: UrlCompletionResult) 6 | 7 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/completion/UrlCompletionResult.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.completion 2 | 3 | interface UrlCompletionResult { 4 | 5 | fun onLoadUrl(url: String) 6 | 7 | fun onSearch(keyword: String) 8 | 9 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/listener/CustomViewListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.listener 2 | 3 | import android.view.View 4 | 5 | interface CustomViewListener { 6 | 7 | fun onShowCustomView(view: View?, callback: CustomViewCallback) 8 | 9 | fun onHideCustomView() 10 | 11 | interface CustomViewCallback { 12 | fun onCustomViewHidden() 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/listener/DownloadListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.listener 2 | 3 | interface DownloadListener { 4 | 5 | fun createDownload( 6 | url: String, 7 | userAgent: String, 8 | contentDisposition: String, 9 | mimetype: String, 10 | contentLength: Long 11 | ) 12 | 13 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/listener/GeolocationPermissionsListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.listener 2 | 3 | interface GeolocationPermissionsListener { 4 | 5 | fun request(origin: String, result: GeolocationPermissionsResult) 6 | 7 | fun abandon() 8 | 9 | } 10 | 11 | interface GeolocationPermissionsResult { 12 | /** 13 | * @param origin 请求来源 14 | * @param allow 是否同意 15 | * @param retain 是否在当前页面结束之前始终保持本次结果 16 | */ 17 | fun onGeolocationPermissionsResult(origin: String, allow: Boolean, retain: Boolean) 18 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/listener/LogPrinter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.listener 2 | 3 | interface LogPrinter { 4 | 5 | fun log(info: LogInfo) 6 | 7 | data class LogInfo( 8 | val message: String, 9 | val sourceId: String, 10 | val lineNumber: Int, 11 | val level: LogLevel 12 | ) 13 | 14 | enum class LogLevel { 15 | TIP, LOG, WARNING, ERROR, DEBUG 16 | } 17 | 18 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/listener/ProgressListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.listener 2 | 3 | import com.lollipop.web.IWeb 4 | 5 | fun interface ProgressListener { 6 | 7 | /** 8 | * 加载进度 9 | * @param iWeb 浏览器实体 10 | * @param progress 加载进度,0~100 11 | */ 12 | fun onProgressChanged(iWeb: IWeb, progress: Int) 13 | 14 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/listener/TitleListener.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.listener 2 | 3 | import android.graphics.Bitmap 4 | import com.lollipop.web.IWeb 5 | 6 | interface TitleListener { 7 | 8 | /** 9 | * 标题发生变化时 10 | * @param iWeb 浏览器实体 11 | * @param title 网页标题 12 | */ 13 | fun onTitleChanged(iWeb: IWeb, title: String) 14 | 15 | /** 16 | * 标题的Icon发生变化时 17 | * @param iWeb 浏览器实体 18 | * @param icon 网页标题的icon 19 | */ 20 | fun onIconChanged(iWeb: IWeb, icon: Bitmap?) 21 | 22 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/SearchCancelable.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search 2 | 3 | interface SearchCancelable { 4 | fun cancel() 5 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/SearchEngineCallback.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search 2 | 3 | interface SearchEngineCallback { 4 | 5 | /** 6 | * 搜索引擎的建议结果 7 | */ 8 | fun onSearchRelevantResult(values: List) 9 | 10 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/SearchEngineFilter.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search 2 | 3 | interface SearchEngineFilter { 4 | 5 | fun onSearch(keyword: String): List 6 | 7 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/SearchSuggestion.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search 2 | 3 | data class SearchSuggestion( 4 | val name: String, 5 | val url: String, 6 | val type: SearchSuggestionType, 7 | val score: Int 8 | ) { 9 | 10 | companion object { 11 | const val SCORE_MAX = 100 12 | const val SCORE_MIN = 1 13 | } 14 | 15 | } 16 | 17 | /** 18 | * 搜索引擎的建议类型 19 | */ 20 | enum class SearchSuggestionType { 21 | /** 22 | * 普通搜索操作,返回的URL会使用引擎搜索 23 | */ 24 | SEARCH, 25 | 26 | /** 27 | * 站点,返回的URL将会是某个网站的地址 28 | */ 29 | SITE, 30 | 31 | /** 32 | * 历史,返回的URL是历史记录中的 33 | */ 34 | HISTORY, 35 | 36 | /** 37 | * 设置,这个URl会是内部的设置页面的路径 38 | */ 39 | SETTINGS 40 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/SimpleSearchEngine.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search 2 | 3 | import androidx.lifecycle.Lifecycle 4 | 5 | abstract class SimpleSearchEngine(lifecycle: Lifecycle) : SearchEngine(lifecycle) { 6 | 7 | override fun onSearch(keyword: String): List { 8 | return listOf( 9 | SearchSuggestion( 10 | name = "", 11 | url = getSearchUrl(keyword), 12 | type = SearchSuggestionType.SEARCH, 13 | score = 80 14 | ) 15 | ) 16 | } 17 | 18 | abstract fun getSearchUrl(keyword: String): String 19 | 20 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/impl/Baidu.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search.impl 2 | 3 | import androidx.lifecycle.Lifecycle 4 | import com.lollipop.web.search.SearchEngine 5 | import com.lollipop.web.search.SearchSuggestion 6 | import com.lollipop.web.search.SearchSuggestionType 7 | import com.lollipop.web.search.SimpleSearchEngine 8 | 9 | open class Baidu(lifecycle: Lifecycle) : SimpleSearchEngine(lifecycle) { 10 | 11 | override fun getSearchUrl(keyword: String): String { 12 | return "https://www.baidu.com/s?ie=utf-8&wd=$keyword" 13 | } 14 | 15 | } -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/impl/Bing.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search.impl 2 | 3 | import androidx.lifecycle.Lifecycle 4 | import com.lollipop.web.search.* 5 | 6 | open class Bing(lifecycle: Lifecycle) : SimpleSearchEngine(lifecycle) { 7 | 8 | override fun getSearchUrl(keyword: String): String { 9 | return "https://bing.com/search?q=$keyword" 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /web/src/main/java/com/lollipop/web/search/impl/Google.kt: -------------------------------------------------------------------------------- 1 | package com.lollipop.web.search.impl 2 | 3 | import androidx.lifecycle.Lifecycle 4 | import com.lollipop.web.search.* 5 | 6 | open class Google(lifecycle: Lifecycle) : SimpleSearchEngine(lifecycle) { 7 | 8 | override fun getSearchUrl(keyword: String): String { 9 | return "https://www.google.com/search?q=${keyword}" 10 | } 11 | 12 | } 13 | -------------------------------------------------------------------------------- /widget/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /widget/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Mr-XiaoLiang/Techo/131627a8b73dc40d1634c3a529bf4b3ff49dbfc1/widget/consumer-rules.pro -------------------------------------------------------------------------------- /widget/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /widget/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /widget/src/main/res/drawable/bg_checkbox_circular.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /widget/src/main/res/drawable/bg_checkbox_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /widget/src/main/res/drawable/fg_checkbox_circular.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /widget/src/main/res/drawable/fg_checkbox_square.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /widget/src/main/res/drawable/ic_baseline_check_24.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /widget/src/main/res/values/attr_round_background_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | --------------------------------------------------------------------------------