├── .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 | 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 | 7 | -------------------------------------------------------------------------------- /.idea/google-java-format.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/jsonSchemas.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /.idea/kotlinc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | -------------------------------------------------------------------------------- /.idea/migrations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 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 | } --------------------------------------------------------------------------------