├── .github
└── FUNDING.yml
├── .gitignore
├── .idea
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── compiler.xml
├── deploymentTargetDropDown.xml
├── dictionaries
│ └── kenneth.xml
├── discord.xml
├── google-java-format.xml
├── gradle.xml
├── inspectionProfiles
│ └── Project_Default.xml
├── jarRepositories.xml
├── jsonSchemas.xml
├── kotlinc.xml
├── migrations.xml
├── misc.xml
└── vcs.xml
├── CHANGELOG.md
├── LICENSE
├── README.md
├── app-search-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── appsearchmodule
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── appsearchmodule
│ │ │ ├── AppGridAdapter.kt
│ │ │ ├── AppListDiffCallback.kt
│ │ │ ├── AppSearchModule.kt
│ │ │ ├── AppSearchModulePreferences.kt
│ │ │ ├── AppSearchModuleSettingsProvider.kt
│ │ │ ├── AppSearchResultAdapter.kt
│ │ │ ├── MainApplication.kt
│ │ │ ├── PinnedAppWidgetSettings.kt
│ │ │ ├── PrefKeys.kt
│ │ │ ├── activity
│ │ │ ├── MainActivity.kt
│ │ │ ├── SearchModuleSettingsActivity.kt
│ │ │ └── WidgetSettingsActivity.kt
│ │ │ ├── fragment
│ │ │ ├── SearchResultSettingsFragment.kt
│ │ │ └── WidgetSettingsFragment.kt
│ │ │ ├── settings
│ │ │ ├── MainSettingsScreen.kt
│ │ │ └── MainSettingsScreenViewModel.kt
│ │ │ └── widget
│ │ │ ├── PinnedAppsWidget.kt
│ │ │ └── PinnedAppsWidgetCreator.kt
│ └── res
│ │ ├── drawable
│ │ ├── app_search_module_settings_icon.xml
│ │ ├── app_search_module_widget_settings_icon.xml
│ │ ├── ic_favorite.xml
│ │ └── ic_trash_alt.xml
│ │ ├── font-v16
│ │ └── manrope.xml
│ │ ├── font-v26
│ │ └── manrope.xml
│ │ ├── font
│ │ ├── manrope_bold.ttf
│ │ ├── manrope_extrabold.ttf
│ │ ├── manrope_regular.ttf
│ │ └── manrope_semibold.ttf
│ │ ├── layout
│ │ ├── app_grid_item.xml
│ │ ├── app_search_result_card.xml
│ │ ├── pinned_apps_widget.xml
│ │ └── settings_activity.xml
│ │ ├── values
│ │ ├── def_pref_values.xml
│ │ ├── dimens.xml
│ │ ├── ints.xml
│ │ ├── pref_keys.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ ├── search_module_preference.xml
│ │ └── widget_preference.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── appsearchmodule
│ └── ExampleUnitTest.kt
├── app-shortcut-search-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── appshortcutsearchmodule
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── appshortcutsearchmodule
│ │ │ ├── AppShortcut.kt
│ │ │ ├── AppShortcutSearchModule.kt
│ │ │ └── AppShortcutSearchResultAdapter.kt
│ └── res
│ │ ├── layout
│ │ ├── app_shortcut_list.xml
│ │ └── app_shortcut_list_item.xml
│ │ └── values
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── appshortcutsearchmodule
│ └── ExampleUnitTest.kt
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── spotlightlauncher
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ ├── AppManager.kt
│ │ │ ├── AppModule.kt
│ │ │ ├── BlurHandlerImpl.kt
│ │ │ ├── Constants.kt
│ │ │ ├── IntentExtras.kt
│ │ │ ├── InternalLauncherEvent.kt
│ │ │ ├── LauncherEventChannel.kt
│ │ │ ├── LauncherFragmentFactory.kt
│ │ │ ├── LauncherState.kt
│ │ │ ├── LauncherThemeCompose.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainApplication.kt
│ │ │ ├── StarlightLauncherApiImpl.kt
│ │ │ ├── TutorialOverlay.kt
│ │ │ ├── animation
│ │ │ └── TranslationYPredictiveOnBackPressedCallback.kt
│ │ │ ├── api
│ │ │ ├── LatLong.kt
│ │ │ ├── NominatimApi.kt
│ │ │ └── OpenWeatherApi.kt
│ │ │ ├── databinding
│ │ │ └── Adapters.kt
│ │ │ ├── datetime
│ │ │ ├── ClockSettingsScreen.kt
│ │ │ ├── ClockSettingsScreenViewModel.kt
│ │ │ ├── DateTimePreferenceManager.kt
│ │ │ ├── DateTimeViewSize.kt
│ │ │ ├── Defaults.kt
│ │ │ ├── LocationUpdateFrequency.kt
│ │ │ ├── WeatherApiKeyDialog.kt
│ │ │ ├── WeatherLocationPicker.kt
│ │ │ ├── WeatherLocationPickerViewModel.kt
│ │ │ └── WeatherUpdateFrequency.kt
│ │ │ ├── extension
│ │ │ ├── Extension.kt
│ │ │ ├── ExtensionManager.kt
│ │ │ ├── ExtensionSettings.kt
│ │ │ └── WidgetMetadata.kt
│ │ │ ├── home
│ │ │ ├── AppDrawerScreenFragment.kt
│ │ │ ├── AppDrawerScreenViewModel.kt
│ │ │ ├── AppListAdapter.kt
│ │ │ ├── AppListDiffCallback.kt
│ │ │ ├── AppListItemTypes.kt
│ │ │ ├── HomeScreenFragment.kt
│ │ │ ├── HomeScreenViewModel.kt
│ │ │ └── HomeScreenViewPagerAdapter.kt
│ │ │ ├── mediacontrol
│ │ │ ├── MediaControlCard.kt
│ │ │ ├── NotificationListenerStub.kt
│ │ │ └── settings
│ │ │ │ ├── MediaControlPreferenceManager.kt
│ │ │ │ ├── MediaControlSettingsScreen.kt
│ │ │ │ └── MediaControlSettingsViewModel.kt
│ │ │ ├── prefs
│ │ │ ├── InfoSettingsScreen.kt
│ │ │ ├── PrefKeys.kt
│ │ │ ├── RootSettingsScreen.kt
│ │ │ ├── RootSettingsScreenViewModel.kt
│ │ │ ├── SettingsRoutes.kt
│ │ │ ├── StarlightLauncherSettingsActivity.kt
│ │ │ ├── appearance
│ │ │ │ ├── AppearancePreferenceManager.kt
│ │ │ │ ├── AppearanceSettingsScreen.kt
│ │ │ │ ├── AppearanceSettingsScreenViewModel.kt
│ │ │ │ ├── DefaultIconPack.kt
│ │ │ │ ├── Defaults.kt
│ │ │ │ ├── IconPackSettingsScreen.kt
│ │ │ │ ├── IconPackSettingsScreenViewModel.kt
│ │ │ │ └── InstalledIconPack.kt
│ │ │ └── searching
│ │ │ │ ├── SearchLayoutSettingsScreen.kt
│ │ │ │ ├── SearchLayoutSettingsScreenViewModel.kt
│ │ │ │ ├── SearchPreferenceManager.kt
│ │ │ │ └── SearchSettingsScreen.kt
│ │ │ ├── searching
│ │ │ ├── Searcher.kt
│ │ │ └── views
│ │ │ │ ├── BluetoothControl.kt
│ │ │ │ └── SearchResultView.kt
│ │ │ ├── setup
│ │ │ ├── LandingFragment.kt
│ │ │ ├── PrefKeys.kt
│ │ │ ├── SetupActivity.kt
│ │ │ ├── SetupPagerAdapter.kt
│ │ │ ├── SetupSteps.kt
│ │ │ ├── feature
│ │ │ │ ├── AvailableFeatures.kt
│ │ │ │ └── FeatureFragment.kt
│ │ │ └── permission
│ │ │ │ ├── PermissionFragment.kt
│ │ │ │ └── RequiredPermissions.kt
│ │ │ ├── util
│ │ │ ├── BitmapExt.kt
│ │ │ ├── EventEmitter.kt
│ │ │ ├── Layout.kt
│ │ │ └── Serializers.kt
│ │ │ ├── views
│ │ │ ├── DateTimeView.kt
│ │ │ ├── LauncherOptionMenu.kt
│ │ │ ├── OrderedInsertionLinearLayout.kt
│ │ │ ├── ReorderableList.kt
│ │ │ └── SearchBox.kt
│ │ │ └── widgets
│ │ │ ├── AddedWidget.kt
│ │ │ ├── LauncherAppWidgetHost.kt
│ │ │ ├── LauncherAppWidgetHostView.kt
│ │ │ ├── WidgetListAdapter.kt
│ │ │ ├── WidgetListView.kt
│ │ │ ├── WidgetPreferenceManager.kt
│ │ │ ├── availablewidgetspage
│ │ │ ├── AndroidWidgetsFragment.kt
│ │ │ ├── AvailableAndroidWidgetListAdapter.kt
│ │ │ ├── AvailableWidgetsFragment.kt
│ │ │ ├── StarlightWidgetListAdapter.kt
│ │ │ ├── StarlightWidgetsFragment.kt
│ │ │ └── WidgetTypeViewPagerAdapter.kt
│ │ │ └── widgetspanel
│ │ │ ├── EditModeHeader.kt
│ │ │ ├── Overlay.kt
│ │ │ └── WidgetsPanel.kt
│ └── res
│ │ ├── drawable-v24
│ │ └── ic_launcher_foreground.xml
│ │ ├── drawable
│ │ ├── blur_view_edit_text_bg.xml
│ │ ├── bottom_option_menu_background.xml
│ │ ├── card_background.xml
│ │ ├── home_screen_background_transition.xml
│ │ ├── ic_angle_down.xml
│ │ ├── ic_angle_up.xml
│ │ ├── ic_apps.xml
│ │ ├── ic_archive.xml
│ │ ├── ic_baseline_add_24.xml
│ │ ├── ic_baseline_checkroom_24.xml
│ │ ├── ic_baseline_search_24.xml
│ │ ├── ic_bell.xml
│ │ ├── ic_brackets_curly.xml
│ │ ├── ic_check.xml
│ │ ├── ic_clock.xml
│ │ ├── ic_cloud_sun.xml
│ │ ├── ic_comment_dots.xml
│ │ ├── ic_draggabledots.xml
│ │ ├── ic_exchange.xml
│ │ ├── ic_expand_arrows.xml
│ │ ├── ic_export.xml
│ │ ├── ic_favorite.xml
│ │ ├── ic_file_search_alt.xml
│ │ ├── ic_history_alt.xml
│ │ ├── ic_icons.xml
│ │ ├── ic_info_circle.xml
│ │ ├── ic_key_skeleton.xml
│ │ ├── ic_lock_alt.xml
│ │ ├── ic_notes.xml
│ │ ├── ic_pause.xml
│ │ ├── ic_pen.xml
│ │ ├── ic_play.xml
│ │ ├── ic_play_circle.xml
│ │ ├── ic_plus.xml
│ │ ├── ic_redo.xml
│ │ ├── ic_ruler.xml
│ │ ├── ic_setting.xml
│ │ ├── ic_skip_forward_alt.xml
│ │ ├── ic_step_backward_alt.xml
│ │ ├── ic_swatchbook.xml
│ │ ├── ic_times.xml
│ │ ├── ic_times_circle.xml
│ │ ├── ic_trash_alt.xml
│ │ ├── ic_twotone_android_24.xml
│ │ ├── ic_twotone_computer_24.xml
│ │ ├── ic_twotone_device_unknown_24.xml
│ │ ├── ic_twotone_directions_car_24.xml
│ │ ├── ic_twotone_gamepad_24.xml
│ │ ├── ic_twotone_headset_24.xml
│ │ ├── ic_twotone_mic_24.xml
│ │ ├── ic_twotone_smartphone_24.xml
│ │ ├── ic_twotone_speaker_24.xml
│ │ ├── ic_twotone_watch_24.xml
│ │ ├── ic_unlock_alt.xml
│ │ ├── ic_vector_square.xml
│ │ ├── ic_window_grid.xml
│ │ ├── remove_widget_btn_bg.xml
│ │ ├── rounded_background.xml
│ │ ├── search_box_cursor.xml
│ │ ├── status_bar_shade.xml
│ │ ├── widget_resize_frame.xml
│ │ └── widget_resize_handle.xml
│ │ ├── font-v16
│ │ └── manrope.xml
│ │ ├── font-v26
│ │ └── manrope.xml
│ │ ├── font
│ │ ├── manrope_bold.ttf
│ │ ├── manrope_extrabold.ttf
│ │ ├── manrope_regular.ttf
│ │ └── manrope_semibold.ttf
│ │ ├── layout
│ │ ├── activity_main.xml
│ │ ├── activity_setup.xml
│ │ ├── app_list_item.xml
│ │ ├── app_list_section_grid_item.xml
│ │ ├── available_widgets_list_header.xml
│ │ ├── available_widgets_list_widget_category_header.xml
│ │ ├── available_widgets_list_widget_preview.xml
│ │ ├── available_widgets_list_widget_provider_item.xml
│ │ ├── bluetooth_control.xml
│ │ ├── bottom_option_menu_item.xml
│ │ ├── date_time_view.xml
│ │ ├── edit_mode_header.xml
│ │ ├── feature_item.xml
│ │ ├── fragment_android_widget_list.xml
│ │ ├── fragment_app_drawer_screen.xml
│ │ ├── fragment_available_widgets.xml
│ │ ├── fragment_initialization.xml
│ │ ├── fragment_landing.xml
│ │ ├── fragment_main_screen.xml
│ │ ├── fragment_setup_feature.xml
│ │ ├── fragment_setup_permission.xml
│ │ ├── fragment_starlight_widget_list.xml
│ │ ├── launcher_option_menu.xml
│ │ ├── location_search_box.xml
│ │ ├── media_control_card.xml
│ │ ├── overlay.xml
│ │ ├── reorderable_preference_item.xml
│ │ ├── reorderable_preference_layout.xml
│ │ ├── search_box.xml
│ │ ├── search_category_order_list_item.xml
│ │ ├── search_result_card.xml
│ │ ├── search_result_layout.xml
│ │ ├── settings_activity.xml
│ │ ├── setup_permission_item.xml
│ │ ├── spotlight_overlay_launcher_menu.xml
│ │ ├── spotlight_overlay_widgets_panel.xml
│ │ ├── suggested_result_card.xml
│ │ ├── widget_frame.xml
│ │ ├── widget_list.xml
│ │ └── widgets_panel.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── values-night
│ │ └── styles.xml
│ │ ├── values
│ │ ├── arrays.xml
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── defaults.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── ids.xml
│ │ ├── ints.xml
│ │ ├── pref_keys.xml
│ │ ├── strings.xml
│ │ ├── styles.xml
│ │ └── themes.xml
│ │ └── xml
│ │ ├── about_launcher_preferences.xml
│ │ ├── appearance_preferences.xml
│ │ ├── date_time_preferences.xml
│ │ ├── icon_pack_preferences.xml
│ │ ├── media_control_preferences.xml
│ │ └── root_preferences.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── spotlightlauncher
│ └── ExampleUnitTest.kt
├── build.gradle
├── codemagic.yaml
├── contact-search-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── contactsearchmodule
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── contactsearchmodule
│ │ │ ├── Contact.kt
│ │ │ ├── ContactSearchModule.kt
│ │ │ └── ContactSearchResultAdapter.kt
│ └── res
│ │ ├── drawable
│ │ ├── action_button_background.xml
│ │ └── ic_phone.xml
│ │ ├── layout
│ │ ├── contact_list_item.xml
│ │ └── contact_search_result_card.xml
│ │ └── values
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── contactsearchmodule
│ └── ExampleUnitTest.kt
├── datastore-preferences
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kennethnym
│ │ └── datastorepreferences
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kennethnym
│ │ │ └── datastorepreferences
│ │ │ └── DatastorePreferencesFragment.kt
│ └── res
│ │ └── layout
│ │ └── preference_recyclerview.xml
│ └── test
│ └── java
│ └── kennethnym
│ └── datastorepreferences
│ └── ExampleUnitTest.kt
├── fastlane
└── metadata
│ └── android
│ ├── de
│ └── short_description.txt
│ └── en-US
│ ├── changelogs
│ ├── 10026.txt
│ └── 10033.txt
│ ├── full_description.txt
│ ├── images
│ ├── icon.png
│ └── phoneScreenshots
│ │ ├── 01.jpg
│ │ ├── 02.jpg
│ │ ├── 03.jpg
│ │ ├── 04.jpg
│ │ ├── 05.jpg
│ │ └── 06.jpg
│ └── short_description.txt
├── file-search-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── filesearchmodule
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── filesearchmodule
│ │ │ ├── DocumentProviderName.kt
│ │ │ ├── FileListAdapter.kt
│ │ │ ├── FileSearchModule.kt
│ │ │ ├── FileSearchModulePreferences.kt
│ │ │ ├── FileSearchModuleSettingsProvider.kt
│ │ │ ├── FileSearchResultAdapter.kt
│ │ │ ├── MainApplication.kt
│ │ │ ├── activity
│ │ │ └── MainActivity.kt
│ │ │ └── settings
│ │ │ ├── MainSettingsScreen.kt
│ │ │ ├── MainSettingsScreenViewModel.kt
│ │ │ └── PrefKeys.kt
│ └── res
│ │ ├── drawable
│ │ ├── file_search_module_search_module_settings_icon.xml
│ │ ├── ic_file_search_alt.xml
│ │ └── ic_plus.xml
│ │ ├── layout
│ │ ├── file_list_item.xml
│ │ ├── file_search_result_card.xml
│ │ └── settings_activity.xml
│ │ └── values
│ │ ├── pref_keys.xml
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── filesearchmodule
│ └── ExampleUnitTest.kt
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── images
├── logo.png
├── main-screen.png
└── screenshots
│ ├── screenshot-1.png
│ ├── screenshot-2.png
│ ├── screenshot-3.png
│ ├── screenshot-4.png
│ ├── screenshot-5.png
│ ├── screenshot-6.png
│ └── screenshot-7.png
├── math-search-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── mathsearchmodule
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── mathsearchmodule
│ │ │ ├── MathSearchModule.kt
│ │ │ └── MathSearchResultAdapter.kt
│ └── res
│ │ ├── layout
│ │ └── math_search_result_card.xml
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── mathsearchmodule
│ └── ExampleUnitTest.kt
├── notes-widget
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── noteswidget
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── noteswidget
│ │ │ ├── Note.kt
│ │ │ ├── NotesWidget.kt
│ │ │ ├── NotesWidgetCreator.kt
│ │ │ ├── NotesWidgetSettingsProvider.kt
│ │ │ ├── PrefKeys.kt
│ │ │ ├── pref
│ │ │ └── NotesWidgetPreferences.kt
│ │ │ ├── settings
│ │ │ ├── ExportNotesDialog.kt
│ │ │ ├── MainSettingsScreen.kt
│ │ │ └── MainSettingsScreenViewModel.kt
│ │ │ ├── util
│ │ │ ├── LocalDateTimeSerializer.kt
│ │ │ └── NotesBackup.kt
│ │ │ └── view
│ │ │ ├── AllNoteCardListAdapter.kt
│ │ │ ├── AllNotes.kt
│ │ │ ├── AllNotesPageViewModel.kt
│ │ │ ├── NoteListDiffCallback.kt
│ │ │ └── QuickNoteListAdapter.kt
│ └── res
│ │ ├── drawable
│ │ ├── all_notes_add_note_btn_bg.xml
│ │ ├── ic_archive.xml
│ │ ├── ic_bell.xml
│ │ ├── ic_check.xml
│ │ ├── ic_export.xml
│ │ ├── ic_history_alt.xml
│ │ ├── ic_notes.xml
│ │ ├── ic_pen.xml
│ │ ├── ic_plus.xml
│ │ ├── ic_times.xml
│ │ ├── ic_trash_alt.xml
│ │ ├── note_card_background.xml
│ │ └── notes_widget_settings_icon.xml
│ │ ├── layout
│ │ ├── all_notes.xml
│ │ ├── note_card.xml
│ │ ├── notes_widget.xml
│ │ └── quick_note_list_item.xml
│ │ ├── values
│ │ ├── dimens.xml
│ │ ├── pref_keys.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ └── notes_widget_root_preferences.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── noteswidget
│ └── ExampleUnitTest.kt
├── privacy-policy.md
├── release_notes.txt
├── settings.gradle
├── starlight-launcher-api
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── api
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── api
│ │ │ ├── AppManager.kt
│ │ │ ├── ExtensionSettingsProvider.kt
│ │ │ ├── IconPack.kt
│ │ │ ├── LauncherEvent.kt
│ │ │ ├── SearchModule.kt
│ │ │ ├── SearchResult.kt
│ │ │ ├── StarlightLauncherApi.kt
│ │ │ ├── Widget.kt
│ │ │ ├── compose
│ │ │ ├── LocalDataStore.kt
│ │ │ └── pref
│ │ │ │ ├── ErrorDialog.kt
│ │ │ │ ├── LauncherTheme.kt
│ │ │ │ ├── SettingList.kt
│ │ │ │ ├── SettingsListItem.kt
│ │ │ │ ├── SettingsScreen.kt
│ │ │ │ ├── SettingsSection.kt
│ │ │ │ ├── SingleChoiceSettingsListItem.kt
│ │ │ │ └── SwitchSettingsListItem.kt
│ │ │ ├── intent
│ │ │ └── StarlightLauncherIntent.kt
│ │ │ ├── preference
│ │ │ ├── PreferenceCategoryWithSummary.kt
│ │ │ └── SettingsActivity.kt
│ │ │ ├── res
│ │ │ └── StarlightLauncherStringRes.kt
│ │ │ ├── util
│ │ │ ├── BlurHandler.kt
│ │ │ ├── EventChannel.kt
│ │ │ ├── FuzzyScore.kt
│ │ │ ├── GestureMover.kt
│ │ │ ├── Insets.kt
│ │ │ ├── Swap.kt
│ │ │ ├── ViewExt.kt
│ │ │ └── dp.kt
│ │ │ └── view
│ │ │ ├── AppOptionMenu.kt
│ │ │ ├── IconButton.kt
│ │ │ ├── OptionMenu.kt
│ │ │ ├── OptionMenuItem.kt
│ │ │ ├── Plate.kt
│ │ │ ├── SearchResultAdapter.kt
│ │ │ ├── SearchResultCard.kt
│ │ │ └── TextButton.kt
│ └── res
│ │ ├── color
│ │ ├── text_button_color.xml
│ │ ├── text_button_color_on_plate.xml
│ │ └── text_button_color_primary.xml
│ │ ├── drawable
│ │ ├── edit_text_on_plate_bg.xml
│ │ ├── ic_angle_down.xml
│ │ ├── ic_angle_up.xml
│ │ ├── ic_check.xml
│ │ ├── ic_exclamation_triangle.xml
│ │ ├── ic_favorite.xml
│ │ ├── ic_trash_alt.xml
│ │ ├── option_menu_background.xml
│ │ └── plate_background.xml
│ │ ├── font
│ │ ├── manrope.xml
│ │ ├── manrope_bold.ttf
│ │ ├── manrope_extrabold.ttf
│ │ ├── manrope_regular.ttf
│ │ └── manrope_semibold.ttf
│ │ ├── layout
│ │ ├── app_option_menu.xml
│ │ ├── option_menu_item.xml
│ │ ├── search_result_card_layout.xml
│ │ └── settings_activity.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher_foreground.png
│ │ ├── values-night
│ │ └── themes.xml
│ │ └── values
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── pref_keys.xml
│ │ ├── strings.xml
│ │ ├── styles.xml
│ │ └── themes.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── api
│ └── ExampleUnitTest.kt
├── unit-converter-widget
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── unitconverterwidget
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── unitconverterwidget
│ │ │ ├── ConversionFactors.kt
│ │ │ ├── Measurement.kt
│ │ │ ├── MeasurementType.kt
│ │ │ ├── MeasurementUnit.kt
│ │ │ ├── UnitConverterWidget.kt
│ │ │ └── UnitConverterWidgetCreator.kt
│ └── res
│ │ ├── drawable
│ │ ├── ic_angle_down.xml
│ │ └── ic_check.xml
│ │ ├── layout
│ │ └── unit_converter_widget.xml
│ │ └── values
│ │ ├── arrays.xml
│ │ ├── dimens.xml
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── unitconverterwidget
│ └── ExampleUnitTest.kt
├── url-opener
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── urlopener
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── urlopener
│ │ │ ├── UrlOpener.kt
│ │ │ └── UrlOpenerAdapter.kt
│ └── res
│ │ ├── drawable
│ │ └── ic_angle_right_b.xml
│ │ ├── layout
│ │ └── open_url.xml
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── urlopener
│ └── ExampleUnitTest.kt
├── web-search-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── websearchmodule
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── java
│ │ └── kenneth
│ │ │ └── app
│ │ │ └── starlightlauncher
│ │ │ └── websearchmodule
│ │ │ ├── WebSearch.kt
│ │ │ └── WebSearchAdapter.kt
│ └── res
│ │ ├── drawable
│ │ └── ic_baseline_search_24.xml
│ │ ├── layout
│ │ └── web_search.xml
│ │ └── values
│ │ └── strings.xml
│ └── test
│ └── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── websearchmodule
│ └── ExampleUnitTest.kt
└── wifi-control-module
├── .gitignore
├── build.gradle
├── consumer-rules.pro
├── proguard-rules.pro
└── src
├── androidTest
└── java
│ └── kenneth
│ └── app
│ └── starlightlauncher
│ └── wificontrolmodule
│ └── ExampleInstrumentedTest.kt
├── main
├── AndroidManifest.xml
├── java
│ └── kenneth
│ │ └── app
│ │ └── starlightlauncher
│ │ └── wificontrolmodule
│ │ ├── WifiControlAdapter.kt
│ │ └── WifiControlModule.kt
└── res
│ ├── drawable
│ └── require_location_perm_bg.xml
│ ├── layout
│ └── wifi_control.xml
│ └── values
│ └── strings.xml
└── test
└── java
└── kenneth
└── app
└── starlightlauncher
└── wificontrolmodule
└── ExampleUnitTest.kt
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2]
2 | patreon: # Replace with a single Patreon username e.g., user1
3 | open_collective: # Replace with a single Open Collective username e.g., user1
4 | ko_fi: # Replace with a single Ko-fi username e.g., user1
5 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel
6 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
7 | liberapay: kennethnym
8 | issuehunt: # Replace with a single IssueHunt username e.g., user1
9 | otechie: # Replace with a single Otechie username e.g., user1
10 | custom: ['https://www.buymeacoffee.com/kennethnym']
11 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | apikey.properties
4 | /local.properties
5 | /.idea/caches
6 | /.idea/libraries
7 | /.idea/modules.xml
8 | /.idea/workspace.xml
9 | /.idea/navEditor.xml
10 | /.idea/assetWizardSettings.xml
11 | .DS_Store
12 | /build
13 | /captures
14 | .externalNativeBuild
15 | .cxx
16 | /base64
17 | /DebugKeystore.jks
18 | /ReleaseKeystore.jks
19 | /app/release/app-release.apk
20 | /app/release/output-metadata.json
21 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/deploymentTargetDropDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/dictionaries/kenneth.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | duckduckgo
5 | spotlightlauncher
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/discord.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/.idea/google-java-format.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/jsonSchemas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/.idea/kotlinc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/migrations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app-search-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/app-search-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app-search-module/consumer-rules.pro
--------------------------------------------------------------------------------
/app-search-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/app-search-module/src/androidTest/java/kenneth/app/starlightlauncher/appsearchmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.searchmodules.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/AppListDiffCallback.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule
2 |
3 | import androidx.recyclerview.widget.DiffUtil
4 |
5 | internal class AppListDiffCallback(
6 | private val oldAppList: AppList,
7 | private val newAppList: AppList
8 | ) :
9 | DiffUtil.Callback() {
10 | override fun getOldListSize(): Int = oldAppList.size
11 |
12 | override fun getNewListSize(): Int = newAppList.size
13 |
14 | override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
15 | val oldItem = oldAppList[oldItemPosition]
16 | val newItem = newAppList[newItemPosition]
17 |
18 | return oldItem.componentName == newItem.componentName && oldItem.user == newItem.user
19 | }
20 |
21 | override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean {
22 | val oldItem = oldAppList[oldItemPosition]
23 | val newItem = newAppList[newItemPosition]
24 |
25 | return oldItem.label == newItem.label
26 | }
27 | }
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/MainApplication.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule
2 |
3 | import android.app.Application
4 |
5 | class MainApplication : Application()
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/PrefKeys.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule
2 |
3 | import androidx.datastore.preferences.core.booleanPreferencesKey
4 | import androidx.datastore.preferences.core.stringPreferencesKey
5 |
6 | val PREF_KEY_SHOW_APP_NAMES = booleanPreferencesKey("pref_key_show_app_names")
7 | val PREF_KEY_SHOW_PINNED_APP_NAMES = booleanPreferencesKey("pref_key_show_pinned_app_names")
8 | val PREF_KEY_PINNED_APPS = stringPreferencesKey("pref_key_pinned_apps")
9 |
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/activity/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule.activity
2 |
3 | import androidx.appcompat.app.AppCompatActivity
4 |
5 | class MainActivity : AppCompatActivity()
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/activity/SearchModuleSettingsActivity.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule.activity
2 |
3 | import android.os.Build
4 | import android.os.Bundle
5 | import android.view.WindowInsets
6 | import androidx.appcompat.app.AppCompatActivity
7 | import androidx.core.view.WindowCompat
8 | import androidx.core.view.updatePadding
9 | import androidx.preference.Preference
10 | import androidx.preference.PreferenceFragmentCompat
11 | import com.google.android.material.appbar.MaterialToolbar
12 | import kenneth.app.starlightlauncher.api.preference.SettingsActivity
13 | import kenneth.app.starlightlauncher.appsearchmodule.R
14 | import kenneth.app.starlightlauncher.appsearchmodule.fragment.SearchResultSettingsFragment
15 |
16 | class SearchModuleSettingsActivity : SettingsActivity(),
17 | PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
18 | override fun createPreferenceFragment() = SearchResultSettingsFragment()
19 | }
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/activity/WidgetSettingsActivity.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule.activity
2 |
3 | import androidx.preference.PreferenceFragmentCompat
4 | import kenneth.app.starlightlauncher.api.preference.SettingsActivity
5 | import kenneth.app.starlightlauncher.appsearchmodule.fragment.WidgetSettingsFragment
6 |
7 | class WidgetSettingsActivity : SettingsActivity(),
8 | PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
9 | override fun createPreferenceFragment() = WidgetSettingsFragment()
10 | }
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/fragment/SearchResultSettingsFragment.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule.fragment
2 |
3 | import android.os.Bundle
4 | import androidx.preference.PreferenceFragmentCompat
5 | import kenneth.app.starlightlauncher.appsearchmodule.R
6 |
7 | class SearchResultSettingsFragment : PreferenceFragmentCompat() {
8 | override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
9 | setPreferencesFromResource(R.xml.search_module_preference, rootKey)
10 | }
11 | }
--------------------------------------------------------------------------------
/app-search-module/src/main/java/kenneth/app/starlightlauncher/appsearchmodule/fragment/WidgetSettingsFragment.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule.fragment
2 |
3 | import android.os.Bundle
4 | import androidx.preference.PreferenceFragmentCompat
5 | import com.google.android.material.appbar.MaterialToolbar
6 | import kenneth.app.starlightlauncher.appsearchmodule.R
7 |
8 | class WidgetSettingsFragment : PreferenceFragmentCompat() {
9 | override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
10 | setPreferencesFromResource(R.xml.widget_preference, rootKey)
11 | }
12 | }
--------------------------------------------------------------------------------
/app-search-module/src/main/res/drawable/app_search_module_settings_icon.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/drawable/app_search_module_widget_settings_icon.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/drawable/ic_favorite.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/drawable/ic_trash_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/font-v16/manrope.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
23 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/font-v26/manrope.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/font/manrope_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app-search-module/src/main/res/font/manrope_bold.ttf
--------------------------------------------------------------------------------
/app-search-module/src/main/res/font/manrope_extrabold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app-search-module/src/main/res/font/manrope_extrabold.ttf
--------------------------------------------------------------------------------
/app-search-module/src/main/res/font/manrope_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app-search-module/src/main/res/font/manrope_regular.ttf
--------------------------------------------------------------------------------
/app-search-module/src/main/res/font/manrope_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app-search-module/src/main/res/font/manrope_semibold.ttf
--------------------------------------------------------------------------------
/app-search-module/src/main/res/layout/pinned_apps_widget.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
21 |
22 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/values/def_pref_values.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | true
4 | true
5 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8sp
4 | 12sp
5 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/values/ints.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 5
5 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/values/pref_keys.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | pref_key_show_app_names
4 | pref_key_show_pinned_app_names
5 | pref_key_pinned_apps
6 | pref_key_pinned_apps_count
7 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/xml/search_module_preference.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/app-search-module/src/main/res/xml/widget_preference.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
--------------------------------------------------------------------------------
/app-search-module/src/test/java/kenneth/app/starlightlauncher/appsearchmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appsearchmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/app-shortcut-search-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/app-shortcut-search-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app-shortcut-search-module/consumer-rules.pro
--------------------------------------------------------------------------------
/app-shortcut-search-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/androidTest/java/kenneth/app/starlightlauncher/appshortcutsearchmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appshortcutsearchmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals(
23 | "kenneth.app.starlightlauncher.appshortcutsearchmodule.test",
24 | appContext.packageName
25 | )
26 | }
27 | }
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/main/java/kenneth/app/starlightlauncher/appshortcutsearchmodule/AppShortcut.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appshortcutsearchmodule
2 |
3 | import android.content.pm.LauncherActivityInfo
4 | import android.content.pm.ShortcutInfo
5 |
6 | data class AppShortcut(
7 | val info: ShortcutInfo,
8 |
9 | val app: LauncherActivityInfo?,
10 | )
11 |
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/main/res/layout/app_shortcut_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 32dp
4 | 16dp
5 | 12sp
6 |
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | kenneth.app.starlightlauncher.appshortcutsearchmodule
4 | App Shortcuts
5 | Searches for app shortcuts.
6 |
--------------------------------------------------------------------------------
/app-shortcut-search-module/src/test/java/kenneth/app/starlightlauncher/appshortcutsearchmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.appshortcutsearchmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/app/src/androidTest/java/kenneth/app/starlightlauncher/spotlightlauncher/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.spolightlauncher", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/Constants.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | /**
4 | * A true flag that declares something is handled. For example this can be returned
5 | * by gesture handlers.
6 | */
7 | internal const val HANDLED = true
8 |
9 | /**
10 | * A false flag that declares something is not handled. For example this can be returned
11 | * by gesture handlers.
12 | */
13 | internal const val NOT_HANDLED = false
14 |
15 | /**
16 | * Defines how long the delay between each choreographer frame should be.
17 | */
18 | internal const val ANIMATION_FRAME_DELAY = 1000 / 120L
19 |
20 | /**
21 | * How far a gesture should travel in order to activate certain actions
22 | */
23 | internal const val GESTURE_ACTION_THRESHOLD = 100
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/IntentExtras.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | const val EXTRA_GESTURE_NAV_CONTRACT_V1 = "gesture_nav_contract_v1"
4 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/InternalLauncherEvent.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | import kenneth.app.starlightlauncher.api.LauncherEvent
4 |
5 | /**
6 | * Internal launcher events emitted by [LauncherEventChannel]
7 | * that are not intended to be consumed by plugins.
8 | */
9 | internal abstract class InternalLauncherEvent : LauncherEvent()
10 |
11 | internal class NightModeChanged(val isNightModeActive: Boolean) : InternalLauncherEvent()
12 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/LauncherEventChannel.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | import kenneth.app.starlightlauncher.api.LauncherEvent
4 | import kenneth.app.starlightlauncher.api.LauncherEventListener
5 | import kenneth.app.starlightlauncher.api.util.EventChannel
6 | import kenneth.app.starlightlauncher.api.util.EventSubscriber
7 | import kotlinx.coroutines.flow.collect
8 | import kotlinx.coroutines.flow.filterNot
9 | import javax.inject.Inject
10 | import javax.inject.Singleton
11 |
12 | @Singleton
13 | class LauncherEventChannel @Inject constructor() : EventChannel() {
14 | suspend fun subscribePublic(subscriber: LauncherEventListener) =
15 | eventFlow
16 | .filterNot { it is InternalLauncherEvent }
17 | .collect { subscriber(it) }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/LauncherState.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | import javax.inject.Inject
4 | import javax.inject.Singleton
5 |
6 | /**
7 | * Holds the current state of the launcher.
8 | */
9 | @Singleton
10 | internal class LauncherState @Inject constructor() {
11 | enum class Theme {
12 | LIGHT, DARK
13 | }
14 |
15 | var screenWidth: Int = 0
16 | var screenHeight: Int = 0
17 | set(height) {
18 | field = height
19 | halfScreenHeight = height / 2
20 | }
21 |
22 | var halfScreenHeight: Int = 0
23 | private set
24 |
25 | var statusBarHeight = 0
26 |
27 | var isInWidgetEditMode = false
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/animation/TranslationYPredictiveOnBackPressedCallback.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.animation
2 |
3 | import android.os.Build
4 | import android.view.View
5 | import androidx.activity.BackEventCompat
6 | import androidx.activity.OnBackPressedCallback
7 | import androidx.annotation.RequiresApi
8 |
9 | abstract class TranslationYPredictiveOnBackPressedCallback(
10 | private val targetView: View,
11 | enabled: Boolean
12 | ) :
13 | OnBackPressedCallback(enabled) {
14 | private var beginningTranslationY = 0f
15 |
16 | @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE)
17 | override fun handleOnBackStarted(backEvent: BackEventCompat) {
18 | beginningTranslationY = targetView.translationY
19 | }
20 |
21 | override fun handleOnBackProgressed(backEvent: BackEventCompat) {
22 | targetView.translationY = beginningTranslationY + 600 * backEvent.progress
23 | }
24 |
25 | override fun handleOnBackCancelled() {
26 | targetView.translationY = beginningTranslationY
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/api/LatLong.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | import android.location.Location
4 |
5 | data class LatLong(val lat: Float, val long: Float) {
6 | constructor(location: Location) : this(
7 | location.latitude.toFloat(),
8 | location.longitude.toFloat()
9 | )
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/databinding/Adapters.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.databinding
2 |
3 | import android.graphics.Typeface
4 | import android.util.Log
5 | import android.widget.TextView
6 | import androidx.databinding.BindingAdapter
7 |
8 | @BindingAdapter("textStyle")
9 | fun setTextStyle(v: TextView, style: Int) {
10 | v.typeface = Typeface.create(v.typeface, style)
11 | }
12 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/datetime/DateTimeViewSize.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.datetime
2 |
3 | /**
4 | * Defines different sizes of [DateTimeView]
5 | */
6 | internal enum class DateTimeViewSize(
7 | /**
8 | * Size of the clock in sp.
9 | */
10 | val clockSize: Int,
11 |
12 | /**
13 | * Size of the date in sp.
14 | */
15 | val dateSize: Int,
16 | ) {
17 | GIGA_SMALL(clockSize = 16, dateSize = 8),
18 | SMALL(clockSize = 24, dateSize = 10),
19 | NORMAL(clockSize = 32, dateSize = 16),
20 | BIG(clockSize = 40, dateSize = 18),
21 | GIGA_BIG(clockSize = 48, dateSize = 24),
22 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/datetime/Defaults.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.datetime
2 |
3 | import kenneth.app.starlightlauncher.api.TemperatureUnit
4 |
5 | internal val DEFAULT_DATE_TIME_VIEW_SIZE = DateTimeViewSize.NORMAL
6 | internal val DEFAULT_WEATHER_UNIT = TemperatureUnit.CELSIUS
7 | internal const val DEFAULT_SHOW_WEATHER = false
8 | internal const val DEFAULT_USE_AUTO_LOCATION = false
9 | internal const val DEFAULT_AUTO_LOCATION_CHECK_FREQUENCY = 3600000L
10 | internal const val DEFAULT_WEATHER_CHECK_FREQUENCY = 3600000L
11 | internal const val DEFAULT_LOCATION_CHECK_FREQUENCY = 3600000L
12 | internal const val DEFAULT_USE_24HR_CLOCK = false
13 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/datetime/LocationUpdateFrequency.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.datetime
2 |
3 | /**
4 | * Defines the possible values that can be used to set
5 | * how often the device location should be requested for fetching weather.
6 | * Only applies when user enables auto weather location.
7 | *
8 | * The numbers are in milliseconds.
9 | */
10 | val LOCATION_UPDATE_FREQUENCY_VALUES = listOf(
11 | 300000L,
12 | 900000L,
13 | 1800000L,
14 | 3600000L,
15 | 7200000L,
16 | 18000000L,
17 | 43200000L,
18 | 86400000L
19 | )
20 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/datetime/WeatherUpdateFrequency.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.datetime
2 |
3 | /**
4 | * Defines the possible values that can be used to set
5 | * how often weather should be updated. The numbers are in milliseconds.
6 | */
7 | val WEATHER_UPDATE_FREQUENCY_VALUES = listOf(
8 | 300000L,
9 | 900000L,
10 | 1800000L,
11 | 3600000L,
12 | 7200000L,
13 | 18000000L,
14 | 43200000L,
15 | 86400000L
16 | )
17 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/extension/ExtensionSettings.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.extension
2 |
3 | import android.content.Intent
4 | import android.graphics.drawable.Drawable
5 |
6 | /**
7 | * Describes settings for an extension
8 | */
9 | data class ExtensionSettings(
10 | /**
11 | * The title of the settings
12 | */
13 | val title: String,
14 |
15 | /**
16 | * Description for what the settings adjust.
17 | */
18 | val description: String = "",
19 |
20 | /**
21 | * The icon for this settings
22 | */
23 | val icon: Drawable? = null,
24 |
25 | /**
26 | * An [Intent] to launch the settings activity.
27 | */
28 | val intent: Intent,
29 | )
30 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/extension/WidgetMetadata.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.extension
2 |
3 | data class WidgetMetadata(
4 | /**
5 | * A unique string to identify the extension containing the widget.
6 | * For example, the package name of the extension can be used:
7 | * `com.my.extension`
8 | */
9 | val extensionName: String,
10 |
11 | /**
12 | * A user facing name of the widget
13 | */
14 | val displayName: String,
15 |
16 | /**
17 | * A user facing description that describes what this widget does
18 | */
19 | val description: String,
20 | )
21 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/mediacontrol/NotificationListenerStub.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.mediacontrol
2 |
3 | import android.service.notification.NotificationListenerService
4 |
5 | /**
6 | * A NotificationListenerService stub is required in order to register this app
7 | * as a notification listener, which enables access to the currently playing media.
8 | *
9 | * This app does NOT monitor or track device notifications.
10 | */
11 | class NotificationListenerStub : NotificationListenerService()
12 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/prefs/RootSettingsScreenViewModel.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.prefs
2 |
3 | import androidx.compose.runtime.getValue
4 | import androidx.compose.runtime.mutableStateOf
5 | import androidx.compose.runtime.setValue
6 | import androidx.lifecycle.ViewModel
7 | import dagger.hilt.android.lifecycle.HiltViewModel
8 | import kenneth.app.starlightlauncher.extension.Extension
9 | import kenneth.app.starlightlauncher.extension.ExtensionManager
10 | import javax.inject.Inject
11 |
12 | @HiltViewModel
13 | internal class RootSettingsScreenViewModel @Inject constructor(
14 | extensionManager: ExtensionManager
15 | ) : ViewModel() {
16 | var installedExtensions by mutableStateOf>(emptyList())
17 |
18 | init {
19 | installedExtensions = extensionManager.installedExtensions.toList()
20 | }
21 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/prefs/SettingsRoutes.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.prefs
2 |
3 | const val SETTINGS_ROUTE_ROOT = "root"
4 | const val SETTINGS_ROUTE_APPEARANCE = "appearance"
5 | const val SETTINGS_ROUTE_CLOCK = "clock"
6 | const val SETTINGS_ROUTE_ICON_PACK = "appearance/icon_pack"
7 | const val SETTINGS_ROUTE_SEARCH = "search"
8 | const val SETTINGS_ROUTE_SEARCH_LAYOUT = "search/layout"
9 | const val SETTINGS_ROUTE_INFO = "info"
10 | const val SETTINGS_ROUTE_MEDIA_CONTROL = "media_control"
11 |
12 | fun baseExtensionRoute(extensionName: String) = "extension/$extensionName"
13 |
14 | fun rootExtensionRoute(extensionName: String) = "${baseExtensionRoute(extensionName)}/root"
15 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/prefs/appearance/Defaults.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.prefs.appearance
2 |
3 | const val DEFAULT_APP_DRAWER_ENABLED = true
4 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/setup/LandingFragment.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.setup
2 |
3 | import android.os.Bundle
4 | import android.view.LayoutInflater
5 | import android.view.View
6 | import android.view.ViewGroup
7 | import androidx.fragment.app.Fragment
8 | import kenneth.app.starlightlauncher.R
9 |
10 | internal class LandingFragment : Fragment() {
11 | override fun onCreateView(
12 | inflater: LayoutInflater,
13 | container: ViewGroup?,
14 | savedInstanceState: Bundle?
15 | ): View? = inflater.inflate(R.layout.fragment_landing, container)
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/setup/PrefKeys.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.setup
2 |
3 | import androidx.datastore.preferences.core.booleanPreferencesKey
4 |
5 | val PREF_SETUP_FINISHED = booleanPreferencesKey("setup_finished")
6 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/setup/SetupPagerAdapter.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.setup
2 |
3 | import androidx.fragment.app.Fragment
4 | import androidx.fragment.app.FragmentActivity
5 | import androidx.viewpager2.adapter.FragmentStateAdapter
6 |
7 | internal class SetupPagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
8 | override fun getItemCount(): Int = SETUP_STEP_COUNT
9 |
10 | override fun createFragment(position: Int): Fragment = SETUP_PAGE_CONSTRUCTORS[position]()
11 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/setup/SetupSteps.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.setup
2 |
3 | import androidx.fragment.app.Fragment
4 | import kenneth.app.starlightlauncher.setup.feature.FeatureFragment
5 | import kenneth.app.starlightlauncher.setup.permission.PermissionFragment
6 |
7 | /**
8 | * A list of fragment constructors that creates fragments for each setup step.
9 | * The list follows the order of the setup steps.
10 | */
11 | internal val SETUP_PAGE_CONSTRUCTORS = listOf<() -> Fragment>(
12 | ::LandingFragment,
13 | ::FeatureFragment,
14 | ::PermissionFragment,
15 | )
16 |
17 | /**
18 | * Total number of setup steps.
19 | */
20 | internal val SETUP_STEP_COUNT = SETUP_PAGE_CONSTRUCTORS.size
21 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/setup/permission/RequiredPermissions.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.setup.permission
2 |
3 | import android.Manifest
4 |
5 | /**
6 | * Defines manifest permissions that can be requested using system permission dialogs.
7 | */
8 | internal val REQUIRED_MANIFEST_PERMISSIONS = listOf(
9 | Manifest.permission.READ_EXTERNAL_STORAGE,
10 | )
11 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/util/EventEmitter.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.util
2 |
3 | import kotlinx.coroutines.CoroutineScope
4 | import kotlinx.coroutines.Dispatchers
5 | import kotlinx.coroutines.flow.MutableSharedFlow
6 | import kotlinx.coroutines.launch
7 |
8 | typealias EventListener = (event: TEvent) -> Unit
9 |
10 | /**
11 | * A class that can emit different events.
12 | */
13 | abstract class EventEmitter {
14 | private val eventFlow = MutableSharedFlow()
15 |
16 | private val emitCoroutineScope = CoroutineScope(Dispatchers.Default)
17 |
18 | suspend fun listen(listener: EventListener) {
19 | eventFlow.collect { listener(it) }
20 | }
21 |
22 | protected fun emit(event: TEvent) {
23 | emitCoroutineScope.launch { eventFlow.emit(event) }
24 | }
25 | }
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/util/Layout.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.util
2 |
3 | import android.content.res.Resources
4 |
5 | internal fun Int.toDp() = this / Resources.getSystem().displayMetrics.density.toInt()
6 |
7 | internal fun Int.toPx() = this * Resources.getSystem().displayMetrics.density.toInt()
8 |
--------------------------------------------------------------------------------
/app/src/main/java/kenneth/app/starlightlauncher/widgets/AddedWidget.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.widgets
2 |
3 | import android.content.ComponentName
4 | import kenneth.app.starlightlauncher.api.WidgetCreator
5 | import kenneth.app.starlightlauncher.util.ComponentNameSerializer
6 | import kotlinx.serialization.Serializable
7 | import kotlinx.serialization.Transient
8 |
9 | @Serializable
10 | internal sealed class AddedWidget(val id: Int) {
11 | @Serializable
12 | data class StarlightWidget(
13 | val internalId: Int,
14 | val extensionName: String,
15 | @Transient
16 | val widgetCreator: WidgetCreator? = null,
17 | ) : AddedWidget(internalId)
18 |
19 | @Serializable
20 | data class AndroidWidget(
21 | @Serializable(with = ComponentNameSerializer::class)
22 | val provider: ComponentName,
23 | val appWidgetId: Int,
24 | val height: Int,
25 | ) : AddedWidget(appWidgetId)
26 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/blur_view_edit_text_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bottom_option_menu_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/card_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/home_screen_background_transition.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_angle_down.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_angle_up.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_apps.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_archive.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_add_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_checkroom_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_search_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_bell.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_brackets_curly.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clock.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cloud_sun.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_comment_dots.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_draggabledots.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_exchange.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_expand_arrows.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_export.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_favorite.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_history_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_icons.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_info_circle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_key_skeleton.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_notes.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_pause.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_pen.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_play_circle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_plus.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_redo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_ruler.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_skip_forward_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_step_backward_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_swatchbook.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_times.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_times_circle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_trash_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_android_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_computer_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_gamepad_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_headset_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_mic_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_smartphone_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_twotone_speaker_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_unlock_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_vector_square.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_window_grid.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/remove_widget_btn_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 | -
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search_box_cursor.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/status_bar_shade.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/widget_resize_frame.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/widget_resize_handle.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/font-v16/manrope.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/font-v26/manrope.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/font/manrope_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/font/manrope_bold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/manrope_extrabold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/font/manrope_extrabold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/manrope_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/font/manrope_regular.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/manrope_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/font/manrope_semibold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/layout/app_list_section_grid_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/available_widgets_list_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/available_widgets_list_widget_category_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/available_widgets_list_widget_preview.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/available_widgets_list_widget_provider_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/bottom_option_menu_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/edit_mode_header.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_android_widget_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_setup_feature.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_setup_permission.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
13 |
14 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_starlight_widget_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/launcher_option_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/overlay.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/search_result_card.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/suggested_result_card.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/widget_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6200EE
4 | #0400ba
5 | #03DAC6
6 |
7 | #B794F6
8 | #0400ba
9 | #03DAC6
10 |
11 | #80000000
12 |
--------------------------------------------------------------------------------
/app/src/main/res/values/defaults.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | true
7 | false
8 | false
9 | false
10 |
11 | true
12 |
13 | 3600000
14 | CELSIUS
15 | NORMAL
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ids.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ints.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 4
4 | 0xCC
5 | 0
6 | 0
7 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/about_launcher_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/appearance_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
9 |
10 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/icon_pack_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
11 |
12 |
17 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/media_control_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/test/java/kenneth/app/starlightlauncher/spotlightlauncher/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/contact-search-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/contact-search-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/contact-search-module/consumer-rules.pro
--------------------------------------------------------------------------------
/contact-search-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/contact-search-module/src/androidTest/java/kenneth/app/starlightlauncher/contactsearchmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.contactsearchmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals(
23 | "kenneth.app.starlightlauncher.contactsearchmodule.test",
24 | appContext.packageName
25 | )
26 | }
27 | }
--------------------------------------------------------------------------------
/contact-search-module/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
6 |
--------------------------------------------------------------------------------
/contact-search-module/src/main/java/kenneth/app/starlightlauncher/contactsearchmodule/Contact.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.contactsearchmodule
2 |
3 | import android.net.Uri
4 |
5 | /**
6 | * Describes a contact stored on the phone.
7 | */
8 | data class Contact(
9 | /**
10 | * The [Uri] of this contact.
11 | */
12 | val uri: Uri,
13 |
14 | /**
15 | * The phone number of this contact. null if it doesn't exist.
16 | */
17 | val phoneNumber: String?,
18 |
19 | /**
20 | * The display name of this contact.
21 | */
22 | val displayName: String,
23 |
24 | /**
25 | * The [Uri] of the thumbnail of this contact.
26 | */
27 | val thumbnailUri: Uri?,
28 | )
--------------------------------------------------------------------------------
/contact-search-module/src/main/res/drawable/action_button_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 | -
6 |
7 |
8 |
9 |
10 |
11 |
12 | -
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/contact-search-module/src/main/res/drawable/ic_phone.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/contact-search-module/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 32dp
4 | 24dp
5 |
--------------------------------------------------------------------------------
/contact-search-module/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Contacts
4 | Searches for your contacts.
5 |
6 | Contacts
7 | Permission required
8 | Permission to read your contacts is required to provide search results for them.
9 | Grant permission
10 |
--------------------------------------------------------------------------------
/contact-search-module/src/test/java/kenneth/app/starlightlauncher/contactsearchmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.contactsearchmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/datastore-preferences/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/datastore-preferences/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/datastore-preferences/consumer-rules.pro
--------------------------------------------------------------------------------
/datastore-preferences/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/datastore-preferences/src/androidTest/java/kennethnym/datastorepreferences/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kennethnym.datastorepreferences
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kennethnym.datastorepreferences.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/datastore-preferences/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/datastore-preferences/src/main/java/kennethnym/datastorepreferences/DatastorePreferencesFragment.kt:
--------------------------------------------------------------------------------
1 | package kennethnym.datastorepreferences
2 |
3 | import android.os.Bundle
4 | import android.view.LayoutInflater
5 | import android.view.View
6 | import android.view.ViewGroup
7 | import androidx.fragment.app.Fragment
8 | import androidx.preference.PreferenceFragmentCompat
9 | import androidx.preference.SwitchPreferenceCompat
10 |
11 | abstract class DatastorePreferencesFragment : Fragment() {
12 | override fun onCreateView(
13 | inflater: LayoutInflater,
14 | container: ViewGroup?,
15 | savedInstanceState: Bundle?
16 | ): View? {
17 | return inflater.inflate(androidx.preference.R.layout.preference_recyclerview, container, false)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/datastore-preferences/src/main/res/layout/preference_recyclerview.xml:
--------------------------------------------------------------------------------
1 |
10 |
--------------------------------------------------------------------------------
/datastore-preferences/src/test/java/kennethnym/datastorepreferences/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kennethnym.datastorepreferences
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/fastlane/metadata/android/de/short_description.txt:
--------------------------------------------------------------------------------
1 | schöner, erweiterbarer Launcher, mit dem sich Dinge schneller erledigen lassen
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/10026.txt:
--------------------------------------------------------------------------------
1 | - Quick notes widget:
2 | - The add note text field is now cleared automatically when a new note is added:
3 | - All notes overlay:
4 | - Top padding no longer clips content
5 | - Add note button no longer blocks the note cards
6 | - Content will now animate with IME/keyboard to avoid the IME blocking the content
7 | - Clock:
8 | - There is now a refresh button next to the weather
9 | - Clock size can now be adjusted in settings: Settings > Clock > Clock size.
10 | There are 5 sizes to choose from: giga small, small, normal (default), big, giga big.
11 | - Search results:
12 | - Search results can now be dismissed by pressing the back button
13 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/changelogs/10033.txt:
--------------------------------------------------------------------------------
1 | This version contains significant under-the-hood changes that should hopefully make the code more in line with best practices.
2 |
3 | - A brand-new redesigned settings
4 | - A new vertical app drawer that is accessible with through new button to the left of the search box. (Can be disabled)
5 | - You can now supply your own OpenWeatherMap API key to access OpenWeatherMap API.
6 | - Many bug fixes
7 |
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/icon.png
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/phoneScreenshots/01.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/02.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/phoneScreenshots/02.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/03.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/phoneScreenshots/03.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/04.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/phoneScreenshots/04.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/05.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/phoneScreenshots/05.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/images/phoneScreenshots/06.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/fastlane/metadata/android/en-US/images/phoneScreenshots/06.jpg
--------------------------------------------------------------------------------
/fastlane/metadata/android/en-US/short_description.txt:
--------------------------------------------------------------------------------
1 | a search-focussed, extensible launcher that helps you get things done faster
--------------------------------------------------------------------------------
/file-search-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/file-search-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/file-search-module/consumer-rules.pro
--------------------------------------------------------------------------------
/file-search-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/file-search-module/src/androidTest/java/kenneth/app/starlightlauncher/filesearchmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals(
23 | "kenneth.app.starlightlauncher.filesearchmodule.test",
24 | appContext.packageName
25 | )
26 | }
27 | }
--------------------------------------------------------------------------------
/file-search-module/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/file-search-module/src/main/java/kenneth/app/starlightlauncher/filesearchmodule/DocumentProviderName.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule
2 |
3 | import android.net.Uri
4 | import androidx.annotation.StringRes
5 |
6 | enum class DocumentProviderName(
7 | val authority: String,
8 | @StringRes val displayName: Int
9 | ) {
10 | DOWNLOADS("com.android.providers.downloads.documents", R.string.document_provider_downloads),
11 | EXTERNAL(
12 | "com.android.externalstorage.documents",
13 | R.string.document_provider_external_storage
14 | ), ;
15 |
16 | companion object {
17 | private val values =
18 | DocumentProviderName.values().associateBy(DocumentProviderName::authority)
19 |
20 | fun fromUri(uri: Uri) = values[uri.authority]
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/file-search-module/src/main/java/kenneth/app/starlightlauncher/filesearchmodule/FileSearchModuleSettingsProvider.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule
2 |
3 | import android.content.Context
4 | import androidx.compose.runtime.Composable
5 | import kenneth.app.starlightlauncher.api.ExtensionSettingsProvider
6 | import kenneth.app.starlightlauncher.filesearchmodule.settings.MainSettingsScreen
7 |
8 | class FileSearchModuleSettingsProvider(context: Context) : ExtensionSettingsProvider {
9 | override val settingsTitle =
10 | context.getString(R.string.file_search_module_search_module_settings_title)
11 |
12 | override val settingsSummary =
13 | context.getString(R.string.file_search_module_search_module_settings_description)
14 |
15 | override val settingsIconRes = R.drawable.ic_file_search_alt
16 |
17 | override val settingsRoutes: Map Unit> = mapOf(
18 | "root" to { MainSettingsScreen() }
19 | )
20 | }
--------------------------------------------------------------------------------
/file-search-module/src/main/java/kenneth/app/starlightlauncher/filesearchmodule/MainApplication.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule
2 |
3 | import android.app.Application
4 |
5 | class MainApplication : Application()
--------------------------------------------------------------------------------
/file-search-module/src/main/java/kenneth/app/starlightlauncher/filesearchmodule/activity/MainActivity.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule.activity
2 |
3 | import androidx.appcompat.app.AppCompatActivity
4 |
5 | class MainActivity : AppCompatActivity()
--------------------------------------------------------------------------------
/file-search-module/src/main/java/kenneth/app/starlightlauncher/filesearchmodule/settings/PrefKeys.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule.settings
2 |
3 | import androidx.datastore.preferences.core.stringSetPreferencesKey
4 |
5 | val PREF_KEY_INCLUDED_SEARCH_PATHS = stringSetPreferencesKey("pref_key_included_paths")
6 |
--------------------------------------------------------------------------------
/file-search-module/src/main/res/drawable/ic_plus.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/file-search-module/src/main/res/layout/file_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
9 |
10 |
11 |
17 |
18 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/file-search-module/src/main/res/values/pref_keys.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | pref_key_included_paths
4 | pref_key_category_included_paths
5 | pref_key_add_path
6 |
--------------------------------------------------------------------------------
/file-search-module/src/test/java/kenneth/app/starlightlauncher/filesearchmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.filesearchmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Nov 10 17:21:12 GMT 2020
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.0-bin.zip
7 |
--------------------------------------------------------------------------------
/images/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/logo.png
--------------------------------------------------------------------------------
/images/main-screen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/main-screen.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-1.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-2.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-3.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-4.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-5.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-6.png
--------------------------------------------------------------------------------
/images/screenshots/screenshot-7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/images/screenshots/screenshot-7.png
--------------------------------------------------------------------------------
/math-search-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/math-search-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/math-search-module/consumer-rules.pro
--------------------------------------------------------------------------------
/math-search-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/math-search-module/src/androidTest/java/kenneth/app/starlightlauncher/mathsearchmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.mathsearchmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.mathsearchmodule.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/math-search-module/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/math-search-module/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | kenneth.app.starlightlauncher.mathsearchmodule
4 | Simple Math
5 | Calculates simple math expressions.
6 |
7 | %s =
8 |
--------------------------------------------------------------------------------
/math-search-module/src/test/java/kenneth/app/starlightlauncher/mathsearchmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.mathsearchmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/notes-widget/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/notes-widget/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/notes-widget/consumer-rules.pro
--------------------------------------------------------------------------------
/notes-widget/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/notes-widget/src/androidTest/java/kenneth/app/starlightlauncher/noteswidget/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.noteswidget.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/notes-widget/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/notes-widget/src/main/java/kenneth/app/starlightlauncher/noteswidget/Note.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget
2 |
3 | import kenneth.app.starlightlauncher.noteswidget.util.LocalDateTimeSerializer
4 | import java.time.LocalDateTime
5 | import java.util.*
6 | import kotlinx.serialization.Serializable
7 | import java.time.ZoneId
8 |
9 | /**
10 | * Represents a note created by the user.
11 | */
12 | @Serializable
13 | data class Note(
14 | val content: String = "",
15 |
16 | val id: String = UUID.randomUUID().toString(),
17 |
18 | @Serializable(with = LocalDateTimeSerializer::class)
19 | val dueOn: LocalDateTime? = null,
20 |
21 | @Serializable(with = LocalDateTimeSerializer::class)
22 | val createdOn: LocalDateTime = LocalDateTime.now(),
23 | )
--------------------------------------------------------------------------------
/notes-widget/src/main/java/kenneth/app/starlightlauncher/noteswidget/NotesWidgetSettingsProvider.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget
2 |
3 | import android.content.Context
4 | import androidx.compose.runtime.Composable
5 | import kenneth.app.starlightlauncher.api.ExtensionSettingsProvider
6 | import kenneth.app.starlightlauncher.noteswidget.settings.MainSettingsScreen
7 |
8 | class NotesWidgetSettingsProvider(context: Context) : ExtensionSettingsProvider {
9 | override val settingsTitle = context.getString(R.string.notes_widget_settings_title)
10 |
11 | override val settingsSummary = context.getString(R.string.notes_widget_settings_description)
12 |
13 | override val settingsIconRes = R.drawable.ic_notes
14 |
15 | override val settingsRoutes: Map Unit> = mapOf(
16 | "root" to { MainSettingsScreen() }
17 | )
18 | }
19 |
--------------------------------------------------------------------------------
/notes-widget/src/main/java/kenneth/app/starlightlauncher/noteswidget/PrefKeys.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget
2 |
3 | import androidx.datastore.preferences.core.stringPreferencesKey
4 |
5 | val PREF_KEY_NOTE_LIST = stringPreferencesKey("pref_key_note_list")
6 |
--------------------------------------------------------------------------------
/notes-widget/src/main/java/kenneth/app/starlightlauncher/noteswidget/util/NotesBackup.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget.util
2 |
3 | import android.content.Context
4 | import android.net.Uri
5 |
6 | fun readBackupFile(uri: Uri, context: Context): String? =
7 | context.contentResolver.openInputStream(uri)
8 | ?.bufferedReader()
9 | ?.use { it.readText() }
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/java/kenneth/app/starlightlauncher/noteswidget/view/NoteListDiffCallback.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget.view
2 |
3 | import androidx.recyclerview.widget.DiffUtil
4 | import kenneth.app.starlightlauncher.noteswidget.Note
5 |
6 | internal class NoteListDiffCallback(
7 | private val oldList: List,
8 | private val newList: List
9 | ) :
10 | DiffUtil.Callback() {
11 | override fun getOldListSize(): Int = oldList.size
12 |
13 | override fun getNewListSize(): Int = newList.size
14 |
15 | override fun areItemsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
16 | oldList[oldItemPosition].id == newList[newItemPosition].id
17 |
18 | override fun areContentsTheSame(oldItemPosition: Int, newItemPosition: Int): Boolean =
19 | oldList[oldItemPosition] == newList[newItemPosition]
20 | }
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/all_notes_add_note_btn_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_archive.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_bell.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_export.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_history_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_notes.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_pen.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_plus.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_times.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/ic_trash_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/note_card_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/drawable/notes_widget_settings_icon.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/layout/quick_note_list_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
14 |
15 |
18 |
19 |
24 |
25 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 8dp
4 | 16dp
5 | 16dp
6 | 88dp
7 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/values/pref_keys.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | pref_key_note_list
4 | pref_key_export_to_json
5 | pref_key_restore_from_backup
6 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
15 |
16 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/notes-widget/src/main/res/xml/notes_widget_root_preferences.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
11 |
12 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/notes-widget/src/test/java/kenneth/app/starlightlauncher/noteswidget/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.noteswidget
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/privacy-policy.md:
--------------------------------------------------------------------------------
1 | # Collection of Personal Information
2 |
3 | The app does not collect, transmit or share any information, personal or otherwise.
4 |
--------------------------------------------------------------------------------
/release_notes.txt:
--------------------------------------------------------------------------------
1 | # Version 1.0.0-beta.7
2 |
3 | This version contains significant under-the-hood changes that should hopefully make the code more in line with best practices.
4 |
5 | - A brand-new redesigned settings
6 | - A new vertical app drawer that is accessible with through new button to the left of the search box. (Can be disabled)
7 | - You can now supply your own OpenWeatherMap API key to access OpenWeatherMap API.
8 | - Many bug fixes
9 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | rootProject.name = "StarlightLauncher"
3 | include ':starlight-launcher-api'
4 | include ':app-search-module'
5 | include ':file-search-module'
6 | include ':notes-widget'
7 | include ':unit-converter-widget'
8 | include ':math-search-module'
9 | include ':wifi-control-module'
10 | include ':app-shortcut-search-module'
11 | include ':url-opener'
12 | include ':contact-search-module'
13 | include ':datastore-preferences'
14 |
--------------------------------------------------------------------------------
/starlight-launcher-api/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/starlight-launcher-api/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/consumer-rules.pro
--------------------------------------------------------------------------------
/starlight-launcher-api/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/starlight-launcher-api/src/androidTest/java/kenneth/app/starlightlauncher/api/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.api.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/AppManager.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | import android.content.ComponentName
4 | import android.content.pm.LauncherActivityInfo
5 |
6 | interface AppManager {
7 | fun launcherActivityInfoOf(componentName: ComponentName): LauncherActivityInfo
8 | }
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/ExtensionSettingsProvider.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | import androidx.compose.runtime.Composable
4 |
5 | interface ExtensionSettingsProvider {
6 | val settingsTitle: String
7 | val settingsSummary: String
8 | val settingsIconRes: Int
9 | val settingsRoutes: Map Unit>
10 | }
11 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/LauncherEvent.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | import android.content.pm.LauncherActivityInfo
4 |
5 | /**
6 | * Defines different types of events emitted by Starlight Launcher.
7 | *
8 | * Use [StarlightLauncherApi.addLauncherEventListener] to subscribe to the events.
9 | */
10 | abstract class LauncherEvent {
11 | /**
12 | * Emitted when user has changed the icon pack.
13 | */
14 | object IconPackChanged : LauncherEvent()
15 |
16 | data class NewAppsInstalled(val apps: List) : LauncherEvent()
17 |
18 | data class AppRemoved(val packageName: String) : LauncherEvent()
19 |
20 | data class AppsChanged(val apps: List) : LauncherEvent()
21 | }
22 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/SearchResult.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | /**
4 | * Defines a search result produced by a [SearchModule] given a [query].
5 | */
6 | abstract class SearchResult(
7 | /**
8 | * The search query that produced this [SearchResult]
9 | */
10 | val query: String,
11 |
12 | /**
13 | * The name of the extension containing the search module
14 | * that produced this [SearchResult]
15 | */
16 | val extensionName: String,
17 | ) {
18 | /**
19 | * Defines an empty search result. Use this when your [SearchModule] cannot provide
20 | * any search result for the given [query].
21 | */
22 | class None(query: String, extensionName: String) : SearchResult(query, extensionName)
23 | }
24 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/compose/LocalDataStore.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.compose
2 |
3 | import androidx.compose.runtime.staticCompositionLocalOf
4 | import androidx.datastore.core.DataStore
5 | import androidx.datastore.preferences.core.Preferences
6 |
7 | val LocalDataStore = staticCompositionLocalOf> {
8 | error("No datastore instance provided")
9 | }
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/compose/pref/SettingList.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.compose.pref
2 |
3 | import androidx.compose.foundation.layout.Arrangement
4 | import androidx.compose.foundation.layout.Column
5 | import androidx.compose.runtime.Composable
6 | import androidx.compose.ui.unit.dp
7 |
8 | @Composable
9 | fun SettingsList(content: @Composable () -> Unit) {
10 | Column(verticalArrangement = Arrangement.spacedBy(16.dp)) {
11 | content()
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/compose/pref/SettingsSection.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.compose.pref
2 |
3 | import androidx.compose.foundation.layout.Arrangement
4 | import androidx.compose.foundation.layout.Column
5 | import androidx.compose.material3.MaterialTheme
6 | import androidx.compose.material3.Text
7 | import androidx.compose.runtime.Composable
8 | import androidx.compose.ui.Alignment
9 | import androidx.compose.ui.unit.dp
10 |
11 | @Composable
12 | fun SettingsSection(title: String, content: @Composable () -> Unit) {
13 | Column(
14 | horizontalAlignment = Alignment.Start,
15 | verticalArrangement = Arrangement.spacedBy(16.dp)
16 | ) {
17 | Text(
18 | title,
19 | style = MaterialTheme.typography.labelMedium,
20 | color = MaterialTheme.colorScheme.primary
21 | )
22 | content()
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/intent/StarlightLauncherIntent.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.intent
2 |
3 | object StarlightLauncherIntent {
4 | const val CATEGORY_EXTENSION = "kenneth.app.starlightlauncher.intent.category.EXTENSION"
5 | const val CATEGORY_SEARCH_MODULE_SETTINGS =
6 | "kenneth.app.starlightlauncher.intent.category.SEARCH_MODULE_SETTINGS"
7 | const val CATEGORY_WIDGET_SETTINGS =
8 | "kenneth.app.starlightlauncher.intent.category.WIDGET_SETTINGS"
9 | const val CATEGORY_WIDGET = "kenneth.app.starlightlauncher.intent.category.CATEGORY_WIDGET"
10 | }
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/preference/PreferenceCategoryWithSummary.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.preference
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 | import android.widget.TextView
6 | import androidx.preference.PreferenceCategory
7 | import androidx.preference.PreferenceViewHolder
8 |
9 | /**
10 | * A PreferenceCategory that shows the given summary under the title.
11 | */
12 | class PreferenceCategoryWithSummary(context: Context, attrs: AttributeSet?) :
13 | PreferenceCategory(context, attrs) {
14 | override fun onBindViewHolder(holder: PreferenceViewHolder) {
15 | super.onBindViewHolder(holder)
16 |
17 | (holder.findViewById(android.R.id.summary) as TextView).apply {
18 | isSingleLine = false
19 | maxLines = 10
20 | }
21 | }
22 | }
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/res/StarlightLauncherStringRes.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.res
2 |
3 | /**
4 | * Reserved string resource names used by Starlight Launcher.
5 | * Strings with these names declared in strings.xml of an extension
6 | * will be recognized by Starlight Launcher.
7 | */
8 | object StarlightLauncherStringRes {
9 | const val SEARCH_MODULE_NAME = "search_module_name"
10 | const val WIDGET_NAME = "widget_name"
11 | const val SEARCH_MODULE_SETTINGS_TITLE = "search_module_settings_title"
12 | const val SEARCH_MODULE_SETTINGS_DESCRIPTION = "search_module_settings_description"
13 | }
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/util/BlurHandler.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.util
2 |
3 | import android.widget.ImageView
4 | import kenneth.app.starlightlauncher.api.view.Plate
5 |
6 | interface BlurHandler {
7 | val isBlurEffectEnabled: Boolean
8 |
9 | fun registerPlate(plate: Plate)
10 |
11 | fun unregisterPlate(plate: Plate)
12 |
13 | fun blurView(dest: ImageView)
14 | }
15 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/util/Insets.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.util
2 |
3 | import android.os.Build
4 | import androidx.annotation.RequiresApi
5 |
6 | /**
7 | * Cross-version compatible version of [android.graphics.Insets]
8 | */
9 | data class Insets(
10 | val top: Int = 0,
11 | val bottom: Int = 0,
12 | val left: Int = 0,
13 | val right: Int = 0,
14 | ) {
15 | @RequiresApi(Build.VERSION_CODES.Q)
16 | constructor(inset: android.graphics.Insets) : this(
17 | inset.top,
18 | inset.bottom,
19 | inset.left,
20 | inset.right
21 | )
22 | }
23 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/util/Swap.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.util
2 |
3 | fun MutableList.swap(fromIndex: Int, toIndex: Int) {
4 | with(this[fromIndex]) {
5 | this@swap[fromIndex] = this@swap[toIndex]
6 | this@swap[toIndex] = this
7 | }
8 | }
9 |
10 | fun MutableMap.swap(fromKey: K, toKey: K) {
11 | with(this[fromKey]) {
12 | this@swap[fromKey] = this@swap[toKey]!!
13 | this@swap[toKey] = this!!
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/util/ViewExt.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.util
2 |
3 | import android.content.ContextWrapper
4 | import android.view.View
5 | import androidx.appcompat.app.AppCompatActivity
6 |
7 | /**
8 | * Retrieves the activity that the current view is attached to.
9 | */
10 | val View.activity: AppCompatActivity?
11 | get() {
12 | var ctx = context
13 | while (ctx is ContextWrapper) {
14 | if (ctx is AppCompatActivity) return ctx
15 | ctx = (context as ContextWrapper).baseContext
16 | }
17 | return null
18 | }
19 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/java/kenneth/app/starlightlauncher/api/util/dp.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api.util
2 |
3 | import android.content.res.Resources
4 |
5 | val Int.dp
6 | get() = this * Resources.getSystem().displayMetrics.density.toInt()
7 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/color/text_button_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/color/text_button_color_on_plate.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/color/text_button_color_primary.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/edit_text_on_plate_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/ic_angle_down.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/ic_angle_up.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/ic_exclamation_triangle.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/ic_favorite.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/ic_trash_alt.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/option_menu_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/drawable/plate_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/font/manrope.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
12 |
13 |
17 |
18 |
22 |
23 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/font/manrope_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/font/manrope_bold.ttf
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/font/manrope_extrabold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/font/manrope_extrabold.ttf
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/font/manrope_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/font/manrope_regular.ttf
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/font/manrope_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/font/manrope_semibold.ttf
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/layout/option_menu_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
11 |
12 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/layout/search_result_card_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
17 |
18 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-hdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-mdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/starlight-launcher-api/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/values-night/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #6200EE
5 | #0400ba
6 | #03DAC6
7 |
8 | #B794F6
9 | #0400ba
10 | #03DAC6
11 |
12 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 16dp
5 | 16dp
6 |
7 | 24dp
8 | 24dp
9 |
10 | 24dp
11 |
12 | 24dp
13 | 16dp
14 |
15 | 8dp
16 |
17 | 24dp
18 |
19 | 48dp
20 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/values/pref_keys.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | appearance_blur_effect_enabled
4 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | OK
4 |
5 | App icon of %1$s
6 | Pin this app
7 | Unpin this app
8 | Uninstall
9 |
10 | Settings
11 | %1$s selected
12 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
9 |
10 |
--------------------------------------------------------------------------------
/starlight-launcher-api/src/test/java/kenneth/app/starlightlauncher/api/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.api
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/unit-converter-widget/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/unit-converter-widget/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/unit-converter-widget/consumer-rules.pro
--------------------------------------------------------------------------------
/unit-converter-widget/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/unit-converter-widget/src/androidTest/java/kenneth/app/starlightlauncher/unitconverterwidget/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.unitconverterwidget
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals(
23 | "kenneth.app.starlightlauncher.unitconverterwidget.test",
24 | appContext.packageName
25 | )
26 | }
27 | }
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/java/kenneth/app/starlightlauncher/unitconverterwidget/Measurement.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.unitconverterwidget
2 |
3 | /**
4 | * Describes the value and the unit of a measurement.
5 | */
6 | data class Measurement(
7 | val value: Double,
8 | val unit: MeasurementUnit,
9 | ) {
10 | /**
11 | * Converts this [Measurement] to another [Measurement] in the given unit.
12 | *
13 | * @param newUnit The [MeasurementUnit] the new [Measurement] should be in.
14 | * @return The new [Measurement] in the new unit, or null if the conversion is unsupported.
15 | */
16 | fun convertTo(newUnit: MeasurementUnit) =
17 | conversionFactors[unit]?.get(newUnit)?.let { factor ->
18 | Measurement(
19 | value = value * factor,
20 | unit = newUnit,
21 | )
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/java/kenneth/app/starlightlauncher/unitconverterwidget/MeasurementType.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.unitconverterwidget
2 |
3 | /**
4 | * Supported measurements that [UnitConverterWidget] can provide conversions for.
5 | */
6 | enum class MeasurementType(
7 | val id: Int,
8 | val label: String
9 | ) {
10 | LENGTH(0, "Length"),
11 | WEIGHT(1, "Weight");
12 |
13 | companion object {
14 | fun fromId(id: Int) = values().first { it.id == id }
15 | }
16 | }
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/res/drawable/ic_angle_down.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/res/drawable/ic_check.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 24sp
4 | 8dp
5 | 8dp
6 | 16dp
7 | 24dp
8 |
--------------------------------------------------------------------------------
/unit-converter-widget/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Unit converter
4 | A convenient unit converter on your home screen.
5 |
6 | Measurement:
7 |
--------------------------------------------------------------------------------
/unit-converter-widget/src/test/java/kenneth/app/starlightlauncher/unitconverterwidget/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.unitconverterwidget
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/url-opener/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/url-opener/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/url-opener/consumer-rules.pro
--------------------------------------------------------------------------------
/url-opener/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/url-opener/src/androidTest/java/kenneth/app/starlightlauncher/urlopener/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.urlopener
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.urlopener.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/url-opener/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/url-opener/src/main/res/drawable/ic_angle_right_b.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/url-opener/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | URL Opener
4 | Opens URLs in your browser.
5 |
6 | Open URL in browser
7 |
--------------------------------------------------------------------------------
/url-opener/src/test/java/kenneth/app/starlightlauncher/urlopener/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.urlopener
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/web-search-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/web-search-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/web-search-module/consumer-rules.pro
--------------------------------------------------------------------------------
/web-search-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/web-search-module/src/androidTest/java/kenneth/app/starlightlauncher/websearchmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.websearchmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.websearchmodule.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/web-search-module/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/web-search-module/src/main/res/drawable/ic_baseline_search_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/web-search-module/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Web Search
4 | Searches in your browser.
5 |
6 | Web Search
7 |
--------------------------------------------------------------------------------
/web-search-module/src/test/java/kenneth/app/starlightlauncher/websearchmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.websearchmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/wifi-control-module/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/wifi-control-module/consumer-rules.pro:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/kennethnym/StarlightLauncher/817b7666d2697c8682e9e03c4486e830a1137440/wifi-control-module/consumer-rules.pro
--------------------------------------------------------------------------------
/wifi-control-module/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/wifi-control-module/src/androidTest/java/kenneth/app/starlightlauncher/wificontrolmodule/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.wificontrolmodule
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("kenneth.app.starlightlauncher.wificontrolmodule.test", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/wifi-control-module/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/wifi-control-module/src/main/res/drawable/require_location_perm_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/wifi-control-module/src/test/java/kenneth/app/starlightlauncher/wificontrolmodule/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package kenneth.app.starlightlauncher.wificontrolmodule
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------