├── .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 |
--------------------------------------------------------------------------------
/pluto-plugins/plugins/exceptions/lib/src/main/res/menu/pluto_excep___menu_stack_trace_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------
/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 |
--------------------------------------------------------------------------------