├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── labeler.yml └── workflows │ ├── ci.yml │ ├── daily_builds.yml │ ├── pr_label.yml │ ├── process_release.yml │ └── stale.yml ├── .gitignore ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── SUBMIT_GUIDELINES.md ├── build.gradle.kts ├── buildSrc ├── build.gradle.kts └── src │ └── main │ └── kotlin │ └── Versioning.kt ├── gradle.properties ├── gradle ├── dependency-graph │ └── project.dot.png ├── libs.versions.toml └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── maven-versions.gradle.kts ├── pluto-plugins ├── base │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ ├── plugin │ │ │ ├── DataModel.kt │ │ │ ├── Plugin.kt │ │ │ ├── PluginEntity.kt │ │ │ ├── PluginGroup.kt │ │ │ ├── libinterface │ │ │ │ ├── FilesInterface.kt │ │ │ │ ├── LibraryInfoInterface.kt │ │ │ │ ├── NotificationInterface.kt │ │ │ │ └── PlutoInterface.kt │ │ │ ├── settings │ │ │ │ └── SettingsPreferences.kt │ │ │ └── share │ │ │ │ ├── ContentShare.kt │ │ │ │ ├── ContentShareViewModel.kt │ │ │ │ ├── ShareFragment.kt │ │ │ │ ├── ShareKtx.kt │ │ │ │ └── csv │ │ │ │ └── CSVFormatter.kt │ │ │ └── utilities │ │ │ ├── AutoClearedValue.kt │ │ │ ├── DeBounceClickListener.kt │ │ │ ├── DebugLog.kt │ │ │ ├── SingleLiveEvent.kt │ │ │ ├── device │ │ │ ├── Device.kt │ │ │ └── RootUtil.kt │ │ │ ├── extensions │ │ │ ├── AnimationKtx.kt │ │ │ ├── ContextKtx.kt │ │ │ ├── DateKtx.kt │ │ │ ├── DimensKtx.kt │ │ │ ├── KeyboardKtx.kt │ │ │ ├── LayoutKtx.kt │ │ │ ├── LifecycleKtx.kt │ │ │ ├── LiveDataKtx.kt │ │ │ ├── PairKtx.kt │ │ │ ├── PopupKtx.kt │ │ │ ├── RecyclerViewKtx.kt │ │ │ ├── SettingsKtx.kt │ │ │ ├── StringsKtx.kt │ │ │ └── ViewKtx.kt │ │ │ ├── list │ │ │ ├── BaseAdapter.kt │ │ │ ├── CustomItemDecorator.kt │ │ │ └── DiffAwareAdapter.kt │ │ │ ├── selector │ │ │ ├── DataSelector.kt │ │ │ └── ui │ │ │ │ ├── DataSelectorDialog.kt │ │ │ │ ├── MultiSelectorAdapter.kt │ │ │ │ └── SingleSelectorAdapter.kt │ │ │ ├── spannable │ │ │ ├── CustomTypefaceSpan.kt │ │ │ └── SpanUtil.kt │ │ │ └── views │ │ │ ├── TabularDataView.kt │ │ │ └── keyvalue │ │ │ ├── KeyValuePairData.kt │ │ │ ├── KeyValuePairView.kt │ │ │ └── edit │ │ │ ├── KeyValuePairEditDialog.kt │ │ │ └── KeyValuePairEditor.kt │ │ └── res │ │ ├── anim │ │ ├── pluto___fragment_default_enter.xml │ │ ├── pluto___fragment_default_exit.xml │ │ ├── pluto___fragment_default_reenter.xml │ │ └── pluto___fragment_default_return.xml │ │ ├── drawable │ │ ├── pluto___bg_bottom_sheet.xml │ │ ├── pluto___bg_key_value_pair_input.xml │ │ ├── pluto___ic_check.xml │ │ ├── pluto___ic_check_box.xml │ │ ├── pluto___ic_check_box_selected.xml │ │ ├── pluto___ic_check_box_unselected.xml │ │ ├── pluto___ic_chevron_right.xml │ │ ├── pluto___ic_close.xml │ │ ├── pluto___ic_edit_option_selected.xml │ │ ├── pluto___ic_plugin_group_placeholder_icon.xml │ │ ├── pluto___ic_plugin_placeholder_icon.xml │ │ ├── pluto___ic_radio.xml │ │ ├── pluto___ic_radio_selected.xml │ │ ├── pluto___ic_radio_unselected.xml │ │ ├── pluto___ic_search.xml │ │ ├── pluto___ic_share_as_copy.xml │ │ ├── pluto___ic_share_as_file.xml │ │ ├── pluto___ic_share_as_text.xml │ │ └── pluto___line_divider.xml │ │ ├── font │ │ ├── muli.ttf │ │ ├── muli_bold.ttf │ │ ├── muli_light.ttf │ │ └── muli_semibold.ttf │ │ ├── layout │ │ ├── pluto___fragment_key_value_pair_edit.xml │ │ ├── pluto___fragment_share.xml │ │ ├── pluto___layout_content_share_options.xml │ │ ├── pluto___multi_choice_selector_item.xml │ │ ├── pluto___selector_dialog.xml │ │ ├── pluto___single_choice_selector_item.xml │ │ ├── pluto___view_key_value_pair.xml │ │ └── pluto___view_tabular_data.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── integers.xml │ │ ├── strings.xml │ │ └── styles.xml ├── bundle │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ └── AndroidManifest.xml │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ └── AndroidManifest.xml └── plugins │ ├── datastore │ ├── README.md │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── datastore │ │ │ └── pref │ │ │ ├── PlutoDatastorePreferencesPlugin.kt │ │ │ └── PlutoDatastoreWatcher.kt │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── datastore │ │ │ └── pref │ │ │ ├── BaseFragment.kt │ │ │ ├── PlutoDatastorePreferencesPlugin.kt │ │ │ ├── PlutoDatastoreWatcher.kt │ │ │ ├── Session.kt │ │ │ └── internal │ │ │ ├── DatastorePrefUtils.kt │ │ │ ├── EditProcessor.kt │ │ │ ├── Preferences.kt │ │ │ └── ui │ │ │ ├── DatastorePrefAdapter.kt │ │ │ ├── DatastorePrefViewModel.kt │ │ │ ├── KeyValueItemHolder.kt │ │ │ └── ListFragment.kt │ │ └── res │ │ ├── drawable │ │ ├── pluto_dts___bg_shared_pref_file_badge.xml │ │ ├── pluto_dts___ic_back.xml │ │ ├── pluto_dts___ic_check.xml │ │ ├── pluto_dts___ic_clear.xml │ │ ├── pluto_dts___ic_close.xml │ │ ├── pluto_dts___ic_expand.xml │ │ ├── pluto_dts___ic_filter.xml │ │ └── pluto_dts___ic_logo.xml │ │ ├── layout │ │ ├── pluto_dts___fragment_base.xml │ │ ├── pluto_dts___fragment_list.xml │ │ └── pluto_dts___item_shared_pref_key_value.xml │ │ ├── navigation │ │ └── pluto_dts___navigation.xml │ │ └── values │ │ └── strings.xml │ ├── exceptions │ ├── README.md │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── exceptions │ │ │ ├── ANRException.kt │ │ │ ├── PlutoExceptions.kt │ │ │ ├── PlutoExceptionsPlugin.kt │ │ │ └── UncaughtANRHandler.kt │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ ├── detekt-baseline.xml │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── exceptions │ │ │ ├── ANRException.kt │ │ │ ├── PlutoExceptions.kt │ │ │ ├── PlutoExceptionsPlugin.kt │ │ │ ├── UncaughtANRHandler.kt │ │ │ └── internal │ │ │ ├── BaseFragment.kt │ │ │ ├── DataModel.kt │ │ │ ├── Session.kt │ │ │ ├── anr │ │ │ ├── AnrSupervisor.kt │ │ │ ├── AnrSupervisorCallback.kt │ │ │ └── AnrSupervisorRunnable.kt │ │ │ ├── crash │ │ │ ├── CrashHandler.kt │ │ │ └── CrashNotification.kt │ │ │ ├── extensions │ │ │ ├── ConcurrencyKtx.kt │ │ │ └── ThreadKtx.kt │ │ │ ├── persistence │ │ │ ├── EntityConverters.kt │ │ │ ├── ExceptionDBHandler.kt │ │ │ ├── ExceptionDao.kt │ │ │ ├── ExceptionEntity.kt │ │ │ ├── Preferences.kt │ │ │ └── database │ │ │ │ ├── DatabaseManager.kt │ │ │ │ └── PlutoDatabase.kt │ │ │ └── ui │ │ │ ├── CrashesAdapter.kt │ │ │ ├── CrashesViewModel.kt │ │ │ ├── DetailsFragment.kt │ │ │ ├── ListFragment.kt │ │ │ ├── StackTracesAdapter.kt │ │ │ ├── ThreadStackTraceFragment.kt │ │ │ └── holder │ │ │ ├── CrashItemDetailsDeviceHolder.kt │ │ │ ├── CrashItemDetailsHeaderHolder.kt │ │ │ ├── CrashItemDetailsThreadHolder.kt │ │ │ ├── CrashItemDetailsThreadStackThreadHolder.kt │ │ │ ├── CrashItemHolder.kt │ │ │ └── StackTraceListItemHolder.kt │ │ └── res │ │ ├── drawable │ │ ├── pluto_excep___bg_section_body.xml │ │ ├── pluto_excep___bg_section_header.xml │ │ ├── pluto_excep___bg_section_light.xml │ │ ├── pluto_excep___ic_anr_warning.xml │ │ ├── pluto_excep___ic_arrow_back.xml │ │ ├── pluto_excep___ic_chevron_right.xml │ │ ├── pluto_excep___ic_clear_all.xml │ │ ├── pluto_excep___ic_close.xml │ │ ├── pluto_excep___ic_delete.xml │ │ ├── pluto_excep___ic_dropdown_cta.xml │ │ ├── pluto_excep___ic_error.xml │ │ ├── pluto_excep___ic_filter.xml │ │ ├── pluto_excep___ic_filter_light.xml │ │ ├── pluto_excep___ic_main_thread.xml │ │ ├── pluto_excep___ic_more.xml │ │ ├── pluto_excep___ic_non_main_thread.xml │ │ ├── pluto_excep___ic_plugin_logo.xml │ │ ├── pluto_excep___ic_share.xml │ │ └── pluto_excep___ic_thread_traces.xml │ │ ├── layout │ │ ├── pluto_excep___fragment_base.xml │ │ ├── pluto_excep___fragment_details.xml │ │ ├── pluto_excep___fragment_list.xml │ │ ├── pluto_excep___fragment_thread_stack_trace.xml │ │ ├── pluto_excep___item_crash.xml │ │ ├── pluto_excep___item_crash_details_device.xml │ │ ├── pluto_excep___item_crash_details_header.xml │ │ ├── pluto_excep___item_crash_details_thread.xml │ │ ├── pluto_excep___item_crash_details_thread_stack_trace.xml │ │ ├── pluto_excep___item_crash_details_thread_stack_trace_list.xml │ │ └── pluto_excep___stub_crash_report.xml │ │ ├── menu │ │ ├── pluto_excep___menu_more_options.xml │ │ └── pluto_excep___menu_stack_trace_filter.xml │ │ ├── navigation │ │ └── pluto_excep___navigation.xml │ │ └── values │ │ └── strings.xml │ ├── layout-inspector │ ├── README.md │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── layoutinspector │ │ │ └── PlutoLayoutInspectorPlugin.kt │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── layoutinspector │ │ │ ├── BaseFragment.kt │ │ │ ├── PlutoLayoutInspectorPlugin.kt │ │ │ ├── ViewInfoFragment.kt │ │ │ └── internal │ │ │ ├── ActivityLifecycle.kt │ │ │ ├── ParamsPreviewPanel.kt │ │ │ ├── attributes │ │ │ ├── ViewAttrFragment.kt │ │ │ ├── ViewAttrViewModel.kt │ │ │ ├── data │ │ │ │ ├── Attribute.kt │ │ │ │ ├── MutableAttribute.kt │ │ │ │ ├── mutability │ │ │ │ │ ├── AttributeAlpha.kt │ │ │ │ │ ├── AttributeColor.kt │ │ │ │ │ ├── AttributeDimenDP.kt │ │ │ │ │ ├── AttributeDimenSP.kt │ │ │ │ │ ├── AttributeGravity.kt │ │ │ │ │ ├── AttributeLayoutParam.kt │ │ │ │ │ ├── AttributeScaleType.kt │ │ │ │ │ ├── AttributeText.kt │ │ │ │ │ └── AttributeVisibility.kt │ │ │ │ └── parser │ │ │ │ │ ├── AttributeParser.kt │ │ │ │ │ ├── IParser.kt │ │ │ │ │ └── types │ │ │ │ │ ├── ImageViewParser.kt │ │ │ │ │ ├── TextViewParser.kt │ │ │ │ │ ├── ViewGroupParser.kt │ │ │ │ │ └── ViewParser.kt │ │ │ └── list │ │ │ │ ├── AttributeAdapter.kt │ │ │ │ ├── AttributeItemHolder.kt │ │ │ │ └── AttributeTitleItemHolder.kt │ │ │ ├── control │ │ │ ├── ControlCta.kt │ │ │ ├── ControlCtaAdapter.kt │ │ │ ├── ControlCtaItemHolder.kt │ │ │ └── ControlsWidget.kt │ │ │ ├── hierarchy │ │ │ ├── Hierarchy.kt │ │ │ ├── NestedView.kt │ │ │ ├── ViewHierarchyFragment.kt │ │ │ ├── ViewHierarchyViewModel.kt │ │ │ └── list │ │ │ │ ├── HierarchyAdapter.kt │ │ │ │ └── HierarchyItemHolder.kt │ │ │ ├── hint │ │ │ ├── HintAdapter.kt │ │ │ ├── HintFragment.kt │ │ │ ├── HintItemHolder.kt │ │ │ └── HintViewModel.kt │ │ │ └── inspect │ │ │ ├── InspectOverlay.kt │ │ │ ├── InspectViewModel.kt │ │ │ ├── InspectedView.kt │ │ │ ├── ViewUtilsKtx.kt │ │ │ └── canvas │ │ │ ├── CaptureCanvas.kt │ │ │ ├── DimensionCanvas.kt │ │ │ └── GridCanvas.kt │ │ └── res │ │ ├── drawable │ │ ├── pluto_li___ic_arrow_back.xml │ │ ├── pluto_li___ic_close.xml │ │ ├── pluto_li___ic_control_close.xml │ │ ├── pluto_li___ic_control_hint.xml │ │ ├── pluto_li___ic_control_move_left.xml │ │ ├── pluto_li___ic_control_move_right.xml │ │ ├── pluto_li___ic_hierarchy_attr.xml │ │ ├── pluto_li___ic_hierarchy_collapse.xml │ │ ├── pluto_li___ic_hierarchy_expand.xml │ │ ├── pluto_li___ic_hierarchy_separator.xml │ │ ├── pluto_li___ic_hierarchy_show_less.xml │ │ ├── pluto_li___ic_hierarchy_show_more.xml │ │ ├── pluto_li___ic_hierarchy_target_view_indicator.xml │ │ ├── pluto_li___ic_plugin_logo.xml │ │ ├── pluto_li___ic_share.xml │ │ ├── pluto_li___ic_view_hierarchy.xml │ │ └── pluto_li___item_divider.xml │ │ ├── layout │ │ ├── pluto_li___bs_container_preview_panel.xml │ │ ├── pluto_li___controls_widget.xml │ │ ├── pluto_li___fragment_base.xml │ │ ├── pluto_li___fragment_view_attr.xml │ │ ├── pluto_li___fragment_view_hierarchy.xml │ │ ├── pluto_li___fragment_view_info.xml │ │ ├── pluto_li___hint_fragment.xml │ │ ├── pluto_li___item_control_cta.xml │ │ ├── pluto_li___item_hint.xml │ │ ├── pluto_li___item_view_attr.xml │ │ ├── pluto_li___item_view_attr_title.xml │ │ ├── pluto_li___item_view_hierarchy.xml │ │ └── pluto_li___params_preview_panel.xml │ │ ├── menu │ │ └── pluto_li___menu_hierarchy_options.xml │ │ ├── navigation │ │ └── pluto_li___navigation.xml │ │ └── values │ │ ├── ids.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── logger │ ├── README.md │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── logger │ │ │ ├── PlutoLog.kt │ │ │ ├── PlutoLoggerPlugin.kt │ │ │ └── PlutoTimberTree.kt │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── logger │ │ │ ├── FilterViewModel.kt │ │ │ ├── PlutoLog.kt │ │ │ ├── PlutoLoggerPlugin.kt │ │ │ ├── PlutoTimberTree.kt │ │ │ ├── Preferences.kt │ │ │ └── internal │ │ │ ├── DataModel.kt │ │ │ ├── LogsFragment.kt │ │ │ ├── LogsProcessor.kt │ │ │ ├── LogsViewModel.kt │ │ │ ├── Session.kt │ │ │ ├── ThrowableKtx.kt │ │ │ ├── persistence │ │ │ ├── EntityConverters.kt │ │ │ ├── LogDBHandler.kt │ │ │ ├── LogDao.kt │ │ │ ├── LogEntity.kt │ │ │ └── database │ │ │ │ ├── DatabaseManager.kt │ │ │ │ └── PlutoDatabase.kt │ │ │ └── ui │ │ │ ├── DetailsFragment.kt │ │ │ ├── ListFragment.kt │ │ │ └── list │ │ │ ├── LogHeaderHolder.kt │ │ │ ├── LogItemHolder.kt │ │ │ └── LogsAdapter.kt │ │ └── res │ │ ├── drawable │ │ ├── pluto_logger___bg_bottom_sheet.xml │ │ ├── pluto_logger___bg_bottom_sheet_content.xml │ │ ├── pluto_logger___ic_analytics.xml │ │ ├── pluto_logger___ic_circle.xml │ │ ├── pluto_logger___ic_clear_all.xml │ │ ├── pluto_logger___ic_close.xml │ │ ├── pluto_logger___ic_filter_dark.xml │ │ ├── pluto_logger___ic_label.xml │ │ ├── pluto_logger___ic_logger_icon.xml │ │ ├── pluto_logger___ic_more.xml │ │ └── pluto_logger___ic_share.xml │ │ ├── layout │ │ ├── pluto_logger___fragment_details.xml │ │ ├── pluto_logger___fragment_list.xml │ │ ├── pluto_logger___fragment_logs.xml │ │ ├── pluto_logger___list_header.xml │ │ └── pluto_logger___list_item.xml │ │ ├── menu │ │ └── pluto_logger___menu_more_options.xml │ │ ├── navigation │ │ └── pluto_logger___navigation.xml │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── network │ ├── README.md │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── network │ │ │ ├── PlutoNetworkPlugin.kt │ │ │ ├── intercept │ │ │ ├── NetworkData.kt │ │ │ └── NetworkInterceptor.kt │ │ │ └── interceptors │ │ │ ├── ktor │ │ │ └── PlutoKtorInterceptor.kt │ │ │ └── okhttp │ │ │ ├── PlutoOkhttpHelper.kt │ │ │ └── PlutoOkhttpInterceptor.kt │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── pluto │ │ │ │ └── plugins │ │ │ │ └── network │ │ │ │ ├── PlutoNetworkPlugin.kt │ │ │ │ ├── intercept │ │ │ │ ├── NetworkData.kt │ │ │ │ └── NetworkInterceptor.kt │ │ │ │ ├── interceptors │ │ │ │ ├── ktor │ │ │ │ │ ├── PlutoKtorHelper.kt │ │ │ │ │ └── internal │ │ │ │ │ │ ├── KtorRequestConverter.kt │ │ │ │ │ │ ├── KtorResponseConverter.kt │ │ │ │ │ │ ├── RequestConverter.kt │ │ │ │ │ │ └── ResponseConverter.kt │ │ │ │ └── okhttp │ │ │ │ │ ├── PlutoOkhttpHelper.kt │ │ │ │ │ ├── PlutoOkhttpInterceptor.kt │ │ │ │ │ └── internal │ │ │ │ │ ├── ContentProcessor.kt │ │ │ │ │ ├── DataConvertor.kt │ │ │ │ │ ├── OkHttpKtx.kt │ │ │ │ │ ├── ResponseReportingSinkCallback.kt │ │ │ │ │ ├── StreamKtx.kt │ │ │ │ │ └── utilities │ │ │ │ │ ├── DepletingSource.kt │ │ │ │ │ ├── ReportingSink.kt │ │ │ │ │ └── TeeSource.kt │ │ │ │ └── internal │ │ │ │ ├── CustomTabKtx.kt │ │ │ │ ├── DataModel.kt │ │ │ │ ├── NetworkFragment.kt │ │ │ │ ├── Session.kt │ │ │ │ ├── database │ │ │ │ ├── DatabaseManager.kt │ │ │ │ └── PlutoNetworkDatabase.kt │ │ │ │ ├── interceptor │ │ │ │ ├── logic │ │ │ │ │ ├── ContentProcessor.kt │ │ │ │ │ ├── NetworkCallsRepo.kt │ │ │ │ │ ├── ResponseCodeMessageMapper.kt │ │ │ │ │ ├── ThrowableKtx.kt │ │ │ │ │ └── transformers │ │ │ │ │ │ ├── AnyJsonAdapter.kt │ │ │ │ │ │ ├── BaseTransformer.kt │ │ │ │ │ │ ├── FormEncodedTransformer.kt │ │ │ │ │ │ ├── JsonTransformer.kt │ │ │ │ │ │ └── XmlTransformer.kt │ │ │ │ └── ui │ │ │ │ │ ├── ContentFragment.kt │ │ │ │ │ ├── DetailsFragment.kt │ │ │ │ │ ├── ListFragment.kt │ │ │ │ │ ├── NetworkViewModel.kt │ │ │ │ │ ├── components │ │ │ │ │ ├── CommonDetailsComponents.kt │ │ │ │ │ ├── CustomTraceInfoFragment.kt │ │ │ │ │ ├── OverviewStub.kt │ │ │ │ │ ├── RequestStub.kt │ │ │ │ │ └── ResponseStub.kt │ │ │ │ │ └── list │ │ │ │ │ ├── ApiItemHolder.kt │ │ │ │ │ └── NetworkAdapter.kt │ │ │ │ ├── mock │ │ │ │ ├── logic │ │ │ │ │ ├── MockSettingsRepo.kt │ │ │ │ │ └── dao │ │ │ │ │ │ ├── MockSettingsConverters.kt │ │ │ │ │ │ ├── MockSettingsDao.kt │ │ │ │ │ │ └── MockSettingsEntity.kt │ │ │ │ └── ui │ │ │ │ │ ├── MockSettingsFragment.kt │ │ │ │ │ ├── MockSettingsListFragment.kt │ │ │ │ │ ├── MockSettingsViewModel.kt │ │ │ │ │ └── list │ │ │ │ │ ├── MockSettingsItemAdapter.kt │ │ │ │ │ └── MockSettingsItemHolder.kt │ │ │ │ └── share │ │ │ │ ├── ShareFragment.kt │ │ │ │ ├── ShareHelper.kt │ │ │ │ ├── ShareOptionsAdapter.kt │ │ │ │ ├── ShareOptionsViewModel.kt │ │ │ │ └── holders │ │ │ │ ├── ShareHeadingHolder.kt │ │ │ │ ├── ShareOptionHolder.kt │ │ │ │ └── ShareResponseOptionHolder.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── pluto_network___bg_bottom_sheet.xml │ │ │ ├── pluto_network___bg_cta_dashed_blue.xml │ │ │ ├── pluto_network___bg_details_tab.xml │ │ │ ├── pluto_network___bg_section_body.xml │ │ │ ├── pluto_network___bg_section_header.xml │ │ │ ├── pluto_network___ic_alert.xml │ │ │ ├── pluto_network___ic_arrow_back.xml │ │ │ ├── pluto_network___ic_arrow_back_white.xml │ │ │ ├── pluto_network___ic_arrow_down.xml │ │ │ ├── pluto_network___ic_arrow_up.xml │ │ │ ├── pluto_network___ic_chevron_right.xml │ │ │ ├── pluto_network___ic_clear_all.xml │ │ │ ├── pluto_network___ic_close.xml │ │ │ ├── pluto_network___ic_close_gray.xml │ │ │ ├── pluto_network___ic_copy.xml │ │ │ ├── pluto_network___ic_custom_trace_info.xml │ │ │ ├── pluto_network___ic_delete.xml │ │ │ ├── pluto_network___ic_done.xml │ │ │ ├── pluto_network___ic_error.xml │ │ │ ├── pluto_network___ic_error_orange.xml │ │ │ ├── pluto_network___ic_error_outline.xml │ │ │ ├── pluto_network___ic_graphql.xml │ │ │ ├── pluto_network___ic_more.xml │ │ │ ├── pluto_network___ic_option_clear.xml │ │ │ ├── pluto_network___ic_option_mock_settings.xml │ │ │ ├── pluto_network___ic_plugin_logo.xml │ │ │ ├── pluto_network___ic_proxy_base_request_dark.xml │ │ │ ├── pluto_network___ic_proxy_base_response_dark.xml │ │ │ ├── pluto_network___ic_proxy_indicator.xml │ │ │ ├── pluto_network___ic_proxy_settings.xml │ │ │ ├── pluto_network___ic_proxy_settings_disabled.xml │ │ │ ├── pluto_network___ic_proxy_settings_enabled.xml │ │ │ ├── pluto_network___ic_search_white.xml │ │ │ ├── pluto_network___ic_share.xml │ │ │ ├── pluto_network___ic_share_all.xml │ │ │ ├── pluto_network___ic_share_curl.xml │ │ │ └── pluto_network___ic_success.xml │ │ │ ├── layout │ │ │ ├── pluto_network___dialog_custom_traces_info.xml │ │ │ ├── pluto_network___fragment_content.xml │ │ │ ├── pluto_network___fragment_details.xml │ │ │ ├── pluto_network___fragment_list.xml │ │ │ ├── pluto_network___fragment_mock_settings.xml │ │ │ ├── pluto_network___fragment_mock_settings_list.xml │ │ │ ├── pluto_network___fragment_network.xml │ │ │ ├── pluto_network___fragment_share.xml │ │ │ ├── pluto_network___item_mock_settings.xml │ │ │ ├── pluto_network___item_network.xml │ │ │ ├── pluto_network___item_share_option.xml │ │ │ ├── pluto_network___item_share_option_header.xml │ │ │ ├── pluto_network___item_share_option_response.xml │ │ │ ├── pluto_network___stub_details_overview.xml │ │ │ ├── pluto_network___stub_details_request.xml │ │ │ ├── pluto_network___stub_details_response.xml │ │ │ └── pluto_network___stub_network_settings.xml │ │ │ ├── menu │ │ │ └── pluto_network___menu_more_options.xml │ │ │ ├── navigation │ │ │ └── pluto_network___navigation.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── strings.xml │ │ │ └── styles.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── pluto │ │ └── plugins │ │ └── network │ │ └── internal │ │ └── interceptor │ │ └── logic │ │ └── transformers │ │ └── JsonTransformerTest.kt │ ├── rooms-database │ ├── README.md │ ├── lib-no-op │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── rooms │ │ │ └── db │ │ │ ├── PlutoRoomsDBWatcher.kt │ │ │ └── PlutoRoomsDatabasePlugin.kt │ └── lib │ │ ├── .gitignore │ │ ├── build.gradle.kts │ │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ └── plugins │ │ │ └── rooms │ │ │ └── db │ │ │ ├── PlutoRoomsDBWatcher.kt │ │ │ ├── PlutoRoomsDatabasePlugin.kt │ │ │ ├── RoomsDBFragment.kt │ │ │ ├── Session.kt │ │ │ └── internal │ │ │ ├── ContentViewModel.kt │ │ │ ├── DataModels.kt │ │ │ ├── RoomsDBViewModel.kt │ │ │ ├── UIViewModel.kt │ │ │ ├── core │ │ │ ├── Utils.kt │ │ │ ├── query │ │ │ │ ├── Executor.kt │ │ │ │ └── Query.kt │ │ │ └── widgets │ │ │ │ ├── DataEditWidget.kt │ │ │ │ └── TableGridView.kt │ │ │ └── ui │ │ │ ├── ActionsFragment.kt │ │ │ ├── ColumnDetailsFragment.kt │ │ │ ├── DetailsFragment.kt │ │ │ ├── EditFragment.kt │ │ │ ├── QueryErrorFragment.kt │ │ │ ├── SelectDBFragment.kt │ │ │ ├── SelectTableFragment.kt │ │ │ ├── TableSchemaFragment.kt │ │ │ ├── filter │ │ │ ├── AddFilterConditionDialog.kt │ │ │ ├── ChooseColumnForFilterDialog.kt │ │ │ ├── ChooseRelationDialog.kt │ │ │ ├── FilterConfig.kt │ │ │ ├── FilterFragment.kt │ │ │ ├── FilterQueryTransformer.kt │ │ │ ├── list │ │ │ │ ├── column │ │ │ │ │ ├── ColumnForFilterListAdapter.kt │ │ │ │ │ └── ColumnForFilterListItemHolder.kt │ │ │ │ ├── filter │ │ │ │ │ ├── FilterListAdapter.kt │ │ │ │ │ └── FilterListItemHolder.kt │ │ │ │ └── relation │ │ │ │ │ ├── FilterRelationListAdapter.kt │ │ │ │ │ └── FilterRelationListItemHolder.kt │ │ │ └── value │ │ │ │ ├── ValueStubFactory.kt │ │ │ │ └── components │ │ │ │ ├── BaseValueStub.kt │ │ │ │ ├── BetweenValueStub.kt │ │ │ │ ├── ComparisonValueStub.kt │ │ │ │ ├── InValueStub.kt │ │ │ │ ├── LikeValueStub.kt │ │ │ │ └── StringValueStub.kt │ │ │ └── list │ │ │ ├── column │ │ │ ├── ColumnListAdapter.kt │ │ │ └── ColumnListItemHolder.kt │ │ │ ├── database │ │ │ ├── DBListAdapter.kt │ │ │ └── DBListItemHolder.kt │ │ │ └── table │ │ │ ├── TableListAdapter.kt │ │ │ └── TableListItemHolder.kt │ │ └── res │ │ ├── drawable │ │ ├── pluto_rooms___bg_edittext_nullable.xml │ │ ├── pluto_rooms___bg_edittext_round.xml │ │ ├── pluto_rooms___bg_filter_item_delete.xml │ │ ├── pluto_rooms___bg_filter_list_relation.xml │ │ ├── pluto_rooms___bg_filter_relation_editor.xml │ │ ├── pluto_rooms___bg_primary_key_badge.xml │ │ ├── pluto_rooms___ic_add_record.xml │ │ ├── pluto_rooms___ic_alert.xml │ │ ├── pluto_rooms___ic_arrow_back.xml │ │ ├── pluto_rooms___ic_chevron_down.xml │ │ ├── pluto_rooms___ic_chevron_right.xml │ │ ├── pluto_rooms___ic_clear_table.xml │ │ ├── pluto_rooms___ic_close.xml │ │ ├── pluto_rooms___ic_custom_query.xml │ │ ├── pluto_rooms___ic_database.xml │ │ ├── pluto_rooms___ic_delete.xml │ │ ├── pluto_rooms___ic_duplicate.xml │ │ ├── pluto_rooms___ic_export.xml │ │ ├── pluto_rooms___ic_filter.xml │ │ ├── pluto_rooms___ic_filter_add.xml │ │ ├── pluto_rooms___ic_filter_item_delete.xml │ │ ├── pluto_rooms___ic_list_icon.xml │ │ ├── pluto_rooms___ic_more.xml │ │ ├── pluto_rooms___ic_more_dark.xml │ │ ├── pluto_rooms___ic_no_filter.xml │ │ ├── pluto_rooms___ic_refresh.xml │ │ ├── pluto_rooms___ic_rooms_icon.xml │ │ ├── pluto_rooms___ic_share.xml │ │ ├── pluto_rooms___ic_sort_indicator_asc.xml │ │ ├── pluto_rooms___ic_sort_indicator_desc.xml │ │ ├── pluto_rooms___ic_sort_option_selected.xml │ │ └── pluto_rooms___ic_table_schema.xml │ │ ├── layout │ │ ├── pluto_rooms___data_edit_widget.xml │ │ ├── pluto_rooms___dialog_add_filter_condition.xml │ │ ├── pluto_rooms___dialog_choose_column_for_filter.xml │ │ ├── pluto_rooms___dialog_choose_relation.xml │ │ ├── pluto_rooms___fragment_column_details.xml │ │ ├── pluto_rooms___fragment_data_editor.xml │ │ ├── pluto_rooms___fragment_db_details.xml │ │ ├── pluto_rooms___fragment_db_selector.xml │ │ ├── pluto_rooms___fragment_filter.xml │ │ ├── pluto_rooms___fragment_query_error.xml │ │ ├── pluto_rooms___fragment_rooms_db.xml │ │ ├── pluto_rooms___fragment_row_actions.xml │ │ ├── pluto_rooms___fragment_table_schema.xml │ │ ├── pluto_rooms___fragment_table_selector.xml │ │ ├── pluto_rooms___item_column_details.xml │ │ ├── pluto_rooms___item_column_for_filter.xml │ │ ├── pluto_rooms___item_db_selector.xml │ │ ├── pluto_rooms___item_filter_create.xml │ │ ├── pluto_rooms___item_filter_relation.xml │ │ ├── pluto_rooms___item_table_selector.xml │ │ ├── pluto_rooms___stub_filter_value_between.xml │ │ ├── pluto_rooms___stub_filter_value_comparison.xml │ │ ├── pluto_rooms___stub_filter_value_in.xml │ │ ├── pluto_rooms___stub_filter_value_like.xml │ │ └── pluto_rooms___stub_filter_value_string.xml │ │ ├── menu │ │ └── pluto_rooms___menu_table_options.xml │ │ ├── navigation │ │ └── pluto_rooms___navigation.xml │ │ └── values │ │ ├── colors.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── shared-preferences │ ├── README.md │ ├── lib-no-op │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── pluto │ │ └── plugins │ │ └── preferences │ │ └── PlutoSharePreferencesPlugin.kt │ └── lib │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── java │ └── com │ │ └── pluto │ │ └── plugins │ │ └── preferences │ │ ├── BaseFragment.kt │ │ ├── PlutoSharePreferencesPlugin.kt │ │ ├── Session.kt │ │ ├── ui │ │ ├── DataModel.kt │ │ ├── KeyValueItemHolder.kt │ │ ├── ListFragment.kt │ │ ├── SharedPrefAdapter.kt │ │ └── SharedPrefViewModel.kt │ │ └── utils │ │ ├── EditProcessor.kt │ │ ├── Preferences.kt │ │ └── SharedPrefUtils.kt │ └── res │ ├── drawable │ ├── pluto_pref___bg_shared_pref_file_badge.xml │ ├── pluto_pref___ic_arrow_back.xml │ ├── pluto_pref___ic_close.xml │ ├── pluto_pref___ic_filter.xml │ ├── pluto_pref___ic_filter_light.xml │ ├── pluto_pref___ic_more.xml │ └── pluto_pref___ic_pref_icon.xml │ ├── layout │ ├── pluto_pref___fragment_base.xml │ ├── pluto_pref___fragment_list.xml │ └── pluto_pref___item_shared_pref_key_value.xml │ ├── menu │ └── pluto_pref___menu_more_options.xml │ ├── navigation │ └── pluto_pref___navigation.xml │ └── values │ ├── strings.xml │ └── styles.xml ├── pluto ├── lib-no-op │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── pluto │ │ └── Pluto.kt └── lib │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── pluto │ │ │ ├── Pluto.kt │ │ │ ├── core │ │ │ ├── PlutoFileProvider.kt │ │ │ ├── Session.kt │ │ │ ├── applifecycle │ │ │ │ ├── AppLifecycle.kt │ │ │ │ └── AppStateCallback.kt │ │ │ ├── network │ │ │ │ ├── DataModels.kt │ │ │ │ ├── Network.kt │ │ │ │ └── NetworkCalls.kt │ │ │ ├── notch │ │ │ │ ├── Notch.kt │ │ │ │ ├── NotchStateCallback.kt │ │ │ │ ├── NotchViewManager.kt │ │ │ │ └── OnNotchInteractionListener.kt │ │ │ └── notification │ │ │ │ ├── DebugNotification.kt │ │ │ │ └── NotificationManager.kt │ │ │ ├── maven │ │ │ ├── DataModels.kt │ │ │ ├── MavenApiService.kt │ │ │ ├── MavenSession.kt │ │ │ └── MavenViewModel.kt │ │ │ ├── plugin │ │ │ ├── PluginManager.kt │ │ │ ├── PluginsViewModel.kt │ │ │ └── selector │ │ │ │ ├── PluginAdapter.kt │ │ │ │ ├── PluginGroupAdapter.kt │ │ │ │ ├── PluginGroupChildItemHolder.kt │ │ │ │ ├── PluginGroupItemHolder.kt │ │ │ │ └── PluginItemHolder.kt │ │ │ ├── settings │ │ │ ├── DataModel.kt │ │ │ ├── OverConsentFragment.kt │ │ │ ├── ResetDataCallback.kt │ │ │ ├── SettingsAdapter.kt │ │ │ ├── SettingsFragment.kt │ │ │ ├── SettingsViewModel.kt │ │ │ └── holders │ │ │ │ ├── SettingsEasyAccessHolder.kt │ │ │ │ ├── SettingsEasyAccessPopupAppearanceHolder.kt │ │ │ │ ├── SettingsGridSizeHolder.kt │ │ │ │ ├── SettingsResetAllHolder.kt │ │ │ │ └── SettingsThemeHolder.kt │ │ │ ├── tool │ │ │ ├── PlutoTool.kt │ │ │ ├── ToolConfiguration.kt │ │ │ ├── ToolManager.kt │ │ │ ├── ToolsViewModel.kt │ │ │ ├── modules │ │ │ │ ├── currentScreen │ │ │ │ │ ├── AppLifecycleListener.kt │ │ │ │ │ ├── CurrentScreenTool.kt │ │ │ │ │ ├── CurrentScreenView.kt │ │ │ │ │ ├── FragmentLifecycleListener.kt │ │ │ │ │ └── OnCurrentScreenUpdateListener.kt │ │ │ │ ├── grid │ │ │ │ │ ├── GridView.kt │ │ │ │ │ └── GridViewTool.kt │ │ │ │ ├── ruler │ │ │ │ │ ├── RulerActivity.kt │ │ │ │ │ ├── RulerTool.kt │ │ │ │ │ └── internal │ │ │ │ │ │ ├── ControlsWidget.kt │ │ │ │ │ │ ├── DataModel.kt │ │ │ │ │ │ ├── FullScreenTool.kt │ │ │ │ │ │ ├── PaintType.kt │ │ │ │ │ │ ├── RulerFragment.kt │ │ │ │ │ │ ├── RulerScaleView.kt │ │ │ │ │ │ ├── control │ │ │ │ │ │ ├── ControlCta.kt │ │ │ │ │ │ ├── ControlCtaAdapter.kt │ │ │ │ │ │ └── ControlCtaItemHolder.kt │ │ │ │ │ │ └── hint │ │ │ │ │ │ ├── HintAdapter.kt │ │ │ │ │ │ ├── HintFragment.kt │ │ │ │ │ │ ├── HintItemHolder.kt │ │ │ │ │ │ └── HintViewModel.kt │ │ │ │ └── screenHistory │ │ │ │ │ └── ScreenHistoryTool.kt │ │ │ └── selector │ │ │ │ ├── ToolAdapter.kt │ │ │ │ └── ToolItemHolder.kt │ │ │ └── ui │ │ │ ├── ListWrapper.kt │ │ │ ├── RoundedFrameLayout.kt │ │ │ ├── container │ │ │ └── PlutoActivity.kt │ │ │ └── selector │ │ │ ├── DevDetailsFragment.kt │ │ │ ├── GroupSelectorFragment.kt │ │ │ ├── PluginsGroupViewModel.kt │ │ │ ├── SelectorActivity.kt │ │ │ ├── SelectorStateCallback.kt │ │ │ └── SelectorUtils.kt │ └── res │ │ ├── anim │ │ ├── pluto___click_bounce.xml │ │ ├── pluto___fade_in_dialog.xml │ │ ├── pluto___fade_out_dialog.xml │ │ ├── pluto___slide_in_bottom.xml │ │ └── pluto___slide_out_bottom.xml │ │ ├── drawable │ │ ├── pluto___ic_about.xml │ │ ├── pluto___ic_back.xml │ │ ├── pluto___ic_check_box.xml │ │ ├── pluto___ic_check_box_selected.xml │ │ ├── pluto___ic_check_box_unselected.xml │ │ ├── pluto___ic_chevron_right.xml │ │ ├── pluto___ic_easy_access.xml │ │ ├── pluto___ic_error.xml │ │ ├── pluto___ic_grid.xml │ │ ├── pluto___ic_grid_dark.xml │ │ ├── pluto___ic_launcher.webp │ │ ├── pluto___ic_more.xml │ │ ├── pluto___ic_settings.xml │ │ ├── pluto___ic_settings_grid_size_dec.xml │ │ ├── pluto___ic_settings_grid_size_inc.xml │ │ ├── pluto___ic_twitter.xml │ │ ├── pluto___ic_vcs.xml │ │ ├── pluto___ic_website.xml │ │ ├── pluto___tool_ic_current_screen_logo.xml │ │ ├── pluto___tool_ic_grid_logo.xml │ │ ├── pluto___tool_ic_ruler_control_close.xml │ │ ├── pluto___tool_ic_ruler_control_hint.xml │ │ ├── pluto___tool_ic_ruler_control_move_left.xml │ │ ├── pluto___tool_ic_ruler_control_move_right.xml │ │ ├── pluto___tool_ic_ruler_logo.xml │ │ ├── pluto___tool_ic_screen_history_logo.xml │ │ └── pluto___tool_item_divider.xml │ │ ├── layout │ │ ├── pluto___activity_plugin_selector.xml │ │ ├── pluto___activity_pluto.xml │ │ ├── pluto___fragment_dev_details.xml │ │ ├── pluto___fragment_group_selector.xml │ │ ├── pluto___fragment_overlay_consent.xml │ │ ├── pluto___fragment_settings.xml │ │ ├── pluto___item_plugin.xml │ │ ├── pluto___item_plugin_group.xml │ │ ├── pluto___item_plugin_group_child.xml │ │ ├── pluto___item_plugin_option.xml │ │ ├── pluto___item_settings_easy_access.xml │ │ ├── pluto___item_settings_easy_access_appearance.xml │ │ ├── pluto___item_settings_grid_size.xml │ │ ├── pluto___item_settings_reset_all.xml │ │ ├── pluto___item_settings_theme.xml │ │ ├── pluto___item_tool.xml │ │ ├── pluto___layout_notch.xml │ │ ├── pluto___layout_plugin_options_dialog.xml │ │ ├── pluto___tool_current_screen_view.xml │ │ ├── pluto___tool_item_control_cta.xml │ │ ├── pluto___tool_item_hint.xml │ │ ├── pluto___tool_ruler_activity.xml │ │ ├── pluto___tool_ruler_controls.xml │ │ └── pluto___tool_ruler_hint_fragment.xml │ │ ├── values │ │ ├── attr.xml │ │ ├── dimens.xml │ │ ├── strings.xml │ │ └── styles.xml │ │ └── xml │ │ └── pluto___file_provider_paths.xml │ └── test │ └── java │ └── com │ └── pluto │ ├── PlutoTest.kt │ └── core │ └── applifecycle │ ├── AppLifecycleTest.kt │ └── AppStateCallbackTest.kt ├── pre-commit ├── publishTasks.gradle.kts ├── sample ├── .gitignore ├── build.gradle.kts ├── detekt-baseline.xml ├── proguard-rules.pro └── src │ ├── debug │ └── java │ │ └── com │ │ └── sampleapp │ │ └── pluto │ │ └── DataSourcePluginGroup.kt │ ├── debugMaven │ └── java │ │ └── com │ │ └── sampleapp │ │ └── pluto │ │ └── DataSourcePluginGroup.kt │ ├── debugNoOp │ └── java │ │ └── com │ │ └── sampleapp │ │ └── pluto │ │ └── DataSourcePluginGroup.kt │ ├── debugNoOpMaven │ └── java │ │ └── com │ │ └── sampleapp │ │ └── pluto │ │ └── DataSourcePluginGroup.kt │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── sampleapp │ │ │ ├── AskPermissionFragment.kt │ │ │ ├── ContainerFragment.kt │ │ │ ├── JavaTest.java │ │ │ ├── MainActivity.kt │ │ │ ├── SampleApp.kt │ │ │ ├── SupportedFunctions.kt │ │ │ ├── Utils.kt │ │ │ └── functions │ │ │ ├── datastore │ │ │ └── DemoDatastorePrefFragment.kt │ │ │ ├── exceptions │ │ │ ├── DemoExceptionFragment.kt │ │ │ └── TestingThreadANR.kt │ │ │ ├── layoutinspector │ │ │ ├── DemoLayoutInspectorActivity.kt │ │ │ └── DemoLayoutInspectorFragment.kt │ │ │ ├── logger │ │ │ └── DemoLoggerFragment.kt │ │ │ ├── network │ │ │ ├── DemoNetworkFragment.kt │ │ │ └── internal │ │ │ │ ├── custom │ │ │ │ └── CustomViewModel.kt │ │ │ │ ├── ktor │ │ │ │ ├── KtorNetwork.kt │ │ │ │ ├── KtorViewModel.kt │ │ │ │ └── PostRequestBody.kt │ │ │ │ └── okhttp │ │ │ │ ├── ApiService.kt │ │ │ │ ├── DataModels.kt │ │ │ │ ├── GzipRequestInterceptor.kt │ │ │ │ ├── Network.kt │ │ │ │ ├── NetworkCalls.kt │ │ │ │ └── OkhttpViewModel.kt │ │ │ ├── roomsdatabase │ │ │ ├── DemoRoomsDatabaseFragment.kt │ │ │ ├── db │ │ │ │ ├── SampleDatabase.kt │ │ │ │ ├── dao │ │ │ │ │ ├── AdminDAO.kt │ │ │ │ │ └── UserDAO.kt │ │ │ │ └── entity │ │ │ │ │ ├── Admin.kt │ │ │ │ │ └── User.kt │ │ │ └── db2 │ │ │ │ ├── Sample2Database.kt │ │ │ │ ├── dao │ │ │ │ └── UserV2DAO.kt │ │ │ │ └── entity │ │ │ │ └── UserV2.kt │ │ │ └── sharedpreferences │ │ │ └── DemoSharedPrefFragment.kt │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ ├── ic_alert_bg.xml │ │ ├── ic_arrow.xml │ │ ├── ic_arrow_white.xml │ │ ├── ic_chevron_right.xml │ │ ├── ic_close.xml │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ ├── activity_demo_layout_inspector.xml │ │ ├── activity_main.xml │ │ ├── fragment_ask_permision.xml │ │ ├── fragment_container.xml │ │ ├── fragment_demo_datastore_pref.xml │ │ ├── fragment_demo_exception.xml │ │ ├── fragment_demo_layout_inspector.xml │ │ ├── fragment_demo_logger.xml │ │ ├── fragment_demo_network.xml │ │ ├── fragment_demo_rooms_database.xml │ │ └── fragment_demo_shared_pref.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── styles.xml │ └── release │ └── java │ └── com │ └── sampleapp │ └── pluto │ └── DataSourcePluginGroup.kt ├── scripts ├── project-dependancy-graph.gradle ├── publish │ ├── _dokkaUtils.gradle │ ├── _loadCredentials.gradle │ ├── _pomConfig.gradle │ └── publish.gradle └── static-analysis │ ├── .editorconfig │ ├── android-lint-config.xml │ ├── code-analysis.gradle │ └── detekt-config.yml ├── settings.gradle └── version.properties /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: srtvprateek 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Smartphone (please complete the following information):** 27 | - Device: [e.g. iPhone6] 28 | - OS: [e.g. iOS8.1] 29 | - Browser [e.g. stock browser, safari] 30 | - Library Version [e.g. 22] 31 | 32 | **Additional context** 33 | Add any other context about the problem here. 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | # Add 'pluto-core' label to any changes within 'pluto' or 'plugin' module 2 | core: 3 | - pluto/** 4 | - pluto-plugins/base/** 5 | - pluto-plugins/bundle/** 6 | - .github/** 7 | 8 | # Add 'script' label to any changes within 'scripts' folder 9 | script: 10 | - script/** 11 | 12 | # Add 'sample' label to any changes within 'sample' module 13 | sample: 14 | - sample/** 15 | 16 | # labels for plugin changes 17 | datastore: 18 | - pluto-plugins/plugins/datastore/** 19 | 20 | exceptions: 21 | - pluto-plugins/plugins/exceptions/** 22 | 23 | layout-inspector: 24 | - pluto-plugins/plugins/layout-inspector/** 25 | 26 | logger: 27 | - pluto-plugins/plugins/logger/** 28 | 29 | network: 30 | - pluto-plugins/plugins/network/** 31 | 32 | rooms-database: 33 | - pluto-plugins/plugins/rooms-database/** 34 | 35 | shared-preferences: 36 | - pluto-plugins/plugins/shared-preferences/** 37 | -------------------------------------------------------------------------------- /.github/workflows/daily_builds.yml: -------------------------------------------------------------------------------- 1 | name: Daily Builds 2 | 3 | on: 4 | schedule: 5 | - cron: '0 20 * * *' # Runs daily at 20:00 UTC 6 | workflow_dispatch: # Enables manual trigger 7 | 8 | jobs: 9 | build: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v2 13 | - name: Build 14 | run: ./gradlew --no-daemon --max-workers 8 --build-cache build 15 | -------------------------------------------------------------------------------- /.github/workflows/pr_label.yml: -------------------------------------------------------------------------------- 1 | # This workflow will triage pull requests and apply a label based on the 2 | # paths that are modified in the pull request. 3 | # 4 | # To use this workflow, you will need to set up a .github/labeler.yml 5 | # file with configuration. For more information, see: 6 | # https://github.com/actions/labeler 7 | 8 | name: Labeler 9 | on: [pull_request_target] 10 | 11 | jobs: 12 | label: 13 | 14 | runs-on: ubuntu-latest 15 | permissions: 16 | contents: read 17 | pull-requests: write 18 | 19 | steps: 20 | - uses: actions/labeler@v4 21 | with: 22 | repo-token: "${{ secrets.GITHUB_TOKEN }}" 23 | -------------------------------------------------------------------------------- /.github/workflows/stale.yml: -------------------------------------------------------------------------------- 1 | name: Mark stale issues and pull requests 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 1 * *' 6 | 7 | jobs: 8 | stale: 9 | 10 | runs-on: ubuntu-latest 11 | permissions: 12 | issues: write 13 | pull-requests: write 14 | 15 | steps: 16 | - uses: actions/stale@v3 17 | with: 18 | repo-token: ${{ secrets.GITHUB_TOKEN }} 19 | stale-issue-message: 'Stale issue' 20 | stale-pr-message: 'Stale pull request' 21 | stale-issue-label: 'state-issue' 22 | stale-pr-label: 'stale-pr' 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | *local.properties 4 | .DS_Store 5 | /build 6 | /captures 7 | .externalNativeBuild 8 | .cxx 9 | /.idea/* 10 | /scripts/publish/_credentials.properties 11 | /scripts/publish/_newCreds.properties 12 | *.gpg 13 | /buildSrc/build 14 | mavenCredentials.properties 15 | -------------------------------------------------------------------------------- /buildSrc/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | `kotlin-dsl` 3 | } 4 | 5 | repositories { 6 | mavenCentral() 7 | } -------------------------------------------------------------------------------- /gradle/dependency-graph/project.dot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/gradle/dependency-graph/project.dot.png -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Feb 08 21:06:21 IST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /maven-versions.gradle.kts: -------------------------------------------------------------------------------- 1 | extra["plutoVersion"] = "2.0.5" -------------------------------------------------------------------------------- /pluto-plugins/base/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/plugin/libinterface/LibraryInfoInterface.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugin.libinterface 2 | 3 | import androidx.fragment.app.FragmentActivity 4 | 5 | data class LibraryInfoInterface(val pluginActivityClass: Class, val selectorActivityClass: Class) 6 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/plugin/share/ContentShareViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugin.share 2 | 3 | import androidx.lifecycle.LiveData 4 | import androidx.lifecycle.ViewModel 5 | import com.pluto.utilities.SingleLiveEvent 6 | 7 | class ContentShareViewModel : ViewModel() { 8 | 9 | val data: LiveData 10 | get() = _data 11 | private val _data = SingleLiveEvent() 12 | 13 | val action: LiveData 14 | get() = _action 15 | private val _action = SingleLiveEvent() 16 | 17 | fun performAction(action: ShareAction) { 18 | _action.postValue(action) 19 | } 20 | 21 | fun share(shareable: Shareable) { 22 | _data.postValue(shareable) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/utilities/extensions/LifecycleKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.utilities.extensions 2 | 3 | import androidx.lifecycle.LifecycleCoroutineScope 4 | import kotlinx.coroutines.CoroutineScope 5 | import kotlinx.coroutines.Job 6 | import kotlinx.coroutines.delay 7 | import kotlinx.coroutines.launch 8 | 9 | fun LifecycleCoroutineScope.delayedLaunchWhenResumed(delay: Long, block: suspend CoroutineScope.() -> Unit): Job = 10 | launch { 11 | delay(delay) 12 | launchWhenResumed(block) 13 | } 14 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/utilities/extensions/LiveDataKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.utilities.extensions 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | 5 | fun MutableLiveData>.add(item: T) { 6 | val updatedItems = arrayListOf() 7 | this.value?.let { 8 | updatedItems.addAll(it) 9 | } 10 | updatedItems.add(0, item) 11 | this.postValue(updatedItems) 12 | } 13 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/utilities/extensions/PairKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.utilities.extensions 2 | 3 | fun Pair, Iterable>.forEachIndexed(action: (Int, A, B?) -> Unit) { 4 | val ia = first.iterator().withIndex() 5 | val ib = second.iterator().withIndex() 6 | 7 | while (ia.hasNext() && ib.hasNext()) { 8 | val next = ia.next() 9 | val index = next.index 10 | val va = next.value 11 | val vb = ib.next().value 12 | 13 | action(index, va, vb) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/utilities/extensions/SettingsKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.utilities.extensions 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import android.net.Uri 6 | import android.os.Build 7 | import android.provider.Settings 8 | 9 | fun Context.canDrawOverlays(): Boolean { 10 | return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 11 | Settings.canDrawOverlays(this) 12 | } else { 13 | true 14 | } 15 | } 16 | 17 | fun Context.openOverlaySettings() { 18 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 19 | val intent = Intent( 20 | Settings.ACTION_MANAGE_OVERLAY_PERMISSION, 21 | Uri.parse("package:$packageName") 22 | ) 23 | startActivity(intent) 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/utilities/extensions/StringsKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.utilities.extensions 2 | 3 | import java.util.Locale 4 | 5 | fun String.capitalizeText(default: Locale = Locale.getDefault()): String = 6 | replaceFirstChar { if (it.isLowerCase()) it.titlecase(default) else it.toString() } 7 | 8 | fun String.truncateExcess(offset: Int): String { 9 | return if (length > offset) { 10 | "${take(offset)}..." 11 | } else { 12 | this 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/java/com/pluto/utilities/spannable/CustomTypefaceSpan.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.utilities.spannable 2 | 3 | import android.graphics.Typeface 4 | import android.text.TextPaint 5 | import android.text.style.MetricAffectingSpan 6 | 7 | internal class CustomTypefaceSpan(private val font: Typeface) : MetricAffectingSpan() { 8 | override fun updateMeasureState(p: TextPaint) { 9 | update(p) 10 | } 11 | 12 | override fun updateDrawState(tp: TextPaint) { 13 | update(tp) 14 | } 15 | 16 | private fun update(textPaint: TextPaint) { 17 | textPaint.apply { 18 | val oldTypeface = typeface 19 | val oldStyle = oldTypeface?.style ?: 0 20 | 21 | val newTypeface = Typeface.create(font, oldStyle) 22 | 23 | typeface = newTypeface 24 | } 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/anim/pluto___fragment_default_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/anim/pluto___fragment_default_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/anim/pluto___fragment_default_reenter.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/anim/pluto___fragment_default_return.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___bg_bottom_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___bg_key_value_pair_input.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_check.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_check_box.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_check_box_selected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_check_box_unselected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_edit_option_selected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_radio.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_radio_selected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_radio_unselected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_search.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_share_as_copy.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_share_as_file.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___ic_share_as_text.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/drawable/pluto___line_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/font/muli.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/pluto-plugins/base/lib/src/main/res/font/muli.ttf -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/font/muli_bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/pluto-plugins/base/lib/src/main/res/font/muli_bold.ttf -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/font/muli_light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/pluto-plugins/base/lib/src/main/res/font/muli_light.ttf -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/font/muli_semibold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/pluto-plugins/base/lib/src/main/res/font/muli_semibold.ttf -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 250 4 | -------------------------------------------------------------------------------- /pluto-plugins/base/lib/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Edit Value 3 | editing value of 4 | enter value here 5 | or choose from these options 6 | 7 | Share As 8 | Share as Text 9 | Share as File 10 | Copy to Clipboard 11 | Prefer this option while sharing on Slack. 12 | Clear 13 | Done 14 | 15 | -------------------------------------------------------------------------------- /pluto-plugins/bundle/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/bundle/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/bundle/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/bundle/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib-no-op/src/main/java/com/pluto/plugins/datastore/pref/PlutoDatastorePreferencesPlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.datastore.pref 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoDatastorePreferencesPlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "datastore-preferences" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib-no-op/src/main/java/com/pluto/plugins/datastore/pref/PlutoDatastoreWatcher.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.datastore.pref 2 | 3 | import androidx.datastore.core.DataStore 4 | import androidx.datastore.preferences.core.Preferences 5 | 6 | @Suppress("UnusedPrivateMember", "EmptyFunctionBlock") 7 | object PlutoDatastoreWatcher { 8 | fun watch(name: String, store: DataStore) { } // noop 9 | fun remove(name: String) { } // noop 10 | } 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/BaseFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.datastore.pref 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | internal class BaseFragment : Fragment(R.layout.pluto_dts___fragment_base) 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.datastore.pref 2 | 3 | internal object Session { 4 | var searchText: String? = null 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/java/com/pluto/plugins/datastore/pref/internal/Preferences.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.datastore.pref.internal 2 | 3 | import android.content.Context 4 | 5 | internal class Preferences(context: Context) { 6 | 7 | private val settingsPrefs by lazy { context.preferences("_pluto_datastore_pref_settings") } 8 | 9 | internal var selectedPreferenceFiles: String? 10 | get() = settingsPrefs.getString(SELECTED_PREF_FILE, null) 11 | set(value) = settingsPrefs.edit().putString(SELECTED_PREF_FILE, value).apply() 12 | 13 | companion object { 14 | private const val SELECTED_PREF_FILE = "selected_datastore_pref_file" 15 | } 16 | } 17 | 18 | private fun Context.preferences(name: String, mode: Int = Context.MODE_PRIVATE) = getSharedPreferences(name, mode) 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___bg_shared_pref_file_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_check.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_clear.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_expand.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 14 | 15 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/drawable/pluto_dts___ic_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/layout/pluto_dts___fragment_base.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/navigation/pluto_dts___navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/datastore/lib/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Datastore Preferences 3 | Choose Datastore 4 | No DataStore Preferences present.\nAdd a DataStore Preference or check Filter settings. 5 | Search Preferences 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib-no-op/src/main/java/com/pluto/plugins/exceptions/ANRException.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions 2 | 3 | import androidx.annotation.Keep 4 | 5 | @Keep 6 | @SuppressWarnings("UnusedPrivateMember", "EmptyFunctionBlock") 7 | class ANRException(thread: Thread) : Exception("ANR detected") 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib-no-op/src/main/java/com/pluto/plugins/exceptions/PlutoExceptions.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions 2 | 3 | @SuppressWarnings("UnusedPrivateMember", "EmptyFunctionBlock") 4 | object PlutoExceptions { 5 | 6 | /** 7 | * The threshold for main thread response 8 | * time before resulting in ANR. 9 | */ 10 | var mainThreadResponseThreshold = 0 11 | 12 | fun setExceptionHandler(uncaughtExceptionHandler: Thread.UncaughtExceptionHandler) { 13 | } 14 | 15 | fun setANRHandler(anrHandler: UncaughtANRHandler) { 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib-no-op/src/main/java/com/pluto/plugins/exceptions/PlutoExceptionsPlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoExceptionsPlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "exceptions" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib-no-op/src/main/java/com/pluto/plugins/exceptions/UncaughtANRHandler.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions 2 | 3 | fun interface UncaughtANRHandler { 4 | fun uncaughtANR(thread: Thread, exception: ANRException) 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/detekt-baseline.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TopLevelPropertyNaming:DetailsFragment.kt$private const val SHARE_SECTION_DIVIDER = "\n\n==================\n\n" 6 | TopLevelPropertyNaming:DetailsFragment.kt$private const val STACK_TRACE_LENGTH = 25 7 | 8 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/UncaughtANRHandler.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions 2 | 3 | fun interface UncaughtANRHandler { 4 | fun uncaughtANR(thread: Thread, exception: ANRException) 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/BaseFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal 2 | 3 | import androidx.fragment.app.Fragment 4 | import com.pluto.plugins.exceptions.R 5 | 6 | class BaseFragment : Fragment(R.layout.pluto_excep___fragment_base) 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal 2 | 3 | class Session { 4 | var lastSearchText: String? = null 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/anr/AnrSupervisorCallback.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.anr 2 | 3 | import com.pluto.plugins.exceptions.internal.extensions.notifyAll 4 | 5 | /** 6 | * A [Runnable] which calls [.notifyAll] when run. 7 | */ 8 | internal class AnrSupervisorCallback : Runnable { 9 | /** 10 | * Returns whether [.run] was called yet 11 | * 12 | * @return true if called, false if not 13 | */ 14 | /** 15 | * Flag storing whether [.run] was called 16 | */ 17 | @get:Synchronized 18 | var isCalled = false 19 | private set 20 | 21 | @Synchronized 22 | override fun run() { 23 | isCalled = true 24 | this.notifyAll() 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/crash/CrashHandler.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.crash 2 | 3 | import android.content.Context 4 | import com.pluto.plugins.exceptions.internal.persistence.ExceptionDBHandler 5 | 6 | internal class CrashHandler(context: Context) : Thread.UncaughtExceptionHandler { 7 | 8 | private var handler: Thread.UncaughtExceptionHandler? = Thread.getDefaultUncaughtExceptionHandler() 9 | private val crashNotification: CrashNotification = CrashNotification(context) 10 | 11 | override fun uncaughtException(t: Thread, e: Throwable) { 12 | ExceptionDBHandler.tempPersist(e, t) 13 | crashNotification.add() 14 | handler?.uncaughtException(t, e) 15 | } 16 | 17 | internal fun setExceptionHandler(handler: Thread.UncaughtExceptionHandler) { 18 | this.handler = handler 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/extensions/ConcurrencyKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.extensions 2 | 3 | @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") 4 | internal fun Any.wait(timeout: Long = 0) = (this as Object).wait(timeout) 5 | 6 | @Suppress("PLATFORM_CLASS_MAPPED_TO_KOTLIN") 7 | internal fun Any.notifyAll() = (this as Object).notifyAll() 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/extensions/ThreadKtx.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.extensions 2 | 3 | import com.pluto.utilities.extensions.capitalizeText 4 | 5 | fun getPriorityString(priority: Int) = 6 | when (priority) { 7 | Thread.MAX_PRIORITY -> "maximum" 8 | Thread.MIN_PRIORITY -> "minimum" 9 | else -> "normal" 10 | }.capitalizeText() 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/ExceptionDao.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.persistence 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.OnConflictStrategy 6 | import androidx.room.Query 7 | 8 | @Dao 9 | internal interface ExceptionDao { 10 | 11 | @Insert(onConflict = OnConflictStrategy.REPLACE) 12 | suspend fun save(entity: ExceptionEntity) 13 | 14 | @Query("SELECT * FROM exceptions where id is :id") 15 | suspend fun fetch(id: Int): ExceptionEntity? 16 | 17 | @Query("SELECT * FROM exceptions order by timestamp DESC") 18 | suspend fun fetchAll(): List? 19 | 20 | @Query("DELETE FROM exceptions where id is :id") 21 | suspend fun delete(id: Int) 22 | 23 | @Query("DELETE FROM exceptions") 24 | suspend fun deleteAll() 25 | } 26 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/database/DatabaseManager.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.persistence.database 2 | 3 | import android.content.Context 4 | import androidx.room.Room 5 | 6 | internal class DatabaseManager(context: Context) { 7 | 8 | val db by lazy { 9 | Room.databaseBuilder(context, PlutoDatabase::class.java, DATABASE_NAME) 10 | .addMigrations() 11 | .fallbackToDestructiveMigration() 12 | .build() 13 | } 14 | 15 | companion object { 16 | private const val DATABASE_NAME = "_pluto_exception_database" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/java/com/pluto/plugins/exceptions/internal/persistence/database/PlutoDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.exceptions.internal.persistence.database 2 | 3 | import androidx.room.RoomDatabase 4 | import com.pluto.plugins.exceptions.internal.persistence.ExceptionDao 5 | import com.pluto.plugins.exceptions.internal.persistence.ExceptionEntity 6 | 7 | @androidx.room.Database( 8 | entities = [ 9 | ExceptionEntity::class, 10 | ], 11 | version = 4, 12 | exportSchema = false 13 | ) 14 | internal abstract class PlutoDatabase : RoomDatabase() { 15 | abstract fun exceptionDao(): ExceptionDao 16 | } 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___bg_section_body.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___bg_section_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___bg_section_light.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_anr_warning.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_clear_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_dropdown_cta.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_error.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_filter_light.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_main_thread.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_non_main_thread.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_plugin_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/drawable/pluto_excep___ic_thread_traces.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/layout/pluto_excep___fragment_base.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/layout/pluto_excep___item_crash_details_thread.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/menu/pluto_excep___menu_more_options.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/exceptions/lib/src/main/res/menu/pluto_excep___menu_stack_trace_filter.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 18 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib-no-op/src/main/java/com/pluto/plugins/layoutinspector/PlutoLayoutInspectorPlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoLayoutInspectorPlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "layout-inspector" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/java/com/pluto/plugins/layoutinspector/BaseFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | internal class BaseFragment : Fragment(R.layout.pluto_li___fragment_base) 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/java/com/pluto/plugins/layoutinspector/internal/attributes/data/Attribute.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector.internal.attributes.data 2 | 3 | import com.pluto.utilities.list.ListItem 4 | import com.pluto.utilities.views.keyvalue.KeyValuePairEditMetaData 5 | 6 | internal open class Attribute(val title: String, val value: T) : 7 | ListItem(), 8 | KeyValuePairEditMetaData { 9 | open fun displayText(): CharSequence? = if (value is CharSequence) value else value?.toString() 10 | 11 | override fun isSame(other: Any): Boolean { 12 | return other is Attribute<*> && other.title == title 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/java/com/pluto/plugins/layoutinspector/internal/attributes/data/MutableAttribute.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector.internal.attributes.data 2 | 3 | import android.view.View 4 | import com.pluto.utilities.views.keyvalue.KeyValuePairEditRequest 5 | 6 | interface MutableAttribute { 7 | fun requestEdit(): KeyValuePairEditRequest 8 | fun handleEdit(view: View, updatedValue: String) 9 | } 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/java/com/pluto/plugins/layoutinspector/internal/attributes/data/parser/types/ViewGroupParser.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector.internal.attributes.data.parser.types 2 | 3 | import android.view.View 4 | import android.view.ViewGroup 5 | import com.pluto.plugins.layoutinspector.internal.attributes.data.Attribute 6 | import com.pluto.plugins.layoutinspector.internal.attributes.data.parser.IParser 7 | 8 | internal class ViewGroupParser : IParser() { 9 | 10 | override fun getTypeAttributes(view: View): List> { 11 | val attributes = arrayListOf>() 12 | (view as ViewGroup).apply { 13 | attributes.add(Attribute("child_count", childCount)) 14 | attributes.add(Attribute("will_not_draw", willNotDraw())) 15 | } 16 | return attributes 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/java/com/pluto/plugins/layoutinspector/internal/control/ControlCta.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector.internal.control 2 | 3 | import androidx.annotation.DrawableRes 4 | import com.pluto.utilities.list.ListItem 5 | 6 | internal data class ControlCta( 7 | val id: String, 8 | @DrawableRes val icon: Int, 9 | val hint: String 10 | ) : ListItem() 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/java/com/pluto/plugins/layoutinspector/internal/inspect/InspectViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.layoutinspector.internal.inspect 2 | 3 | import android.app.Application 4 | import android.view.View 5 | import androidx.lifecycle.AndroidViewModel 6 | import androidx.lifecycle.LiveData 7 | import com.pluto.utilities.SingleLiveEvent 8 | 9 | internal class InspectViewModel(application: Application) : AndroidViewModel(application) { 10 | 11 | val view: LiveData 12 | get() = _view 13 | private val _view = SingleLiveEvent() 14 | 15 | fun select(view: View) { 16 | _view.postValue(view) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_control_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_control_hint.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_attr.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_collapse.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_expand.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_separator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_show_less.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_show_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_hierarchy_target_view_indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_plugin_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___ic_view_hierarchy.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/drawable/pluto_li___item_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/layout/pluto_li___fragment_base.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/layout/pluto_li___item_control_cta.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/layout/pluto_li___item_view_attr.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/menu/pluto_li___menu_hierarchy_options.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/layout-inspector/lib/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib-no-op/src/main/java/com/pluto/plugins/logger/PlutoLoggerPlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoLoggerPlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "logger" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib-no-op/src/main/java/com/pluto/plugins/logger/PlutoTimberTree.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger 2 | 3 | import timber.log.Timber 4 | 5 | class PlutoTimberTree : Timber.Tree() { 6 | 7 | override fun log(priority: Int, tag: String?, message: String, t: Throwable?) {} 8 | } 9 | 10 | @SuppressWarnings("UnusedPrivateMember", "EmptyFunctionBlock") 11 | fun Timber.Tree.event(event: String, attr: HashMap? = null) {} 12 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/java/com/pluto/plugins/logger/internal/LogsFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger.internal 2 | 3 | import androidx.fragment.app.Fragment 4 | import com.pluto.plugins.logger.R 5 | 6 | internal class LogsFragment : Fragment(R.layout.pluto_logger___fragment_logs) 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/java/com/pluto/plugins/logger/internal/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger.internal 2 | 3 | import java.util.UUID 4 | 5 | internal object Session { 6 | val id: String = UUID.randomUUID().toString() 7 | var loggerSearchText: String? = null 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/java/com/pluto/plugins/logger/internal/persistence/EntityConverters.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger.internal.persistence 2 | 3 | import androidx.room.TypeConverter 4 | import com.pluto.plugins.logger.internal.LogData 5 | import com.squareup.moshi.JsonAdapter 6 | import com.squareup.moshi.Moshi 7 | 8 | internal class EntityConverters { 9 | 10 | private var moshi = Moshi.Builder().build() 11 | private var logMoshiAdapter: JsonAdapter = moshi.adapter(LogData::class.java) 12 | 13 | @TypeConverter 14 | fun stringToLog(data: String?): LogData? { 15 | data?.let { return logMoshiAdapter.fromJson(data) } 16 | return null 17 | } 18 | 19 | @TypeConverter 20 | fun logToString(data: LogData): String { 21 | return logMoshiAdapter.toJson(data) 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/java/com/pluto/plugins/logger/internal/persistence/database/DatabaseManager.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger.internal.persistence.database 2 | 3 | import android.content.Context 4 | import androidx.room.Room 5 | 6 | internal class DatabaseManager(context: Context) { 7 | 8 | val db by lazy { 9 | Room.databaseBuilder(context, PlutoDatabase::class.java, DATABASE_NAME) 10 | .addMigrations() 11 | .fallbackToDestructiveMigration() 12 | .build() 13 | } 14 | 15 | companion object { 16 | private const val DATABASE_NAME = "_pluto_log_database" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/java/com/pluto/plugins/logger/internal/persistence/database/PlutoDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.logger.internal.persistence.database 2 | 3 | import androidx.room.RoomDatabase 4 | import com.pluto.plugins.logger.internal.persistence.LogDao 5 | import com.pluto.plugins.logger.internal.persistence.LogEntity 6 | 7 | @androidx.room.Database( 8 | entities = [ 9 | LogEntity::class, 10 | ], 11 | version = 2, 12 | exportSchema = false 13 | ) 14 | internal abstract class PlutoDatabase : RoomDatabase() { 15 | abstract fun exceptionDao(): LogDao 16 | } 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___bg_bottom_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___bg_bottom_sheet_content.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_analytics.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_circle.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 8 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_clear_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_filter_dark.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_label.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_logger_icon.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/drawable/pluto_logger___ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/layout/pluto_logger___fragment_logs.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/menu/pluto_logger___menu_more_options.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/logger/lib/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0511141c 4 | 5 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib-no-op/src/main/java/com/pluto/plugins/network/PlutoNetworkPlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoNetworkPlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "network" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib-no-op/src/main/java/com/pluto/plugins/network/intercept/NetworkInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.intercept 2 | 3 | import java.io.IOException 4 | 5 | @SuppressWarnings("EmptyFunctionBlock", "UnusedPrivateMember") 6 | class NetworkInterceptor private constructor(private val request: NetworkData.Request, option: Option) { 7 | 8 | companion object { 9 | 10 | @JvmOverloads 11 | fun intercept(request: NetworkData.Request, option: Option = Option()): NetworkInterceptor { 12 | return NetworkInterceptor(request, option) 13 | } 14 | } 15 | 16 | fun onError(e: IOException) { 17 | } 18 | 19 | fun onResponse(response: NetworkData.Response) { 20 | } 21 | 22 | data class Option( 23 | val name: String = "Custom", 24 | val metadata: HashMap? = null 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib-no-op/src/main/java/com/pluto/plugins/network/interceptors/okhttp/PlutoOkhttpHelper.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.interceptors.okhttp 2 | 3 | import okhttp3.OkHttpClient 4 | 5 | fun OkHttpClient.Builder.addPlutoOkhttpInterceptor(): OkHttpClient.Builder { 6 | return this 7 | } 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib-no-op/src/main/java/com/pluto/plugins/network/interceptors/okhttp/PlutoOkhttpInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.interceptors.okhttp 2 | 3 | import androidx.annotation.Keep 4 | import okhttp3.Interceptor 5 | import okhttp3.Response 6 | 7 | @SuppressWarnings("UtilityClassWithPublicConstructor") 8 | @Keep 9 | class PlutoOkhttpInterceptor { 10 | companion object : Interceptor { 11 | 12 | override fun intercept(chain: Interceptor.Chain): Response { 13 | val request = chain.request() 14 | return chain.proceed(request) 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/interceptors/ktor/internal/RequestConverter.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.interceptors.ktor.internal 2 | 3 | import com.pluto.plugins.network.intercept.NetworkData.Request 4 | 5 | internal interface RequestConverter { 6 | fun T.convert(): Request 7 | } 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/interceptors/ktor/internal/ResponseConverter.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.interceptors.ktor.internal 2 | 3 | import com.pluto.plugins.network.intercept.NetworkData.Response 4 | 5 | internal interface ResponseConverter { 6 | suspend fun T.convert(): Response 7 | } 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/interceptors/okhttp/PlutoOkhttpHelper.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.interceptors.okhttp 2 | 3 | import javax.net.SocketFactory 4 | import okhttp3.OkHttpClient 5 | 6 | @Deprecated("add PlutoHttpInterceptor directly to OkHttpClient instead") 7 | fun OkHttpClient.Builder.addPlutoOkhttpInterceptor(): OkHttpClient.Builder { 8 | // todo add okhttp settings block here 9 | socketFactory(SocketFactory.getDefault()) 10 | addInterceptor(PlutoOkhttpInterceptor) 11 | return this 12 | } 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/NetworkFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal 2 | 3 | import androidx.fragment.app.Fragment 4 | import com.pluto.plugins.network.R 5 | 6 | internal class NetworkFragment : Fragment(R.layout.pluto_network___fragment_network) 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal 2 | 3 | internal object Session { 4 | var lastSearchText: String? = null 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/database/DatabaseManager.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal.database 2 | 3 | import android.content.Context 4 | import androidx.room.Room 5 | 6 | internal class DatabaseManager(context: Context) { 7 | 8 | val db by lazy { 9 | Room.databaseBuilder(context, PlutoNetworkDatabase::class.java, DATABASE_NAME) 10 | .addMigrations() 11 | .fallbackToDestructiveMigration() 12 | .build() 13 | } 14 | 15 | companion object { 16 | private const val DATABASE_NAME = "_pluto_network_database" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/database/PlutoNetworkDatabase.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal.database 2 | 3 | import androidx.room.RoomDatabase 4 | import com.pluto.plugins.network.internal.mock.logic.dao.MockSettingsDao 5 | import com.pluto.plugins.network.internal.mock.logic.dao.MockSettingsEntity 6 | 7 | @androidx.room.Database( 8 | entities = [ 9 | MockSettingsEntity::class 10 | ], 11 | version = 1, 12 | exportSchema = false 13 | ) 14 | internal abstract class PlutoNetworkDatabase : RoomDatabase() { 15 | abstract fun mockSettingsDao(): MockSettingsDao 16 | } 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/interceptor/logic/transformers/BaseTransformer.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal.interceptor.logic.transformers 2 | 3 | internal interface BaseTransformer { 4 | fun beautify(plain: CharSequence): CharSequence 5 | fun flatten(plain: CharSequence): String 6 | } 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/interceptor/ui/components/CustomTraceInfoFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal.interceptor.ui.components 2 | 3 | import android.os.Bundle 4 | import android.view.LayoutInflater 5 | import android.view.View 6 | import android.view.ViewGroup 7 | import com.google.android.material.bottomsheet.BottomSheetDialogFragment 8 | import com.pluto.plugins.network.R 9 | 10 | internal class CustomTraceInfoFragment : BottomSheetDialogFragment() { 11 | 12 | override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View = 13 | inflater.inflate(R.layout.pluto_network___dialog_custom_traces_info, container, false) 14 | 15 | override fun getTheme(): Int = R.style.PlutoNetworkBottomSheetDialog 16 | } 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/mock/logic/dao/MockSettingsConverters.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal.mock.logic.dao 2 | 3 | import androidx.room.TypeConverter 4 | import com.squareup.moshi.JsonAdapter 5 | import com.squareup.moshi.Moshi 6 | 7 | internal class MockSettingsConverters { 8 | 9 | private var moshi = Moshi.Builder().build() 10 | private var moshiAdapter: JsonAdapter = moshi.adapter(MockData::class.java) 11 | 12 | @TypeConverter 13 | fun stringToMockData(data: String?): MockData? { 14 | data?.let { return moshiAdapter.fromJson(data) } 15 | return null 16 | } 17 | 18 | @TypeConverter 19 | fun mockDataToString(data: MockData): String? { 20 | return moshiAdapter.toJson(data) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/java/com/pluto/plugins/network/internal/share/holders/ShareHeadingHolder.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.network.internal.share.holders 2 | 3 | import android.view.ViewGroup 4 | import com.pluto.plugins.network.R 5 | import com.pluto.utilities.extensions.inflate 6 | import com.pluto.utilities.list.DiffAwareAdapter 7 | import com.pluto.utilities.list.DiffAwareHolder 8 | import com.pluto.utilities.list.ListItem 9 | 10 | internal class ShareHeadingHolder(parent: ViewGroup, actionListener: DiffAwareAdapter.OnActionListener) : 11 | DiffAwareHolder(parent.inflate(R.layout.pluto_network___item_share_option_header), actionListener) { 12 | override fun onBind(item: ListItem) { 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___bg_bottom_sheet.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___bg_cta_dashed_blue.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___bg_details_tab.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___bg_section_body.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___bg_section_header.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_arrow_back_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_arrow_down.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_arrow_up.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_clear_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | 13 | 14 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_close_gray.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_copy.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_custom_trace_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_done.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_error.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_error_orange.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_error_outline.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_option_clear.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_option_mock_settings.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_plugin_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_proxy_base_request_dark.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_proxy_base_response_dark.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_proxy_indicator.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_proxy_settings.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_proxy_settings_disabled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_proxy_settings_enabled.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_search_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_share_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_share_curl.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/drawable/pluto_network___ic_success.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/layout/pluto_network___stub_details_overview.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/layout/pluto_network___stub_details_request.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 12 | 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/menu/pluto_network___menu_more_options.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/network/lib/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #0c192b 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib-no-op/src/main/java/com/pluto/plugins/rooms/db/PlutoRoomsDBWatcher.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db 2 | 3 | @SuppressWarnings("UnusedPrivateMember", "EmptyFunctionBlock") 4 | object PlutoRoomsDBWatcher { 5 | fun watch(name: String, dbClass: Class<*>) {} 6 | 7 | fun remove(name: String) {} 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib-no-op/src/main/java/com/pluto/plugins/rooms/db/PlutoRoomsDatabasePlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoRoomsDatabasePlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "rooms-database" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/java/com/pluto/plugins/rooms/db/RoomsDBFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | internal class RoomsDBFragment : Fragment(R.layout.pluto_rooms___fragment_rooms_db) 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/java/com/pluto/plugins/rooms/db/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db 2 | 3 | internal object Session { 4 | var searchText: String? = null 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/java/com/pluto/plugins/rooms/db/internal/RoomsDBViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db.internal 2 | 3 | import android.app.Application 4 | import androidx.lifecycle.AndroidViewModel 5 | import androidx.lifecycle.LiveData 6 | import androidx.lifecycle.MutableLiveData 7 | import com.pluto.plugins.rooms.db.PlutoRoomsDBWatcher 8 | 9 | internal class RoomsDBViewModel(application: Application) : AndroidViewModel(application) { 10 | 11 | val dbs: LiveData> 12 | get() = _dbs 13 | private val _dbs = MutableLiveData>() 14 | 15 | fun fetch() { 16 | _dbs.postValue(PlutoRoomsDBWatcher.watchList.value.toList()) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/java/com/pluto/plugins/rooms/db/internal/core/Utils.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db.internal.core 2 | 3 | internal fun isSystemTable(name: String): Boolean { 4 | val systemTables = arrayListOf().apply { 5 | add("android_metadata") 6 | add("room_master_table") 7 | add("sqlite_master") 8 | add("sqlite_sequence") 9 | } 10 | return systemTables.contains(name) 11 | } 12 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/java/com/pluto/plugins/rooms/db/internal/ui/filter/value/components/BaseValueStub.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.rooms.db.internal.ui.filter.value.components 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.constraintlayout.widget.ConstraintLayout 6 | 7 | internal abstract class BaseValueStub : ConstraintLayout { 8 | 9 | constructor(context: Context, attrs: AttributeSet, defStyle: Int) : super(context, attrs, defStyle) 10 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs, 0) 11 | constructor(context: Context) : super(context, null, 0) 12 | 13 | @Throws(IllegalStateException::class) 14 | abstract fun getValue(): String? 15 | abstract fun setValue(value: String?) 16 | } 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___bg_edittext_nullable.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___bg_edittext_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___bg_filter_item_delete.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___bg_filter_list_relation.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___bg_filter_relation_editor.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___bg_primary_key_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_add_record.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_chevron_down.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_clear_table.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_custom_query.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_database.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_duplicate.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_export.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_filter_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_filter_item_delete.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_list_icon.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_more_dark.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_no_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_refresh.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_sort_indicator_asc.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_sort_indicator_desc.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/drawable/pluto_rooms___ic_sort_option_selected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/layout/pluto_rooms___fragment_rooms_db.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #66eeecec 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/rooms-database/lib/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 44dp 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib-no-op/src/main/java/com/pluto/plugins/preferences/PlutoSharePreferencesPlugin.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.preferences 2 | 3 | @SuppressWarnings("UnusedPrivateMember") 4 | class PlutoSharePreferencesPlugin @JvmOverloads constructor(identifier: String = ID) { 5 | companion object { 6 | const val ID = "shared-preferences" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/BaseFragment.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.preferences 2 | 3 | import androidx.fragment.app.Fragment 4 | 5 | internal class BaseFragment : Fragment(R.layout.pluto_pref___fragment_base) 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.preferences 2 | 3 | internal object Session { 4 | var searchText: String? = null 5 | } 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/ui/DataModel.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.preferences.ui 2 | 3 | import androidx.annotation.Keep 4 | import com.pluto.utilities.list.ListItem 5 | import com.pluto.utilities.selector.SelectorOption 6 | import com.pluto.utilities.views.keyvalue.KeyValuePairEditMetaData 7 | import com.squareup.moshi.JsonClass 8 | 9 | @Keep 10 | @JsonClass(generateAdapter = true) 11 | internal data class SharedPrefFile( 12 | val label: CharSequence, 13 | val isDefault: Boolean 14 | ) : SelectorOption() { 15 | override fun displayText(): CharSequence = label 16 | } 17 | 18 | internal data class SharedPrefKeyValuePair( 19 | val key: String, 20 | val value: Any?, 21 | val prefLabel: String?, 22 | val isDefault: Boolean = false 23 | ) : ListItem(), KeyValuePairEditMetaData 24 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/java/com/pluto/plugins/preferences/utils/Preferences.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugins.preferences.utils 2 | 3 | import android.content.Context 4 | 5 | internal class Preferences(context: Context) { 6 | 7 | private val settingsPrefs by lazy { context.preferences("_pluto_pref_settings") } 8 | 9 | internal var selectedPreferenceFiles: String? 10 | get() = settingsPrefs.getString(SELECTED_PREF_FILE, null) 11 | set(value) = settingsPrefs.edit().putString(SELECTED_PREF_FILE, value).apply() 12 | 13 | companion object { 14 | private const val SELECTED_PREF_FILE = "selected_pref_file_v2" 15 | } 16 | } 17 | 18 | private fun Context.preferences(name: String, mode: Int = Context.MODE_PRIVATE) = getSharedPreferences(name, mode) 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/drawable/pluto_pref___bg_shared_pref_file_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/drawable/pluto_pref___ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/drawable/pluto_pref___ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/drawable/pluto_pref___ic_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | 14 | 15 | 18 | 19 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/drawable/pluto_pref___ic_filter_light.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/drawable/pluto_pref___ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/layout/pluto_pref___fragment_base.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 16 | 17 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/menu/pluto_pref___menu_more_options.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /pluto-plugins/plugins/shared-preferences/lib/src/main/res/navigation/pluto_pref___navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 14 | -------------------------------------------------------------------------------- /pluto/lib-no-op/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto/lib-no-op/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /pluto/lib-no-op/src/main/java/com/pluto/Pluto.kt: -------------------------------------------------------------------------------- 1 | package com.pluto 2 | 3 | import android.app.Application 4 | import android.os.Bundle 5 | 6 | @SuppressWarnings("EmptyFunctionBlock", "UnusedPrivateMember") 7 | object Pluto { 8 | 9 | @JvmOverloads 10 | fun open(identifier: String? = null, bundle: Bundle? = null) { 11 | } 12 | 13 | fun showNotch(state: Boolean) { 14 | } 15 | 16 | @JvmOverloads 17 | fun clearLogs(identifier: String? = null) {} 18 | 19 | class Installer(private val application: Application) { 20 | 21 | private val plugins = linkedSetOf() 22 | 23 | fun addPlugin(plugin: Any): Installer { 24 | return this 25 | } 26 | 27 | fun addPluginGroup(pluginGroup: Any): Installer { 28 | return this 29 | } 30 | 31 | fun install() { 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /pluto/lib/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/core/PlutoFileProvider.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.core 2 | 3 | import androidx.core.content.FileProvider 4 | 5 | /** 6 | * Custom FileProvider implementation for Pluto. 7 | * 8 | * This class extends Android's FileProvider to enable secure file sharing 9 | * between Pluto and other applications. It's used for sharing logs, screenshots, 10 | * and other files generated by Pluto's debugging tools. 11 | */ 12 | internal class PlutoFileProvider : FileProvider() 13 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/core/Session.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.core 2 | 3 | /** 4 | * Maintains the current debugging session state. 5 | * 6 | * This class tracks session-level information such as whether consent 7 | * has been shown to the user. 8 | */ 9 | internal class Session { 10 | /** Tracks whether the consent dialog has already been shown to the user */ 11 | var isConsentAlreadyShown = false 12 | } 13 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/maven/DataModels.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.maven 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | @JsonClass(generateAdapter = true) 6 | internal data class MavenData( 7 | val response: MavenResponse 8 | ) 9 | 10 | @JsonClass(generateAdapter = true) 11 | internal data class MavenResponse( 12 | val numFound: Int, 13 | val docs: List 14 | ) 15 | 16 | @JsonClass(generateAdapter = true) 17 | internal data class MavenArtifactDetails( 18 | val id: String, 19 | val latestVersion: String 20 | ) 21 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/maven/MavenApiService.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.maven 2 | 3 | import retrofit2.http.GET 4 | 5 | internal interface MavenApiService { 6 | 7 | @GET("https://search.maven.org/solrsearch/select?q=g:com.androidpluto+AND+a:pluto") 8 | suspend fun getLatestVersion(): MavenData 9 | } 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/maven/MavenSession.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.maven 2 | 3 | internal object MavenSession { 4 | var alreadySynced: Boolean = false 5 | var latestVersion: String? = null 6 | val releaseUrl: String? 7 | get() = latestVersion?.let { "https://github.com/androidPluto/pluto/releases/tag/v$it" } ?: run { null } 8 | } 9 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/plugin/PluginsViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.plugin 2 | 3 | import android.app.Application 4 | import androidx.lifecycle.AndroidViewModel 5 | import androidx.lifecycle.LiveData 6 | import androidx.lifecycle.MutableLiveData 7 | import com.pluto.Pluto 8 | 9 | internal class PluginsViewModel(application: Application) : AndroidViewModel(application) { 10 | 11 | val plugins: LiveData> 12 | get() = _plugins 13 | private val _plugins = MutableLiveData>() 14 | 15 | init { 16 | _plugins.postValue(Pluto.pluginManager.installedPlugins) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/settings/ResetDataCallback.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.settings 2 | 3 | import com.pluto.utilities.SingleLiveEvent 4 | 5 | /** 6 | * Callback class for handling data reset operations in the settings module. 7 | * 8 | * This class provides a mechanism to notify observers when a data reset operation 9 | * is triggered. It uses a SingleLiveEvent to ensure the reset event is only handled once. 10 | */ 11 | internal class ResetDataCallback { 12 | /** 13 | * A SingleLiveEvent that represents the state of the reset operation. 14 | * When set to true, it indicates that a reset operation has been requested. 15 | */ 16 | val state: SingleLiveEvent = SingleLiveEvent() 17 | } 18 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/tool/modules/currentScreen/OnCurrentScreenUpdateListener.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.tool.modules.currentScreen 2 | 3 | /** 4 | * Interface for receiving updates about the current screen. 5 | * 6 | * This interface is used to notify listeners when the current activity 7 | * or fragment changes. Implementations can use this information to 8 | * display or log the current screen information. 9 | */ 10 | internal interface OnCurrentScreenUpdateListener { 11 | /** 12 | * Called when the current screen changes. 13 | * 14 | * @param fragment The name of the current fragment, or null if none 15 | * @param activity The name of the current activity, or null if none 16 | */ 17 | fun onUpdate(fragment: String?, activity: String?) 18 | } 19 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/tool/modules/ruler/internal/control/ControlCta.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.tool.modules.ruler.internal.control 2 | 3 | import androidx.annotation.DrawableRes 4 | import com.pluto.utilities.list.ListItem 5 | 6 | internal data class ControlCta( 7 | val id: String, 8 | @DrawableRes val icon: Int, 9 | ) : ListItem() 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/tool/modules/ruler/internal/hint/HintItemHolder.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.tool.modules.ruler.internal.hint 2 | 3 | import android.view.ViewGroup 4 | import com.pluto.R 5 | import com.pluto.databinding.PlutoToolItemHintBinding 6 | import com.pluto.utilities.extensions.inflate 7 | import com.pluto.utilities.list.DiffAwareAdapter 8 | import com.pluto.utilities.list.DiffAwareHolder 9 | import com.pluto.utilities.list.ListItem 10 | 11 | internal class HintItemHolder(parent: ViewGroup, listener: DiffAwareAdapter.OnActionListener? = null) : 12 | DiffAwareHolder(parent.inflate(R.layout.pluto___tool_item_hint), listener) { 13 | 14 | private val binding = PlutoToolItemHintBinding.bind(itemView) 15 | 16 | override fun onBind(item: ListItem) { 17 | if (item is HintItem) { 18 | binding.text.text = "${layoutPosition + 1}.\t${item.text}" 19 | } 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/ui/ListWrapper.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.ui 2 | 3 | import com.pluto.utilities.list.ListItem 4 | 5 | internal class ListWrapper(private val data: T) : ListItem() { 6 | fun get(): T = data 7 | } 8 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/ui/selector/PluginsGroupViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.ui.selector 2 | 3 | import android.app.Application 4 | import androidx.lifecycle.AndroidViewModel 5 | import androidx.lifecycle.LiveData 6 | import com.pluto.plugin.PluginGroup 7 | import com.pluto.utilities.SingleLiveEvent 8 | 9 | internal class PluginsGroupViewModel(application: Application) : AndroidViewModel(application) { 10 | 11 | val current: LiveData 12 | get() = _current 13 | private val _current = SingleLiveEvent() 14 | 15 | fun set(group: PluginGroup) { 16 | _current.postValue(group) 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pluto/lib/src/main/java/com/pluto/ui/selector/SelectorStateCallback.kt: -------------------------------------------------------------------------------- 1 | package com.pluto.ui.selector 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | 5 | internal class SelectorStateCallback { 6 | val state = MutableLiveData() 7 | } 8 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/anim/pluto___click_bounce.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 15 | 16 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/anim/pluto___fade_in_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/anim/pluto___fade_out_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/anim/pluto___slide_in_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/anim/pluto___slide_out_bottom.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_about.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_check_box.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_check_box_selected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_check_box_unselected.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_easy_access.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_error.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_grid.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_grid_dark.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_launcher.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/androidPluto/pluto/60a04932ebf10eebc1d6d450d45201411c99cce3/pluto/lib/src/main/res/drawable/pluto___ic_launcher.webp -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_settings_grid_size_dec.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_settings_grid_size_inc.xml: -------------------------------------------------------------------------------- 1 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___ic_vcs.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_ic_current_screen_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_ic_grid_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_ic_ruler_control_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_ic_ruler_control_hint.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_ic_ruler_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_ic_screen_history_logo.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/drawable/pluto___tool_item_divider.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/layout/pluto___activity_pluto.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 12 | 13 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/layout/pluto___tool_item_control_cta.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 14 | 15 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/values/attr.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 30dp 4 | -------------------------------------------------------------------------------- /pluto/lib/src/main/res/xml/pluto___file_provider_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 12 | 15 | 18 | 21 | 25 | 26 | -------------------------------------------------------------------------------- /pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | echo "Running pre-commit checks..." 3 | 4 | OUTPUT="/tmp/analysis-result" 5 | ./gradlew detekt ktlintCheck > ${OUTPUT} 6 | EXIT_CODE=$? 7 | if [ ${EXIT_CODE} -ne 0 ]; then 8 | cat ${OUTPUT} 9 | rm ${OUTPUT} 10 | echo "*********************************************" 11 | echo " Checks Failed! " 12 | echo " Resolve found issues before committing " 13 | echo "*********************************************" 14 | exit ${EXIT_CODE} 15 | else 16 | rm ${OUTPUT} 17 | echo "*********************************************" 18 | echo " Checks Passed Successfully! " 19 | echo "*********************************************" 20 | fi 21 | -------------------------------------------------------------------------------- /sample/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /.idea/ 3 | -------------------------------------------------------------------------------- /sample/detekt-baseline.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ForbiddenPublicDataClass:PluginListAdapter.kt$PluginListItem$PluginListItem 6 | TopLevelPropertyNaming:NetworkCalls.kt$private const val CONVERSION_FAILURE = "response_conversion_failure" 7 | TopLevelPropertyNaming:NetworkCalls.kt$private const val DEFAULT_ERROR_MESSAGE = "Something went wrong!" 8 | TopLevelPropertyNaming:NetworkCalls.kt$private const val EMPTY_ERROR_MESSAGE = "empty error response" 9 | TopLevelPropertyNaming:NetworkCalls.kt$private const val UPSTREAM_FAILURE = "upstream_failure" 10 | 11 | 12 | -------------------------------------------------------------------------------- /sample/src/debugNoOp/java/com/sampleapp/pluto/DataSourcePluginGroup.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.pluto 2 | 3 | class DataSourcePluginGroup 4 | -------------------------------------------------------------------------------- /sample/src/debugNoOpMaven/java/com/sampleapp/pluto/DataSourcePluginGroup.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.pluto 2 | 3 | class DataSourcePluginGroup 4 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/JavaTest.java: -------------------------------------------------------------------------------- 1 | package com.sampleapp; 2 | 3 | import com.pluto.Pluto; 4 | 5 | public class JavaTest { 6 | 7 | public void showNotch(boolean state) { 8 | Pluto.INSTANCE.showNotch(state); 9 | } 10 | 11 | public void open(String id) { 12 | Pluto.INSTANCE.open(id); 13 | } 14 | 15 | public void open() { 16 | Pluto.INSTANCE.open(); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/layoutinspector/DemoLayoutInspectorFragment.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.layoutinspector 2 | 3 | import androidx.fragment.app.Fragment 4 | import com.sampleapp.R 5 | 6 | class DemoLayoutInspectorFragment : Fragment(R.layout.fragment_demo_layout_inspector) 7 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/network/internal/ktor/KtorNetwork.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.network.internal.ktor 2 | 3 | import com.pluto.plugins.network.interceptors.ktor.PlutoKtorInterceptor 4 | import io.ktor.client.HttpClient 5 | import io.ktor.client.plugins.contentnegotiation.ContentNegotiation 6 | import io.ktor.client.plugins.defaultRequest 7 | import io.ktor.client.request.header 8 | import io.ktor.http.URLProtocol 9 | import io.ktor.serialization.kotlinx.json.json 10 | 11 | val Client = HttpClient { 12 | defaultRequest { 13 | header("network-type", "ktor") 14 | url.protocol = URLProtocol.HTTPS 15 | url.host = "api.mocklets.com/p68296" 16 | } 17 | install(ContentNegotiation) { 18 | json() 19 | } 20 | install(PlutoKtorInterceptor) 21 | } 22 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/network/internal/ktor/PostRequestBody.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.network.internal.ktor 2 | 3 | import kotlinx.serialization.SerialName 4 | import kotlinx.serialization.Serializable 5 | 6 | @Serializable 7 | data class PostRequestBody( 8 | @SerialName("user") 9 | val user: String, 10 | @SerialName("email") 11 | val email: String, 12 | ) 13 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/network/internal/okhttp/DataModels.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.network.internal.okhttp 2 | 3 | import com.squareup.moshi.JsonClass 4 | import kotlinx.serialization.Serializable 5 | 6 | sealed class ResponseWrapper { 7 | data class Success(val body: T) : ResponseWrapper() 8 | data class Failure(val error: ErrorResponse, val errorString: String? = null) : 9 | ResponseWrapper() 10 | } 11 | 12 | @Serializable 13 | @JsonClass(generateAdapter = true) 14 | data class ErrorResponse(val reason: String?, val error: String) 15 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/roomsdatabase/db/dao/AdminDAO.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.roomsdatabase.db.dao 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.Query 6 | import com.sampleapp.functions.roomsdatabase.db.entity.Admin 7 | 8 | @Dao 9 | internal interface AdminDAO { 10 | 11 | @Insert 12 | fun insert(user: Admin) 13 | 14 | @Query("DELETE FROM Admin") 15 | fun clear() 16 | } 17 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/roomsdatabase/db/dao/UserDAO.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.roomsdatabase.db.dao 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.Query 6 | import com.sampleapp.functions.roomsdatabase.db.entity.User 7 | 8 | @Dao 9 | internal interface UserDAO { 10 | 11 | @Insert 12 | fun insert(user: User) 13 | 14 | @Query("DELETE FROM User") 15 | fun clear() 16 | } 17 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/roomsdatabase/db/entity/Admin.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.roomsdatabase.db.entity 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.PrimaryKey 6 | 7 | @Entity 8 | internal data class Admin( 9 | @PrimaryKey(autoGenerate = true) 10 | val id: Int, 11 | val name: String? = null, 12 | @ColumnInfo(name = "is_admin") 13 | val isAdmin: Boolean, 14 | @ColumnInfo(name = "can_write") 15 | val canWrite: Boolean 16 | ) 17 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/roomsdatabase/db/entity/User.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.roomsdatabase.db.entity 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.PrimaryKey 6 | 7 | @Entity 8 | internal data class User( 9 | @PrimaryKey(autoGenerate = true) 10 | val id: Int, 11 | val name: String? = null, 12 | val gender: String, 13 | @ColumnInfo(defaultValue = "21") 14 | val age: Int, 15 | val phoneNumber: String, 16 | val email: String, 17 | @ColumnInfo(name = "is_admin") 18 | val isAdmin: Boolean 19 | ) 20 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/roomsdatabase/db2/dao/UserV2DAO.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.roomsdatabase.db2.dao 2 | 3 | import androidx.room.Dao 4 | import androidx.room.Insert 5 | import androidx.room.Query 6 | import com.sampleapp.functions.roomsdatabase.db2.entity.UserV2 7 | 8 | @Dao 9 | internal interface UserV2DAO { 10 | 11 | @Insert 12 | fun insert(user: UserV2) 13 | 14 | @Query("DELETE FROM UserV2") 15 | fun clear() 16 | } 17 | -------------------------------------------------------------------------------- /sample/src/main/java/com/sampleapp/functions/roomsdatabase/db2/entity/UserV2.kt: -------------------------------------------------------------------------------- 1 | package com.sampleapp.functions.roomsdatabase.db2.entity 2 | 3 | import androidx.room.ColumnInfo 4 | import androidx.room.Entity 5 | import androidx.room.PrimaryKey 6 | 7 | @Entity 8 | internal data class UserV2( 9 | @PrimaryKey(autoGenerate = true) 10 | val id: Int, 11 | val name: String? = null, 12 | val gender: String, 13 | @ColumnInfo(defaultValue = "21") 14 | val age: Int, 15 | val phoneNumber: String, 16 | val email: String, 17 | @ColumnInfo(name = "is_admin") 18 | val isAdmin: Boolean 19 | ) 20 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/ic_alert_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/ic_arrow.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/ic_arrow_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /sample/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /sample/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #eeecec 4 | #FFBB86FC 5 | #FF6200EE 6 | #FF3700B3 7 | #FF03DAC5 8 | #FF018786 9 | #FF000000 10 | #cc000000 11 | #99000000 12 | #FFFFFFFF 13 | #ccFFFFFF 14 | #fd7e14 15 | #0Dfd7e14 16 | #366BD1 17 | 18 | -------------------------------------------------------------------------------- /scripts/publish/_dokkaUtils.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'org.jetbrains.dokka' 2 | 3 | task androidSourcesJar(type: Jar) { 4 | archiveClassifier.set('sources') 5 | from android.sourceSets.main.java.srcDirs 6 | from android.sourceSets.main.kotlin.srcDirs 7 | } 8 | 9 | tasks.withType(dokkaHtmlPartial.getClass()).configureEach { 10 | pluginsMapConfiguration.set( 11 | ["org.jetbrains.dokka.base.DokkaBase": """{ "separateInheritedMembers": true}"""] 12 | ) 13 | } 14 | 15 | task javadocJar(type: Jar, dependsOn: dokkaJavadoc) { 16 | archiveClassifier.set('javadoc') 17 | from dokkaJavadoc.outputDirectory 18 | } 19 | 20 | artifacts { 21 | archives androidSourcesJar 22 | archives javadocJar 23 | } -------------------------------------------------------------------------------- /scripts/static-analysis/.editorconfig: -------------------------------------------------------------------------------- 1 | [*.{kt, kts}] 2 | max_line_length = 200 3 | insert_final_newline = true 4 | indent_size = 4 5 | indent_style = space -------------------------------------------------------------------------------- /scripts/static-analysis/android-lint-config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /version.properties: -------------------------------------------------------------------------------- 1 | major=3 2 | minor=0 3 | patch=1 4 | build=0 5 | channel=release 6 | --------------------------------------------------------------------------------