From fac8d4c4b143f37d3f37ae60bbbc6431d1195555 Mon Sep 17 00:00:00 2001 From: Donnnno <31142286+Donnnno@users.noreply.github.com> Date: Mon, 14 Mar 2022 10:42:35 +0100 Subject: [PATCH 1/3] Candybar-FOSS + Adaptive icon - moved library to Candybar-FOSS, making it easier to update in the future - adaptive icon --- README.md | 2 +- app/build.gradle | 19 +- app/src/main/ic_launcher-playstore.png | Bin 27819 -> 19284 bytes .../res/drawable-nodpi/ic_splash_screen.png | Bin 0 -> 6713 bytes .../res/drawable/ic_launcher_foreground.xml | 238 +---- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 + .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2446 -> 1427 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 0 -> 1827 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 3314 -> 3038 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 1944 -> 1061 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 0 -> 1020 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2623 -> 1934 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 3115 -> 2017 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 0 -> 2773 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 4287 -> 4213 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 4414 -> 3525 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 0 -> 5055 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 6000 -> 7328 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 6306 -> 5140 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 0 -> 7588 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 8491 -> 10743 bytes .../res/values/ic_launcher_background.xml | 2 +- build.gradle | 2 +- libs/.gitignore | 165 --- libs/CHANGELOG.md | 217 ---- libs/LICENSE | 201 ---- libs/README.md | 107 -- libs/build.gradle | 36 - libs/candybar/build.gradle | 114 --- libs/candybar/src/main/AndroidManifest.xml | 72 -- .../lib/activities/CandyBarCrashReport.java | 103 -- .../lib/activities/CandyBarMainActivity.java | 760 -------------- .../activities/CandyBarSplashActivity.java | 188 ---- .../activities/CandyBarWallpaperActivity.java | 509 --------- .../candybar/lib/adapters/AboutAdapter.java | 444 -------- .../lib/adapters/AboutSocialAdapter.java | 125 --- .../candybar/lib/adapters/FAQsAdapter.java | 145 --- .../candybar/lib/adapters/HomeAdapter.java | 964 ------------------ .../candybar/lib/adapters/IconsAdapter.java | 373 ------- .../lib/adapters/LauncherAdapter.java | 169 --- .../candybar/lib/adapters/PresetsAdapter.java | 314 ------ .../candybar/lib/adapters/RequestAdapter.java | 533 ---------- .../lib/adapters/SettingsAdapter.java | 270 ----- .../lib/adapters/WallpapersAdapter.java | 256 ----- .../lib/adapters/dialog/ChangelogAdapter.java | 90 -- .../lib/adapters/dialog/CreditsAdapter.java | 143 --- .../lib/adapters/dialog/IconShapeAdapter.java | 116 --- .../adapters/dialog/InAppBillingAdapter.java | 93 -- .../lib/adapters/dialog/IntentAdapter.java | 179 ---- .../lib/adapters/dialog/LanguagesAdapter.java | 107 -- .../lib/adapters/dialog/OtherAppsAdapter.java | 133 --- .../lib/adapters/dialog/ThemeAdapter.java | 116 --- .../lib/applications/CandyBarApplication.java | 533 ---------- .../java/candybar/lib/databases/Database.java | 656 ------------ .../candybar/lib/fragments/AboutFragment.java | 98 -- .../candybar/lib/fragments/ApplyFragment.java | 233 ----- .../candybar/lib/fragments/FAQsFragment.java | 221 ---- .../candybar/lib/fragments/HomeFragment.java | 205 ---- .../lib/fragments/IconsBaseFragment.java | 333 ------ .../candybar/lib/fragments/IconsFragment.java | 161 --- .../lib/fragments/IconsSearchFragment.java | 269 ----- .../lib/fragments/PresetsFragment.java | 214 ---- .../lib/fragments/RequestFragment.java | 617 ----------- .../lib/fragments/SettingsFragment.java | 311 ------ .../lib/fragments/WallpapersFragment.java | 305 ------ .../fragments/dialog/ChangelogFragment.java | 113 -- .../lib/fragments/dialog/CreditsFragment.java | 195 ---- .../dialog/DonationLinksFragment.java | 65 -- .../fragments/dialog/IconPreviewFragment.java | 178 ---- .../dialog/IconShapeChooserFragment.java | 112 -- .../dialog/IntentChooserFragment.java | 248 ----- .../fragments/dialog/LanguagesFragment.java | 155 --- .../fragments/dialog/OtherAppsFragment.java | 83 -- .../dialog/ThemeChooserFragment.java | 99 -- .../lib/helpers/ConfigurationHelper.java | 59 -- .../candybar/lib/helpers/ContextHelper.java | 37 - .../candybar/lib/helpers/DeviceHelper.java | 72 -- .../candybar/lib/helpers/DrawableHelper.java | 114 --- .../candybar/lib/helpers/IconShapeHelper.java | 20 - .../candybar/lib/helpers/IconsHelper.java | 285 ------ .../candybar/lib/helpers/IntentHelper.java | 65 -- .../java/candybar/lib/helpers/JsonHelper.java | 97 -- .../candybar/lib/helpers/LauncherHelper.java | 620 ----------- .../candybar/lib/helpers/LocaleHelper.java | 123 --- .../candybar/lib/helpers/MuzeiHelper.java | 86 -- .../lib/helpers/NavigationViewHelper.java | 70 -- .../lib/helpers/PlayStoreCheckHelper.java | 46 - .../candybar/lib/helpers/PresetsHelper.java | 24 - .../lib/helpers/ReportBugsHelper.java | 233 ----- .../candybar/lib/helpers/RequestHelper.java | 568 ----------- .../candybar/lib/helpers/TapIntroHelper.java | 553 ---------- .../candybar/lib/helpers/ThemeHelper.java | 36 - .../candybar/lib/helpers/TypefaceHelper.java | 46 - .../java/candybar/lib/helpers/UrlHelper.java | 106 -- .../java/candybar/lib/helpers/ViewHelper.java | 69 -- .../candybar/lib/helpers/WallpaperHelper.java | 116 --- .../main/java/candybar/lib/items/Credit.java | 50 - .../main/java/candybar/lib/items/FAQs.java | 39 - .../main/java/candybar/lib/items/Home.java | 103 -- .../main/java/candybar/lib/items/Icon.java | 106 -- .../java/candybar/lib/items/IconShape.java | 38 - .../java/candybar/lib/items/ImageSize.java | 11 - .../java/candybar/lib/items/InAppBilling.java | 26 - .../candybar/lib/items/IntentChooser.java | 45 - .../java/candybar/lib/items/Language.java | 40 - .../java/candybar/lib/items/PopupItem.java | 141 --- .../main/java/candybar/lib/items/Preset.java | 37 - .../main/java/candybar/lib/items/Request.java | 189 ---- .../main/java/candybar/lib/items/Setting.java | 84 -- .../main/java/candybar/lib/items/Theme.java | 23 - .../java/candybar/lib/items/Wallpaper.java | 171 ---- .../candybar/lib/preferences/Preferences.java | 385 ------- .../lib/services/CandyBarArtWorker.java | 96 -- .../lib/services/CandyBarMuzeiService.java | 32 - .../lib/services/CandyBarService.java | 46 - .../lib/services/CandyBarWidgetService.java | 30 - .../lib/tasks/IconRequestBuilderTask.java | 235 ----- .../candybar/lib/tasks/IconRequestTask.java | 149 --- .../candybar/lib/tasks/IconsLoaderTask.java | 143 --- .../lib/tasks/PremiumRequestBuilderTask.java | 190 ---- .../candybar/lib/tasks/ReportBugsTask.java | 148 --- .../lib/tasks/WallpaperApplyTask.java | 384 ------- .../tasks/WallpaperPropertiesLoaderTask.java | 127 --- .../lib/utils/AlphanumComparator.java | 120 --- .../candybar/lib/utils/AsyncTaskBase.java | 65 -- .../lib/utils/CandyBarGlideModule.java | 19 - .../candybar/lib/utils/CommonDataFetcher.java | 121 --- .../candybar/lib/utils/CommonModelLoader.java | 28 - .../lib/utils/CommonModelLoaderFactory.java | 28 - .../main/java/candybar/lib/utils/Extras.java | 84 -- .../java/candybar/lib/utils/ImageConfig.java | 29 - .../candybar/lib/utils/JsonStructure.java | 90 -- .../main/java/candybar/lib/utils/Popup.java | 275 ----- .../lib/utils/WallpaperDownloader.java | 156 --- .../lib/utils/listeners/HomeListener.java | 30 - .../lib/utils/listeners/RequestListener.java | 28 - .../lib/utils/listeners/SearchListener.java | 25 - .../utils/listeners/WallpapersListener.java | 25 - .../candybar/lib/utils/views/HeaderView.java | 59 -- .../src/main/res/animator/card_lift.xml | 23 - .../color/navigation_view_item_highlight.xml | 5 - .../navigation_view_item_highlight_dark.xml | 5 - libs/candybar/src/main/res/color/tab_icon.xml | 5 - .../src/main/res/drawable-nodpi/clock_bg.png | Bin 5899 -> 0 bytes .../main/res/drawable-nodpi/clock_hour.png | Bin 2110 -> 0 bytes .../main/res/drawable-nodpi/clock_minute.png | Bin 2141 -> 0 bytes .../res/drawable-nodpi/ic_app_default.png | Bin 2854 -> 0 bytes .../res/drawable-nodpi/ic_splash_screen.png | Bin 7262 -> 0 bytes .../res/drawable-v21/drawer_bg_selector.xml | 16 - .../drawer_bg_selector_selected.xml | 16 - .../navigation_view_item_background.xml | 5 - .../navigation_view_item_background_dark.xml | 5 - .../res/drawable-xxxhdpi/ic_drawer_about.png | Bin 1676 -> 0 bytes .../res/drawable-xxxhdpi/ic_drawer_apply.png | Bin 639 -> 0 bytes .../res/drawable-xxxhdpi/ic_drawer_faqs.png | Bin 1956 -> 0 bytes .../res/drawable-xxxhdpi/ic_drawer_home.png | Bin 686 -> 0 bytes .../res/drawable-xxxhdpi/ic_drawer_icons.png | Bin 1273 -> 0 bytes .../drawable-xxxhdpi/ic_drawer_presets.png | Bin 1091 -> 0 bytes .../drawable-xxxhdpi/ic_drawer_request.png | Bin 496 -> 0 bytes .../drawable-xxxhdpi/ic_drawer_settings.png | Bin 2147 -> 0 bytes .../drawable-xxxhdpi/ic_drawer_wallpapers.png | Bin 725 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_abc.png | Bin 4027 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_action.png | Bin 20753 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_adw.png | Bin 3438 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_apex.png | Bin 2446 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_atom.png | Bin 5112 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_aviate.png | Bin 1298 -> 0 bytes .../ic_launcher_blackberry.png | Bin 51575 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_cm.png | Bin 3335 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_evie.png | Bin 2670 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_flick.png | Bin 2610 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_go.png | Bin 5547 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_holo.png | Bin 648 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_holohd.png | Bin 548 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_hyperion.png | Bin 44708 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_kiss.png | Bin 12048 -> 0 bytes .../ic_launcher_lawnchair.png | Bin 42231 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_lg.png | Bin 1950 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_lucid.png | Bin 2011 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_m.png | Bin 1533 -> 0 bytes .../ic_launcher_microsoft.png | Bin 6746 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_mini.png | Bin 3652 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_next.png | Bin 3396 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_niagara.png | Bin 71244 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_nougat.png | Bin 2318 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_nova.png | Bin 5792 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_omega.png | Bin 8319 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_pixel.png | Bin 9914 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_poco.png | Bin 15705 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_posidon.png | Bin 12262 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_smart.png | Bin 3423 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_solo.png | Bin 5617 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_square.png | Bin 1924 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_v.png | Bin 2901 -> 0 bytes .../drawable-xxxhdpi/ic_launcher_zenui.png | Bin 2228 -> 0 bytes .../res/drawable-xxxhdpi/ic_launcher_zero.png | Bin 3174 -> 0 bytes .../src/main/res/drawable/colored_cursor.xml | 5 - .../src/main/res/drawable/drawer_shadow.xml | 10 - .../main/res/drawable/ic_arrow_forward.xml | 11 - .../src/main/res/drawable/ic_bookmark.xml | 10 - .../main/res/drawable/ic_bookmark_filled.xml | 10 - .../src/main/res/drawable/ic_bookmarks.xml | 10 - .../main/res/drawable/ic_changelog_dot.xml | 9 - .../src/main/res/drawable/ic_check_circle.xml | 10 - .../src/main/res/drawable/ic_fab_send.xml | 12 - .../res/drawable/ic_google_play_more_apps.xml | 12 - .../main/res/drawable/ic_home_app_muzei.xml | 26 - .../main/res/drawable/ic_shortcut_apply.xml | 14 - .../main/res/drawable/ic_shortcut_request.xml | 14 - .../res/drawable/ic_shortcut_wallpapers.xml | 14 - .../drawable/ic_stat_onesignal_default.xml | 19 - .../drawable/ic_toolbar_apply_launcher.xml | 12 - .../res/drawable/ic_toolbar_apply_options.xml | 12 - .../main/res/drawable/ic_toolbar_arrow_up.xml | 12 - .../src/main/res/drawable/ic_toolbar_back.xml | 12 - .../main/res/drawable/ic_toolbar_behance.xml | 32 - .../main/res/drawable/ic_toolbar_circle.xml | 5 - .../main/res/drawable/ic_toolbar_close.xml | 13 - .../res/drawable/ic_toolbar_dashboard.xml | 18 - .../drawable/ic_toolbar_default_profile.xml | 12 - .../main/res/drawable/ic_toolbar_delete.xml | 11 - .../main/res/drawable/ic_toolbar_donate.xml | 12 - .../main/res/drawable/ic_toolbar_download.xml | 11 - .../main/res/drawable/ic_toolbar_dribbble.xml | 22 - .../main/res/drawable/ic_toolbar_email.xml | 12 - .../main/res/drawable/ic_toolbar_facebook.xml | 11 - .../main/res/drawable/ic_toolbar_github.xml | 26 - .../res/drawable/ic_toolbar_google_plus.xml | 17 - .../res/drawable/ic_toolbar_homescreen.xml | 12 - .../ic_toolbar_homescreen_lockscreen.xml | 14 - .../res/drawable/ic_toolbar_icon_request.xml | 12 - .../res/drawable/ic_toolbar_icon_shape.xml | 13 - .../res/drawable/ic_toolbar_instagram.xml | 25 - .../main/res/drawable/ic_toolbar_language.xml | 12 - .../src/main/res/drawable/ic_toolbar_link.xml | 12 - .../res/drawable/ic_toolbar_lockscreen.xml | 19 - .../res/drawable/ic_toolbar_navigation.xml | 11 - .../res/drawable/ic_toolbar_navigation_2.xml | 11 - .../res/drawable/ic_toolbar_navigation_3.xml | 11 - .../res/drawable/ic_toolbar_navigation_4.xml | 11 - .../main/res/drawable/ic_toolbar_others.xml | 12 - .../main/res/drawable/ic_toolbar_people.xml | 12 - .../res/drawable/ic_toolbar_pinterest.xml | 25 - .../drawable/ic_toolbar_premium_request.xml | 12 - .../src/main/res/drawable/ic_toolbar_rate.xml | 12 - .../src/main/res/drawable/ic_toolbar_save.xml | 12 - .../main/res/drawable/ic_toolbar_search.xml | 13 - .../res/drawable/ic_toolbar_select_all.xml | 13 - .../ic_toolbar_select_all_selected.xml | 12 - .../main/res/drawable/ic_toolbar_share.xml | 12 - .../main/res/drawable/ic_toolbar_storage.xml | 12 - .../main/res/drawable/ic_toolbar_telegram.xml | 14 - .../main/res/drawable/ic_toolbar_theme.xml | 12 - .../main/res/drawable/ic_toolbar_twitter.xml | 19 - .../main/res/drawable/ic_toolbar_update.xml | 18 - .../res/drawable/ic_toolbar_wallpapers.xml | 12 - .../main/res/drawable/ic_toolbar_website.xml | 9 - .../navigation_view_item_background.xml | 4 - .../navigation_view_item_background_dark.xml | 4 - .../res/drawable/numberpicker_divider.xml | 5 - .../drawable/numberpicker_divider_dark.xml | 5 - .../main/res/drawable/progressbar_track.xml | 18 - .../src/main/res/drawable/reverse_shadow.xml | 9 - .../main/res/drawable/searchbar_cursor.xml | 5 - .../src/main/res/drawable/splash_screen.xml | 13 - .../src/main/res/drawable/tab_indicator.xml | 7 - .../src/main/res/drawable/tab_text.xml | 7 - .../src/main/res/drawable/toolbar_shadow.xml | 9 - libs/candybar/src/main/res/font/bold.ttf | Bin 78220 -> 0 bytes libs/candybar/src/main/res/font/light.ttf | Bin 78384 -> 0 bytes libs/candybar/src/main/res/font/medium.ttf | Bin 78620 -> 0 bytes libs/candybar/src/main/res/font/monospace.ttf | 0 libs/candybar/src/main/res/font/regular.ttf | Bin 78628 -> 0 bytes libs/candybar/src/main/res/font/semibold.ttf | Bin 78500 -> 0 bytes .../fragment_about_item_footer.xml | 129 --- .../fragment_about_item_footer_accent.xml | 137 --- .../fragment_about_item_header.xml | 78 -- .../layout-land/fragment_about_item_sub.xml | 100 -- .../fragment_request_item_header.xml | 239 ----- .../fragment_request_item_list.xml | 78 -- .../fragment_request_item_header.xml | 239 ----- .../fragment_request_item_list.xml | 78 -- .../src/main/res/layout/activity_main.xml | 28 - .../main/res/layout/activity_wallpaper.xml | 102 -- .../src/main/res/layout/analog_clock.xml | 16 - .../main/res/layout/dialog_report_bugs.xml | 39 - .../src/main/res/layout/fragment_about.xml | 18 - .../res/layout/fragment_about_item_footer.xml | 115 --- .../fragment_about_item_footer_accent.xml | 123 --- .../res/layout/fragment_about_item_header.xml | 69 -- .../res/layout/fragment_about_item_social.xml | 9 - .../fragment_about_item_social_accent.xml | 9 - .../res/layout/fragment_about_item_sub.xml | 90 -- .../src/main/res/layout/fragment_apply.xml | 18 - .../res/layout/fragment_apply_item_footer.xml | 13 - .../res/layout/fragment_apply_item_header.xml | 11 - .../res/layout/fragment_apply_item_list.xml | 60 -- .../main/res/layout/fragment_changelog.xml | 42 - .../layout/fragment_changelog_item_list.xml | 16 - .../src/main/res/layout/fragment_credits.xml | 15 - .../res/layout/fragment_credits_item_list.xml | 48 - .../src/main/res/layout/fragment_faqs.xml | 36 - .../res/layout/fragment_faqs_item_list.xml | 42 - .../src/main/res/layout/fragment_home.xml | 21 - .../res/layout/fragment_home_item_content.xml | 55 - .../res/layout/fragment_home_item_header.xml | 111 -- .../layout/fragment_home_item_header_alt.xml | 119 --- .../fragment_home_item_icon_request.xml | 104 -- .../layout/fragment_home_item_more_apps.xml | 48 - .../layout/fragment_home_item_wallpapers.xml | 57 -- .../main/res/layout/fragment_icon_preview.xml | 42 - .../src/main/res/layout/fragment_icons.xml | 48 - .../main/res/layout/fragment_icons_base.xml | 50 - .../res/layout/fragment_icons_base_tab.xml | 20 - .../res/layout/fragment_icons_item_grid.xml | 74 -- .../main/res/layout/fragment_icons_search.xml | 41 - .../main/res/layout/fragment_inapp_dialog.xml | 27 - .../fragment_inapp_dialog_item_list.xml | 36 - .../res/layout/fragment_intent_chooser.xml | 43 - .../fragment_intent_chooser_item_list.xml | 55 - .../main/res/layout/fragment_languages.xml | 15 - .../src/main/res/layout/fragment_licenses.xml | 18 - .../layout/fragment_licenses_item_list.xml | 32 - .../main/res/layout/fragment_other_apps.xml | 13 - .../layout/fragment_other_apps_item_list.xml | 41 - .../src/main/res/layout/fragment_presets.xml | 34 - .../res/layout/fragment_presets_item_grid.xml | 58 -- .../layout/fragment_presets_item_header.xml | 53 - .../fragment_presets_item_header_list.xml | 35 - .../src/main/res/layout/fragment_request.xml | 44 - .../layout/fragment_request_item_footer.xml | 6 - .../layout/fragment_request_item_header.xml | 229 ----- .../res/layout/fragment_request_item_list.xml | 71 -- .../src/main/res/layout/fragment_settings.xml | 18 - .../layout/fragment_settings_item_footer.xml | 13 - .../layout/fragment_settings_item_list.xml | 76 -- .../src/main/res/layout/fragment_update.xml | 30 - .../main/res/layout/fragment_wallpapers.xml | 54 - .../layout/fragment_wallpapers_item_grid.xml | 65 -- .../fragment_wallpapers_item_grid_alt.xml | 31 - .../res/layout/navigation_view_header.xml | 45 - .../src/main/res/layout/popup_item_list.xml | 32 - .../src/main/res/layout/search_bar.xml | 37 - libs/candybar/src/main/res/layout/toolbar.xml | 35 - .../src/main/res/menu/menu_bookmark_icons.xml | 17 - .../src/main/res/menu/menu_icons_search.xml | 18 - .../candybar/src/main/res/menu/menu_muzei.xml | 11 - .../main/res/menu/menu_navigation_view.xml | 60 -- .../src/main/res/menu/menu_request.xml | 11 - .../src/main/res/menu/menu_search.xml | 12 - .../main/res/values-af-rZA/dashboard_faqs.xml | 30 - .../res/values-af-rZA/dashboard_strings.xml | 31 - .../main/res/values-ar-rSA/dashboard_faqs.xml | 82 -- .../res/values-ar-rSA/dashboard_strings.xml | 249 ----- .../main/res/values-bg-rBG/dashboard_faqs.xml | 82 -- .../res/values-bg-rBG/dashboard_strings.xml | 133 --- .../main/res/values-bn-rIN/dashboard_faqs.xml | 88 -- .../res/values-bn-rIN/dashboard_strings.xml | 222 ---- .../main/res/values-ca-rES/dashboard_faqs.xml | 30 - .../res/values-ca-rES/dashboard_strings.xml | 31 - .../main/res/values-cs-rCZ/dashboard_faqs.xml | 101 -- .../res/values-cs-rCZ/dashboard_strings.xml | 258 ----- .../main/res/values-da-rDK/dashboard_faqs.xml | 30 - .../res/values-da-rDK/dashboard_strings.xml | 31 - .../main/res/values-de-rDE/dashboard_faqs.xml | 99 -- .../res/values-de-rDE/dashboard_strings.xml | 256 ----- .../main/res/values-el-rGR/dashboard_faqs.xml | 30 - .../res/values-el-rGR/dashboard_strings.xml | 31 - .../main/res/values-en-rUS/dashboard_faqs.xml | 30 - .../res/values-en-rUS/dashboard_strings.xml | 31 - .../main/res/values-es-rES/dashboard_faqs.xml | 97 -- .../res/values-es-rES/dashboard_strings.xml | 244 ----- .../main/res/values-fi-rFI/dashboard_faqs.xml | 30 - .../res/values-fi-rFI/dashboard_strings.xml | 31 - .../main/res/values-fr-rFR/dashboard_faqs.xml | 94 -- .../res/values-fr-rFR/dashboard_strings.xml | 259 ----- .../main/res/values-hi-rIN/dashboard_faqs.xml | 101 -- .../res/values-hi-rIN/dashboard_strings.xml | 226 ---- .../main/res/values-hu-rHU/dashboard_faqs.xml | 96 -- .../res/values-hu-rHU/dashboard_strings.xml | 234 ----- .../main/res/values-in-rID/dashboard_faqs.xml | 99 -- .../res/values-in-rID/dashboard_strings.xml | 254 ----- .../main/res/values-it-rIT/dashboard_faqs.xml | 100 -- .../res/values-it-rIT/dashboard_strings.xml | 253 ----- .../main/res/values-iw-rIL/dashboard_faqs.xml | 30 - .../res/values-iw-rIL/dashboard_strings.xml | 31 - .../main/res/values-ja-rJP/dashboard_faqs.xml | 101 -- .../res/values-ja-rJP/dashboard_strings.xml | 222 ---- .../main/res/values-ko-rKR/dashboard_faqs.xml | 101 -- .../res/values-ko-rKR/dashboard_strings.xml | 216 ---- .../src/main/res/values-land/integers.xml | 11 - .../main/res/values-ne-rNP/dashboard_faqs.xml | 92 -- .../res/values-ne-rNP/dashboard_strings.xml | 244 ----- .../src/main/res/values-night/colors.xml | 35 - .../main/res/values-nl-rNL/dashboard_faqs.xml | 30 - .../res/values-nl-rNL/dashboard_strings.xml | 183 ---- .../main/res/values-no-rNO/dashboard_faqs.xml | 30 - .../res/values-no-rNO/dashboard_strings.xml | 31 - .../main/res/values-pl-rPL/dashboard_faqs.xml | 83 -- .../res/values-pl-rPL/dashboard_strings.xml | 207 ---- .../main/res/values-pt-rBR/dashboard_faqs.xml | 93 -- .../res/values-pt-rBR/dashboard_strings.xml | 250 ----- .../main/res/values-pt-rPT/dashboard_faqs.xml | 30 - .../res/values-pt-rPT/dashboard_strings.xml | 31 - .../main/res/values-ro-rRO/dashboard_faqs.xml | 30 - .../res/values-ro-rRO/dashboard_strings.xml | 31 - .../main/res/values-ru-rRU/dashboard_faqs.xml | 97 -- .../res/values-ru-rRU/dashboard_strings.xml | 225 ---- .../main/res/values-sr-rSP/dashboard_faqs.xml | 30 - .../res/values-sr-rSP/dashboard_strings.xml | 31 - .../main/res/values-sv-rSE/dashboard_faqs.xml | 30 - .../res/values-sv-rSE/dashboard_strings.xml | 31 - .../main/res/values-sw600dp-land/integers.xml | 9 - .../src/main/res/values-sw600dp/dimens.xml | 23 - .../src/main/res/values-sw600dp/integers.xml | 11 - .../main/res/values-ta-rIN/dashboard_faqs.xml | 100 -- .../res/values-ta-rIN/dashboard_strings.xml | 224 ---- .../main/res/values-tr-rTR/dashboard_faqs.xml | 101 -- .../res/values-tr-rTR/dashboard_strings.xml | 225 ---- .../main/res/values-uk-rUA/dashboard_faqs.xml | 86 -- .../res/values-uk-rUA/dashboard_strings.xml | 255 ----- .../src/main/res/values-v21/bools.xml | 8 - .../src/main/res/values-v21/dimens.xml | 14 - .../src/main/res/values-v21/styles.xml | 15 - .../src/main/res/values-v21/themes.xml | 32 - .../main/res/values-vi-rVN/dashboard_faqs.xml | 30 - .../res/values-vi-rVN/dashboard_strings.xml | 31 - .../main/res/values-zh-rCN/dashboard_faqs.xml | 97 -- .../res/values-zh-rCN/dashboard_strings.xml | 224 ---- .../main/res/values-zh-rTW/dashboard_faqs.xml | 97 -- .../res/values-zh-rTW/dashboard_strings.xml | 219 ---- libs/candybar/src/main/res/values/attrs.xml | 9 - libs/candybar/src/main/res/values/bools.xml | 8 - .../src/main/res/values/changelog.xml | 24 - libs/candybar/src/main/res/values/colors.xml | 80 -- .../src/main/res/values/const_strings.xml | 4 - .../res/values/dashboard_configurations.xml | 334 ------ .../src/main/res/values/dashboard_faqs.xml | 107 -- .../values/dashboard_icon_name_replacer.xml | 21 - .../main/res/values/dashboard_icon_pack.xml | 7 - .../main/res/values/dashboard_languages.xml | 50 - .../main/res/values/dashboard_launchers.xml | 190 ---- .../src/main/res/values/dashboard_strings.xml | 321 ------ libs/candybar/src/main/res/values/dimens.xml | 96 -- .../candybar/src/main/res/values/integers.xml | 13 - .../src/main/res/values/launchers.xml | 44 - libs/candybar/src/main/res/values/strings.xml | 4 - libs/candybar/src/main/res/values/styles.xml | 52 - libs/candybar/src/main/res/values/themes.xml | 49 - .../src/main/res/xml/analog_clock.xml | 6 - libs/candybar/src/main/res/xml/appfilter.xml | 2 - .../src/main/res/xml/contributors.xml | 2 - .../main/res/xml/dashboard_contributors.xml | 34 - .../src/main/res/xml/dashboard_licenses.xml | 251 ----- .../src/main/res/xml/dashboard_translator.xml | 155 --- .../src/main/res/xml/file_provider_paths.xml | 9 - .../src/main/res/xml/network_config.xml | 3 - .../PreLollipopTransitions/build.gradle | 51 - .../src/main/AndroidManifest.xml | 20 - .../ActivityTransition.java | 102 -- .../ActivityTransitionLauncher.java | 77 -- .../activitytransition/BuildConfigUtils.java | 39 - .../ExitActivityTransition.java | 56 - .../activitytransition/core/MoveData.java | 29 - .../core/TransitionAnimation.java | 137 --- .../core/TransitionBundleFactory.java | 94 -- .../core/TransitionData.java | 74 -- .../fragment/ExitFragmentTransition.java | 98 -- .../fragment/FragmentTransition.java | 87 -- .../fragment/FragmentTransitionLauncher.java | 72 -- libs/gradle.properties | 16 - libs/send-telegram.sh | 28 - libs/settings.gradle | 1 - 474 files changed, 31 insertions(+), 36747 deletions(-) create mode 100644 app/src/main/res/drawable-nodpi/ic_splash_screen.png create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png rename libs/candybar/src/main/res/xml/drawable.xml => app/src/main/res/values/ic_launcher_background.xml (52%) delete mode 100644 libs/.gitignore delete mode 100644 libs/CHANGELOG.md delete mode 100644 libs/LICENSE delete mode 100644 libs/README.md delete mode 100644 libs/build.gradle delete mode 100644 libs/candybar/build.gradle delete mode 100644 libs/candybar/src/main/AndroidManifest.xml delete mode 100644 libs/candybar/src/main/java/candybar/lib/activities/CandyBarCrashReport.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/activities/CandyBarMainActivity.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/activities/CandyBarSplashActivity.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/activities/CandyBarWallpaperActivity.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/AboutAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/AboutSocialAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/FAQsAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/HomeAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/IconsAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/LauncherAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/PresetsAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/RequestAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/SettingsAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/WallpapersAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/ChangelogAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/CreditsAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/IconShapeAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/InAppBillingAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/IntentAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/LanguagesAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/OtherAppsAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/adapters/dialog/ThemeAdapter.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/applications/CandyBarApplication.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/databases/Database.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/AboutFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/ApplyFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/FAQsFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/HomeFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/IconsBaseFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/IconsFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/IconsSearchFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/PresetsFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/RequestFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/SettingsFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/WallpapersFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/ChangelogFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/CreditsFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/DonationLinksFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconPreviewFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconShapeChooserFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/IntentChooserFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/LanguagesFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/OtherAppsFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/fragments/dialog/ThemeChooserFragment.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/ConfigurationHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/ContextHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/DeviceHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/DrawableHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/IconShapeHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/IconsHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/IntentHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/JsonHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/LauncherHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/LocaleHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/MuzeiHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/NavigationViewHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/PlayStoreCheckHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/PresetsHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/ReportBugsHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/RequestHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/TapIntroHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/ThemeHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/TypefaceHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/UrlHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/ViewHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/helpers/WallpaperHelper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Credit.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/FAQs.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Home.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Icon.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/IconShape.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/ImageSize.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/InAppBilling.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/IntentChooser.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Language.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/PopupItem.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Preset.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Request.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Setting.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Theme.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/items/Wallpaper.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/preferences/Preferences.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/services/CandyBarArtWorker.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/services/CandyBarMuzeiService.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/services/CandyBarService.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/services/CandyBarWidgetService.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/IconRequestBuilderTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/IconRequestTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/IconsLoaderTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/PremiumRequestBuilderTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/ReportBugsTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/WallpaperApplyTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/tasks/WallpaperPropertiesLoaderTask.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/AlphanumComparator.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/AsyncTaskBase.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/CandyBarGlideModule.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/CommonDataFetcher.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoader.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoaderFactory.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/Extras.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/ImageConfig.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/JsonStructure.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/Popup.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/WallpaperDownloader.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/listeners/HomeListener.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/listeners/RequestListener.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/listeners/SearchListener.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/listeners/WallpapersListener.java delete mode 100644 libs/candybar/src/main/java/candybar/lib/utils/views/HeaderView.java delete mode 100644 libs/candybar/src/main/res/animator/card_lift.xml delete mode 100644 libs/candybar/src/main/res/color/navigation_view_item_highlight.xml delete mode 100644 libs/candybar/src/main/res/color/navigation_view_item_highlight_dark.xml delete mode 100644 libs/candybar/src/main/res/color/tab_icon.xml delete mode 100644 libs/candybar/src/main/res/drawable-nodpi/clock_bg.png delete mode 100644 libs/candybar/src/main/res/drawable-nodpi/clock_hour.png delete mode 100644 libs/candybar/src/main/res/drawable-nodpi/clock_minute.png delete mode 100644 libs/candybar/src/main/res/drawable-nodpi/ic_app_default.png delete mode 100644 libs/candybar/src/main/res/drawable-nodpi/ic_splash_screen.png delete mode 100644 libs/candybar/src/main/res/drawable-v21/drawer_bg_selector.xml delete mode 100644 libs/candybar/src/main/res/drawable-v21/drawer_bg_selector_selected.xml delete mode 100644 libs/candybar/src/main/res/drawable-v21/navigation_view_item_background.xml delete mode 100644 libs/candybar/src/main/res/drawable-v21/navigation_view_item_background_dark.xml delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_about.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_apply.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_faqs.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_home.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_icons.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_presets.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_request.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_settings.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_wallpapers.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_abc.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_action.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_adw.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_apex.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_atom.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_aviate.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_blackberry.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_cm.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_evie.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_flick.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_go.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_holo.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_holohd.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_hyperion.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_kiss.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lawnchair.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lg.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lucid.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_m.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_microsoft.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_mini.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_next.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_niagara.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_nougat.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_nova.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_omega.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_pixel.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_poco.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_posidon.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_smart.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_solo.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_square.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_v.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_zenui.png delete mode 100644 libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_zero.png delete mode 100644 libs/candybar/src/main/res/drawable/colored_cursor.xml delete mode 100644 libs/candybar/src/main/res/drawable/drawer_shadow.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_arrow_forward.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_bookmark.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_bookmark_filled.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_bookmarks.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_changelog_dot.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_check_circle.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_fab_send.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_google_play_more_apps.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_home_app_muzei.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_shortcut_apply.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_shortcut_request.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_shortcut_wallpapers.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_stat_onesignal_default.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_apply_launcher.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_apply_options.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_arrow_up.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_back.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_behance.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_circle.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_close.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_dashboard.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_default_profile.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_delete.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_donate.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_download.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_dribbble.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_email.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_facebook.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_github.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_google_plus.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_homescreen.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_homescreen_lockscreen.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_icon_request.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_icon_shape.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_instagram.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_language.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_link.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_lockscreen.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_navigation.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_navigation_2.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_navigation_3.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_navigation_4.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_others.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_people.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_pinterest.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_premium_request.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_rate.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_save.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_search.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_select_all.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_select_all_selected.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_share.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_storage.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_telegram.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_theme.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_twitter.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_update.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_wallpapers.xml delete mode 100644 libs/candybar/src/main/res/drawable/ic_toolbar_website.xml delete mode 100644 libs/candybar/src/main/res/drawable/navigation_view_item_background.xml delete mode 100644 libs/candybar/src/main/res/drawable/navigation_view_item_background_dark.xml delete mode 100644 libs/candybar/src/main/res/drawable/numberpicker_divider.xml delete mode 100644 libs/candybar/src/main/res/drawable/numberpicker_divider_dark.xml delete mode 100644 libs/candybar/src/main/res/drawable/progressbar_track.xml delete mode 100644 libs/candybar/src/main/res/drawable/reverse_shadow.xml delete mode 100644 libs/candybar/src/main/res/drawable/searchbar_cursor.xml delete mode 100644 libs/candybar/src/main/res/drawable/splash_screen.xml delete mode 100644 libs/candybar/src/main/res/drawable/tab_indicator.xml delete mode 100644 libs/candybar/src/main/res/drawable/tab_text.xml delete mode 100644 libs/candybar/src/main/res/drawable/toolbar_shadow.xml delete mode 100644 libs/candybar/src/main/res/font/bold.ttf delete mode 100644 libs/candybar/src/main/res/font/light.ttf delete mode 100644 libs/candybar/src/main/res/font/medium.ttf delete mode 100644 libs/candybar/src/main/res/font/monospace.ttf delete mode 100644 libs/candybar/src/main/res/font/regular.ttf delete mode 100644 libs/candybar/src/main/res/font/semibold.ttf delete mode 100644 libs/candybar/src/main/res/layout-land/fragment_about_item_footer.xml delete mode 100644 libs/candybar/src/main/res/layout-land/fragment_about_item_footer_accent.xml delete mode 100644 libs/candybar/src/main/res/layout-land/fragment_about_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout-land/fragment_about_item_sub.xml delete mode 100644 libs/candybar/src/main/res/layout-land/fragment_request_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout-land/fragment_request_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout-sw600dp/fragment_request_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout-sw600dp/fragment_request_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/activity_main.xml delete mode 100644 libs/candybar/src/main/res/layout/activity_wallpaper.xml delete mode 100644 libs/candybar/src/main/res/layout/analog_clock.xml delete mode 100644 libs/candybar/src/main/res/layout/dialog_report_bugs.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about_item_footer.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about_item_footer_accent.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about_item_social.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about_item_social_accent.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_about_item_sub.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_apply.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_apply_item_footer.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_apply_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_apply_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_changelog.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_changelog_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_credits.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_credits_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_faqs.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_faqs_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home_item_content.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home_item_header_alt.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home_item_icon_request.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home_item_more_apps.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_home_item_wallpapers.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_icon_preview.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_icons.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_icons_base.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_icons_base_tab.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_icons_item_grid.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_icons_search.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_inapp_dialog.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_inapp_dialog_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_intent_chooser.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_intent_chooser_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_languages.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_licenses.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_licenses_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_other_apps.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_other_apps_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_presets.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_presets_item_grid.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_presets_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_presets_item_header_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_request.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_request_item_footer.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_request_item_header.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_request_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_settings.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_settings_item_footer.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_settings_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_update.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_wallpapers.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_wallpapers_item_grid.xml delete mode 100644 libs/candybar/src/main/res/layout/fragment_wallpapers_item_grid_alt.xml delete mode 100644 libs/candybar/src/main/res/layout/navigation_view_header.xml delete mode 100644 libs/candybar/src/main/res/layout/popup_item_list.xml delete mode 100644 libs/candybar/src/main/res/layout/search_bar.xml delete mode 100644 libs/candybar/src/main/res/layout/toolbar.xml delete mode 100644 libs/candybar/src/main/res/menu/menu_bookmark_icons.xml delete mode 100644 libs/candybar/src/main/res/menu/menu_icons_search.xml delete mode 100644 libs/candybar/src/main/res/menu/menu_muzei.xml delete mode 100644 libs/candybar/src/main/res/menu/menu_navigation_view.xml delete mode 100644 libs/candybar/src/main/res/menu/menu_request.xml delete mode 100644 libs/candybar/src/main/res/menu/menu_search.xml delete mode 100644 libs/candybar/src/main/res/values-af-rZA/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-af-rZA/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-ar-rSA/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ar-rSA/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-bg-rBG/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-bg-rBG/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-bn-rIN/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-bn-rIN/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-ca-rES/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ca-rES/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-cs-rCZ/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-cs-rCZ/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-da-rDK/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-da-rDK/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-de-rDE/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-de-rDE/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-el-rGR/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-el-rGR/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-en-rUS/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-en-rUS/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-es-rES/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-es-rES/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-fi-rFI/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-fi-rFI/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-fr-rFR/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-fr-rFR/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-hi-rIN/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-hi-rIN/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-hu-rHU/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-hu-rHU/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-in-rID/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-in-rID/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-it-rIT/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-it-rIT/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-iw-rIL/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-iw-rIL/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-ja-rJP/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ja-rJP/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-ko-rKR/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ko-rKR/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-land/integers.xml delete mode 100644 libs/candybar/src/main/res/values-ne-rNP/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ne-rNP/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-night/colors.xml delete mode 100644 libs/candybar/src/main/res/values-nl-rNL/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-nl-rNL/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-no-rNO/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-no-rNO/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-pl-rPL/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-pl-rPL/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-pt-rBR/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-pt-rBR/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-pt-rPT/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-pt-rPT/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-ro-rRO/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ro-rRO/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-ru-rRU/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ru-rRU/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-sr-rSP/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-sr-rSP/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-sv-rSE/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-sv-rSE/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-sw600dp-land/integers.xml delete mode 100644 libs/candybar/src/main/res/values-sw600dp/dimens.xml delete mode 100644 libs/candybar/src/main/res/values-sw600dp/integers.xml delete mode 100644 libs/candybar/src/main/res/values-ta-rIN/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-ta-rIN/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-tr-rTR/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-tr-rTR/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-uk-rUA/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-uk-rUA/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-v21/bools.xml delete mode 100644 libs/candybar/src/main/res/values-v21/dimens.xml delete mode 100644 libs/candybar/src/main/res/values-v21/styles.xml delete mode 100644 libs/candybar/src/main/res/values-v21/themes.xml delete mode 100644 libs/candybar/src/main/res/values-vi-rVN/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-vi-rVN/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-zh-rCN/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-zh-rCN/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values-zh-rTW/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values-zh-rTW/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values/attrs.xml delete mode 100644 libs/candybar/src/main/res/values/bools.xml delete mode 100644 libs/candybar/src/main/res/values/changelog.xml delete mode 100644 libs/candybar/src/main/res/values/colors.xml delete mode 100644 libs/candybar/src/main/res/values/const_strings.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_configurations.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_faqs.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_icon_name_replacer.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_icon_pack.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_languages.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_launchers.xml delete mode 100644 libs/candybar/src/main/res/values/dashboard_strings.xml delete mode 100644 libs/candybar/src/main/res/values/dimens.xml delete mode 100644 libs/candybar/src/main/res/values/integers.xml delete mode 100644 libs/candybar/src/main/res/values/launchers.xml delete mode 100644 libs/candybar/src/main/res/values/strings.xml delete mode 100644 libs/candybar/src/main/res/values/styles.xml delete mode 100644 libs/candybar/src/main/res/values/themes.xml delete mode 100644 libs/candybar/src/main/res/xml/analog_clock.xml delete mode 100644 libs/candybar/src/main/res/xml/appfilter.xml delete mode 100644 libs/candybar/src/main/res/xml/contributors.xml delete mode 100644 libs/candybar/src/main/res/xml/dashboard_contributors.xml delete mode 100644 libs/candybar/src/main/res/xml/dashboard_licenses.xml delete mode 100644 libs/candybar/src/main/res/xml/dashboard_translator.xml delete mode 100644 libs/candybar/src/main/res/xml/file_provider_paths.xml delete mode 100644 libs/candybar/src/main/res/xml/network_config.xml delete mode 100644 libs/extLibs/PreLollipopTransitions/build.gradle delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/AndroidManifest.xml delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/ActivityTransition.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/ActivityTransitionLauncher.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/BuildConfigUtils.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/ExitActivityTransition.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/core/MoveData.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/core/TransitionAnimation.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/core/TransitionBundleFactory.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/core/TransitionData.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/fragment/ExitFragmentTransition.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/fragment/FragmentTransition.java delete mode 100644 libs/extLibs/PreLollipopTransitions/src/main/java/com/kogitune/activitytransition/fragment/FragmentTransitionLauncher.java delete mode 100644 libs/gradle.properties delete mode 100644 libs/send-telegram.sh delete mode 100644 libs/settings.gradle diff --git a/README.md b/README.md index e187f06..e059c48 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,7 @@ Read the full details here: ## License -Snow is built with with [Arcticons's](https://github.com/Donnnno/Arcticons/) modified [CandyBar Dashboard](https://github.com/zixpo/candybar), licensed under [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) which is compatible with the [GNU General Public License, Version 3.0](https://www.gnu.org/licenses/gpl-3.0.en.html) that we use. +Snow is built with [Candybar-FOSS](https://github.com/Donnnno/candybar-foss), licensed under [Apache License, Version 2.0](https://www.apache.org/licenses/LICENSE-2.0) which is compatible with the [GNU General Public License, Version 3.0](https://www.gnu.org/licenses/gpl-3.0.en.html) that we use. All icons are licensed under [Creative Commonns Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) ](https://creativecommons.org/licenses/by-sa/4.0/), with around 1100 of the first icons from [Frost](https://github.com/dkanada/frost). diff --git a/app/build.gradle b/app/build.gradle index ad53788..195eb56 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.application' android { - compileSdkVersion 30 + compileSdkVersion 31 defaultConfig { applicationId "org.baitmooth.snow" @@ -43,23 +43,8 @@ android { } dependencies { - /* - * CandyBar Material Dashboard Library - * - * TODO: How to update the dashboard?! - * Check this update guide for every version - * - https://github.com/zixpo/candybar-sample/wiki/Updating-the-dashboard - * If you've missed some versions you've to also follow update guide for those versions - */ - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - - implementation fileTree(dir: 'libs', include: ['*.jar']) - - implementation 'androidx.appcompat:appcompat:1.3.1' - - implementation project(':libs:candybar') - implementation project(':libs:extLibs:PreLollipopTransitions') + implementation 'com.github.Donnnno:candybar-foss:3.13.3' } diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index cff95ed48911754f1282a561e9e1656000be9e47..9070fb18c9a4efca991ac27e447ce953debf9039 100644 GIT binary patch literal 19284 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 z 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 88294a0..e27a030 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -3,233 +3,27 @@ android:height="108dp" android:viewportWidth="108" android:viewportHeight="108"> - + + android:pathData="m67.732,130.177 l-16.56,-28.683 16.56,-28.683 16.56,28.683z" + android:fillColor="#fff"/> + android:pathData="m67.732,5.292 l-16.56,28.683 16.56,28.683 16.56,-28.683z" + android:fillColor="#fff"/> + android:pathData="m7.553,35.105l33.12,0l16.56,28.683 -33.12,0z" + android:fillColor="#fff"/> + android:pathData="m7.553,100.36l33.12,0l16.56,-28.683 -33.12,-0z" + android:fillColor="#fff"/> + android:pathData="m127.912,100.36l-33.12,0l-16.56,-28.683 33.12,-0z" + android:fillColor="#fff"/> - - - - - - - - - - - - - - - - - - - - - - + android:pathData="m127.912,35.105l-33.12,0l-16.56,28.683 33.12,0z" + android:fillColor="#fff"/> diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..7353dbd --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 959a24626bbad3142647b52f1cf3af8158e694ec..2e33a3e4e425a5efb7f6d123652d03159b2bd41c 100644 GIT binary patch delta 1409 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png index 734b10c65ff397761dda1fde3df6ce58b03b58c0..4b4f958d3415d8f81dfc065664b50dfd12a49ec4 100644 GIT binary patch delta 3033 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 b4;K9o**sctk~q#I00000NkvXXu0mjf3RmEu delta 3311 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 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png index 11187b2575f7a8709673952ae19029df21a25178..ecfd9fd82a92324f3f4edc3dd5b21d0714939812 100644 GIT binary patch delta 1041 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 Z<3Di;5sonruOk2e002ovPDHLkV1la72}u9| diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png index eff166346d220064ac50dedae90ee90612e90c47..e533a481aedc8d91c269d209986ce59805824325 100644 GIT binary patch delta 2004 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 LNkvXXu0mjfCKoq2 literal 4287 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index 952944c0899c02f0d1c37e98129448694041630d..038e77d9a4b49ce922adea838d908cc710be58ba 100644 GIT binary patch literal 3525 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 H?VtT0i)F-9 literal 0 HcmV?d00001 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index d426bc6d304e254ac0b3aa7165baf4208e396804..c9fadd987ac4000bd39d4ea6c1e677ba3255dcf7 100644 GIT binary patch literal 7328 zcmV;R9AD#!P)j zuU}t{Tz#Y{VN|i*mEGFf+8R4LI)-<4c8lj18TO~rm7)$GK75=Aq)*`1tE zwtcm@@y?Yhlq6Xl#s2&6pMBtg2MqY^f8X2iWcGt#rv>V>agoWgL>U8Rz(2PG*Tu<@ zfO;DjTyQ~l)22-ZOO`ANeV+u_OwCwr`Fz*jd+$BSm35yf8t6$((VEF^t3UvWb6E=M zZ+6X^HQ60Ib{M?y!VBha{&fjKmrIj>AD4gIT$%TUVtx%whRNVwvIE_kM-Yj?UVH78 zUAAmlcI(!yT?FFuwbx#2zVok73PiqJ?dLTe9UT)~*{8WEdG;65Y+!&%CJ#9D&_lED zz4u-hc@*!w^N#t>zdlJ&63M?CghZ2F9i*Z7$W<#pZzRE9tGcV zjelQ~pfZ*p>bpXsDXuQkR1E7oa~ss(a0ixToORY&*$+PWAVeGm-z{FeICNjq;E)JQ zlsb22(#X-HN4LlzUT_DLWQ-p_KKta8Plib2XSZzG5+aNbuKCV)zGG&o{d$rHCnkDQ`djDfD2YWUvUU^F+)2mN zKprq_)~xKSuf7^0OCh}c^2^zS4?Z|lPZFUd8a{mZ-N8=sBy!oqtj7pxzHd99xY^}= zz>+LqzC1*dC~!|2tPo(HNC26xLPu6t$tfD;OD9ioI-bZ$LLZA3Ey}+2)>|QhL}9~* z4cUbY7l!IfD0H?OOLU5>vm_M5<`KDx!uM>4Q?UU|0{!eSfBDN0If@1MQioq}647Zl zsL8+Yx3#r>&edISmae!bW4B~rF8$6Y6=$A#W_I)D%^_kG3+|;3zuu%mU71*+M}wW@ z>D741Y^{{eU1B?#8uCn^K0W*N(@%#;Q7TrgT9utPZCa@Q1jCT1qod=8=+5e}SBeRm zh0U{^&ZQ#mVUyT*zx&XmpZ~Ir=3TBJ6B#pROm^(pu~kD<_A_C^gzRsA z^P7;ezemtJa8E$pbK;oL29)^70<}byw9*x3{++gYJVK2Gf|Z zJ*3jBYy(AE9~W$O@COzb_{FiP8MRCBpo0#|KL7mlq5I3lv(G+j>h#-jL7&Kms%4P@ zviJK@1T>hw0o_{;lvRxR5+*ie?DJijh~PONSR1Ow46uSgwiuuPt#5s+sKB-*fQh}_CNZY%G4W|DT4g_VoF>WGwzT8$?vinjn6MFBx z_l5=<7nscZ#y7qZ>W7aLPdu?lR^j81KQ7AJU3lSzRhh(8+;h)8M&^D$N`P@=Vuh|# z9(de{ENZrR!t~cvT5R@J2$=A<-+ntZ*tqcGi!Wv;Po5m=hYPZkyY9NHthj`G?zrQQ z$Y;ao!%Hu{6uLhyAmd_49RWk2;lqco5)SZ0YsqfRtb4K1NGj6vnv2f9@`1G&G8KQo zae>*_tFF2#GN2|)DQA1@Yp=Z)nc>j()mL9#wOM(9jFGk9ml9!gErIkW&CShIEgwpn zR5aO_F!0Z8g(U~i`M|I7%{Si+4LUCHz~J1ub3^@bfd#qp$}3B)A{Cf+5Yo|_~8mh+yZ8D|c-y0W@DWvxM(E}JaCV})n!v)KUqKdA843bJ#P+27j zL~6-`qc4EC@c#SnM?U;Vw(_;FeJ%Uxr=N!I_d(Eo?z!hiW;m?7efZ&rq5I>)Bab{% zZrWZ5Iv@1EK`st5J2G}*N`YeHpT@?VBc2(+QDu5Og_!sANbf~nd=OxN_zoyW8E zD1i2{&p!KP@4ox)kRaj$K`fJfQC8#RlTXfjKB9tn=A@HO3f<>|Hkd-FX5fr0k*VL8 z9zp}@Z4yWy4kv;lXQhq5lK^UwTT!LKgLoWV=?fz+aHh}f*|S6aa6#5|!2LvT)HLxp6s_R5F0} zfkj}#&lgNwfCR;Cf4%(j%Xe8PBg47ml1n1f_G6Ddwyd*;$_3eAlvV8^Odu@;x*1Mb zZbTMLRh4X@A~!x^D~ZL0DOhNH_~C~`0*VU={*+Tri4^=-zVa25)|26!bIv)T z?_E&W>8GDw)gQt`4?PsQU|a#{%KWp!iAKwfZc}+(d2Pzr*Ai$YaRP<1FzE{_E>*~I?9MyyjLdMDR4nF*;7Wn{B^HAHe#8Jx<<|-)I4am|Z{CG5ULjT6v%bE5 zgxvUhw~{!~Tiaj#e)u3$j5@Xj>qA}Dv_2(nQ|$@5=7I(f9y|_iSQIQK*B?4`=yeLZhKj3kiRiC9-xw^t^n&1CtI=7~hmA0`q94H~pB+z2AF zFhd~0Ffm^*x|PIWpr9@bo+D$>l~cQ&?>pV zzTZ7o0wsMh74X^r-UW40XEm)*H5XIc+S>jv$gPFJjc(V%SZU>=7O_D8!OgYp9HnjN zsHPjP)^-jd5ZgI;PQEAtvG1c5a+8SN5{N>c&&9)qK=)BeB?IZ+c(nP9GtLP0!v$8O*hibWrkL!fuRPi; z0W^;`GY5qG>UIuD3u#(|piRuzHB?qf0#*BP1!iq)hbxo?bL6jtGCzh3mJ{8k@LISC zwzUfT&ajnLBnIk@<6WZGjmkaVrI@rn<;T0209xXozkmyt6Gah71L>hdh74g}kiHAP zM{!VJJ79`?`tSi$x(4>4#KMQdg`kK4S_>BuERnX26!&G`2d|Zui)tTn$J=?LevOql z;x1}lDWyl;?XWY@9C0_=a-paIS_{DvY1;@fV^?aWc^WDTy>ZB9F-PxK;*iZ^7By3N z$flV$PuWh09p&aj!djgDmgZ@^MuxtV4O*diDyY&2&jQhA;RyG89)2RWqZRR_j>H8(f^2;B#{3@q}Q_8X8VU_dyx)j~0BM*_|jD zE5US08_bfrO||yAr*2`~S8Ho4r*TZMx`zWL#Xnj!oyUZY95!s&-)JLw8V=$3c$#W%jG4drRP3+&!wZN?u= zT)>4CvrU!tsW`L2zVOP+_V)I-Mc1>?d5{ZX%5q;?)Qzzpc8pa1BimTPwJ`)#d+BcX zQwT|Y>8_poxgA{xIRcgKzO-mIMj(}`udhEwd}O!5G|x$0cG+d2*G|WUn{K)(J8#~+ zP(NJMUi)3#Yrn-n5IiqL*FkRiqO9!8FPJcPDKaBDUVNlEJ26wh3L!YwV*D51$B8Iq zL28yZd}YUlXP$Y+>@V{B;mgS%N1Q+>-N;E--q}1q-s)OUr|)rbgXvL?jg7|(iMH8> z^ID;#0rz(8wbxc9`=O1cOP5Bv)C57T&vx-J%sg`{eUF1@w@?X8WI3OWMSDwQKPTPG z6tF@`#I$MCs`Bd1)vH%$r%ag=YCpkH>+?V8*6LU{k5z;~6ap!Z^}q^^9x`Oed};Jk z+ksSAA;6m4rcIkdO0N{Cn>PG*6AZOJo9gQ7PDHms&ibJ19tF>SQ7gm(EAs<;4;wb@ z$7!=dtPQPPxiX~qN@2x{73Ho!^%mUB3+sdXLdO*ep8ev^OphKgV8Bd?h2F3o>2_Wy zNg!j3BO9Ymb|CugB^WyI^VXhw?#ba%SRYp2dz`u#Dw@*6P?$PFn0pZn*3P5>WFn-s zm7K_Q#0?o`4kGXT_R&C~dB+Qj40aR;@Bq1b+PqhH+iZ&CN^E zoz8uK?nBKg_E?Dc6P5sR8V*{jUGQM(@#1U>6#gXroobQa{+ykZZW3l$BhS#%pK z*jLQrnUdP88%u>dTeN6VSucs>xR-?s7l!IfC^YWb(a_Lv9=Zy0)(73i9yk{&>dIJj zV{V9vs7ah9!=|K6Zk99gv(&8AFJHbqM35+OPt=pC34zgrjeGt99a&wWvyxut9Y=9p z8T&`**a1SKf44z(DqPvDS+h#otISzL97N^UlTd8u2i?-r@}KC&>Ihx+n(Ok5x-xdJ z;Zu1OBXPwpUg8+QDc=6)UeMy6oM`Zts=-~6{!s-Ow^m^P=sAxRI zj3$e6_}cvj4<3A^SfX`lAQ4YgaIm;f90lJ+J$2FBaLDtz$o?pF5ae7JIzcyyhwA90U8_eO=bp(WI(@7LrlcOfBDWyjQKFjO2JGNirZRi$)gz;x+waHy526j)L|Y6 z3Uch9B&KwZ49vtt3^bF_6rX^4*|KH3Y=7l5TVfNuO%++1fLSu&)%Hvu$b;_1?@fayY_2b_7LL{2u&m@y-}X3d%|0&zG5fAgn7~>FIz>qI_dE%Z)U`9Vrt)$zBK@#QC7A#m$)LBDS zhLIC8;|%A9hK8?N@*q=Eb!3dJ6Ejg*iJ~!)IrS{a?Z0Kf2Qp6~)@TK0IB7c@nQcze zMlqEQvXWTxK?#-*M}`9j4rGZ!_cUv^m1@i57qvtTjJXIF^4La+zdnGtNPPGYuFv#jM*HNlkqk-JAB^{16xuW0M&0UK#7@ zmN;hoRu;$v*&rii)i141q2gO3_Uhu_Nlh`?nC~eFl^_z=CUL=fC)fr$kCbFGX?AHy zL*H$TvtGvZZ!)$MEpg0v?bzAFgDj9q&FVxHH#TBEgX{v6jS!h-#grS1#Pi%khYr1r zrz<_H1k@$;HldU-U6w{kL!aq8j~2^VKJQo@#>iM1Gh;^v$fDoII;9r1Mx>;eY63+z zLh<;}*dX_-RM$3DFhflKDe?>cC;26>=7~#>Ou$uQT%`J=w5j#)5~C?;=o@{cuefCT z&KPt&c5IB1u`*`Hjtn$CuaT#OQiw=uk<9#2kaKOuy$KF#YHIp(QP6VUv?mJt18y!4 zp@1q{p~^Ra3@-fd^W582H*MKq7)$d9_9WA%#>U3Q(#M&$uj;0BK1VH%5{J~hMw|*1 zmq-W|;bPX==R#n~`VTYOu2n)o(+3S2bTlta6Xo3~SSgBJD+>KcNo99Q<|9`m^gimK zF6)*)Vlx+Q(WbQhm(qtXT1!KpTx&z0={sX!ER3mUabhekk%$MFwr3KJ%mkB9z|GT^ zN+z{TU4#<+3DW`+tS*t*;|HSTn*_g*%;zyt{0o9t3221~Z_B^$$-f^6*#MvU+j_w| zuH_!?r4A0}rcUbS30>QkA&g^blr;2_zS3vakEhsQ?yYCdy~~tyqm?gbZI29Bc6<{>FEfAO{N$a_)D@($$u2Tb}}@ zPcCWHO)&<>QX@{43&QrTl1nCLYDs@tE8-WA64~NOhGR&D(u18Tvsx_Ia=GaG&bvq5 z5_ReZcG{v%+NKZm#U+hzZED2ni@Di7CT5eQsSHn9k<1?6Kg zAOgVU0R2DTaShjU5BE|Bbx|jE(*|wPCT-J)8fj8gTr%MrP#SK6;FO6t=2Wl*#7{~r zECj9vFD)!?oO_M4>L~q;A@vE!w1Q*FDuplfvQ>$|aQ&3(J7Qu@WdB zU^VhVzvo)+;a(+*OO_g8`gl?0`s8u}8C>|^yCmtiWch!NujPL5=uKh(0000KNI#oa%pb&jV}6YTuHfV zIYhey_GY)3p>41XtTN!fbX%2g9-F0MWSz-96WbL^J|49OmQ1P}v1&Lh6)URLu&<+YzJ6rLMs+iX0;iCB) zzG-D(2grdQvj#Z*c$WoK0AhrBYNb;-P0nkIWabQTG;~ikA|k?uHijKf7CQg~5P6W< z0TqMgMQa<_)y{H}|Ek0xN`j^jTP4mP+_AyeWyTIg@_Sway$+2&K7M|;k2^&}DTsog zB(ZBhFw){KrV}TmV=9k<0bKYVFQqCjKx-EaS@CygB0xK*11=a+WOn8^>&$SAm|nA4 zf({1oZpGh?DW=~dLk@8Z9Mp2mQcHV_c;=w1&C%;Gpmn3`y81jR+15w-hjfSBuvIY! zrT}#yw69#Xa(eA}r8_TaHH6A2pnE0$H5=foj+1U*tvAA%AB|<&DJuJ*zrSCQgoH!^ zXn<^2phg;({pr@waZ0|vQW=?<&!6Y_u@2yv7`VCpUIRylU1*ctiwPoyU(^q@@`M2ndkrV2c8q`sKf*kzD7=@dtqkiHYanr))8N zF`2Yg7QMW@lvPz*eaffzNEjGm3YFrxY!q1oj1`rX?s=G*SCwsTOLbH>v~l|x!`GUY zfD6cWW!>SITz^^^A$@>uY1@`->R?E!kvA?CpP|+qE6}v+-del6x5tkq-%Jc|v@#Q+ zU501{GKs}07CzO`(4gAF0Lpcv78VSxMV?;u=iuYvN!o)k_@ORvxdAYt*J?Pk7$L^` z4AFFt3FX5G&%HlvkLC9b4ZRpE@DU)Eb9bR{l+eTWWPV{}+G8zJ0Y`nK;(_90Lu2X1 zgBYc~aT-d$e(l^IFC3qnD~Y#coVBPoSXRI(qrvhc&d$gv!6PC9Z_`QCB&|ksVyKLL zpVz%nQ^ThxgpFk3?rIN@78VrzMWfO89Y##T=}TP*qM8O^OmMOp=XUSj0J4cBc*sz%V5!P(R8&vzyeG41I)(8#`9_; z)$eYJyYidMsKImM^gibW$KWC+);?}gUX2(hxWW3zs#s36?g*=h2- z7G)WP6ohF1b&+iw!mhh&*hQe+GaeqbF3pNJ*4!FHG0e0b*8 zyySx3=K4{N%G^u2Hk<#5?yMbsGH6)Qu7!Ne&cT81D_3%dxkzM}=9vhj5ldtfii?Xg zp>7ufiG#AT=(pV@HfwIzs~Z{`AkE2ryRwRf&ctwwmMjTh)6@0-?fJ$^yVL87gQ&+# zp7Nqs{sMz`qW6XxSS}iCkLc0a5CJ_!hJ=WysP2J7@j z#^+NdSmO6MFYsf063f=`{j(Alxlhq{+=WLiXofP$yuH3$+pBC(84it%e6YXVZd^4S zPQpU&%$T!vvJ&>t{dcGz_-mfxzx!5XF*^!kqjbJ#tc>N$3l;A~&hYeYxb$z1NsY3| z$UNjrz5K(Mtq}&|!DfrJ^Y$1#OXB_R;UhRJozOSuG|92-XE3N_1)@l=+AM^bLo(O* zR7EXEO22A&w)X8wFO{*t^zGGF?%MurZIJzv@0t2%ytE}JF?uk(SJQY4I%IXG_p4=n zJ8<*)f5{sy>X9I>p%>Jv#l_*Y&IX z^>ZDapBt_@TU1rQdM5*itZH#Plr=9!?dLE{rv|jMl~&i*PL_PSs;?-curePzT7A|T zSiV^DIqLt80s!4oicC@aQ+LU33!!xVUGrU8a4F*YwqH4W;O_f-T#0AOOJShYY`(#s z@m|#rL>O!^wFnbBM5V4SIR!;07~NW)pL8dw>ZisKPR!hde+}k2D1o;tI{@$a^-H(R zpq|U*4fm@Ga;a4oH@%OKC@3hje|X#}jd=y6L)qBbKVuLZ9y>Q1_6-i|SQyB-tSgVJ z|4c|o@Ui0h?y@_H81MMImHUB_MakQ@R5)bIYkgw_cLZ`2|4t}9t?1r-Q`UpjAd=a# z97Qph!rR?V!{t^b=TQccw|G~BPfy2A7gJ?HO}jGyMLQ? z&DY*2Di$u}-SN@x?mN5rhT-YTkox+1!3clzRasQLn{oTu?d7t0ZzKiJWR#F;7bZS6 zla#|kvnxkQNy#(ImoHzMZjEFI*<<5V2jG&i|FI~P(Lz?cY#@E_+m6zYIg6gi2y0f+ zLa!bTbMo>MSW~hlS5*nDZ*DU44Ef+Rb+5>p=6lY#o0{hT*APwqrVPg-cRcrlw`P?S z6Yrd@=AY>KgA|E#{It$sSQMivA2+wWzJB`hW#9$NXfSN>p*-3|`g1By80_WlI@@VTBIr`Qh@1uHA|P<)b# z6tK^tqp0{-S9_xhxToYp@t?C^u@{ktgoOM7qtp9XP^>Vn;1H;Sa6AUU$jjB>;TqHGNWsE;=tsFT@%5`mJ zZ4~56V7syr&cv#Rk9{Obj%&?NR#Q^wUa^tm;=;7As6s=a{SRqAGgBEA9u;+&;ak8u zM05hQgSDBCPX=!-N?~$f@)xoQ1Y)MfGKzVR>+0$XgKAP;Qxko(}+uJT)i`h>@L!+$umUN31XY`Ddhle~`{s9q@l7j;u7)!!e$}DydjG!146hA) zb#=AMX{D=m8jp(anVntP^hIC~`!(`tsqNoS>#jol-Fdw80%DYvl{>z9o&9UX6yDd* z_I%r}4_iHdkAGlK@dII3;o$mW-m%(pkdj?AQqXZpij|cWlP64@))!_r4sE-?yY{fH z8&t8kFW;8eP*FM23s683A$rC2iRtK~E|)*Zn25tyWI?!C2970tEZ@E3Vpq=~FQ!S* zYxAzx+I-MyII8WUHho5O~gh!ubE>Wq{C3g_8QNSX5i0D26i4Ee2{iWT2zR+ zZsHTti!seuO%^}z>pS+}eayllfBXcX7jptWT+c7x)QnSs6z}x(6e9lQ1#SmJF+-W| z9*XM4Hv#v3J$yRR=#RKd&aI1_oSXsk2e+3Kd*@&&DU*}4vkBUa_=~w^WQ?__xWS1T zT5WziXrP3!Bu)P@5a=t)&ddx^P35!vWR&K2eX(+Lbrxj*SuH(?Bga$jg)S2LV99%r zw^MX$G#CBd@7lL!+&G2rO=NgDPHy{`acenrpqs>^^Pd@pku*X1Iz>r5hvo0Q8O_Xa zc;}a!kh85(s%$K9Jwj-sDwN_F(*(P>B6kjtkB{4H#zuPrOG-;KF>Z1vFW3`tYpsUO z@(q&WWbUZX&(DMGDftY;9Tr`Wt8Tc zVHXxA`=?!AqpM82k5{AkA2f)&tcPz`$l!_4#!Rw(L`L;8do{sJQj?j0|Ge&W@~=U` zhwcc3hGYnIf|DvQPu3|+N=S(Gq3`k2j+TGL@9R^pyevwRHR%PzihduyA-aPBIcf`2 zU*&A2({(Ha@=y*w1w6=hoBVwtf5 zeSs#I-b#D<+_Am$9HIEE%FAWw2@4IqLSDG z8yZB{x3+|*47u1_x&fpw3`G&3cqoMa@so^8-zxV6k^7z z3x!)V0s-}G__UFadev}$BFA%sfp09^L5hVt^rL>gR<+gq3D`8HqM2%+znYqwe!xjC zXdNFP=j7&2^kZ_YosG}Q;iLAj5TGVU++x&7(J z&*bKdE$`tv!i)i#+7e_!Q_(OBjS3Uc^#E>CK{c}SQ&WaO>Sx3;>AcoZArX$bZ#x^L(IF`E$oY#+A1fy4d7gh#MgE)}7VqbX|pB z+y&LV&>cp!R{6n_w6GUbu8&?W9TNU@sf_??6|X%7!1x_E3`&Bf!^5E&76l8uCU zKp=Bi^H|ClgXWa$FS5~LQA<}hw5O*hV106G3N9`E=Hs8YxOISXtwDKLJ`VnKk={4< z_6P5gJ3M_=pANZ~{Vo|2h1QW+qpAUrwERzJz|+2u*0r)Q!(1$;I*5rRHQBzanyHvU6#R!6u z_BziuOwrfnx|W2qx2QZZVgP)D1v@yO1OCjV+DN?0pxpE31U>#m^I`7yOHhdX(J6gF zc%fJRYX@hdiYd*;-^S2z0Urnp{wM!829lo~sDsoWWbH`BC{`U%;7L*lIlK%fsbj##SgWT>!Zf(tj^Zpprxf1a99xQbXQH`=`2zWLNBkQAbpJnp@c z1Czpu7JkE~fHt32#xs6CKElW|(C&dK<0))m$koAiqx&re3X&W!kJG?;KuW4*WaR(& zG2_-*YB*OwN1_YY-(G%y45Up5g&(U^x^~Oy z$WBCF<-wn>+ih6}Yq8itR@Ax{@@J5Jbgm&2s;pj*r7X@L4;?!Lu6( zK!Y=$Zpq;Zphakh|AI7L9_J(0(+^(6^xJ$YDk@on8{XN(LRbMe>1DoaLIE=s){|Ai-OWyzh diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 6e3b51dae5f8fce490e9138fcf43e1ca80bc81fe..6b18da927a0b5cf072c850df5627a4eb63d64dce 100644 GIT binary patch literal 5140 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 qaP?vSmGS)X1MM9DDV#^>5{ZPaQ^``IgA1T literal 6306 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 Ns^WWvDmnAe{|Bqg>7@Vw literal 8491 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 J#b}ej{|EO+9K`?t diff --git a/libs/candybar/src/main/res/xml/drawable.xml b/app/src/main/res/values/ic_launcher_background.xml similarity index 52% rename from libs/candybar/src/main/res/xml/drawable.xml rename to app/src/main/res/values/ic_launcher_background.xml index 8f3c292..b15a8af 100644 --- a/libs/candybar/src/main/res/xml/drawable.xml +++ b/app/src/main/res/values/ic_launcher_background.xml @@ -1,4 +1,4 @@ - 1 + #1A1A1A \ No newline at end of file diff --git a/build.gradle b/build.gradle index c5c10e5..07792b4 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.0.4' + classpath 'com.android.tools.build:gradle:7.1.2' } } diff --git a/libs/.gitignore b/libs/.gitignore deleted file mode 100644 index 98c9d03..0000000 --- a/libs/.gitignore +++ /dev/null @@ -1,165 +0,0 @@ -# Created by https://www.gitignore.io/api/android,intellij,osx,gradle,java - -### Android ### -# Built application files -*.apk -*.ap_ - -# Files for the ART/Dalvik VM -*.dex - -# Java class files -*.class - -# Generated files -bin/ -gen/ -out/ - -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Proguard folder generated by Eclipse -proguard/ - -# Log Files -*.log - -# Android Studio Navigation editor temp files -.navigation/ - -# Android Studio captures folder -captures/ - -# Intellij -*.iml -.idea/workspace.xml -.idea/tasks.xml -.idea/libraries - -# Keystore files -*.jks - -# External native build folder generated in Android Studio 2.2 and later -.externalNativeBuild - -### Android Patch ### -gen-external-apklibs - - -### Intellij ### -# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm -# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 - -# User-specific stuff: - -# Sensitive or high-churn files: -.idea/dataSources/ -.idea/dataSources.ids -.idea/dataSources.xml -.idea/dataSources.local.xml -.idea/sqlDataSources.xml -.idea/dynamic.xml -.idea/uiDesigner.xml -.idea/ -.idea/* -.idea - -# Gradle: -.idea/gradle.xml - -# Mongo Explorer plugin: -.idea/mongoSettings.xml - -## File-based project format: -*.iws - -## Plugin-specific files: - -# IntelliJ -/out/ - -# mpeltonen/sbt-idea plugin -.idea_modules/ - -# JIRA plugin -atlassian-ide-plugin.xml - -# Crashlytics plugin (for Android Studio and IntelliJ) -com_crashlytics_export_strings.xml -crashlytics.properties -crashlytics-build.properties -fabric.properties - -### Intellij Patch ### -# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 - -# *.iml -# modules.xml -# .idea/misc.xml -# *.ipr - - -### OSX ### -*.DS_Store -.AppleDouble -.LSOverride - -# Icon must end with two \r -Icon -# Thumbnails -._* -# Files that might appear in the root of a volume -.DocumentRevisions-V100 -.fseventsd -.Spotlight-V100 -.TemporaryItems -.Trashes -.VolumeIcon.icns -.com.apple.timemachine.donotpresent -# Directories potentially created on remote AFP share -.AppleDB -.AppleDesktop -Network Trash Folder -Temporary Items -.apdisk - - -### Java ### - -# BlueJ files -*.ctxt - -# Mobile Tools for Java (J2ME) -.mtj.tmp/ - -# Package Files # -*.jar -*.war -*.ear - -# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml -hs_err_pid* - - -### Gradle ### -.gradle -/build/ - -# Ignore Gradle GUI config -gradle-app.setting - -# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) -!gradle-wrapper.jar - -# Cache of project -.gradletasknamecache - -# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 -# gradle/wrapper/gradle-wrapper.properties -debug/ -release/ \ No newline at end of file diff --git a/libs/CHANGELOG.md b/libs/CHANGELOG.md deleted file mode 100644 index 44a262f..0000000 --- a/libs/CHANGELOG.md +++ /dev/null @@ -1,217 +0,0 @@ -# v3.13.0 -- Added support for previewing Kustom presets -- Fixed `Broken drawable` in bug reporter - -# v3.12.1 -- Use English date in icon requests' ZIP name -- Fix issue with launcher apply -- Upgraded to OneSignal 4 - -# v3.12.0 -- Update Gradle and AGP -- Added Hyperion launcher -- Use CRLF in email related strings -- Added support to search wallpapers - -# v3.11.7 -- Fixed crash -- Added basic Kustom support -- Improved themes - -# v3.11.6 -- Fixed icon search not working - -# v3.11.5 -- Fixed icon bookmarking not working when `show_icon_name` is set to false - -# v3.11.4 -- Added support for bookmarking icons - -# v3.11.1 -- Fixed link not working in markup - -# v3.11.0 -- Internal code refactorings -- Removed deprecated stuffs -- Now uses Material Components - -# v3.10.1 -- Fixed in-app billings -- Fixed icon request limit not resetting when license checker is enabled - -# v3.10.0 -- Updated Gradle wrapper and plugin -- Migrated away from JCenter -- Added Hungarian language -- Now launches clock app when tapped on the clock widget -- Updated to In-app Billing v3 -- Added `System default` icon shape -- Fixed icon shape of the random icon viewer -- Improved wallpaper sorting -- Update FAQs - -# v3.9.2 -- Add Ukrainian language -- Updated translations -- Updated Gradle wrapper and plugin -- Now hides home title if it's empty -- Upgrade storage system to support Android 11 -- Now targets Android 11 - -# v3.9.1 -- Fix Gmail not showing up when sending icon request in Android 11 - -# v3.9.0 -- Fix new wallpaper count badge -- Add Indonesian language -- Added option to set default theme -- Now shows CandyBar version in the About section -- Remove duplicates in icon search, fixed back press behaviour -- Now sorts wallpapers in ascending order -- Fixed locale not applying after a relaunch -- Added configuration to customize email body -- Updated translations - -# v3.8.1 -- Brought back support for Android Jelly Bean -- Fixed issue with premium request email -- Minor fixes - -# v3.8.0 -- Rewrote configuration JSON checkers -- Added option to use different email, method or Arctic API key - for regular and premium icon requests -- Fixed Flick Launcher applier -- Added support for auto light-dark mode -- Fixed issues with icon requests -- Fixed the wallpaper loading issue -- Updated translations -- Improved documentation comments -- Improved wiki documentation -- Lots of minor fixes - -# v3.7.4 -- Updated translations -- Fix unable to disable regular icon request -- Fix error when building icon requests on some devices - -# v3.7.2 -- Fix icon name generation - -# v3.7.0 -- Added Czech language -- Updated translations -- Updated Gradle -- Improved Adaptive Icon support -- Bumped minSdk to 21. Now the minimum supported Android version is 5.0 (Lollipop) -- Minor design refreshment -- Migrated to Glide -- Improved fast scrollbar for icons section -- Removed UIL completely -- Now properly fixes icon name in Icon Requests -- Redesigned Apply section -- Redesigned Wallpaper section -- Added Niagara and Square launcher -- Fixed Microsoft launcher apply behaviour - -# v3.6.3 -- Updated Gradle Plugin. -- Option to hide missing app count. -- Fixed new wallpaper count badge. -- Updated translations. -- Added new translations. - -# v3.6.2 -- Support for customizing background color of navigation view header. -- Fixed white status bar showing on pre Android Oreo devices. -- Fixed proguard error. -- Fixed icons being count even when automatic icon counting is disabled. -- Now app names in icon request are normalized, Ex. `ů` is normalized to `u`. - -# v3.6.0 -- Better icon generation for requests. -- Improved icon preview. -- Added support for [Arctic Manager](https://arcticmanager.com). -- Updated Gradle plugin. -- Removed app lock. -- Updated translations. -- Minor Fixes. - -# v3.5.0-beta.6.7 -- Fixed Icon Request Limit not resetting after update. -- Updated Gradle Versions. -- Fixed Crash on Tablets. -- Added Better Support for OnePlus Launcher. -- Added BlackBerry Launcher. -- Added Flick Launcher. - - -# v3.5.0-beta.6.6 -- Fix wallpaper download issue with Android 10. -- Show Loader while icon are being loaded. -- Minor Fixes - -# v3.5.0-beta.6.5 -- Fix Playstore check. -- New Outline Styled Card. -- Hide `Reset Tutorial` in Settings if `show_intro` disabled. -- Minor Fixes. -- Fix Statusbar Color. - -# v3.5.0-beta.6.4 -- Enabled MultiDex -- Support for Custom Drawable name, like this: -```xml - -``` -- Fixed Icon Search -- Support for Android 10 -- Lots of Fixes - -# v3.5.0-beta.6.3 -- Now you can exclude launchers. -- Fixed Many Small Bugs. - - -# v3.5.0-beta.6.1 -- Added support for Adaptive Icons. -- Updated Gradle. -- Fixed error when rebuilding Premium Request. -- New NavigationView. -- Updated Translations. - -# v3.5.0-beta.6 -- Added Ability to request app from non-mailing apps. -- Added option to Disable Icon Request from JSON stored in Cloud. -- Now shows Request Available, Used even for Regular Requests. -- Option to Close app if installed outside of Playstore. -- Option to Enable/Disable AppUpdater and Checking JSON Before Requesting. -- Uses New Muzei API. -- Now you can set Your Own Email Subject for Icon Requests. -- Now it Loads Right Icon and Name from ComponentName instead of PackageName. -- Fix to AndroidManifest.xml. -- Updated Translators List. -- Updated Italian Translations by Ciao Studio. -- Added POCO, Posidon, Pixel Launcher. Minor Fixes to Old Launchers. -- Added Support for Desktop Shortcuts(Sesame Shortcuts too). -- Added Boolean to Disable Intros. -- Fix Crash on Pre-Oreo Devices. -- Better Stability. -- Added Analog Clock Widget. - -# v3.5.0-b5 -- Updated Gradle Distribution and Gradle Plugin -- Added Adaptive Icon Generation for Requests -- Support for Android P -- Use of New JSON Format for Wallpaper -- Added Lawnchair Launcher to Apply Section -- Added Turkish and Traditional Chinese Languages -- Support for OneSignal Notifications -- Support for [AppUpdater](https://github.com/javiersantos/AppUpdater) -- Option to Edit Links of "Rate and Review" and "Share". Now You can Even Remove Them -- Migrate to AndroidX -- Improved Adaptive Icon Generation -- Improved Icon Request App Image Quality -- Update CandyBar Translators List -- Added Support for Linking "Privacy Policy" and "Terms and Conditions" -- Now shows from where the app installed in request diff --git a/libs/LICENSE b/libs/LICENSE deleted file mode 100644 index 8dada3e..0000000 --- a/libs/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "{}" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright {yyyy} {name of copyright owner} - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/libs/README.md b/libs/README.md deleted file mode 100644 index d2f6b96..0000000 --- a/libs/README.md +++ /dev/null @@ -1,107 +0,0 @@ -# CandyBar -[![JitPack](https://img.shields.io/jitpack/v/github/zixpo/candybar?color=4c1&label=JitPack&style=flat-square)](https://jitpack.io/#zixpo/candybar) -[![Build Status](https://img.shields.io/travis/com/zixpo/candybar?style=flat-square)](https://travis-ci.com/zixpo/candybar) -[![License](https://img.shields.io/github/license/zixpo/candybar?style=flat-square)](/LICENSE) - -Improved version of the original [CandyBar Dashboard](https://github.com/danimahardhika/candybar-library). - -Check out [Blueprint Dashboard](https://github.com/jahirfiquitiva/blueprint/). It's modular and uses new build features. You may like it :D - -This is the library of CandyBar Dashboard. It is only used for development purpose. Use the [sample implementation](https://github.com/zixpo/candybar-sample) for making icon packs. - - - Get it on Google Play - - -
-App screenshots (Click to expand) -

Tip: Click image to enlarge it

-

- Home section - Apply section - Icons section - Bookmarked icons section - Icon request section - Wallpapers section - Wallpaper preview screen - Settings section - FAQs section - About section - Navigation drawer - Dark mode -

-
- -# How to use -Just explore the wiki to get started. -### [Wiki ➜](https://github.com/zixpo/candybar-sample/wiki) - -# Features -- License checker -- Apply: 32 launchers -- Icon picker: See all icons -- Icon request - - Regular request: Free to request - - Premium request: Pay to request - - Support for [Arctic Request Manager](https://arcticmanager.com) -- Cloud based wallpaper - - Preview wallpaper - - Apply wallpaper - - Download wallpaper -- Settings - - Clear cache - - Switch themes - Auto/Light/Dark - - Restore purchases: Restore premium requests after reinstalling -- Frequently asked questions with search -- About -- Donation -- Changelog: Shown on every update -- Muzei live wallpaper -- Localization: Supports many languages -- Support for OneSignal notifications -- Check for updates -- Control your dashboard remotely with configuration JSON - -# What's new? -Check out the [changelog](/CHANGELOG.md) to find out what's new. - -# Translation -Help us translate CandyBar in many other languages. [Translate CandyBar](https://crowdin.com/project/candybar). - -# Need help? -Need help in something or maybe you have some question, just head out -to [Q&A Discussions](https://github.com/zixpo/candybar/discussions/categories/q-a). -Try to find your answer there or ask a new question if you can't find your answer. - -# Support me -I am doing this work for free, but you can show your appreciation -and support me by donating. It would keep me motivated to work on -the dashboard. - -[![ko-fi](https://www.ko-fi.com/img/githubbutton_sm.svg)](https://ko-fi.com/J3J7WR0M) - -You can also donate from the [CandyBar App](https://play.google.com/store/apps/details?id=com.candybar.dev) published on Google Play Store. - -### Social - -[![Twitter Follow](https://img.shields.io/twitter/follow/sarsamurmu?color=%231da1f2&label=Follow%20on%20Twitter&logo=twitter&style=for-the-badge)](https://twitter.com/sarsamurmu)\ -[![GitHub Follow](https://img.shields.io/github/followers/sarsamurmu?color=%23dfdfdf&label=Follow%20on%20GitHub&logo=github&style=for-the-badge)](https://github.com/sarsamurmu) - -**Thanks! Have fun with the dashboard 😉** - -# License -``` -Copyright (c) 2014-2016 Dani Mahardhika - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -``` diff --git a/libs/build.gradle b/libs/build.gradle deleted file mode 100644 index bda50a4..0000000 --- a/libs/build.gradle +++ /dev/null @@ -1,36 +0,0 @@ -buildscript { - repositories { - mavenCentral() - google() - } - - dependencies { - classpath 'com.android.tools.build:gradle:7.0.4' - } -} - -allprojects { - repositories { - mavenCentral() - google() - maven { url 'https://jitpack.io' } - maven { url 'https://maven.google.com' } - } - - rootProject.ext { - def major = 3 - def minor = 13 - def patch = 0 - - VersionCode = major * 10000 + minor * 100 + patch - VersionName = "$major.$minor.$patch" - - MinSdk = 16 - TargetSdk = 30 - CompileSdk = 30 - } -} - -task clean(type: Delete) { - delete rootProject.buildDir -} diff --git a/libs/candybar/build.gradle b/libs/candybar/build.gradle deleted file mode 100644 index 8b2e1d7..0000000 --- a/libs/candybar/build.gradle +++ /dev/null @@ -1,114 +0,0 @@ -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -buildscript { - repositories { - mavenCentral() - maven { url 'https://jitpack.io' } - } -} - -plugins { - id 'com.android.library' - id 'maven-publish' -} - -project.afterEvaluate { - publishing { - publications { - release(MavenPublication) { - from components.release - } - } - } -} - -android { - compileSdkVersion rootProject.ext.CompileSdk - - defaultConfig { - minSdkVersion rootProject.ext.MinSdk - targetSdkVersion rootProject.ext.TargetSdk - vectorDrawables.useSupportLibrary true - multiDexEnabled true - buildConfigField 'String', 'VERSION_NAME', "\"${rootProject.ext.VersionName}\"" - } - - buildTypes { - release { - minifyEnabled false - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } - - lintOptions { - abortOnError false - disable 'MissingTranslation' - } - - packagingOptions { - exclude 'META-INF/NOTICE' - exclude 'META-INF/LICENSE' - return true - } -} - -dependencies { - implementation project(':libs:extLibs:PreLollipopTransitions') - - api 'androidx.annotation:annotation:1.2.0' - api 'androidx.appcompat:appcompat:1.3.1' - api 'androidx.multidex:multidex:2.0.1' - api 'com.google.android.apps.muzei:muzei-api:3.4.0' - api 'dev.jahir.KustomAPI:api:6369c37' - api 'dev.jahir.KustomAPI:preset:6369c37' - - implementation 'androidx.work:work-runtime:2.5.0' - implementation 'androidx.recyclerview:recyclerview:1.2.1' - implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0' - implementation 'androidx.palette:palette:1.0.0' - implementation 'com.google.android.material:material:1.3.0' - implementation 'androidx.viewpager2:viewpager2:1.0.0' - - implementation 'com.bluelinelabs:logansquare:1.3.7' - implementation 'androidx.legacy:legacy-support-v4:1.0.0' - annotationProcessor 'com.bluelinelabs:logansquare-compiler:1.3.7' - - implementation 'com.github.bumptech.glide:glide:4.11.0' - annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' - - implementation 'com.squareup.okhttp3:okhttp:4.3.0' - implementation 'com.afollestad.material-dialogs:core:0.9.6.0' - implementation 'com.afollestad.material-dialogs:commons:0.9.6.0' - implementation 'com.mikhaellopez:circularimageview:3.0.2' - implementation 'com.github.chrisbanes:PhotoView:1.3.1' - implementation 'me.grantland:autofittextview:0.2.1' - implementation 'com.github.KeepSafe:TapTargetView:1.9.1' - implementation 'com.github.sarsamurmu:AdaptiveIconBitmap:1.0.0' - implementation 'com.github.zixpo:recycler-fast-scroll:6add4dff39' - - implementation 'com.github.danimahardhika:cafebar:1.3.2' - implementation 'com.github.danimahardhika.android-helpers:core:-SNAPSHOT' - implementation 'com.github.danimahardhika.android-helpers:animation:0.1.0' - implementation 'com.github.danimahardhika.android-helpers:permission:0.1.0' - implementation 'com.github.danimahardhika:DrawMe:4a672e78fc' -} diff --git a/libs/candybar/src/main/AndroidManifest.xml b/libs/candybar/src/main/AndroidManifest.xml deleted file mode 100644 index 2e0f4bb..0000000 --- a/libs/candybar/src/main/AndroidManifest.xml +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarCrashReport.java b/libs/candybar/src/main/java/candybar/lib/activities/CandyBarCrashReport.java deleted file mode 100644 index 94b75ef..0000000 --- a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarCrashReport.java +++ /dev/null @@ -1,103 +0,0 @@ -package candybar.lib.activities; - -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.FileHelper; - -import java.io.File; - -import candybar.lib.R; -import candybar.lib.helpers.DeviceHelper; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.ReportBugsHelper; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class CandyBarCrashReport extends AppCompatActivity { - - public static final String EXTRA_STACKTRACE = "stacktrace"; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - try { - Bundle bundle = getIntent().getExtras(); - if (bundle == null) { - finish(); - return; - } - - LocaleHelper.setLocale(this); - - String stackTrace = bundle.getString(EXTRA_STACKTRACE); - String deviceInfo = DeviceHelper.getDeviceInfoForCrashReport(this); - - String message = getResources().getString(R.string.crash_report_message, getResources().getString(R.string.app_name)); - String emailAddress = getResources().getString(R.string.regular_request_email).length() > 0 - ? getResources().getString(R.string.regular_request_email) - // Fallback to dev_email - : getResources().getString(R.string.dev_email); - - new MaterialDialog.Builder(this) - .title(R.string.crash_report) - .content(message) - .cancelable(false) - .canceledOnTouchOutside(false) - .positiveText(R.string.crash_report_send) - .negativeText(R.string.close) - .onPositive((dialog, which) -> { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress}); - intent.putExtra(Intent.EXTRA_SUBJECT, "CandyBar: Crash Report"); - - prepareUri(deviceInfo, stackTrace, intent); - - startActivity(Intent.createChooser(intent, - getResources().getString(R.string.app_client))); - dialog.dismiss(); - }) - .dismissListener(dialogInterface -> finish()) - .show(); - } catch (Exception e) { - finish(); - } - } - - private void prepareUri(String deviceInfo, String stackTrace, Intent intent) { - File crashLog = ReportBugsHelper.buildCrashLog(this, stackTrace); - if (crashLog != null) { - Uri uri = FileHelper.getUriFromFile(this, getPackageName(), crashLog); - if (uri != null) { - intent.putExtra(Intent.EXTRA_TEXT, deviceInfo + "\r\n"); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - return; - } - } - - intent.putExtra(Intent.EXTRA_TEXT, deviceInfo + stackTrace); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarMainActivity.java b/libs/candybar/src/main/java/candybar/lib/activities/CandyBarMainActivity.java deleted file mode 100644 index 394d3d1..0000000 --- a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarMainActivity.java +++ /dev/null @@ -1,760 +0,0 @@ -package candybar.lib.activities; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.res.ColorStateList; -import android.content.res.Configuration; -import android.graphics.Color; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.WindowManager; -import android.webkit.URLUtil; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.ActionBarDrawerToggle; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.app.AppCompatDelegate; -import androidx.appcompat.graphics.drawable.DrawerArrowDrawable; -import androidx.appcompat.widget.Toolbar; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.core.view.GravityCompat; -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.SoftKeyboardHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.danimahardhika.android.helpers.permission.PermissionCode; -import com.google.android.material.navigation.NavigationView; - -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.atomic.AtomicBoolean; -import java.util.concurrent.atomic.AtomicReference; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.fragments.AboutFragment; -import candybar.lib.fragments.ApplyFragment; -import candybar.lib.fragments.FAQsFragment; -import candybar.lib.fragments.HomeFragment; -import candybar.lib.fragments.IconsBaseFragment; -import candybar.lib.fragments.PresetsFragment; -import candybar.lib.fragments.RequestFragment; -import candybar.lib.fragments.SettingsFragment; -import candybar.lib.fragments.WallpapersFragment; -import candybar.lib.fragments.dialog.ChangelogFragment; -import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.ConfigurationHelper; -import candybar.lib.helpers.IntentHelper; -import candybar.lib.helpers.JsonHelper; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.NavigationViewHelper; -import candybar.lib.helpers.PlayStoreCheckHelper; -import candybar.lib.helpers.RequestHelper; -import candybar.lib.helpers.ThemeHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.helpers.WallpaperHelper; -import candybar.lib.items.Home; -import candybar.lib.items.Icon; -import candybar.lib.items.InAppBilling; -import candybar.lib.items.Request; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; -import candybar.lib.services.CandyBarService; -import candybar.lib.tasks.IconRequestTask; -import candybar.lib.tasks.IconsLoaderTask; -import candybar.lib.utils.Extras; -import candybar.lib.utils.listeners.RequestListener; -import candybar.lib.utils.listeners.SearchListener; -import candybar.lib.utils.listeners.WallpapersListener; -import candybar.lib.utils.views.HeaderView; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public abstract class CandyBarMainActivity extends AppCompatActivity implements - ActivityCompat.OnRequestPermissionsResultCallback, RequestListener, - SearchListener, WallpapersListener { - - private TextView mToolbarTitle; - private DrawerLayout mDrawerLayout; - private NavigationView mNavigationView; - - private Extras.Tag mFragmentTag; - private int mPosition, mLastPosition; - private ActionBarDrawerToggle mDrawerToggle; - private FragmentManager mFragManager; - - private boolean mIsMenuVisible = true; - private boolean prevIsDarkTheme; - - public static List sMissedApps; - public static List sSections; - public static Home sHomeIcon; - public static int sInstalledAppsCount; - public static int sIconsCount; - - private ActivityConfiguration mConfig; - - @NonNull - public abstract ActivityConfiguration onInit(); - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - final boolean isDarkTheme = prevIsDarkTheme = ThemeHelper.isDarkTheme(this); - - final int nightMode; - switch (Preferences.get(this).getTheme()) { - case LIGHT: - nightMode = AppCompatDelegate.MODE_NIGHT_NO; - break; - case DARK: - nightMode = AppCompatDelegate.MODE_NIGHT_YES; - break; - default: - nightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; - } - AppCompatDelegate.setDefaultNightMode(nightMode); - - LocaleHelper.setLocale(this); - super.setTheme(R.style.CandyBar_Theme_App); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); - - mDrawerLayout = findViewById(R.id.drawer_layout); - mNavigationView = findViewById(R.id.navigation_view); - Toolbar toolbar = findViewById(R.id.toolbar); - mToolbarTitle = findViewById(R.id.toolbar_title); - - toolbar.setPopupTheme(R.style.CandyBar_Theme_App); - toolbar.setTitle(""); - setSupportActionBar(toolbar); - - mFragManager = getSupportFragmentManager(); - - initNavigationView(toolbar); - initNavigationViewHeader(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); - getWindow().clearFlags( - WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION | WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); - getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.navigationBar)); - getWindow().setStatusBarColor(ContextCompat.getColor(this, R.color.colorPrimaryDark)); - mDrawerLayout.setStatusBarBackground(R.color.colorPrimaryDark); - int visibilityFlags = 0; - if (ColorHelper.isLightColor(ContextCompat.getColor(this, R.color.colorPrimaryDark)) && - Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) - visibilityFlags |= View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR; - if (ColorHelper.isLightColor(ContextCompat.getColor(this, R.color.navigationBar)) && - Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - visibilityFlags |= View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR; - getWindow().getDecorView().setSystemUiVisibility(visibilityFlags); - } - - try { - startService(new Intent(this, CandyBarService.class)); - } catch (IllegalStateException e) { - LogUtil.e("Unable to start CandyBarService. App is probably running in background."); - } - - //Todo: wait until google fix the issue, then enable wallpaper crop again on API 26+ - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - Preferences.get(this).setCropWallpaper(false); - } - - mConfig = onInit(); - - mPosition = mLastPosition = 0; - if (savedInstanceState != null) { - mPosition = mLastPosition = savedInstanceState.getInt(Extras.EXTRA_POSITION, 0); - onSearchExpanded(false); - } - - Bundle bundle = getIntent().getExtras(); - if (bundle != null) { - int position = bundle.getInt(Extras.EXTRA_POSITION, -1); - if (position >= 0 && position < 6) { - mPosition = mLastPosition = position; - } - } - - IntentHelper.sAction = IntentHelper.getAction(getIntent()); - if (IntentHelper.sAction == IntentHelper.ACTION_DEFAULT) { - setFragment(getFragment(mPosition)); - } else { - setFragment(getActionFragment(IntentHelper.sAction)); - } - - checkWallpapers(); - new IconRequestTask(this).executeOnThreadPool(); - new IconsLoaderTask(this).execute(); - - /* - The below code does this - #1. If new version - set `firstRun` to `true` - #2. If `firstRun` equals `true`, run the following steps - #X. Play store check - - Enabled: Run check, when completed run #Y - - Disabled: Run #Y - #Y. License check - - Enabled: Run check, when completed run #Z - - Disabled: Run #Z - #Z. Reset icon request limit, clear cache and show changelog - */ - - if (Preferences.get(this).isNewVersion()) { - // Check licenses on new version - Preferences.get(this).setFirstRun(true); - } - - final Runnable onNewVersion = () -> { - ChangelogFragment.showChangelog(mFragManager); - File cache = getCacheDir(); - FileHelper.clearDirectory(cache); - }; - - if (Preferences.get(this).isFirstRun()) { - final Runnable checkLicenseIfEnabled = () -> { - final Runnable onAllChecksCompleted = () -> { - Preferences.get(this).setFirstRun(false); - onNewVersion.run(); - }; - - onAllChecksCompleted.run(); - }; - - if (Preferences.get(this).isPlayStoreCheckEnabled()) { - new PlayStoreCheckHelper(this, checkLicenseIfEnabled).run(); - } else { - checkLicenseIfEnabled.run(); - } - return; - } - - if (mConfig.isLicenseCheckerEnabled() && !Preferences.get(this).isLicensed()) { - finish(); - } - } - - @Override - protected void onPostCreate(Bundle savedInstanceState) { - super.onPostCreate(savedInstanceState); - mDrawerToggle.syncState(); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (prevIsDarkTheme != ThemeHelper.isDarkTheme(this)) { - recreate(); - return; - } - LocaleHelper.setLocale(this); - if (mIsMenuVisible) mDrawerToggle.onConfigurationChanged(newConfig); - } - - @Override - protected void attachBaseContext(Context newBase) { - LocaleHelper.setLocale(newBase); - super.attachBaseContext(newBase); - } - - @Override - protected void onNewIntent(Intent intent) { - int action = IntentHelper.getAction(intent); - if (action != IntentHelper.ACTION_DEFAULT) - setFragment(getActionFragment(action)); - super.onNewIntent(intent); - } - - @Override - protected void onSaveInstanceState(Bundle outState) { - outState.putInt(Extras.EXTRA_POSITION, mPosition); - Database.get(this.getApplicationContext()).closeDatabase(); - super.onSaveInstanceState(outState); - } - - @Override - public void onBackPressed() { - if (mFragManager.getBackStackEntryCount() > 0) { - clearBackStack(); - return; - } - - if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) { - mDrawerLayout.closeDrawers(); - return; - } - - if (mFragmentTag != Extras.Tag.HOME) { - mPosition = mLastPosition = 0; - setFragment(getFragment(mPosition)); - return; - } - super.onBackPressed(); - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, - @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == PermissionCode.STORAGE) { - if (grantResults.length > 0 && - grantResults[0] == PackageManager.PERMISSION_GRANTED) { - recreate(); - return; - } - Toast.makeText(this, R.string.permission_storage_denied, Toast.LENGTH_LONG).show(); - } - } - - - @Override - public void onRequestSelected(int count) { - if (mFragmentTag == Extras.Tag.REQUEST) { - String title = getResources().getString(R.string.navigation_view_request); - if (count > 0) title += " (" + count + ")"; - mToolbarTitle.setText(title); - } - } - - - @Override - public void onRequestBuilt(Intent intent, int type) { - if (type == IntentChooserFragment.ICON_REQUEST) { - if (RequestFragment.sSelectedRequests == null) - return; - - if (Preferences.get(this).isPremiumRequest()) { - int count = Preferences.get(this).getPremiumRequestCount() - RequestFragment.sSelectedRequests.size(); - Preferences.get(this).setPremiumRequestCount(count); - if (count == 0) { - } - } else { - if (getResources().getBoolean(R.bool.enable_icon_request_limit)) { - int used = Preferences.get(this).getRegularRequestUsed(); - Preferences.get(this).setRegularRequestUsed((used + RequestFragment.sSelectedRequests.size())); - } - } - - if (mFragmentTag == Extras.Tag.REQUEST) { - RequestFragment fragment = (RequestFragment) mFragManager.findFragmentByTag(Extras.Tag.REQUEST.value); - if (fragment != null) fragment.refreshIconRequest(); - } - } - - if (intent != null) { - try { - startActivity(intent); - } catch (IllegalArgumentException e) { - startActivity(Intent.createChooser(intent, - getResources().getString(R.string.app_client))); - } - } - - CandyBarApplication.sRequestProperty = null; - CandyBarApplication.sZipPath = null; - } - - - @Override - public void onWallpapersChecked(int wallpaperCount) { - Preferences.get(this).setAvailableWallpapersCount(wallpaperCount); - - if (mFragmentTag == Extras.Tag.HOME) { - HomeFragment fragment = (HomeFragment) mFragManager.findFragmentByTag(Extras.Tag.HOME.value); - if (fragment != null) fragment.resetWallpapersCount(); - } - } - - @Override - public void onSearchExpanded(boolean expand) { - Toolbar toolbar = findViewById(R.id.toolbar); - mIsMenuVisible = !expand; - - if (expand) { - int color = ContextCompat.getColor(this, R.color.toolbarIcon); - toolbar.setNavigationIcon(DrawableHelper.getTintedDrawable( - this, R.drawable.ic_toolbar_back, color)); - toolbar.setNavigationOnClickListener(view -> onBackPressed()); - } else { - SoftKeyboardHelper.closeKeyboard(this); - ColorHelper.setStatusBarColor(this, Color.TRANSPARENT, true); - if (CandyBarApplication.getConfiguration().getNavigationIcon() == CandyBarApplication.NavigationIcon.DEFAULT) { - mDrawerToggle.setDrawerArrowDrawable(new DrawerArrowDrawable(this)); - } else { - toolbar.setNavigationIcon(ConfigurationHelper.getNavigationIcon(this, - CandyBarApplication.getConfiguration().getNavigationIcon())); - } - - toolbar.setNavigationOnClickListener(view -> - mDrawerLayout.openDrawer(GravityCompat.START)); - } - - mDrawerLayout.setDrawerLockMode(expand ? DrawerLayout.LOCK_MODE_LOCKED_CLOSED : - DrawerLayout.LOCK_MODE_UNLOCKED); - supportInvalidateOptionsMenu(); - } - - - private void initNavigationView(Toolbar toolbar) { - mDrawerToggle = new ActionBarDrawerToggle( - this, mDrawerLayout, toolbar, R.string.txt_open, R.string.txt_close) { - - @Override - public void onDrawerOpened(View drawerView) { - super.onDrawerOpened(drawerView); - SoftKeyboardHelper.closeKeyboard(CandyBarMainActivity.this); - } - - @Override - public void onDrawerClosed(View drawerView) { - super.onDrawerClosed(drawerView); - selectPosition(mPosition); - } - }; - mDrawerToggle.setDrawerIndicatorEnabled(false); - toolbar.setNavigationIcon(ConfigurationHelper.getNavigationIcon(this, - CandyBarApplication.getConfiguration().getNavigationIcon())); - toolbar.setNavigationOnClickListener(view -> - mDrawerLayout.openDrawer(GravityCompat.START)); - - if (CandyBarApplication.getConfiguration().getNavigationIcon() == CandyBarApplication.NavigationIcon.DEFAULT) { - DrawerArrowDrawable drawerArrowDrawable = new DrawerArrowDrawable(this); - drawerArrowDrawable.setColor(ContextCompat.getColor(this, R.color.toolbarIcon)); - drawerArrowDrawable.setSpinEnabled(true); - mDrawerToggle.setDrawerArrowDrawable(drawerArrowDrawable); - mDrawerToggle.setDrawerIndicatorEnabled(true); - } - - mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START); - mDrawerLayout.addDrawerListener(mDrawerToggle); - - NavigationViewHelper.initApply(mNavigationView); - NavigationViewHelper.initIconRequest(mNavigationView); - NavigationViewHelper.initWallpapers(mNavigationView); - NavigationViewHelper.initPresets(mNavigationView); - - ColorStateList itemStateList = ContextCompat.getColorStateList(this, - ThemeHelper.isDarkTheme(this) ? - R.color.navigation_view_item_highlight_dark : - R.color.navigation_view_item_highlight); - mNavigationView.setItemTextColor(itemStateList); - mNavigationView.setItemIconTintList(itemStateList); - Drawable background = ContextCompat.getDrawable(this, - ThemeHelper.isDarkTheme(this) ? - R.drawable.navigation_view_item_background_dark : - R.drawable.navigation_view_item_background); - mNavigationView.setItemBackground(background); - mNavigationView.setNavigationItemSelectedListener(item -> { - int id = item.getItemId(); - if (id == R.id.navigation_view_home) mPosition = Extras.Tag.HOME.idx; - else if (id == R.id.navigation_view_apply) mPosition = Extras.Tag.APPLY.idx; - else if (id == R.id.navigation_view_icons) mPosition = Extras.Tag.ICONS.idx; - else if (id == R.id.navigation_view_request) mPosition = Extras.Tag.REQUEST.idx; - else if (id == R.id.navigation_view_wallpapers) mPosition = Extras.Tag.WALLPAPERS.idx; - else if (id == R.id.navigation_view_presets) mPosition = Extras.Tag.PRESETS.idx; - else if (id == R.id.navigation_view_settings) mPosition = Extras.Tag.SETTINGS.idx; - else if (id == R.id.navigation_view_faqs) mPosition = Extras.Tag.FAQS.idx; - else if (id == R.id.navigation_view_about) mPosition = Extras.Tag.ABOUT.idx; - - item.setChecked(true); - mDrawerLayout.closeDrawers(); - return true; - }); - } - - private void initNavigationViewHeader() { - if (CandyBarApplication.getConfiguration().getNavigationViewHeader() == CandyBarApplication.NavigationViewHeader.NONE) { - mNavigationView.removeHeaderView(mNavigationView.getHeaderView(0)); - return; - } - - String imageUrl = getResources().getString(R.string.navigation_view_header); - String titleText = getResources().getString(R.string.navigation_view_header_title); - View header = mNavigationView.getHeaderView(0); - HeaderView image = header.findViewById(R.id.header_image); - LinearLayout container = header.findViewById(R.id.header_title_container); - TextView title = header.findViewById(R.id.header_title); - TextView version = header.findViewById(R.id.header_version); - - if (CandyBarApplication.getConfiguration().getNavigationViewHeader() == CandyBarApplication.NavigationViewHeader.MINI) { - image.setRatio(16, 9); - } - - if (titleText.length() == 0) { - container.setVisibility(View.GONE); - } else { - title.setText(titleText); - try { - String versionText = "v" + getPackageManager() - .getPackageInfo(getPackageName(), 0).versionName; - version.setText(versionText); - } catch (Exception ignored) { - } - } - - if (ColorHelper.isValidColor(imageUrl)) { - image.setBackgroundColor(Color.parseColor(imageUrl)); - return; - } - - if (!URLUtil.isValidUrl(imageUrl)) { - imageUrl = "drawable://" + DrawableHelper.getResourceId(this, imageUrl); - } - - Glide.with(this) - .load(imageUrl) - .override(720) - .optionalCenterInside() - .diskCacheStrategy(imageUrl.contains("drawable://") - ? DiskCacheStrategy.NONE - : DiskCacheStrategy.RESOURCE) - .into(image); - } - - private void checkWallpapers() { - if (Preferences.get(this).isConnectedToNetwork()) { - new Thread(() -> { - try { - if (WallpaperHelper.getWallpaperType(this) != WallpaperHelper.CLOUD_WALLPAPERS) - return; - - String wallpaperUrl = getResources().getString(R.string.wallpaper_json); - URL url = new URL(wallpaperUrl); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); - - if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { - InputStream stream = connection.getInputStream(); - List list = JsonHelper.parseList(stream); - if (list == null) return; - - List wallpapers = new ArrayList<>(); - for (int i = 0; i < list.size(); i++) { - Wallpaper wallpaper = JsonHelper.getWallpaper(list.get(i)); - if (wallpaper != null) { - if (!wallpapers.contains(wallpaper)) { - wallpapers.add(wallpaper); - } else { - LogUtil.e("Duplicate wallpaper found: " + wallpaper.getURL()); - } - } - } - - this.runOnUiThread(() -> onWallpapersChecked(wallpapers.size())); - } - } catch (IOException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }).start(); - } - - int size = Preferences.get(this).getAvailableWallpapersCount(); - if (size > 0) { - onWallpapersChecked(size); - } - } - - private void clearBackStack() { - if (mFragManager.getBackStackEntryCount() > 0) { - mFragManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); - onSearchExpanded(false); - } - } - - public void selectPosition(int position) { - if (position == 3) { - if (!getResources().getBoolean(R.bool.enable_icon_request) && - getResources().getBoolean(R.bool.enable_premium_request)) { - if (!Preferences.get(this).isPremiumRequestEnabled()) - return; - - } - } - - if (position == 4) { - if (WallpaperHelper.getWallpaperType(this) - == WallpaperHelper.EXTERNAL_APP) { - mPosition = mLastPosition; - mNavigationView.getMenu().getItem(mPosition).setChecked(true); - WallpaperHelper.launchExternalApp(CandyBarMainActivity.this); - return; - } - } - - if (position != mLastPosition) { - mLastPosition = mPosition = position; - setFragment(getFragment(position)); - } - } - - private void setFragment(Fragment fragment) { - clearBackStack(); - - FragmentTransaction ft = mFragManager.beginTransaction() - .replace(R.id.container, fragment, mFragmentTag.value); - try { - ft.commit(); - } catch (Exception e) { - ft.commitAllowingStateLoss(); - } - - Menu menu = mNavigationView.getMenu(); - menu.getItem(mPosition).setChecked(true); - mToolbarTitle.setText(menu.getItem(mPosition).getTitle()); - } - - private Fragment getFragment(int position) { - mFragmentTag = Extras.Tag.HOME; - if (position == Extras.Tag.HOME.idx) { - mFragmentTag = Extras.Tag.HOME; - return new HomeFragment(); - } else if (position == Extras.Tag.APPLY.idx) { - mFragmentTag = Extras.Tag.APPLY; - return new ApplyFragment(); - } else if (position == Extras.Tag.ICONS.idx) { - mFragmentTag = Extras.Tag.ICONS; - return new IconsBaseFragment(); - } else if (position == Extras.Tag.REQUEST.idx) { - mFragmentTag = Extras.Tag.REQUEST; - return new RequestFragment(); - } else if (position == Extras.Tag.WALLPAPERS.idx) { - mFragmentTag = Extras.Tag.WALLPAPERS; - return new WallpapersFragment(); - } else if (position == Extras.Tag.PRESETS.idx) { - mFragmentTag = Extras.Tag.PRESETS; - return new PresetsFragment(); - } else if (position == Extras.Tag.SETTINGS.idx) { - mFragmentTag = Extras.Tag.SETTINGS; - return new SettingsFragment(); - } else if (position == Extras.Tag.FAQS.idx) { - mFragmentTag = Extras.Tag.FAQS; - return new FAQsFragment(); - } else if (position == Extras.Tag.ABOUT.idx) { - mFragmentTag = Extras.Tag.ABOUT; - return new AboutFragment(); - } - return new HomeFragment(); - } - - private Fragment getActionFragment(int action) { - switch (action) { - case IntentHelper.ICON_PICKER: - case IntentHelper.IMAGE_PICKER: - mPosition = mLastPosition = (mFragmentTag = Extras.Tag.ICONS).idx; - return new IconsBaseFragment(); - case IntentHelper.WALLPAPER_PICKER: - if (WallpaperHelper.getWallpaperType(this) == WallpaperHelper.CLOUD_WALLPAPERS) { - mPosition = mLastPosition = (mFragmentTag = Extras.Tag.WALLPAPERS).idx; - return new WallpapersFragment(); - } - default: - mPosition = mLastPosition = (mFragmentTag = Extras.Tag.HOME).idx; - return new HomeFragment(); - } - } - - public static class ActivityConfiguration { - - private boolean mIsLicenseCheckerEnabled; - private byte[] mRandomString; - private String mLicenseKey; - private String[] mDonationProductsId; - private String[] mPremiumRequestProductsId; - private int[] mPremiumRequestProductsCount; - - public ActivityConfiguration setLicenseCheckerEnabled(boolean enabled) { - mIsLicenseCheckerEnabled = enabled; - return this; - } - - public ActivityConfiguration setRandomString(@NonNull byte[] randomString) { - mRandomString = randomString; - return this; - } - - public ActivityConfiguration setLicenseKey(@NonNull String licenseKey) { - mLicenseKey = licenseKey; - return this; - } - - public ActivityConfiguration setDonationProductsId(@NonNull String[] productsId) { - mDonationProductsId = productsId; - return this; - } - - public ActivityConfiguration setPremiumRequestProducts(@NonNull String[] ids, @NonNull int[] counts) { - mPremiumRequestProductsId = ids; - mPremiumRequestProductsCount = counts; - return this; - } - - public boolean isLicenseCheckerEnabled() { - return mIsLicenseCheckerEnabled; - } - - public byte[] getRandomString() { - return mRandomString; - } - - public String getLicenseKey() { - return mLicenseKey; - } - - public String[] getDonationProductsId() { - return mDonationProductsId; - } - - public String[] getPremiumRequestProductsId() { - return mPremiumRequestProductsId; - } - - public int[] getPremiumRequestProductsCount() { - return mPremiumRequestProductsCount; - } - } - -} diff --git a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarSplashActivity.java b/libs/candybar/src/main/java/candybar/lib/activities/CandyBarSplashActivity.java deleted file mode 100644 index 030572f..0000000 --- a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarSplashActivity.java +++ /dev/null @@ -1,188 +0,0 @@ -package candybar.lib.activities; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.InputStream; -import java.lang.ref.WeakReference; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.List; -import java.util.Map; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.helpers.JsonHelper; -import candybar.lib.helpers.WallpaperHelper; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.ImageConfig; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public abstract class CandyBarSplashActivity extends AppCompatActivity { - - private AsyncTaskBase mSplashScreenLoader; - private AsyncTaskBase mWallpaperThumbPreloader; - - @NonNull - public abstract Class getMainActivity(); - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - mSplashScreenLoader = new SplashScreenLoader(this) - .mainActivity(getMainActivity()) - .executeOnThreadPool(); - - mWallpaperThumbPreloader = new WallpaperThumbPreloader(this).execute(); - } - - @Override - public void onBackPressed() { - if (mWallpaperThumbPreloader != null) { - mWallpaperThumbPreloader.cancel(true); - } - Database.get(this.getApplicationContext()).closeDatabase(); - super.onBackPressed(); - } - - @Override - protected void onDestroy() { - if (mSplashScreenLoader != null) { - mSplashScreenLoader.cancel(true); - } - super.onDestroy(); - } - - private static class SplashScreenLoader extends AsyncTaskBase { - - private final WeakReference context; - private Class mainActivity; - - private SplashScreenLoader(@NonNull Context context) { - this.context = new WeakReference<>(context); - } - - private SplashScreenLoader mainActivity(@NonNull Class mainActivity) { - this.mainActivity = mainActivity; - return this; - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(400); - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (context.get() == null) return; - if (context.get() instanceof Activity) { - if (((Activity) context.get()).isFinishing()) return; - } - - Intent intent = new Intent(context.get(), mainActivity); - intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); - intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - - Activity activity = (Activity) context.get(); - activity.startActivity(intent); - activity.overridePendingTransition(android.R.anim.fade_in, android.R.anim.fade_out); - activity.finish(); - } - } - - private static class WallpaperThumbPreloader extends AsyncTaskBase { - - private final WeakReference context; - - private WallpaperThumbPreloader(@NonNull Context context) { - this.context = new WeakReference<>(context); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - - if (WallpaperHelper.getWallpaperType(context.get()) != WallpaperHelper.CLOUD_WALLPAPERS) - return true; - - URL url = new URL(context.get().getString(R.string.wallpaper_json)); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); - - if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { - InputStream stream = connection.getInputStream(); - List list = JsonHelper.parseList(stream); - if (list == null) { - LogUtil.e("Json error, no array with name: " - + CandyBarApplication.getConfiguration().getWallpaperJsonStructure().getArrayName()); - return false; - } - - if (list.size() > 0 && list.get(0) instanceof Map) { - Map map = (Map) list.get(0); - String thumbUrl = JsonHelper.getThumbUrl(map); - - // Preload the first wallpaper's thumbnail - // It should show up immediately without any delay on first run - // so that the intro popup works correctly - if (context.get() != null) { - Glide.with(context.get()) - .load(thumbUrl) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .override(ImageConfig.getThumbnailSize()) - .preload(); - } - } - } - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - } -} - diff --git a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarWallpaperActivity.java b/libs/candybar/src/main/java/candybar/lib/activities/CandyBarWallpaperActivity.java deleted file mode 100644 index 704c3b2..0000000 --- a/libs/candybar/src/main/java/candybar/lib/activities/CandyBarWallpaperActivity.java +++ /dev/null @@ -1,509 +0,0 @@ -package candybar.lib.activities; - -import android.content.Context; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.graphics.RectF; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.os.Bundle; -import android.os.Handler; -import android.transition.Transition; -import android.view.MenuItem; -import android.view.View; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.coordinatorlayout.widget.CoordinatorLayout; -import androidx.core.app.ActivityCompat; -import androidx.core.content.ContextCompat; -import androidx.palette.graphics.Palette; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.CustomTarget; -import com.bumptech.glide.request.target.Target; -import com.danimahardhika.android.helpers.animation.AnimationHelper; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.WindowHelper; -import com.danimahardhika.android.helpers.permission.PermissionCode; -import com.kogitune.activitytransition.ActivityTransition; -import com.kogitune.activitytransition.ExitActivityTransition; - -import candybar.lib.R; -import candybar.lib.adapters.WallpapersAdapter; -import candybar.lib.databases.Database; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.TapIntroHelper; -import candybar.lib.helpers.ThemeHelper; -import candybar.lib.items.PopupItem; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; -import candybar.lib.tasks.WallpaperApplyTask; -import candybar.lib.tasks.WallpaperPropertiesLoaderTask; -import candybar.lib.utils.Extras; -import candybar.lib.utils.Popup; -import candybar.lib.utils.WallpaperDownloader; -import uk.co.senab.photoview.PhotoViewAttacher; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class CandyBarWallpaperActivity extends AppCompatActivity implements View.OnClickListener, View.OnLongClickListener, - ActivityCompat.OnRequestPermissionsResultCallback, WallpaperPropertiesLoaderTask.Callback { - - private ImageView mImageView; - private ProgressBar mProgress; - private LinearLayout mBottomBar; - private TextView mName; - private TextView mAuthor; - private ImageView mBack; - private ImageView mMenuApply; - private ImageView mMenuSave; - - private boolean mIsEnter; - private boolean mIsResumed = false; - - private Wallpaper mWallpaper; - private Runnable mRunnable; - private Handler mHandler; - private PhotoViewAttacher mAttacher; - private ExitActivityTransition mExitTransition; - - private boolean prevIsDarkTheme; - - @Override - protected void onCreate(@Nullable Bundle savedInstanceState) { - prevIsDarkTheme = ThemeHelper.isDarkTheme(this); - super.setTheme(R.style.CandyBar_Theme_Wallpaper); - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_wallpaper); - mIsEnter = true; - - mImageView = findViewById(R.id.wallpaper); - mProgress = findViewById(R.id.progress); - mBottomBar = findViewById(R.id.bottom_bar); - mName = findViewById(R.id.name); - mAuthor = findViewById(R.id.author); - mBack = findViewById(R.id.back); - mMenuApply = findViewById(R.id.menu_apply); - mMenuSave = findViewById(R.id.menu_save); - - mProgress.getIndeterminateDrawable().setColorFilter( - Color.parseColor("#CCFFFFFF"), PorterDuff.Mode.SRC_IN); - mBack.setImageDrawable(DrawableHelper.getTintedDrawable( - this, R.drawable.ic_toolbar_back, Color.WHITE)); - mBack.setOnClickListener(this); - - String url = ""; - if (savedInstanceState != null) { - url = savedInstanceState.getString(Extras.EXTRA_URL); - } - - Bundle bundle = getIntent().getExtras(); - if (bundle != null) { - url = bundle.getString(Extras.EXTRA_URL); - } - - mWallpaper = Database.get(this.getApplicationContext()).getWallpaper(url); - if (mWallpaper == null) { - finish(); - return; - } - - initBottomBar(); - resetBottomBarPadding(); - - if (!mIsResumed) { - mExitTransition = ActivityTransition - .with(getIntent()) - .to(this, mImageView, Extras.EXTRA_IMAGE) - .duration(300) - .start(savedInstanceState); - } - - if (mImageView.getDrawable() == null) { - int color = mWallpaper.getColor(); - if (color == 0) { - color = ContextCompat.getColor(this, R.color.cardBackground); - } - - AnimationHelper.setBackgroundColor(findViewById(R.id.rootview), Color.TRANSPARENT, color).start(); - mProgress.getIndeterminateDrawable().setColorFilter( - ColorHelper.setColorAlpha(ColorHelper.getTitleTextColor(color), 0.7f), - PorterDuff.Mode.SRC_IN); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && savedInstanceState == null) { - Transition transition = getWindow().getSharedElementEnterTransition(); - - if (transition != null) { - transition.addListener(new Transition.TransitionListener() { - @Override - public void onTransitionStart(Transition transition) { - } - - @Override - public void onTransitionEnd(Transition transition) { - if (mIsEnter) { - mIsEnter = false; - - AnimationHelper.fade(mBottomBar).duration(400).start(); - loadWallpaper(); - } - } - - @Override - public void onTransitionCancel(Transition transition) { - } - - @Override - public void onTransitionPause(Transition transition) { - } - - @Override - public void onTransitionResume(Transition transition) { - } - }); - - return; - } - } - - mRunnable = () -> { - AnimationHelper.fade(mBottomBar).duration(400).start(); - loadWallpaper(); - - mRunnable = null; - mHandler = null; - }; - mHandler = new Handler(); - mHandler.postDelayed(mRunnable, 700); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - if (prevIsDarkTheme != ThemeHelper.isDarkTheme(this)) { - recreate(); - return; - } - LocaleHelper.setLocale(this); - resetBottomBarPadding(); - } - - @Override - protected void attachBaseContext(Context newBase) { - LocaleHelper.setLocale(newBase); - super.attachBaseContext(newBase); - } - - @Override - protected void onSaveInstanceState(@NonNull Bundle outState) { - if (mWallpaper != null) { - outState.putString(Extras.EXTRA_URL, mWallpaper.getURL()); - } - - outState.putBoolean(Extras.EXTRA_RESUMED, true); - super.onSaveInstanceState(outState); - } - - @Override - protected void onDestroy() { - if (Preferences.get(this).isCropWallpaper()) { - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_USER); - } - Glide.get(this).clearMemory(); - if (mAttacher != null) mAttacher.cleanup(); - super.onDestroy(); - } - - @Override - public void onBackPressed() { - WallpapersAdapter.sIsClickable = true; - if (mHandler != null && mRunnable != null) - mHandler.removeCallbacks(mRunnable); - - if (mExitTransition != null) { - mExitTransition.exit(this); - return; - } - super.onBackPressed(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == android.R.id.home) { - onBackPressed(); - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.back) { - onBackPressed(); - } else if (id == R.id.menu_apply) { - Popup popup = Popup.Builder(this) - .to(mMenuApply) - .list(PopupItem.getApplyItems(this)) - .callback((p, position) -> { - PopupItem item = p.getItems().get(position); - if (item.getType() == PopupItem.Type.WALLPAPER_CROP) { - Preferences.get(this).setCropWallpaper(!item.getCheckboxValue()); - item.setCheckboxValue(Preferences.get(this).isCropWallpaper()); - - p.updateItem(position, item); - if (Preferences.get(this).isCropWallpaper()) { - if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - } - return; - } - - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); - return; - } else { - RectF rectF = null; - if (Preferences.get(this).isCropWallpaper()) { - if (mAttacher != null) - rectF = mAttacher.getDisplayRect(); - } - - WallpaperApplyTask task = new WallpaperApplyTask(this, mWallpaper) - .crop(rectF); - - if (item.getType() == PopupItem.Type.LOCKSCREEN) { - task.to(WallpaperApplyTask.Apply.LOCKSCREEN); - } else if (item.getType() == PopupItem.Type.HOMESCREEN) { - task.to(WallpaperApplyTask.Apply.HOMESCREEN); - } else if (item.getType() == PopupItem.Type.HOMESCREEN_LOCKSCREEN) { - task.to(WallpaperApplyTask.Apply.HOMESCREEN_LOCKSCREEN); - } - - task.executeOnThreadPool(); - } - - p.dismiss(); - }) - .build(); - - if (getResources().getBoolean(R.bool.enable_wallpaper_download)) { - popup.removeItem(popup.getItems().size() - 1); - } - popup.show(); - } else if (id == R.id.menu_save) { - WallpaperDownloader.prepare(this) - .wallpaper(mWallpaper) - .start(); - } - } - - @Override - public boolean onLongClick(View view) { - int id = view.getId(); - int res = 0; - if (id == R.id.menu_apply) { - res = R.string.wallpaper_apply; - } else if (id == R.id.menu_save) { - res = R.string.wallpaper_save_to_device; - } - - if (res == 0) return false; - - Toast.makeText(this, res, Toast.LENGTH_SHORT).show(); - return true; - } - - @Override - public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, - @NonNull int[] grantResults) { - super.onRequestPermissionsResult(requestCode, permissions, grantResults); - if (requestCode == PermissionCode.STORAGE) { - if (grantResults.length > 0 && - grantResults[0] == PackageManager.PERMISSION_GRANTED) { - WallpaperDownloader.prepare(this).wallpaper(mWallpaper).start(); - } else { - Toast.makeText(this, R.string.permission_storage_denied, Toast.LENGTH_LONG).show(); - } - } - } - - @Override - public void onPropertiesReceived(Wallpaper wallpaper) { - if (wallpaper == null) return; - - mWallpaper.setDimensions(wallpaper.getDimensions()); - mWallpaper.setSize(wallpaper.getSize()); - mWallpaper.setMimeType(wallpaper.getMimeType()); - } - - private void initBottomBar() { - mName.setText(mWallpaper.getName()); - mName.setTextColor(Color.WHITE); - mAuthor.setText(mWallpaper.getAuthor()); - mAuthor.setTextColor(ColorHelper.setColorAlpha(Color.WHITE, 0.7f)); - mMenuSave.setImageDrawable(DrawableHelper.getTintedDrawable( - this, R.drawable.ic_toolbar_download, Color.WHITE)); - mMenuApply.setImageDrawable(DrawableHelper.getTintedDrawable( - this, R.drawable.ic_toolbar_apply_options, Color.WHITE)); - - if (getResources().getBoolean(R.bool.enable_wallpaper_download)) { - mMenuSave.setVisibility(View.VISIBLE); - } - - mMenuApply.setOnClickListener(this); - mMenuSave.setOnClickListener(this); - - mMenuApply.setOnLongClickListener(this); - mMenuSave.setOnLongClickListener(this); - } - - private void resetBottomBarPadding() { - LinearLayout container = findViewById(R.id.bottom_bar_container); - int height = getResources().getDimensionPixelSize(R.dimen.bottom_bar_height); - int bottom = 0; - int right = WindowHelper.getNavigationBarHeight(this); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - if (mBack.getLayoutParams() instanceof CoordinatorLayout.LayoutParams) { - CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) mBack.getLayoutParams(); - params.topMargin = WindowHelper.getStatusBarHeight(this); - } - - boolean tabletMode = getResources().getBoolean(R.bool.android_helpers_tablet_mode); - if (tabletMode || getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) { - bottom = right; - right = 0; - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - if (isInMultiWindowMode()) { - bottom = right = 0; - } - } - } - - container.setPadding(0, 0, right, bottom); - - if (container.getLayoutParams() instanceof LinearLayout.LayoutParams) { - LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) container.getLayoutParams(); - params.height = height + bottom; - } - } - - private void loadWallpaper() { - if (mAttacher != null) { - mAttacher.cleanup(); - mAttacher = null; - } - - new WallpaperPropertiesLoaderTask(this, mWallpaper, this) - .executeOnThreadPool(); - - Glide.with(this) - .asBitmap() - .load(mWallpaper.getURL()) - .override(2000) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .timeout(10000) - .listener(new RequestListener() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - if (mWallpaper.getColor() == 0) { - mWallpaper.setColor(ColorHelper.getAttributeColor( - CandyBarWallpaperActivity.this, R.attr.colorSecondary)); - } - - return true; - } - - @Override - public boolean onResourceReady(Bitmap loadedImage, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - if (loadedImage != null && mWallpaper.getColor() == 0) { - Palette.from(loadedImage).generate(palette -> { - if (palette != null) { - int accent = ColorHelper.getAttributeColor( - CandyBarWallpaperActivity.this, R.attr.colorSecondary); - int color = palette.getVibrantColor(accent); - if (color == accent) - color = palette.getMutedColor(accent); - - mWallpaper.setColor(color); - Database.get(CandyBarWallpaperActivity.this).updateWallpaper(mWallpaper); - } - - onWallpaperLoaded(); - }); - } else { - onWallpaperLoaded(); - } - - return false; - } - }) - .into(new CustomTarget() { - @Override - public void onResourceReady(@NonNull Bitmap resource, @Nullable com.bumptech.glide.request.transition.Transition transition) { - mImageView.setImageBitmap(resource); - } - - @Override - public void onLoadCleared(@Nullable Drawable placeholder) { /* Do nothing */ } - }); - - if (Preferences.get(CandyBarWallpaperActivity.this).isCropWallpaper()) { - if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - } - } - - AnimationHelper.fade(mProgress).start(); - } - - private void onWallpaperLoaded() { - mAttacher = new PhotoViewAttacher(mImageView); - mAttacher.setScaleType(ImageView.ScaleType.CENTER_CROP); - - AnimationHelper.fade(mProgress).start(); - mRunnable = null; - mHandler = null; - mIsResumed = false; - - if (this.getResources().getBoolean(R.bool.show_intro)) { - TapIntroHelper.showWallpaperPreviewIntro(this, mWallpaper.getColor()); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/AboutAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/AboutAdapter.java deleted file mode 100644 index cf1f43e..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/AboutAdapter.java +++ /dev/null @@ -1,444 +0,0 @@ -package candybar.lib.adapters; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.graphics.Color; -import android.net.Uri; -import android.os.Build; -import android.text.method.LinkMovementMethod; -import android.util.Log; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.URLUtil; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.text.HtmlCompat; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.card.MaterialCardView; -import com.mikhaellopez.circularimageview.CircularImageView; - -import candybar.lib.BuildConfig; -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.CreditsFragment; -import candybar.lib.helpers.ConfigurationHelper; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class AboutAdapter extends RecyclerView.Adapter { - - private final Context mContext; - - private int mItemCount; - - private final boolean mShowExtraInfo; - - private final boolean mShowContributors; - private final boolean mShowPrivacyPolicy; - private final boolean mShowTerms; - - private static final int TYPE_HEADER = 0; - private static final int TYPE_EXTRA_INFO = 1; - private static final int TYPE_FOOTER = 2; - private static final int TYPE_BOTTOM_SHADOW = 3; - - public AboutAdapter(@NonNull Context context, int spanCount) { - mContext = context; - - mItemCount = 2; - boolean cardMode = (spanCount > 1); - if (!cardMode) { - mItemCount += 1; - } - - mShowContributors = mContext.getResources().getBoolean(R.bool.show_contributors_dialog); - - mShowPrivacyPolicy = mContext.getResources().getString(R.string.privacy_policy_link).length() > 0; - - mShowTerms = mContext.getResources().getString(R.string.terms_and_conditions_link).length() > 0; - - mShowExtraInfo = mShowContributors || mShowPrivacyPolicy || mShowTerms; - - if (mShowExtraInfo) { - mItemCount += 1; - } - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == TYPE_HEADER) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_about_item_header, parent, false); - return new HeaderViewHolder(view); - } else if (viewType == TYPE_EXTRA_INFO) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_about_item_sub, parent, false); - return new ExtraInfoViewHolder(view); - } - - if (viewType == TYPE_FOOTER) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_about_item_footer, parent, false); - if (CandyBarApplication.getConfiguration().getSocialIconColor() == CandyBarApplication.IconColor.ACCENT) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_about_item_footer_accent, parent, false); - } - return new FooterViewHolder(view); - } - - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_settings_item_footer, parent, false); - return new ShadowViewHolder(view); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder.getItemViewType() == TYPE_HEADER) { - HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; - - String imageUri = mContext.getString(R.string.about_image); - - if (ColorHelper.isValidColor(imageUri)) { - headerViewHolder.image.setBackgroundColor(Color.parseColor(imageUri)); - } else { - if (!URLUtil.isValidUrl(imageUri)) { - imageUri = "drawable://" + DrawableHelper.getResourceId(mContext, imageUri); - } - - Glide.with(mContext) - .load(imageUri) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(imageUri.contains("drawable://") - ? DiskCacheStrategy.NONE - : DiskCacheStrategy.RESOURCE) - .into(headerViewHolder.image); - } - - String profileUri = mContext.getResources().getString(R.string.about_profile_image); - if (!URLUtil.isValidUrl(profileUri)) { - profileUri = "drawable://" + DrawableHelper.getResourceId(mContext, profileUri); - } - - Glide.with(mContext) - .load(profileUri) - .skipMemoryCache(true) - .diskCacheStrategy(profileUri.contains("drawable://") - ? DiskCacheStrategy.NONE - : DiskCacheStrategy.RESOURCE) - .into(headerViewHolder.profile); - } - } - - @Override - public int getItemCount() { - return mItemCount; - } - - @Override - public int getItemViewType(int position) { - if (position == 0) return TYPE_HEADER; - if (position == 1) { - if (mShowExtraInfo) return TYPE_EXTRA_INFO; - else return TYPE_FOOTER; - } - - if (position == 2 && mShowExtraInfo) return TYPE_FOOTER; - return TYPE_BOTTOM_SHADOW; - } - - private class HeaderViewHolder extends RecyclerView.ViewHolder { - - private final ImageView image; - private final CircularImageView profile; - - HeaderViewHolder(View itemView) { - super(itemView); - image = itemView.findViewById(R.id.image); - profile = itemView.findViewById(R.id.profile); - TextView subtitle = itemView.findViewById(R.id.subtitle); - RecyclerView recyclerView = itemView.findViewById(R.id.recyclerview); - recyclerView.setItemAnimator(new DefaultItemAnimator()); - recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, true)); - recyclerView.setHasFixedSize(true); - - String[] urls = mContext.getResources().getStringArray(R.array.about_social_links); - if (urls.length == 0) { - recyclerView.setVisibility(View.GONE); - - subtitle.setPadding( - subtitle.getPaddingLeft(), - subtitle.getPaddingTop(), - subtitle.getPaddingRight(), - subtitle.getPaddingBottom() + mContext.getResources().getDimensionPixelSize(R.dimen.content_margin)); - } else { - if (recyclerView.getLayoutParams() instanceof LinearLayout.LayoutParams) { - LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) recyclerView.getLayoutParams(); - if (urls.length < 7) { - params.width = LinearLayout.LayoutParams.WRAP_CONTENT; - params.gravity = Gravity.CENTER_HORIZONTAL; - recyclerView.setOverScrollMode(View.OVER_SCROLL_NEVER); - } - } - recyclerView.setAdapter(new AboutSocialAdapter(mContext, urls)); - } - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getAboutStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT && - card != null) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card) && card != null) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - if (card != null) card.setCardElevation(0); - - profile.setShadowRadius(0f); - profile.setShadowColor(Color.TRANSPARENT); - } - - subtitle.setText(HtmlCompat.fromHtml( - mContext.getResources().getString(R.string.about_desc), HtmlCompat.FROM_HTML_MODE_COMPACT)); - subtitle.setMovementMethod(LinkMovementMethod.getInstance()); - } - } - - private class ExtraInfoViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - ExtraInfoViewHolder(View itemView) { - super(itemView); - LinearLayout contributorsHolder = itemView.findViewById(R.id.contributors); - TextView contributorsTitle = itemView.findViewById(R.id.contributors_title); - LinearLayout privacyPolicyHolder = itemView.findViewById(R.id.privacy_policy); - TextView privacyPolicyTitle = itemView.findViewById(R.id.privacy_policy_title); - LinearLayout termsHolder = itemView.findViewById(R.id.terms); - TextView termsTitle = itemView.findViewById(R.id.terms_title); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getAboutStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT && - card != null) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card) && card != null) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - if (card != null) card.setCardElevation(0); - } - - - if (!mShowContributors) - contributorsHolder.setVisibility(View.GONE); - if (!mShowPrivacyPolicy) - privacyPolicyHolder.setVisibility(View.GONE); - if (!mShowTerms) - termsHolder.setVisibility(View.GONE); - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - - contributorsTitle.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_people, color), null, null, null); - contributorsTitle.setText(mContext.getResources().getString(R.string.about_contributors_title)); - - privacyPolicyTitle.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_link, color), null, null, null); - privacyPolicyTitle.setText(mContext.getResources().getString(R.string.about_privacy_policy_title)); - - termsTitle.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_link, color), null, null, null); - termsTitle.setText(mContext.getResources().getString(R.string.about_terms_and_conditions_title)); - - contributorsTitle.setOnClickListener(this); - privacyPolicyTitle.setOnClickListener(this); - termsTitle.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.contributors_title) { - CreditsFragment.showCreditsDialog(((AppCompatActivity) mContext).getSupportFragmentManager(), - CreditsFragment.TYPE_ICON_PACK_CONTRIBUTORS); - } else if (id == R.id.privacy_policy_title) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mContext.getResources().getString(R.string.privacy_policy_link))); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - mContext.startActivity(intent); - } else if (id == R.id.terms_title) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mContext.getResources().getString(R.string.terms_and_conditions_link))); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - mContext.startActivity(intent); - } - } - } - - private class FooterViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - FooterViewHolder(View itemView) { - super(itemView); - ImageView github = itemView.findViewById(R.id.about_dashboard_github); - TextView title = itemView.findViewById(R.id.about_dashboard_title); - TextView licenses = itemView.findViewById(R.id.about_dashboard_licenses); - TextView contributors = itemView.findViewById(R.id.about_dashboard_contributors); - TextView translator = itemView.findViewById(R.id.about_dashboard_translator); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getAboutStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT && - card != null) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card) && card != null) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - if (card != null) card.setCardElevation(0); - } - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - title.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_dashboard, color), null, null, null); - title.append(" v" + BuildConfig.VERSION_NAME); - - color = ConfigurationHelper.getSocialIconColor(mContext, - CandyBarApplication.getConfiguration().getSocialIconColor()); - github.setImageDrawable(DrawableHelper.getTintedDrawable(mContext, R.drawable.ic_toolbar_github, color)); - - github.setOnClickListener(this); - licenses.setOnClickListener(this); - contributors.setOnClickListener(this); - translator.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - - if (id == R.id.about_dashboard_contributors) { - CreditsFragment.showCreditsDialog(((AppCompatActivity) mContext).getSupportFragmentManager(), - CreditsFragment.TYPE_DASHBOARD_CONTRIBUTORS); - return; - } - - if (id == R.id.about_dashboard_translator) { - CreditsFragment.showCreditsDialog(((AppCompatActivity) mContext).getSupportFragmentManager(), - CreditsFragment.TYPE_DASHBOARD_TRANSLATOR); - return; - } - - Intent intent = null; - if (id == R.id.about_dashboard_github) { - intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mContext - .getResources().getString(R.string.about_dashboard_github_url))); - } - - try { - mContext.startActivity(intent); - } catch (NullPointerException | ActivityNotFoundException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - } - - private class ShadowViewHolder extends RecyclerView.ViewHolder { - - ShadowViewHolder(View itemView) { - super(itemView); - if (!Preferences.get(mContext).isCardShadowEnabled()) { - View shadow = itemView.findViewById(R.id.shadow); - shadow.setVisibility(View.GONE); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/AboutSocialAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/AboutSocialAdapter.java deleted file mode 100644 index 7c3cbca..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/AboutSocialAdapter.java +++ /dev/null @@ -1,125 +0,0 @@ -package candybar.lib.adapters; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.UrlHelper; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class AboutSocialAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final String[] mUrls; - - public AboutSocialAdapter(@NonNull Context context, @NonNull String[] urls) { - mContext = context; - mUrls = urls; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_about_item_social, parent, false); - if (CandyBarApplication.getConfiguration().getSocialIconColor() == CandyBarApplication.IconColor.ACCENT) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_about_item_social_accent, parent, false); - } - return new SocialViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - SocialViewHolder socialViewHolder = (SocialViewHolder) holder; - UrlHelper.Type type = UrlHelper.getType(mUrls[position]); - Drawable drawable = UrlHelper.getSocialIcon(mContext, type); - - if (drawable != null && type != UrlHelper.Type.INVALID) { - socialViewHolder.image.setImageDrawable(drawable); - socialViewHolder.image.setVisibility(View.VISIBLE); - } else { - socialViewHolder.image.setVisibility(View.GONE); - } - } - - @Override - public int getItemCount() { - return mUrls.length; - } - - private class SocialViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final ImageView image; - - SocialViewHolder(View itemView) { - super(itemView); - image = itemView.findViewById(R.id.image); - - image.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - int position = getBindingAdapterPosition(); - if (position < 0 || position > mUrls.length) return; - - if (id == R.id.image) { - UrlHelper.Type type = UrlHelper.getType(mUrls[position]); - if (type == UrlHelper.Type.INVALID) return; - - if (type == UrlHelper.Type.EMAIL) { - try { - final Intent email = new Intent(Intent.ACTION_SENDTO, Uri.fromParts( - "mailto", mUrls[position], null)); - email.putExtra(Intent.EXTRA_SUBJECT, (mContext.getResources().getString( - R.string.app_name))); - mContext.startActivity(Intent.createChooser(email, - mContext.getResources().getString(R.string.app_client))); - } catch (ActivityNotFoundException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return; - } - - try { - mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(mUrls[position]))); - } catch (ActivityNotFoundException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/FAQsAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/FAQsAdapter.java deleted file mode 100644 index 21e25cf..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/FAQsAdapter.java +++ /dev/null @@ -1,145 +0,0 @@ -package candybar.lib.adapters; - -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.items.FAQs; -import candybar.lib.preferences.Preferences; - - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class FAQsAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mFAQs; - private final List mFAQsAll; - - private static final int TYPE_CONTENT = 0; - private static final int TYPE_FOOTER = 1; - - public FAQsAdapter(@NonNull Context context, @NonNull List faqs) { - mContext = context; - mFAQs = faqs; - mFAQsAll = new ArrayList<>(mFAQs); - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = null; - if (viewType == TYPE_CONTENT) { - view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.fragment_faqs_item_list, parent, false); - } else if (viewType == TYPE_FOOTER) { - view = LayoutInflater.from(parent.getContext()).inflate( - R.layout.fragment_settings_item_footer, parent, false); - } - return new ViewHolder(view, viewType); - } - - @Override - public void onViewRecycled(@NonNull ViewHolder holder) { - super.onViewRecycled(holder); - if (holder.holderId == TYPE_CONTENT) { - holder.divider.setVisibility(View.VISIBLE); - } - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - if (holder.holderId == TYPE_CONTENT) { - holder.question.setText(mFAQs.get(position).getQuestion()); - holder.answer.setText(mFAQs.get(position).getAnswer()); - - if (position == (mFAQs.size() - 1)) { - holder.divider.setVisibility(View.GONE); - } - } - } - - @Override - public int getItemCount() { - return mFAQs.size() + 1; - } - - @Override - public int getItemViewType(int position) { - if (position == getItemCount() - 1) return TYPE_FOOTER; - return TYPE_CONTENT; - } - - class ViewHolder extends RecyclerView.ViewHolder { - - private TextView question; - private TextView answer; - private View divider; - - private int holderId; - - ViewHolder(View itemView, int viewType) { - super(itemView); - if (viewType == TYPE_CONTENT) { - question = itemView.findViewById(R.id.question); - answer = itemView.findViewById(R.id.answer); - divider = itemView.findViewById(R.id.divider); - holderId = TYPE_CONTENT; - } else if (viewType == TYPE_FOOTER) { - holderId = TYPE_FOOTER; - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - View shadow = itemView.findViewById(R.id.shadow); - shadow.setVisibility(View.GONE); - } - } - } - } - - public void search(String string) { - String query = string.toLowerCase(Locale.getDefault()).trim(); - mFAQs.clear(); - if (query.length() == 0) mFAQs.addAll(mFAQsAll); - else { - for (int i = 0; i < mFAQsAll.size(); i++) { - FAQs faq = mFAQsAll.get(i); - String question = faq.getQuestion().toLowerCase(Locale.getDefault()); - String answer = faq.getAnswer().toLowerCase(Locale.getDefault()); - if (question.contains(query) || answer.contains(query)) { - mFAQs.add(faq); - } - } - } - notifyDataSetChanged(); - } - - public int getFaqsCount() { - return mFAQs.size(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/HomeAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/HomeAdapter.java deleted file mode 100644 index 27ef4ab..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/HomeAdapter.java +++ /dev/null @@ -1,964 +0,0 @@ -package candybar.lib.adapters; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.res.Configuration; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.graphics.PorterDuff; -import android.net.Uri; -import android.os.Build; -import android.os.Handler; -import android.os.Looper; -import android.text.method.LinkMovementMethod; -import android.util.Log; -import android.util.TypedValue; -import android.view.Gravity; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.URLUtil; -import android.widget.Button; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ListView; -import android.widget.ProgressBar; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.graphics.drawable.RoundedBitmapDrawable; -import androidx.core.graphics.drawable.RoundedBitmapDrawableFactory; -import androidx.core.text.HtmlCompat; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.card.MaterialCardView; - -import org.json.JSONArray; -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.adapters.dialog.ChangelogAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.DonationLinksFragment; -import candybar.lib.fragments.dialog.IconPreviewFragment; -import candybar.lib.fragments.dialog.OtherAppsFragment; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.helpers.ViewHelper; -import candybar.lib.helpers.WallpaperHelper; -import candybar.lib.items.Home; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.views.HeaderView; -import me.grantland.widget.AutofitTextView; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class HomeAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mHomes; - private final Home.Style mImageStyle; - - private int mItemsCount; - private int mOrientation; - private boolean mShowWallpapers; - private boolean mShowIconRequest; - private boolean mShowMoreApps; - - private static final int TYPE_HEADER = 0; - private static final int TYPE_CONTENT = 1; - private static final int TYPE_ICON_REQUEST = 2; - private static final int TYPE_WALLPAPERS = 3; - private static final int TYPE_GOOGLE_PLAY_DEV = 4; - - public HomeAdapter(@NonNull Context context, @NonNull List homes, int orientation) { - mContext = context; - mHomes = homes; - mOrientation = orientation; - - String viewStyle = mContext.getResources().getString(R.string.home_image_style); - mImageStyle = ViewHelper.getHomeImageViewStyle(viewStyle); - - mItemsCount = 1; - if (WallpaperHelper.getWallpaperType(mContext) == WallpaperHelper.CLOUD_WALLPAPERS) { - mItemsCount += 1; - mShowWallpapers = true; - } - - if (mContext.getResources().getBoolean(R.bool.enable_icon_request) || - mContext.getResources().getBoolean(R.bool.enable_premium_request)) { - mItemsCount += 1; - mShowIconRequest = true; - } - - String link = mContext.getResources().getString(R.string.google_play_dev); - if (link.length() > 0) { - mItemsCount += 1; - mShowMoreApps = true; - } - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == TYPE_HEADER) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_home_item_header, parent, false); - if (mImageStyle.getType() == Home.Style.Type.LANDSCAPE || - mImageStyle.getType() == Home.Style.Type.SQUARE) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_home_item_header_alt, parent, false); - } - return new HeaderViewHolder(view); - } else if (viewType == TYPE_CONTENT) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_home_item_content, parent, false); - return new ContentViewHolder(view); - } else if (viewType == TYPE_ICON_REQUEST) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_home_item_icon_request, parent, false); - return new IconRequestViewHolder(view); - } else if (viewType == TYPE_WALLPAPERS) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_home_item_wallpapers, parent, false); - return new WallpapersViewHolder(view); - } - - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_home_item_more_apps, parent, false); - return new GooglePlayDevViewHolder(view); - } - - @Override - public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { - super.onViewRecycled(holder); - if (holder.getItemViewType() == TYPE_CONTENT) { - ContentViewHolder contentViewHolder = (ContentViewHolder) holder; - - contentViewHolder.title.setSingleLine(false); - contentViewHolder.title.setMaxLines(10); - contentViewHolder.title.setSizeToFit(false); - contentViewHolder.title.setGravity(Gravity.CENTER_VERTICAL); - contentViewHolder.title.setIncludeFontPadding(true); - contentViewHolder.title.setCompoundDrawablesWithIntrinsicBounds(null, null, null, null); - contentViewHolder.subtitle.setVisibility(View.GONE); - contentViewHolder.subtitle.setGravity(Gravity.CENTER_VERTICAL); - } - } - - @SuppressLint("StringFormatInvalid") - @Override - public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position) { - try { - if (holder.itemView != null) { - StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) - holder.itemView.getLayoutParams(); - layoutParams.setFullSpan(isFullSpan(holder.getItemViewType())); - } - } catch (Exception e) { - LogUtil.d(Log.getStackTraceString(e)); - } - - if (holder.getItemViewType() == TYPE_HEADER) { - HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; - - String home_title_text = mContext.getResources().getString(R.string.home_title); - if (home_title_text.length() > 0) { - headerViewHolder.title.setText(home_title_text); - } else { - headerViewHolder.title.setVisibility(View.GONE); - } - - headerViewHolder.content.setText(HtmlCompat.fromHtml( - mContext.getResources().getString(R.string.home_description), HtmlCompat.FROM_HTML_MODE_COMPACT)); - headerViewHolder.content.setMovementMethod(LinkMovementMethod.getInstance()); - - String uri = mContext.getResources().getString(R.string.home_image); - if (ColorHelper.isValidColor(uri)) { - headerViewHolder.image.setBackgroundColor(Color.parseColor(uri)); - } else { - if (!URLUtil.isValidUrl(uri)) { - uri = "drawable://" + DrawableHelper.getResourceId(mContext, uri); - } - - Glide.with(mContext) - .load(uri) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(uri.contains("drawable://") - ? DiskCacheStrategy.NONE - : DiskCacheStrategy.RESOURCE) - .into(headerViewHolder.image); - } - } else if (holder.getItemViewType() == TYPE_CONTENT) { - ContentViewHolder contentViewHolder = (ContentViewHolder) holder; - int finalPosition = position - 1; - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - if (mHomes.get(finalPosition).getIcon() != -1) { - if (mHomes.get(finalPosition).getType() == Home.Type.DIMENSION) { - Glide.with(mContext) - .asBitmap() - .load("drawable://" + mHomes.get(finalPosition).getIcon()) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .listener(new RequestListener() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - return true; - } - - @Override - public boolean onResourceReady(Bitmap bitmap, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - new Handler(Looper.getMainLooper()).post(() -> { - // Using RoundedBitmapDrawable because BitmapDrawable is deprecated - RoundedBitmapDrawable drawable = RoundedBitmapDrawableFactory.create( - mContext.getResources(), bitmap); - drawable.setCornerRadius(0); - contentViewHolder.title.setCompoundDrawablesWithIntrinsicBounds( - DrawableHelper.getResizedDrawable(mContext, drawable, 40), - null, null, null); - }); - return true; - } - }) - .submit(); - } else { - contentViewHolder.title.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, mHomes.get(finalPosition).getIcon(), color), null, null, null); - } - } - - if (mHomes.get(finalPosition).getType() == Home.Type.ICONS) { - if (mHomes.get(finalPosition).isLoading() && CandyBarMainActivity.sIconsCount == 0 && CandyBarApplication.getConfiguration().isAutomaticIconsCountEnabled()) { - contentViewHolder.progressBar.setVisibility(View.VISIBLE); - contentViewHolder.title.setVisibility(View.GONE); - } else { - contentViewHolder.progressBar.setVisibility(View.GONE); - contentViewHolder.title.setVisibility(View.VISIBLE); - } - - contentViewHolder.title.setSingleLine(true); - contentViewHolder.title.setMaxLines(1); - contentViewHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_PX, - mContext.getResources().getDimension(R.dimen.text_max_size)); - contentViewHolder.title.setGravity(Gravity.END | Gravity.CENTER_VERTICAL); - contentViewHolder.title.setIncludeFontPadding(false); - contentViewHolder.title.setSizeToFit(true); - - contentViewHolder.subtitle.setGravity(Gravity.END | Gravity.CENTER_VERTICAL); - } else { - contentViewHolder.title.setTextSize(TypedValue.COMPLEX_UNIT_PX, - mContext.getResources().getDimension(R.dimen.text_content_title)); - } - - contentViewHolder.title.setTypeface(TypefaceHelper.getMedium(mContext)); - contentViewHolder.title.setText(mHomes.get(finalPosition).getTitle()); - - if (mHomes.get(finalPosition).getSubtitle().length() > 0) { - contentViewHolder.subtitle.setText(mHomes.get(finalPosition).getSubtitle()); - contentViewHolder.subtitle.setVisibility(View.VISIBLE); - } - } else if (holder.getItemViewType() == TYPE_ICON_REQUEST) { - IconRequestViewHolder iconRequestViewHolder = (IconRequestViewHolder) holder; - if (mContext.getResources().getBoolean(R.bool.hide_missing_app_count)) { - iconRequestViewHolder.dataContainer.setVisibility(View.GONE); - iconRequestViewHolder.progressBar.setVisibility(View.GONE); - } else if (CandyBarMainActivity.sMissedApps == null) { - // Missing apps are not yet loaded, show the progressbar - iconRequestViewHolder.dataContainer.setVisibility(View.GONE); - iconRequestViewHolder.progressBar.setVisibility(View.VISIBLE); - } else { - iconRequestViewHolder.dataContainer.setVisibility(View.VISIBLE); - iconRequestViewHolder.progressBar.setVisibility(View.GONE); - } - - int installed = CandyBarMainActivity.sInstalledAppsCount; - int missed = CandyBarMainActivity.sMissedApps == null ? - installed : CandyBarMainActivity.sMissedApps.size(); - int themed = installed - missed; - - iconRequestViewHolder.installedApps.setText(mContext.getResources().getString( - R.string.home_icon_request_installed_apps, installed)); - iconRequestViewHolder.missedApps.setText(mContext.getResources().getString( - R.string.home_icon_request_missed_apps, missed)); - iconRequestViewHolder.themedApps.setText(mContext.getResources().getString( - R.string.home_icon_request_themed_apps, themed)); - - iconRequestViewHolder.progress.setMax(installed); - iconRequestViewHolder.progress.setProgress(themed); - } else if (holder.getItemViewType() == TYPE_WALLPAPERS) { - WallpapersViewHolder wallpapersViewHolder = (WallpapersViewHolder) holder; - - wallpapersViewHolder.title.setText(mContext.getResources().getString( - R.string.home_loud_wallpapers, Preferences.get(mContext).getAvailableWallpapersCount())); - } - } - - @Override - public int getItemCount() { - return mHomes.size() + mItemsCount; - } - - @Override - public int getItemViewType(int position) { - if (position == 0) return TYPE_HEADER; - if (position == (mHomes.size() + 1) && mShowIconRequest) return TYPE_ICON_REQUEST; - - if (position == (getItemCount() - 2) && mShowWallpapers && mShowMoreApps) - return TYPE_WALLPAPERS; - - if (position == (getItemCount() - 1)) { - if (mShowMoreApps) return TYPE_GOOGLE_PLAY_DEV; - else if (mShowWallpapers) return TYPE_WALLPAPERS; - } - return TYPE_CONTENT; - } - - private class HeaderViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final HeaderView image; - private final TextView title; - private final TextView content; - - HeaderViewHolder(View itemView) { - super(itemView); - image = itemView.findViewById(R.id.header_image); - title = itemView.findViewById(R.id.title); - content = itemView.findViewById(R.id.content); - Button rate = itemView.findViewById(R.id.rate); - ImageView share = itemView.findViewById(R.id.share); - ImageView update = itemView.findViewById(R.id.update); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getHomeGrid() == CandyBarApplication.GridStyle.FLAT) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } else if (card.getLayoutParams() instanceof LinearLayout.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) card.getLayoutParams(); - if (mImageStyle.getType() == Home.Style.Type.LANDSCAPE || - mImageStyle.getType() == Home.Style.Type.SQUARE) { - params.setMargins(margin, - mContext.getResources().getDimensionPixelSize(R.dimen.content_padding_reverse), - margin, margin); - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card)) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - if (mContext.getResources().getString(R.string.rate_and_review_link).length() == 0) { - rate.setVisibility(View.GONE); - } - - if (mContext.getResources().getString(R.string.share_link).length() == 0) { - share.setVisibility(View.GONE); - } - - if ((!mContext.getResources().getBoolean(R.bool.enable_check_update)) || (mContext.getResources().getString(R.string.config_json).length() == 0)) { - update.setVisibility(View.GONE); - } - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorSecondary); - rate.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_rate, color), null, null, null); - share.setImageDrawable(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_share, color)); - update.setImageDrawable(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_update, color)); - - image.setRatio(mImageStyle.getPoint().x, mImageStyle.getPoint().y); - - rate.setOnClickListener(this); - share.setOnClickListener(this); - update.setOnClickListener(this); - } - - @Override - @SuppressLint("StringFormatInvalid") - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.rate) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(mContext.getResources().getString(R.string.rate_and_review_link) - .replaceAll("\\{\\{packageName\\}\\}", mContext.getPackageName()))); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - mContext.startActivity(intent); - } else if (id == R.id.share) { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("text/plain"); - intent.putExtra(Intent.EXTRA_SUBJECT, mContext.getResources().getString( - R.string.share_app_title, mContext.getResources().getString(R.string.app_name))); - intent.putExtra(Intent.EXTRA_TEXT, - mContext.getResources().getString(R.string.share_app_body, - mContext.getResources().getString(R.string.app_name), - "\n" + mContext.getResources().getString(R.string.share_link) - .replaceAll("\\{\\{packageName\\}\\}", mContext.getPackageName()))); - mContext.startActivity(Intent.createChooser(intent, - mContext.getResources().getString(R.string.app_client))); - } else if (id == R.id.update) { - new UpdateChecker().execute(); - } - } - } - - private class UpdateChecker extends AsyncTaskBase { - - private MaterialDialog loadingDialog; - private String latestVersion; - private String updateUrl; - private String[] changelog; - private boolean isUpdateAvailable; - - @Override - protected void preRun() { - loadingDialog = new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .content(R.string.checking_for_update) - .cancelable(false) - .canceledOnTouchOutside(false) - .progress(true, 0) - .progressIndeterminateStyle(true) - .build(); - - loadingDialog.show(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - boolean isSuccess = true; - String configJsonUrl = mContext.getResources().getString(R.string.config_json); - URLConnection urlConnection; - BufferedReader bufferedReader = null; - - try { - urlConnection = new URL(configJsonUrl).openConnection(); - bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); - - String line; - StringBuilder stringBuilder = new StringBuilder(); - while ((line = bufferedReader.readLine()) != null) { - stringBuilder.append(line); - } - - JSONObject configJson = new JSONObject(stringBuilder.toString()); - latestVersion = configJson.getString("latestVersion"); - updateUrl = configJson.getString("url"); - - PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0); - long latestVersionCode = configJson.getLong("latestVersionCode"); - long appVersionCode = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P ? packageInfo.getLongVersionCode() : packageInfo.versionCode; - - if (latestVersionCode > appVersionCode) { - isUpdateAvailable = true; - JSONArray changelogArray = configJson.getJSONArray("releaseNotes"); - changelog = new String[changelogArray.length()]; - for (int i = 0; i < changelogArray.length(); i++) { - changelog[i] = changelogArray.getString(i); - } - } - } catch (Exception ex) { - LogUtil.e("Error loading Configuration JSON " + Log.getStackTraceString(ex)); - isSuccess = false; - } finally { - if (bufferedReader != null) { - try { - bufferedReader.close(); - } catch (IOException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - } - - return isSuccess; - } - return false; - } - - @Override - @SuppressLint("SetTextI18n") - protected void postRun(boolean ok) { - loadingDialog.dismiss(); - loadingDialog = null; - - if (ok) { - MaterialDialog.Builder builder = new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .customView(R.layout.fragment_update, false); - - if (isUpdateAvailable) { - builder - .positiveText(R.string.update) - .negativeText(R.string.close) - .onPositive((dialog, which) -> { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(updateUrl)); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - mContext.startActivity(intent); - }); - } else { - builder.positiveText(R.string.close); - } - - MaterialDialog dialog = builder.build(); - - TextView changelogVersion = (TextView) dialog.findViewById(R.id.changelog_version); - ListView mChangelogList = (ListView) dialog.findViewById(R.id.changelog_list); - - if (isUpdateAvailable) { - changelogVersion.setText( - mContext.getResources().getString(R.string.update_available) + "\n" + - mContext.getResources().getString(R.string.changelog_version) + " " + - latestVersion); - mChangelogList.setAdapter(new ChangelogAdapter(mContext, changelog)); - } else { - changelogVersion.setText(mContext.getResources().getString(R.string.no_update_available)); - mChangelogList.setVisibility(View.GONE); - } - - dialog.show(); - } else { - new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .content(R.string.unable_to_load_config) - .positiveText(R.string.close) - .build() - .show(); - } - } - } - - private class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final TextView subtitle; - private final AutofitTextView title; - private final ProgressBar progressBar; - - ContentViewHolder(View itemView) { - super(itemView); - LinearLayout container = itemView.findViewById(R.id.container); - title = itemView.findViewById(R.id.title); - subtitle = itemView.findViewById(R.id.subtitle); - progressBar = itemView.findViewById(R.id.progressBar); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getHomeGrid() == CandyBarApplication.GridStyle.FLAT) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card)) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - container.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.container) { - int position = getBindingAdapterPosition() - 1; - if (position < 0 || position > mHomes.size()) return; - - switch (mHomes.get(position).getType()) { - case APPLY: - ((CandyBarMainActivity) mContext).selectPosition(1); - break; - case DONATE: - if (mContext instanceof CandyBarMainActivity) { - if (CandyBarApplication.getConfiguration().getDonationLinks() != null) { - DonationLinksFragment.showDonationLinksDialog(((AppCompatActivity) mContext).getSupportFragmentManager()); - break; - } - } - break; - case ICONS: - ((CandyBarMainActivity) mContext).selectPosition(2); - break; - case DIMENSION: - Home home = mHomes.get(position); - IconPreviewFragment.showIconPreview( - ((AppCompatActivity) mContext).getSupportFragmentManager(), - home.getTitle(), home.getIcon(), null); - break; - } - } - } - } - - private class IconRequestViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final TextView installedApps; - private final TextView themedApps; - private final TextView missedApps; - private final ProgressBar progress; - private final ProgressBar progressBar; - private final LinearLayout dataContainer; - - IconRequestViewHolder(View itemView) { - super(itemView); - TextView title = itemView.findViewById(R.id.title); - installedApps = itemView.findViewById(R.id.installed_apps); - missedApps = itemView.findViewById(R.id.missed_apps); - themedApps = itemView.findViewById(R.id.themed_apps); - progress = itemView.findViewById(R.id.progress); - LinearLayout container = itemView.findViewById(R.id.container); - progressBar = itemView.findViewById(R.id.progressBar); - dataContainer = itemView.findViewById(R.id.dataContainer); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getHomeGrid() == CandyBarApplication.GridStyle.FLAT) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card)) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - title.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_icon_request, color), null, null, null); - - int accent = ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary); - progress.getProgressDrawable().setColorFilter(accent, PorterDuff.Mode.SRC_IN); - - container.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.container) { - ((CandyBarMainActivity) mContext).selectPosition(3); - } - } - } - - private class WallpapersViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final TextView title; - - WallpapersViewHolder(View itemView) { - super(itemView); - title = itemView.findViewById(R.id.title); - TextView muzei = itemView.findViewById(R.id.muzei); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getHomeGrid() == CandyBarApplication.GridStyle.FLAT) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card)) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - title.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_wallpapers, color), null, null, null); - - muzei.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.get( - mContext, R.drawable.ic_home_app_muzei), null, null, null); - - title.setOnClickListener(this); - muzei.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.title) { - ((CandyBarMainActivity) mContext).selectPosition(4); - } else if (id == R.id.muzei) { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse( - "https://play.google.com/store/apps/details?id=net.nurik.roman.muzei")); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - mContext.startActivity(intent); - } - } - } - - private class GooglePlayDevViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - GooglePlayDevViewHolder(View itemView) { - super(itemView); - LinearLayout container = itemView.findViewById(R.id.container); - TextView title = itemView.findViewById(R.id.title); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getHomeGrid() == CandyBarApplication.GridStyle.FLAT) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card)) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - title.setCompoundDrawablesWithIntrinsicBounds(DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_google_play_more_apps, color), null, null, null); - - container.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.container) { - if (CandyBarApplication.getConfiguration().getOtherApps() != null) { - OtherAppsFragment.showOtherAppsDialog(((AppCompatActivity) mContext).getSupportFragmentManager()); - return; - } - - String link = mContext.getResources().getString(R.string.google_play_dev); - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(link)); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - mContext.startActivity(intent); - } - } - } - - public int getApplyIndex() { - int index = -1; - for (int i = 0; i < getItemCount(); i++) { - int type = getItemViewType(i); - if (type == TYPE_CONTENT) { - int pos = i - 1; - if (mHomes.get(pos).getType() == Home.Type.APPLY) { - index = i; - break; - } - } - } - return index; - } - - public Home getItem(int position) { - return mHomes.get(position - 1); - } - - public int getIconsIndex() { - int index = -1; - for (int i = 0; i < getItemCount(); i++) { - int type = getItemViewType(i); - if (type == TYPE_CONTENT) { - int pos = i - 1; - if (mHomes.get(pos).getType() == Home.Type.ICONS) { - index = i; - break; - } - } - } - return index; - } - - public int getDimensionsIndex() { - int index = -1; - for (int i = 0; i < getItemCount(); i++) { - int type = getItemViewType(i); - if (type == TYPE_CONTENT) { - int pos = i - 1; - if (mHomes.get(pos).getType() == Home.Type.DIMENSION) { - index = i; - break; - } - } - } - return index; - } - - public int getIconRequestIndex() { - int index = -1; - for (int i = 0; i < getItemCount(); i++) { - int type = getItemViewType(i); - if (type == TYPE_ICON_REQUEST) { - index = i; - break; - } - } - return index; - } - - public int getWallpapersIndex() { - int index = -1; - for (int i = 0; i < getItemCount(); i++) { - int type = getItemViewType(i); - if (type == TYPE_WALLPAPERS) { - index = i; - break; - } - } - return index; - } - - public void addNewContent(@Nullable Home home) { - if (home == null) return; - - mHomes.add(home); - notifyItemInserted(mHomes.size()); - } - - public void setOrientation(int orientation) { - mOrientation = orientation; - notifyDataSetChanged(); - } - - private boolean isFullSpan(int viewType) { - if (viewType == TYPE_HEADER) { - if (mOrientation == Configuration.ORIENTATION_PORTRAIT) { - return true; - } else return mImageStyle.getType() == Home.Style.Type.SQUARE || - mImageStyle.getType() == Home.Style.Type.LANDSCAPE; - } - return false; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/IconsAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/IconsAdapter.java deleted file mode 100644 index 419d978..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/IconsAdapter.java +++ /dev/null @@ -1,373 +0,0 @@ -package candybar.lib.adapters; - -import android.animation.Animator; -import android.animation.AnimatorListenerAdapter; -import android.app.Activity; -import android.content.Context; -import android.util.TypedValue; -import android.view.ActionMode; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.drawerlayout.widget.DrawerLayout; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.RecyclerView; -import androidx.viewpager2.widget.ViewPager2; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.SoftKeyboardHelper; -import com.google.android.material.tabs.TabLayout; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Set; - -import candybar.lib.R; -import candybar.lib.databases.Database; -import candybar.lib.fragments.IconsFragment; -import candybar.lib.helpers.IconsHelper; -import candybar.lib.helpers.IntentHelper; -import candybar.lib.items.Icon; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconsAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private List mIcons; - private List mIconsAll; - private final Fragment mFragment; - private final List mViewHolders; - - private List mSelectedIcons = new ArrayList<>(); - - private final boolean mIsShowIconName; - private final boolean mIsBookmarkMode; - - private ActionMode actionMode; - private final ActionMode.Callback actionModeCallback = new ActionMode.Callback() { - @Override - public boolean onCreateActionMode(ActionMode mode, Menu menu) { - actionMode = mode; - mode.getMenuInflater().inflate(R.menu.menu_bookmark_icons, menu); - Activity activity = (Activity) mContext; - TabLayout tabLayout = activity.findViewById(R.id.tab); - View shadow = activity.findViewById(R.id.shadow); - if (shadow != null) { - shadow.animate().translationY(-tabLayout.getHeight()).setDuration(200).start(); - } - tabLayout.animate().translationY(-tabLayout.getHeight()).setDuration(200) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animation) { - super.onAnimationEnd(animation); - tabLayout.setVisibility(View.GONE); - if (shadow != null) { - shadow.setTranslationY(0); - } - tabLayout.animate().setListener(null); - } - }).start(); - ((ViewPager2) activity.findViewById(R.id.pager)).setUserInputEnabled(false); - ((DrawerLayout) activity.findViewById(R.id.drawer_layout)) - .setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED); - for (ViewHolder holder : mViewHolders) { - holder.onActionModeChange(); - } - return true; - } - - @Override - public boolean onPrepareActionMode(ActionMode mode, Menu menu) { - mode.setTitle(mContext.getResources().getString(R.string.items_selected, mSelectedIcons.size())); - menu.findItem(R.id.menu_select_all).setIcon(mSelectedIcons.size() == mIcons.size() - ? R.drawable.ic_toolbar_select_all_selected : R.drawable.ic_toolbar_select_all); - menu.findItem(R.id.menu_delete).setVisible(mSelectedIcons.size() > 0); - return true; - } - - @Override - public boolean onActionItemClicked(ActionMode mode, MenuItem menuItem) { - int itemId = menuItem.getItemId(); - if (itemId == R.id.menu_delete) { - List drawableNames = new ArrayList<>(); - for (Icon icon : mSelectedIcons) drawableNames.add(icon.getDrawableName()); - Database.get(mContext).deleteBookmarkedIcons(drawableNames); - IconsFragment.reloadBookmarks(); - mode.finish(); - return true; - } else if (itemId == R.id.menu_select_all) { - if (mSelectedIcons.size() != mIcons.size()) { - for (ViewHolder holder : mViewHolders) { - holder.setChecked(true, true); - } - mSelectedIcons = new ArrayList<>(mIcons); - } else { - for (ViewHolder holder : mViewHolders) { - holder.setChecked(false, true); - } - mSelectedIcons = new ArrayList<>(); - } - actionMode.invalidate(); - } - return false; - } - - @Override - public void onDestroyActionMode(ActionMode mode) { - actionMode = null; - mSelectedIcons = new ArrayList<>(); - Activity activity = (Activity) mContext; - TabLayout tabLayout = activity.findViewById(R.id.tab); - View shadow = activity.findViewById(R.id.shadow); - if (shadow != null) { - shadow.setTranslationY(-tabLayout.getHeight()); - shadow.animate().translationY(0).setDuration(200).start(); - } - tabLayout.setVisibility(View.VISIBLE); - tabLayout.animate().translationY(0).setDuration(200).start(); - ((ViewPager2) activity.findViewById(R.id.pager)).setUserInputEnabled(true); - ((DrawerLayout) activity.findViewById(R.id.drawer_layout)) - .setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED); - for (ViewHolder holder : mViewHolders) { - holder.onActionModeChange(); - } - } - }; - - public IconsAdapter(@NonNull Context context, @NonNull List icons, Fragment fragment, boolean isBookmarkMode) { - mContext = context; - mFragment = fragment; - mIcons = icons; - mIsShowIconName = mContext.getResources().getBoolean(R.bool.show_icon_name); - mViewHolders = new ArrayList<>(); - mIsBookmarkMode = isBookmarkMode; - } - - public void setIcons(@NonNull List icons) { - mIcons = icons; - notifyDataSetChanged(); - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_icons_item_grid, parent, false); - return new ViewHolder(view); - } - - @Override - public void onBindViewHolder(ViewHolder holder, int position) { - Icon icon = mIcons.get(position); - holder.name.setText(icon.getTitle()); - mViewHolders.add(holder); - loadIconInto(holder.icon, position); - if (mIsBookmarkMode) { - holder.setCheckChangedListener(null); - holder.setChecked(mSelectedIcons.contains(icon), false); - holder.setCheckChangedListener(isChecked -> { - if (isChecked) { - mSelectedIcons.add(icon); - } else { - mSelectedIcons.remove(icon); - } - if (actionMode != null) actionMode.invalidate(); - }); - } - } - - @Override - public void onViewRecycled(@NonNull ViewHolder holder) { - mViewHolders.remove(holder); - super.onViewRecycled(holder); - } - - private void loadIconInto(ImageView imageView, int position) { - Glide.with(mFragment) - .load("drawable://" + mIcons.get(position).getRes()) - .skipMemoryCache(true) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(imageView); - } - - public void reloadIcons() { - Glide.get(mContext).clearMemory(); - for (ViewHolder holder : mViewHolders) { - int position = holder.getBindingAdapterPosition(); - if (position < 0 || position > getItemCount()) continue; - loadIconInto(holder.icon, holder.getBindingAdapterPosition()); - } - } - - @Override - public int getItemCount() { - return mIcons.size(); - } - - interface CheckChangedListener { - void onCheckChanged(boolean isChecked); - } - - class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { - private final ImageView icon; - private final TextView name; - - private final View container; - private final View innerContainer; - private final View checkBackground; - private boolean isChecked; - private CheckChangedListener checkChangedListener; - - ViewHolder(View itemView) { - super(itemView); - icon = itemView.findViewById(R.id.icon); - name = itemView.findViewById(R.id.name); - innerContainer = itemView.findViewById(R.id.inner_container); - checkBackground = itemView.findViewById(R.id.check_background); - - container = itemView.findViewById(R.id.container); - container.setOnClickListener(this); - - if (mIsBookmarkMode) { - container.setOnLongClickListener(this); - int color = ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary); - ((ImageView) checkBackground.findViewById(R.id.checkmark)) - .setImageDrawable(DrawableHelper.getTintedDrawable(mContext, R.drawable.ic_check_circle, color)); - } - - if (!mIsShowIconName) { - name.setVisibility(View.GONE); - } - - onActionModeChange(); - } - - private void onActionModeChange() { - TypedValue outValue = new TypedValue(); - if (actionMode != null) { - mContext.getTheme().resolveAttribute(R.attr.selectableItemBackground, outValue, true); - container.setBackgroundResource(outValue.resourceId); - innerContainer.setBackgroundResource(0); - } else { - mContext.getTheme().resolveAttribute(R.attr.selectableItemBackgroundBorderless, outValue, true); - container.setBackgroundResource(0); - innerContainer.setBackgroundResource(outValue.resourceId); - setChecked(false, true); - } - } - - private void setCheckChangedListener(CheckChangedListener checkChangedListener) { - this.checkChangedListener = checkChangedListener; - } - - private void setChecked(boolean isChecked, boolean animate) { - this.isChecked = isChecked; - float scale = isChecked ? (float) 0.6 : 1; - if (animate) { - checkBackground.animate().alpha(isChecked ? 1 : 0).setDuration(200).start(); - icon.animate().scaleX(scale).scaleY(scale).setDuration(200).start(); - } else { - checkBackground.setAlpha(isChecked ? 1 : 0); - icon.setScaleX(scale); - icon.setScaleY(scale); - } - if (checkChangedListener != null) { - checkChangedListener.onCheckChanged(isChecked); - } - } - - @Override - public void onClick(View view) { - int id = view.getId(); - int position = getBindingAdapterPosition(); - if (id == R.id.container) { - if (position < 0 || position > mIcons.size()) return; - if (actionMode != null) { - setChecked(!isChecked, true); - } else { - SoftKeyboardHelper.closeKeyboard(mContext); - IconsHelper.selectIcon(mContext, IntentHelper.sAction, mIcons.get(position)); - } - } - } - - @Override - public boolean onLongClick(View view) { - if (actionMode == null) { - ((Activity) mContext).startActionMode(actionModeCallback); - } - setChecked(!isChecked, true); - return true; - } - } - - public void search(String string) { - // Initialize mIconsAll if not initialized - // Also remove duplicates - if (mIconsAll == null) { - if (!mContext.getResources().getBoolean(R.bool.show_icon_name)) { - // It means the title of icon is not yet computed, so compute it - IconsHelper.computeTitles(mContext, mIcons); - } - - mIconsAll = new ArrayList<>(); - Set addedNames = new HashSet<>(); - Locale defaultLocale = Locale.getDefault(); - for (int i = 0; i < mIcons.size(); i++) { - Icon icon = mIcons.get(i); - String name = icon.getTitle(); - name = name.toLowerCase(defaultLocale); - if (!addedNames.contains(name)) { - mIconsAll.add(icon); - addedNames.add(name); - } - } - } - - String query = string.toLowerCase(Locale.getDefault()).trim(); - mIcons = new ArrayList<>(); - if (query.length() == 0) mIcons.addAll(mIconsAll); - else { - Locale defaultLocale = Locale.getDefault(); - for (int i = 0; i < mIconsAll.size(); i++) { - Icon icon = mIconsAll.get(i); - String name = icon.getTitle(); - name = name.toLowerCase(defaultLocale); - if (name.contains(query)) { - mIcons.add(icon); - } - } - } - notifyDataSetChanged(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/LauncherAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/LauncherAdapter.java deleted file mode 100644 index b568bd9..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/LauncherAdapter.java +++ /dev/null @@ -1,169 +0,0 @@ -package candybar.lib.adapters; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.helpers.LauncherHelper; -import candybar.lib.items.Icon; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class LauncherAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mLaunchers; - - private static final int TYPE_HEADER = 0; - private static final int TYPE_CONTENT = 1; - private static final int TYPE_FOOTER = 2; - - public LauncherAdapter(@NonNull Context context, @NonNull List launchers) { - mContext = context; - mLaunchers = launchers; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = null; - if (viewType == TYPE_HEADER) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_apply_item_header, parent, false); - } else if (viewType == TYPE_CONTENT) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_apply_item_list, parent, false); - } else if (viewType == TYPE_FOOTER) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_apply_item_footer, parent, false); - - return new FooterViewHolder(view); - } - return new ViewHolder(view, viewType); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder.getItemViewType() == TYPE_HEADER) { - ((ViewHolder) holder).name.setText(mLaunchers.get(position).getTitle()); - } else if (holder.getItemViewType() == TYPE_CONTENT) { - ViewHolder contentViewHolder = ((ViewHolder) holder); - contentViewHolder.name.setText(mLaunchers.get(position).getTitle()); - - Glide.with(mContext) - .asBitmap() - .load("drawable://" + mLaunchers.get(position).getRes()) - .transition(BitmapTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(contentViewHolder.icon); - } - } - - @Override - public int getItemCount() { - return mLaunchers.size() + 1; - } - - @Override - public int getItemViewType(int position) { - if (position == getFirstHeaderPosition() || position == getLastHeaderPosition()) { - return TYPE_HEADER; - } - if (position == getItemCount() - 1) return TYPE_FOOTER; - return TYPE_CONTENT; - } - - class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private TextView name; - private ImageView icon; - - ViewHolder(View itemView, int viewType) { - super(itemView); - if (viewType == TYPE_HEADER) { - name = itemView.findViewById(R.id.name); - } else if (viewType == TYPE_CONTENT) { - icon = itemView.findViewById(R.id.icon); - name = itemView.findViewById(R.id.name); - LinearLayout container = itemView.findViewById(R.id.container); - - container.setOnClickListener(this); - } - } - - @SuppressLint("StringFormatInvalid") - @Override - public void onClick(View view) { - int id = view.getId(); - int position = getBindingAdapterPosition(); - if (id == R.id.container) { - if (position < 0 || position > getItemCount()) return; - try { - LauncherHelper.apply(mContext, - mLaunchers.get(position).getPackageName(), - mLaunchers.get(position).getTitle()); - } catch (Exception e) { - Toast.makeText(mContext, mContext.getResources().getString( - R.string.apply_launch_failed, mLaunchers.get(position).getTitle()), - Toast.LENGTH_LONG).show(); - } - - } - } - } - - class FooterViewHolder extends RecyclerView.ViewHolder { - - FooterViewHolder(View itemView) { - super(itemView); - if (!Preferences.get(mContext).isCardShadowEnabled()) { - View shadow = itemView.findViewById(R.id.shadow); - shadow.setVisibility(View.GONE); - } - } - } - - public int getFirstHeaderPosition() { - return mLaunchers.indexOf(new Icon( - mContext.getResources().getString(R.string.apply_installed), -1, null)); - } - - public int getLastHeaderPosition() { - return mLaunchers.indexOf(new Icon( - mContext.getResources().getString(R.string.apply_supported), -2, null)); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/PresetsAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/PresetsAdapter.java deleted file mode 100644 index 3a2b711..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/PresetsAdapter.java +++ /dev/null @@ -1,314 +0,0 @@ -package candybar.lib.adapters; - -import android.animation.AnimatorInflater; -import android.animation.StateListAnimator; -import android.app.WallpaperManager; -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Build; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.recyclerview.widget.RecyclerView; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.card.MaterialCardView; - -import org.kustom.api.preset.AssetPresetFile; -import org.kustom.api.preset.PresetInfoLoader; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Preset; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.views.HeaderView; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class PresetsAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mPresets; - private Drawable wallpaperDrawable = null; - - private final int TYPE_HEADER = 0; - private final int TYPE_CONTENT = 1; - - public PresetsAdapter(@NonNull Context context, List presets) { - mContext = context; - mPresets = presets; - try { - wallpaperDrawable = WallpaperManager.getInstance(context).getDrawable(); - } catch (Exception ignored) { - LogUtil.e("Unable to load wallpaper. Storage permission is not granted."); - } - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = null; - if (viewType == TYPE_HEADER) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_presets_item_header, parent, false); - } else if (viewType == TYPE_CONTENT) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_presets_item_grid, parent, false); - } - return new ViewHolder(view, viewType); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - Preset preset = mPresets.get(position); - - if (holder.getItemViewType() == TYPE_HEADER) { - holder.name.setText(preset.getHeaderText()); - holder.setType(preset.getHeaderText()); - } else if (holder.getItemViewType() == TYPE_CONTENT) { - PresetInfoLoader.create(new AssetPresetFile(preset.getPath())) - .load(mContext, info -> holder.name.setText(info.getTitle())); - - Glide.with(mContext) - .asBitmap() - .load(new AssetPresetFile(preset.getPath())) - .transition(BitmapTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(holder.image); - } - } - - public boolean isHeader(int position) { - return mPresets.get(position).isHeader(); - } - - @Override - public int getItemCount() { - return mPresets.size(); - } - - @Override - public int getItemViewType(int position) { - if (isHeader(position)) return TYPE_HEADER; - return TYPE_CONTENT; - } - - class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private HeaderView image; - private TextView name; - private final MaterialCardView card; - - ViewHolder(View itemView, int viewType) { - super(itemView); - - name = itemView.findViewById(R.id.name); - card = itemView.findViewById(R.id.card); - - if (viewType == TYPE_HEADER) { - if (mContext.getResources().getBoolean(R.bool.use_flat_card)) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - } else if (viewType == TYPE_CONTENT) { - name = itemView.findViewById(R.id.name); - image = itemView.findViewById(R.id.image); - - if (CandyBarApplication.getConfiguration().getWallpapersGrid() == CandyBarApplication.GridStyle.FLAT) { - card.setCardElevation(0); - card.setMaxCardElevation(0); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - StateListAnimator stateListAnimator = AnimatorInflater - .loadStateListAnimator(mContext, R.animator.card_lift); - card.setStateListAnimator(stateListAnimator); - } - - if (wallpaperDrawable != null) { - ((HeaderView) itemView.findViewById(R.id.wallpaper_bg)).setImageDrawable(wallpaperDrawable); - } - - card.setOnClickListener(this); - } - } - - public boolean isPackageInstalled(String pkgName) { - try { - mContext.getPackageManager().getPackageInfo(pkgName, 0); - return true; - } catch (PackageManager.NameNotFoundException e) { - return false; - } - } - - public List getRequiredApps(String type) { - type = type.toLowerCase(Locale.ROOT); - String nameBase = ""; - String pkgBase = ""; - - switch (type) { - case "lockscreens": - nameBase = "KLCK"; - pkgBase = "org.kustom.lockscreen"; - break; - case "wallpapers": - nameBase = "KLWP"; - pkgBase = "org.kustom.wallpaper"; - break; - case "widgets": - nameBase = "KWGT"; - pkgBase = "org.kustom.widget"; - break; - } - - String namePro = nameBase + " Pro"; - String pkgPro = pkgBase + ".pro"; - - List requiredApps = new ArrayList<>(); - - if (!isPackageInstalled(pkgBase)) { - requiredApps.add(new String[]{nameBase, pkgBase}); - } - if (!isPackageInstalled(pkgPro)) { - requiredApps.add(new String[]{namePro, pkgPro}); - } - - return requiredApps; - } - - public void setType(String type) { - List requiredApps = getRequiredApps(type); - LinearLayout linearLayout = itemView.findViewById(R.id.container); - - if (requiredApps.size() > 0) { - for (String[] requiredApp : requiredApps) { - View item = LayoutInflater.from(mContext).inflate(R.layout.fragment_presets_item_header_list, linearLayout, false); - ((TextView) item.findViewById(R.id.name)).setText(requiredApp[0]); - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - ((ImageView) item.findViewById(R.id.kustom_icon)).setImageDrawable( - DrawableHelper.getTintedDrawable(mContext, R.drawable.ic_drawer_presets, color)); - item.setOnClickListener(v -> { - try { - Intent store = new Intent(Intent.ACTION_VIEW, Uri.parse( - "https://play.google.com/store/apps/details?id=" + requiredApp[1])); - mContext.startActivity(store); - } catch (ActivityNotFoundException e) { - Toast.makeText(mContext, mContext.getResources().getString( - R.string.no_browser), Toast.LENGTH_LONG).show(); - } - }); - ((ImageView) item.findViewById(R.id.forward_icon)).setImageDrawable( - DrawableHelper.getTintedDrawable(mContext, R.drawable.ic_arrow_forward, color)); - linearLayout.addView(item); - } - } else { - card.setVisibility(View.GONE); - } - } - - @Override - public void onClick(View view) { - int id = view.getId(); - int position = getBindingAdapterPosition(); - if (id == R.id.card) { - Preset preset = mPresets.get(position); - String type = preset.getPath().split("/")[0]; - - if (!type.equals("komponents")) { - String pkg = null, cls = null; - - switch (type) { - case "lockscreens": - pkg = "org.kustom.lockscreen"; - cls = "org.kustom.lib.editor.LockAdvancedEditorActivity"; - break; - case "wallpapers": - pkg = "org.kustom.wallpaper"; - cls = "org.kustom.lib.editor.WpAdvancedEditorActivity"; - break; - case "widgets": - pkg = "org.kustom.widget"; - cls = "org.kustom.widget.picker.WidgetPicker"; - break; - } - - Intent intent = new Intent(); - intent.setComponent(new ComponentName(pkg, cls)); - - try { - intent.setData(new Uri.Builder() - .scheme("kfile") - .authority(mContext.getPackageName() + ".kustom.provider") - .appendPath(preset.getPath()) - .build()); - } catch (Exception ignored) { - intent.setData(Uri.parse("kfile://" + mContext.getPackageName() + "/" + preset.getPath())); - } - - if (getRequiredApps(type).size() > 0) { - new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .content(R.string.presets_required_apps_not_installed) - .positiveText(R.string.close) - .show(); - } else { - mContext.startActivity(intent); - } - } else { - // TODO: Handle Komponent click - } - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/RequestAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/RequestAdapter.java deleted file mode 100644 index 4a5c33a..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/RequestAdapter.java +++ /dev/null @@ -1,533 +0,0 @@ -package candybar.lib.adapters; - -import android.content.Context; -import android.graphics.PorterDuff; -import android.os.Build; -import android.util.Log; -import android.util.SparseBooleanArray; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Button; -import android.widget.CheckBox; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.ProgressBar; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.card.MaterialCardView; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.items.Request; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.listeners.RequestListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class RequestAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mRequests; - private SparseBooleanArray mSelectedItems; - - private final int mTextColorSecondary; - private final int mTextColorAccent; - private boolean mSelectedAll = false; - - private final boolean mShowShadow; - private final boolean mShowPremiumRequest; - private final boolean mShowRegularRequest; - - private static final int TYPE_HEADER = 0; - private static final int TYPE_CONTENT = 1; - private static final int TYPE_FOOTER = 2; - - public RequestAdapter(@NonNull Context context, @NonNull List requests, int spanCount) { - mContext = context; - mRequests = requests; - mTextColorSecondary = ColorHelper.getAttributeColor(mContext, - android.R.attr.textColorSecondary); - mTextColorAccent = ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary); - mSelectedItems = new SparseBooleanArray(); - - mShowShadow = (spanCount == 1); - mShowPremiumRequest = Preferences.get(mContext).isPremiumRequestEnabled(); - mShowRegularRequest = Preferences.get(mContext).isRegularRequestLimit(); - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == TYPE_HEADER) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_request_item_header, parent, false); - - StaggeredGridLayoutManager.LayoutParams params = getLayoutParams(view); - if (params != null) params.setFullSpan(false); - return new HeaderViewHolder(view); - } else if (viewType == TYPE_CONTENT) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_request_item_list, parent, false); - - StaggeredGridLayoutManager.LayoutParams params = getLayoutParams(view); - if (params != null) params.setFullSpan(false); - return new ContentViewHolder(view); - } - - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_request_item_footer, parent, false); - - StaggeredGridLayoutManager.LayoutParams params = getLayoutParams(view); - if (params != null) params.setFullSpan(true); - return new FooterViewHolder(view); - } - - @Override - public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) { - super.onViewRecycled(holder); - if (holder.getItemViewType() == TYPE_CONTENT) { - ContentViewHolder contentViewHolder = (ContentViewHolder) holder; - contentViewHolder.content.setTextColor(mTextColorSecondary); - - if (mShowShadow) { - contentViewHolder.divider.setVisibility(View.VISIBLE); - } - } - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder.getItemViewType() == TYPE_HEADER) { - HeaderViewHolder HeaderViewHolder = (HeaderViewHolder) holder; - if (Preferences.get(mContext).isPremiumRequestEnabled()) { - if (Preferences.get(mContext).isPremiumRequest()) { - HeaderViewHolder.button.setVisibility(View.GONE); - HeaderViewHolder.premContent.setVisibility(View.GONE); - HeaderViewHolder.premContainer.setVisibility(View.VISIBLE); - - int total = Preferences.get(mContext).getPremiumRequestTotal(); - int available = Preferences.get(mContext).getPremiumRequestCount(); - - HeaderViewHolder.premTotal.setText(mContext.getResources().getString( - R.string.premium_request_count, total)); - HeaderViewHolder.premAvailable.setText(mContext.getResources().getString( - R.string.premium_request_available, available)); - HeaderViewHolder.premUsed.setText(mContext.getResources().getString( - R.string.premium_request_used, (total - available))); - - HeaderViewHolder.premProgress.setMax(total); - HeaderViewHolder.premProgress.setProgress(available); - } else { - HeaderViewHolder.button.setVisibility(View.VISIBLE); - HeaderViewHolder.premContent.setVisibility(View.VISIBLE); - HeaderViewHolder.premContainer.setVisibility(View.GONE); - } - } else { - HeaderViewHolder.premWholeContainer.setVisibility(View.GONE); - } - - if (Preferences.get(mContext).isRegularRequestLimit()) { - int total = mContext.getResources().getInteger(R.integer.icon_request_limit); - int used = Preferences.get(mContext).getRegularRequestUsed(); - int available = total - used; - - HeaderViewHolder.regTotal.setText(mContext.getResources().getString( - R.string.regular_request_count, total)); - HeaderViewHolder.regAvailable.setText(mContext.getResources().getString( - R.string.regular_request_available, available)); - HeaderViewHolder.regUsed.setText(mContext.getResources().getString( - R.string.regular_request_used, used)); - - HeaderViewHolder.regProgress.setMax(total); - HeaderViewHolder.regProgress.setProgress(available); - } else { - HeaderViewHolder.regWholeContainer.setVisibility(View.GONE); - } - - if (!mContext.getResources().getBoolean(R.bool.enable_icon_request)) { - HeaderViewHolder.regWholeContainer.setVisibility(View.GONE); - } - } else if (holder.getItemViewType() == TYPE_CONTENT) { - int finalPosition = mShowPremiumRequest ? position - 1 : position; - ContentViewHolder contentViewHolder = (ContentViewHolder) holder; - - Glide.with(mContext) - .load("package://" + mRequests.get(finalPosition).getActivity()) - .override(272) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(contentViewHolder.icon); - - contentViewHolder.title.setText(mRequests.get(finalPosition).getName()); - - if (mRequests.get(finalPosition).isRequested()) { - contentViewHolder.content.setTextColor(mTextColorAccent); - contentViewHolder.content.setText(mContext.getResources().getString( - R.string.request_already_requested)); - } else { - contentViewHolder.content.setText(mContext.getResources().getString( - R.string.request_not_requested)); - } - - contentViewHolder.checkbox.setChecked(mSelectedItems.get(finalPosition, false)); - - if (finalPosition == (mRequests.size() - 1) && mShowShadow) { - contentViewHolder.divider.setVisibility(View.GONE); - } - } - } - - @Override - public int getItemCount() { - int count = mRequests == null ? 0 : mRequests.size(); - if (mShowShadow) count += 1; - if (mShowPremiumRequest) count += 1; - return count; - } - - @Override - public int getItemViewType(int position) { - if (position == 0 && (mShowPremiumRequest || mShowRegularRequest)) return TYPE_HEADER; - if (position == (getItemCount() - 1) && mShowShadow) return TYPE_FOOTER; - return TYPE_CONTENT; - } - - private class HeaderViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final TextView premContent; - private final TextView premTotal; - private final TextView premAvailable; - private final TextView premUsed; - private final Button button; - private final LinearLayout premContainer; - private final LinearLayout premWholeContainer; - private final ProgressBar premProgress; - - private final TextView regTotal; - private final TextView regAvailable; - private final TextView regUsed; - private final LinearLayout regWholeContainer; - private final ProgressBar regProgress; - - HeaderViewHolder(View itemView) { - super(itemView); - TextView premTitle = itemView.findViewById(R.id.premium_request_title); - premContent = itemView.findViewById(R.id.premium_request_content); - button = itemView.findViewById(R.id.buy); - - premWholeContainer = itemView.findViewById(R.id.premium_request_container); - premContainer = itemView.findViewById(R.id.premium_request); - premTotal = itemView.findViewById(R.id.premium_request_total); - premAvailable = itemView.findViewById(R.id.premium_request_available); - premUsed = itemView.findViewById(R.id.premium_request_used); - premProgress = itemView.findViewById(R.id.premium_request_progress); - - - TextView regTitle = itemView.findViewById(R.id.regular_request_title); - TextView regContent = itemView.findViewById(R.id.regular_request_content); - regWholeContainer = itemView.findViewById(R.id.regular_request_container); - LinearLayout regContainer = itemView.findViewById(R.id.regular_request); - regTotal = itemView.findViewById(R.id.regular_request_total); - regAvailable = itemView.findViewById(R.id.regular_request_available); - regUsed = itemView.findViewById(R.id.regular_request_used); - regProgress = itemView.findViewById(R.id.regular_request_progress); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getRequestStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT && - card != null) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card) && card != null) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled() && card != null) { - card.setCardElevation(0); - } - - int padding = mContext.getResources().getDimensionPixelSize(R.dimen.content_margin) + mContext.getResources().getDimensionPixelSize(R.dimen.icon_size_small); - premContent.setPadding(padding, 0, 0, 0); - premContainer.setPadding(padding, 0, padding, 0); - - regContent.setPadding(padding, 0, 0, 0); - regContainer.setPadding(padding, 0, padding, 0); - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - premTitle.setCompoundDrawablesWithIntrinsicBounds( - DrawableHelper.getTintedDrawable(mContext, - R.drawable.ic_toolbar_premium_request, color), - null, null, null); - - regTitle.setCompoundDrawablesWithIntrinsicBounds( - DrawableHelper.getTintedDrawable(mContext, - R.drawable.ic_toolbar_icon_request, color), - null, null, null); - - int primary = ColorHelper.getAttributeColor(mContext, R.attr.colorPrimary); - int accent = ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary); - button.setTextColor(ColorHelper.getTitleTextColor(primary)); - - premProgress.getProgressDrawable().setColorFilter(accent, PorterDuff.Mode.SRC_IN); - regProgress.getProgressDrawable().setColorFilter(accent, PorterDuff.Mode.SRC_IN); - - button.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.buy) { - RequestListener listener = (RequestListener) mContext; - } - } - } - - private class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { - - private final TextView title; - private final TextView content; - private final ImageView icon; - private final CheckBox checkbox; - private final View divider; - - ContentViewHolder(View itemView) { - super(itemView); - title = itemView.findViewById(R.id.name); - content = itemView.findViewById(R.id.requested); - icon = itemView.findViewById(R.id.icon); - checkbox = itemView.findViewById(R.id.checkbox); - LinearLayout container = itemView.findViewById(R.id.container); - divider = itemView.findViewById(R.id.divider); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getRequestStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT && - card != null) { - if (card.getLayoutParams() instanceof StaggeredGridLayoutManager.LayoutParams) { - card.setRadius(0f); - card.setUseCompatPadding(false); - int margin = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(0, 0, margin, margin); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - params.setMarginEnd(margin); - } - } - } - - if (mContext.getResources().getBoolean(R.bool.use_flat_card) && card != null) { - card.setStrokeWidth(mContext.getResources().getDimensionPixelSize(R.dimen.card_stroke_width)); - card.setCardElevation(0); - card.setUseCompatPadding(false); - int marginTop = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_top); - int marginLeft = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_left); - int marginRight = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_right); - int marginBottom = mContext.getResources().getDimensionPixelSize(R.dimen.card_margin_bottom); - StaggeredGridLayoutManager.LayoutParams params = (StaggeredGridLayoutManager.LayoutParams) card.getLayoutParams(); - params.setMargins(marginLeft, marginTop, marginRight, marginBottom); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - if (card != null) card.setCardElevation(0); - } - - container.setOnClickListener(this); - container.setOnLongClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.container) { - int position = mShowPremiumRequest ? - getBindingAdapterPosition() - 1 : getBindingAdapterPosition(); - if (toggleSelection(position)) { - checkbox.toggle(); - } - } - } - - @Override - public boolean onLongClick(View view) { - int id = view.getId(); - if (id == R.id.container) { - int position = mShowPremiumRequest ? - getBindingAdapterPosition() - 1 : getBindingAdapterPosition(); - if (toggleSelection(position)) { - checkbox.toggle(); - return true; - } - } - return false; - } - } - - private class FooterViewHolder extends RecyclerView.ViewHolder { - - FooterViewHolder(View itemView) { - super(itemView); - View shadow = itemView.findViewById(R.id.shadow); - if (!Preferences.get(mContext).isCardShadowEnabled()) { - shadow.setVisibility(View.GONE); - } - } - } - - @Nullable - private StaggeredGridLayoutManager.LayoutParams getLayoutParams(@Nullable View view) { - if (view != null) { - try { - return (StaggeredGridLayoutManager.LayoutParams) view.getLayoutParams(); - } catch (Exception e) { - LogUtil.d(Log.getStackTraceString(e)); - } - } - return null; - } - - private boolean toggleSelection(int position) { - if (position >= 0 && position < mRequests.size()) { - if (mSelectedItems.get(position, false)) - mSelectedItems.delete(position); - else mSelectedItems.put(position, true); - try { - RequestListener listener = (RequestListener) mContext; - listener.onRequestSelected(getSelectedItemsSize()); - return true; - } catch (Exception ignored) { - } - } - return false; - } - - public boolean selectAll() { - if (mSelectedAll) { - mSelectedAll = false; - resetSelectedItems(); - return false; - } - - mSelectedItems.clear(); - for (int i = 0; i < mRequests.size(); i++) { - if (!mRequests.get(i).isRequested()) - mSelectedItems.put(i, true); - } - mSelectedAll = mSelectedItems.size() > 0; - notifyDataSetChanged(); - - try { - RequestListener listener = (RequestListener) mContext; - listener.onRequestSelected(getSelectedItemsSize()); - } catch (Exception ignored) { - } - return mSelectedAll; - } - - public void setRequested(int position, boolean requested) { - mRequests.get(position).setRequested(requested); - } - - public int getSelectedItemsSize() { - return mSelectedItems.size(); - } - - public List getSelectedItems() { - List selected = new ArrayList<>(); - for (int i = 0; i < mSelectedItems.size(); i++) { - selected.add(mSelectedItems.keyAt(i)); - } - return selected; - } - - public SparseBooleanArray getSelectedItemsArray() { - return mSelectedItems; - } - - public void setSelectedItemsArray(SparseBooleanArray selectedItems) { - mSelectedItems = selectedItems; - notifyDataSetChanged(); - } - - public void resetSelectedItems() { - mSelectedAll = false; - mSelectedItems.clear(); - try { - RequestListener listener = (RequestListener) mContext; - listener.onRequestSelected(getSelectedItemsSize()); - } catch (Exception ignored) { - } - notifyDataSetChanged(); - } - - public List getSelectedApps() { - List items = new ArrayList<>(mSelectedItems.size()); - for (int i = 0; i < mSelectedItems.size(); i++) { - int position = mSelectedItems.keyAt(i); - if (position >= 0 && position < mRequests.size()) { - Request request = mRequests.get(mSelectedItems.keyAt(i)); - items.add(request); - } - } - return items; - } - - public boolean isContainsRequested() { - List requests = getSelectedApps(); - boolean requested = false; - for (int i = 0; i < requests.size(); i++) { - if (requests.get(i).isRequested()) { - requested = true; - break; - } - } - return requested; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/SettingsAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/SettingsAdapter.java deleted file mode 100644 index d3ab6e4..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/SettingsAdapter.java +++ /dev/null @@ -1,270 +0,0 @@ -package candybar.lib.adapters; - -import android.content.Context; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.databases.Database; -import candybar.lib.fragments.SettingsFragment; -import candybar.lib.fragments.dialog.ChangelogFragment; -import candybar.lib.fragments.dialog.LanguagesFragment; -import candybar.lib.fragments.dialog.ThemeChooserFragment; -import candybar.lib.helpers.ReportBugsHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Setting; -import candybar.lib.preferences.Preferences; -import candybar.lib.tasks.IconRequestTask; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class SettingsAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mSettings; - - private static final int TYPE_CONTENT = 0; - private static final int TYPE_FOOTER = 1; - - public SettingsAdapter(@NonNull Context context, @NonNull List settings) { - mContext = context; - mSettings = settings; - } - - @NonNull - @Override - public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - if (viewType == TYPE_CONTENT) { - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_settings_item_list, parent, false); - return new ContentViewHolder(view); - } - - View view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_settings_item_footer, parent, false); - return new FooterViewHolder(view); - } - - @Override - public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { - if (holder.getItemViewType() == TYPE_CONTENT) { - ContentViewHolder contentViewHolder = (ContentViewHolder) holder; - Setting setting = mSettings.get(position); - - if (setting.getTitle().length() == 0) { - contentViewHolder.title.setVisibility(View.GONE); - contentViewHolder.divider.setVisibility(View.GONE); - contentViewHolder.container.setVisibility(View.VISIBLE); - - contentViewHolder.subtitle.setText(setting.getSubtitle()); - - if (setting.getContent().length() == 0) { - contentViewHolder.content.setVisibility(View.GONE); - } else { - contentViewHolder.content.setText(setting.getContent()); - contentViewHolder.content.setVisibility(View.VISIBLE); - } - - if (setting.getFooter().length() == 0) { - contentViewHolder.footer.setVisibility(View.GONE); - } else { - contentViewHolder.footer.setText(setting.getFooter()); - contentViewHolder.footer.setVisibility(View.VISIBLE); - } - } else { - contentViewHolder.container.setVisibility(View.GONE); - contentViewHolder.title.setVisibility(View.VISIBLE); - contentViewHolder.title.setText(setting.getTitle()); - - if (position > 0) { - contentViewHolder.divider.setVisibility(View.VISIBLE); - } else { - contentViewHolder.divider.setVisibility(View.GONE); - } - - if (setting.getIcon() != -1) { - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - contentViewHolder.title.setCompoundDrawablesWithIntrinsicBounds( - DrawableHelper.getTintedDrawable(mContext, setting.getIcon(), color), null, null, null); - } - } - } - } - - @Override - public int getItemCount() { - return mSettings.size() + 1; - } - - @Override - public int getItemViewType(int position) { - if (position == getItemCount() - 1) return TYPE_FOOTER; - return TYPE_CONTENT; - } - - private class ContentViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { - - private final TextView title; - private final TextView subtitle; - private final TextView content; - private final TextView footer; - private final LinearLayout container; - private final View divider; - - ContentViewHolder(View itemView) { - super(itemView); - title = itemView.findViewById(R.id.title); - subtitle = itemView.findViewById(R.id.subtitle); - content = itemView.findViewById(R.id.content); - footer = itemView.findViewById(R.id.footer); - divider = itemView.findViewById(R.id.divider); - container = itemView.findViewById(R.id.container); - - container.setOnClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.container) { - int position = getBindingAdapterPosition(); - - if (position < 0 || position > mSettings.size()) return; - - Setting setting = mSettings.get(position); - switch (setting.getType()) { - case CACHE: - new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .content(R.string.pref_data_cache_clear_dialog) - .positiveText(R.string.clear) - .negativeText(android.R.string.cancel) - .onPositive((dialog, which) -> { - try { - File cache = mContext.getCacheDir(); - FileHelper.clearDirectory(cache); - - double size = (double) FileHelper.getDirectorySize(cache) / FileHelper.MB; - NumberFormat formatter = new DecimalFormat("#0.00"); - - setting.setFooter(mContext.getResources().getString( - R.string.pref_data_cache_size, formatter.format(size) + " MB")); - notifyItemChanged(position); - - Toast.makeText(mContext, R.string.pref_data_cache_cleared, - Toast.LENGTH_LONG).show(); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }) - .show(); - break; - case ICON_REQUEST: - new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .content(R.string.pref_data_request_clear_dialog) - .positiveText(R.string.clear) - .negativeText(android.R.string.cancel) - .onPositive((dialog, which) -> { - Database.get(mContext).deleteIconRequestData(); - - CandyBarMainActivity.sMissedApps = null; - new IconRequestTask(mContext).executeOnThreadPool(); - - Toast.makeText(mContext, R.string.pref_data_request_cleared, - Toast.LENGTH_LONG).show(); - }) - .show(); - break; - case RESTORE: - try { - } catch (Exception ignored) { - } - break; - case PREMIUM_REQUEST: - FragmentManager fm = ((AppCompatActivity) mContext).getSupportFragmentManager(); - if (fm == null) return; - - Fragment fragment = fm.findFragmentByTag("settings"); - if (fragment == null) return; - - if (fragment instanceof SettingsFragment) { - ((SettingsFragment) fragment).rebuildPremiumRequest(); - } - break; - case THEME: - ThemeChooserFragment.showThemeChooser(((AppCompatActivity) mContext).getSupportFragmentManager()); - break; - case LANGUAGE: - LanguagesFragment.showLanguageChooser(((AppCompatActivity) mContext).getSupportFragmentManager()); - break; - case REPORT_BUGS: - ReportBugsHelper.prepareReportBugs(mContext); - break; - case CHANGELOG: - ChangelogFragment.showChangelog(((AppCompatActivity) mContext).getSupportFragmentManager()); - break; - case RESET_TUTORIAL: - Preferences.get(mContext).setTimeToShowHomeIntro(true); - Preferences.get(mContext).setTimeToShowIconsIntro(true); - Preferences.get(mContext).setTimeToShowRequestIntro(true); - Preferences.get(mContext).setTimeToShowWallpapersIntro(true); - Preferences.get(mContext).setTimeToShowWallpaperPreviewIntro(true); - - Toast.makeText(mContext, R.string.pref_others_reset_tutorial_reset, Toast.LENGTH_LONG).show(); - break; - } - } - } - } - - private class FooterViewHolder extends RecyclerView.ViewHolder { - - FooterViewHolder(View itemView) { - super(itemView); - if (!Preferences.get(mContext).isCardShadowEnabled()) { - View shadow = itemView.findViewById(R.id.shadow); - shadow.setVisibility(View.GONE); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/WallpapersAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/WallpapersAdapter.java deleted file mode 100644 index d85fc96..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/WallpapersAdapter.java +++ /dev/null @@ -1,256 +0,0 @@ -package candybar.lib.adapters; - -import android.animation.AnimatorInflater; -import android.animation.StateListAnimator; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.graphics.Point; -import android.os.Build; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.google.android.material.card.MaterialCardView; -import com.kogitune.activitytransition.ActivityTransitionLauncher; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarWallpaperActivity; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.ViewHelper; -import candybar.lib.items.PopupItem; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; -import candybar.lib.tasks.WallpaperApplyTask; -import candybar.lib.utils.Extras; -import candybar.lib.utils.ImageConfig; -import candybar.lib.utils.Popup; -import candybar.lib.utils.WallpaperDownloader; -import candybar.lib.utils.views.HeaderView; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class WallpapersAdapter extends RecyclerView.Adapter { - - private final Context mContext; - private final List mWallpapers; - private final List mWallpapersAll; - - public static boolean sIsClickable = true; - private final boolean mIsShowName; - - public WallpapersAdapter(@NonNull Context context, @NonNull List wallpapers) { - mContext = context; - mWallpapers = wallpapers; - mWallpapersAll = new ArrayList<>(wallpapers); - mIsShowName = mContext.getResources().getBoolean(R.bool.wallpaper_show_name_author); - } - - @NonNull - @Override - public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view; - if (mIsShowName) { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_wallpapers_item_grid, parent, false); - } else { - view = LayoutInflater.from(mContext).inflate( - R.layout.fragment_wallpapers_item_grid_alt, parent, false); - } - return new ViewHolder(view); - } - - @Override - public void onBindViewHolder(@NonNull ViewHolder holder, int position) { - Wallpaper wallpaper = mWallpapers.get(position); - if (mIsShowName) { - holder.name.setText(wallpaper.getName()); - holder.author.setText(wallpaper.getAuthor()); - } - - Glide.with(mContext) - .asBitmap() - .load(wallpaper.getThumbUrl()) - .override(ImageConfig.getThumbnailSize()) - .transition(BitmapTransitionOptions.withCrossFade(300)) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .listener(new RequestListener() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - return false; - } - - @Override - public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - holder.thumbnailBitmap = resource; - return false; - } - }) - .into(holder.image); - } - - public void search(String string) { - String query = string.toLowerCase(Locale.getDefault()).trim(); - mWallpapers.clear(); - if (query.length() == 0) mWallpapers.addAll(mWallpapersAll); - else { - for (int i = 0; i < mWallpapersAll.size(); i++) { - Wallpaper wallpaper = mWallpapersAll.get(i); - if (wallpaper.getName().toLowerCase(Locale.getDefault()).contains(query)) { - mWallpapers.add(wallpaper); - } - } - } - notifyDataSetChanged(); - } - - @Override - public int getItemCount() { - return mWallpapers.size(); - } - - class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, - View.OnLongClickListener { - - private final HeaderView image; - private TextView name; - private TextView author; - private Bitmap thumbnailBitmap; - - ViewHolder(View itemView) { - super(itemView); - String viewStyle = mContext.getResources().getString( - R.string.wallpaper_grid_preview_style); - Point ratio = ViewHelper.getWallpaperViewRatio(viewStyle); - - image = itemView.findViewById(R.id.image); - image.setRatio(ratio.x, ratio.y); - - MaterialCardView card = itemView.findViewById(R.id.card); - if (CandyBarApplication.getConfiguration().getWallpapersGrid() == CandyBarApplication.GridStyle.FLAT) { - card.setCardElevation(0); - card.setMaxCardElevation(0); - } - - if (!Preferences.get(mContext).isCardShadowEnabled()) { - card.setCardElevation(0); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - StateListAnimator stateListAnimator = AnimatorInflater - .loadStateListAnimator(mContext, R.animator.card_lift); - card.setStateListAnimator(stateListAnimator); - } - - if (mIsShowName) { - name = itemView.findViewById(R.id.name); - author = itemView.findViewById(R.id.author); - } - - card.setOnClickListener(this); - card.setOnLongClickListener(this); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - int position = getBindingAdapterPosition(); - if (id == R.id.card) { - if (sIsClickable) { - sIsClickable = false; - try { - final Intent intent = new Intent(mContext, CandyBarWallpaperActivity.class); - intent.putExtra(Extras.EXTRA_URL, mWallpapers.get(position).getURL()); - - ActivityTransitionLauncher.with((AppCompatActivity) mContext) - .from(image, Extras.EXTRA_IMAGE) - .image(thumbnailBitmap) - .launch(intent); - } catch (Exception e) { - sIsClickable = true; - } - } - } - } - - @Override - public boolean onLongClick(View view) { - int id = view.getId(); - int position = getBindingAdapterPosition(); - if (id == R.id.card) { - if (position < 0 || position > mWallpapers.size()) { - return false; - } - - Popup popup = Popup.Builder(mContext) - .to(name != null ? name : view) - .list(PopupItem.getApplyItems(mContext)) - .callback((applyPopup, i) -> { - PopupItem item = applyPopup.getItems().get(i); - if (item.getType() == PopupItem.Type.WALLPAPER_CROP) { - Preferences.get(mContext).setCropWallpaper(!item.getCheckboxValue()); - item.setCheckboxValue(Preferences.get(mContext).isCropWallpaper()); - - applyPopup.updateItem(i, item); - return; - } else if (item.getType() == PopupItem.Type.DOWNLOAD) { - WallpaperDownloader.prepare(mContext) - .wallpaper(mWallpapers.get(position)) - .start(); - } else { - WallpaperApplyTask task = new WallpaperApplyTask(mContext, mWallpapers.get(position)); - - if (item.getType() == PopupItem.Type.LOCKSCREEN) { - task.to(WallpaperApplyTask.Apply.LOCKSCREEN); - } else if (item.getType() == PopupItem.Type.HOMESCREEN) { - task.to(WallpaperApplyTask.Apply.HOMESCREEN); - } else if (item.getType() == PopupItem.Type.HOMESCREEN_LOCKSCREEN) { - task.to(WallpaperApplyTask.Apply.HOMESCREEN_LOCKSCREEN); - } - - task.executeOnThreadPool(); - } - applyPopup.dismiss(); - }) - .build(); - - popup.show(); - return true; - } - return false; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/ChangelogAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/ChangelogAdapter.java deleted file mode 100644 index 6482db8..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/ChangelogAdapter.java +++ /dev/null @@ -1,90 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.Context; -import android.text.method.LinkMovementMethod; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.core.text.HtmlCompat; - -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; - -import candybar.lib.R; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ChangelogAdapter extends BaseAdapter { - - private final Context mContext; - private final String[] mChangelog; - - public ChangelogAdapter(@NonNull Context context, @NonNull String[] changelog) { - mContext = context; - mChangelog = changelog; - } - - @Override - public int getCount() { - return mChangelog.length; - } - - @Override - public String getItem(int position) { - return mChangelog[position]; - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_changelog_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (ViewHolder) view.getTag(); - } - - holder.changelog.setText(HtmlCompat.fromHtml(mChangelog[position], HtmlCompat.FROM_HTML_MODE_COMPACT)); - holder.changelog.setMovementMethod(LinkMovementMethod.getInstance()); - - return view; - } - - private class ViewHolder { - - private final TextView changelog; - - ViewHolder(View view) { - changelog = view.findViewById(R.id.changelog); - int color = ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary); - changelog.setCompoundDrawablesWithIntrinsicBounds( - DrawableHelper.getTintedDrawable(mContext, R.drawable.ic_changelog_dot, color), - null, null, null); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/CreditsAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/CreditsAdapter.java deleted file mode 100644 index 1b7046f..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/CreditsAdapter.java +++ /dev/null @@ -1,143 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.util.Log; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.URLUtil; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.core.view.ViewCompat; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.items.Credit; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class CreditsAdapter extends BaseAdapter { - - private final Context mContext; - private final List mCredits; - private final Drawable mPlaceholder; - - public CreditsAdapter(@NonNull Context context, @NonNull List credits) { - mContext = context; - mCredits = credits; - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorSecondary); - mPlaceholder = DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_default_profile, color); - } - - @Override - public int getCount() { - return mCredits.size(); - } - - @Override - public Credit getItem(int position) { - return mCredits.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_credits_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (ViewHolder) view.getTag(); - } - - Credit credit = mCredits.get(position); - holder.title.setText(credit.getName()); - holder.subtitle.setText(credit.getContribution()); - holder.container.setOnClickListener(view1 -> { - String link = credit.getLink(); - if (URLUtil.isValidUrl(link)) { - try { - mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(link))); - } catch (ActivityNotFoundException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - }); - - if (credit.getContribution().length() == 0) { - holder.subtitle.setVisibility(View.GONE); - } else { - holder.subtitle.setVisibility(View.VISIBLE); - } - - Glide.with(mContext) - .load(credit.getImage()) - .override(144) - .optionalCenterInside() - .circleCrop() - .placeholder(mPlaceholder) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .into(holder.image); - - return view; - } - - class ViewHolder { - - private final LinearLayout container; - private final TextView title; - private final TextView subtitle; - private final ImageView image; - - ViewHolder(View view) { - container = view.findViewById(R.id.container); - title = view.findViewById(R.id.title); - subtitle = view.findViewById(R.id.subtitle); - image = view.findViewById(R.id.image); - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorSecondary); - ViewCompat.setBackground(image, DrawableHelper.getTintedDrawable( - mContext, R.drawable.ic_toolbar_circle, ColorHelper.setColorAlpha(color, 0.4f))); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/IconShapeAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/IconShapeAdapter.java deleted file mode 100644 index 2dc4b52..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/IconShapeAdapter.java +++ /dev/null @@ -1,116 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.LinearLayout; -import android.widget.RadioButton; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.fragments.dialog.IconShapeChooserFragment; -import candybar.lib.items.IconShape; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconShapeAdapter extends BaseAdapter { - private final Context mContext; - private final List mShapes; - private final int mSelectedIndex; - private final List mHolders; - - public IconShapeAdapter(@NonNull Context context, @NonNull List shapes, int selectedIndex) { - mContext = context; - mShapes = shapes; - mSelectedIndex = selectedIndex; - mHolders = new ArrayList<>(); - } - - @Override - public int getCount() { - return mShapes.size(); - } - - @Override - public IconShape getItem(int position) { - return mShapes.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - IconShapeAdapter.ViewHolder holder; - - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_inapp_dialog_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - mHolders.add(holder); - } else { - holder = (IconShapeAdapter.ViewHolder) view.getTag(); - } - - holder.radio.setChecked(mSelectedIndex == position); - holder.name.setText(mShapes.get(position).getName()); - - holder.container.setOnClickListener(v -> { - for (ViewHolder aHolder : mHolders) { - if (aHolder != holder) aHolder.radio.setChecked(false); - } - holder.radio.setChecked(true); - - FragmentManager fm = ((AppCompatActivity) mContext).getSupportFragmentManager(); - if (fm == null) return; - - Fragment fragment = fm.findFragmentByTag(IconShapeChooserFragment.TAG); - if (fragment == null) return; - - if (fragment instanceof IconShapeChooserFragment) { - ((IconShapeChooserFragment) fragment).setShape(mShapes.get(position).getShape()); - } - }); - - return view; - } - - private static class ViewHolder { - private final RadioButton radio; - private final TextView name; - private final LinearLayout container; - - ViewHolder(View view) { - radio = view.findViewById(R.id.radio); - name = view.findViewById(R.id.name); - container = view.findViewById(R.id.container); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/InAppBillingAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/InAppBillingAdapter.java deleted file mode 100644 index fd5dd76..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/InAppBillingAdapter.java +++ /dev/null @@ -1,93 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.LinearLayout; -import android.widget.RadioButton; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.items.InAppBilling; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class InAppBillingAdapter extends BaseAdapter { - - private final Context mContext; - private final List mInAppBillings; - - private int mSelectedPosition = 0; - - public InAppBillingAdapter(@NonNull Context context, @NonNull List inAppBillings) { - mContext = context; - mInAppBillings = inAppBillings; - } - - @Override - public int getCount() { - return mInAppBillings.size(); - } - - @Override - public InAppBilling getItem(int position) { - return mInAppBillings.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View view, ViewGroup viewGroup) { - ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_inapp_dialog_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (ViewHolder) view.getTag(); - } - - return view; - } - - private static class ViewHolder { - - private final RadioButton radio; - private final TextView name; - private final LinearLayout container; - - ViewHolder(View view) { - radio = view.findViewById(R.id.radio); - name = view.findViewById(R.id.name); - container = view.findViewById(R.id.container); - } - } - - public InAppBilling getSelectedProduct() { - return mInAppBillings.get(mSelectedPosition); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/IntentAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/IntentAdapter.java deleted file mode 100644 index b3f7eb6..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/IntentAdapter.java +++ /dev/null @@ -1,179 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.ActivityInfo; -import android.graphics.Color; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.FragmentManager; - -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.DrawableHelper; -import candybar.lib.items.IntentChooser; -import candybar.lib.items.Request; -import candybar.lib.tasks.IconRequestBuilderTask; -import candybar.lib.tasks.PremiumRequestBuilderTask; -import candybar.lib.utils.AsyncTaskBase; -import me.zhanghai.android.materialprogressbar.MaterialProgressBar; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IntentAdapter extends BaseAdapter { - - private final Context mContext; - private final List mApps; - private final int mType; - private AsyncTaskBase mAsyncTask; - - public IntentAdapter(@NonNull Context context, @NonNull List apps, int type) { - mContext = context; - mApps = apps; - mType = type; - } - - @Override - public int getCount() { - return mApps.size(); - } - - @Override - public IntentChooser getItem(int position) { - return mApps.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(final int position, View view, ViewGroup viewGroup) { - ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_intent_chooser_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (ViewHolder) view.getTag(); - } - - holder.icon.setImageDrawable(DrawableHelper.getAppIcon(mContext, mApps.get(position).getApp())); - holder.name.setText(mApps.get(position).getApp().loadLabel(mContext.getPackageManager()).toString()); - - if (mApps.get(position).getType() == IntentChooser.TYPE_SUPPORTED) { - holder.type.setTextColor(ColorHelper.getAttributeColor(mContext, android.R.attr.textColorSecondary)); - holder.type.setText(mContext.getResources().getString(R.string.intent_email_supported)); - } else if (mApps.get(position).getType() == IntentChooser.TYPE_RECOMMENDED) { - holder.type.setTextColor(ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary)); - holder.type.setText(mContext.getResources().getString(R.string.intent_email_recommended)); - } else { - holder.type.setTextColor(Color.parseColor("#F44336")); - holder.type.setText(mContext.getResources().getString(R.string.intent_email_not_supported)); - } - - holder.container.setOnClickListener(v -> { - ActivityInfo app = mApps.get(position).getApp().activityInfo; - if (mApps.get(position).getType() == IntentChooser.TYPE_RECOMMENDED || - mApps.get(position).getType() == IntentChooser.TYPE_SUPPORTED) { - if (mAsyncTask != null) return; - - holder.icon.setVisibility(View.GONE); - holder.progressBar.setVisibility(View.VISIBLE); - - if (CandyBarApplication.sRequestProperty == null) { - CandyBarApplication.sRequestProperty = new Request.Property(null, null, null); - } - CandyBarApplication.sRequestProperty.setComponentName( - new ComponentName(app.applicationInfo.packageName, app.name)); - - if (mType == IntentChooserFragment.ICON_REQUEST) { - mAsyncTask = new IconRequestBuilderTask(mContext, () -> { - mAsyncTask = null; - FragmentManager fm = ((AppCompatActivity) mContext).getSupportFragmentManager(); - if (fm != null) { - DialogFragment dialog = (DialogFragment) fm.findFragmentByTag( - IntentChooserFragment.TAG); - if (dialog != null) { - dialog.dismiss(); - } - } - }).executeOnThreadPool(); - } else if (mType == IntentChooserFragment.REBUILD_ICON_REQUEST) { - mAsyncTask = new PremiumRequestBuilderTask(mContext, () -> { - mAsyncTask = null; - FragmentManager fm = ((AppCompatActivity) mContext).getSupportFragmentManager(); - if (fm != null) { - DialogFragment dialog = (DialogFragment) fm.findFragmentByTag( - IntentChooserFragment.TAG); - if (dialog != null) { - dialog.dismiss(); - } - } - }).executeOnThreadPool(); - } else { - LogUtil.e("Intent chooser type unknown: " + mType); - } - return; - } - - Toast.makeText(mContext, R.string.intent_email_not_supported_message, - Toast.LENGTH_LONG).show(); - }); - - return view; - } - - public boolean isAsyncTaskRunning() { - return mAsyncTask != null; - } - - private static class ViewHolder { - - private final TextView name; - private final TextView type; - private final ImageView icon; - private final LinearLayout container; - private final MaterialProgressBar progressBar; - - ViewHolder(View view) { - name = view.findViewById(R.id.name); - type = view.findViewById(R.id.type); - icon = view.findViewById(R.id.icon); - container = view.findViewById(R.id.container); - progressBar = view.findViewById(R.id.progress); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/LanguagesAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/LanguagesAdapter.java deleted file mode 100644 index 0d85ade..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/LanguagesAdapter.java +++ /dev/null @@ -1,107 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.LinearLayout; -import android.widget.RadioButton; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.fragments.dialog.LanguagesFragment; -import candybar.lib.items.Language; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class LanguagesAdapter extends BaseAdapter { - - private final Context mContext; - private final List mLanguages; - private final int mSelectedIndex; - - public LanguagesAdapter(@NonNull Context context, @NonNull List languages, int selectedIndex) { - mContext = context; - mLanguages = languages; - mSelectedIndex = selectedIndex; - } - - @Override - public int getCount() { - return mLanguages.size(); - } - - @Override - public Language getItem(int position) { - return mLanguages.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - LanguagesAdapter.ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_inapp_dialog_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (LanguagesAdapter.ViewHolder) view.getTag(); - } - - holder.radio.setChecked(mSelectedIndex == position); - holder.name.setText(mLanguages.get(position).getName()); - - holder.container.setOnClickListener(v -> { - FragmentManager fm = ((AppCompatActivity) mContext).getSupportFragmentManager(); - if (fm == null) return; - - Fragment fragment = fm.findFragmentByTag(LanguagesFragment.TAG); - if (fragment == null) return; - - if (fragment instanceof LanguagesFragment) { - ((LanguagesFragment) fragment).setLanguage(mLanguages.get(position).getLocale()); - } - }); - return view; - } - - private static class ViewHolder { - - private final RadioButton radio; - private final TextView name; - private final LinearLayout container; - - ViewHolder(View view) { - radio = view.findViewById(R.id.radio); - name = view.findViewById(R.id.name); - container = view.findViewById(R.id.container); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/OtherAppsAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/OtherAppsAdapter.java deleted file mode 100644 index 6c9bcba..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/OtherAppsAdapter.java +++ /dev/null @@ -1,133 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.util.Log; -import android.view.View; -import android.view.ViewGroup; -import android.webkit.URLUtil; -import android.widget.BaseAdapter; -import android.widget.ImageView; -import android.widget.LinearLayout; -import android.widget.TextView; - -import androidx.annotation.NonNull; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class OtherAppsAdapter extends BaseAdapter { - - private final Context mContext; - private final List mOtherApps; - - public OtherAppsAdapter(@NonNull Context context, @NonNull List otherApps) { - mContext = context; - mOtherApps = (List) otherApps; - } - - @Override - public int getCount() { - return mOtherApps.size(); - } - - @Override - public CandyBarApplication.OtherApp getItem(int position) { - return mOtherApps.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_other_apps_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (ViewHolder) view.getTag(); - } - - CandyBarApplication.OtherApp otherApp = mOtherApps.get(position); - String uri = otherApp.getIcon(); - if (!URLUtil.isValidUrl(uri)) { - uri = "drawable://" + DrawableHelper.getResourceId(mContext, uri); - } - - Glide.with(mContext) - .load(uri) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(uri.contains("drawable://") - ? DiskCacheStrategy.NONE - : DiskCacheStrategy.RESOURCE) - .into(holder.image); - - holder.title.setText(otherApp.getTitle()); - - if (otherApp.getDescription() == null || otherApp.getDescription().length() == 0) { - holder.desc.setVisibility(View.GONE); - } else { - holder.desc.setText(otherApp.getDescription()); - holder.desc.setVisibility(View.VISIBLE); - } - - holder.container.setOnClickListener(v -> { - if (!URLUtil.isValidUrl(otherApp.getUrl())) return; - - try { - mContext.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(otherApp.getUrl()))); - } catch (ActivityNotFoundException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }); - return view; - } - - private static class ViewHolder { - - private final LinearLayout container; - private final ImageView image; - private final TextView title; - private final TextView desc; - - ViewHolder(View view) { - container = view.findViewById(R.id.container); - image = view.findViewById(R.id.image); - title = view.findViewById(R.id.title); - desc = view.findViewById(R.id.desc); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/ThemeAdapter.java b/libs/candybar/src/main/java/candybar/lib/adapters/dialog/ThemeAdapter.java deleted file mode 100644 index 3823924..0000000 --- a/libs/candybar/src/main/java/candybar/lib/adapters/dialog/ThemeAdapter.java +++ /dev/null @@ -1,116 +0,0 @@ -package candybar.lib.adapters.dialog; - -import android.content.Context; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.LinearLayout; -import android.widget.RadioButton; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.fragments.dialog.ThemeChooserFragment; -import candybar.lib.items.Theme; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ThemeAdapter extends BaseAdapter { - private final Context mContext; - private final List mThemes; - private final int mSelectedIndex; - private final List mHolders; - - public ThemeAdapter(@NonNull Context context, @NonNull List themes, int selectedIndex) { - mContext = context; - mThemes = themes; - mSelectedIndex = selectedIndex; - mHolders = new ArrayList<>(); - } - - @Override - public int getCount() { - return mThemes.size(); - } - - @Override - public Theme getItem(int position) { - return mThemes.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - ThemeAdapter.ViewHolder holder; - - if (view == null) { - view = View.inflate(mContext, R.layout.fragment_inapp_dialog_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - mHolders.add(holder); - } else { - holder = (ThemeAdapter.ViewHolder) view.getTag(); - } - - holder.radio.setChecked(mSelectedIndex == position); - holder.name.setText(mThemes.get(position).displayName(mContext)); - - holder.container.setOnClickListener(v -> { - for (ViewHolder aHolder : mHolders) { - if (aHolder != holder) aHolder.radio.setChecked(false); - } - holder.radio.setChecked(true); - - FragmentManager fm = ((AppCompatActivity) mContext).getSupportFragmentManager(); - if (fm == null) return; - - Fragment fragment = fm.findFragmentByTag(ThemeChooserFragment.TAG); - if (fragment == null) return; - - if (fragment instanceof ThemeChooserFragment) { - ((ThemeChooserFragment) fragment).setTheme(mThemes.get(position)); - } - }); - - return view; - } - - private static class ViewHolder { - private final RadioButton radio; - private final TextView name; - private final LinearLayout container; - - ViewHolder(View view) { - radio = view.findViewById(R.id.radio); - name = view.findViewById(R.id.name); - container = view.findViewById(R.id.container); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/applications/CandyBarApplication.java b/libs/candybar/src/main/java/candybar/lib/applications/CandyBarApplication.java deleted file mode 100644 index 316bac1..0000000 --- a/libs/candybar/src/main/java/candybar/lib/applications/CandyBarApplication.java +++ /dev/null @@ -1,533 +0,0 @@ -package candybar.lib.applications; - -import android.content.Intent; - -import androidx.annotation.IntRange; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.multidex.MultiDexApplication; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarCrashReport; -import candybar.lib.databases.Database; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.items.Request; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.JsonStructure; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public abstract class CandyBarApplication extends MultiDexApplication { - - private static Configuration mConfiguration; - private Thread.UncaughtExceptionHandler mHandler; - - public static Request.Property sRequestProperty; - public static String sZipPath = null; - - @NonNull - public abstract Configuration onInit(); - - public static Configuration getConfiguration() { - if (mConfiguration == null) { - mConfiguration = new Configuration(); - } - return mConfiguration; - } - - @Override - public void onCreate() { - super.onCreate(); - Database.get(this).openDatabase(); - - // Enable or disable logging - LogUtil.setLoggingTag(getString(R.string.app_name)); - LogUtil.setLoggingEnabled(true); - - mConfiguration = onInit(); - - if (mConfiguration.mIsCrashReportEnabled) { - mHandler = Thread.getDefaultUncaughtExceptionHandler(); - Thread.setDefaultUncaughtExceptionHandler(this::handleUncaughtException); - } - - if (Preferences.get(this).isTimeToSetLanguagePreference()) { - Preferences.get(this).setLanguagePreference(); - return; - } - - LocaleHelper.setLocale(this); - } - - private void handleUncaughtException(Thread thread, Throwable throwable) { - try { - StringBuilder sb = new StringBuilder(); - SimpleDateFormat dateFormat = new SimpleDateFormat( - "yyyy-MM-dd HH:mm:ss", Locale.getDefault()); - String dateTime = dateFormat.format(new Date()); - sb.append("Crash Time : ").append(dateTime).append("\r\n"); - sb.append("Class Name : ").append(throwable.getClass().getName()).append("\r\n"); - sb.append("Caused By : ").append(throwable.toString()).append("\r\n"); - - for (StackTraceElement element : throwable.getStackTrace()) { - sb.append("\r\n"); - sb.append(element.toString()); - } - - Preferences.get(this).setLatestCrashLog(sb.toString()); - - Intent intent = new Intent(this, CandyBarCrashReport.class); - intent.putExtra(CandyBarCrashReport.EXTRA_STACKTRACE, sb.toString()); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); - startActivity(intent); - } catch (Exception e) { - if (mHandler != null) { - mHandler.uncaughtException(thread, throwable); - return; - } - } - System.exit(1); - } - - public static class Configuration { - - public interface EmailBodyGenerator { - String generate(List requests); - } - - private EmailBodyGenerator mEmailBodyGenerator; - - private NavigationIcon mNavigationIcon = NavigationIcon.STYLE_1; - private NavigationViewHeader mNavigationViewHeader = NavigationViewHeader.NORMAL; - - private GridStyle mHomeGrid = GridStyle.CARD; - private GridStyle mApplyGrid = GridStyle.CARD; - private Style mRequestStyle = Style.PORTRAIT_FLAT_LANDSCAPE_CARD; - private GridStyle mWallpapersGrid = GridStyle.CARD; - private Style mAboutStyle = Style.PORTRAIT_FLAT_LANDSCAPE_CARD; - private IconColor mIconColor = IconColor.PRIMARY_TEXT; - private List mOtherApps = null; - private List mDonationLinks = null; - - private boolean mIsHighQualityPreviewEnabled = false; - private boolean mIsColoredApplyCard = true; - private boolean mIsAutomaticIconsCountEnabled = true; - private int mCustomIconsCount = 0; - private boolean mIsShowTabIconsCount = false; - private boolean mIsShowTabAllIcons = false; - private String mTabAllIconsTitle = "All Icons"; - private String[] mCategoryForTabAllIcons = null; - - private ShadowOptions mShadowOptions = new ShadowOptions(); - private boolean mIsDashboardThemingEnabled = true; - private int mWallpaperGridPreviewQuality = 4; - - private boolean mIsGenerateAppFilter = true; - private boolean mIsGenerateAppMap = false; - private boolean mIsGenerateThemeResources = false; - private boolean mIsIncludeIconRequestToEmailBody = true; - - private boolean mIsCrashReportEnabled = true; - private JsonStructure mWallpaperJsonStructure = new JsonStructure.Builder(null).build(); - - public Configuration setEmailBodyGenerator(EmailBodyGenerator emailBodyGenerator) { - mEmailBodyGenerator = emailBodyGenerator; - return this; - } - - public Configuration setDonationLinks(@NonNull DonationLink[] donationLinks) { - mDonationLinks = Arrays.asList(donationLinks); - return this; - } - - public Configuration setNavigationIcon(@NonNull NavigationIcon navigationIcon) { - mNavigationIcon = navigationIcon; - return this; - } - - public Configuration setNavigationViewHeaderStyle(@NonNull NavigationViewHeader navigationViewHeader) { - mNavigationViewHeader = navigationViewHeader; - return this; - } - - public Configuration setAutomaticIconsCountEnabled(boolean automaticIconsCountEnabled) { - mIsAutomaticIconsCountEnabled = automaticIconsCountEnabled; - return this; - } - - public Configuration setHomeGridStyle(@NonNull GridStyle gridStyle) { - mHomeGrid = gridStyle; - return this; - } - - public Configuration setApplyGridStyle(@NonNull GridStyle gridStyle) { - mApplyGrid = gridStyle; - return this; - } - - public Configuration setRequestStyle(@NonNull Style style) { - mRequestStyle = style; - return this; - } - - public Configuration setWallpapersGridStyle(@NonNull GridStyle gridStyle) { - mWallpapersGrid = gridStyle; - return this; - } - - public Configuration setAboutStyle(@NonNull Style style) { - mAboutStyle = style; - return this; - } - - public Configuration setSocialIconColor(@NonNull IconColor iconColor) { - mIconColor = iconColor; - return this; - } - - public Configuration setColoredApplyCard(boolean coloredApplyCard) { - mIsColoredApplyCard = coloredApplyCard; - return this; - } - - public Configuration setCustomIconsCount(int customIconsCount) { - mCustomIconsCount = customIconsCount; - return this; - } - - public Configuration setShowTabIconsCount(boolean showTabIconsCount) { - mIsShowTabIconsCount = showTabIconsCount; - return this; - } - - public Configuration setShowTabAllIcons(boolean showTabAllIcons) { - mIsShowTabAllIcons = showTabAllIcons; - return this; - } - - public Configuration setTabAllIconsTitle(@NonNull String title) { - mTabAllIconsTitle = title; - if (mTabAllIconsTitle.length() == 0) mTabAllIconsTitle = "All Icons"; - return this; - } - - public Configuration setCategoryForTabAllIcons(@NonNull String[] categories) { - mCategoryForTabAllIcons = categories; - return this; - } - - public Configuration setShadowEnabled(boolean shadowEnabled) { - mShadowOptions = new ShadowOptions(shadowEnabled); - return this; - } - - public Configuration setShadowEnabled(@NonNull ShadowOptions shadowOptions) { - mShadowOptions = shadowOptions; - return this; - } - - public Configuration setDashboardThemingEnabled(boolean dashboardThemingEnabled) { - mIsDashboardThemingEnabled = dashboardThemingEnabled; - return this; - } - - public Configuration setWallpaperGridPreviewQuality(@IntRange(from = 1, to = 10) int quality) { - mWallpaperGridPreviewQuality = quality; - return this; - } - - public Configuration setGenerateAppFilter(boolean generateAppFilter) { - mIsGenerateAppFilter = generateAppFilter; - return this; - } - - public Configuration setGenerateAppMap(boolean generateAppMap) { - mIsGenerateAppMap = generateAppMap; - return this; - } - - public Configuration setGenerateThemeResources(boolean generateThemeResources) { - mIsGenerateThemeResources = generateThemeResources; - return this; - } - - public Configuration setIncludeIconRequestToEmailBody(boolean includeIconRequestToEmailBody) { - mIsIncludeIconRequestToEmailBody = includeIconRequestToEmailBody; - return this; - } - - public Configuration setCrashReportEnabled(boolean crashReportEnabled) { - mIsCrashReportEnabled = crashReportEnabled; - return this; - } - - public Configuration setWallpaperJsonStructure(@NonNull JsonStructure jsonStructure) { - mWallpaperJsonStructure = jsonStructure; - return this; - } - - public Configuration setOtherApps(@NonNull OtherApp[] otherApps) { - mOtherApps = Arrays.asList(otherApps); - return this; - } - - public Configuration setHighQualityPreviewEnabled(boolean highQualityPreviewEnabled) { - mIsHighQualityPreviewEnabled = highQualityPreviewEnabled; - return this; - } - - public EmailBodyGenerator getEmailBodyGenerator() { - return mEmailBodyGenerator; - } - - public List getDonationLinks() { - return mDonationLinks; - } - - public NavigationIcon getNavigationIcon() { - return mNavigationIcon; - } - - public NavigationViewHeader getNavigationViewHeader() { - return mNavigationViewHeader; - } - - public GridStyle getHomeGrid() { - return mHomeGrid; - } - - public GridStyle getApplyGrid() { - return mApplyGrid; - } - - public Style getRequestStyle() { - return mRequestStyle; - } - - public GridStyle getWallpapersGrid() { - return mWallpapersGrid; - } - - public Style getAboutStyle() { - return mAboutStyle; - } - - public IconColor getSocialIconColor() { - return mIconColor; - } - - public boolean isColoredApplyCard() { - return mIsColoredApplyCard; - } - - public boolean isAutomaticIconsCountEnabled() { - return mIsAutomaticIconsCountEnabled; - } - - public int getCustomIconsCount() { - return mCustomIconsCount; - } - - public boolean isShowTabIconsCount() { - return mIsShowTabIconsCount; - } - - public boolean isShowTabAllIcons() { - return mIsShowTabAllIcons; - } - - public String getTabAllIconsTitle() { - return mTabAllIconsTitle; - } - - public String[] getCategoryForTabAllIcons() { - return mCategoryForTabAllIcons; - } - - @NonNull - public ShadowOptions getShadowOptions() { - return mShadowOptions; - } - - public boolean isDashboardThemingEnabled() { - return mIsDashboardThemingEnabled; - } - - public int getWallpaperGridPreviewQuality() { - return mWallpaperGridPreviewQuality; - } - - public boolean isGenerateAppFilter() { - return mIsGenerateAppFilter; - } - - public boolean isGenerateAppMap() { - return mIsGenerateAppMap; - } - - public boolean isGenerateThemeResources() { - return mIsGenerateThemeResources; - } - - public boolean isIncludeIconRequestToEmailBody() { - return mIsIncludeIconRequestToEmailBody; - } - - public boolean isHighQualityPreviewEnabled() { - return mIsHighQualityPreviewEnabled; - } - - public JsonStructure getWallpaperJsonStructure() { - return mWallpaperJsonStructure; - } - - @Nullable - public List getOtherApps() { - return mOtherApps; - } - } - - public enum NavigationIcon { - DEFAULT, - STYLE_1, - STYLE_2, - STYLE_3, - STYLE_4 - } - - public enum NavigationViewHeader { - NORMAL, - MINI, - NONE - } - - public enum GridStyle { - CARD, - FLAT - } - - public enum Style { - PORTRAIT_FLAT_LANDSCAPE_CARD, - PORTRAIT_FLAT_LANDSCAPE_FLAT - } - - public enum IconColor { - PRIMARY_TEXT, - ACCENT - } - - public static class ShadowOptions { - - private boolean mIsToolbarEnabled; - private boolean mIsCardEnabled; - private boolean mIsFabEnabled; - private boolean mIsTapIntroEnabled; - - public ShadowOptions() { - mIsToolbarEnabled = mIsCardEnabled = mIsFabEnabled = mIsTapIntroEnabled = true; - } - - public ShadowOptions(boolean shadowEnabled) { - mIsToolbarEnabled = mIsCardEnabled = mIsFabEnabled = mIsTapIntroEnabled = shadowEnabled; - } - - public ShadowOptions setToolbarEnabled(boolean toolbarEnabled) { - mIsToolbarEnabled = toolbarEnabled; - return this; - } - - public ShadowOptions setCardEnabled(boolean cardEnabled) { - mIsCardEnabled = cardEnabled; - return this; - } - - public ShadowOptions setFabEnabled(boolean fabEnabled) { - mIsFabEnabled = fabEnabled; - return this; - } - - public ShadowOptions setTapIntroEnabled(boolean tapIntroEnabled) { - mIsTapIntroEnabled = tapIntroEnabled; - return this; - } - - public boolean isToolbarEnabled() { - return mIsToolbarEnabled; - } - - public boolean isCardEnabled() { - return mIsCardEnabled; - } - - public boolean isFabEnabled() { - return mIsFabEnabled; - } - - public boolean isTapIntroEnabled() { - return mIsTapIntroEnabled; - } - } - - public static class OtherApp { - - private final String mIcon; - private final String mTitle; - private final String mDescription; - private final String mUrl; - - public OtherApp(String icon, String title, String description, String url) { - mIcon = icon; - mTitle = title; - mDescription = description; - mUrl = url; - } - - public String getIcon() { - return mIcon; - } - - public String getTitle() { - return mTitle; - } - - public String getDescription() { - return mDescription; - } - - public String getUrl() { - return mUrl; - } - } - - public static class DonationLink extends OtherApp { - public DonationLink(String icon, String title, String description, String url) { - super(icon, title, description, url); - } - } - -} diff --git a/libs/candybar/src/main/java/candybar/lib/databases/Database.java b/libs/candybar/src/main/java/candybar/lib/databases/Database.java deleted file mode 100644 index fc3d456..0000000 --- a/libs/candybar/src/main/java/candybar/lib/databases/Database.java +++ /dev/null @@ -1,656 +0,0 @@ -package candybar.lib.databases; - -import android.content.ContentValues; -import android.content.Context; -import android.database.Cursor; -import android.database.sqlite.SQLiteDatabase; -import android.database.sqlite.SQLiteException; -import android.database.sqlite.SQLiteOpenHelper; -import android.database.sqlite.SQLiteStatement; -import android.text.TextUtils; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.TimeHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import candybar.lib.helpers.JsonHelper; -import candybar.lib.items.Icon; -import candybar.lib.items.ImageSize; -import candybar.lib.items.Request; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Database extends SQLiteOpenHelper { - - private static final String DATABASE_NAME = "candybar_database"; - private static final int DATABASE_VERSION = 11; - - private static final String TABLE_REQUEST = "icon_request"; - private static final String TABLE_PREMIUM_REQUEST = "premium_request"; - private static final String TABLE_WALLPAPERS = "wallpapers"; - private static final String TABLE_BOOKMARKED_ICONS = "bookmarked_icons"; - - private static final String KEY_ID = "id"; - - private static final String KEY_ORDER_ID = "order_id"; - private static final String KEY_PRODUCT_ID = "product_id"; - - private static final String KEY_NAME = "name"; - private static final String KEY_ACTIVITY = "activity"; - private static final String KEY_REQUESTED_ON = "requested_on"; - - private static final String KEY_AUTHOR = "author"; - private static final String KEY_THUMB_URL = "thumbUrl"; - private static final String KEY_URL = "url"; - private static final String KEY_MIME_TYPE = "mimeType"; - private static final String KEY_COLOR = "color"; - private static final String KEY_WIDTH = "width"; - private static final String KEY_HEIGHT = "height"; - private static final String KEY_SIZE = "size"; - - private static final String KEY_TITLE = "title"; - - private final Context mContext; - - private static WeakReference mDatabase; - private SQLiteDatabase mSQLiteDatabase; - - public static Database get(@NonNull Context context) { - if (mDatabase == null || mDatabase.get() == null) { - mDatabase = new WeakReference<>(new Database(context)); - } - return mDatabase.get(); - } - - private Database(Context context) { - super(context, DATABASE_NAME, null, DATABASE_VERSION); - mContext = context; - } - - @Override - public void onCreate(SQLiteDatabase db) { - String CREATE_TABLE_REQUEST = "CREATE TABLE IF NOT EXISTS " + TABLE_REQUEST + "(" + - KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + - KEY_NAME + " TEXT NOT NULL, " + - KEY_ACTIVITY + " TEXT NOT NULL, " + - KEY_REQUESTED_ON + " DATETIME DEFAULT CURRENT_TIMESTAMP, " + - "UNIQUE (" + KEY_ACTIVITY + ") ON CONFLICT REPLACE)"; - String CREATE_TABLE_PREMIUM_REQUEST = "CREATE TABLE IF NOT EXISTS " + TABLE_PREMIUM_REQUEST + "(" + - KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + - KEY_ORDER_ID + " TEXT NOT NULL, " + - KEY_PRODUCT_ID + " TEXT NOT NULL, " + - KEY_NAME + " TEXT NOT NULL, " + - KEY_ACTIVITY + " TEXT NOT NULL, " + - KEY_REQUESTED_ON + " DATETIME DEFAULT CURRENT_TIMESTAMP, " + - "UNIQUE (" + KEY_ACTIVITY + ") ON CONFLICT REPLACE)"; - String CREATE_TABLE_WALLPAPER = "CREATE TABLE IF NOT EXISTS " + TABLE_WALLPAPERS + "(" + - KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + - KEY_NAME + " TEXT NOT NULL, " + - KEY_AUTHOR + " TEXT NOT NULL, " + - KEY_URL + " TEXT NOT NULL, " + - KEY_THUMB_URL + " TEXT NOT NULL, " + - KEY_MIME_TYPE + " TEXT, " + - KEY_SIZE + " INTEGER DEFAULT 0, " + - KEY_COLOR + " INTEGER DEFAULT 0, " + - KEY_WIDTH + " INTEGER DEFAULT 0, " + - KEY_HEIGHT + " INTEGER DEFAULT 0, " + - "UNIQUE (" + KEY_URL + "))"; - String CREATE_TABLE_BOOKMARKED_ICONS = "CREATE TABLE IF NOT EXISTS " + TABLE_BOOKMARKED_ICONS + "(" + - KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " + - KEY_NAME + " TEXT NOT NULL, " + - KEY_TITLE + " TEXT NOT NULL, " + - "UNIQUE (" + KEY_NAME + ") ON CONFLICT IGNORE)"; - db.execSQL(CREATE_TABLE_REQUEST); - db.execSQL(CREATE_TABLE_PREMIUM_REQUEST); - db.execSQL(CREATE_TABLE_WALLPAPER); - db.execSQL(CREATE_TABLE_BOOKMARKED_ICONS); - } - - @Override - public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { - // Need to clear shared preferences with version 3.4.0 - if (newVersion == 9) { - Preferences.get(mContext).clearPreferences(); - } - resetDatabase(db, oldVersion); - } - - @Override - public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { - resetDatabase(db, oldVersion); - } - - private void resetDatabase(SQLiteDatabase db, int oldVersion) { - Cursor cursor = db.rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); - List tables = new ArrayList<>(); - if (cursor.moveToFirst()) { - do { - tables.add(cursor.getString(0)); - } while (cursor.moveToNext()); - } - cursor.close(); - - List requests = getRequestedApps(db); - List premiumRequest = getPremiumRequest(db); - List wallpapers = getWallpapers(db); - - for (int i = 0; i < tables.size(); i++) { - try { - String dropQuery = "DROP TABLE IF EXISTS " + tables.get(i); - if (!tables.get(i).equalsIgnoreCase("SQLITE_SEQUENCE")) - db.execSQL(dropQuery); - } catch (Exception ignored) { - } - } - onCreate(db); - - for (Request request : requests) { - addRequest(db, request); - } - - addWallpapers(db, wallpapers); - - if (oldVersion <= 3) { - return; - } - - for (Request premium : premiumRequest) { - Request r = Request.Builder() - .name(premium.getName()) - .activity(premium.getActivity()) - .orderId(premium.getOrderId()) - .productId(premium.getProductId()) - .requestedOn(premium.getRequestedOn()) - .build(); - addPremiumRequest(db, r); - } - } - - public boolean openDatabase() { - try { - if (mDatabase == null || mDatabase.get() == null) { - LogUtil.e("Database error: openDatabase() database instance is null"); - return false; - } - - if (mDatabase.get().mSQLiteDatabase == null) { - mDatabase.get().mSQLiteDatabase = mDatabase.get().getWritableDatabase(); - } - - if (!mDatabase.get().mSQLiteDatabase.isOpen()) { - LogUtil.e("Database error: database openable false, trying to open the database again"); - mDatabase.get().mSQLiteDatabase = mDatabase.get().getWritableDatabase(); - } - return mDatabase.get().mSQLiteDatabase.isOpen(); - } catch (SQLiteException | NullPointerException e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - - public void closeDatabase() { - try { - if (mDatabase == null || mDatabase.get() == null) { - LogUtil.e("Database error: closeDatabase() database instance is null"); - return; - } - - if (mDatabase.get().mSQLiteDatabase == null) { - LogUtil.e("Database error: trying to close database which is not opened"); - return; - } - mDatabase.get().mSQLiteDatabase.close(); - } catch (SQLiteException | NullPointerException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - - public void addRequest(@Nullable SQLiteDatabase db, Request request) { - SQLiteDatabase database = db; - if (database == null) { - if (!openDatabase()) { - LogUtil.e("Database error: addRequest() failed to open database"); - return; - } - - database = mDatabase.get().mSQLiteDatabase; - } - - ContentValues values = new ContentValues(); - values.put(KEY_NAME, request.getName()); - values.put(KEY_ACTIVITY, request.getActivity()); - - String requestedOn = request.getRequestedOn(); - if (requestedOn == null) requestedOn = TimeHelper.getLongDateTime(); - values.put(KEY_REQUESTED_ON, requestedOn); - - database.insert(TABLE_REQUEST, null, values); - } - - public boolean isRequested(String activity) { - if (!openDatabase()) { - LogUtil.e("Database error: isRequested() failed to open database"); - return false; - } - - Cursor cursor = mDatabase.get().mSQLiteDatabase.query(TABLE_REQUEST, null, KEY_ACTIVITY + " = ?", - new String[]{activity}, null, null, null, null); - int rowCount = cursor.getCount(); - cursor.close(); - return rowCount > 0; - } - - private List getRequestedApps(@Nullable SQLiteDatabase db) { - SQLiteDatabase database = db; - if (database == null) { - if (!openDatabase()) { - LogUtil.e("Database error: getRequestedApps() failed to open database"); - return new ArrayList<>(); - } - - database = mDatabase.get().mSQLiteDatabase; - } - - List requests = new ArrayList<>(); - Cursor cursor = database.query(TABLE_REQUEST, null, null, null, null, null, null); - if (cursor.moveToFirst()) { - do { - Request request = Request.Builder() - .name(cursor.getString(cursor.getColumnIndex(KEY_NAME))) - .activity(cursor.getString(cursor.getColumnIndex(KEY_ACTIVITY))) - .requestedOn(cursor.getString(cursor.getColumnIndex(KEY_REQUESTED_ON))) - .requested(true) - .build(); - - requests.add(request); - } while (cursor.moveToNext()); - } - cursor.close(); - return requests; - } - - public void addPremiumRequest(@Nullable SQLiteDatabase db, Request request) { - SQLiteDatabase database = db; - if (database == null) { - if (!openDatabase()) { - LogUtil.e("Database error: addPremiumRequest() failed to open database"); - return; - } - - database = mDatabase.get().mSQLiteDatabase; - } - - ContentValues values = new ContentValues(); - values.put(KEY_ORDER_ID, request.getOrderId()); - values.put(KEY_PRODUCT_ID, request.getProductId()); - values.put(KEY_NAME, request.getName()); - values.put(KEY_ACTIVITY, request.getActivity()); - - String requestedOn = request.getRequestedOn(); - if (requestedOn == null) requestedOn = TimeHelper.getLongDateTime(); - values.put(KEY_REQUESTED_ON, requestedOn); - - database.insert(TABLE_PREMIUM_REQUEST, null, values); - } - - public List getPremiumRequest(@Nullable SQLiteDatabase db) { - SQLiteDatabase database = db; - if (database == null) { - if (!openDatabase()) { - LogUtil.e("Database error: getPremiumRequest() failed to open database"); - return new ArrayList<>(); - } - - database = mDatabase.get().mSQLiteDatabase; - } - - List requests = new ArrayList<>(); - - Cursor cursor = database.query(TABLE_PREMIUM_REQUEST, - null, null, null, null, null, null); - if (cursor.moveToFirst()) { - do { - Request request = Request.Builder() - .name(cursor.getString(cursor.getColumnIndex(KEY_NAME))) - .activity(cursor.getString(cursor.getColumnIndex(KEY_ACTIVITY))) - .orderId(cursor.getString(cursor.getColumnIndex(KEY_ORDER_ID))) - .productId(cursor.getString(cursor.getColumnIndex(KEY_PRODUCT_ID))) - .build(); - requests.add(request); - } while (cursor.moveToNext()); - } - cursor.close(); - return requests; - } - - public void addWallpapers(@Nullable SQLiteDatabase db, List list) { - SQLiteDatabase database = db; - if (database == null) { - if (!openDatabase()) { - LogUtil.e("Database error: addWallpapers() failed to open database"); - return; - } - - database = mDatabase.get().mSQLiteDatabase; - } - - String query = "INSERT OR IGNORE INTO " + TABLE_WALLPAPERS + " (" + KEY_NAME + "," + KEY_AUTHOR + "," + KEY_URL + "," - + KEY_THUMB_URL + ") VALUES (?,?,?,?);"; - SQLiteStatement statement = database.compileStatement(query); - database.beginTransaction(); - - for (int i = 0; i < list.size(); i++) { - statement.clearBindings(); - - Wallpaper wallpaper; - if (list.get(i) instanceof Wallpaper) { - wallpaper = (Wallpaper) list.get(i); - } else { - wallpaper = JsonHelper.getWallpaper(list.get(i)); - } - - if (wallpaper != null) { - if (wallpaper.getURL() != null) { - String name = wallpaper.getName(); - if (name == null) name = ""; - - statement.bindString(1, name); - - if (wallpaper.getAuthor() != null) { - statement.bindString(2, wallpaper.getAuthor()); - } else { - statement.bindNull(2); - } - - statement.bindString(3, wallpaper.getURL()); - statement.bindString(4, wallpaper.getThumbUrl()); - statement.execute(); - } - } - } - - database.setTransactionSuccessful(); - database.endTransaction(); - } - - public void updateWallpaper(Wallpaper wallpaper) { - if (!openDatabase()) { - LogUtil.e("Database error: updateWallpaper() failed to open database"); - return; - } - - if (wallpaper == null) return; - - ContentValues values = new ContentValues(); - if (wallpaper.getSize() > 0) { - values.put(KEY_SIZE, wallpaper.getSize()); - } - - if (wallpaper.getMimeType() != null) { - values.put(KEY_MIME_TYPE, wallpaper.getMimeType()); - } - - if (wallpaper.getDimensions() != null) { - values.put(KEY_WIDTH, wallpaper.getDimensions().width); - values.put(KEY_HEIGHT, wallpaper.getDimensions().height); - } - - if (wallpaper.getColor() != 0) { - values.put(KEY_COLOR, wallpaper.getColor()); - } - - if (values.size() > 0) { - mDatabase.get().mSQLiteDatabase.update(TABLE_WALLPAPERS, - values, KEY_URL + " = ?", new String[]{wallpaper.getURL()}); - } - } - - public int getWallpapersCount() { - if (!openDatabase()) { - LogUtil.e("Database error: getWallpapersCount() failed to open database"); - return 0; - } - - Cursor cursor = mDatabase.get().mSQLiteDatabase.query(TABLE_WALLPAPERS, - null, null, null, null, null, null, null); - int rowCount = cursor.getCount(); - cursor.close(); - return rowCount; - } - - @Nullable - public Wallpaper getWallpaper(String url) { - if (!openDatabase()) { - LogUtil.e("Database error: getWallpaper() failed to open database"); - return null; - } - - Wallpaper wallpaper = null; - Cursor cursor = mDatabase.get().mSQLiteDatabase.query(TABLE_WALLPAPERS, - null, KEY_URL + " = ?", new String[]{url}, null, null, null, "1"); - if (cursor.moveToFirst()) { - do { - int width = cursor.getInt(cursor.getColumnIndex(KEY_WIDTH)); - int height = cursor.getInt(cursor.getColumnIndex(KEY_HEIGHT)); - ImageSize dimensions = null; - if (width > 0 && height > 0) { - dimensions = new ImageSize(width, height); - } - - int id = cursor.getInt(cursor.getColumnIndex(KEY_ID)); - String name = cursor.getString(cursor.getColumnIndex(KEY_NAME)); - if (name.length() == 0) { - name = "Wallpaper " + id; - } - - wallpaper = Wallpaper.Builder() - .name(name) - .author(cursor.getString(cursor.getColumnIndex(KEY_AUTHOR))) - .url(cursor.getString(cursor.getColumnIndex(KEY_URL))) - .thumbUrl(cursor.getString(cursor.getColumnIndex(KEY_THUMB_URL))) - .dimensions(dimensions) - .mimeType(cursor.getString(cursor.getColumnIndex(KEY_MIME_TYPE))) - .size(cursor.getInt(cursor.getColumnIndex(KEY_SIZE))) - .color(cursor.getInt(cursor.getColumnIndex(KEY_COLOR))) - .build(); - } while (cursor.moveToNext()); - } - cursor.close(); - return wallpaper; - } - - public List getWallpapers(@Nullable SQLiteDatabase db) { - SQLiteDatabase database = db; - if (database == null) { - if (!openDatabase()) { - LogUtil.e("Database error: getWallpapers() failed to open database"); - return new ArrayList<>(); - } - - database = mDatabase.get().mSQLiteDatabase; - } - - List wallpapers = new ArrayList<>(); - Cursor cursor = database.query(TABLE_WALLPAPERS, - null, null, null, null, null, KEY_ID + " ASC"); - if (cursor.moveToFirst()) { - do { - int width = cursor.getInt(cursor.getColumnIndex(KEY_WIDTH)); - int height = cursor.getInt(cursor.getColumnIndex(KEY_HEIGHT)); - ImageSize dimensions = null; - if (width > 0 && height > 0) { - dimensions = new ImageSize(width, height); - } - - int id = cursor.getInt(cursor.getColumnIndex(KEY_ID)); - String name = cursor.getString(cursor.getColumnIndex(KEY_NAME)); - if (name.length() == 0) { - name = "Wallpaper " + id; - } - - Wallpaper wallpaper = Wallpaper.Builder() - .name(name) - .author(cursor.getString(cursor.getColumnIndex(KEY_AUTHOR))) - .url(cursor.getString(cursor.getColumnIndex(KEY_URL))) - .thumbUrl(cursor.getString(cursor.getColumnIndex(KEY_THUMB_URL))) - .color(cursor.getInt(cursor.getColumnIndex(KEY_COLOR))) - .mimeType(cursor.getString(cursor.getColumnIndex(KEY_MIME_TYPE))) - .dimensions(dimensions) - .size(cursor.getInt(cursor.getColumnIndex(KEY_SIZE))) - .build(); - wallpapers.add(wallpaper); - } while (cursor.moveToNext()); - } - cursor.close(); - return wallpapers; - } - - @Nullable - public Wallpaper getRandomWallpaper() { - if (!openDatabase()) { - LogUtil.e("Database error: getRandomWallpaper() failed to open database"); - return null; - } - - Wallpaper wallpaper = null; - Cursor cursor = mDatabase.get().mSQLiteDatabase.query(TABLE_WALLPAPERS, - null, null, null, null, null, "RANDOM()", "1"); - if (cursor.moveToFirst()) { - do { - int id = cursor.getInt(cursor.getColumnIndex(KEY_ID)); - String name = cursor.getString(cursor.getColumnIndex(KEY_NAME)); - if (name.length() == 0) { - name = "Wallpaper " + id; - } - - wallpaper = Wallpaper.Builder() - .name(name) - .author(cursor.getString(cursor.getColumnIndex(KEY_AUTHOR))) - .url(cursor.getString(cursor.getColumnIndex(KEY_URL))) - .thumbUrl(cursor.getString(cursor.getColumnIndex(KEY_THUMB_URL))) - .build(); - } while (cursor.moveToNext()); - } - cursor.close(); - return wallpaper; - } - - public void addBookmarkedIcon(String drawableName, String title) { - if (!openDatabase()) { - LogUtil.e("Database error: addBookmarkedIcon() failed to open database"); - return; - } - - ContentValues values = new ContentValues(); - values.put(KEY_NAME, drawableName); - values.put(KEY_TITLE, title); - - mDatabase.get().mSQLiteDatabase.insert(TABLE_BOOKMARKED_ICONS, null, values); - } - - public void deleteBookmarkedIcon(String drawableName) { - if (!openDatabase()) { - LogUtil.e("Database error: deleteBookmarkedIcon() failed to open database"); - return; - } - - mDatabase.get().mSQLiteDatabase - .delete(TABLE_BOOKMARKED_ICONS, KEY_NAME + " = ?", new String[]{drawableName}); - } - - public void deleteBookmarkedIcons(List drawableNames) { - if (!openDatabase()) { - LogUtil.e("Database error: deleteBookmarkedIcons() failed to open database"); - return; - } - - final String inPart = "\"" + TextUtils.join("\", \"", drawableNames) + "\""; - - mDatabase.get().mSQLiteDatabase.execSQL("DELETE FROM " + TABLE_BOOKMARKED_ICONS + - " WHERE " + KEY_NAME + " IN (" + inPart + ")"); - } - - public boolean isIconBookmarked(String drawableName) { - if (!openDatabase()) { - LogUtil.e("Database error: isIconBookmarked() failed to open database"); - return false; - } - - Cursor cursor = mDatabase.get().mSQLiteDatabase.query(TABLE_BOOKMARKED_ICONS, null, KEY_NAME + " = ?", - new String[]{drawableName}, null, null, null, null); - int rowCount = cursor.getCount(); - cursor.close(); - return rowCount > 0; - } - - public List getBookmarkedIcons(Context context) { - if (!openDatabase()) { - LogUtil.e("Database error: getBookmarkedIcons() failed to open database"); - return new ArrayList<>(); - } - - List icons = new ArrayList<>(); - Cursor cursor = mDatabase.get().mSQLiteDatabase.query(TABLE_BOOKMARKED_ICONS, - null, null, null, null, null, null); - if (cursor.moveToFirst()) { - do { - String drawableName = cursor.getString(cursor.getColumnIndex(KEY_NAME)); - String title = cursor.getString(cursor.getColumnIndex(KEY_TITLE)); - int resId = DrawableHelper.getResourceId(context, drawableName); - icons.add(new Icon(drawableName, null, resId).setTitle(title)); - } while (cursor.moveToNext()); - } - cursor.close(); - - Collections.sort(icons, Icon.TitleComparator); - - return icons; - } - - public void deleteIconRequestData() { - if (!openDatabase()) { - LogUtil.e("Database error: deleteIconRequestData() failed to open database"); - return; - } - - mDatabase.get().mSQLiteDatabase.delete("SQLITE_SEQUENCE", "NAME = ?", new String[]{TABLE_REQUEST}); - mDatabase.get().mSQLiteDatabase.delete(TABLE_REQUEST, null, null); - } - - public void deleteWallpapers() { - if (!openDatabase()) { - LogUtil.e("Database error: deleteWallpapers() failed to open database"); - return; - } - - mDatabase.get().mSQLiteDatabase.delete("SQLITE_SEQUENCE", "NAME = ?", new String[]{TABLE_WALLPAPERS}); - mDatabase.get().mSQLiteDatabase.delete(TABLE_WALLPAPERS, null, null); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/AboutFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/AboutFragment.java deleted file mode 100644 index 98ee4d4..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/AboutFragment.java +++ /dev/null @@ -1,98 +0,0 @@ -package candybar.lib.fragments; - -import android.content.res.Configuration; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import com.danimahardhika.android.helpers.core.ViewHelper; - -import candybar.lib.R; -import candybar.lib.adapters.AboutAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class AboutFragment extends Fragment { - - private RecyclerView mRecyclerView; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_about, container, false); - mRecyclerView = view.findViewById(R.id.recyclerview); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - resetRecyclerViewPadding(requireActivity().getResources().getConfiguration().orientation); - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - - int spanCount = requireActivity().getResources().getInteger(R.integer.about_column_count); - mRecyclerView.setLayoutManager(new StaggeredGridLayoutManager( - spanCount, StaggeredGridLayoutManager.VERTICAL)); - mRecyclerView.setAdapter(new AboutAdapter(requireActivity(), spanCount)); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - - resetRecyclerViewPadding(newConfig.orientation); - ViewHelper.resetSpanCount(mRecyclerView, - requireActivity().getResources().getInteger(R.integer.about_column_count)); - - StaggeredGridLayoutManager manager = (StaggeredGridLayoutManager) mRecyclerView.getLayoutManager(); - assert manager != null; - mRecyclerView.setAdapter(new AboutAdapter(requireActivity(), manager.getSpanCount())); - } - - private void resetRecyclerViewPadding(int orientation) { - if (mRecyclerView == null) return; - - int padding = 0; - if (orientation == Configuration.ORIENTATION_LANDSCAPE) { - padding = requireActivity().getResources().getDimensionPixelSize(R.dimen.content_padding); - - if (CandyBarApplication.getConfiguration().getAboutStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT) { - padding = requireActivity().getResources().getDimensionPixelSize(R.dimen.card_margin); - } - } - - mRecyclerView.setPadding(padding, padding, 0, 0); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/ApplyFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/ApplyFragment.java deleted file mode 100644 index ede9fac..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/ApplyFragment.java +++ /dev/null @@ -1,233 +0,0 @@ -package candybar.lib.fragments; - -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.content.res.TypedArray; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.LauncherAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.items.Icon; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ApplyFragment extends Fragment { - - private RecyclerView mRecyclerView; - private AsyncTaskBase mAsyncTask; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_apply, container, false); - mRecyclerView = view.findViewById(R.id.recyclerview); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 1)); - - if (CandyBarApplication.getConfiguration().getApplyGrid() == CandyBarApplication.GridStyle.FLAT) { - int padding = requireActivity().getResources().getDimensionPixelSize(R.dimen.card_margin); - mRecyclerView.setPadding(padding, padding, 0, 0); - } - - mAsyncTask = new LaunchersLoader().executeOnThreadPool(); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) { - mAsyncTask.cancel(true); - } - super.onDestroy(); - } - - private boolean isPackageInstalled(String pkg) { - try { - PackageInfo packageInfo = requireActivity().getPackageManager().getPackageInfo( - pkg, PackageManager.GET_ACTIVITIES); - return packageInfo != null; - } catch (Exception e) { - return false; - } - } - - private boolean isLauncherInstalled(String pkg1, String pkg2, String pkg3) { - return isPackageInstalled(pkg1) | isPackageInstalled(pkg2) | isPackageInstalled(pkg3); - } - - private boolean isLauncherShouldBeAdded(String packageName) { - assert getActivity() != null; - if (("com.dlto.atom.launcher").equals(packageName)) { - int id = getResources().getIdentifier("appmap", "xml", getActivity().getPackageName()); - return id > 0; - } else if (("com.lge.launcher2").equals(packageName) || - ("com.lge.launcher3").equals(packageName)) { - int id = getResources().getIdentifier("theme_resources", "xml", getActivity().getPackageName()); - return id > 0; - } - return true; - } - - private class LaunchersLoader extends AsyncTaskBase { - - private List launchers; - - @Override - protected void preRun() { - launchers = new ArrayList<>(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - String[] launcherNames = getResources().getStringArray( - R.array.launcher_names); - TypedArray launcherIcons = getResources().obtainTypedArray( - R.array.launcher_icons); - String[] launcherPackages1 = getResources().getStringArray( - R.array.launcher_packages_1); - String[] launcherPackages2 = getResources().getStringArray( - R.array.launcher_packages_2); - String[] launcherPackages3 = getResources().getStringArray( - R.array.launcher_packages_3); - String[] showableLauncherNames = getResources().getStringArray( - R.array.dashboard_launchers); - - List installed = new ArrayList<>(); - List supported = new ArrayList<>(); - - List showable = new ArrayList<>(); - - for (String name : showableLauncherNames) { - String filtered_name = name.toLowerCase().replaceAll(" ", "_"); - showable.add(filtered_name); - } - - for (int i = 0; i < launcherNames.length; i++) { - String lowercaseLauncherName = launcherNames[i].toLowerCase().replaceAll(" ", "_"); - - if (!showable.contains(lowercaseLauncherName)) { - LogUtil.d("Launcher Excluded: " + lowercaseLauncherName); - continue; - } - - boolean isInstalled = isLauncherInstalled( - launcherPackages1[i], - launcherPackages2[i], - launcherPackages3[i]); - - int icon = R.drawable.ic_app_default; - if (i < launcherIcons.length()) - icon = launcherIcons.getResourceId(i, icon); - - String launcherPackage = launcherPackages1[i]; - if (launcherPackages1[i].equals("com.lge.launcher2")) { - boolean lghome3 = isPackageInstalled(launcherPackages2[i]); - if (lghome3) launcherPackage = launcherPackages2[i]; - } - - Icon launcher = new Icon(launcherNames[i], icon, launcherPackage); - if (isLauncherShouldBeAdded(launcherPackage)) { - if (isInstalled) installed.add(launcher); - else supported.add(launcher); - } - } - - try { - Collections.sort(installed, Icon.TitleComparator); - } catch (Exception ignored) { - } - - try { - Collections.sort(supported, Icon.TitleComparator); - } catch (Exception ignored) { - } - - if (installed.size() > 0) { - launchers.add(new Icon(getResources().getString( - R.string.apply_installed), -1, null)); - } - - launchers.addAll(installed); - launchers.add(new Icon(getResources().getString( - R.string.apply_supported), -2, null)); - launchers.addAll(supported); - - launcherIcons.recycle(); - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - if (ok) { - mRecyclerView.setAdapter(new LauncherAdapter(getActivity(), launchers)); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/FAQsFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/FAQsFragment.java deleted file mode 100644 index a19200e..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/FAQsFragment.java +++ /dev/null @@ -1,221 +0,0 @@ -package candybar.lib.fragments; - -import static candybar.lib.helpers.ViewHelper.setFastScrollColor; - -import android.annotation.SuppressLint; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.danimahardhika.android.helpers.core.SoftKeyboardHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.FAQsAdapter; -import candybar.lib.items.FAQs; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class FAQsFragment extends Fragment { - - private RecyclerView mRecyclerView; - private TextView mSearchResult; - private RecyclerFastScroller mFastScroll; - - private FAQsAdapter mAdapter; - private AsyncTaskBase mAsyncTask; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_faqs, container, false); - mRecyclerView = view.findViewById(R.id.faqs_list); - mSearchResult = view.findViewById(R.id.search_result); - mFastScroll = view.findViewById(R.id.fastscroll); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - - setFastScrollColor(mFastScroll); - mFastScroll.attachRecyclerView(mRecyclerView); - - mAsyncTask = new FAQsLoader().executeOnThreadPool(); - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_search, menu); - MenuItem search = menu.findItem(R.id.menu_search); - - View searchView = search.getActionView(); - EditText searchInput = searchView.findViewById(R.id.search_input); - View clearQueryButton = searchView.findViewById(R.id.clear_query_button); - - searchInput.setHint(requireActivity().getResources().getString(R.string.search_faqs)); - - searchInput.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - } - - @Override - public void afterTextChanged(Editable editable) { - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - String query = charSequence.toString(); - filterSearch(query); - clearQueryButton.setVisibility(query.contentEquals("") ? View.GONE : View.VISIBLE); - } - }); - - clearQueryButton.setOnClickListener(view -> searchInput.setText("")); - - search.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { - @Override - public boolean onMenuItemActionExpand(MenuItem menuItem) { - searchInput.requestFocus(); - - new Handler(Looper.getMainLooper()).postDelayed(() -> { - if (getActivity() != null) { - SoftKeyboardHelper.openKeyboard(getActivity()); - } - }, 1000); - - return true; - } - - @Override - public boolean onMenuItemActionCollapse(MenuItem menuItem) { - searchInput.setText(""); - return true; - } - }); - - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) { - mAsyncTask.cancel(true); - } - setHasOptionsMenu(false); - super.onDestroy(); - } - - @SuppressLint("StringFormatInvalid") - private void filterSearch(String query) { - try { - mAdapter.search(query); - if (mAdapter.getFaqsCount() == 0) { - String text = requireActivity().getResources().getString(R.string.search_noresult, query); - mSearchResult.setText(text); - mSearchResult.setVisibility(View.VISIBLE); - } else mSearchResult.setVisibility(View.GONE); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - - private class FAQsLoader extends AsyncTaskBase { - - private List faqs; - private String[] questions; - private String[] answers; - - @Override - protected void preRun() { - faqs = new ArrayList<>(); - questions = getResources().getStringArray(R.array.questions); - answers = getResources().getStringArray(R.array.answers); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - for (int i = 0; i < questions.length; i++) { - if (i < answers.length) { - FAQs faq = new FAQs(questions[i], answers[i]); - faqs.add(faq); - } - } - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - if (ok) { - setHasOptionsMenu(true); - mAdapter = new FAQsAdapter(getActivity(), faqs); - mRecyclerView.setAdapter(mAdapter); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/HomeFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/HomeFragment.java deleted file mode 100644 index 39cae95..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/HomeFragment.java +++ /dev/null @@ -1,205 +0,0 @@ -package candybar.lib.fragments; - -import android.annotation.SuppressLint; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.adapters.HomeAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.TapIntroHelper; -import candybar.lib.helpers.WallpaperHelper; -import candybar.lib.items.Home; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.listeners.HomeListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class HomeFragment extends Fragment implements HomeListener { - - private RecyclerView mRecyclerView; - private StaggeredGridLayoutManager mManager; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_home, container, false); - mRecyclerView = view.findViewById(R.id.recyclerview); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - mManager = new StaggeredGridLayoutManager( - requireActivity().getResources().getInteger(R.integer.home_column_count), - StaggeredGridLayoutManager.VERTICAL); - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setLayoutManager(mManager); - - if (CandyBarApplication.getConfiguration().getHomeGrid() == CandyBarApplication.GridStyle.FLAT) { - int padding = requireActivity().getResources().getDimensionPixelSize(R.dimen.card_margin); - mRecyclerView.setPadding(padding, padding, 0, 0); - } - - initHome(); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - HomeAdapter adapter = (HomeAdapter) mRecyclerView.getAdapter(); - if (adapter != null) adapter.setOrientation(newConfig.orientation); - } - - @Override - public void onHomeDataUpdated(Home home) { - if (mRecyclerView == null) return; - if (mRecyclerView.getAdapter() == null) return; - - if (home != null) { - HomeAdapter adapter = (HomeAdapter) mRecyclerView.getAdapter(); - if (CandyBarApplication.getConfiguration().isAutomaticIconsCountEnabled()) { - int index = adapter.getIconsIndex(); - if (index >= 0 && index < adapter.getItemCount()) { - adapter.getItem(index).setTitle(String.valueOf(CandyBarMainActivity.sIconsCount)); - adapter.getItem(index).setLoading(false); - adapter.notifyItemChanged(index); - } - } - - int dimensionsIndex = adapter.getDimensionsIndex(); - if (dimensionsIndex < 0) { - adapter.addNewContent(home); - } - return; - } - - RecyclerView.Adapter adapter = mRecyclerView.getAdapter(); - if (adapter.getItemCount() > 8) { - // Probably the original adapter already modified - adapter.notifyDataSetChanged(); - return; - } - - if (adapter instanceof HomeAdapter) { - HomeAdapter homeAdapter = (HomeAdapter) adapter; - int index = homeAdapter.getIconRequestIndex(); - if (index >= 0 && index < adapter.getItemCount()) { - adapter.notifyItemChanged(index); - } - } - } - - @Override - public void onHomeIntroInit() { - if (requireActivity().getResources().getBoolean(R.bool.show_intro)) { - TapIntroHelper.showHomeIntros(requireActivity(), - mRecyclerView, mManager, - ((HomeAdapter) Objects.requireNonNull(mRecyclerView.getAdapter())).getApplyIndex()); - } - } - - @SuppressLint("StringFormatInvalid") - private void initHome() { - List homes = new ArrayList<>(); - final Resources resources = requireActivity().getResources(); - - if (resources.getBoolean(R.bool.enable_apply)) { - homes.add(new Home( - R.drawable.ic_toolbar_apply_launcher, - resources.getString(R.string.home_apply_icon_pack, - resources.getString(R.string.app_name)), - "", - Home.Type.APPLY, - false)); - } - - if (resources.getBoolean(R.bool.enable_donation)) { - homes.add(new Home( - R.drawable.ic_toolbar_donate, - resources.getString(R.string.home_donate), - resources.getString(R.string.home_donate_desc), - Home.Type.DONATE, - false)); - } - - homes.add(new Home( - -1, - CandyBarApplication.getConfiguration().isAutomaticIconsCountEnabled() ? - String.valueOf(CandyBarMainActivity.sIconsCount) : - String.valueOf(CandyBarApplication.getConfiguration().getCustomIconsCount()), - resources.getString(R.string.home_icons), - Home.Type.ICONS, - true)); - - if (CandyBarMainActivity.sHomeIcon != null) { - homes.add(CandyBarMainActivity.sHomeIcon); - } - - mRecyclerView.setAdapter(new HomeAdapter(requireActivity(), homes, - resources.getConfiguration().orientation)); - } - - public void resetWallpapersCount() { - if (WallpaperHelper.getWallpaperType(requireActivity()) == WallpaperHelper.CLOUD_WALLPAPERS) { - if (mRecyclerView == null) return; - if (mRecyclerView.getAdapter() == null) return; - - RecyclerView.Adapter adapter = mRecyclerView.getAdapter(); - if (adapter.getItemCount() > 8) { - //Probably the original adapter already modified - adapter.notifyDataSetChanged(); - return; - } - - if (adapter instanceof HomeAdapter) { - HomeAdapter homeAdapter = (HomeAdapter) adapter; - int index = homeAdapter.getWallpapersIndex(); - if (index >= 0 && index < adapter.getItemCount()) { - adapter.notifyItemChanged(index); - } - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/IconsBaseFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/IconsBaseFragment.java deleted file mode 100644 index d7e6b33..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/IconsBaseFragment.java +++ /dev/null @@ -1,333 +0,0 @@ -package candybar.lib.fragments; - -import android.animation.AnimatorListenerAdapter; -import android.app.Activity; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ProgressBar; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; -import androidx.interpolator.view.animation.LinearOutSlowInInterpolator; -import androidx.lifecycle.Lifecycle; -import androidx.viewpager2.adapter.FragmentStateAdapter; -import androidx.viewpager2.widget.ViewPager2; - -import com.bumptech.glide.Glide; -import com.danimahardhika.android.helpers.animation.AnimationHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.tabs.TabLayout; -import com.google.android.material.tabs.TabLayoutMediator; - -import java.util.Collections; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.IconShapeChooserFragment; -import candybar.lib.helpers.IconsHelper; -import candybar.lib.helpers.TapIntroHelper; -import candybar.lib.items.Icon; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.listeners.SearchListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconsBaseFragment extends Fragment { - - private ViewPager2 mPager; - private ProgressBar mProgress; - private TabLayout mTabLayout; - - private AsyncTaskBase mGetIcons; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_icons_base, container, false); - mTabLayout = view.findViewById(R.id.tab); - mPager = view.findViewById(R.id.pager); - mProgress = view.findViewById(R.id.progress); - initTabs(); - mPager.setOffscreenPageLimit(2); - return view; - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.menu_icons_search, menu); - MenuItem search = menu.findItem(R.id.menu_search); - MenuItem iconShape = menu.findItem(R.id.menu_icon_shape); - - search.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { - @Override - public boolean onMenuItemActionExpand(MenuItem item) { - FragmentManager fm = requireActivity().getSupportFragmentManager(); - if (fm == null) return false; - - setHasOptionsMenu(false); - View view = requireActivity().findViewById(R.id.shadow); - if (view != null) view.animate().translationY(-mTabLayout.getHeight()) - .setDuration(200).start(); - mTabLayout.animate().translationY(-mTabLayout.getHeight()).setDuration(200) - .setListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(android.animation.Animator animation) { - super.onAnimationEnd(animation); - Fragment prev = fm.findFragmentByTag("home"); - if (prev != null) return; - - PagerIconsAdapter adapter = (PagerIconsAdapter) mPager.getAdapter(); - if (adapter == null) return; - - SearchListener listener = (SearchListener) requireActivity(); - listener.onSearchExpanded(true); - - FragmentTransaction ft = fm.beginTransaction() - .replace(R.id.container, new IconsSearchFragment(), IconsSearchFragment.TAG) - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE) - .addToBackStack(null); - - try { - ft.commit(); - } catch (Exception e) { - ft.commitAllowingStateLoss(); - } - } - }).start(); - - return true; - } - - @Override - public boolean onMenuItemActionCollapse(MenuItem item) { - return true; - } - }); - - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O || - !requireActivity().getResources().getBoolean(R.bool.includes_adaptive_icons)) { - iconShape.setVisible(false); - } - - iconShape.setOnMenuItemClickListener(menuItem -> { - IconShapeChooserFragment.showIconShapeChooser(requireActivity().getSupportFragmentManager()); - return false; - }); - } - - @Override - public void onDestroy() { - if (mGetIcons != null) { - mGetIcons.cancel(true); - } - Activity activity = getActivity(); - if (activity != null) Glide.get(activity).clearMemory(); - super.onDestroy(); - } - - private void initTabs() { - AnimationHelper.slideDownIn(mTabLayout) - .interpolator(new LinearOutSlowInInterpolator()) - .callback(new AnimationHelper.Callback() { - @Override - public void onAnimationStart() { - - } - - @Override - public void onAnimationEnd() { - if (getActivity() == null) return; - - if (Preferences.get(getActivity()).isToolbarShadowEnabled()) { - AnimationHelper.fade(getActivity().findViewById(R.id.shadow)).start(); - } - - mGetIcons = new IconsLoader().execute(); - } - }) - .start(); - } - - private class IconsLoader extends AsyncTaskBase { - @Override - protected void preRun() { - if (CandyBarMainActivity.sSections == null) { - mProgress.setVisibility(View.VISIBLE); - } - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (CandyBarMainActivity.sSections == null) { - CandyBarMainActivity.sSections = IconsHelper.getIconsList(requireActivity()); - - for (int i = 0; i < CandyBarMainActivity.sSections.size(); i++) { - List icons = CandyBarMainActivity.sSections.get(i).getIcons(); - if (requireActivity().getResources().getBoolean(R.bool.show_icon_name)) { - IconsHelper.computeTitles(requireActivity(), icons); - } - - if (requireActivity().getResources().getBoolean(R.bool.enable_icons_sort)) { - Collections.sort(icons, Icon.TitleComparator); - - CandyBarMainActivity.sSections.get(i).setIcons(icons); - } - } - - if (CandyBarApplication.getConfiguration().isShowTabAllIcons()) { - List icons = IconsHelper.getTabAllIcons(); - CandyBarMainActivity.sSections.add(new Icon( - CandyBarApplication.getConfiguration().getTabAllIconsTitle(), icons)); - } - } - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mGetIcons = null; - mProgress.setVisibility(View.GONE); - if (ok) { - setHasOptionsMenu(true); - - PagerIconsAdapter adapter = new PagerIconsAdapter( - getChildFragmentManager(), getLifecycle(), CandyBarMainActivity.sSections); - mPager.setAdapter(adapter); - - new TabLayoutMediator(mTabLayout, mPager, (tab, position) -> { - }).attach(); - mPager.setCurrentItem(1); - - new TabTypefaceChanger().executeOnThreadPool(); - - if (getActivity().getResources().getBoolean(R.bool.show_intro)) { - TapIntroHelper.showIconsIntro(getActivity()); - } - } else { - Toast.makeText(getActivity(), R.string.icons_load_failed, - Toast.LENGTH_LONG).show(); - } - } - } - - private class TabTypefaceChanger extends AsyncTaskBase { - - PagerIconsAdapter adapter; - - @Override - protected void preRun() { - adapter = (PagerIconsAdapter) mPager.getAdapter(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - for (int i = 0; i < adapter.getItemCount(); i++) { - int j = i; - runOnUiThread(() -> { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - if (mTabLayout == null) return; - - if (j < mTabLayout.getTabCount()) { - TabLayout.Tab tab = mTabLayout.getTabAt(j); - if (tab != null) { - if (j == 0) { - tab.setIcon(R.drawable.ic_bookmarks); - } else if (j < adapter.getItemCount()) { - tab.setCustomView(R.layout.fragment_icons_base_tab); - tab.setText(adapter.getPageTitle(j - 1)); - } - } - } - }); - } - return true; - } catch (Exception ignored) { - return false; - } - } - return false; - } - } - - private static class PagerIconsAdapter extends FragmentStateAdapter { - - private final List mIcons; - - PagerIconsAdapter(@NonNull FragmentManager fm, @NonNull Lifecycle lifecycle, - @NonNull List icons) { - super(fm, lifecycle); - mIcons = icons; - } - - public CharSequence getPageTitle(int position) { - String title = mIcons.get(position).getTitle(); - if (CandyBarApplication.getConfiguration().isShowTabIconsCount()) { - title += " (" + mIcons.get(position).getIcons().size() + ")"; - } - return title; - } - - @NonNull - @Override - public Fragment createFragment(int position) { - return IconsFragment.newInstance(position - 1); - } - - @Override - public int getItemCount() { - return mIcons.size() + 1; - } - - public List getIcons() { - return mIcons; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/IconsFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/IconsFragment.java deleted file mode 100644 index 545175d..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/IconsFragment.java +++ /dev/null @@ -1,161 +0,0 @@ -package candybar.lib.fragments; - -import android.content.res.Configuration; -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.ViewHelper; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.adapters.IconsAdapter; -import candybar.lib.databases.Database; -import candybar.lib.items.Icon; - -import static candybar.lib.helpers.ViewHelper.setFastScrollColor; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconsFragment extends Fragment { - - private View mNoBookmarksFoundView; - private RecyclerView mRecyclerView; - private RecyclerFastScroller mFastScroll; - private IconsAdapter mAdapter; - - private List mIcons; - private boolean isBookmarksFragment; - private boolean prevIsEmpty = false; - - private static final String INDEX = "index"; - - private static final List> iconsAdapters = new ArrayList<>(); - private static WeakReference bookmarksIconFragment = new WeakReference<>(null); - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_icons, container, false); - mNoBookmarksFoundView = view.findViewById(R.id.no_bookmarks_found_container); - mRecyclerView = view.findViewById(R.id.icons_grid); - mFastScroll = view.findViewById(R.id.fastscroll); - return view; - } - - public static IconsFragment newInstance(int index) { - IconsFragment fragment = new IconsFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(INDEX, index); - fragment.setArguments(bundle); - return fragment; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mIcons = new ArrayList<>(); - int index = requireArguments().getInt(INDEX); - if (index == -1) { - mIcons = Database.get(requireActivity()).getBookmarkedIcons(requireActivity()); - bookmarksIconFragment = new WeakReference<>(this); - isBookmarksFragment = true; - prevIsEmpty = mIcons.size() == 0; - } else if (CandyBarMainActivity.sSections != null) { - mIcons = CandyBarMainActivity.sSections.get(index).getIcons(); - } - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - setupViewVisibility(); - - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), - requireActivity().getResources().getInteger(R.integer.icons_column_count))); - - setFastScrollColor(mFastScroll); - mFastScroll.attachRecyclerView(mRecyclerView); - - ((ImageView) mNoBookmarksFoundView.findViewById(R.id.bookmark_image)) - .setImageDrawable(DrawableHelper.getTintedDrawable(requireActivity(), R.drawable.ic_bookmark, - ColorHelper.getAttributeColor(requireActivity(), android.R.attr.textColorSecondary))); - - mAdapter = new IconsAdapter(requireActivity(), mIcons, this, isBookmarksFragment); - mRecyclerView.setAdapter(mAdapter); - iconsAdapters.add(new WeakReference<>(mAdapter)); - } - - private void setupViewVisibility() { - if (isBookmarksFragment && mIcons.size() == 0) { - mNoBookmarksFoundView.setVisibility(View.VISIBLE); - mRecyclerView.setVisibility(View.GONE); - } else { - mNoBookmarksFoundView.setVisibility(View.GONE); - mRecyclerView.setVisibility(View.VISIBLE); - } - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - ViewHelper.resetSpanCount(mRecyclerView, - requireActivity().getResources().getInteger(R.integer.icons_column_count)); - } - - public void refreshBookmarks() { - if (isBookmarksFragment) { - mIcons = Database.get(requireActivity()).getBookmarkedIcons(requireActivity()); - mAdapter.setIcons(mIcons); - setupViewVisibility(); - } - } - - public static void reloadIcons() { - for (WeakReference adapterRef : iconsAdapters) { - if (adapterRef.get() != null) adapterRef.get().reloadIcons(); - } - } - - public static void reloadBookmarks() { - if (bookmarksIconFragment.get() != null) { - bookmarksIconFragment.get().refreshBookmarks(); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/IconsSearchFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/IconsSearchFragment.java deleted file mode 100644 index 2c7d0ce..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/IconsSearchFragment.java +++ /dev/null @@ -1,269 +0,0 @@ -package candybar.lib.fragments; - -import static candybar.lib.helpers.ViewHelper.setFastScrollColor; - -import android.annotation.SuppressLint; -import android.content.res.Configuration; -import android.os.Build; -import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.danimahardhika.android.helpers.core.SoftKeyboardHelper; -import com.danimahardhika.android.helpers.core.ViewHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.adapters.IconsAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.IconShapeChooserFragment; -import candybar.lib.helpers.IconsHelper; -import candybar.lib.items.Icon; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconsSearchFragment extends Fragment { - - private RecyclerView mRecyclerView; - private RecyclerFastScroller mFastScroll; - private TextView mSearchResult; - private EditText mSearchInput; - private final Fragment mFragment = this; - - private IconsAdapter mAdapter; - private AsyncTaskBase mAsyncTask; - - public static final String TAG = "icons_search"; - - private static WeakReference currentAdapter; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_icons_search, container, false); - mRecyclerView = view.findViewById(R.id.icons_grid); - mFastScroll = view.findViewById(R.id.fastscroll); - mSearchResult = view.findViewById(R.id.search_result); - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - setHasOptionsMenu(true); - - mRecyclerView.setHasFixedSize(true); - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), - requireActivity().getResources().getInteger(R.integer.icons_column_count))); - - setFastScrollColor(mFastScroll); - mFastScroll.attachRecyclerView(mRecyclerView); - mAsyncTask = new IconsLoader().execute(); - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - inflater.inflate(R.menu.menu_icons_search, menu); - MenuItem search = menu.findItem(R.id.menu_search); - MenuItem iconShape = menu.findItem(R.id.menu_icon_shape); - View searchView = search.getActionView(); - - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O || - !requireActivity().getResources().getBoolean(R.bool.includes_adaptive_icons)) { - iconShape.setVisible(false); - } else { - searchView.findViewById(R.id.container).setPadding(0, 0, 0, 0); - } - - View clearQueryButton = searchView.findViewById(R.id.clear_query_button); - mSearchInput = searchView.findViewById(R.id.search_input); - mSearchInput.setHint(R.string.search_icon); - - search.expandActionView(); - - search.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { - @Override - public boolean onMenuItemActionExpand(MenuItem item) { - return true; - } - - @Override - public boolean onMenuItemActionCollapse(MenuItem item) { - requireActivity().onBackPressed(); - return true; - } - }); - - mSearchInput.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - } - - @Override - public void afterTextChanged(Editable editable) { - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - String query = charSequence.toString(); - filterSearch(query); - clearQueryButton.setVisibility(query.contentEquals("") ? View.GONE : View.VISIBLE); - } - }); - - clearQueryButton.setOnClickListener(view -> mSearchInput.setText("")); - - iconShape.setOnMenuItemClickListener(menuItem -> { - IconShapeChooserFragment.showIconShapeChooser(requireActivity().getSupportFragmentManager()); - return false; - }); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - ViewHelper.resetSpanCount(mRecyclerView, requireActivity().getResources().getInteger(R.integer.icons_column_count)); - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) mAsyncTask.cancel(true); - currentAdapter = null; - super.onDestroy(); - } - - @SuppressLint("StringFormatInvalid") - private void filterSearch(String query) { - try { - mAdapter.search(query); - if (mAdapter.getItemCount() == 0) { - String text = requireActivity().getResources().getString(R.string.search_noresult, query); - mSearchResult.setText(text); - mSearchResult.setVisibility(View.VISIBLE); - } else mSearchResult.setVisibility(View.GONE); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - - public static void reloadIcons() { - if (currentAdapter != null && currentAdapter.get() != null) - currentAdapter.get().reloadIcons(); - } - - private class IconsLoader extends AsyncTaskBase { - - private List icons; - - @Override - protected void preRun() { - icons = new ArrayList<>(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (CandyBarMainActivity.sSections == null) { - CandyBarMainActivity.sSections = IconsHelper.getIconsList(requireActivity()); - - for (Icon section : CandyBarMainActivity.sSections) { - if (requireActivity().getResources().getBoolean(R.bool.show_icon_name)) { - IconsHelper.computeTitles(requireActivity(), section.getIcons()); - } - } - - if (CandyBarApplication.getConfiguration().isShowTabAllIcons()) { - List icons = IconsHelper.getTabAllIcons(); - CandyBarMainActivity.sSections.add(new Icon( - CandyBarApplication.getConfiguration().getTabAllIconsTitle(), icons)); - } - } - - for (Icon icon : CandyBarMainActivity.sSections) { - if (CandyBarApplication.getConfiguration().isShowTabAllIcons()) { - if (!icon.getTitle().equals(CandyBarApplication.getConfiguration().getTabAllIconsTitle())) { - icons.addAll(icon.getIcons()); - } - } else { - icons.addAll(icon.getIcons()); - } - } - - Collections.sort(icons, Icon.TitleComparator); - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - if (ok) { - mAdapter = new IconsAdapter(getActivity(), icons, mFragment, false); - currentAdapter = new WeakReference<>(mAdapter); - mRecyclerView.setAdapter(mAdapter); - filterSearch(""); - mSearchInput.requestFocus(); - SoftKeyboardHelper.openKeyboard(getActivity()); - } else { - // Unable to load all icons - Toast.makeText(getActivity(), R.string.icons_load_failed, - Toast.LENGTH_LONG).show(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/PresetsFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/PresetsFragment.java deleted file mode 100644 index df08ee9..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/PresetsFragment.java +++ /dev/null @@ -1,214 +0,0 @@ -package candybar.lib.fragments; - -import static candybar.lib.helpers.ViewHelper.setFastScrollColor; - -import android.Manifest; -import android.app.Activity; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.graphics.PorterDuff; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ProgressBar; -import android.widget.Toast; - -import androidx.activity.result.contract.ActivityResultContracts; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.core.view.ViewCompat; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.bumptech.glide.Glide; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.danimahardhika.cafebar.CafeBar; -import com.danimahardhika.cafebar.CafeBarTheme; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; - -import candybar.lib.R; -import candybar.lib.adapters.PresetsAdapter; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Preset; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class PresetsFragment extends Fragment { - - private RecyclerView mRecyclerView; - private ProgressBar mProgress; - private RecyclerFastScroller mFastScroll; - - private AsyncTaskBase mAsyncTask; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_presets, container, false); - mRecyclerView = view.findViewById(R.id.presets_grid); - mProgress = view.findViewById(R.id.progress); - mFastScroll = view.findViewById(R.id.fastscroll); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - ViewCompat.setNestedScrollingEnabled(mRecyclerView, false); - - mProgress.getIndeterminateDrawable().setColorFilter( - ColorHelper.getAttributeColor(getActivity(), R.attr.colorSecondary), - PorterDuff.Mode.SRC_IN); - - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setHasFixedSize(false); - mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), - requireActivity().getResources().getInteger(R.integer.presets_column_count))); - - setFastScrollColor(mFastScroll); - mFastScroll.attachRecyclerView(mRecyclerView); - - CountDownLatch permissionDone = new CountDownLatch(1); - - if (ContextCompat.checkSelfPermission(requireActivity(), - Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { - registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { - if (!isGranted) { - CafeBar.builder(requireActivity()) - .theme(CafeBarTheme.Custom(ContextCompat.getColor(requireActivity(), R.color.cardBackground))) - .floating(true) - .fitSystemWindow() - .duration(CafeBar.Duration.MEDIUM) - .typeface(TypefaceHelper.getRegular(requireActivity()), TypefaceHelper.getBold(requireActivity())) - .content(R.string.presets_storage_permission) - .show(); - } - - mAsyncTask = new PresetsLoader().execute(); - }).launch(Manifest.permission.READ_EXTERNAL_STORAGE); - } else { - mAsyncTask = new PresetsLoader().execute(); - } - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - resetSpanSizeLookUp(); - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) mAsyncTask.cancel(true); - Activity activity = getActivity(); - if (activity != null) Glide.get(activity).clearMemory(); - setHasOptionsMenu(false); - super.onDestroy(); - } - - private void resetSpanSizeLookUp() { - int column = requireActivity().getResources().getInteger(R.integer.presets_column_count); - PresetsAdapter adapter = (PresetsAdapter) mRecyclerView.getAdapter(); - GridLayoutManager manager = (GridLayoutManager) mRecyclerView.getLayoutManager(); - - try { - manager.setSpanCount(column); - - manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() { - @Override - public int getSpanSize(int position) { - if (adapter.isHeader(position)) return column; - return 1; - } - }); - } catch (Exception ignored) { - } - } - - private class PresetsLoader extends AsyncTaskBase { - - private final List presets = new ArrayList<>(); - - private List loadPresets(String sectionName, String directory) throws IOException { - List presets = new ArrayList<>(); - presets.add(new Preset("", sectionName)); - for (String item : requireActivity().getAssets().list(directory)) { - presets.add(new Preset(directory + "/" + item, null)); - } - if (presets.size() == 1) presets.clear(); - return presets; - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - - presets.addAll(loadPresets("Komponents", "komponents")); - presets.addAll(loadPresets("Lockscreens", "lockscreens")); - presets.addAll(loadPresets("Wallpapers", "wallpapers")); - presets.addAll(loadPresets("Widgets", "widgets")); - - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - mProgress.setVisibility(View.GONE); - - if (ok) { - mRecyclerView.setAdapter(new PresetsAdapter(requireActivity(), presets)); - } else { - Toast.makeText(getActivity(), R.string.presets_load_failed, - Toast.LENGTH_LONG).show(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/RequestFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/RequestFragment.java deleted file mode 100644 index d54e6f8..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/RequestFragment.java +++ /dev/null @@ -1,617 +0,0 @@ -package candybar.lib.fragments; - -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.ResolveInfo; -import android.content.res.Configuration; -import android.graphics.PorterDuff; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.os.Build; -import android.os.Bundle; -import android.util.Log; -import android.util.SparseBooleanArray; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ProgressBar; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.res.ResourcesCompat; -import androidx.fragment.app.Fragment; -import androidx.interpolator.view.animation.LinearOutSlowInInterpolator; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.animation.AnimationHelper; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.ViewHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.floatingactionbutton.FloatingActionButton; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import org.json.JSONObject; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.URL; -import java.net.URLConnection; -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.CountDownLatch; -import java.util.concurrent.atomic.AtomicBoolean; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.adapters.RequestAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.IconsHelper; -import candybar.lib.helpers.RequestHelper; -import candybar.lib.helpers.TapIntroHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Request; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.listeners.RequestListener; - -import static candybar.lib.helpers.DrawableHelper.getReqIcon; -import static candybar.lib.helpers.ViewHelper.setFastScrollColor; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class RequestFragment extends Fragment implements View.OnClickListener { - - private RecyclerView mRecyclerView; - private FloatingActionButton mFab; - private RecyclerFastScroller mFastScroll; - private ProgressBar mProgress; - - private MenuItem mMenuItem; - private RequestAdapter mAdapter; - private StaggeredGridLayoutManager mManager; - private AsyncTaskBase mAsyncTask; - - public static List sSelectedRequests; - - private boolean noEmailClientError = false; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_request, container, false); - mRecyclerView = view.findViewById(R.id.request_list); - mFab = view.findViewById(R.id.fab); - mFastScroll = view.findViewById(R.id.fastscroll); - mProgress = view.findViewById(R.id.progress); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - setHasOptionsMenu(false); - resetRecyclerViewPadding(getResources().getConfiguration().orientation); - - mProgress.getIndeterminateDrawable().setColorFilter( - ColorHelper.getAttributeColor(getActivity(), R.attr.colorSecondary), - PorterDuff.Mode.SRC_IN); - - int color = ColorHelper.getTitleTextColor(ColorHelper - .getAttributeColor(getActivity(), R.attr.colorSecondary)); - Drawable tintedDrawable = ResourcesCompat.getDrawable(requireActivity().getResources(), R.drawable.ic_fab_send, null); - assert tintedDrawable != null; - tintedDrawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_IN); - mFab.setImageDrawable(tintedDrawable); - mFab.setOnClickListener(this); - - if (!Preferences.get(requireActivity()).isFabShadowEnabled()) { - mFab.setCompatElevation(0f); - } - - RecyclerView.ItemAnimator itemAnimator = new DefaultItemAnimator(); - itemAnimator.setChangeDuration(0); - mRecyclerView.setItemAnimator(itemAnimator); - mManager = new StaggeredGridLayoutManager( - requireActivity().getResources().getInteger(R.integer.request_column_count), - StaggeredGridLayoutManager.VERTICAL); - mRecyclerView.setLayoutManager(mManager); - - setFastScrollColor(mFastScroll); - mFastScroll.attachRecyclerView(mRecyclerView); - - mAsyncTask = new MissingAppsLoader().execute(); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - resetRecyclerViewPadding(newConfig.orientation); - if (mAsyncTask != null) return; - - int[] positions = mManager.findFirstVisibleItemPositions(null); - - SparseBooleanArray selectedItems = mAdapter.getSelectedItemsArray(); - ViewHelper.resetSpanCount(mRecyclerView, - requireActivity().getResources().getInteger(R.integer.request_column_count)); - - mAdapter = new RequestAdapter(requireActivity(), - CandyBarMainActivity.sMissedApps, - mManager.getSpanCount()); - mRecyclerView.setAdapter(mAdapter); - mAdapter.setSelectedItemsArray(selectedItems); - - if (positions.length > 0) - mRecyclerView.scrollToPosition(positions[0]); - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, MenuInflater inflater) { - inflater.inflate(R.menu.menu_request, menu); - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) { - mAsyncTask.cancel(true); - } - super.onDestroy(); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == R.id.menu_select_all) { - mMenuItem = item; - if (mAdapter == null) return false; - if (mAdapter.selectAll()) { - item.setIcon(R.drawable.ic_toolbar_select_all_selected); - return true; - } - - item.setIcon(R.drawable.ic_toolbar_select_all); - return true; - } - return super.onOptionsItemSelected(item); - } - - @Override - public void onClick(View view) { - int id = view.getId(); - if (id == R.id.fab) { - if (mAdapter == null) return; - - int selected = mAdapter.getSelectedItemsSize(); - if (selected > 0) { - if (mAdapter.isContainsRequested()) { - RequestHelper.showAlreadyRequestedDialog(requireActivity()); - return; - } - - boolean requestLimit = getResources().getBoolean( - R.bool.enable_icon_request_limit); - boolean iconRequest = getResources().getBoolean( - R.bool.enable_icon_request); - boolean premiumRequest = getResources().getBoolean( - R.bool.enable_premium_request); - - if (Preferences.get(requireActivity()).isPremiumRequest()) { - int count = Preferences.get(requireActivity()).getPremiumRequestCount(); - if (selected > count) { - RequestHelper.showPremiumRequestLimitDialog(requireActivity(), selected); - return; - } - - if (!RequestHelper.isReadyToSendPremiumRequest(requireActivity())) return; - - try { - - } catch (Exception ignored) { - } - return; - } - - if (!iconRequest && premiumRequest) { - RequestHelper.showPremiumRequestRequired(requireActivity()); - return; - } - - if (requestLimit) { - int limit = requireActivity().getResources().getInteger(R.integer.icon_request_limit); - int used = Preferences.get(requireActivity()).getRegularRequestUsed(); - if (selected > (limit - used)) { - RequestHelper.showIconRequestLimitDialog(requireActivity()); - return; - } - } - - if ((requireActivity().getResources().getBoolean(R.bool.json_check_before_request)) && - (requireActivity().getResources().getString(R.string.config_json).length() != 0)) { - mAsyncTask = new CheckConfig().executeOnThreadPool(); - } else { - mAsyncTask = new RequestLoader().executeOnThreadPool(); - } - - } else { - Toast.makeText(getActivity(), R.string.request_not_selected, - Toast.LENGTH_LONG).show(); - } - } - } - - private void resetRecyclerViewPadding(int orientation) { - if (mRecyclerView == null) return; - - int padding = 0; - boolean tabletMode = getResources().getBoolean(R.bool.android_helpers_tablet_mode); - if (tabletMode || orientation == Configuration.ORIENTATION_LANDSCAPE) { - padding = requireActivity().getResources().getDimensionPixelSize(R.dimen.content_padding); - - if (CandyBarApplication.getConfiguration().getRequestStyle() == CandyBarApplication.Style.PORTRAIT_FLAT_LANDSCAPE_FLAT) { - padding = requireActivity().getResources().getDimensionPixelSize(R.dimen.card_margin); - } - } - - int size = requireActivity().getResources().getDimensionPixelSize(R.dimen.fab_size); - int marginGlobal = requireActivity().getResources().getDimensionPixelSize(R.dimen.fab_margin_global); - - mRecyclerView.setPadding(padding, padding, 0, size + (marginGlobal * 2)); - } - - public void prepareRequest() { - if (mAsyncTask != null) return; - - mAsyncTask = new RequestLoader().executeOnThreadPool(); - } - - public void refreshIconRequest() { - if (mAdapter == null) { - RequestFragment.sSelectedRequests = null; - return; - } - - if (RequestFragment.sSelectedRequests == null) { - mAdapter.notifyItemChanged(0); - return; - } - - for (Integer integer : RequestFragment.sSelectedRequests) { - mAdapter.setRequested(integer, true); - } - - mAdapter.notifyDataSetChanged(); - RequestFragment.sSelectedRequests = null; - } - - private class MissingAppsLoader extends AsyncTaskBase { - - private List requests; - - @Override - protected void preRun() { - if (CandyBarMainActivity.sMissedApps == null) { - mProgress.setVisibility(View.VISIBLE); - } - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (CandyBarMainActivity.sMissedApps == null) { - CandyBarMainActivity.sMissedApps = RequestHelper.getMissingApps(requireActivity()); - } - - requests = CandyBarMainActivity.sMissedApps; - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - mProgress.setVisibility(View.GONE); - - if (ok) { - setHasOptionsMenu(true); - mAdapter = new RequestAdapter(getActivity(), - requests, mManager.getSpanCount()); - mRecyclerView.setAdapter(mAdapter); - - AnimationHelper.show(mFab) - .interpolator(new LinearOutSlowInInterpolator()) - .start(); - - if (getActivity().getResources().getBoolean(R.bool.show_intro)) { - TapIntroHelper.showRequestIntro(getActivity(), mRecyclerView); - } - } else { - mRecyclerView.setAdapter(null); - Toast.makeText(getActivity(), R.string.request_appfilter_failed, Toast.LENGTH_LONG).show(); - } - } - } - - private class RequestLoader extends AsyncTaskBase { - - private MaterialDialog dialog; - private boolean isArctic; - private String arcticApiKey; - private String errorMessage; - - @Override - protected void preRun() { - if (Preferences.get(requireActivity()).isPremiumRequest()) { - isArctic = RequestHelper.isPremiumArcticEnabled(requireActivity()); - arcticApiKey = RequestHelper.getPremiumArcticApiKey(requireActivity()); - } else { - isArctic = RequestHelper.isRegularArcticEnabled(requireActivity()); - arcticApiKey = RequestHelper.getRegularArcticApiKey(requireActivity()); - } - - dialog = new MaterialDialog.Builder(requireActivity()) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .content(R.string.request_building) - .cancelable(false) - .canceledOnTouchOutside(false) - .progress(true, 0) - .progressIndeterminateStyle(true) - .build(); - - dialog.show(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(2); - - RequestFragment.sSelectedRequests = mAdapter.getSelectedItems(); - List requests = mAdapter.getSelectedApps(); - - File directory = requireActivity().getCacheDir(); - List files = new ArrayList<>(); - - for (Request request : requests) { - Drawable drawable = getReqIcon(requireActivity(), request.getActivity()); - String icon = IconsHelper.saveIcon(files, directory, drawable, - isArctic ? request.getPackageName() : RequestHelper.fixNameForRequest(request.getName())); - if (icon != null) files.add(icon); - } - - if (isArctic) { - errorMessage = RequestHelper.sendArcticRequest(requests, files, directory, arcticApiKey); - return errorMessage == null; - } else { - boolean nonMailingAppSend = getResources().getBoolean(R.bool.enable_non_mail_app_request); - Intent intent; - - if (!nonMailingAppSend) { - intent = new Intent(Intent.ACTION_SENDTO); - intent.setData(Uri.parse("mailto:")); - } else { - intent = new Intent(Intent.ACTION_SEND); - intent.setType("application/zip"); - } - - List resolveInfos = requireActivity().getPackageManager() - .queryIntentActivities(intent, 0); - if (resolveInfos.size() == 0) { - noEmailClientError = true; - return false; - } - - File appFilter = RequestHelper.buildXml(requireActivity(), requests, RequestHelper.XmlType.APPFILTER); - File appMap = RequestHelper.buildXml(requireActivity(), requests, RequestHelper.XmlType.APPMAP); - File themeResources = RequestHelper.buildXml(requireActivity(), requests, RequestHelper.XmlType.THEME_RESOURCES); - - if (appFilter != null) files.add(appFilter.toString()); - - if (appMap != null) files.add(appMap.toString()); - - if (themeResources != null) files.add(themeResources.toString()); - - CandyBarApplication.sZipPath = FileHelper.createZip(files, new File(directory.toString(), - RequestHelper.getGeneratedZipName(RequestHelper.ZIP))); - } - return true; - } catch (RuntimeException | InterruptedException e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - dialog.dismiss(); - mAsyncTask = null; - dialog = null; - - if (ok) { - if (isArctic) { - Toast.makeText(getActivity(), R.string.request_arctic_success, Toast.LENGTH_LONG).show(); - ((RequestListener) getActivity()).onRequestBuilt(null, IntentChooserFragment.ICON_REQUEST); - } else { - IntentChooserFragment.showIntentChooserDialog(getActivity().getSupportFragmentManager(), - IntentChooserFragment.ICON_REQUEST); - } - mAdapter.resetSelectedItems(); - if (mMenuItem != null) mMenuItem.setIcon(R.drawable.ic_toolbar_select_all); - } else { - if (isArctic) { - new MaterialDialog.Builder(getActivity()) - .typeface(TypefaceHelper.getMedium(getActivity()), TypefaceHelper.getRegular(getActivity())) - .content(R.string.request_arctic_error, "\"" + errorMessage + "\"") - .cancelable(true) - .canceledOnTouchOutside(false) - .positiveText(R.string.close) - .build() - .show(); - } else if (noEmailClientError) { - Toast.makeText(getActivity(), R.string.no_email_app, - Toast.LENGTH_LONG).show(); - } else { - Toast.makeText(getActivity(), R.string.request_build_failed, - Toast.LENGTH_LONG).show(); - } - } - } - } - - public class CheckConfig extends AsyncTaskBase { - - private MaterialDialog dialog; - private boolean canRequest = true; - private String updateUrl; - - @Override - protected void preRun() { - dialog = new MaterialDialog.Builder(requireActivity()) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .content(R.string.request_fetching_data) - .cancelable(false) - .canceledOnTouchOutside(false) - .progress(true, 0) - .progressIndeterminateStyle(true) - .build(); - - dialog.show(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - String configJsonUrl = requireActivity().getResources().getString(R.string.config_json); - URLConnection urlConnection; - BufferedReader bufferedReader = null; - - try { - urlConnection = new URL(configJsonUrl).openConnection(); - bufferedReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); - - String line; - StringBuilder stringBuilder = new StringBuilder(); - while ((line = bufferedReader.readLine()) != null) { - stringBuilder.append(line); - } - - JSONObject configJson = new JSONObject(stringBuilder.toString()); - updateUrl = configJson.getString("url"); - - JSONObject disableRequestObj = configJson.getJSONObject("disableRequest"); - long disableRequestBelow = disableRequestObj.optLong("below", 0); - String disableRequestOn = disableRequestObj.optString("on", ""); - PackageInfo packageInfo = requireActivity().getPackageManager() - .getPackageInfo(requireActivity().getPackageName(), 0); - long appVersionCode = Build.VERSION.SDK_INT >= Build.VERSION_CODES.P - ? packageInfo.getLongVersionCode() : packageInfo.versionCode; - - if ((appVersionCode < disableRequestBelow) || - disableRequestOn.matches(".*\\b" + appVersionCode + "\\b.*")) { - canRequest = false; - } - - return true; - } catch (Exception ex) { - LogUtil.e("Error loading Configuration JSON " + Log.getStackTraceString(ex)); - } finally { - if (bufferedReader != null) { - try { - bufferedReader.close(); - } catch (IOException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - dialog.dismiss(); - dialog = null; - - if (ok) { - if (!canRequest) { - new MaterialDialog.Builder(requireActivity()) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .content(R.string.request_app_disabled) - .negativeText(R.string.close) - .positiveText(R.string.update) - .onPositive(((dialog, which) -> { - Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(updateUrl)); - intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT); - requireActivity().startActivity(intent); - })) - .cancelable(false) - .canceledOnTouchOutside(false) - .build() - .show(); - - mAdapter.resetSelectedItems(); - if (mMenuItem != null) mMenuItem.setIcon(R.drawable.ic_toolbar_select_all); - } else { - mAsyncTask = new RequestLoader().executeOnThreadPool(); - } - } else { - new MaterialDialog.Builder(requireActivity()) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .content(R.string.unable_to_load_config) - .canceledOnTouchOutside(false) - .positiveText(R.string.close) - .build() - .show(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/SettingsFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/SettingsFragment.java deleted file mode 100644 index 47abf37..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/SettingsFragment.java +++ /dev/null @@ -1,311 +0,0 @@ -package candybar.lib.fragments; - -import static candybar.lib.helpers.DrawableHelper.getReqIcon; - -import android.content.res.Resources; -import android.graphics.drawable.Drawable; -import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.LinearLayoutManager; -import androidx.recyclerview.widget.RecyclerView; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.text.DecimalFormat; -import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.SettingsAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.IconsHelper; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.RequestHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Language; -import candybar.lib.items.Request; -import candybar.lib.items.Setting; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.listeners.RequestListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class SettingsFragment extends Fragment { - - private RecyclerView mRecyclerView; - - @Nullable - @Override - public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_settings, container, false); - mRecyclerView = view.findViewById(R.id.recyclerview); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setLayoutManager(new LinearLayoutManager(getActivity())); - - initSettings(); - } - - public void restorePurchases(List productsId, String[] premiumRequestProductsId, - int[] premiumRequestProductsCount) { - int index = -1; - for (String productId : productsId) { - for (int i = 0; i < premiumRequestProductsId.length; i++) { - if (premiumRequestProductsId[i].equals(productId)) { - index = i; - break; - } - } - if (index > -1 && index < premiumRequestProductsCount.length) { - final Preferences preferences = Preferences.get(requireActivity()); - if (!preferences.isPremiumRequest()) { - preferences.setPremiumRequestProductId(productId); - preferences.setPremiumRequestCount(premiumRequestProductsCount[index]); - preferences.setPremiumRequestTotal(premiumRequestProductsCount[index]); - preferences.setPremiumRequest(true); - } - } - } - int message = index > -1 ? - R.string.pref_premium_request_restore_success : - R.string.pref_premium_request_restore_empty; - Toast.makeText(getActivity(), message, Toast.LENGTH_LONG).show(); - } - - private void initSettings() { - List settings = new ArrayList<>(); - - double cache = (double) FileHelper.getDirectorySize(requireActivity().getCacheDir()) / FileHelper.MB; - NumberFormat formatter = new DecimalFormat("#0.00"); - final Resources resources = requireActivity().getResources(); - - settings.add(new Setting(R.drawable.ic_toolbar_storage, - resources.getString(R.string.pref_data_header), - "", "", "", Setting.Type.HEADER)); - - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_data_cache), - resources.getString(R.string.pref_data_cache_desc), - resources.getString(R.string.pref_data_cache_size, - formatter.format(cache) + " MB"), - Setting.Type.CACHE)); - - if (resources.getBoolean(R.bool.enable_icon_request) || - Preferences.get(requireActivity()).isPremiumRequestEnabled() && - !resources.getBoolean(R.bool.enable_icon_request_limit)) { - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_data_request), - resources.getString(R.string.pref_data_request_desc), - "", Setting.Type.ICON_REQUEST)); - } - - if (Preferences.get(requireActivity()).isPremiumRequestEnabled()) { - settings.add(new Setting(R.drawable.ic_toolbar_premium_request, - resources.getString(R.string.pref_premium_request_header), - "", "", "", Setting.Type.HEADER)); - - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_premium_request_restore), - resources.getString(R.string.pref_premium_request_restore_desc), - "", Setting.Type.RESTORE)); - - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_premium_request_rebuild), - resources.getString(R.string.pref_premium_request_rebuild_desc), - "", Setting.Type.PREMIUM_REQUEST)); - } - - if (CandyBarApplication.getConfiguration().isDashboardThemingEnabled()) { - settings.add(new Setting(R.drawable.ic_toolbar_theme, - resources.getString(R.string.pref_theme_header), - "", "", "", Setting.Type.HEADER)); - - settings.add(new Setting(-1, "", - Preferences.get(requireActivity()).getTheme().displayName(requireActivity()), - "", "", Setting.Type.THEME)); - } - - settings.add(new Setting(R.drawable.ic_toolbar_language, - resources.getString(R.string.pref_language_header), - "", "", "", Setting.Type.HEADER)); - - Language language = LocaleHelper.getCurrentLanguage(requireActivity()); - settings.add(new Setting(-1, "", - language.getName(), - "", "", Setting.Type.LANGUAGE)); - - settings.add(new Setting(R.drawable.ic_toolbar_others, - resources.getString(R.string.pref_others_header), - "", "", "", Setting.Type.HEADER)); - - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_others_changelog), - "", "", Setting.Type.CHANGELOG)); - - if (resources.getBoolean(R.bool.enable_apply)) { - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_others_report_bugs), - "", "", Setting.Type.REPORT_BUGS)); - } - - if (resources.getBoolean(R.bool.show_intro)) { - settings.add(new Setting(-1, "", - resources.getString(R.string.pref_others_reset_tutorial), - "", "", Setting.Type.RESET_TUTORIAL)); - } - - mRecyclerView.setAdapter(new SettingsAdapter(requireActivity(), settings)); - } - - public void rebuildPremiumRequest() { - new PremiumRequestRebuilder().execute(); - } - - private class PremiumRequestRebuilder extends AsyncTaskBase { - - private MaterialDialog dialog; - private boolean isArctic; - private String arcticApiKey; - private List requests; - private String errorMessage = ""; - - @Override - protected void preRun() { - isArctic = RequestHelper.isPremiumArcticEnabled(requireActivity()); - arcticApiKey = RequestHelper.getPremiumArcticApiKey(requireActivity()); - - dialog = new MaterialDialog.Builder(requireActivity()) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .content(R.string.premium_request_rebuilding) - .cancelable(false) - .canceledOnTouchOutside(false) - .progress(true, 0) - .progressIndeterminateStyle(true) - .build(); - - dialog.show(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - File directory = requireActivity().getCacheDir(); - requests = Database.get(requireActivity()).getPremiumRequest(null); - if (requests.size() == 0) return true; - - List files = new ArrayList<>(); - - for (Request request : requests) { - Drawable drawable = getReqIcon(requireActivity(), request.getActivity()); - String icon = IconsHelper.saveIcon(files, directory, drawable, - isArctic ? request.getPackageName() : RequestHelper.fixNameForRequest(request.getName())); - if (icon != null) files.add(icon); - } - - if (isArctic) { - errorMessage = RequestHelper.sendArcticRequest(requests, files, directory, arcticApiKey); - return errorMessage == null; - } else { - File appFilter = RequestHelper.buildXml(requireActivity(), requests, RequestHelper.XmlType.APPFILTER); - File appMap = RequestHelper.buildXml(requireActivity(), requests, RequestHelper.XmlType.APPMAP); - File themeResources = RequestHelper.buildXml(requireActivity(), requests, RequestHelper.XmlType.THEME_RESOURCES); - - if (appFilter != null) { - files.add(appFilter.toString()); - } - - if (appMap != null) { - files.add(appMap.toString()); - } - - if (themeResources != null) { - files.add(themeResources.toString()); - } - - CandyBarApplication.sZipPath = FileHelper.createZip(files, new File(directory.toString(), - RequestHelper.getGeneratedZipName(RequestHelper.REBUILD_ZIP))); - } - return true; - } catch (Exception e) { - errorMessage = e.toString(); - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - dialog.dismiss(); - dialog = null; - - if (ok) { - if (requests.size() == 0) { - Toast.makeText(getActivity(), R.string.premium_request_rebuilding_empty, - Toast.LENGTH_LONG).show(); - return; - } - - if (isArctic) { - Toast.makeText(getActivity(), R.string.request_arctic_success, Toast.LENGTH_LONG).show(); - ((RequestListener) getActivity()).onRequestBuilt(null, IntentChooserFragment.REBUILD_ICON_REQUEST); - } else { - IntentChooserFragment.showIntentChooserDialog( - getActivity().getSupportFragmentManager(), IntentChooserFragment.REBUILD_ICON_REQUEST); - } - } else { - Toast.makeText(getActivity(), "Failed: " + errorMessage, Toast.LENGTH_LONG).show(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/WallpapersFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/WallpapersFragment.java deleted file mode 100644 index b5d781c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/WallpapersFragment.java +++ /dev/null @@ -1,305 +0,0 @@ -package candybar.lib.fragments; - -import static candybar.lib.helpers.ViewHelper.setFastScrollColor; - -import android.annotation.SuppressLint; -import android.app.Activity; -import android.content.res.Configuration; -import android.graphics.PorterDuff; -import android.os.Bundle; -import android.os.Handler; -import android.os.Looper; -import android.text.Editable; -import android.text.TextWatcher; -import android.util.Log; -import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; -import android.view.MenuItem; -import android.view.View; -import android.view.ViewGroup; -import android.widget.EditText; -import android.widget.ProgressBar; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.core.view.ViewCompat; -import androidx.fragment.app.Fragment; -import androidx.recyclerview.widget.DefaultItemAnimator; -import androidx.recyclerview.widget.GridLayoutManager; -import androidx.recyclerview.widget.RecyclerView; -import androidx.swiperefreshlayout.widget.SwipeRefreshLayout; - -import com.bumptech.glide.Glide; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.SoftKeyboardHelper; -import com.danimahardhika.android.helpers.core.ViewHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.WallpapersAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.helpers.JsonHelper; -import candybar.lib.helpers.TapIntroHelper; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.listeners.WallpapersListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class WallpapersFragment extends Fragment { - - private RecyclerView mRecyclerView; - private SwipeRefreshLayout mSwipe; - private ProgressBar mProgress; - private TextView mSearchResult; - private RecyclerFastScroller mFastScroll; - - private AsyncTaskBase mAsyncTask; - - @Nullable - @Override - public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.fragment_wallpapers, container, false); - mRecyclerView = view.findViewById(R.id.wallpapers_grid); - mSwipe = view.findViewById(R.id.swipe); - mProgress = view.findViewById(R.id.progress); - mSearchResult = view.findViewById(R.id.search_result); - mFastScroll = view.findViewById(R.id.fastscroll); - - if (!Preferences.get(requireActivity()).isToolbarShadowEnabled()) { - View shadow = view.findViewById(R.id.shadow); - if (shadow != null) shadow.setVisibility(View.GONE); - } - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - - ViewCompat.setNestedScrollingEnabled(mRecyclerView, false); - - mProgress.getIndeterminateDrawable().setColorFilter( - ColorHelper.getAttributeColor(getActivity(), R.attr.colorSecondary), - PorterDuff.Mode.SRC_IN); - mSwipe.setColorSchemeColors( - ContextCompat.getColor(requireActivity(), R.color.swipeRefresh)); - - mRecyclerView.setItemAnimator(new DefaultItemAnimator()); - mRecyclerView.setHasFixedSize(false); - mRecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), - requireActivity().getResources().getInteger(R.integer.wallpapers_column_count))); - - setFastScrollColor(mFastScroll); - mFastScroll.attachRecyclerView(mRecyclerView); - - mSwipe.setOnRefreshListener(() -> { - if (mProgress.getVisibility() == View.GONE) - mAsyncTask = new WallpapersLoader(true).execute(); - else mSwipe.setRefreshing(false); - }); - - mAsyncTask = new WallpapersLoader(false).execute(); - } - - @Override - public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { - inflater.inflate(R.menu.menu_search, menu); - MenuItem search = menu.findItem(R.id.menu_search); - - View searchView = search.getActionView(); - EditText searchInput = searchView.findViewById(R.id.search_input); - View clearQueryButton = searchView.findViewById(R.id.clear_query_button); - - searchInput.setHint(requireActivity().getResources().getString(R.string.search_wallpapers)); - searchInput.requestFocus(); - - new Handler(Looper.getMainLooper()).postDelayed(() -> { - if (getActivity() != null) { - SoftKeyboardHelper.openKeyboard(getActivity()); - } - }, 1000); - - searchInput.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { - } - - @Override - public void afterTextChanged(Editable editable) { - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { - String query = charSequence.toString(); - filterSearch(query); - clearQueryButton.setVisibility(query.contentEquals("") ? View.GONE : View.VISIBLE); - } - }); - - clearQueryButton.setOnClickListener(view -> searchInput.setText("")); - - search.setOnActionExpandListener(new MenuItem.OnActionExpandListener() { - @Override - public boolean onMenuItemActionExpand(MenuItem menuItem) { - searchInput.requestFocus(); - - new Handler(Looper.getMainLooper()).postDelayed(() -> { - if (getActivity() != null) { - SoftKeyboardHelper.openKeyboard(getActivity()); - } - }, 1000); - - return true; - } - - @Override - public boolean onMenuItemActionCollapse(MenuItem menuItem) { - searchInput.setText(""); - return true; - } - }); - - super.onCreateOptionsMenu(menu, inflater); - } - - @Override - public void onConfigurationChanged(@NonNull Configuration newConfig) { - super.onConfigurationChanged(newConfig); - ViewHelper.resetSpanCount(mRecyclerView, - requireActivity().getResources().getInteger(R.integer.wallpapers_column_count)); - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) mAsyncTask.cancel(true); - Activity activity = getActivity(); - if (activity != null) Glide.get(activity).clearMemory(); - setHasOptionsMenu(false); - super.onDestroy(); - } - - @SuppressLint("StringFormatInvalid") - private void filterSearch(String query) { - if (mRecyclerView.getAdapter() != null) { - WallpapersAdapter adapter = (WallpapersAdapter) mRecyclerView.getAdapter(); - adapter.search(query); - if (adapter.getItemCount() == 0) { - String text = requireActivity().getResources().getString(R.string.search_noresult, query); - mSearchResult.setText(text); - mSearchResult.setVisibility(View.VISIBLE); - } else mSearchResult.setVisibility(View.GONE); - } - } - - private class WallpapersLoader extends AsyncTaskBase { - - private List wallpapers; - private final boolean refreshing; - - private WallpapersLoader(boolean refreshing) { - this.refreshing = refreshing; - } - - @Override - protected void preRun() { - if (!refreshing) mProgress.setVisibility(View.VISIBLE); - else mSwipe.setRefreshing(true); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - - URL url = new URL(getString(R.string.wallpaper_json)); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); - - if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { - InputStream stream = connection.getInputStream(); - List list = JsonHelper.parseList(stream); - if (list == null) { - LogUtil.e("Json error, no array with name: " - + CandyBarApplication.getConfiguration().getWallpaperJsonStructure().getArrayName()); - return false; - } - - if (Database.get(requireActivity()).getWallpapersCount() > 0) { - Database.get(requireActivity()).deleteWallpapers(); - } - - Database.get(requireActivity()).addWallpapers(null, list); - wallpapers = Database.get(requireActivity()).getWallpapers(null); - - return true; - } - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - mProgress.setVisibility(View.GONE); - mSwipe.setRefreshing(false); - - if (ok) { - setHasOptionsMenu(true); - - mRecyclerView.setAdapter(new WallpapersAdapter(getActivity(), wallpapers)); - - ((WallpapersListener) getActivity()) - .onWallpapersChecked(Database.get(getActivity()).getWallpapersCount()); - - try { - if (getActivity().getResources().getBoolean(R.bool.show_intro)) { - TapIntroHelper.showWallpapersIntro(getActivity(), mRecyclerView); - } - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } else { - Toast.makeText(getActivity(), R.string.connection_failed, - Toast.LENGTH_LONG).show(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/ChangelogFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/ChangelogFragment.java deleted file mode 100644 index 26613e1..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/ChangelogFragment.java +++ /dev/null @@ -1,113 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Activity; -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.view.View; -import android.widget.ListView; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.ChangelogAdapter; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.utils.listeners.HomeListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ChangelogFragment extends DialogFragment { - - private static final String TAG = "candybar.dialog.changelog"; - - private static ChangelogFragment newInstance() { - return new ChangelogFragment(); - } - - public static void showChangelog(FragmentManager fm) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = ChangelogFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .customView(R.layout.fragment_changelog, false) - .positiveText(R.string.close) - .build(); - dialog.show(); - - ListView changelogList = (ListView) dialog.findViewById(R.id.changelog_list); - TextView changelogDate = (TextView) dialog.findViewById(R.id.changelog_date); - TextView changelogVersion = (TextView) dialog.findViewById(R.id.changelog_version); - - Activity activity = requireActivity(); - try { - String version = activity.getPackageManager().getPackageInfo( - activity.getPackageName(), 0).versionName; - if (version != null && version.length() > 0) { - changelogVersion.setText(activity.getResources().getString( - R.string.changelog_version)); - changelogVersion.append(" " + version); - } - } catch (Exception ignored) { - } - - String date = activity.getResources().getString(R.string.changelog_date); - if (date.length() > 0) changelogDate.setText(date); - else changelogDate.setVisibility(View.GONE); - - String[] changelog = activity.getResources().getStringArray(R.array.changelog); - changelogList.setAdapter(new ChangelogAdapter(requireActivity(), changelog)); - - return dialog; - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - super.onDismiss(dialog); - - FragmentManager fm = requireActivity().getSupportFragmentManager(); - if (fm != null) { - Fragment fragment = fm.findFragmentByTag("home"); - if (fragment != null) { - HomeListener listener = (HomeListener) fragment; - listener.onHomeIntroInit(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/CreditsFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/CreditsFragment.java deleted file mode 100644 index a5f59d5..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/CreditsFragment.java +++ /dev/null @@ -1,195 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.os.Bundle; -import android.util.Log; -import android.widget.ListView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import org.xmlpull.v1.XmlPullParser; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.CreditsAdapter; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Credit; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class CreditsFragment extends DialogFragment { - - private ListView mListView; - private AsyncTaskBase mAsyncTask; - private int mType; - - private static final String TAG = "candybar.dialog.credits"; - private static final String TYPE = "type"; - - public static final int TYPE_ICON_PACK_CONTRIBUTORS = 0; - public static final int TYPE_DASHBOARD_CONTRIBUTORS = 1; - public static final int TYPE_DASHBOARD_TRANSLATOR = 2; - - private static CreditsFragment newInstance(int type) { - CreditsFragment fragment = new CreditsFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(TYPE, type); - fragment.setArguments(bundle); - return fragment; - } - - public static void showCreditsDialog(FragmentManager fm, int type) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = CreditsFragment.newInstance(type); - dialog.show(ft, TAG); - } catch (IllegalStateException | IllegalArgumentException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_credits, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .title(getTitle(mType)) - .positiveText(R.string.close) - .build(); - dialog.show(); - mListView = (ListView) dialog.findViewById(R.id.listview); - mAsyncTask = new CreditsLoader().executeOnThreadPool(); - - return dialog; - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mType = getArguments().getInt(TYPE); - } - } - - @Override - public void onDestroyView() { - if (mAsyncTask != null) { - mAsyncTask.cancel(true); - } - super.onDestroyView(); - } - - @NonNull - private String getTitle(int type) { - if (getActivity() == null) return ""; - switch (type) { - case TYPE_ICON_PACK_CONTRIBUTORS: - return getActivity().getResources().getString(R.string.about_contributors_title); - case TYPE_DASHBOARD_CONTRIBUTORS: - return getActivity().getResources().getString(R.string.about_dashboard_contributors); - case TYPE_DASHBOARD_TRANSLATOR: - return getActivity().getResources().getString(R.string.about_dashboard_translator); - default: - return ""; - } - } - - private int getResource(int type) { - switch (type) { - case TYPE_ICON_PACK_CONTRIBUTORS: - return R.xml.contributors; - case TYPE_DASHBOARD_CONTRIBUTORS: - return R.xml.dashboard_contributors; - case TYPE_DASHBOARD_TRANSLATOR: - return R.xml.dashboard_translator; - default: - return -1; - } - } - - private class CreditsLoader extends AsyncTaskBase { - - private List credits; - - @Override - protected void preRun() { - credits = new ArrayList<>(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - int res = getResource(mType); - - XmlPullParser xpp = getResources().getXml(res); - - while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { - if (xpp.getEventType() == XmlPullParser.START_TAG) { - if (xpp.getName().equals("contributor")) { - Credit credit = new Credit( - xpp.getAttributeValue(null, "name"), - xpp.getAttributeValue(null, "contribution"), - xpp.getAttributeValue(null, "image"), - xpp.getAttributeValue(null, "link")); - credits.add(credit); - } - } - xpp.next(); - } - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - if (ok) { - mListView.setAdapter(new CreditsAdapter(getActivity(), credits)); - } else { - dismiss(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/DonationLinksFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/DonationLinksFragment.java deleted file mode 100644 index 43a4a8b..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/DonationLinksFragment.java +++ /dev/null @@ -1,65 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.os.Bundle; -import android.widget.ListView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.OtherAppsAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.TypefaceHelper; - -public class DonationLinksFragment extends DialogFragment { - - private static final String TAG = "candybar.dialog.donationlinks"; - - private static DonationLinksFragment newInstance() { - return new DonationLinksFragment(); - } - - public static void showDonationLinksDialog(@NonNull FragmentManager fm) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = DonationLinksFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalStateException | IllegalArgumentException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_other_apps, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .title(R.string.donate) - .positiveText(R.string.close) - .build(); - dialog.show(); - - ListView listView = (ListView) dialog.findViewById(R.id.listview); - List donationLinks = CandyBarApplication.getConfiguration().getDonationLinks(); - if (donationLinks != null) { - listView.setAdapter(new OtherAppsAdapter(requireActivity(), donationLinks)); - } else { - dismiss(); - } - - return dialog; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconPreviewFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconPreviewFragment.java deleted file mode 100644 index 765f118..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconPreviewFragment.java +++ /dev/null @@ -1,178 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import androidx.annotation.AttrRes; -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.resource.drawable.DrawableTransitionOptions; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; - -import java.util.concurrent.atomic.AtomicBoolean; - -import candybar.lib.R; -import candybar.lib.databases.Database; -import candybar.lib.fragments.IconsFragment; -import candybar.lib.helpers.TypefaceHelper; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconPreviewFragment extends DialogFragment { - - private String mIconTitle; - private String mDrawableName; - private int mIconId; - - private boolean prevIsBookmarked, currentIsBookmarked; - - private static final String TITLE = "title"; - private static final String DRAWABLE_NAME = "drawable_name"; - private static final String ID = "id"; - - private static final String TAG = "candybar.dialog.icon.preview"; - - private static IconPreviewFragment newInstance(String title, int id, String drawableName) { - IconPreviewFragment fragment = new IconPreviewFragment(); - Bundle bundle = new Bundle(); - bundle.putString(TITLE, title); - bundle.putString(DRAWABLE_NAME, drawableName); - bundle.putInt(ID, id); - fragment.setArguments(bundle); - return fragment; - } - - public static void showIconPreview(@NonNull FragmentManager fm, @NonNull String title, int id, @Nullable String drawableName) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = IconPreviewFragment.newInstance(title, id, drawableName); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) { - } - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - mIconTitle = requireArguments().getString(TITLE); - mDrawableName = requireArguments().getString(DRAWABLE_NAME); - mIconId = requireArguments().getInt(ID); - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_icon_preview, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .positiveText(R.string.close) - .build(); - - dialog.show(); - - if (savedInstanceState != null) { - mIconTitle = savedInstanceState.getString(TITLE); - mDrawableName = savedInstanceState.getString(DRAWABLE_NAME); - mIconId = savedInstanceState.getInt(ID); - } - - TextView name = (TextView) dialog.findViewById(R.id.name); - ImageView icon = (ImageView) dialog.findViewById(R.id.icon); - ImageView bookmark = (ImageView) dialog.findViewById(R.id.bookmark_button); - - name.setText(mIconTitle); - - Glide.with(this) - .load("drawable://" + mIconId) - .transition(DrawableTransitionOptions.withCrossFade(300)) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .into(icon); - - if (mDrawableName == null) { - bookmark.setVisibility(View.INVISIBLE); - } else { - AtomicBoolean isBookmarked = new AtomicBoolean(Database.get(requireActivity()).isIconBookmarked(mDrawableName)); - prevIsBookmarked = currentIsBookmarked = isBookmarked.get(); - - final Runnable updateBookmark = () -> { - @DrawableRes int drawableRes; - @AttrRes int colorAttr; - if (isBookmarked.get()) { - drawableRes = R.drawable.ic_bookmark_filled; - colorAttr = R.attr.colorSecondary; - } else { - drawableRes = R.drawable.ic_bookmark; - colorAttr = android.R.attr.textColorSecondary; - } - bookmark.setImageDrawable(DrawableHelper.getTintedDrawable(requireActivity(), - drawableRes, ColorHelper.getAttributeColor(requireActivity(), colorAttr))); - }; - - updateBookmark.run(); - - bookmark.setOnClickListener(view -> { - if (isBookmarked.get()) { - Database.get(requireActivity()).deleteBookmarkedIcon(mDrawableName); - } else { - Database.get(requireActivity()).addBookmarkedIcon(mDrawableName, mIconTitle); - } - isBookmarked.set(!isBookmarked.get()); - updateBookmark.run(); - currentIsBookmarked = isBookmarked.get(); - }); - } - - return dialog; - } - - @Override - public void onSaveInstanceState(Bundle outState) { - outState.putString(TITLE, mIconTitle); - outState.putInt(ID, mIconId); - super.onSaveInstanceState(outState); - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - super.onDismiss(dialog); - if (prevIsBookmarked != currentIsBookmarked) { - IconsFragment.reloadBookmarks(); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconShapeChooserFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconShapeChooserFragment.java deleted file mode 100644 index 6de4f57..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IconShapeChooserFragment.java +++ /dev/null @@ -1,112 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.widget.ListView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.IconShapeAdapter; -import candybar.lib.fragments.IconsFragment; -import candybar.lib.fragments.IconsSearchFragment; -import candybar.lib.helpers.IconShapeHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.IconShape; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconShapeChooserFragment extends DialogFragment { - - private int mShape; - - public static final String TAG = "candybar.dialog.iconshapes"; - - private static IconShapeChooserFragment newInstance() { - return new IconShapeChooserFragment(); - } - - public static void showIconShapeChooser(@NonNull FragmentManager fm) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = IconShapeChooserFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_languages, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .title(R.string.icon_shape) - .negativeText(R.string.close) - .build(); - dialog.show(); - - ListView listView = (ListView) dialog.findViewById(R.id.listview); - List iconShapes = IconShapeHelper.getShapes(); - int currentShape = mShape = Preferences.get(requireActivity()).getIconShape(); - int currentShapeIndex = 0; - - for (int i = 0; i < iconShapes.size(); i++) { - int shape = iconShapes.get(i).getShape(); - if (shape == currentShape) { - currentShapeIndex = i; - break; - } - } - - listView.setAdapter(new IconShapeAdapter(requireActivity(), iconShapes, currentShapeIndex)); - - return dialog; - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - int prevShape = Preferences.get(requireActivity()).getIconShape(); - if (prevShape != mShape) { - Preferences.get(requireActivity()).setIconShape(mShape); - IconsFragment.reloadIcons(); - IconsSearchFragment.reloadIcons(); - } - super.onDismiss(dialog); - } - - public void setShape(int shape) { - mShape = shape; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IntentChooserFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IntentChooserFragment.java deleted file mode 100644 index 734d8a4..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/IntentChooserFragment.java +++ /dev/null @@ -1,248 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.DialogInterface; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; -import android.view.View; -import android.widget.ListView; -import android.widget.TextView; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.DialogAction; -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.IntentAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.RequestFragment; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.IntentChooser; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IntentChooserFragment extends DialogFragment { - - private ListView mIntentList; - private TextView mNoApp; - - private int mType; - private IntentAdapter mAdapter; - private AsyncTaskBase mAsyncTask; - - public static final int ICON_REQUEST = 0; - public static final int REBUILD_ICON_REQUEST = 1; - - public static final String TAG = "candybar.dialog.intent.chooser"; - private static final String TYPE = "type"; - - private static IntentChooserFragment newInstance(int type) { - IntentChooserFragment fragment = new IntentChooserFragment(); - Bundle bundle = new Bundle(); - bundle.putInt(TYPE, type); - fragment.setArguments(bundle); - return fragment; - } - - public static void showIntentChooserDialog(@NonNull FragmentManager fm, int type) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = IntentChooserFragment.newInstance(type); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) { - } - } - - @Override - public void onCreate(@Nullable Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - if (getArguments() != null) { - mType = getArguments().getInt(TYPE); - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_intent_chooser, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .positiveText(android.R.string.cancel) - .build(); - - dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener(view -> { - if (mAdapter == null || mAdapter.isAsyncTaskRunning()) return; - - if (CandyBarApplication.sZipPath != null) { - File file = new File(CandyBarApplication.sZipPath); - if (file.exists()) { - if (file.delete()) { - LogUtil.e(String.format("Intent chooser cancel: %s deleted", file.getName())); - } - } - } - - RequestFragment.sSelectedRequests = null; - CandyBarApplication.sRequestProperty = null; - CandyBarApplication.sZipPath = null; - dialog.dismiss(); - }); - dialog.setCancelable(false); - dialog.setCanceledOnTouchOutside(false); - dialog.show(); - setCancelable(false); - - mIntentList = (ListView) dialog.findViewById(R.id.intent_list); - mNoApp = (TextView) dialog.findViewById(R.id.intent_noapp); - mAsyncTask = new IntentChooserLoader().execute(); - - return dialog; - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - if (mAsyncTask != null) { - mAsyncTask.cancel(true); - } - super.onDismiss(dialog); - } - - private class IntentChooserLoader extends AsyncTaskBase { - - private List apps; - - @Override - protected void preRun() { - apps = new ArrayList<>(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - - boolean nonMailingAppSend = getResources().getBoolean(R.bool.enable_non_mail_app_request); - Intent intent; - - if (!nonMailingAppSend) { - intent = new Intent(Intent.ACTION_SENDTO); - intent.setData(Uri.parse("mailto:")); - } else { - intent = new Intent(Intent.ACTION_SEND); - intent.setType("application/zip"); - } - - List resolveInfos = requireActivity().getPackageManager() - .queryIntentActivities(intent, 0); - try { - Collections.sort(resolveInfos, new ResolveInfo.DisplayNameComparator( - requireActivity().getPackageManager())); - } catch (Exception ignored) { - } - - for (ResolveInfo resolveInfo : resolveInfos) { - switch (resolveInfo.activityInfo.packageName) { - case "com.google.android.gm": - apps.add(new IntentChooser(resolveInfo, IntentChooser.TYPE_RECOMMENDED)); - break; - case "com.google.android.apps.inbox": - try { - ComponentName componentName = new ComponentName(resolveInfo.activityInfo.applicationInfo.packageName, - "com.google.android.apps.bigtop.activities.MainActivity"); - Intent inbox = new Intent(Intent.ACTION_SEND); - inbox.setComponent(componentName); - - List list = requireActivity().getPackageManager().queryIntentActivities( - inbox, PackageManager.MATCH_DEFAULT_ONLY); - if (list.size() > 0) { - apps.add(new IntentChooser(resolveInfo, IntentChooser.TYPE_SUPPORTED)); - break; - } - } catch (ActivityNotFoundException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - - apps.add(new IntentChooser(resolveInfo, IntentChooser.TYPE_NOT_SUPPORTED)); - break; - case "com.android.fallback": - case "com.paypal.android.p2pmobile": - case "com.lonelycatgames.Xplore": - break; - default: - apps.add(new IntentChooser(resolveInfo, IntentChooser.TYPE_SUPPORTED)); - break; - } - } - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - if (ok && apps != null) { - mAdapter = new IntentAdapter(getActivity(), apps, mType); - mIntentList.setAdapter(mAdapter); - - if (apps.size() == 0) { - mNoApp.setVisibility(View.VISIBLE); - setCancelable(true); - } - } else { - dismiss(); - Toast.makeText(getActivity(), R.string.intent_email_failed, - Toast.LENGTH_LONG).show(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/LanguagesFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/LanguagesFragment.java deleted file mode 100644 index 04eb22e..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/LanguagesFragment.java +++ /dev/null @@ -1,155 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.util.Log; -import android.widget.ListView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.LanguagesAdapter; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Language; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class LanguagesFragment extends DialogFragment { - - private ListView mListView; - private Locale mLocale; - private AsyncTaskBase mAsyncTask; - - public static final String TAG = "candybar.dialog.languages"; - - private static LanguagesFragment newInstance() { - return new LanguagesFragment(); - } - - public static void showLanguageChooser(@NonNull FragmentManager fm) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = LanguagesFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_languages, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .title(R.string.pref_language_header) - .negativeText(R.string.close) - .build(); - dialog.show(); - - mListView = (ListView) dialog.findViewById(R.id.listview); - mAsyncTask = new LanguagesLoader().executeOnThreadPool(); - - return dialog; - } - - @Override - public void onDestroy() { - if (mAsyncTask != null) { - mAsyncTask.cancel(true); - } - super.onDestroy(); - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - if (mLocale != null) { - Preferences.get(requireActivity()).setCurrentLocale(mLocale.toString()); - LocaleHelper.setLocale(requireActivity()); - requireActivity().recreate(); - } - super.onDismiss(dialog); - } - - public void setLanguage(@NonNull Locale locale) { - mLocale = locale; - dismiss(); - } - - private class LanguagesLoader extends AsyncTaskBase { - - private List languages; - private int index = 0; - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - languages = LocaleHelper.getAvailableLanguages(requireActivity()); - Locale locale = Preferences.get(requireActivity()).getCurrentLocale(); - for (int i = 0; i < languages.size(); i++) { - Locale l = languages.get(i).getLocale(); - if (l.toString().equals(locale.toString())) { - index = i; - break; - } - } - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (getActivity() == null) return; - if (getActivity().isFinishing()) return; - - mAsyncTask = null; - - if (ok) { - mListView.setAdapter(new LanguagesAdapter(getActivity(), languages, index)); - } else { - dismiss(); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/OtherAppsFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/OtherAppsFragment.java deleted file mode 100644 index 0528ff9..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/OtherAppsFragment.java +++ /dev/null @@ -1,83 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.os.Bundle; -import android.widget.ListView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; - -import java.util.List; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.OtherAppsAdapter; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.TypefaceHelper; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class OtherAppsFragment extends DialogFragment { - - private static final String TAG = "candybar.dialog.otherapps"; - - private static OtherAppsFragment newInstance() { - return new OtherAppsFragment(); - } - - public static void showOtherAppsDialog(@NonNull FragmentManager fm) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = OtherAppsFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalStateException | IllegalArgumentException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_other_apps, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .title(R.string.home_more_apps_header) - .positiveText(R.string.close) - .build(); - dialog.show(); - - ListView listView = (ListView) dialog.findViewById(R.id.listview); - List otherApps = CandyBarApplication.getConfiguration().getOtherApps(); - if (otherApps != null) { - listView.setAdapter(new OtherAppsAdapter(requireActivity(), otherApps)); - } else { - dismiss(); - } - - return dialog; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/ThemeChooserFragment.java b/libs/candybar/src/main/java/candybar/lib/fragments/dialog/ThemeChooserFragment.java deleted file mode 100644 index 964d83c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/fragments/dialog/ThemeChooserFragment.java +++ /dev/null @@ -1,99 +0,0 @@ -package candybar.lib.fragments.dialog; - -import android.app.Dialog; -import android.content.DialogInterface; -import android.os.Bundle; -import android.widget.ListView; - -import androidx.annotation.NonNull; -import androidx.fragment.app.DialogFragment; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; -import androidx.fragment.app.FragmentTransaction; - -import com.afollestad.materialdialogs.MaterialDialog; - -import java.util.Arrays; - -import candybar.lib.R; -import candybar.lib.adapters.dialog.ThemeAdapter; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.Theme; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ThemeChooserFragment extends DialogFragment { - - private Theme mChosenTheme; - private Theme mCurrentTheme; - - public static final String TAG = "candybar.dialog.theme"; - - private static ThemeChooserFragment newInstance() { - return new ThemeChooserFragment(); - } - - public static void showThemeChooser(@NonNull FragmentManager fm) { - FragmentTransaction ft = fm.beginTransaction(); - Fragment prev = fm.findFragmentByTag(TAG); - if (prev != null) { - ft.remove(prev); - } - - try { - DialogFragment dialog = ThemeChooserFragment.newInstance(); - dialog.show(ft, TAG); - } catch (IllegalArgumentException | IllegalStateException ignored) { - } - } - - @NonNull - @Override - public Dialog onCreateDialog(Bundle savedInstanceState) { - MaterialDialog dialog = new MaterialDialog.Builder(requireActivity()) - .customView(R.layout.fragment_languages, false) - .typeface(TypefaceHelper.getMedium(requireActivity()), TypefaceHelper.getRegular(requireActivity())) - .title(R.string.pref_theme_header) - .negativeText(R.string.close) - .build(); - dialog.show(); - - ListView listView = (ListView) dialog.findViewById(R.id.listview); - mChosenTheme = mCurrentTheme = Preferences.get(requireActivity()).getTheme(); - - listView.setAdapter(new ThemeAdapter(requireActivity(), Arrays.asList(Theme.values()), mCurrentTheme.ordinal())); - - return dialog; - } - - @Override - public void onDismiss(@NonNull DialogInterface dialog) { - if (mChosenTheme != mCurrentTheme) { - Preferences.get(requireActivity()).setTheme(mChosenTheme); - requireActivity().recreate(); - } - super.onDismiss(dialog); - } - - public void setTheme(Theme theme) { - mChosenTheme = theme; - dismiss(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/ConfigurationHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/ConfigurationHelper.java deleted file mode 100644 index ed7a46b..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/ConfigurationHelper.java +++ /dev/null @@ -1,59 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.graphics.drawable.Drawable; - -import androidx.annotation.NonNull; -import androidx.appcompat.graphics.drawable.DrawerArrowDrawable; - -import com.danimahardhika.android.helpers.core.ColorHelper; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; - -import static com.danimahardhika.android.helpers.core.DrawableHelper.get; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ConfigurationHelper { - - public static Drawable getNavigationIcon(@NonNull Context context, @NonNull CandyBarApplication.NavigationIcon navigationIcon) { - switch (navigationIcon) { - case DEFAULT: - return new DrawerArrowDrawable(context); - case STYLE_1: - return get(context, R.drawable.ic_toolbar_navigation); - case STYLE_2: - return get(context, R.drawable.ic_toolbar_navigation_2); - case STYLE_3: - return get(context, R.drawable.ic_toolbar_navigation_3); - case STYLE_4: - return get(context, R.drawable.ic_toolbar_navigation_4); - default: - return get(context, R.drawable.ic_toolbar_navigation); - } - } - - public static int getSocialIconColor(@NonNull Context context, @NonNull CandyBarApplication.IconColor iconColor) { - if (iconColor == CandyBarApplication.IconColor.ACCENT) { - return ColorHelper.getAttributeColor(context, R.attr.colorSecondary); - } - return ColorHelper.getAttributeColor(context, android.R.attr.textColorPrimary); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/ContextHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/ContextHelper.java deleted file mode 100644 index 5760d84..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/ContextHelper.java +++ /dev/null @@ -1,37 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.view.View; - -import androidx.annotation.NonNull; -import androidx.appcompat.view.ContextThemeWrapper; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -class ContextHelper { - - @NonNull - static Context getBaseContext(@NonNull View view) { - Context context = view.getContext(); - if (context instanceof ContextThemeWrapper) { - context = ((ContextThemeWrapper) view.getContext()).getBaseContext(); - } - return context; - } -} \ No newline at end of file diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/DeviceHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/DeviceHelper.java deleted file mode 100644 index 0c091e6..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/DeviceHelper.java +++ /dev/null @@ -1,72 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.content.pm.PackageManager; -import android.os.Build; -import android.util.DisplayMetrics; - -import androidx.annotation.NonNull; - -import candybar.lib.BuildConfig; -import candybar.lib.R; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class DeviceHelper { - - @NonNull - public static String getDeviceInfo(@NonNull Context context) { - DisplayMetrics displaymetrics = context.getResources().getDisplayMetrics(); - StringBuilder sb = new StringBuilder(); - final int height = displaymetrics.heightPixels; - final int width = displaymetrics.widthPixels; - PackageManager pm = context.getPackageManager(); - String installerPackage = pm.getInstallerPackageName(context.getPackageName()); - - String appVersion = ""; - try { - appVersion = context.getPackageManager().getPackageInfo( - context.getPackageName(), 0).versionName; - } catch (PackageManager.NameNotFoundException ignored) { - } - - if (installerPackage == null || !installerPackage.contentEquals("com.android.vending")) { - appVersion = context.getResources().getString(R.string.version_outside_playstore).replaceAll("\\{\\{appVersion\\}\\}", appVersion); - } else { - appVersion = context.getResources().getString(R.string.version_from_playstore).replaceAll("\\{\\{appVersion\\}\\}", appVersion); - } - - sb.append("Manufacturer : ").append(Build.MANUFACTURER) - .append("\r\nModel : ").append(Build.MODEL) - .append("\r\nProduct : ").append(Build.PRODUCT) - .append("\r\nScreen Resolution : ") - .append(width).append(" x ").append(height).append(" pixels") - .append("\r\nAndroid Version : ").append(Build.VERSION.RELEASE) - .append("\r\nApp Version : ").append(appVersion) - .append("\r\nCandyBar Version : ").append(BuildConfig.VERSION_NAME) - .append("\r\n"); - return sb.toString(); - } - - @NonNull - public static String getDeviceInfoForCrashReport(@NonNull Context context) { - return "Icon Pack Name : " + context.getResources().getString(R.string.app_name) - + "\r\n" + getDeviceInfo(context); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/DrawableHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/DrawableHelper.java deleted file mode 100644 index 019f71c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/DrawableHelper.java +++ /dev/null @@ -1,114 +0,0 @@ -package candybar.lib.helpers; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.ApplicationInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.content.res.Resources; -import android.graphics.Bitmap; -import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.util.DisplayMetrics; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; -import androidx.core.content.res.ResourcesCompat; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import candybar.lib.R; -import sarsamurmu.adaptiveicon.AdaptiveIcon; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class DrawableHelper { - - public static Drawable getAppIcon(@NonNull Context context, ResolveInfo info) { - try { - return info.activityInfo.loadIcon(context.getPackageManager()); - } catch (OutOfMemoryError | Exception e) { - return ContextCompat.getDrawable(context, R.drawable.ic_app_default); - } - } - - @Nullable - public static Drawable getReqIcon(@NonNull Context context, String componentNameStr) { - PackageManager packageManager = context.getPackageManager(); - - int slashIndex = componentNameStr.indexOf("/"); - String packageName = componentNameStr.substring(0, slashIndex); - String activityName = componentNameStr.substring(slashIndex + 1); - ComponentName componentName = new ComponentName(packageName, activityName); - - if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) { - // Load Adaptive icon if possible - Intent intent = new Intent(); - intent.setComponent(componentName); - ResolveInfo resolveInfo = packageManager.resolveActivity(intent, 0); - if (resolveInfo != null) { - Drawable adaptiveDrawable = resolveInfo.loadIcon(packageManager); - if (adaptiveDrawable instanceof AdaptiveIconDrawable) return adaptiveDrawable; - } - } - - // Fallback to legacy icon if AdaptiveIcon is not found - try { - ApplicationInfo appInfo = packageManager.getApplicationInfo(packageName, PackageManager.GET_META_DATA); - Resources appResources = packageManager.getResourcesForApplication(appInfo); - - int density = DisplayMetrics.DENSITY_XHIGH; - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { - density = DisplayMetrics.DENSITY_XXHIGH; - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { - density = DisplayMetrics.DENSITY_XXXHIGH; - } - Drawable drawable = ResourcesCompat.getDrawableForDensity(appResources, appInfo.icon, - density, null); - - if (drawable != null) return drawable; - LogUtil.e("DrawableHelper - drawable is null"); - } catch (Exception | OutOfMemoryError e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return null; - } - - public static Bitmap getRightIcon(Drawable drawable) { - if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.O) { - return ((BitmapDrawable) drawable).getBitmap(); - } else { - if (drawable instanceof BitmapDrawable) { - return ((BitmapDrawable) drawable).getBitmap(); - } else if (drawable instanceof AdaptiveIconDrawable) { - return new AdaptiveIcon() - .setDrawable((AdaptiveIconDrawable) drawable) - .render(); - } - } - return null; - } -} - diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/IconShapeHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/IconShapeHelper.java deleted file mode 100644 index f1c419a..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/IconShapeHelper.java +++ /dev/null @@ -1,20 +0,0 @@ -package candybar.lib.helpers; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.items.IconShape; -import sarsamurmu.adaptiveicon.AdaptiveIcon; - -public class IconShapeHelper { - public static List getShapes() { - List shapes = new ArrayList<>(); - shapes.add(new IconShape("System default", -1)); - shapes.add(new IconShape("Circle", AdaptiveIcon.PATH_CIRCLE)); - shapes.add(new IconShape("Square", AdaptiveIcon.PATH_SQUARE)); - shapes.add(new IconShape("Rounded Square", AdaptiveIcon.PATH_ROUNDED_SQUARE)); - shapes.add(new IconShape("Squircle", AdaptiveIcon.PATH_SQUIRCLE)); - shapes.add(new IconShape("Teardrop", AdaptiveIcon.PATH_TEARDROP)); - return shapes; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/IconsHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/IconsHelper.java deleted file mode 100644 index 9faf814..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/IconsHelper.java +++ /dev/null @@ -1,285 +0,0 @@ -package candybar.lib.helpers; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.res.XmlResourceParser; -import android.graphics.Bitmap; -import android.graphics.drawable.Drawable; -import android.net.Uri; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.bumptech.glide.load.engine.GlideException; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import org.xmlpull.v1.XmlPullParser; - -import java.io.File; -import java.io.FileOutputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.fragments.dialog.IconPreviewFragment; -import candybar.lib.items.Icon; - -import static candybar.lib.helpers.DrawableHelper.getRightIcon; -import static com.danimahardhika.android.helpers.core.DrawableHelper.getResourceId; -import static com.danimahardhika.android.helpers.core.FileHelper.getUriFromFile; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconsHelper { - - @NonNull - public static List getIconsList(@NonNull Context context) throws Exception { - XmlResourceParser parser = context.getResources().getXml(R.xml.drawable); - int eventType = parser.getEventType(); - String sectionTitle = ""; - List icons = new ArrayList<>(); - List sections = new ArrayList<>(); - - int count = 0; - while (eventType != XmlPullParser.END_DOCUMENT) { - if (eventType == XmlPullParser.START_TAG) { - if (parser.getName().equals("category")) { - String title = parser.getAttributeValue(null, "title"); - if (!sectionTitle.equals(title)) { - if (sectionTitle.length() > 0 && icons.size() > 0) { - count += icons.size(); - sections.add(new Icon(sectionTitle, icons)); - } - } - sectionTitle = title; - icons = new ArrayList<>(); - } else if (parser.getName().equals("item")) { - String drawableName = parser.getAttributeValue(null, "drawable"); - String customName = parser.getAttributeValue(null, "name"); - int id = getResourceId(context, drawableName); - if (id > 0) { - icons.add(new Icon(drawableName, customName, id)); - } - } - } - - eventType = parser.next(); - } - count += icons.size(); - CandyBarMainActivity.sIconsCount = count; - if (!CandyBarApplication.getConfiguration().isAutomaticIconsCountEnabled() && - CandyBarApplication.getConfiguration().getCustomIconsCount() == 0) { - CandyBarApplication.getConfiguration().setCustomIconsCount(count); - } - if (icons.size() > 0) { - sections.add(new Icon(sectionTitle, icons)); - } - parser.close(); - return sections; - } - - public static List getTabAllIcons() { - List icons = new ArrayList<>(); - String[] categories = CandyBarApplication.getConfiguration().getCategoryForTabAllIcons(); - - if (categories != null && categories.length > 0) { - for (String category : categories) { - for (Icon section : CandyBarMainActivity.sSections) { - if (section.getTitle().equals(category)) { - icons.addAll(section.getIcons()); - break; - } - } - } - } else { - for (Icon section : CandyBarMainActivity.sSections) { - icons.addAll(section.getIcons()); - } - } - - Collections.sort(icons, Icon.TitleComparator); - return icons; - } - - public static void computeTitles(@NonNull Context context, List icons) { - final boolean iconReplacer = context.getResources().getBoolean(R.bool.enable_icon_name_replacer); - for (Icon icon : icons) { - if (icon.getTitle() != null) { - // Title is already computed, so continue - continue; - } - if (icon.getCustomName() != null && !icon.getCustomName().equals("")) { - icon.setTitle(icon.getCustomName()); - } else { - icon.setTitle(replaceName(context, iconReplacer, icon.getDrawableName())); - } - } - } - - public static String replaceName(@NonNull Context context, boolean iconReplacer, String name) { - if (iconReplacer) { - String[] replacer = context.getResources().getStringArray(R.array.icon_name_replacer); - for (String replace : replacer) { - String[] strings = replace.split(","); - if (strings.length > 0) - name = name.replace(strings[0], strings.length > 1 ? strings[1] : ""); - } - } - name = name.replaceAll("_", " "); - name = name.trim().replaceAll("\\s+", " "); - return capitalizeWord(name); - } - - public static String capitalizeWord(String str) { - String[] words = str.split("\\s"); - StringBuilder capitalizeWord = new StringBuilder(); - for (String w : words) { - String first = w.substring(0, 1); - String afterfirst = w.substring(1); - capitalizeWord.append(first.toUpperCase()).append(afterfirst).append(" "); - } - return capitalizeWord.toString().trim(); - } - - public static void selectIcon(@NonNull Context context, int action, Icon icon) { - if (action == IntentHelper.ICON_PICKER) { - Glide.with(context) - .asBitmap() - .load("drawable://" + icon.getRes()) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .listener(new RequestListener() { - public void handleResult(Bitmap resource) { - Intent intent = new Intent(); - intent.putExtra("icon", resource); - ((AppCompatActivity) context).setResult(resource != null ? - Activity.RESULT_OK : Activity.RESULT_CANCELED, intent); - ((AppCompatActivity) context).finish(); - } - - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - handleResult(null); - return true; - } - - @Override - public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - handleResult(resource); - return true; - } - }) - .submit(); - } else if (action == IntentHelper.IMAGE_PICKER) { - - Glide.with(context) - .asBitmap() - .load("drawable://" + icon.getRes()) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.NONE) - .listener(new RequestListener() { - private void handleResult(Bitmap bitmap) { - Intent intent = new Intent(); - if (bitmap != null) { - File file = new File(context.getCacheDir(), icon.getTitle() + ".png"); - FileOutputStream outStream; - try { - outStream = new FileOutputStream(file); - bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); - outStream.flush(); - outStream.close(); - - Uri uri = getUriFromFile(context, context.getPackageName(), file); - if (uri == null) uri = Uri.fromFile(file); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.setData(uri); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - } catch (Exception | OutOfMemoryError e) { - LogUtil.e(Log.getStackTraceString(e)); - } - intent.putExtra("return-data", false); - } - ((AppCompatActivity) context).setResult(bitmap != null ? - Activity.RESULT_OK : Activity.RESULT_CANCELED, intent); - ((AppCompatActivity) context).finish(); - } - - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - handleResult(null); - return false; - } - - @Override - public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - handleResult(resource); - return true; - } - }) - .submit(); - } else { - if (!context.getResources().getBoolean(R.bool.show_icon_name)) { - // It means the title of icon is not yet computed, so compute it - IconsHelper.computeTitles(context, Collections.singletonList(icon)); - } - - IconPreviewFragment.showIconPreview(((AppCompatActivity) context) - .getSupportFragmentManager(), - icon.getTitle(), icon.getRes(), icon.getDrawableName()); - } - } - - @Nullable - public static String saveIcon(List files, File directory, Drawable drawable, String name) { - String fileName = name + ".png"; - File file = new File(directory, fileName); - try { - Thread.sleep(2); - Bitmap bitmap = getRightIcon(drawable); - - if (files.contains(file.toString())) { - fileName = fileName.replace(".png", "_" + System.currentTimeMillis() + ".png"); - file = new File(directory, fileName); - - LogUtil.e("Duplicate File name, Renamed: " + fileName); - } - - FileOutputStream outStream = new FileOutputStream(file); - assert bitmap != null; - bitmap.compress(Bitmap.CompressFormat.PNG, 100, outStream); - outStream.flush(); - outStream.close(); - return directory.toString() + "/" + fileName; - } catch (Exception | OutOfMemoryError e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return null; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/IntentHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/IntentHelper.java deleted file mode 100644 index 91fe6b9..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/IntentHelper.java +++ /dev/null @@ -1,65 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Intent; - -import androidx.annotation.Nullable; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IntentHelper { - - public static final int ACTION_DEFAULT = 0; - public static final int ICON_PICKER = 1; - public static final int IMAGE_PICKER = 2; - public static final int WALLPAPER_PICKER = 3; - - public static int sAction = ACTION_DEFAULT; - - private static final String ACTION_ADW_PICK_ICON = "org.adw.launcher.icons.ACTION_PICK_ICON"; - private static final String ACTION_TURBO_PICK_ICON = "com.phonemetra.turbo.launcher.icons.ACTION_PICK_ICON"; - private static final String ACTION_LAWNCHAIR_ICONPACK = "ch.deletescape.lawnchair.ICONPACK"; - private static final String ACTION_NOVA_LAUNCHER = "com.novalauncher.THEME"; - private static final String ACTION_ONEPLUS_PICK_ICON = "net.oneplus.launcher.icons.ACTION_PICK_ICON"; - private static final String ACTION_PLUS_HOME = "jp.co.a_tm.android.launcher.icons.ACTION_PICK_ICON"; - - public static int getAction(@Nullable Intent intent) { - if (intent == null) return ACTION_DEFAULT; - String action = intent.getAction(); - if (action != null) { - switch (action) { - case ACTION_ADW_PICK_ICON: - case ACTION_TURBO_PICK_ICON: - case ACTION_LAWNCHAIR_ICONPACK: - case ACTION_NOVA_LAUNCHER: - case ACTION_ONEPLUS_PICK_ICON: - case ACTION_PLUS_HOME: - return ICON_PICKER; - case Intent.ACTION_PICK: - case Intent.ACTION_GET_CONTENT: - return IMAGE_PICKER; - case Intent.ACTION_SET_WALLPAPER: - return WALLPAPER_PICKER; - default: - return ACTION_DEFAULT; - } - } - - return ACTION_DEFAULT; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/JsonHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/JsonHelper.java deleted file mode 100644 index aa11894..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/JsonHelper.java +++ /dev/null @@ -1,97 +0,0 @@ -package candybar.lib.helpers; - -import android.annotation.SuppressLint; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.bluelinelabs.logansquare.LoganSquare; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.IOException; -import java.io.InputStream; -import java.util.List; -import java.util.Map; - -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.items.Wallpaper; -import candybar.lib.utils.JsonStructure; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class JsonHelper { - - @SuppressLint("Raw") - @Nullable - public static List parseList(@NonNull InputStream stream) { - List list = null; - JsonStructure jsonStructure = CandyBarApplication.getConfiguration().getWallpaperJsonStructure(); - - try { - if (jsonStructure.getArrayName() == null) { - list = LoganSquare.parseList(stream, Map.class); - } else { - Map map = LoganSquare.parseMap(stream, List.class); - list = map.get(jsonStructure.getArrayName()); - } - } catch (IOException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return list; - } - - @Nullable - public static Wallpaper getWallpaper(@NonNull Object object) { - if (object instanceof Map) { - JsonStructure jsonStructure = CandyBarApplication.getConfiguration().getWallpaperJsonStructure(); - Map map = (Map) object; - return Wallpaper.Builder() - .name((String) map.get(jsonStructure.getName())) - .author(getAuthor(map)) - .url((String) map.get(jsonStructure.getUrl())) - .thumbUrl(getThumbUrl(map)) - .build(); - } - return null; - } - - public static String getThumbUrl(@NonNull Map map) { - JsonStructure jsonStructure = CandyBarApplication.getConfiguration().getWallpaperJsonStructure(); - String url = (String) map.get(jsonStructure.getUrl()); - if (jsonStructure.getThumbUrl() == null) return url; - String[] thumbUrlSelectors = {"thumb", "thumbnail", "thumbUrl", "url-thumb", "urlThumb"}; - - String thumbUrl = (String) map.get(jsonStructure.getThumbUrl()); - for (String selector : thumbUrlSelectors) { - if (thumbUrl == null) thumbUrl = (String) map.get(selector); - } - if (thumbUrl == null) return url; - return thumbUrl; - } - - private static String getAuthor(@NonNull Map map) { - JsonStructure jsonStructure = CandyBarApplication.getConfiguration().getWallpaperJsonStructure(); - String defaultAuthorName = ""; - - String authorName = (String) map.get(jsonStructure.getAuthor()); - if (authorName == null) return defaultAuthorName; - return authorName; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/LauncherHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/LauncherHelper.java deleted file mode 100644 index cf40827..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/LauncherHelper.java +++ /dev/null @@ -1,620 +0,0 @@ -package candybar.lib.helpers; - -import android.annotation.SuppressLint; -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.net.Uri; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.appcompat.app.AppCompatActivity; - -import com.afollestad.materialdialogs.MaterialDialog; - -import candybar.lib.R; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class LauncherHelper { - - private static final String thirdPartyHelperURL = "https://play.google.com/store/apps/details?id=rk.android.app.shortcutmaker"; - - private enum Launcher { - UNKNOWN, ACTION, ADW, APEX, ATOM, AVIATE, CMTHEME, GO, HOLO, HOLOHD, LAWNCHAIR, - LGHOME, LGHOME3, LUCID, MINI, NEXT, NOVA, PIXEL, SMART, SOLO, ZENUI, NOUGAT, M, - ZERO, V, ABC, EVIE, POCO, POSIDON, MICROSOFT, FLICK, BLACKBERRY, SQUARE, NIAGARA, - HYPERION, OMEGA - } - - private static Launcher getLauncher(String packageName) { - if (packageName == null) return Launcher.UNKNOWN; - switch (packageName) { - case "com.actionlauncher.playstore": - case "com.chrislacy.actionlauncher.pro": - return Launcher.ACTION; - case "org.adw.launcher": - case "org.adwfreak.launcher": - return Launcher.ADW; - case "com.anddoes.launcher": - case "com.anddoes.launcher.pro": - return Launcher.APEX; - case "com.dlto.atom.launcher": - return Launcher.ATOM; - case "com.tul.aviate": - return Launcher.AVIATE; - case "org.cyanogenmod.theme.chooser": - return Launcher.CMTHEME; - case "com.gau.go.launcherex": - return Launcher.GO; - case "com.mobint.hololauncher": - return Launcher.HOLO; - case "com.mobint.hololauncher.hd": - return Launcher.HOLOHD; - case "com.lge.launcher2": - return Launcher.LGHOME; - case "com.lge.launcher3": - return Launcher.LGHOME3; - case "ch.deletescape.lawnchair.ci": - case "ch.deletescape.lawnchair.plah": - return Launcher.LAWNCHAIR; - case "com.powerpoint45.launcher": - return Launcher.LUCID; - case "com.jiubang.go.mini.launcher": - return Launcher.MINI; - case "bitpit.launcher": - return Launcher.NIAGARA; - case "com.gtp.nextlauncher": - case "com.gtp.nextlauncher.trial": - return Launcher.NEXT; - case "com.teslacoilsw.launcher": - case "com.teslacoilsw.launcher.prime": - return Launcher.NOVA; - case "com.google.android.apps.nexuslauncher": - return Launcher.PIXEL; - case "ginlemon.flowerfree": - case "ginlemon.flowerpro": - case "ginlemon.flowerpro.special": - return Launcher.SMART; - case "home.solo.launcher.free": - return Launcher.SOLO; - case "com.ss.squarehome2": - return Launcher.SQUARE; - case "com.asus.launcher": - return Launcher.ZENUI; - case "me.craftsapp.nlauncher": - return Launcher.NOUGAT; - case "com.uprui.launcher.marshmallow": - return Launcher.M; - case "com.zeroteam.zerolauncher": - return Launcher.ZERO; - case "com.vivid.launcher": - return Launcher.V; - case "com.abclauncher.launcher": - return Launcher.ABC; - case "is.shortcut": - return Launcher.EVIE; - case "com.mi.android.globallauncher": - return Launcher.POCO; - case "posidon.launcher": - return Launcher.POSIDON; - case "com.microsoft.launcher": - return Launcher.MICROSOFT; - case "com.universallauncher.universallauncher": - return Launcher.FLICK; - case "com.blackberry.blackberrylauncher": - return Launcher.BLACKBERRY; - case "projekt.launcher": - return Launcher.HYPERION; - case "com.saggitt.omega": - case "com.saggitt.omega.OmegaLauncher": - return Launcher.OMEGA; - default: - return Launcher.UNKNOWN; - } - } - - public static void apply(@NonNull Context context, String packageName, String launcherName) { - applyLauncher(context, packageName, launcherName, getLauncher(packageName)); - } - - private static void applyLauncher(@NonNull Context context, String launcherPackage, String launcherName, Launcher launcher) { - switch (launcher) { - case ABC: - try { - /* - * Just want to let anyone who is going to copy - * It's not easy searching for this - * I will be grateful if you take this with a proper credit - * Thank you - */ - final Intent abc = context.getPackageManager().getLaunchIntentForPackage( - "com.abclauncher.launcher"); - final Intent abc1 = new Intent("com.abclauncher.launcher.themes.themeaction"); - abc1.putExtra("theme_package_name", context.getPackageName()); - abc.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(abc1); - context.startActivity(abc); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case ACTION: - try { - final Intent action = context.getPackageManager().getLaunchIntentForPackage( - launcherPackage); - action.putExtra("apply_icon_pack", context.getPackageName()); - action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(action); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case ADW: - try { - final Intent adw = new Intent("org.adw.launcher.SET_THEME"); - adw.putExtra("org.adw.launcher.theme.NAME", context.getPackageName()); - adw.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(adw); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case APEX: - try { - final Intent apex = new Intent("com.anddoes.launcher.SET_THEME"); - apex.putExtra("com.anddoes.launcher.THEME_PACKAGE_NAME", context.getPackageName()); - apex.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(apex); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case ATOM: - try { - final Intent atom = new Intent("com.dlto.atom.launcher.intent.action.ACTION_VIEW_THEME_SETTINGS"); - atom.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - atom.putExtra("packageName", context.getPackageName()); - context.startActivity(atom); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case AVIATE: - try { - final Intent aviate = new Intent("com.tul.aviate.SET_THEME"); - aviate.putExtra("THEME_PACKAGE", context.getPackageName()); - aviate.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(aviate); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case BLACKBERRY: - applyManual(context, launcherPackage, launcherName, "com.blackberry.blackberrylauncher.MainActivity"); - break; - case CMTHEME: - try { - final Intent cmtheme = new Intent("android.intent.action.MAIN"); - cmtheme.setComponent(new ComponentName(launcherPackage, - "org.cyanogenmod.theme.chooser.ChooserActivity")); - cmtheme.putExtra("pkgName", context.getPackageName()); - context.startActivity(cmtheme); - } catch (ActivityNotFoundException | NullPointerException e) { - Toast.makeText(context, R.string.apply_cmtheme_not_available, - Toast.LENGTH_LONG).show(); - } catch (SecurityException | IllegalArgumentException e) { - Toast.makeText(context, R.string.apply_cmtheme_failed, - Toast.LENGTH_LONG).show(); - } - break; - case EVIE: - applyEvie(context, launcherPackage, launcherName); - break; - case FLICK: - try { - final Intent flick = context.getPackageManager().getLaunchIntentForPackage("com.universallauncher.universallauncher"); - final Intent flickAction = new Intent("com.universallauncher.universallauncher.FLICK_ICON_PACK_APPLIER"); - flickAction.putExtra("com.universallauncher.universallauncher.ICON_THEME_PACKAGE", context.getPackageName()); - flickAction.setComponent(new ComponentName("com.universallauncher.universallauncher", "com.android.launcher3.icon.ApplyIconPack")); - flick.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(flickAction); - context.startActivity(flick); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case GO: - try { - final Intent goex = context.getPackageManager().getLaunchIntentForPackage( - "com.gau.go.launcherex"); - final Intent go = new Intent("com.gau.go.launcherex.MyThemes.mythemeaction"); - go.putExtra("type", 1); - go.putExtra("pkgname", context.getPackageName()); - goex.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(go); - context.startActivity(goex); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case HOLO: - case HOLOHD: - applyManual(context, launcherPackage, launcherName, "com.mobint.hololauncher.SettingsActivity"); - break; - case HYPERION: - applyManual(context, launcherPackage, launcherName, "projekt.launcher.activities.SettingsActivity"); - break; - case LAWNCHAIR: - try { - final Intent lawnchair = new Intent("ch.deletescape.lawnchair.APPLY_ICONS", null); - lawnchair.putExtra("packageName", context.getPackageName()); - context.startActivity(lawnchair); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case LGHOME: - case LGHOME3: - launcherIncompatible(context, launcherName); - break; - case LUCID: - try { - final Intent lucid = new Intent("com.powerpoint45.action.APPLY_THEME", null); - lucid.putExtra("icontheme", context.getPackageName()); - context.startActivity(lucid); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case MICROSOFT: - applyManual(context, launcherPackage, launcherName, null); - break; - case MINI: - applyManual(context, launcherPackage, launcherName, - "com.jiubang.go.mini.launcher.setting.MiniLauncherSettingActivity"); - break; - case NIAGARA: - try { - final Intent niagara = new Intent("bitpit.launcher.APPLY_ICONS"); - niagara.putExtra("packageName", context.getPackageName()); - context.startActivity(niagara); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case NEXT: - try { - Intent next = context.getPackageManager().getLaunchIntentForPackage("com.gtp.nextlauncher"); - if (next == null) { - next = context.getPackageManager().getLaunchIntentForPackage("com.gtp.nextlauncher.trial"); - } - final Intent next2 = new Intent("com.gau.go.launcherex.MyThemes.mythemeaction"); - next2.putExtra("type", 1); - next2.putExtra("pkgname", context.getPackageName()); - next.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(next2); - context.startActivity(next); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case NOVA: - try { - final Intent nova = new Intent("com.teslacoilsw.launcher.APPLY_ICON_THEME"); - nova.setPackage("com.teslacoilsw.launcher"); - nova.putExtra("com.teslacoilsw.launcher.extra.ICON_THEME_TYPE", "GO"); - nova.putExtra("com.teslacoilsw.launcher.extra.ICON_THEME_PACKAGE", context.getPackageName()); - nova.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(nova); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case PIXEL: - launcherIncompatible(context, launcherName); - break; - case POCO: - applyManual(context, launcherPackage, launcherName, "com.miui.home.settings.HomeSettingsActivity"); - break; - case POSIDON: - try { - Intent posidon = new Intent(Intent.ACTION_MAIN); - posidon.setComponent(new ComponentName("posidon.launcher", "posidon.launcher.external.ApplyIcons")); - posidon.putExtra("iconpack", context.getPackageName()); - posidon.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(posidon); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case SMART: - try { - final Intent smart = new Intent("ginlemon.smartlauncher.setGSLTHEME"); - smart.putExtra("package", context.getPackageName()); - smart.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(smart); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case SOLO: - try { - final Intent solo = context.getPackageManager().getLaunchIntentForPackage( - "home.solo.launcher.free"); - final Intent soloAction = new Intent("home.solo.launcher.free.APPLY_THEME"); - soloAction.putExtra("EXTRA_THEMENAME", context.getResources().getString( - R.string.app_name)); - soloAction.putExtra("EXTRA_PACKAGENAME", context.getPackageName()); - solo.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(soloAction); - context.startActivity(solo); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case SQUARE: - try { - final Intent square = new Intent("com.ss.squarehome2.ACTION_APPLY_ICONPACK"); - square.setComponent(ComponentName.unflattenFromString("com.ss.squarehome2/.ApplyThemeActivity")); - square.putExtra("com.ss.squarehome2.EXTRA_ICONPACK", context.getPackageName()); - context.startActivity(square); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case OMEGA: - try { - final Intent omega = new Intent("com.saggitt.omega.APPLY_ICONS", null); - omega.putExtra("packageName", context.getPackageName()); - context.startActivity(omega); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case NOUGAT: - try { - /* - * Just want to let anyone who is going to copy - * It's not easy searching for this - * I will be grateful if you take this with a proper credit - * Thank you - */ - final Intent nougat = new Intent("me.craftsapp.nlauncher"); - nougat.setAction("me.craftsapp.nlauncher.SET_THEME"); - nougat.putExtra("me.craftsapp.nlauncher.theme.NAME", context.getPackageName()); - nougat.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(nougat); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case M: - try { - /* - * Just want to let anyone who is going to copy - * It's not easy searching for this - * I will be grateful if you take this with a proper credit - * Thank you - */ - final Intent m = new Intent("com.uprui.launcher.marshmallow"); - m.setAction("com.uprui.launcher.marshmallow.SET_THEME"); - m.putExtra("com.uprui.launcher.marshmallow.theme.NAME", context.getPackageName()); - m.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(m); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case ZENUI: - try { - final Intent asus = new Intent("com.asus.launcher"); - asus.setAction("com.asus.launcher.intent.action.APPLY_ICONPACK"); - asus.addCategory(Intent.CATEGORY_DEFAULT); - asus.putExtra("com.asus.launcher.iconpack.PACKAGE_NAME", context.getPackageName()); - asus.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(asus); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case ZERO: - try { - /* - * Just want to let anyone who is going to copy - * It's not easy searching for this - * I will be grateful if you take this with a proper credit - * Thank you - */ - final Intent zero = context.getPackageManager().getLaunchIntentForPackage( - "com.zeroteam.zerolauncher"); - final Intent zero1 = new Intent("com.zeroteam.zerolauncher.MyThemes.mythemeaction"); - zero1.putExtra("type", 1); - zero1.putExtra("pkgname", context.getPackageName()); - zero.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(zero1); - context.startActivity(zero); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - case V: - try { - /* - * Just want to let anyone who is going to copy - * It's not easy searching for this - * I will be grateful if you take this with a proper credit - * Thank you - */ - final Intent v = context.getPackageManager().getLaunchIntentForPackage( - "com.vivid.launcher"); - final Intent v1 = new Intent("com.vivid.launcher.MyThemes.mythemeaction"); - v1.putExtra("type", 1); - v1.putExtra("pkgname", context.getPackageName()); - v.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.sendBroadcast(v1); - context.startActivity(v); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - break; - } - } - - @SuppressLint("StringFormatInvalid") - private static void applyManual(Context context, String launcherPackage, String launcherName, String activity) { - if (isInstalled(context, launcherPackage)) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(launcherName) - .content(context.getResources().getString(R.string.apply_manual, - launcherName, - context.getResources().getString(R.string.app_name))) - .positiveText(android.R.string.ok) - .onPositive((dialog, which) -> { - if (activity == null) return; - try { - final Intent intent = new Intent(Intent.ACTION_MAIN); - intent.setComponent(new ComponentName(launcherPackage, - activity)); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } catch (SecurityException | IllegalArgumentException e) { - Toast.makeText(context, context.getResources().getString( - R.string.apply_launch_failed, launcherName), - Toast.LENGTH_LONG).show(); - } - }) - .negativeText(android.R.string.cancel) - .show(); - } else { - openGooglePlay(context, launcherPackage, launcherName); - } - } - - private static boolean isInstalled(Context context, String packageName) { - PackageManager packageManager = context.getPackageManager(); - boolean found = true; - try { - packageManager.getPackageInfo(packageName, 0); - } catch (PackageManager.NameNotFoundException e) { - found = false; - } - return found; - } - - @SuppressLint("StringFormatInvalid") - private static void applyEvie(Context context, String launcherPackage, String launcherName) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(launcherName) - .content(context.getResources().getString(R.string.apply_manual, - launcherName, - context.getResources().getString(R.string.app_name)) + "\n\n" + - context.getResources().getString(R.string.apply_manual_evie, - context.getResources().getString(R.string.app_name))) - .positiveText(android.R.string.ok) - .onPositive((dialog, which) -> { - try { - final Intent intent = context.getPackageManager().getLaunchIntentForPackage(launcherPackage); - intent.setFlags(Intent.FLAG_ACTIVITY_NO_HISTORY); - context.startActivity(intent); - ((AppCompatActivity) context).finish(); - } catch (ActivityNotFoundException | NullPointerException e) { - openGooglePlay(context, launcherPackage, launcherName); - } - }) - .negativeText(android.R.string.cancel) - .show(); - } - - private static void launcherIncompatible(Context context, String launcherName) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(launcherName) - .content(R.string.apply_launcher_incompatible, launcherName, launcherName) - .positiveText(android.R.string.yes) - .onPositive((dialog, which) -> { - try { - Intent store = new Intent(Intent.ACTION_VIEW, Uri.parse(thirdPartyHelperURL)); - context.startActivity(store); - } catch (ActivityNotFoundException e) { - Toast.makeText(context, context.getResources().getString( - R.string.no_browser), Toast.LENGTH_LONG).show(); - } - }) - .negativeText(android.R.string.cancel) - .show(); - } - - private static void notInstalledError(Context context, String launcherName) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(launcherName) - .content(R.string.apply_launcher_not_installable, launcherName) - .positiveText(context.getResources().getString(R.string.close)) - .show(); - } - - private static void openGooglePlay(Context context, String packageName, String launcherName) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(launcherName) - .content(R.string.apply_launcher_not_installed, launcherName) - .positiveText(context.getResources().getString(R.string.install)) - .onPositive((dialog, which) -> { - try { - Intent store = new Intent(Intent.ACTION_VIEW, Uri.parse( - "https://play.google.com/store/apps/details?id=" + packageName)); - context.startActivity(store); - } catch (ActivityNotFoundException e) { - Toast.makeText(context, context.getResources().getString( - R.string.no_browser), Toast.LENGTH_LONG).show(); - } - }) - .negativeText(android.R.string.cancel) - .show(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/LocaleHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/LocaleHelper.java deleted file mode 100644 index 600d7e6..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/LocaleHelper.java +++ /dev/null @@ -1,123 +0,0 @@ -package candybar.lib.helpers; - -import android.content.ComponentName; -import android.content.Context; -import android.content.pm.ActivityInfo; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.content.res.Resources; -import android.os.Build; -import android.os.LocaleList; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.items.Language; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class LocaleHelper { - - public static void setLocale(@NonNull Context context) { - Locale locale = Preferences.get(context).getCurrentLocale(); - Locale.setDefault(locale); - - Configuration configuration = context.getResources().getConfiguration(); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - LocaleList.setDefault(new LocaleList(locale)); - configuration.setLocales(new LocaleList(locale)); - } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - configuration.setLocale(locale); - } else { - configuration.locale = locale; - } - - //Todo: - // Find out a solution to use context.createConfigurationContext(configuration); - // It breaks onConfigurationChanged() - // Still can't find a way to fix that - // No other options, better use deprecated code for now - context.getResources().updateConfiguration(configuration, context.getResources().getDisplayMetrics()); - } - - public static List getAvailableLanguages(@NonNull Context context) { - List languages = new ArrayList<>(); - String[] names = context.getResources().getStringArray(R.array.languages_name); - String[] codes = context.getResources().getStringArray(R.array.languages_code); - - for (int i = 0; i < names.length; i++) { - Language language = new Language(names[i], getLocale(codes[i])); - languages.add(language); - } - return languages; - } - - public static Language getCurrentLanguage(@NonNull Context context) { - List languages = getAvailableLanguages(context); - Locale locale = Preferences.get(context).getCurrentLocale(); - - for (Language language : languages) { - Locale l = language.getLocale(); - if (locale.toString().equals(l.toString())) { - return language; - } - } - return new Language("English", new Locale("en", "US")); - } - - public static Locale getLocale(String language) { - String[] codes = language.split("_"); - if (codes.length == 2) { - return new Locale(codes[0], codes[1]); - } - return Locale.getDefault(); - } - - @Nullable - public static String getOtherAppLocaleName(@NonNull Context context, @NonNull Locale locale, @NonNull String componentNameStr) { - try { - int slashIndex = componentNameStr.indexOf("/"); - String packageName = componentNameStr.substring(0, slashIndex); - String activityName = componentNameStr.substring(slashIndex + 1); - ComponentName componentName = new ComponentName(packageName, activityName); - - PackageManager packageManager = context.getPackageManager(); - ActivityInfo info = packageManager.getActivityInfo(componentName, PackageManager.GET_META_DATA); - - Resources res = packageManager.getResourcesForActivity(componentName); - Configuration configuration = new Configuration(); - - configuration.locale = locale; - res.updateConfiguration(configuration, context.getResources().getDisplayMetrics()); - return info.loadLabel(packageManager).toString(); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return null; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/MuzeiHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/MuzeiHelper.java deleted file mode 100644 index d15e25f..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/MuzeiHelper.java +++ /dev/null @@ -1,86 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.BufferedInputStream; -import java.io.InputStream; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.List; -import java.util.Random; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.items.Wallpaper; -import candybar.lib.utils.JsonStructure; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class MuzeiHelper { - - @Nullable - public static Wallpaper getRandomWallpaper(@NonNull Context context) throws Exception { - if (Database.get(context).getWallpapersCount() == 0) { - URL url = new URL(context.getString(R.string.wallpaper_json)); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); - - if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { - InputStream stream = new BufferedInputStream(connection.getInputStream()); - List list = JsonHelper.parseList(stream); - if (list == null) { - JsonStructure jsonStructure = CandyBarApplication.getConfiguration().getWallpaperJsonStructure(); - LogUtil.e("Muzei: Json error: wallpaper array with name " - + jsonStructure.getArrayName() + " not found"); - return null; - } - - if (list.size() > 0) { - int position = getRandomInt(list.size()); - Wallpaper wallpaper = JsonHelper.getWallpaper(list.get(position)); - if (wallpaper != null) { - if (wallpaper.getName() == null) { - wallpaper.setName("Wallpaper"); - } - } - return wallpaper; - } - } - return null; - } else { - return Database.get(context).getRandomWallpaper(); - } - } - - - private static int getRandomInt(int size) { - try { - Random random = new Random(); - return random.nextInt(size); - } catch (Exception e) { - return 0; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/NavigationViewHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/NavigationViewHelper.java deleted file mode 100644 index 3fcb309..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/NavigationViewHelper.java +++ /dev/null @@ -1,70 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.view.MenuItem; - -import com.google.android.material.navigation.NavigationView; - -import candybar.lib.R; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class NavigationViewHelper { - - public static void initApply(NavigationView navigationView) { - Context context = ContextHelper.getBaseContext(navigationView); - - MenuItem menuItem = navigationView.getMenu().findItem(R.id.navigation_view_apply); - if (menuItem == null) return; - - menuItem.setVisible(context.getResources().getBoolean(R.bool.enable_apply)); - } - - public static void initIconRequest(NavigationView navigationView) { - Context context = ContextHelper.getBaseContext(navigationView); - - MenuItem menuItem = navigationView.getMenu().findItem(R.id.navigation_view_request); - if (menuItem == null) return; - - menuItem.setVisible(context.getResources().getBoolean(R.bool.enable_icon_request) || - Preferences.get(context).isPremiumRequestEnabled()); - } - - public static void initWallpapers(NavigationView navigationView) { - Context context = ContextHelper.getBaseContext(navigationView); - - MenuItem menuItem = navigationView.getMenu().findItem(R.id.navigation_view_wallpapers); - if (menuItem == null) return; - - if (WallpaperHelper.getWallpaperType(context) == WallpaperHelper.UNKNOWN) - menuItem.setVisible(false); - } - - public static void initPresets(NavigationView navigationView) { - Context context = ContextHelper.getBaseContext(navigationView); - - MenuItem menuItem = navigationView.getMenu().findItem(R.id.navigation_view_presets); - if (menuItem == null) return; - - if (PresetsHelper.getPresetsCount(context) == 0) { - menuItem.setVisible(false); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/PlayStoreCheckHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/PlayStoreCheckHelper.java deleted file mode 100644 index ed9314b..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/PlayStoreCheckHelper.java +++ /dev/null @@ -1,46 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.content.pm.PackageManager; - -import androidx.appcompat.app.AppCompatActivity; - -import com.afollestad.materialdialogs.MaterialDialog; - -import candybar.lib.R; - -public class PlayStoreCheckHelper { - - private final Context mContext; - private final Runnable mCallback; - - public PlayStoreCheckHelper(Context context, Runnable callback) { - mContext = context; - mCallback = callback; - } - - public void run() { - PackageManager pm = mContext.getPackageManager(); - String installerPackage = pm.getInstallerPackageName(mContext.getPackageName()); - boolean fromPlayStore = installerPackage != null && installerPackage.contentEquals("com.android.vending"); - - MaterialDialog.Builder dialog = new MaterialDialog.Builder(mContext) - .typeface(TypefaceHelper.getMedium(mContext), TypefaceHelper.getRegular(mContext)) - .title(R.string.playstore_check) - .content(fromPlayStore ? R.string.playstore_check_success : R.string.playstore_check_failed) - .positiveText(R.string.close) - .cancelable(false) - .canceledOnTouchOutside(false); - - if (fromPlayStore) { - dialog.onPositive((dialog1, which) -> { - dialog1.dismiss(); - mCallback.run(); - }); - } else { - dialog.onPositive((dial, which) -> ((AppCompatActivity) mContext).finish()); - } - - dialog.show(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/PresetsHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/PresetsHelper.java deleted file mode 100644 index 5fabf09..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/PresetsHelper.java +++ /dev/null @@ -1,24 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.util.Log; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -public class PresetsHelper { - - public static int getPresetsCount(Context context) { - try { - String[] komponents = context.getAssets().list("komponents"); - String[] lockscreens = context.getAssets().list("lockscreens"); - String[] wallpapers = context.getAssets().list("wallpapers"); - String[] widgets = context.getAssets().list("widgets"); - - return komponents.length + lockscreens.length + wallpapers.length + widgets.length; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return 0; - } - } - -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/ReportBugsHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/ReportBugsHelper.java deleted file mode 100644 index 0f427ef..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/ReportBugsHelper.java +++ /dev/null @@ -1,233 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.util.Log; -import android.widget.EditText; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.afollestad.materialdialogs.DialogAction; -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.material.textfield.TextInputLayout; - -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.items.Icon; -import candybar.lib.tasks.ReportBugsTask; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ReportBugsHelper { - - public static final String REPORT_BUGS = "reportbugs.zip"; - private static final String BROKEN_APPFILTER = "broken_appfilter.xml"; - private static final String BROKEN_DRAWABLES = "broken_drawables.xml"; - private static final String ACTIVITY_LIST = "activity_list.xml"; - private static final String CRASHLOG = "crashlog.txt"; - private static String UTF8 = "UTF8"; - - public static void prepareReportBugs(@NonNull Context context) { - MaterialDialog dialog = new MaterialDialog.Builder(context) - .customView(R.layout.dialog_report_bugs, true) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .positiveText(R.string.report_bugs_send) - .negativeText(R.string.close) - .build(); - - EditText editText = (EditText) dialog.findViewById(R.id.input_desc); - TextInputLayout inputLayout = (TextInputLayout) dialog.findViewById(R.id.input_layout); - - dialog.getActionButton(DialogAction.POSITIVE).setOnClickListener(view -> { - if (editText.getText().length() > 0) { - inputLayout.setErrorEnabled(false); - new ReportBugsTask(context, editText.getText().toString()).executeOnThreadPool(); - dialog.dismiss(); - return; - } - - inputLayout.setError(context.getResources().getString(R.string.report_bugs_desc_empty)); - }); - dialog.show(); - } - - @Nullable - public static File buildBrokenAppFilter(@NonNull Context context) { - try { - HashMap activities = RequestHelper.getAppFilter(context, RequestHelper.Key.ACTIVITY); - File brokenAppFilter = new File(context.getCacheDir(), BROKEN_APPFILTER); - Writer writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(brokenAppFilter), UTF8)); - - boolean first = true; - for (Map.Entry entry : activities.entrySet()) { - if (first) { - first = false; - writer.append("") - .append("\r\n").append("") - .append("\r\n\r\n\r\n"); - } - - int drawable = context.getResources().getIdentifier( - entry.getValue(), "drawable", context.getPackageName()); - if (drawable == 0) { - writer.append("Activity: ").append(entry.getKey()) - .append("\r\n") - .append("Drawable: ").append(entry.getValue()).append(".png") - .append("\r\n\r\n"); - } - } - - writer.flush(); - writer.close(); - return brokenAppFilter; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return null; - } - } - - @Nullable - public static File buildBrokenDrawables(@NonNull Context context) { - try { - HashMap drawables = RequestHelper.getAppFilter(context, RequestHelper.Key.DRAWABLE); - List iconList = IconsHelper.getIconsList(context); - List icons = new ArrayList<>(); - - File brokenDrawables = new File(context.getCacheDir(), BROKEN_DRAWABLES); - Writer writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(brokenDrawables), UTF8)); - - for (Icon icon : iconList) { - if (CandyBarApplication.getConfiguration().isShowTabAllIcons()) { - if (!icon.getTitle().equals(CandyBarApplication.getConfiguration().getTabAllIconsTitle())) { - icons.addAll(icon.getIcons()); - } - } else { - icons.addAll(icon.getIcons()); - } - } - - IconsHelper.computeTitles(context, icons); - - boolean first = true; - for (Icon icon : icons) { - if (first) { - first = false; - writer.append("") - .append("\r\n").append("") - .append("\r\n\r\n\r\n"); - } - - String drawable = drawables.get(icon.getTitle()); - if (drawable == null || drawable.length() == 0) { - writer.append("Drawable: ").append(icon.getTitle()).append(".png") - .append("\r\n\r\n"); - } - } - - writer.flush(); - writer.close(); - return brokenDrawables; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return null; - } - } - - @Nullable - public static File buildActivityList(@NonNull Context context) { - try { - File activityList = new File(context.getCacheDir(), ACTIVITY_LIST); - Writer out = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(activityList), UTF8)); - - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - - List appList = context.getPackageManager().queryIntentActivities( - intent, PackageManager.GET_RESOLVED_FILTER); - try { - Collections.sort(appList, new ResolveInfo.DisplayNameComparator(context.getPackageManager())); - } catch (Exception ignored) { - } - - boolean first = true; - for (ResolveInfo app : appList) { - - if (first) { - first = false; - out.append("") - .append("\r\n").append("") - .append("\r\n\r\n\r\n"); - } - - String name = app.activityInfo.loadLabel(context.getPackageManager()).toString(); - String activity = app.activityInfo.packageName + "/" + app.activityInfo.name; - out.append(""); - out.append("\r\n").append(activity); - out.append("\r\n\r\n"); - } - - out.flush(); - out.close(); - return activityList; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return null; - } - } - - @Nullable - public static File buildCrashLog(@NonNull Context context, @NonNull String stackTrace) { - try { - if (stackTrace.length() == 0) return null; - - File crashLog = new File(context.getCacheDir(), CRASHLOG); - String deviceInfo = DeviceHelper.getDeviceInfoForCrashReport(context); - Writer out = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(crashLog), UTF8)); - out.append(deviceInfo).append(stackTrace); - out.flush(); - out.close(); - return crashLog; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return null; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/RequestHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/RequestHelper.java deleted file mode 100644 index 56e803d..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/RequestHelper.java +++ /dev/null @@ -1,568 +0,0 @@ -package candybar.lib.helpers; - -import static candybar.lib.helpers.DrawableHelper.getReqIcon; -import static candybar.lib.helpers.DrawableHelper.getRightIcon; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.graphics.Bitmap; -import android.util.Base64; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.TimeHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import org.json.JSONException; -import org.json.JSONObject; -import org.xmlpull.v1.XmlPullParser; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.BufferedWriter; -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.OutputStreamWriter; -import java.io.Writer; -import java.text.Normalizer; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; -import java.util.Objects; -import java.util.zip.ZipEntry; -import java.util.zip.ZipOutputStream; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.items.Request; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.listeners.RequestListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class RequestHelper { - - public static final String APPFILTER = "appfilter.xml"; - public static final String APPMAP = "appmap.xml"; - public static final String THEME_RESOURCES = "theme_resources.xml"; - public static final String ZIP = "icon_request.zip"; - public static final String REBUILD_ZIP = "rebuild_icon_request.zip"; - - public static String getGeneratedZipName(@NonNull String baseName) { - return baseName.substring(0, baseName.lastIndexOf(".")) + "_" + TimeHelper.getDateTime( - new SimpleDateFormat("dd_MM_yyyy_HH_mm_ss", Locale.ENGLISH)) + ".zip"; - } - - public static String fixNameForRequest(String name) { - String normalized = Normalizer.normalize(name.toLowerCase(), Normalizer.Form.NFD); - - try { - // This code causes crash on some android devices - normalized = normalized.replaceAll("[\\p{InCombiningDiacriticalMarks}\\p{IsLm}\\p{IsSk}]+", ""); - } catch (Exception ignored) { - } - - normalized = normalized - .replaceAll("[.\"']", "") - .replaceAll("[ \\[\\]{}()=!/\\\\,?°|<>;:#~+*-]", "_") - .replaceAll("&", "_and_"); - - if (Character.isDigit(normalized.charAt(0))) normalized = "_" + normalized; - normalized = normalized.replaceAll("_+", "_"); - - return normalized; - } - - @Nullable - public static File buildXml(@NonNull Context context, @NonNull List requests, @NonNull XmlType xmlType) { - try { - if (xmlType == XmlType.APPFILTER && !CandyBarApplication.getConfiguration().isGenerateAppFilter()) { - return null; - } else if (xmlType == XmlType.APPMAP && !CandyBarApplication.getConfiguration().isGenerateAppMap()) { - return null; - } else if (xmlType == XmlType.THEME_RESOURCES & !CandyBarApplication.getConfiguration().isGenerateThemeResources()) { - return null; - } - - File file = new File(context.getCacheDir().toString(), xmlType.getFileName()); - String UTF8 = "UTF8"; - Writer writer = new BufferedWriter(new OutputStreamWriter( - new FileOutputStream(file), UTF8)); - writer.append(xmlType.getHeader()).append("\n\n"); - - for (Request request : requests) { - writer.append(xmlType.getContent(context, request)); - } - writer.append(xmlType.getFooter()); - writer.flush(); - writer.close(); - return file; - } catch (IOException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return null; - } - - public static String buildJsonForArctic(@NonNull List requests) { - StringBuilder sb = new StringBuilder(); - boolean isFirst = true; - - sb.append("{ \"components\": [\n"); - for (Request request : requests) { - if (!isFirst) sb.append(",\n"); - sb.append(String.format("{ \"name\": \"%s\", \"pkg\": \"%s\", \"componentInfo\": \"%s\", \"drawable\": \"%s\" }", - request.getName(), - request.getPackageName(), - request.getActivity(), - fixNameForRequest(request.getName()))); - isFirst = false; - } - sb.append("]}"); - - return sb.toString(); - } - - public static String buildJsonForMyAP(@NonNull Context context, @NonNull List requests) { - StringBuilder sb = new StringBuilder(); - boolean isFirst = true; - - sb.append("{ \"projectUID\": \"ENTER UID\","); - sb.append("\"icons\" : ["); - for (Request request : requests) { - Bitmap appBitmap = getRightIcon(getReqIcon(context, request.getActivity())); - ByteArrayOutputStream baos = new ByteArrayOutputStream(); - assert appBitmap != null; - appBitmap.compress(Bitmap.CompressFormat.PNG, 100, baos); - String base64Icon = Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT); - - if (!isFirst) sb.append(",\n"); - sb - .append("\"name\": \"").append(request.getName()).append("\",") - .append("\"packageName\": \"").append(request.getPackageName()).append("\",") - .append("\"imageStr\": \"").append(base64Icon).append("\",") - .append("\"activities\": [\"").append(request.getActivity()).append("\"]"); - isFirst = false; - } - sb.append("]}"); - - return sb.toString(); - } - - public static String getRegularArcticApiKey(Context context) { - String arcticApiKey = context.getResources().getString(R.string.regular_request_arctic_api_key); - // Fallback to arctic_manager_api_key - if (arcticApiKey.length() == 0) - arcticApiKey = context.getResources().getString(R.string.arctic_manager_api_key); - - return arcticApiKey; - } - - public static boolean isRegularArcticEnabled(Context context) { - return context.getResources().getString(R.string.regular_request_method).length() > 0 - ? context.getResources().getString(R.string.regular_request_method).contentEquals("arctic") - // Use fallback method to check if arctic is enabled - : getRegularArcticApiKey(context).length() > 0; - } - - public static String getPremiumArcticApiKey(Context context) { - String arcticApiKey = context.getResources().getString(R.string.premium_request_arctic_api_key); - // Fallback to regular request's api key - if (arcticApiKey.length() == 0) arcticApiKey = getRegularArcticApiKey(context); - - return arcticApiKey; - } - - public static boolean isPremiumArcticEnabled(Context context) { - return context.getResources().getString(R.string.premium_request_method).length() > 0 - ? context.getResources().getString(R.string.premium_request_method).contentEquals("arctic") - // Fallback to regular request's method - : context.getResources().getString(R.string.regular_request_method).length() > 0 - ? context.getResources().getString(R.string.regular_request_method).contentEquals("arctic") - // Use fallback method to check if arctic is enabled - : getRegularArcticApiKey(context).length() > 0; - } - - public static String sendArcticRequest(List requests, List iconFiles, File directory, String apiKey) { - okhttp3.RequestBody okRequestBody = new okhttp3.MultipartBody.Builder() - .setType(okhttp3.MultipartBody.FORM) - .addFormDataPart("apps", buildJsonForArctic(requests)) - .addFormDataPart("archive", "icons.zip", okhttp3.RequestBody.create( - Objects.requireNonNull(getZipFile(iconFiles, directory.toString(), "icons.zip")), - okhttp3.MediaType.parse("application/zip"))) - .build(); - - okhttp3.Request okRequest = new okhttp3.Request.Builder() - .url("https://arcticmanager.com/v1/request") - .addHeader("TokenID", apiKey) - .addHeader("Accept", "application/json") - .addHeader("User-Agent", "afollestad/icon-request") - .post(okRequestBody) - .build(); - - okhttp3.OkHttpClient okHttpClient = new okhttp3.OkHttpClient(); - - try { - okhttp3.Response response = okHttpClient.newCall(okRequest).execute(); - boolean success = response.code() > 199 && response.code() < 300; - if (!success) { - JSONObject responseJson = new JSONObject(Objects.requireNonNull(response.body()).string()); - return responseJson.getString("error"); - } - } catch (IOException | JSONException ignoredException) { - LogUtil.d("ARCTIC_MANAGER: Error"); - return ""; - } - return null; - } - - public static File getZipFile(List files, String filepath, String filename) { - // Modified from https://github.com/danimahardhika/android-helpers/blob/master/core/src/main/java/com/danimahardhika/android/helpers/core/FileHelper.java - try { - final int BUFFER = 2048; - final File file = new File(filepath, filename); - BufferedInputStream origin; - FileOutputStream dest = new FileOutputStream(file); - ZipOutputStream out = new ZipOutputStream(new BufferedOutputStream( - dest)); - - byte[] data = new byte[BUFFER]; - for (int i = 0; i < files.size(); i++) { - FileInputStream fi = new FileInputStream(files.get(i)); - origin = new BufferedInputStream(fi, BUFFER); - - ZipEntry entry = new ZipEntry(files.get(i).substring( - files.get(i).lastIndexOf("/") + 1)); - out.putNextEntry(entry); - int count; - - while ((count = origin.read(data, 0, BUFFER)) != -1) { - out.write(data, 0, count); - } - origin.close(); - } - - out.close(); - return file; - } catch (Exception ignored) { - } - return null; - } - - @NonNull - public static HashMap getAppFilter(@NonNull Context context, @NonNull Key key) { - try { - HashMap activities = new HashMap<>(); - XmlPullParser xpp = context.getResources().getXml(R.xml.appfilter); - - while (xpp.getEventType() != XmlPullParser.END_DOCUMENT) { - if (xpp.getEventType() == XmlPullParser.START_TAG) { - if (xpp.getName().equals("item")) { - String sKey = xpp.getAttributeValue(null, key.getKey()); - String sValue = xpp.getAttributeValue(null, key.getValue()); - - if (sKey != null && sValue != null) { - activities.put( - sKey.replace("ComponentInfo{", "").replace("}", ""), - sValue.replace("ComponentInfo{", "").replace("}", "")); - } else { - LogUtil.e("Appfilter Error\nKey: " + sKey + "\nValue: " + sValue); - } - } - } - xpp.next(); - } - return activities; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - return new HashMap<>(); - } - - @NonNull - public static List getMissingApps(@NonNull Context context) { - List requests = new ArrayList<>(); - HashMap appFilter = getAppFilter(context, Key.ACTIVITY); - PackageManager packageManager = context.getPackageManager(); - - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - List installedApps = packageManager.queryIntentActivities( - intent, PackageManager.GET_RESOLVED_FILTER); - CandyBarMainActivity.sInstalledAppsCount = installedApps.size(); - - try { - Collections.sort(installedApps, - new ResolveInfo.DisplayNameComparator(packageManager)); - } catch (Exception ignored) { - } - - for (ResolveInfo app : installedApps) { - String packageName = app.activityInfo.packageName; - String activity = packageName + "/" + app.activityInfo.name; - - String value = appFilter.get(activity); - - if (value == null) { - String name = LocaleHelper.getOtherAppLocaleName(context, new Locale("en"), activity); - if (name == null) { - name = app.activityInfo.loadLabel(packageManager).toString(); - } - - boolean requested = Database.get(context).isRequested(activity); - Request request = Request.Builder() - .name(name) - .packageName(app.activityInfo.packageName) - .activity(activity) - .requested(requested) - .build(); - - requests.add(request); - } - } - return requests; - } - - public static void showAlreadyRequestedDialog(@NonNull Context context) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.request_title) - .content(R.string.request_requested) - .positiveText(R.string.close) - .show(); - } - - public static void showIconRequestLimitDialog(@NonNull Context context) { - boolean reset = context.getResources().getBoolean(R.bool.reset_icon_request_limit); - int limit = context.getResources().getInteger(R.integer.icon_request_limit); - String message = context.getResources().getString(R.string.request_limit, limit); - message += " " + context.getResources().getString(R.string.request_used, - Preferences.get(context).getRegularRequestUsed()); - - if (Preferences.get(context).isPremiumRequestEnabled()) - message += " " + context.getResources().getString(R.string.request_limit_buy); - - if (reset) - message += "\n\n" + context.getResources().getString(R.string.request_limit_reset); - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.request_title) - .content(message) - .positiveText(R.string.close) - .show(); - } - - public static void showPremiumRequestRequired(@NonNull Context context) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.request_title) - .content(R.string.premium_request_required) - .positiveText(R.string.close) - .show(); - } - - public static void showPremiumRequestLimitDialog(@NonNull Context context, int selected) { - String message = context.getResources().getString(R.string.premium_request_limit, - Preferences.get(context).getPremiumRequestCount()); - message += " " + context.getResources().getString(R.string.premium_request_limit1, selected); - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.premium_request) - .content(message) - .positiveText(R.string.close) - .show(); - } - - public static void showPremiumRequestStillAvailable(@NonNull Context context) { - String message = context.getResources().getString( - R.string.premium_request_already_purchased, - Preferences.get(context).getPremiumRequestCount()); - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.premium_request) - .content(message) - .positiveText(R.string.close) - .show(); - } - - public static boolean isReadyToSendPremiumRequest(@NonNull Context context) { - boolean isReady = Preferences.get(context).isConnectedToNetwork(); - if (!isReady) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.premium_request) - .content(R.string.premium_request_no_internet) - .positiveText(R.string.close) - .show(); - } - return isReady; - } - - public static void showPremiumRequestConsumeFailed(@NonNull Context context) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.premium_request) - .content(R.string.premium_request_consume_failed) - .positiveText(R.string.close) - .show(); - } - - public static void showPremiumRequestExist(@NonNull Context context) { - new MaterialDialog.Builder(context) - .typeface(TypefaceHelper.getMedium(context), TypefaceHelper.getRegular(context)) - .title(R.string.premium_request) - .content(R.string.premium_request_exist) - .positiveText(R.string.close) - .show(); - } - - public static void checkPiracyApp(@NonNull Context context) { - boolean premiumRequest = context.getResources().getBoolean(R.bool.enable_premium_request); - //Dashboard don't need to check piracy app if premium request is disabled - if (!premiumRequest) { - Preferences.get(context).setPremiumRequestEnabled(false); - RequestListener listener = (RequestListener) context; - return; - } - - // Lucky Patcher and Freedom package name - String[] strings = new String[]{ - "com.chelpus.lackypatch", - "com.dimonvideo.luckypatcher", - "com.forpda.lp", - //"com.android.protips", This is not lucky patcher or freedom - "com.android.vending.billing.InAppBillingService.LUCK", - "com.android.vending.billing.InAppBillingService.LOCK", - "cc.madkite.freedom", - "com.android.vending.billing.InAppBillingService.LACK", - "com.android.vending.billing.InAppBillingService.CLON", - "com.android.vending.billing.InAppBillingService.CRAC", - "com.android.vending.billing.InAppBillingService.COIN" - }; - - boolean isPiracyAppInstalled = false; - for (String string : strings) { - try { - PackageInfo packageInfo = context.getPackageManager().getPackageInfo( - string, PackageManager.GET_ACTIVITIES); - if (packageInfo != null) { - isPiracyAppInstalled = true; - break; - } - } catch (Exception ignored) { - } - } - - Preferences.get(context).setPremiumRequestEnabled(!isPiracyAppInstalled); - - RequestListener listener = (RequestListener) context; - } - - public enum XmlType { - APPFILTER(RequestHelper.APPFILTER, "", ""), - APPMAP(RequestHelper.APPMAP, "", ""), - THEME_RESOURCES(RequestHelper.THEME_RESOURCES, "", ""); - - private final String fileName; - private final String header; - private final String footer; - - XmlType(String fileName, String header, String footer) { - this.fileName = fileName; - this.header = header; - this.footer = footer; - } - - private String getFileName() { - return fileName; - } - - private String getHeader() { - return header; - } - - private String getFooter() { - return footer; - } - - private String getContent(@NonNull Context context, @NonNull Request request) { - switch (this) { - case APPFILTER: - return "\t" + - "\n" + - "\t" + context.getString(R.string.appfilter_item) - .replaceAll("\\{\\{component\\}\\}", request.getActivity()) - .replaceAll("\\{\\{drawable\\}\\}", fixNameForRequest(request.getName())) + - "\n\n"; - case APPMAP: - String packageName = "" + request.getPackageName() + "/"; - String className = request.getActivity().replaceFirst(packageName, ""); - return "\t" + - "\n" + - "\t" + - "\n\n"; - case THEME_RESOURCES: - return "\t" + - "\n" + - "\t" + - "\n\n"; - default: - return ""; - } - } - } - - public enum Key { - ACTIVITY("component", "drawable"), - DRAWABLE("drawable", "component"); - - private final String key; - private final String value; - - Key(String key, String value) { - this.key = key; - this.value = value; - } - - private String getKey() { - return key; - } - - private String getValue() { - return value; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/TapIntroHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/TapIntroHelper.java deleted file mode 100644 index 2338633..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/TapIntroHelper.java +++ /dev/null @@ -1,553 +0,0 @@ -package candybar.lib.helpers; - -import static com.danimahardhika.android.helpers.core.UnitHelper.toDp; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.pm.ActivityInfo; -import android.content.res.Configuration; -import android.graphics.Typeface; -import android.os.Build; -import android.os.Handler; -import android.util.Log; -import android.view.View; - -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.appcompat.widget.Toolbar; -import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; -import androidx.recyclerview.widget.StaggeredGridLayoutManager; - -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.getkeepsafe.taptargetview.TapTarget; -import com.getkeepsafe.taptargetview.TapTargetSequence; -import com.getkeepsafe.taptargetview.TapTargetView; - -import candybar.lib.R; -import candybar.lib.adapters.HomeAdapter; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class TapIntroHelper { - - @SuppressLint("StringFormatInvalid") - public static void showHomeIntros(@NonNull Context context, @Nullable RecyclerView recyclerView, - @Nullable StaggeredGridLayoutManager manager, int position) { - if (Preferences.get(context).isTimeToShowHomeIntro()) { - AppCompatActivity activity = (AppCompatActivity) context; - - Toolbar toolbar = activity.findViewById(R.id.toolbar); - - new Handler().postDelayed(() -> { - try { - int primary = ContextCompat.getColor(context, R.color.toolbarIcon); - int secondary = ColorHelper.setColorAlpha(primary, 0.7f); - - TapTargetSequence tapTargetSequence = new TapTargetSequence(activity); - tapTargetSequence.continueOnCancel(true); - - Typeface title = TypefaceHelper.getMedium(context); - //Todo: - //Typeface description = TypefaceHelper.getRegular(context); - - if (toolbar != null) { - TapTarget tapTarget = TapTarget.forToolbarNavigationIcon(toolbar, - context.getResources().getString(R.string.tap_intro_home_navigation), - context.getResources().getString(R.string.tap_intro_home_navigation_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //Todo: - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - } - - if (recyclerView != null) { - HomeAdapter adapter = (HomeAdapter) recyclerView.getAdapter(); - if (adapter != null) { - if (context.getResources().getBoolean(R.bool.enable_apply)) { - if (position >= 0 && position < adapter.getItemCount()) { - RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position); - if (holder != null) { - View view = holder.itemView; - float targetRadius = toDp(context, view.getMeasuredWidth()) - 20f; - - String desc = context.getResources().getString(R.string.tap_intro_home_apply_desc, - context.getResources().getString(R.string.app_name)); - TapTarget tapTarget = TapTarget.forView(view, - context.getResources().getString(R.string.tap_intro_home_apply), - desc) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .targetRadius((int) targetRadius) - .tintTarget(false) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - } - } - } - } - } - - tapTargetSequence.listener(new TapTargetSequence.Listener() { - @Override - public void onSequenceFinish() { - Preferences.get(context).setTimeToShowHomeIntro(false); - } - - @Override - public void onSequenceStep(TapTarget tapTarget, boolean b) { - if (manager != null) { - if (position >= 0) - manager.scrollToPosition(position); - } - } - - @Override - public void onSequenceCanceled(TapTarget tapTarget) { - - } - }); - tapTargetSequence.start(); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }, 100); - } - } - - public static void showIconsIntro(@NonNull Context context) { - if (Preferences.get(context).isTimeToShowIconsIntro()) { - AppCompatActivity activity = (AppCompatActivity) context; - - Toolbar toolbar = activity.findViewById(R.id.toolbar); - if (toolbar == null) return; - - new Handler().postDelayed(() -> { - try { - int primary = ContextCompat.getColor(context, R.color.toolbarIcon); - int secondary = ColorHelper.setColorAlpha(primary, 0.7f); - - Typeface title = TypefaceHelper.getMedium(context); - - TapTarget tapTarget = TapTarget.forToolbarMenuItem(toolbar, R.id.menu_search, - context.getResources().getString(R.string.tap_intro_icons_search), - context.getResources().getString(R.string.tap_intro_icons_search_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - TapTargetView.showFor(activity, tapTarget, - new TapTargetView.Listener() { - - @Override - public void onTargetDismissed(TapTargetView view, boolean userInitiated) { - super.onTargetDismissed(view, userInitiated); - Preferences.get(context).setTimeToShowIconsIntro(false); - } - }); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }, 100); - } - } - - public static void showRequestIntro(@NonNull Context context, @Nullable RecyclerView recyclerView) { - if (Preferences.get(context).isTimeToShowRequestIntro()) { - AppCompatActivity activity = (AppCompatActivity) context; - - int requestOrientation = context.getResources().getConfiguration().orientation == - Configuration.ORIENTATION_PORTRAIT ? - ActivityInfo.SCREEN_ORIENTATION_PORTRAIT : - ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; - activity.setRequestedOrientation(requestOrientation); - - Toolbar toolbar = activity.findViewById(R.id.toolbar); - - new Handler().postDelayed(() -> { - try { - int primary = ContextCompat.getColor(context, R.color.toolbarIcon); - int secondary = ColorHelper.setColorAlpha(primary, 0.7f); - - TapTargetSequence tapTargetSequence = new TapTargetSequence(activity); - tapTargetSequence.continueOnCancel(true); - - Typeface title = TypefaceHelper.getMedium(context); - - if (recyclerView != null) { - int position = 0; - if (Preferences.get(context).isPremiumRequestEnabled()) - position += 1; - - if (recyclerView.getAdapter() != null) { - if (position < recyclerView.getAdapter().getItemCount()) { - RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position); - - if (holder != null) { - View view = holder.itemView.findViewById(R.id.checkbox); - if (view != null) { - TapTarget tapTarget = TapTarget.forView(view, - context.getResources().getString(R.string.tap_intro_request_select), - context.getResources().getString(R.string.tap_intro_request_select_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - } - } - } - } - } - - if (toolbar != null) { - TapTarget tapTarget = TapTarget.forToolbarMenuItem(toolbar, R.id.menu_select_all, - context.getResources().getString(R.string.tap_intro_request_select_all), - context.getResources().getString(R.string.tap_intro_request_select_all_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - } - - View fab = activity.findViewById(R.id.fab); - if (fab != null) { - TapTarget tapTarget = TapTarget.forView(fab, - context.getResources().getString(R.string.tap_intro_request_send), - context.getResources().getString(R.string.tap_intro_request_send_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .tintTarget(false) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - } - - if (Preferences.get(context).isPremiumRequestEnabled()) { - if (!Preferences.get(context).isPremiumRequest()) { - if (recyclerView != null) { - int position = 0; - - if (recyclerView.getAdapter() != null) { - if (position < recyclerView.getAdapter().getItemCount()) { - RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position); - - if (holder != null) { - View view = holder.itemView.findViewById(R.id.buy); - if (view != null) { - float targetRadius = toDp(context, view.getMeasuredWidth()) - 10f; - - TapTarget tapTarget = TapTarget.forView(view, - context.getResources().getString(R.string.tap_intro_request_premium), - context.getResources().getString(R.string.tap_intro_request_premium_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .targetRadius((int) targetRadius) - .tintTarget(false) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - } - } - } - } - } - } - } - - tapTargetSequence.listener(new TapTargetSequence.Listener() { - @Override - public void onSequenceFinish() { - activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); - Preferences.get(context).setTimeToShowRequestIntro(false); - } - - @Override - public void onSequenceStep(TapTarget tapTarget, boolean b) { - - } - - @Override - public void onSequenceCanceled(TapTarget tapTarget) { - - } - }); - tapTargetSequence.start(); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }, 100); - } - } - - @SuppressLint("StringFormatInvalid") - public static void showWallpapersIntro(@NonNull Context context, @Nullable RecyclerView recyclerView) { - if (Preferences.get(context).isTimeToShowWallpapersIntro()) { - AppCompatActivity activity = (AppCompatActivity) context; - - if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); - } - - new Handler().postDelayed(() -> { - int primary = ContextCompat.getColor(context, R.color.toolbarIcon); - int secondary = ColorHelper.setColorAlpha(primary, 0.7f); - - if (recyclerView != null) { - TapTargetSequence tapTargetSequence = new TapTargetSequence(activity); - tapTargetSequence.continueOnCancel(true); - - int position = 0; - - if (recyclerView.getAdapter() == null) - return; - - if (position < recyclerView.getAdapter().getItemCount()) { - RecyclerView.ViewHolder holder = recyclerView.findViewHolderForAdapterPosition(position); - if (holder == null) return; - - View view = holder.itemView.findViewById(R.id.image); - if (view != null) { - float targetRadius = toDp(context, view.getMeasuredWidth()) - 10f; - - Typeface title = TypefaceHelper.getMedium(context); - - String desc = context.getResources().getString(R.string.tap_intro_wallpapers_option_desc, - context.getResources().getBoolean(R.bool.enable_wallpaper_download) ? - context.getResources().getString(R.string.tap_intro_wallpapers_option_desc_download) : ""); - - TapTarget tapTarget = TapTarget.forView(view, - context.getResources().getString(R.string.tap_intro_wallpapers_option), - desc) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .targetRadius((int) targetRadius) - .tintTarget(false) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - TapTarget tapTarget1 = TapTarget.forView(view, - context.getResources().getString(R.string.tap_intro_wallpapers_preview), - context.getResources().getString(R.string.tap_intro_wallpapers_preview_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .targetRadius((int) targetRadius) - .tintTarget(false) - .drawShadow(Preferences.get(context).isTapIntroShadowEnabled()); - - if (title != null) { - tapTarget.textTypeface(title); - tapTarget1.textTypeface(title); - } - - //if (description != null) { - //tapTarget.descriptionTypeface(description); - //tapTarget1.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - tapTargetSequence.target(tapTarget1); - - tapTargetSequence.listener(new TapTargetSequence.Listener() { - @Override - public void onSequenceFinish() { - activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED); - Preferences.get(context).setTimeToShowWallpapersIntro(false); - } - - @Override - public void onSequenceStep(TapTarget tapTarget, boolean b) { - - } - - @Override - public void onSequenceCanceled(TapTarget tapTarget) { - - } - }); - tapTargetSequence.start(); - } - } - } - }, 200); - } - } - - public static void showWallpaperPreviewIntro(@NonNull Context context, @ColorInt int color) { - if (Preferences.get(context).isTimeToShowWallpaperPreviewIntro()) { - AppCompatActivity activity = (AppCompatActivity) context; - - View rootView = activity.findViewById(R.id.rootview); - if (rootView == null) return; - - new Handler().postDelayed(() -> { - try { - int baseColor = color; - if (baseColor == 0) { - baseColor = ColorHelper.getAttributeColor(context, R.attr.colorSecondary); - } - - int primary = ColorHelper.getTitleTextColor(baseColor); - int secondary = ColorHelper.setColorAlpha(primary, 0.7f); - - TapTargetSequence tapTargetSequence = new TapTargetSequence(activity); - tapTargetSequence.continueOnCancel(true); - - Typeface title = TypefaceHelper.getMedium(context); - //Todo: - //Typeface description = TypefaceHelper.getRegular(context); - - View apply = rootView.findViewById(R.id.menu_apply); - View save = rootView.findViewById(R.id.menu_save); - - TapTarget tapTarget = TapTarget.forView(apply, - context.getResources().getString(R.string.tap_intro_wallpaper_preview_apply), - context.getResources().getString(R.string.tap_intro_wallpaper_preview_apply_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .outerCircleColorInt(baseColor) - .drawShadow(true); - - TapTarget tapTarget1 = TapTarget.forView(save, - context.getResources().getString(R.string.tap_intro_wallpaper_preview_save), - context.getResources().getString(R.string.tap_intro_wallpaper_preview_save_desc)) - .titleTextColorInt(primary) - .descriptionTextColorInt(secondary) - .targetCircleColorInt(primary) - .outerCircleColorInt(baseColor) - .drawShadow(true); - - if (title != null) { - //Todo: - //tapTarget.titleTypeface(title); - //tapTarget1.titleTypeface(title); - //tapTarget2.titleTypeface(title); - tapTarget.textTypeface(title); - tapTarget1.textTypeface(title); - } - - //if (description != null) { - //Todo: - //tapTarget.descriptionTypeface(description); - //tapTarget1.descriptionTypeface(description); - //tapTarget2.descriptionTypeface(description); - //} - - tapTargetSequence.target(tapTarget); - if (context.getResources().getBoolean(R.bool.enable_wallpaper_download)) { - tapTargetSequence.target(tapTarget1); - } - - tapTargetSequence.listener(new TapTargetSequence.Listener() { - @Override - public void onSequenceFinish() { - Preferences.get(context).setTimeToShowWallpaperPreviewIntro(false); - } - - @Override - public void onSequenceStep(TapTarget tapTarget, boolean b) { - - } - - @Override - public void onSequenceCanceled(TapTarget tapTarget) { - - } - }); - tapTargetSequence.start(); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - }, 100); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/ThemeHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/ThemeHelper.java deleted file mode 100644 index f3fcdea..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/ThemeHelper.java +++ /dev/null @@ -1,36 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.content.res.Configuration; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.items.Theme; -import candybar.lib.preferences.Preferences; - -public class ThemeHelper { - public static Theme getDefaultTheme(Context context) { - try { - return Theme.valueOf(context.getResources().getString(R.string.default_theme).toUpperCase()); - } catch (Exception e) { - return Theme.AUTO; - } - } - - public static boolean isDarkTheme(Context context) { - boolean isThemingEnabled = CandyBarApplication.getConfiguration().isDashboardThemingEnabled(); - if (!isThemingEnabled) return getDefaultTheme(context) == Theme.DARK; - - Theme currentTheme = Preferences.get(context).getTheme(); - if (currentTheme == Theme.AUTO) { - switch (context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) { - case Configuration.UI_MODE_NIGHT_YES: - return true; - case Configuration.UI_MODE_NIGHT_NO: - return false; - } - } - - return currentTheme == Theme.DARK; - } -} \ No newline at end of file diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/TypefaceHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/TypefaceHelper.java deleted file mode 100644 index 24086b8..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/TypefaceHelper.java +++ /dev/null @@ -1,46 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.graphics.Typeface; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.res.ResourcesCompat; - -import candybar.lib.R; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class TypefaceHelper { - - @Nullable - public static Typeface getRegular(@NonNull Context context) { - return ResourcesCompat.getFont(context, R.font.regular); - } - - @Nullable - public static Typeface getMedium(@NonNull Context context) { - return ResourcesCompat.getFont(context, R.font.medium); - } - - @Nullable - public static Typeface getBold(@NonNull Context context) { - return ResourcesCompat.getFont(context, R.font.bold); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/UrlHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/UrlHelper.java deleted file mode 100644 index a91768c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/UrlHelper.java +++ /dev/null @@ -1,106 +0,0 @@ -package candybar.lib.helpers; - -import android.content.Context; -import android.graphics.drawable.Drawable; -import android.util.Patterns; -import android.webkit.URLUtil; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; - -import static com.danimahardhika.android.helpers.core.DrawableHelper.getTintedDrawable; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class UrlHelper { - - @Nullable - public static Drawable getSocialIcon(@NonNull Context context, @NonNull Type type) { - int color = ConfigurationHelper.getSocialIconColor(context, CandyBarApplication.getConfiguration().getSocialIconColor()); - switch (type) { - case EMAIL: - return getTintedDrawable(context, R.drawable.ic_toolbar_email, color); - case BEHANCE: - return getTintedDrawable(context, R.drawable.ic_toolbar_behance, color); - case DRIBBBLE: - return getTintedDrawable(context, R.drawable.ic_toolbar_dribbble, color); - case FACEBOOK: - return getTintedDrawable(context, R.drawable.ic_toolbar_facebook, color); - case GITHUB: - return getTintedDrawable(context, R.drawable.ic_toolbar_github, color); - case INSTAGRAM: - return getTintedDrawable(context, R.drawable.ic_toolbar_instagram, color); - case PINTEREST: - return getTintedDrawable(context, R.drawable.ic_toolbar_pinterest, color); - case TWITTER: - return getTintedDrawable(context, R.drawable.ic_toolbar_twitter, color); - case TELEGRAM: - return getTintedDrawable(context, R.drawable.ic_toolbar_telegram, color); - default: - return getTintedDrawable(context, R.drawable.ic_toolbar_website, color); - } - } - - public static Type getType(String url) { - if (url == null) return Type.INVALID; - if (!URLUtil.isValidUrl(url)) { - if (Patterns.EMAIL_ADDRESS.matcher(url).matches()) { - return Type.EMAIL; - } - return Type.INVALID; - } - - if (url.contains("behance.")) { - return Type.BEHANCE; - } else if (url.contains("dribbble.")) { - return Type.DRIBBBLE; - } else if (url.contains("facebook.")) { - return Type.FACEBOOK; - } else if (url.contains("github.")) { - return Type.GITHUB; - } else if (url.contains("instagram.")) { - return Type.INSTAGRAM; - } else if (url.contains("pinterest.")) { - return Type.PINTEREST; - } else if (url.contains("twitter.")) { - return Type.TWITTER; - } else if (url.contains("t.me/") || url.contains("telegram.me/")) { - return Type.TELEGRAM; - } else { - return Type.UNKNOWN; - } - } - - public enum Type { - EMAIL, - BEHANCE, - DRIBBBLE, - FACEBOOK, - GITHUB, - INSTAGRAM, - PINTEREST, - TWITTER, - TELEGRAM, - UNKNOWN, - INVALID - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/ViewHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/ViewHelper.java deleted file mode 100644 index 51e2d09..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/ViewHelper.java +++ /dev/null @@ -1,69 +0,0 @@ -package candybar.lib.helpers; - -import android.graphics.Point; - -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.pluscubed.recyclerfastscroll.RecyclerFastScroller; - -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.items.Home; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ViewHelper { - - public static void setFastScrollColor(@Nullable RecyclerFastScroller fastScroll) { - if (fastScroll == null) return; - - int accent = ColorHelper.getAttributeColor(fastScroll.getContext(), R.attr.colorSecondary); - fastScroll.setBarColor(ColorHelper.setColorAlpha(accent, 0.8f)); - fastScroll.setHandleNormalColor(accent); - fastScroll.setHandlePressedColor(ColorHelper.getDarkerColor(accent, 0.7f)); - } - - public static Point getWallpaperViewRatio(String viewStyle) { - switch (viewStyle.toLowerCase(Locale.getDefault())) { - default: - case "square": - return new Point(1, 1); - case "landscape": - return new Point(16, 9); - case "portrait": - return new Point(4, 5); - } - } - - public static Home.Style getHomeImageViewStyle(String viewStyle) { - switch (viewStyle.toLowerCase(Locale.getDefault())) { - case "card_square": - return new Home.Style(new Point(1, 1), Home.Style.Type.CARD_SQUARE); - default: - case "card_landscape": - return new Home.Style(new Point(16, 9), Home.Style.Type.CARD_LANDSCAPE); - case "square": - return new Home.Style(new Point(1, 1), Home.Style.Type.SQUARE); - case "landscape": - return new Home.Style(new Point(16, 9), Home.Style.Type.LANDSCAPE); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/helpers/WallpaperHelper.java b/libs/candybar/src/main/java/candybar/lib/helpers/WallpaperHelper.java deleted file mode 100644 index d01f947..0000000 --- a/libs/candybar/src/main/java/candybar/lib/helpers/WallpaperHelper.java +++ /dev/null @@ -1,116 +0,0 @@ -package candybar.lib.helpers; - -import android.content.ActivityNotFoundException; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.res.Configuration; -import android.graphics.Point; -import android.graphics.RectF; -import android.net.Uri; -import android.os.Build; -import android.webkit.URLUtil; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.WindowHelper; - -import candybar.lib.R; -import candybar.lib.items.ImageSize; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class WallpaperHelper { - - public static final int UNKNOWN = 0; - public static final int CLOUD_WALLPAPERS = 1; - public static final int EXTERNAL_APP = 2; - - public static int getWallpaperType(@NonNull Context context) { - String url = context.getResources().getString(R.string.wallpaper_json); - if (URLUtil.isValidUrl(url)) { - return CLOUD_WALLPAPERS; - } else if (url.length() > 0) { - return EXTERNAL_APP; - } - return UNKNOWN; - } - - public static void launchExternalApp(@NonNull Context context) { - String packageName = context.getResources().getString(R.string.wallpaper_json); - - PackageManager pm = context.getPackageManager(); - Intent intent = pm.getLaunchIntentForPackage(packageName); - if (intent != null) { - try { - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - context.startActivity(intent); - return; - } catch (Exception ignored) { - } - } - - try { - Intent store = new Intent(Intent.ACTION_VIEW, Uri.parse( - "https://play.google.com/store/apps/details?id=" + packageName)); - context.startActivity(store); - } catch (ActivityNotFoundException ignored) { - } - } - - public static String getFormat(String mimeType) { - if (mimeType == null) return "jpg"; - if ("image/png".equals(mimeType)) { - return "png"; - } - return "jpg"; - } - - public static ImageSize getTargetSize(@NonNull Context context) { - Point point = WindowHelper.getScreenSize(context); - int targetHeight = point.y; - int targetWidth = point.x; - - if (context.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { - targetHeight = point.x; - targetWidth = point.y; - } - - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { - int statusBarHeight = WindowHelper.getStatusBarHeight(context); - int navBarHeight = WindowHelper.getNavigationBarHeight(context); - targetHeight += (statusBarHeight + navBarHeight); - } - - return new ImageSize(targetWidth, targetHeight); - } - - @Nullable - public static RectF getScaledRectF(@Nullable RectF rectF, float heightFactor, float widthFactor) { - if (rectF == null) return null; - - RectF scaledRectF = new RectF(rectF); - scaledRectF.top *= heightFactor; - scaledRectF.bottom *= heightFactor; - scaledRectF.left *= widthFactor; - scaledRectF.right *= widthFactor; - return scaledRectF; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Credit.java b/libs/candybar/src/main/java/candybar/lib/items/Credit.java deleted file mode 100644 index 2cff81e..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Credit.java +++ /dev/null @@ -1,50 +0,0 @@ -package candybar.lib.items; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Credit { - - private final String mName; - private final String mContribution; - private final String mImage; - private final String mLink; - - public Credit(String name, String contribution, String image, String link) { - mName = name; - mContribution = contribution; - mImage = image; - mLink = link; - } - - public String getName() { - return mName; - } - - public String getContribution() { - return mContribution; - } - - public String getImage() { - return mImage; - } - - public String getLink() { - return mLink; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/FAQs.java b/libs/candybar/src/main/java/candybar/lib/items/FAQs.java deleted file mode 100644 index 4da8e56..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/FAQs.java +++ /dev/null @@ -1,39 +0,0 @@ -package candybar.lib.items; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class FAQs { - - private final String mQuestion; - private final String mAnswer; - - public FAQs(String question, String answer) { - mQuestion = question; - mAnswer = answer; - } - - public String getQuestion() { - return mQuestion; - } - - public String getAnswer() { - return mAnswer; - } - -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Home.java b/libs/candybar/src/main/java/candybar/lib/items/Home.java deleted file mode 100644 index 0e095a7..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Home.java +++ /dev/null @@ -1,103 +0,0 @@ -package candybar.lib.items; - -import android.graphics.Point; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Home { - - private final int mIcon; - private String mTitle; - private final String mSubtitle; - private final Home.Type mType; - private boolean mLoading; - - public Home(@DrawableRes int icon, String title, String subtitle, @NonNull Home.Type type, boolean loading) { - mIcon = icon; - mTitle = title; - mSubtitle = subtitle; - mType = type; - mLoading = loading; - } - - @DrawableRes - public int getIcon() { - return mIcon; - } - - public String getTitle() { - return mTitle; - } - - public String getSubtitle() { - return mSubtitle; - } - - public Home.Type getType() { - return mType; - } - - public boolean isLoading() { - return mLoading; - } - - public void setTitle(String title) { - mTitle = title; - } - - public void setLoading(boolean loading) { - mLoading = loading; - } - - public enum Type { - APPLY, - DONATE, - ICONS, - DIMENSION - } - - public static class Style { - - private final Point mPoint; - private final Home.Style.Type mType; - - public Style(@NonNull Point point, @NonNull Home.Style.Type type) { - mPoint = point; - mType = type; - } - - public Point getPoint() { - return mPoint; - } - - public Type getType() { - return mType; - } - - public enum Type { - CARD_SQUARE, - CARD_LANDSCAPE, - SQUARE, - LANDSCAPE - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Icon.java b/libs/candybar/src/main/java/candybar/lib/items/Icon.java deleted file mode 100644 index 2192cc5..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Icon.java +++ /dev/null @@ -1,106 +0,0 @@ -package candybar.lib.items; - -import androidx.annotation.NonNull; - -import java.util.List; - -import candybar.lib.utils.AlphanumComparator; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Icon { - - private String mDrawableName; - private String mCustomName; - private String mTitle; - private int mRes; - private String mPackageName; - private List mIcons; - - public Icon(String drawableName, String customName, int res) { - mDrawableName = drawableName; - mCustomName = customName; - mRes = res; - } - - public Icon(String title, int res, String packageName) { - mTitle = title; - mRes = res; - mPackageName = packageName; - } - - public Icon(String title, @NonNull List icons) { - mTitle = title; - mIcons = icons; - } - - public String getDrawableName() { - return mDrawableName; - } - - public String getCustomName() { - return mCustomName; - } - - public Icon setTitle(String title) { - mTitle = title; - return this; - } - - public String getTitle() { - return mTitle; - } - - public int getRes() { - return mRes; - } - - public String getPackageName() { - return mPackageName; - } - - @NonNull - public List getIcons() { - return mIcons; - } - - public void setIcons(List icons) { - mIcons = icons; - } - - @Override - public boolean equals(Object object) { - boolean res = false; - boolean title = false; - if (object instanceof Icon) { - res = mRes == ((Icon) object).getRes(); - title = mTitle.equals(((Icon) object).getTitle()); - } - return res && title; - } - - public static final AlphanumComparator TitleComparator = new AlphanumComparator() { - @Override - public int compare(Object o1, Object o2) { - String s1 = ((Icon) o1).getTitle(); - String s2 = ((Icon) o2).getTitle(); - return super.compare(s1, s2); - } - }; -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/IconShape.java b/libs/candybar/src/main/java/candybar/lib/items/IconShape.java deleted file mode 100644 index 8fc57f0..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/IconShape.java +++ /dev/null @@ -1,38 +0,0 @@ -package candybar.lib.items; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconShape { - - private final String mName; - private final int mShape; - - public IconShape(String name, int shape) { - mName = name; - mShape = shape; - } - - public String getName() { - return mName; - } - - public int getShape() { - return mShape; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/ImageSize.java b/libs/candybar/src/main/java/candybar/lib/items/ImageSize.java deleted file mode 100644 index 94778aa..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/ImageSize.java +++ /dev/null @@ -1,11 +0,0 @@ -package candybar.lib.items; - -public class ImageSize { - public final int width; - public final int height; - - public ImageSize(int width, int height) { - this.width = width; - this.height = height; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/InAppBilling.java b/libs/candybar/src/main/java/candybar/lib/items/InAppBilling.java deleted file mode 100644 index 4c16954..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/InAppBilling.java +++ /dev/null @@ -1,26 +0,0 @@ -package candybar.lib.items; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import androidx.annotation.NonNull; - - -public class InAppBilling { - -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/IntentChooser.java b/libs/candybar/src/main/java/candybar/lib/items/IntentChooser.java deleted file mode 100644 index a45eeb2..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/IntentChooser.java +++ /dev/null @@ -1,45 +0,0 @@ -package candybar.lib.items; - -import android.content.pm.ResolveInfo; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IntentChooser { - - private final ResolveInfo mApp; - private final int mType; - - public static final int TYPE_SUPPORTED = 0; - public static final int TYPE_RECOMMENDED = 1; - public static final int TYPE_NOT_SUPPORTED = 2; - - public IntentChooser(ResolveInfo app, int type) { - mApp = app; - mType = type; - } - - public ResolveInfo getApp() { - return mApp; - } - - public int getType() { - return mType; - } - -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Language.java b/libs/candybar/src/main/java/candybar/lib/items/Language.java deleted file mode 100644 index 59e1b84..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Language.java +++ /dev/null @@ -1,40 +0,0 @@ -package candybar.lib.items; - -import java.util.Locale; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Language { - - private final String mName; - private final Locale mLocale; - - public Language(String name, Locale locale) { - mName = name; - mLocale = locale; - } - - public String getName() { - return mName; - } - - public Locale getLocale() { - return mLocale; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/PopupItem.java b/libs/candybar/src/main/java/candybar/lib/items/PopupItem.java deleted file mode 100644 index 258a95e..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/PopupItem.java +++ /dev/null @@ -1,141 +0,0 @@ -package candybar.lib.items; - -import android.content.Context; -import android.os.Build; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.preferences.Preferences; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class PopupItem { - - private final String mTitle; - private int mIcon; - private boolean mShowCheckbox; - private boolean mCheckboxValue; - private boolean mIsSelected; - private Type mType; - - public PopupItem(String title) { - mTitle = title; - mShowCheckbox = false; - mCheckboxValue = false; - mIsSelected = false; - } - - public PopupItem setIcon(@DrawableRes int icon) { - mIcon = icon; - return this; - } - - public PopupItem setShowCheckbox(boolean showCheckbox) { - mShowCheckbox = showCheckbox; - return this; - } - - public PopupItem setCheckboxValue(boolean checkboxValue) { - mCheckboxValue = checkboxValue; - return this; - } - - public PopupItem setSelected(boolean selected) { - mIsSelected = selected; - return this; - } - - public PopupItem setType(Type type) { - mType = type; - return this; - } - - public String getTitle() { - return mTitle; - } - - @DrawableRes - public int getIcon() { - return mIcon; - } - - public boolean isShowCheckbox() { - return mShowCheckbox; - } - - public boolean getCheckboxValue() { - return mCheckboxValue; - } - - public boolean isSelected() { - return mIsSelected; - } - - public Type getType() { - return mType; - } - - public enum Type { - WALLPAPER_CROP, - HOMESCREEN, - LOCKSCREEN, - HOMESCREEN_LOCKSCREEN, - DOWNLOAD - } - - public static List getApplyItems(@NonNull Context context) { - List items = new ArrayList<>(); - - //Todo: wait until google fix the issue, then enable wallpaper crop again on API 26+ - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { - items.add(new PopupItem(context.getResources().getString(R.string.menu_wallpaper_crop)) - .setType(Type.WALLPAPER_CROP) - .setCheckboxValue(Preferences.get(context).isCropWallpaper()) - .setShowCheckbox(true)); - } - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - items.add(new PopupItem(context.getResources().getString(R.string.menu_apply_lockscreen)) - .setType(Type.LOCKSCREEN) - .setIcon(R.drawable.ic_toolbar_lockscreen)); - } - - items.add(new PopupItem(context.getResources().getString(R.string.menu_apply_homescreen)) - .setType(Type.HOMESCREEN) - .setIcon(R.drawable.ic_toolbar_homescreen)); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - items.add(new PopupItem(context.getResources().getString(R.string.menu_apply_homescreen_lockscreen)) - .setType(Type.HOMESCREEN_LOCKSCREEN) - .setIcon(R.drawable.ic_toolbar_homescreen_lockscreen)); - } - - if (context.getResources().getBoolean(R.bool.enable_wallpaper_download)) { - items.add(new PopupItem(context.getResources().getString(R.string.menu_save)) - .setType(Type.DOWNLOAD) - .setIcon(R.drawable.ic_toolbar_download)); - } - return items; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Preset.java b/libs/candybar/src/main/java/candybar/lib/items/Preset.java deleted file mode 100644 index eb8cbce..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Preset.java +++ /dev/null @@ -1,37 +0,0 @@ -package candybar.lib.items; - -import java.util.ArrayList; -import java.util.List; - -public class Preset { - private final String mPath; - private final String mHeaderText; - - public Preset(String path, String headerText) { - mPath = path; - mHeaderText = headerText; - } - - public String getPath() { - return mPath; - } - - public String getHeaderText() { - return mHeaderText; - } - - public boolean isHeader() { - return mHeaderText != null; - } - - public static List sectioned(String sectionName, String[] paths) { - List presets = new ArrayList<>(); - presets.add(new Preset(null, sectionName)); - - for (String path : paths) { - presets.add(new Preset(path, null)); - } - - return presets; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Request.java b/libs/candybar/src/main/java/candybar/lib/items/Request.java deleted file mode 100644 index 01ac9fd..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Request.java +++ /dev/null @@ -1,189 +0,0 @@ -package candybar.lib.items; - -import android.content.ComponentName; - -import androidx.annotation.Nullable; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Request { - - private final String mName; - private final String mActivity; - private String mPackageName; - private String mOrderId; - private String mProductId; - private String mRequestedOn; - private boolean mRequested; - - private Request(String name, String activity) { - mName = name; - mActivity = activity; - } - - public String getName() { - return mName; - } - - @Nullable - public String getPackageName() { - if (mPackageName == null) { - if (mActivity.length() > 0) { - return mActivity.substring(0, mActivity.lastIndexOf("/")); - } - } - return mPackageName; - } - - public String getActivity() { - return mActivity; - } - - public boolean isRequested() { - return mRequested; - } - - public String getOrderId() { - return mOrderId; - } - - public String getProductId() { - return mProductId; - } - - public String getRequestedOn() { - return mRequestedOn; - } - - public void setPackageName(String packageName) { - mPackageName = packageName; - } - - public void setOrderId(String orderId) { - mOrderId = orderId; - } - - public void setProductId(String productId) { - mProductId = productId; - } - - public void setRequestedOn(String requestedOn) { - mRequestedOn = requestedOn; - } - - public void setRequested(boolean requested) { - mRequested = requested; - } - - public static Builder Builder() { - return new Builder(); - } - - public static class Builder { - - private String mName; - private String mActivity; - private String mPackageName; - private String mOrderId; - private String mProductId; - private String mRequestedOn; - private boolean mRequested; - - private Builder() { - mName = ""; - mActivity = ""; - mRequested = false; - } - - public Builder name(String name) { - mName = name; - return this; - } - - public Builder activity(String activity) { - mActivity = activity; - return this; - } - - public Builder packageName(String packageName) { - mPackageName = packageName; - return this; - } - - public Builder orderId(String orderId) { - mOrderId = orderId; - return this; - } - - public Builder productId(String productId) { - mProductId = productId; - return this; - } - - public Builder requestedOn(String requestedOn) { - mRequestedOn = requestedOn; - return this; - } - - public Builder requested(boolean requested) { - mRequested = requested; - return this; - } - - public Request build() { - Request request = new Request(mName, mActivity); - request.setPackageName(mPackageName); - request.setRequestedOn(mRequestedOn); - request.setRequested(mRequested); - request.setOrderId(mOrderId); - request.setProductId(mProductId); - return request; - } - } - - public static class Property { - - private ComponentName componentName; - private final String orderId; - private final String productId; - - public Property(ComponentName componentName, String orderId, String productId) { - this.componentName = componentName; - this.orderId = orderId; - this.productId = productId; - } - - @Nullable - public ComponentName getComponentName() { - return componentName; - } - - public String getOrderId() { - return orderId; - } - - public String getProductId() { - return productId; - } - - public void setComponentName(ComponentName componentName) { - this.componentName = componentName; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Setting.java b/libs/candybar/src/main/java/candybar/lib/items/Setting.java deleted file mode 100644 index 360089b..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Setting.java +++ /dev/null @@ -1,84 +0,0 @@ -package candybar.lib.items; - -import androidx.annotation.DrawableRes; -import androidx.annotation.NonNull; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Setting { - - private final int mIcon; - private final String mTitle; - private final String mSubtitle; - private final String mContent; - private String mFooter; - private final Setting.Type mType; - - public Setting(@DrawableRes int icon, String title, String subtitle, String content, String footer, - @NonNull Setting.Type type) { - mIcon = icon; - mTitle = title; - mSubtitle = subtitle; - mContent = content; - mFooter = footer; - mType = type; - } - - @DrawableRes - public int getIcon() { - return mIcon; - } - - public String getTitle() { - return mTitle; - } - - public String getSubtitle() { - return mSubtitle; - } - - public String getContent() { - return mContent; - } - - public String getFooter() { - return mFooter; - } - - public Setting.Type getType() { - return mType; - } - - public void setFooter(String footer) { - mFooter = footer; - } - - public enum Type { - HEADER, - CACHE, - ICON_REQUEST, - RESTORE, - PREMIUM_REQUEST, - THEME, - LANGUAGE, - REPORT_BUGS, - CHANGELOG, - RESET_TUTORIAL - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Theme.java b/libs/candybar/src/main/java/candybar/lib/items/Theme.java deleted file mode 100644 index bf42085..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Theme.java +++ /dev/null @@ -1,23 +0,0 @@ -package candybar.lib.items; - -import android.content.Context; - -import androidx.annotation.StringRes; - -import candybar.lib.R; - -public enum Theme { - AUTO(R.string.theme_name_auto), - LIGHT(R.string.theme_name_light), - DARK(R.string.theme_name_dark); - - private final int nameStringRes; - - Theme(@StringRes int nameRes) { - nameStringRes = nameRes; - } - - public String displayName(Context context) { - return context.getResources().getString(nameStringRes); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/items/Wallpaper.java b/libs/candybar/src/main/java/candybar/lib/items/Wallpaper.java deleted file mode 100644 index 74a2a25..0000000 --- a/libs/candybar/src/main/java/candybar/lib/items/Wallpaper.java +++ /dev/null @@ -1,171 +0,0 @@ -package candybar.lib.items; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Wallpaper { - - private final String mUrl; - private final String mThumbUrl; - private final String mAuthor; - private String mName; - private int mColor; - private int mSize; - private String mMimeType; - private ImageSize mDimensions; - - private Wallpaper(String name, String author, String url, String thumbUrl) { - mName = name; - mAuthor = author; - mUrl = url; - mThumbUrl = thumbUrl; - } - - public String getName() { - return mName; - } - - public String getAuthor() { - return mAuthor; - } - - public String getThumbUrl() { - return mThumbUrl; - } - - public String getURL() { - return mUrl; - } - - public int getColor() { - return mColor; - } - - public String getMimeType() { - return mMimeType; - } - - public ImageSize getDimensions() { - return mDimensions; - } - - public int getSize() { - return mSize; - } - - public void setName(String name) { - mName = name; - } - - public void setColor(int color) { - mColor = color; - } - - public void setMimeType(String mimeType) { - mMimeType = mimeType; - } - - public void setDimensions(ImageSize dimensions) { - mDimensions = dimensions; - } - - public void setSize(int size) { - mSize = size; - } - - @Override - public boolean equals(Object object) { - boolean equals = false; - if (object instanceof Wallpaper) { - equals = mAuthor.equals(((Wallpaper) object).getAuthor()) && - mUrl.equals(((Wallpaper) object).getURL()) && - mThumbUrl.equals(((Wallpaper) object).getThumbUrl()); - } - return equals; - } - - public static Builder Builder() { - return new Builder(); - } - - public static class Builder { - - private String mName; - private String mAuthor; - private String mThumbUrl; - private String mUrl; - private int mColor; - private int mSize; - private String mMimeType; - private ImageSize mDimensions; - - private Builder() { - mColor = 0; - mSize = 0; - } - - public Builder name(String name) { - mName = name; - return this; - } - - public Builder author(String author) { - mAuthor = author; - return this; - } - - public Builder url(String url) { - mUrl = url; - return this; - } - - public Builder thumbUrl(String thumbUrl) { - mThumbUrl = thumbUrl; - return this; - } - - public Builder dimensions(ImageSize dimensions) { - mDimensions = dimensions; - return this; - } - - public Builder mimeType(String mimeType) { - mMimeType = mimeType; - return this; - } - - public Builder color(int color) { - mColor = color; - return this; - } - - public Builder size(int size) { - mSize = size; - return this; - } - - public Wallpaper build() { - Wallpaper wallpaper = new Wallpaper(mName, mAuthor, mUrl, mThumbUrl); - wallpaper.setDimensions(mDimensions); - wallpaper.setMimeType(mMimeType); - wallpaper.setColor(mColor); - wallpaper.setSize(mSize); - return wallpaper; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/preferences/Preferences.java b/libs/candybar/src/main/java/candybar/lib/preferences/Preferences.java deleted file mode 100644 index a32e440..0000000 --- a/libs/candybar/src/main/java/candybar/lib/preferences/Preferences.java +++ /dev/null @@ -1,385 +0,0 @@ -package candybar.lib.preferences; - -import android.content.Context; -import android.content.SharedPreferences; -import android.content.pm.PackageManager; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; - -import androidx.annotation.NonNull; - -import java.lang.ref.WeakReference; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.ThemeHelper; -import candybar.lib.items.Language; -import candybar.lib.items.Theme; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Preferences { - - private final Context mContext; - - private static final String PREFERENCES_NAME = "candybar_preferences"; - - private static final String KEY_FIRST_RUN = "first_run"; - private static final String KEY_THEME = "theme"; - private static final String KEY_ICON_SHAPE = "icon_shape"; - private static final String KEY_APP_VERSION = "app_version"; - private static final String KEY_WIFI_ONLY = "wifi_only"; - private static final String KEY_WALLS_DIRECTORY = "wallpaper_directory"; - private static final String KEY_PREMIUM_REQUEST = "premium_request"; - private static final String KEY_PREMIUM_REQUEST_PRODUCT = "premium_request_product"; - private static final String KEY_PREMIUM_REQUEST_COUNT = "premium_request_count"; - private static final String KEY_PREMIUM_REQUEST_TOTAL = "premium_request_total"; - private static final String KEY_REGULAR_REQUEST_USED = "regular_request_used"; - private static final String KEY_INAPP_BILLING_TYPE = "inapp_billing_type"; - private static final String KEY_LICENSED = "licensed"; - private static final String KEY_LATEST_CRASHLOG = "last_crashlog"; - private static final String KEY_PREMIUM_REQUEST_ENABLED = "premium_request_enabled"; - private static final String KEY_AVAILABLE_WALLPAPERS_COUNT = "available_wallpapers_count"; - private static final String KEY_CROP_WALLPAPER = "crop_wallpaper"; - private static final String KEY_HOME_INTRO = "home_intro"; - private static final String KEY_ICONS_INTRO = "icons_intro"; - private static final String KEY_REQUEST_INTRO = "request_intro"; - private static final String KEY_WALLPAPERS_INTRO = "wallpapers_intro"; - private static final String KEY_WALLPAPER_PREVIEW_INTRO = "wallpaper_preview_intro"; - - private static final String KEY_LANGUAGE_PREFERENCE = "language_preference"; - private static final String KEY_CURRENT_LOCALE = "current_locale"; - - private static WeakReference mPreferences; - - @NonNull - public static Preferences get(@NonNull Context context) { - if (mPreferences == null || mPreferences.get() == null) { - mPreferences = new WeakReference<>(new Preferences(context)); - } - return mPreferences.get(); - } - - private Preferences(Context context) { - mContext = context; - } - - private SharedPreferences getSharedPreferences() { - return mContext.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE); - } - - public void clearPreferences() { - boolean isLicensed = isLicensed(); - getSharedPreferences().edit().clear().apply(); - - if (isLicensed) { - setFirstRun(false); - setLicensed(true); - } - } - - public boolean isFirstRun() { - return getSharedPreferences().getBoolean(KEY_FIRST_RUN, true); - } - - public void setFirstRun(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_FIRST_RUN, bool).apply(); - } - - public void setIconShape(int shape) { - getSharedPreferences().edit().putInt(KEY_ICON_SHAPE, shape).apply(); - } - - public int getIconShape() { - return getSharedPreferences().getInt(KEY_ICON_SHAPE, -1); // -1 is System default - } - - public boolean isTimeToShowHomeIntro() { - return getSharedPreferences().getBoolean(KEY_HOME_INTRO, true); - } - - public void setTimeToShowHomeIntro(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_HOME_INTRO, bool).apply(); - } - - public boolean isTimeToShowIconsIntro() { - return getSharedPreferences().getBoolean(KEY_ICONS_INTRO, true); - } - - public void setTimeToShowIconsIntro(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_ICONS_INTRO, bool).apply(); - } - - public boolean isTimeToShowRequestIntro() { - return getSharedPreferences().getBoolean(KEY_REQUEST_INTRO, true); - } - - public void setTimeToShowRequestIntro(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_REQUEST_INTRO, bool).apply(); - } - - public boolean isTimeToShowWallpapersIntro() { - return getSharedPreferences().getBoolean(KEY_WALLPAPERS_INTRO, true); - } - - public void setTimeToShowWallpapersIntro(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_WALLPAPERS_INTRO, bool).apply(); - } - - public boolean isTimeToShowWallpaperPreviewIntro() { - return getSharedPreferences().getBoolean(KEY_WALLPAPER_PREVIEW_INTRO, true); - } - - public void setTimeToShowWallpaperPreviewIntro(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_WALLPAPER_PREVIEW_INTRO, bool).apply(); - } - - public Theme getTheme() { - return Theme.values()[getSharedPreferences().getInt(KEY_THEME, ThemeHelper.getDefaultTheme(mContext).ordinal())]; - } - - public void setTheme(Theme theme) { - getSharedPreferences().edit().putInt(KEY_THEME, theme.ordinal()).apply(); - } - - public boolean isToolbarShadowEnabled() { - return CandyBarApplication.getConfiguration().getShadowOptions().isToolbarEnabled(); - } - - public boolean isCardShadowEnabled() { - return CandyBarApplication.getConfiguration().getShadowOptions().isCardEnabled(); - } - - public boolean isFabShadowEnabled() { - return CandyBarApplication.getConfiguration().getShadowOptions().isFabEnabled(); - } - - public boolean isTapIntroShadowEnabled() { - return CandyBarApplication.getConfiguration().getShadowOptions().isTapIntroEnabled(); - } - - public boolean isWifiOnly() { - return getSharedPreferences().getBoolean(KEY_WIFI_ONLY, false); - } - - public String getWallsDirectory() { - return getSharedPreferences().getString(KEY_WALLS_DIRECTORY, ""); - } - - public boolean isPremiumRequestEnabled() { - return getSharedPreferences().getBoolean(KEY_PREMIUM_REQUEST_ENABLED, - mContext.getResources().getBoolean(R.bool.enable_premium_request)); - } - - public void setPremiumRequestEnabled(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_PREMIUM_REQUEST_ENABLED, bool).apply(); - } - - public boolean isPremiumRequest() { - return getSharedPreferences().getBoolean(KEY_PREMIUM_REQUEST, false); - } - - public void setPremiumRequest(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_PREMIUM_REQUEST, bool).apply(); - } - - public String getPremiumRequestProductId() { - return getSharedPreferences().getString(KEY_PREMIUM_REQUEST_PRODUCT, ""); - } - - public void setPremiumRequestProductId(String productId) { - getSharedPreferences().edit().putString(KEY_PREMIUM_REQUEST_PRODUCT, productId).apply(); - } - - public int getPremiumRequestCount() { - return getSharedPreferences().getInt(KEY_PREMIUM_REQUEST_COUNT, 0); - } - - public void setPremiumRequestCount(int count) { - getSharedPreferences().edit().putInt(KEY_PREMIUM_REQUEST_COUNT, count).apply(); - } - - public int getPremiumRequestTotal() { - int count = getPremiumRequestCount(); - return getSharedPreferences().getInt(KEY_PREMIUM_REQUEST_TOTAL, count); - } - - public void setPremiumRequestTotal(int count) { - getSharedPreferences().edit().putInt(KEY_PREMIUM_REQUEST_TOTAL, count).apply(); - } - - public int getRegularRequestUsed() { - return getSharedPreferences().getInt(KEY_REGULAR_REQUEST_USED, 0); - } - - public boolean isRegularRequestLimit() { - return mContext.getResources().getBoolean(R.bool.enable_icon_request_limit); - } - - public void setRegularRequestUsed(int used) { - getSharedPreferences().edit().putInt(KEY_REGULAR_REQUEST_USED, used).apply(); - } - - public int getInAppBillingType() { - return getSharedPreferences().getInt(KEY_INAPP_BILLING_TYPE, -1); - } - - public void setInAppBillingType(int type) { - getSharedPreferences().edit().putInt(KEY_INAPP_BILLING_TYPE, type).apply(); - } - - public boolean isLicensed() { - return getSharedPreferences().getBoolean(KEY_LICENSED, false); - } - - public void setLicensed(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_LICENSED, bool).apply(); - } - - public boolean isCropWallpaper() { - return getSharedPreferences().getBoolean(KEY_CROP_WALLPAPER, false); - } - - public void setCropWallpaper(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_CROP_WALLPAPER, bool).apply(); - } - - public String getLatestCrashLog() { - return getSharedPreferences().getString(KEY_LATEST_CRASHLOG, ""); - } - - public void setLatestCrashLog(String string) { - getSharedPreferences().edit().putString(KEY_LATEST_CRASHLOG, string).apply(); - } - - public int getAvailableWallpapersCount() { - return getSharedPreferences().getInt(KEY_AVAILABLE_WALLPAPERS_COUNT, 0); - } - - public void setAvailableWallpapersCount(int count) { - getSharedPreferences().edit().putInt(KEY_AVAILABLE_WALLPAPERS_COUNT, count).apply(); - } - - public boolean isPlayStoreCheckEnabled() { - return mContext.getResources().getBoolean(R.bool.playstore_check_enabled); - } - - private int getVersion() { - return getSharedPreferences().getInt(KEY_APP_VERSION, 0); - } - - private void setVersion(int version) { - getSharedPreferences().edit().putInt(KEY_APP_VERSION, version).apply(); - } - - public boolean isNewVersion() { - int version = 0; - try { - version = mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0).versionCode; - } catch (PackageManager.NameNotFoundException ignored) { - } - if (version > getVersion()) { - boolean resetLimit = mContext.getResources().getBoolean(R.bool.reset_icon_request_limit); - if (resetLimit) setRegularRequestUsed(0); - setVersion(version); - return true; - } else { - return false; - } - } - - public Locale getCurrentLocale() { - String code = getSharedPreferences().getString(KEY_CURRENT_LOCALE, "en_US"); - return LocaleHelper.getLocale(code); - } - - public void setCurrentLocale(String code) { - getSharedPreferences().edit().putString(KEY_CURRENT_LOCALE, code).apply(); - } - - public boolean isTimeToSetLanguagePreference() { - return getSharedPreferences().getBoolean(KEY_LANGUAGE_PREFERENCE, true); - } - - private void setTimeToSetLanguagePreference(boolean bool) { - getSharedPreferences().edit().putBoolean(KEY_LANGUAGE_PREFERENCE, bool).apply(); - } - - public void setLanguagePreference() { - Locale locale = Locale.getDefault(); - List languages = LocaleHelper.getAvailableLanguages(mContext); - - Locale currentLocale = null; - for (Language language : languages) { - Locale l = language.getLocale(); - if (locale.toString().equals(l.toString())) { - currentLocale = l; - break; - } - } - - if (currentLocale == null) { - for (Language language : languages) { - Locale l = language.getLocale(); - if (locale.getLanguage().equals(l.getLanguage())) { - currentLocale = l; - break; - } - } - } - - if (currentLocale != null) { - setCurrentLocale(currentLocale.toString()); - LocaleHelper.setLocale(mContext); - setTimeToSetLanguagePreference(false); - } - } - - public boolean isConnectedToNetwork() { - try { - ConnectivityManager connectivityManager = (ConnectivityManager) - mContext.getSystemService(Context.CONNECTIVITY_SERVICE); - assert connectivityManager != null; - NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); - return activeNetworkInfo != null && activeNetworkInfo.isConnected(); - } catch (Exception e) { - return false; - } - } - - public boolean isConnectedAsPreferred() { - try { - if (isWifiOnly()) { - ConnectivityManager connectivityManager = (ConnectivityManager) - mContext.getSystemService(Context.CONNECTIVITY_SERVICE); - assert connectivityManager != null; - NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo(); - assert activeNetworkInfo != null; - return activeNetworkInfo.getType() == ConnectivityManager.TYPE_WIFI && - activeNetworkInfo.isConnected(); - } - return true; - } catch (Exception e) { - return false; - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/services/CandyBarArtWorker.java b/libs/candybar/src/main/java/candybar/lib/services/CandyBarArtWorker.java deleted file mode 100644 index 2d937c6..0000000 --- a/libs/candybar/src/main/java/candybar/lib/services/CandyBarArtWorker.java +++ /dev/null @@ -1,96 +0,0 @@ -package candybar.lib.services; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.net.Uri; -import android.webkit.URLUtil; - -import androidx.annotation.NonNull; -import androidx.work.Constraints; -import androidx.work.NetworkType; -import androidx.work.OneTimeWorkRequest; -import androidx.work.WorkManager; -import androidx.work.WorkRequest; -import androidx.work.Worker; -import androidx.work.WorkerParameters; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.google.android.apps.muzei.api.provider.Artwork; -import com.google.android.apps.muzei.api.provider.ProviderClient; -import com.google.android.apps.muzei.api.provider.ProviderContract; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.databases.Database; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; - -@SuppressLint("NewApi") -public class CandyBarArtWorker extends Worker { - private final String WORKER_TAG = this.getApplicationContext().getPackageName() + ".ArtProvider"; - private final Context mContext = getApplicationContext(); - - public CandyBarArtWorker(@NonNull Context context, @NonNull WorkerParameters params) { - super(context, params); - } - - public static void enqueueLoad(Context context) { - WorkManager manager = WorkManager.getInstance(context); - Constraints constraints = new Constraints.Builder() - .setRequiredNetworkType(NetworkType.CONNECTED) - .build(); - WorkRequest request = new OneTimeWorkRequest.Builder(CandyBarArtWorker.class) - .setConstraints(constraints) - .build(); - manager.enqueue(request); - } - - - @Override - @NonNull - public Result doWork() { - LogUtil.d("Executing doWork() for Muzei"); - if (!URLUtil.isValidUrl(mContext.getString(R.string.wallpaper_json))) { - LogUtil.e("Not a valid Wallpaper JSON URL"); - return Result.failure(); - } - - List wallpapers = Database.get(mContext).getWallpapers(null); - - ProviderClient providerClient = ProviderContract.getProviderClient(getApplicationContext(), WORKER_TAG); - - if (Preferences.get(getApplicationContext()).isConnectedAsPreferred()) { - ArrayList artworks = new ArrayList<>(); - - for (Wallpaper wallpaper : wallpapers) { - if (wallpaper != null) { - Uri uri = Uri.parse(wallpaper.getURL()); - - Artwork artwork = new Artwork.Builder() - .title(wallpaper.getName()) - .byline(wallpaper.getAuthor()) - .persistentUri(uri) - .build(); - - if (!artworks.contains(artwork)) { - artworks.add(artwork); - } else { - LogUtil.d("Already Contains Artwork" + wallpaper.getName()); - } - } else { - LogUtil.d("Wallpaper is Null"); - } - } - - LogUtil.d("Closing Database - Muzei"); - Database.get(mContext).closeDatabase(); - - providerClient.setArtwork(artworks); - return Result.success(); - } - - return Result.failure(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/services/CandyBarMuzeiService.java b/libs/candybar/src/main/java/candybar/lib/services/CandyBarMuzeiService.java deleted file mode 100644 index ae73ae9..0000000 --- a/libs/candybar/src/main/java/candybar/lib/services/CandyBarMuzeiService.java +++ /dev/null @@ -1,32 +0,0 @@ -package candybar.lib.services; - -import com.google.android.apps.muzei.api.provider.MuzeiArtProvider; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class CandyBarMuzeiService extends MuzeiArtProvider { - - public CandyBarMuzeiService() { - } - - @Override - public void onLoadRequested(boolean initial) { - CandyBarArtWorker.enqueueLoad(getContext()); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/services/CandyBarService.java b/libs/candybar/src/main/java/candybar/lib/services/CandyBarService.java deleted file mode 100644 index a4d349c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/services/CandyBarService.java +++ /dev/null @@ -1,46 +0,0 @@ -package candybar.lib.services; - -import android.app.Service; -import android.content.Intent; -import android.os.IBinder; - -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import candybar.lib.databases.Database; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class CandyBarService extends Service { - - @Nullable - @Override - public IBinder onBind(Intent intent) { - return null; - } - - @Override - public void onTaskRemoved(Intent rootIntent) { - LogUtil.d("App removed from recent task, database connection closed"); - Database.get(this).closeDatabase(); - - stopSelf(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/services/CandyBarWidgetService.java b/libs/candybar/src/main/java/candybar/lib/services/CandyBarWidgetService.java deleted file mode 100644 index 9afd4d3..0000000 --- a/libs/candybar/src/main/java/candybar/lib/services/CandyBarWidgetService.java +++ /dev/null @@ -1,30 +0,0 @@ -package candybar.lib.services; - -import android.app.PendingIntent; -import android.appwidget.AppWidgetManager; -import android.appwidget.AppWidgetProvider; -import android.content.Context; -import android.content.Intent; -import android.os.Build; -import android.provider.AlarmClock; -import android.widget.RemoteViews; - -import candybar.lib.R; - -public class CandyBarWidgetService extends AppWidgetProvider { - - public void onReceive(Context context, Intent intent) { - String act = intent.getAction(); - if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(act)) { - RemoteViews clockView = new RemoteViews(context.getPackageName(), R.layout.analog_clock); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { - Intent clockIntent = new Intent(AlarmClock.ACTION_SHOW_ALARMS); - clockIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - clockView.setOnClickPendingIntent(R.id.analog_clock, PendingIntent.getActivity(context, 0, clockIntent, 0)); - } - - AppWidgetManager.getInstance(context).updateAppWidget(intent.getIntArrayExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS), clockView); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/IconRequestBuilderTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/IconRequestBuilderTask.java deleted file mode 100644 index ccd03d1..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/IconRequestBuilderTask.java +++ /dev/null @@ -1,235 +0,0 @@ -package candybar.lib.tasks; - -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.applications.CandyBarApplication.Configuration.EmailBodyGenerator; -import candybar.lib.databases.Database; -import candybar.lib.fragments.RequestFragment; -import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.DeviceHelper; -import candybar.lib.items.Request; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.Extras; -import candybar.lib.utils.listeners.RequestListener; -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconRequestBuilderTask extends AsyncTaskBase { - - private final WeakReference mContext; - private final WeakReference mCallback; - private String mEmailBody; - private Extras.Error mError; - - public IconRequestBuilderTask(@NonNull Context context, IconRequestBuilderCallback callback) { - mContext = new WeakReference<>(context); - mCallback = new WeakReference<>(callback); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (RequestFragment.sSelectedRequests == null) { - mError = Extras.Error.ICON_REQUEST_NULL; - return false; - } - - if (CandyBarApplication.sRequestProperty == null) { - mError = Extras.Error.ICON_REQUEST_PROPERTY_NULL; - return false; - } - - if (CandyBarApplication.sRequestProperty.getComponentName() == null) { - mError = Extras.Error.ICON_REQUEST_PROPERTY_COMPONENT_NULL; - return false; - } - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(DeviceHelper.getDeviceInfo(mContext.get())); - - if (Preferences.get(mContext.get()).isPremiumRequest()) { - if (CandyBarApplication.sRequestProperty.getOrderId() != null) { - stringBuilder.append("Order Id: ") - .append(CandyBarApplication.sRequestProperty.getOrderId()); - } - - if (CandyBarApplication.sRequestProperty.getProductId() != null) { - stringBuilder.append("\r\nProduct Id: ") - .append(CandyBarApplication.sRequestProperty.getProductId()); - } - } - - List requestsForGenerator = new ArrayList<>(); - EmailBodyGenerator emailBodyGenerator = CandyBarApplication.getConfiguration().getEmailBodyGenerator(); - boolean emailBodyGeneratorEnabled = emailBodyGenerator != null; - for (int i = 0; i < RequestFragment.sSelectedRequests.size(); i++) { - Request request = CandyBarMainActivity.sMissedApps.get(RequestFragment.sSelectedRequests.get(i)); - Database.get(mContext.get()).addRequest(null, request); - - if (Preferences.get(mContext.get()).isPremiumRequest()) { - Request premiumRequest = Request.Builder() - .name(request.getName()) - .activity(request.getActivity()) - .productId(CandyBarApplication.sRequestProperty.getProductId()) - .orderId(CandyBarApplication.sRequestProperty.getOrderId()) - .build(); - Database.get(mContext.get()).addPremiumRequest(null, premiumRequest); - } - - if (CandyBarApplication.getConfiguration().isIncludeIconRequestToEmailBody()) { - if (emailBodyGeneratorEnabled) { - requestsForGenerator.add(request); - } else { - stringBuilder.append("\r\n\r\n") - .append(request.getName()) - .append("\r\n") - .append(request.getActivity()) - .append("\r\n") - .append("https://play.google.com/store/apps/details?id=") - .append(request.getPackageName()); - } - } - } - - mEmailBody = stringBuilder.toString(); - if (emailBodyGeneratorEnabled) { - mEmailBody += "\r\n\r\n" + emailBodyGenerator.generate(requestsForGenerator); - } - return true; - } catch (Exception e) { - CandyBarApplication.sRequestProperty = null; - RequestFragment.sSelectedRequests = null; - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (ok) { - try { - if (mCallback.get() != null) - mCallback.get().onFinished(); - - RequestListener listener = (RequestListener) mContext.get(); - listener.onRequestBuilt(getIntent(CandyBarApplication.sRequestProperty - .getComponentName(), mEmailBody), - IntentChooserFragment.ICON_REQUEST); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } else { - if (mError != null) { - LogUtil.e(mError.getMessage()); - mError.showToast(mContext.get()); - } - } - } - - @Nullable - private Intent getIntent(ComponentName name, String emailBody) { - try { - Intent intent = new Intent(Intent.ACTION_SEND); - addIntentExtra(intent, emailBody); - intent.setComponent(name); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - return intent; - } catch (IllegalArgumentException e) { - try { - Intent intent = new Intent(Intent.ACTION_SEND); - addIntentExtra(intent, emailBody); - return intent; - } catch (ActivityNotFoundException e1) { - LogUtil.e(Log.getStackTraceString(e1)); - } - } - return null; - } - - private void addIntentExtra(@NonNull Intent intent, String emailBody) { - intent.setType("application/zip"); - - if (CandyBarApplication.sZipPath != null) { - File zip = new File(CandyBarApplication.sZipPath); - if (zip.exists()) { - Uri uri = FileHelper.getUriFromFile(mContext.get(), mContext.get().getPackageName(), zip); - if (uri == null) uri = Uri.fromFile(zip); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - } - } - - String appName = mContext.get().getResources().getString(R.string.app_name); - - String regularRequestSubject = mContext.get().getResources().getString(R.string.regular_request_email_subject); - // Fallback to request_email_subject - if (regularRequestSubject.length() == 0) - regularRequestSubject = mContext.get().getResources().getString(R.string.request_email_subject); - if (regularRequestSubject.length() == 0) regularRequestSubject = appName + " Icon Request"; - - String premiumRequestSubject = mContext.get().getResources().getString(R.string.premium_request_email_subject); - if (premiumRequestSubject.length() == 0) - premiumRequestSubject = appName + " Premium Icon Request"; - - String regularRequestEmail = mContext.get().getResources().getString(R.string.regular_request_email); - String premiumRequestEmail = mContext.get().getResources().getString(R.string.premium_request_email); - // Fallback to regular request email - if (premiumRequestEmail.length() == 0) premiumRequestEmail = regularRequestEmail; - - String subject = Preferences.get(mContext.get()).isPremiumRequest() ? premiumRequestSubject : regularRequestSubject; - String emailAddress = Preferences.get(mContext.get()).isPremiumRequest() ? premiumRequestEmail : regularRequestEmail; - // Fallback to dev_email - if (emailAddress.length() == 0) - emailAddress = mContext.get().getResources().getString(R.string.dev_email); - - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress}); - intent.putExtra(Intent.EXTRA_SUBJECT, subject); - intent.putExtra(Intent.EXTRA_TEXT, emailBody); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - } - - public interface IconRequestBuilderCallback { - void onFinished(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/IconRequestTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/IconRequestTask.java deleted file mode 100644 index 1088a20..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/IconRequestTask.java +++ /dev/null @@ -1,149 +0,0 @@ -package candybar.lib.tasks; - -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.util.Log; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Locale; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.databases.Database; -import candybar.lib.helpers.LocaleHelper; -import candybar.lib.helpers.RequestHelper; -import candybar.lib.items.Request; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.Extras; -import candybar.lib.utils.listeners.HomeListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconRequestTask extends AsyncTaskBase { - - private final WeakReference mContext; - private Extras.Error mError; - - public IconRequestTask(Context context) { - mContext = new WeakReference<>(context); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (mContext.get().getResources().getBoolean(R.bool.enable_icon_request) || - mContext.get().getResources().getBoolean(R.bool.enable_premium_request)) { - List requests = new ArrayList<>(); - HashMap appFilter = RequestHelper.getAppFilter(mContext.get(), RequestHelper.Key.ACTIVITY); - if (appFilter.size() == 0) { - mError = Extras.Error.APPFILTER_NULL; - return false; - } - - PackageManager packageManager = mContext.get().getPackageManager(); - - Intent intent = new Intent(Intent.ACTION_MAIN); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - List installedApps = packageManager.queryIntentActivities( - intent, PackageManager.GET_RESOLVED_FILTER); - if (installedApps.size() == 0) { - mError = Extras.Error.INSTALLED_APPS_NULL; - return false; - } - - CandyBarMainActivity.sInstalledAppsCount = installedApps.size(); - - try { - Collections.sort(installedApps, - new ResolveInfo.DisplayNameComparator(packageManager)); - } catch (Exception ignored) { - } - - for (ResolveInfo app : installedApps) { - String packageName = app.activityInfo.packageName; - String activity = packageName + "/" + app.activityInfo.name; - - String value = appFilter.get(activity); - - if (value == null) { - String name = LocaleHelper.getOtherAppLocaleName(mContext.get(), new Locale("en"), activity); - if (name == null) { - name = app.activityInfo.loadLabel(packageManager).toString(); - } - - boolean requested = Database.get(mContext.get()).isRequested(activity); - Request request = Request.Builder() - .name(name) - .packageName(app.activityInfo.packageName) - .activity(activity) - .requested(requested) - .build(); - - requests.add(request); - } - } - - CandyBarMainActivity.sMissedApps = requests; - } - return true; - } catch (Exception e) { - CandyBarMainActivity.sMissedApps = null; - mError = Extras.Error.DATABASE_ERROR; - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (mContext.get() == null) return; - if (((AppCompatActivity) mContext.get()).isFinishing()) return; - - if (ok) { - FragmentManager fm = ((AppCompatActivity) mContext.get()).getSupportFragmentManager(); - if (fm == null) return; - - Fragment fragment = fm.findFragmentByTag("home"); - if (fragment == null) return; - - HomeListener listener = (HomeListener) fragment; - listener.onHomeDataUpdated(null); - } else { - if (mError != null) { - mError.showToast(mContext.get()); - } - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/IconsLoaderTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/IconsLoaderTask.java deleted file mode 100644 index 05ed831..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/IconsLoaderTask.java +++ /dev/null @@ -1,143 +0,0 @@ -package candybar.lib.tasks; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.graphics.BitmapFactory; -import android.util.Log; - -import androidx.appcompat.app.AppCompatActivity; -import androidx.fragment.app.Fragment; -import androidx.fragment.app.FragmentManager; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.lang.ref.WeakReference; -import java.util.Collections; -import java.util.List; -import java.util.Random; - -import candybar.lib.R; -import candybar.lib.activities.CandyBarMainActivity; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.helpers.IconsHelper; -import candybar.lib.items.Home; -import candybar.lib.items.Icon; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.listeners.HomeListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class IconsLoaderTask extends AsyncTaskBase { - - private final WeakReference mContext; - private Home mHome; - - public IconsLoaderTask(Context context) { - mContext = new WeakReference<>(context); - } - - @Override - @SuppressLint("StringFormatInvalid") - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (CandyBarMainActivity.sSections == null) { - CandyBarMainActivity.sSections = IconsHelper.getIconsList(mContext.get()); - - for (int i = 0; i < CandyBarMainActivity.sSections.size(); i++) { - List icons = CandyBarMainActivity.sSections.get(i).getIcons(); - - if (mContext.get().getResources().getBoolean(R.bool.show_icon_name) || - mContext.get().getResources().getBoolean(R.bool.enable_icon_name_replacer)) { - IconsHelper.computeTitles(mContext.get(), icons); - } - - if (mContext.get().getResources().getBoolean(R.bool.enable_icons_sort) || - mContext.get().getResources().getBoolean(R.bool.enable_icon_name_replacer)) { - Collections.sort(icons, Icon.TitleComparator); - CandyBarMainActivity.sSections.get(i).setIcons(icons); - } - } - - if (CandyBarApplication.getConfiguration().isShowTabAllIcons()) { - List icons = IconsHelper.getTabAllIcons(); - CandyBarMainActivity.sSections.add(new Icon( - CandyBarApplication.getConfiguration().getTabAllIconsTitle(), icons)); - } - } - - if (CandyBarMainActivity.sHomeIcon != null) return true; - - Random random = new Random(); - int index = random.nextInt(CandyBarMainActivity.sSections.size()); - List icons = CandyBarMainActivity.sSections.get(index).getIcons(); - index = random.nextInt(icons.size()); - Icon icon = icons.get(index); - - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - BitmapFactory.decodeResource(mContext.get().getResources(), - icon.getRes(), options); - - if (!mContext.get().getResources().getBoolean(R.bool.show_icon_name)) { - // It means the title of icon is not yet computed, so compute it - IconsHelper.computeTitles(mContext.get(), Collections.singletonList(icon)); - } - - String iconDimension = ""; - - if (options.outWidth > 0 && options.outHeight > 0) { - iconDimension = mContext.get().getResources().getString(R.string.home_icon_dimension, - options.outWidth + " x " + options.outHeight); - } - - mHome = new Home( - icon.getRes(), - icon.getTitle(), - iconDimension, - Home.Type.DIMENSION, - false); - CandyBarMainActivity.sHomeIcon = mHome; - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (ok) { - if (mHome == null) return; - if (mContext.get() == null) return; - - FragmentManager fm = ((AppCompatActivity) mContext.get()).getSupportFragmentManager(); - if (fm == null) return; - - Fragment fragment = fm.findFragmentByTag("home"); - if (fragment == null) return; - - HomeListener listener = (HomeListener) fragment; - listener.onHomeDataUpdated(mHome); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/PremiumRequestBuilderTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/PremiumRequestBuilderTask.java deleted file mode 100644 index 3acc63e..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/PremiumRequestBuilderTask.java +++ /dev/null @@ -1,190 +0,0 @@ -package candybar.lib.tasks; - -import android.content.ActivityNotFoundException; -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.util.Log; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.lang.ref.WeakReference; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.applications.CandyBarApplication; -import candybar.lib.databases.Database; -import candybar.lib.fragments.dialog.IntentChooserFragment; -import candybar.lib.helpers.DeviceHelper; -import candybar.lib.items.Request; -import candybar.lib.utils.AsyncTaskBase; -import candybar.lib.utils.Extras; -import candybar.lib.utils.listeners.RequestListener; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class PremiumRequestBuilderTask extends AsyncTaskBase { - - private final WeakReference mContext; - private final WeakReference mCallback; - private String mEmailBody; - private Extras.Error mError; - - public PremiumRequestBuilderTask(Context context, PremiumRequestBuilderCallback callback) { - mContext = new WeakReference<>(context); - mCallback = new WeakReference<>(callback); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (CandyBarApplication.sRequestProperty == null) { - mError = Extras.Error.ICON_REQUEST_PROPERTY_NULL; - return false; - } - - if (CandyBarApplication.sRequestProperty.getComponentName() == null) { - mError = Extras.Error.ICON_REQUEST_PROPERTY_COMPONENT_NULL; - return false; - } - - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append(DeviceHelper.getDeviceInfo(mContext.get())); - - List requests = Database.get(mContext.get()).getPremiumRequest(null); - - for (int i = 0; i < requests.size(); i++) { - stringBuilder.append("\r\n\r\n") - .append(requests.get(i).getName()) - .append("\r\n") - .append(requests.get(i).getActivity()) - .append("\r\n") - .append("https://play.google.com/store/apps/details?id=") - .append(requests.get(i).getPackageName()) - .append("\r\n") - .append("Order Id: ") - .append(requests.get(i).getOrderId()) - .append("\r\n") - .append("Product Id: ") - .append(requests.get(i).getProductId()); - } - - mEmailBody = stringBuilder.toString(); - return true; - } catch (Exception e) { - CandyBarApplication.sRequestProperty = null; - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (mContext.get() == null) return; - if (((AppCompatActivity) mContext.get()).isFinishing()) return; - - if (ok) { - try { - if (mCallback.get() != null) { - mCallback.get().onFinished(); - } - - RequestListener listener = (RequestListener) mContext.get(); - listener.onRequestBuilt(getIntent(CandyBarApplication.sRequestProperty.getComponentName(), mEmailBody), - IntentChooserFragment.REBUILD_ICON_REQUEST); - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } else { - if (mError != null) { - LogUtil.e(mError.getMessage()); - mError.showToast(mContext.get()); - } - } - } - - @Nullable - private Intent getIntent(ComponentName name, String emailBody) { - try { - Intent intent = new Intent(Intent.ACTION_SEND); - addIntentExtra(intent, emailBody); - intent.setComponent(name); - intent.addCategory(Intent.CATEGORY_LAUNCHER); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - return intent; - } catch (IllegalArgumentException e) { - try { - Intent intent = new Intent(Intent.ACTION_SEND); - addIntentExtra(intent, emailBody); - return intent; - } catch (ActivityNotFoundException e1) { - LogUtil.e(Log.getStackTraceString(e1)); - } - } - return null; - } - - private void addIntentExtra(@NonNull Intent intent, String emailBody) { - intent.setType("application/zip"); - - if (CandyBarApplication.sZipPath != null) { - File zip = new File(CandyBarApplication.sZipPath); - if (zip.exists()) { - Uri uri = FileHelper.getUriFromFile(mContext.get(), mContext.get().getPackageName(), zip); - if (uri == null) uri = Uri.fromFile(zip); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - } - } - - String subject = mContext.get().getResources().getString(R.string.premium_request_email_subject); - if (subject.length() == 0) - subject = mContext.get().getResources().getString(R.string.app_name) + " Premium Icon Request"; - subject = "Rebuilt: " + subject; - - String emailAddress = mContext.get().getResources().getString(R.string.premium_request_email); - // Fallback to regular request email - if (emailAddress.length() == 0) - emailAddress = mContext.get().getResources().getString(R.string.regular_request_email); - // Fallback to dev_email - if (emailAddress.length() == 0) - emailAddress = mContext.get().getResources().getString(R.string.dev_email); - - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress}); - intent.putExtra(Intent.EXTRA_SUBJECT, subject); - intent.putExtra(Intent.EXTRA_TEXT, emailBody); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | - Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED); - } - - public interface PremiumRequestBuilderCallback { - void onFinished(); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/ReportBugsTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/ReportBugsTask.java deleted file mode 100644 index 60a8401..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/ReportBugsTask.java +++ /dev/null @@ -1,148 +0,0 @@ -package candybar.lib.tasks; - -import static com.danimahardhika.android.helpers.core.FileHelper.getUriFromFile; - -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.util.Log; -import android.widget.Toast; - -import androidx.appcompat.app.AppCompatActivity; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.danimahardhika.android.helpers.core.FileHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.lang.ref.WeakReference; -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.helpers.DeviceHelper; -import candybar.lib.helpers.ReportBugsHelper; -import candybar.lib.helpers.RequestHelper; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ReportBugsTask extends AsyncTaskBase { - - private final WeakReference mContext; - private final String mDescription; - private String mZipPath = null; - private StringBuilder mStringBuilder; - private MaterialDialog mDialog; - - public ReportBugsTask(Context context, String description) { - mContext = new WeakReference<>(context); - mDescription = description; - } - - @Override - protected void preRun() { - mDialog = new MaterialDialog.Builder(mContext.get()) - .typeface(TypefaceHelper.getMedium(mContext.get()), TypefaceHelper.getRegular(mContext.get())) - .content(R.string.report_bugs_building) - .progress(true, 0) - .progressIndeterminateStyle(true) - .cancelable(false) - .canceledOnTouchOutside(false) - .build(); - mDialog.show(); - mStringBuilder = new StringBuilder(); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - List files = new ArrayList<>(); - - mStringBuilder.append(DeviceHelper.getDeviceInfo(mContext.get())) - .append("\r\n").append(mDescription).append("\r\n"); - - File brokenAppFilter = ReportBugsHelper.buildBrokenAppFilter(mContext.get()); - if (brokenAppFilter != null) files.add(brokenAppFilter.toString()); - - File brokenDrawables = ReportBugsHelper.buildBrokenDrawables(mContext.get()); - if (brokenDrawables != null) files.add(brokenDrawables.toString()); - - File activityList = ReportBugsHelper.buildActivityList(mContext.get()); - if (activityList != null) files.add(activityList.toString()); - - String stackTrace = Preferences.get(mContext.get()).getLatestCrashLog(); - File crashLog = ReportBugsHelper.buildCrashLog(mContext.get(), stackTrace); - if (crashLog != null) files.add(crashLog.toString()); - - mZipPath = FileHelper.createZip(files, new File(mContext.get().getCacheDir(), - RequestHelper.getGeneratedZipName(ReportBugsHelper.REPORT_BUGS))); - return true; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (mContext.get() == null) return; - if (((AppCompatActivity) mContext.get()).isFinishing()) return; - - mDialog.dismiss(); - if (ok) { - String emailAddress = mContext.get().getString(R.string.regular_request_email); - // Fallback to dev_email - if (emailAddress.length() == 0) - emailAddress = mContext.get().getString(R.string.dev_email); - - final Intent intent = new Intent(Intent.ACTION_SEND); - intent.setType("application/zip"); - intent.putExtra(Intent.EXTRA_EMAIL, new String[]{emailAddress}); - intent.putExtra(Intent.EXTRA_SUBJECT, - "Report Bugs " + (mContext.get().getString( - R.string.app_name))); - intent.putExtra(Intent.EXTRA_TEXT, mStringBuilder.toString()); - - if (mZipPath != null) { - File zip = new File(mZipPath); - if (zip.exists()) { - Uri uri = getUriFromFile(mContext.get(), mContext.get().getPackageName(), zip); - if (uri == null) uri = Uri.fromFile(zip); - intent.putExtra(Intent.EXTRA_STREAM, uri); - intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - } - } - - mContext.get().startActivity(Intent.createChooser(intent, - mContext.get().getResources().getString(R.string.app_client))); - } else { - Toast.makeText(mContext.get(), R.string.report_bugs_failed, - Toast.LENGTH_LONG).show(); - } - - mZipPath = null; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/WallpaperApplyTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/WallpaperApplyTask.java deleted file mode 100644 index f7c2a4c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/WallpaperApplyTask.java +++ /dev/null @@ -1,384 +0,0 @@ -package candybar.lib.tasks; - -import android.app.Activity; -import android.app.WallpaperManager; -import android.content.Context; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Paint; -import android.graphics.Point; -import android.graphics.RectF; -import android.os.Build; -import android.util.Log; -import android.widget.Toast; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; -import androidx.core.content.ContextCompat; - -import com.afollestad.materialdialogs.MaterialDialog; -import com.bumptech.glide.Glide; -import com.bumptech.glide.load.engine.DiskCacheStrategy; -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.WindowHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.danimahardhika.cafebar.CafeBar; -import com.danimahardhika.cafebar.CafeBarTheme; - -import java.lang.ref.WeakReference; -import java.util.Locale; -import java.util.concurrent.ExecutorService; - -import candybar.lib.R; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.helpers.WallpaperHelper; -import candybar.lib.items.ImageSize; -import candybar.lib.items.Wallpaper; -import candybar.lib.preferences.Preferences; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class WallpaperApplyTask extends AsyncTaskBase implements WallpaperPropertiesLoaderTask.Callback { - - private final WeakReference mContext; - private Apply mApply; - private RectF mRectF; - private Wallpaper mWallpaper; - private MaterialDialog mDialog; - - public WallpaperApplyTask(@NonNull Context context, @NonNull Wallpaper wallpaper) { - mContext = new WeakReference<>(context); - mWallpaper = wallpaper; - mApply = Apply.HOMESCREEN; - } - - public WallpaperApplyTask to(Apply apply) { - mApply = apply; - return this; - } - - public WallpaperApplyTask crop(@Nullable RectF rectF) { - mRectF = rectF; - return this; - } - - @Override - protected AsyncTaskBase execute(ExecutorService executorService) { - if (mDialog == null) { - int color = mWallpaper.getColor(); - if (color == 0) { - color = ColorHelper.getAttributeColor(mContext.get(), R.attr.colorSecondary); - } - - final MaterialDialog.Builder builder = new MaterialDialog.Builder(mContext.get()); - builder.widgetColor(color) - .typeface(TypefaceHelper.getMedium(mContext.get()), TypefaceHelper.getRegular(mContext.get())) - .progress(true, 0) - .cancelable(false) - .progressIndeterminateStyle(true) - .content(R.string.wallpaper_loading) - .positiveColor(color) - .positiveText(android.R.string.cancel) - .onPositive((dialog, which) -> cancel(true)); - - mDialog = builder.build(); - } - - if (!mDialog.isShowing()) mDialog.show(); - - if (mWallpaper == null) { - LogUtil.e("WallpaperApply cancelled, wallpaper is null"); - return null; - } - - if (mWallpaper.getDimensions() == null) { - return new WallpaperPropertiesLoaderTask(mContext.get(), mWallpaper, this) - .executeOnThreadPool(); - } - - return super.execute(executorService); - } - - @Override - public void onPropertiesReceived(Wallpaper wallpaper) { - mWallpaper = wallpaper; - if (mWallpaper.getDimensions() == null) { - LogUtil.e("WallpaperApply cancelled, unable to retrieve wallpaper dimensions"); - - if (mContext.get() == null) return; - if (mContext.get() instanceof Activity) { - if (((Activity) mContext.get()).isFinishing()) - return; - } - - if (mDialog != null && mDialog.isShowing()) { - mDialog.dismiss(); - } - - Toast.makeText(mContext.get(), R.string.wallpaper_apply_failed, - Toast.LENGTH_LONG).show(); - return; - } - - try { - executeOnThreadPool(); - } catch (IllegalStateException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - ImageSize imageSize = WallpaperHelper.getTargetSize(mContext.get()); - - LogUtil.d("original rectF: " + mRectF); - - if (mRectF != null && Build.VERSION.SDK_INT == Build.VERSION_CODES.KITKAT) { - Point point = WindowHelper.getScreenSize(mContext.get()); - int height = point.y - WindowHelper.getStatusBarHeight(mContext.get()) - WindowHelper.getNavigationBarHeight(mContext.get()); - float heightFactor = (float) imageSize.height / (float) height; - mRectF = WallpaperHelper.getScaledRectF(mRectF, heightFactor, 1f); - } - - if (mRectF == null && Preferences.get(mContext.get()).isCropWallpaper()) { - /* - * Create a center crop rectF if wallpaper applied from grid, not opening the preview first - */ - float widthScaleFactor = (float) imageSize.height / (float) mWallpaper.getDimensions().height; - - float side = ((float) mWallpaper.getDimensions().width * widthScaleFactor - (float) imageSize.width) / 2f; - float leftRectF = 0f - side; - float rightRectF = (float) mWallpaper.getDimensions().width * widthScaleFactor - side; - float topRectF = 0f; - float bottomRectF = (float) imageSize.height; - mRectF = new RectF(leftRectF, topRectF, rightRectF, bottomRectF); - LogUtil.d("created center crop rectF: " + mRectF); - } - - ImageSize adjustedSize = imageSize; - RectF adjustedRectF = mRectF; - - float scaleFactor = (float) mWallpaper.getDimensions().height / (float) imageSize.height; - if (scaleFactor > 1f) { - /* - * Applying original wallpaper size caused a problem (wallpaper zoomed in) - * if wallpaper dimension bigger than device screen resolution - * - * Solution: Resize wallpaper to match screen resolution - */ - - /* - * Use original wallpaper size: - * adjustedSize = new ImageSize(width, height); - */ - - /* - * Adjust wallpaper size to match screen resolution: - */ - float widthScaleFactor = (float) imageSize.height / (float) mWallpaper.getDimensions().height; - int adjustedWidth = Float.valueOf((float) mWallpaper.getDimensions().width * widthScaleFactor).intValue(); - adjustedSize = new ImageSize(adjustedWidth, imageSize.height); - - if (adjustedRectF != null) { - /* - * If wallpaper crop enabled, original wallpaper size should be loaded first - */ - adjustedSize = new ImageSize(mWallpaper.getDimensions().width, mWallpaper.getDimensions().height); - adjustedRectF = WallpaperHelper.getScaledRectF(mRectF, scaleFactor, scaleFactor); - LogUtil.d("adjusted rectF: " + adjustedRectF); - } - - LogUtil.d(String.format(Locale.getDefault(), "adjusted bitmap: %d x %d", - adjustedSize.width, adjustedSize.height)); - } - - int call = 1; - do { - /* - * Load the bitmap first - */ - Bitmap loadedBitmap = Glide.with(mContext.get()) - .asBitmap() - .load(mWallpaper.getURL()) - .skipMemoryCache(true) - .diskCacheStrategy(DiskCacheStrategy.RESOURCE) - .submit() - .get(); - - if (loadedBitmap != null) { - try { - /* - * Checking if loaded bitmap resolution supported by the device - * If texture size too big then resize it - */ - Bitmap bitmapTemp = Bitmap.createBitmap( - loadedBitmap.getWidth(), - loadedBitmap.getHeight(), - loadedBitmap.getConfig()); - bitmapTemp.recycle(); - - /* - * Texture size is ok - */ - LogUtil.d(String.format(Locale.getDefault(), "loaded bitmap: %d x %d", - loadedBitmap.getWidth(), loadedBitmap.getHeight())); - runOnUiThread(() -> mDialog.setContent(R.string.wallpaper_applying)); - - Bitmap bitmap = loadedBitmap; - if (Preferences.get(mContext.get()).isCropWallpaper() && adjustedRectF != null) { - LogUtil.d("rectF: " + adjustedRectF); - /* - * Cropping bitmap - */ - ImageSize targetSize = WallpaperHelper.getTargetSize(mContext.get()); - - int targetWidth = Double.valueOf( - ((double) loadedBitmap.getHeight() / (double) targetSize.height) - * (double) targetSize.width).intValue(); - - bitmap = Bitmap.createBitmap( - targetWidth, - loadedBitmap.getHeight(), - loadedBitmap.getConfig()); - Paint paint = new Paint(); - paint.setFilterBitmap(true); - paint.setAntiAlias(true); - paint.setDither(true); - - Canvas canvas = new Canvas(bitmap); - canvas.drawBitmap(loadedBitmap, null, adjustedRectF, paint); - - float scale = (float) targetSize.height / (float) bitmap.getHeight(); - if (scale < 1f) { - LogUtil.d("bitmap size is bigger than screen resolution, resizing bitmap"); - int resizedWidth = Float.valueOf((float) bitmap.getWidth() * scale).intValue(); - bitmap = Bitmap.createScaledBitmap(bitmap, resizedWidth, targetSize.height, true); - } - } - - /* - * Final bitmap generated - */ - LogUtil.d(String.format(Locale.getDefault(), "generated bitmap: %d x %d ", - bitmap.getWidth(), bitmap.getHeight())); - - if (mApply == Apply.HOMESCREEN_LOCKSCREEN) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - WallpaperManager.getInstance(mContext.get().getApplicationContext()).setBitmap( - bitmap, null, true, WallpaperManager.FLAG_LOCK | WallpaperManager.FLAG_SYSTEM); - return true; - } - } - - if (mApply == Apply.HOMESCREEN) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - WallpaperManager.getInstance(mContext.get().getApplicationContext()).setBitmap( - bitmap, null, true, WallpaperManager.FLAG_SYSTEM); - return true; - } - - WallpaperManager.getInstance(mContext.get().getApplicationContext()).setBitmap(bitmap); - return true; - } - - if (mApply == Apply.LOCKSCREEN) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - WallpaperManager.getInstance(mContext.get().getApplicationContext()).setBitmap( - bitmap, null, true, WallpaperManager.FLAG_LOCK); - return true; - } - } - } catch (OutOfMemoryError e) { - LogUtil.e("loaded bitmap is too big, resizing it ..."); - /* - * Texture size is too big - * Resizing bitmap - */ - - double scale = 1 - (0.1 * call); - int scaledWidth = Double.valueOf(adjustedSize.width * scale).intValue(); - int scaledHeight = Double.valueOf(adjustedSize.height * scale).intValue(); - - adjustedRectF = WallpaperHelper.getScaledRectF(adjustedRectF, - (float) scale, (float) scale); - adjustedSize = new ImageSize(scaledWidth, scaledHeight); - } - } - - /* - * Continue to next iteration - */ - call++; - } while (call <= 5 && !isCancelled()); - return false; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - public void cancel(boolean mayInterruptIfRunning) { - super.cancel(mayInterruptIfRunning); - Toast.makeText(mContext.get(), R.string.wallpaper_apply_cancelled, - Toast.LENGTH_LONG).show(); - } - - @Override - protected void postRun(boolean ok) { - if (mContext.get() == null) { - return; - } - - if (((AppCompatActivity) mContext.get()).isFinishing()) { - return; - } - - if (mDialog != null && mDialog.isShowing()) { - mDialog.dismiss(); - } - - if (ok) { - CafeBar.builder(mContext.get()) - .theme(CafeBarTheme.Custom(ContextCompat.getColor( - mContext.get(), R.color.cardBackground))) - .contentTypeface(TypefaceHelper.getRegular(mContext.get())) - .floating(true) - .fitSystemWindow() - .content(R.string.wallpaper_applied) - .show(); - } else { - Toast.makeText(mContext.get(), R.string.wallpaper_apply_failed, - Toast.LENGTH_LONG).show(); - } - } - - public enum Apply { - LOCKSCREEN, - HOMESCREEN, - HOMESCREEN_LOCKSCREEN - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/tasks/WallpaperPropertiesLoaderTask.java b/libs/candybar/src/main/java/candybar/lib/tasks/WallpaperPropertiesLoaderTask.java deleted file mode 100644 index f9897b3..0000000 --- a/libs/candybar/src/main/java/candybar/lib/tasks/WallpaperPropertiesLoaderTask.java +++ /dev/null @@ -1,127 +0,0 @@ -package candybar.lib.tasks; - -import android.content.Context; -import android.graphics.BitmapFactory; -import android.util.Log; - -import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; - -import com.bumptech.glide.Glide; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.io.File; -import java.io.InputStream; -import java.lang.ref.WeakReference; -import java.net.HttpURLConnection; -import java.net.URL; - -import candybar.lib.databases.Database; -import candybar.lib.items.ImageSize; -import candybar.lib.items.Wallpaper; -import candybar.lib.utils.AsyncTaskBase; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class WallpaperPropertiesLoaderTask extends AsyncTaskBase { - - private final Wallpaper mWallpaper; - private final WeakReference mCallback; - private final WeakReference mContext; - - public WallpaperPropertiesLoaderTask(Context context, Wallpaper wallpaper, @Nullable Callback callback) { - mContext = new WeakReference<>(context); - mWallpaper = wallpaper; - mCallback = new WeakReference<>(callback); - } - - @Override - protected boolean run() { - if (!isCancelled()) { - try { - Thread.sleep(1); - if (mWallpaper == null) return false; - - if (mWallpaper.getDimensions() != null && - mWallpaper.getMimeType() != null && - mWallpaper.getSize() > 0) { - return false; - } - - final BitmapFactory.Options options = new BitmapFactory.Options(); - options.inJustDecodeBounds = true; - - URL url = new URL(mWallpaper.getURL()); - HttpURLConnection connection = (HttpURLConnection) url.openConnection(); - connection.setConnectTimeout(15000); - - if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) { - InputStream stream = connection.getInputStream(); - BitmapFactory.decodeStream(stream, null, options); - - ImageSize imageSize = new ImageSize(options.outWidth, options.outHeight); - mWallpaper.setDimensions(imageSize); - mWallpaper.setMimeType(options.outMimeType); - - int contentLength = connection.getContentLength(); - if (contentLength > 0) { - mWallpaper.setSize(contentLength); - } - - Database.get(mContext.get()).updateWallpaper(mWallpaper); - stream.close(); - return true; - } - return false; - } catch (Exception e) { - LogUtil.e(Log.getStackTraceString(e)); - return false; - } - } - return false; - } - - @Override - protected void postRun(boolean ok) { - if (ok && mContext.get() != null && !((AppCompatActivity) mContext.get()).isFinishing()) { - if (mWallpaper.getSize() <= 0) { - try { - File target = Glide.with(mContext.get()) - .asFile() - .load(mWallpaper.getURL()) - .onlyRetrieveFromCache(true) - .submit() - .get(); - if (target != null && target.exists()) { - mWallpaper.setSize((int) target.length()); - } - } catch (Exception ignored) { - } - } - } - - if (mCallback.get() != null) { - mCallback.get().onPropertiesReceived(mWallpaper); - } - } - - public interface Callback { - void onPropertiesReceived(Wallpaper wallpaper); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/AlphanumComparator.java b/libs/candybar/src/main/java/candybar/lib/utils/AlphanumComparator.java deleted file mode 100644 index f360006..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/AlphanumComparator.java +++ /dev/null @@ -1,120 +0,0 @@ -package candybar.lib.utils; - -/* - * The Alphanum Algorithm is an improved sorting algorithm for strings - * containing numbers. Instead of sorting numbers in ASCII order like - * a standard sort, this algorithm sorts numbers in numeric order. - * - * The Alphanum Algorithm is discussed at http://www.DaveKoelle.com - * - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - * - */ - -import java.util.Comparator; -import java.util.Locale; - -/** - * This is an updated version with enhancements made by Daniel Migowski, - * Andre Bogus, and David Koelle - *

- * To convert to use Templates (Java 1.5+): - * - Change "implements Comparator" to "implements Comparator" - * - Change "compare(Object o1, Object o2)" to "compare(String s1, String s2)" - * - Remove the type checking and casting in compare(). - *

- * To use this class: - * Use the static "sort" method from the java.util.Collections class: - * Collections.sort(your list, new AlphanumComparator()); - */ -public class AlphanumComparator implements Comparator { - - private boolean isDigit(char ch) { - return ch >= 48 && ch <= 57; - } - - /** - * Length of string is passed in for improved efficiency (only need to calculate it once) - **/ - private String getChunk(String s, int slength, int marker) { - StringBuilder chunk = new StringBuilder(); - char c = s.charAt(marker); - chunk.append(c); - marker++; - if (isDigit(c)) { - while (marker < slength) { - c = s.charAt(marker); - if (!isDigit(c)) - break; - chunk.append(c); - marker++; - } - } else { - while (marker < slength) { - c = s.charAt(marker); - if (isDigit(c)) - break; - chunk.append(c); - marker++; - } - } - return chunk.toString(); - } - - public int compare(Object o1, Object o2) { - if (!(o1 instanceof String) || !(o2 instanceof String)) { - return 0; - } - String s1 = ((String) o1).toLowerCase(Locale.getDefault()); - String s2 = ((String) o2).toLowerCase(Locale.getDefault()); - - int thisMarker = 0; - int thatMarker = 0; - int s1Length = s1.length(); - int s2Length = s2.length(); - - while (thisMarker < s1Length && thatMarker < s2Length) { - String thisChunk = getChunk(s1, s1Length, thisMarker); - thisMarker += thisChunk.length(); - - String thatChunk = getChunk(s2, s2Length, thatMarker); - thatMarker += thatChunk.length(); - - // If both chunks contain numeric characters, sort them numerically - int result; - if (isDigit(thisChunk.charAt(0)) && isDigit(thatChunk.charAt(0))) { - // Simple chunk comparison by length. - int thisChunkLength = thisChunk.length(); - result = thisChunkLength - thatChunk.length(); - // If equal, the first different number counts - if (result == 0) { - for (int i = 0; i < thisChunkLength; i++) { - result = thisChunk.charAt(i) - thatChunk.charAt(i); - if (result != 0) { - return result; - } - } - } - } else { - result = thisChunk.compareTo(thatChunk); - } - - if (result != 0) - return result; - } - return s1Length - s2Length; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/AsyncTaskBase.java b/libs/candybar/src/main/java/candybar/lib/utils/AsyncTaskBase.java deleted file mode 100644 index 7c9a5cd..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/AsyncTaskBase.java +++ /dev/null @@ -1,65 +0,0 @@ -package candybar.lib.utils; - -import android.os.Handler; -import android.os.Looper; - -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; -import java.util.concurrent.Future; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.ThreadPoolExecutor; -import java.util.concurrent.TimeUnit; - -public abstract class AsyncTaskBase { - private boolean mCancelled = false; - private final Handler handler = new Handler(Looper.getMainLooper()); - private Future mFuture; - - private static final ExecutorService THREAD_POOL = - new ThreadPoolExecutor(5, 128, 1, TimeUnit.SECONDS, - new LinkedBlockingQueue<>()); - - protected void preRun() { - } - - protected abstract boolean run(); - - protected void postRun(boolean ok) { - } - - protected void runOnUiThread(Runnable runnable) { - handler.post(runnable); - } - - protected boolean isCancelled() { - return mCancelled; - } - - public void cancel(boolean mayInterruptIfRunning) { - mCancelled = true; - if (mFuture != null) { - mFuture.cancel(mayInterruptIfRunning); - } - } - - protected AsyncTaskBase execute(ExecutorService executorService) { - preRun(); - mFuture = executorService.submit(() -> { - if (!mCancelled) { - final boolean result = run(); - handler.post(() -> { - if (!mCancelled) postRun(result); - }); - } - }); - return this; - } - - public AsyncTaskBase execute() { - return execute(Executors.newSingleThreadExecutor()); - } - - public AsyncTaskBase executeOnThreadPool() { - return execute(THREAD_POOL); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/CandyBarGlideModule.java b/libs/candybar/src/main/java/candybar/lib/utils/CandyBarGlideModule.java deleted file mode 100644 index 9d3a499..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/CandyBarGlideModule.java +++ /dev/null @@ -1,19 +0,0 @@ -package candybar.lib.utils; - -import android.content.Context; -import android.graphics.Bitmap; - -import androidx.annotation.NonNull; - -import com.bumptech.glide.Glide; -import com.bumptech.glide.Registry; -import com.bumptech.glide.annotation.GlideModule; -import com.bumptech.glide.module.AppGlideModule; - -@GlideModule -public final class CandyBarGlideModule extends AppGlideModule { - @Override - public void registerComponents(@NonNull Context context, @NonNull Glide glide, Registry registry) { - registry.prepend(String.class, Bitmap.class, new CommonModelLoaderFactory(context)); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/CommonDataFetcher.java b/libs/candybar/src/main/java/candybar/lib/utils/CommonDataFetcher.java deleted file mode 100644 index 3023a2b..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/CommonDataFetcher.java +++ /dev/null @@ -1,121 +0,0 @@ -package candybar.lib.utils; - -import android.content.ComponentName; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; -import android.graphics.Bitmap; -import android.graphics.Canvas; -import android.graphics.Rect; -import android.graphics.drawable.AdaptiveIconDrawable; -import android.graphics.drawable.BitmapDrawable; -import android.graphics.drawable.Drawable; -import android.os.Build; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.core.content.ContextCompat; - -import com.bumptech.glide.Priority; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.data.DataFetcher; - -import candybar.lib.preferences.Preferences; -import sarsamurmu.adaptiveicon.AdaptiveIcon; - -public class CommonDataFetcher implements DataFetcher { - private final Context mContext; - private final String mModel; - - CommonDataFetcher(Context context, String model) { - mContext = context; - mModel = model; - } - - @Override - public void loadData(@NonNull Priority priority, @NonNull DataCallback callback) { - if (mModel.startsWith("drawable://")) { - callback.onDataReady(getDrawable(mModel)); - } else if (mModel.startsWith("package://")) { - callback.onDataReady(getPackage(mModel)); - } - } - - @Nullable - private Bitmap getPackage(String uri) { - PackageManager packageManager = mContext.getPackageManager(); - String componentName = uri.replaceFirst("package://", ""); - - int slashIndex = componentName.indexOf("/"); - String packageName = componentName.substring(0, slashIndex); - String activityName = componentName.substring(slashIndex + 1); - - Intent intent = new Intent(); - intent.setComponent(new ComponentName(packageName, activityName)); - ResolveInfo resolveInfo = packageManager.resolveActivity(intent, 0); - - assert resolveInfo != null; - Drawable drawable = resolveInfo.loadIcon(packageManager); - if (drawable != null) { - if (drawable instanceof BitmapDrawable) return ((BitmapDrawable) drawable).getBitmap(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && drawable instanceof AdaptiveIconDrawable) { - return new AdaptiveIcon() - .setDrawable((AdaptiveIconDrawable) drawable) - .setPath(AdaptiveIcon.PATH_CIRCLE) - .render(); - } - } - - return null; - } - - @Nullable - private Bitmap getDrawable(String uri) { - String drawableIdStr = uri.replaceFirst("drawable://", ""); - int drawableId = Integer.parseInt(drawableIdStr); - Drawable drawable = ContextCompat.getDrawable(mContext, drawableId); - - if (drawable instanceof BitmapDrawable) return ((BitmapDrawable) drawable).getBitmap(); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && drawable instanceof AdaptiveIconDrawable) { - if (Preferences.get(mContext).getIconShape() == -1) { - // System default icon shape - Bitmap bitmap = Bitmap.createBitmap(256, 256, Bitmap.Config.ARGB_8888); - Canvas canvas = new Canvas(bitmap); - drawable.setBounds(new Rect(0, 0, 256, 256)); - drawable.draw(canvas); - return bitmap; - } - - return new AdaptiveIcon() - .setDrawable((AdaptiveIconDrawable) drawable) - .setPath(Preferences.get(mContext).getIconShape()) - .render(); - } - - return null; - } - - @Override - public void cleanup() { - } - - @Override - public void cancel() { - } - - @NonNull - @Override - public Class getDataClass() { - return Bitmap.class; - } - - @NonNull - @Override - public DataSource getDataSource() { - // Because transitions do not work with local resources - return DataSource.REMOTE; - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoader.java b/libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoader.java deleted file mode 100644 index d7564d6..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoader.java +++ /dev/null @@ -1,28 +0,0 @@ -package candybar.lib.utils; - -import android.content.Context; -import android.graphics.Bitmap; - -import androidx.annotation.NonNull; - -import com.bumptech.glide.load.Options; -import com.bumptech.glide.load.model.ModelLoader; -import com.bumptech.glide.signature.ObjectKey; - -public final class CommonModelLoader implements ModelLoader { - private final Context mContext; - - CommonModelLoader(Context context) { - mContext = context; - } - - @Override - public boolean handles(@NonNull String model) { - return model.startsWith("drawable://") || model.startsWith("package://"); - } - - @Override - public LoadData buildLoadData(@NonNull String model, int width, int height, @NonNull Options options) { - return new LoadData<>(new ObjectKey(model), new CommonDataFetcher(mContext, model)); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoaderFactory.java b/libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoaderFactory.java deleted file mode 100644 index c32fcfb..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/CommonModelLoaderFactory.java +++ /dev/null @@ -1,28 +0,0 @@ -package candybar.lib.utils; - -import android.content.Context; -import android.graphics.Bitmap; - -import androidx.annotation.NonNull; - -import com.bumptech.glide.load.model.ModelLoader; -import com.bumptech.glide.load.model.ModelLoaderFactory; -import com.bumptech.glide.load.model.MultiModelLoaderFactory; - -public final class CommonModelLoaderFactory implements ModelLoaderFactory { - private final Context mContext; - - CommonModelLoaderFactory(Context context) { - mContext = context; - } - - @NonNull - @Override - public ModelLoader build(@NonNull MultiModelLoaderFactory multiFactory) { - return new CommonModelLoader(mContext); - } - - @Override - public void teardown() { - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/Extras.java b/libs/candybar/src/main/java/candybar/lib/utils/Extras.java deleted file mode 100644 index 93969b0..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/Extras.java +++ /dev/null @@ -1,84 +0,0 @@ -package candybar.lib.utils; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import android.content.Context; -import android.widget.Toast; - -public abstract class Extras { - - public enum Tag { - HOME("home"), - APPLY("apply"), - ICONS("icons"), - REQUEST("request"), - WALLPAPERS("wallpapers"), - PRESETS("presets"), - SETTINGS("settings"), - FAQS("faqs"), - ABOUT("about"); - - public String value; - public int idx; - - Tag(String name) { - value = name; - idx = ordinal(); - } - } - - public static final String EXTRA_POSITION = "position"; - public static final String EXTRA_SIZE = "size"; - public static final String EXTRA_URL = "url"; - public static final String EXTRA_IMAGE = "image"; - public static final String EXTRA_RESUMED = "resumed"; - - public enum Error { - APPFILTER_NULL, - DATABASE_ERROR, - INSTALLED_APPS_NULL, - ICON_REQUEST_NULL, - ICON_REQUEST_PROPERTY_NULL, - ICON_REQUEST_PROPERTY_COMPONENT_NULL; - - public String getMessage() { - switch (this) { - case APPFILTER_NULL: - return "Error: Unable to read appfilter.xml"; - case DATABASE_ERROR: - return "Error: Unable to read database"; - case INSTALLED_APPS_NULL: - return "Error: Unable to collect installed apps"; - case ICON_REQUEST_NULL: - return "Error: Icon request is null"; - case ICON_REQUEST_PROPERTY_NULL: - return "Error: Icon request property is null"; - case ICON_REQUEST_PROPERTY_COMPONENT_NULL: - return "Error: Email client component is null"; - default: - return "Error: Unknown"; - } - } - - public void showToast(Context context) { - if (context == null) return; - Toast.makeText(context, getMessage(), Toast.LENGTH_LONG).show(); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/ImageConfig.java b/libs/candybar/src/main/java/candybar/lib/utils/ImageConfig.java deleted file mode 100644 index 1a68d2c..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/ImageConfig.java +++ /dev/null @@ -1,29 +0,0 @@ -package candybar.lib.utils; - -import candybar.lib.applications.CandyBarApplication; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class ImageConfig { - public static int getThumbnailSize() { - int quality = CandyBarApplication.getConfiguration().getWallpaperGridPreviewQuality(); - return 50 * quality; - } -} - diff --git a/libs/candybar/src/main/java/candybar/lib/utils/JsonStructure.java b/libs/candybar/src/main/java/candybar/lib/utils/JsonStructure.java deleted file mode 100644 index c64a3d2..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/JsonStructure.java +++ /dev/null @@ -1,90 +0,0 @@ -package candybar.lib.utils; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class JsonStructure { - - private final Builder mBuilder; - - private JsonStructure(@NonNull Builder builder) { - mBuilder = builder; - } - - @Nullable - public String getArrayName() { - return mBuilder.mArrayName; - } - - @Nullable - public String getName() { - return mBuilder.mName; - } - - public String getAuthor() { - return mBuilder.mAuthor; - } - - public String getUrl() { - return mBuilder.mUrl; - } - - @Nullable - public String getThumbUrl() { - return mBuilder.mThumbUrl; - } - - public static class Builder { - - private final String mArrayName; - private String mName = "name"; - private String mAuthor = "author"; - private String mUrl = "url"; - private String mThumbUrl = "thumbUrl"; - - public Builder(@Nullable String arrayName) { - mArrayName = arrayName; - } - - public Builder name(@Nullable String name) { - mName = name; - return this; - } - - public Builder author(@NonNull String author) { - mAuthor = author; - return this; - } - - public Builder url(@NonNull String url) { - mUrl = url; - return this; - } - - public Builder thumbUrl(@Nullable String thumbUrl) { - mThumbUrl = thumbUrl; - return this; - } - - public JsonStructure build() { - return new JsonStructure(this); - } - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/Popup.java b/libs/candybar/src/main/java/candybar/lib/utils/Popup.java deleted file mode 100644 index 3c7f030..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/Popup.java +++ /dev/null @@ -1,275 +0,0 @@ -package candybar.lib.utils; - -import android.app.Activity; -import android.content.Context; -import android.graphics.PorterDuff; -import android.graphics.drawable.ColorDrawable; -import android.graphics.drawable.Drawable; -import android.os.Build; -import android.util.DisplayMetrics; -import android.util.TypedValue; -import android.view.View; -import android.view.ViewGroup; -import android.widget.BaseAdapter; -import android.widget.CheckBox; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; -import androidx.appcompat.widget.ListPopupWindow; -import androidx.core.content.ContextCompat; - -import com.danimahardhika.android.helpers.core.ColorHelper; -import com.danimahardhika.android.helpers.core.DrawableHelper; -import com.danimahardhika.android.helpers.core.utils.LogUtil; - -import java.util.ArrayList; -import java.util.List; - -import candybar.lib.R; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.items.PopupItem; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class Popup { - - private final ListPopupWindow mPopupWindow; - private final PopupAdapter mAdapter; - - private Popup(Builder builder) { - mPopupWindow = new ListPopupWindow(builder.mContext); - mAdapter = new PopupAdapter(builder.mContext, builder.mItems); - - int width = getMeasuredWidth(builder.mContext); - mPopupWindow.setWidth(width); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - Drawable drawable = mPopupWindow.getBackground(); - if (drawable != null) { - drawable.setColorFilter(ContextCompat.getColor( - builder.mContext, R.color.cardBackground), PorterDuff.Mode.SRC_IN); - } - } else { - mPopupWindow.setBackgroundDrawable(new ColorDrawable( - ContextCompat.getColor(builder.mContext, R.color.cardBackground))); - } - - mPopupWindow.setAnchorView(builder.mTo); - mPopupWindow.setAdapter(mAdapter); - mPopupWindow.setOnItemClickListener((adapterView, view, i, l) -> { - if (builder.mCallback != null) { - builder.mCallback.onClick(this, i); - return; - } - - mPopupWindow.dismiss(); - }); - } - - public void show() { - if (mAdapter.getCount() == 0) { - LogUtil.e("Popup size = 0, show() ignored"); - return; - } - mPopupWindow.show(); - } - - public void dismiss() { - if (mPopupWindow.isShowing()) - mPopupWindow.dismiss(); - } - - public List getItems() { - return mAdapter.getItems(); - } - - public void updateItem(int position, PopupItem item) { - mAdapter.updateItem(position, item); - } - - public void removeItem(int position) { - mAdapter.removeItem(position); - } - - public static Builder Builder(@NonNull Context context) { - return new Builder(context); - } - - private int getMeasuredWidth(@NonNull Context context) { - DisplayMetrics metrics = new DisplayMetrics(); - ((Activity) context).getWindowManager().getDefaultDisplay().getMetrics(metrics); - - int maxWidth = context.getResources().getDimensionPixelSize(R.dimen.popup_max_width); - int minWidth = context.getResources().getDimensionPixelSize(R.dimen.popup_min_width); - String longestText = ""; - for (PopupItem item : mAdapter.getItems()) { - if (item.getTitle().length() > longestText.length()) - longestText = item.getTitle(); - } - - int padding = context.getResources().getDimensionPixelSize(R.dimen.content_margin); - int iconSize = context.getResources().getDimensionPixelSize(R.dimen.icon_size_small); - TextView textView = new TextView(context); - textView.setLayoutParams(new ViewGroup.LayoutParams( - ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); - textView.setTypeface(TypefaceHelper.getRegular(context)); - textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources() - .getDimension(R.dimen.text_content_subtitle)); - textView.setPadding(padding + iconSize + padding, 0, padding, 0); - textView.setText(longestText); - - int widthMeasureSpec = View.MeasureSpec.makeMeasureSpec(metrics.widthPixels, View.MeasureSpec.AT_MOST); - int heightMeasureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); - textView.measure(widthMeasureSpec, heightMeasureSpec); - - int measuredWidth = textView.getMeasuredWidth() + padding; - if (measuredWidth <= minWidth) { - return minWidth; - } - - if (measuredWidth >= minWidth && measuredWidth <= maxWidth) { - return measuredWidth; - } - return maxWidth; - } - - public static class Builder { - - private final Context mContext; - private Callback mCallback; - private View mTo; - private List mItems; - - private Builder(Context context) { - mContext = context; - mItems = new ArrayList<>(); - } - - public Builder to(@Nullable View to) { - mTo = to; - return this; - } - - public Builder list(@NonNull List items) { - mItems = items; - return this; - } - - public Builder callback(@Nullable Callback callback) { - mCallback = callback; - return this; - } - - public Popup build() { - return new Popup(this); - } - - public void show() { - build().show(); - } - } - - static class PopupAdapter extends BaseAdapter { - - private final List mItems; - private final Context mContext; - - PopupAdapter(@NonNull Context context, @NonNull List items) { - mContext = context; - mItems = items; - } - - @Override - public int getCount() { - return mItems.size(); - } - - @Override - public PopupItem getItem(int position) { - return mItems.get(position); - } - - @Override - public long getItemId(int position) { - return position; - } - - @Override - public View getView(int position, View view, ViewGroup viewGroup) { - ViewHolder holder; - if (view == null) { - view = View.inflate(mContext, R.layout.popup_item_list, null); - holder = new ViewHolder(view); - view.setTag(holder); - } else { - holder = (ViewHolder) view.getTag(); - } - - PopupItem item = mItems.get(position); - holder.checkBox.setVisibility(View.GONE); - if (item.isShowCheckbox()) { - holder.checkBox.setChecked(item.getCheckboxValue()); - holder.checkBox.setVisibility(View.VISIBLE); - } - - int color = ColorHelper.getAttributeColor(mContext, android.R.attr.textColorPrimary); - if (item.isSelected()) { - color = ColorHelper.getAttributeColor(mContext, R.attr.colorSecondary); - } - - if (item.getIcon() != 0) { - Drawable drawable = DrawableHelper.getTintedDrawable(mContext, item.getIcon(), color); - holder.title.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null); - } - - holder.title.setText(item.getTitle()); - holder.title.setTextColor(color); - return view; - } - - static class ViewHolder { - - final CheckBox checkBox; - final TextView title; - - ViewHolder(@NonNull View view) { - checkBox = view.findViewById(R.id.checkbox); - title = view.findViewById(R.id.title); - } - } - - List getItems() { - return mItems; - } - - void updateItem(int position, PopupItem item) { - mItems.set(position, item); - notifyDataSetChanged(); - } - - void removeItem(int position) { - mItems.remove(position); - notifyDataSetChanged(); - } - } - - public interface Callback { - void onClick(Popup popup, int position); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/WallpaperDownloader.java b/libs/candybar/src/main/java/candybar/lib/utils/WallpaperDownloader.java deleted file mode 100644 index 5315fa3..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/WallpaperDownloader.java +++ /dev/null @@ -1,156 +0,0 @@ -package candybar.lib.utils; - -import android.app.DownloadManager; -import android.content.Context; -import android.content.Intent; -import android.net.Uri; -import android.os.Build; -import android.os.Environment; -import android.util.Log; -import android.webkit.URLUtil; - -import androidx.annotation.NonNull; -import androidx.core.content.ContextCompat; - -import com.danimahardhika.android.helpers.core.utils.LogUtil; -import com.danimahardhika.android.helpers.permission.PermissionHelper; -import com.danimahardhika.cafebar.CafeBar; -import com.danimahardhika.cafebar.CafeBarTheme; - -import java.io.File; - -import candybar.lib.R; -import candybar.lib.helpers.TypefaceHelper; -import candybar.lib.helpers.WallpaperHelper; -import candybar.lib.items.Wallpaper; - -/* - * Wallpaper Board - * - * Copyright (c) 2017 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class WallpaperDownloader { - - private final Context mContext; - private Wallpaper mWallpaper; - - private WallpaperDownloader(Context context) { - mContext = context; - } - - public WallpaperDownloader wallpaper(@NonNull Wallpaper wallpaper) { - mWallpaper = wallpaper; - return this; - } - - private void showCafeBar(int res) { - CafeBar.builder(mContext) - .theme(CafeBarTheme.Custom(ContextCompat.getColor(mContext, R.color.cardBackground))) - .contentTypeface(TypefaceHelper.getRegular(mContext)) - .content(res) - .floating(true) - .fitSystemWindow() - .show(); - } - - public void start() { - String fileName = mWallpaper.getName() + "." + WallpaperHelper.getFormat(mWallpaper.getMimeType()); - String appName = mContext.getResources().getString(R.string.app_name); - - File directory = new File(Environment.getExternalStoragePublicDirectory( - Environment.DIRECTORY_PICTURES) + File.separator + appName); - - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) { - if (!PermissionHelper.isStorageGranted(mContext)) { - PermissionHelper.requestStorage(mContext); - return; - } - - if (!directory.exists() && !directory.mkdirs()) { - LogUtil.e("Unable to create directory " + directory.toString()); - showCafeBar(R.string.wallpaper_download_failed); - return; - } - } - - try { - File target = new File(directory, fileName); - - if (target.exists()) { - CafeBar.builder(mContext) - .theme(CafeBarTheme.Custom(ContextCompat.getColor(mContext, R.color.cardBackground))) - .floating(true) - .fitSystemWindow() - .duration(CafeBar.Duration.MEDIUM) - .typeface(TypefaceHelper.getRegular(mContext), TypefaceHelper.getBold(mContext)) - .content(R.string.wallpaper_already_downloaded) - .neutralText(R.string.open) - .onNeutral(cafeBar -> { - Uri uri = Build.VERSION.SDK_INT >= Build.VERSION_CODES.N - ? Uri.parse(target.toString()) - : Uri.fromFile(target); - - if (uri == null) { - cafeBar.dismiss(); - return; - } - - mContext.startActivity(new Intent() - .setAction(Intent.ACTION_VIEW) - .setDataAndType(uri, "image/*") - .setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)); - - cafeBar.dismiss(); - }) - .show(); - return; - } - } catch (SecurityException e) { - LogUtil.e(Log.getStackTraceString(e)); - } - - if (!URLUtil.isValidUrl(mWallpaper.getURL())) { - LogUtil.e("Download: wallpaper url is not valid"); - return; - } - - DownloadManager.Request request = new DownloadManager.Request(Uri.parse(mWallpaper.getURL())); - request.setMimeType(mWallpaper.getMimeType()); - request.setTitle(fileName); - request.setDescription(mContext.getResources().getString(R.string.wallpaper_downloading)); - request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); - request.setDestinationInExternalPublicDir(Environment.DIRECTORY_PICTURES, - File.separator + appName + File.separator + fileName); - - DownloadManager downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE); - - try { - if (downloadManager != null) { - downloadManager.enqueue(request); - } - } catch (IllegalArgumentException e) { - LogUtil.e(Log.getStackTraceString(e)); - showCafeBar(R.string.wallpaper_download_failed); - return; - } - - showCafeBar(R.string.wallpaper_downloading); - } - - public static WallpaperDownloader prepare(@NonNull Context context) { - return new WallpaperDownloader(context); - } -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/listeners/HomeListener.java b/libs/candybar/src/main/java/candybar/lib/utils/listeners/HomeListener.java deleted file mode 100644 index 578c836..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/listeners/HomeListener.java +++ /dev/null @@ -1,30 +0,0 @@ -package candybar.lib.utils.listeners; - -import androidx.annotation.Nullable; - -import candybar.lib.items.Home; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public interface HomeListener { - - void onHomeDataUpdated(@Nullable Home home); - - void onHomeIntroInit(); -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/listeners/RequestListener.java b/libs/candybar/src/main/java/candybar/lib/utils/listeners/RequestListener.java deleted file mode 100644 index 7a10959..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/listeners/RequestListener.java +++ /dev/null @@ -1,28 +0,0 @@ -package candybar.lib.utils.listeners; - -import android.content.Intent; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public interface RequestListener { - - void onRequestSelected(int count); - - void onRequestBuilt(Intent intent, int type); -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/listeners/SearchListener.java b/libs/candybar/src/main/java/candybar/lib/utils/listeners/SearchListener.java deleted file mode 100644 index c941058..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/listeners/SearchListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package candybar.lib.utils.listeners; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public interface SearchListener { - - void onSearchExpanded(boolean expand); - -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/listeners/WallpapersListener.java b/libs/candybar/src/main/java/candybar/lib/utils/listeners/WallpapersListener.java deleted file mode 100644 index ee52c79..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/listeners/WallpapersListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package candybar.lib.utils.listeners; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public interface WallpapersListener { - - void onWallpapersChecked(int wallpaperCount); - -} diff --git a/libs/candybar/src/main/java/candybar/lib/utils/views/HeaderView.java b/libs/candybar/src/main/java/candybar/lib/utils/views/HeaderView.java deleted file mode 100644 index 1150463..0000000 --- a/libs/candybar/src/main/java/candybar/lib/utils/views/HeaderView.java +++ /dev/null @@ -1,59 +0,0 @@ -package candybar.lib.utils.views; - -import android.content.Context; -import android.content.res.TypedArray; -import android.util.AttributeSet; - -import androidx.appcompat.widget.AppCompatImageView; - -import candybar.lib.R; - -/* - * CandyBar - Material Dashboard - * - * Copyright (c) 2014-2016 Dani Mahardhika - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -public class HeaderView extends AppCompatImageView { - - private int mWidthRatio; - private int mHeightRatio; - - public HeaderView(Context context, AttributeSet attrs) { - super(context, attrs); - TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.HeaderView); - - try { - mWidthRatio = typedArray.getInteger(R.styleable.HeaderView_widthRatio, 16); - mHeightRatio = typedArray.getInteger(R.styleable.HeaderView_heightRatio, 9); - } finally { - typedArray.recycle(); - } - } - - @Override - protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec); - double height = (widthMeasureSpec / (double) mWidthRatio) * mHeightRatio; - setMeasuredDimension(widthMeasureSpec, Double.valueOf(height).intValue()); - } - - public void setRatio(int widthRatio, int heightRatio) { - mWidthRatio = widthRatio; - mHeightRatio = heightRatio; - double height = (getMeasuredWidth() / (double) mWidthRatio) * mHeightRatio; - setMeasuredDimension(getMeasuredWidth(), Double.valueOf(height).intValue()); - } -} diff --git a/libs/candybar/src/main/res/animator/card_lift.xml b/libs/candybar/src/main/res/animator/card_lift.xml deleted file mode 100644 index 9a334f9..0000000 --- a/libs/candybar/src/main/res/animator/card_lift.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/color/navigation_view_item_highlight.xml b/libs/candybar/src/main/res/color/navigation_view_item_highlight.xml deleted file mode 100644 index 2c3af62..0000000 --- a/libs/candybar/src/main/res/color/navigation_view_item_highlight.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/color/navigation_view_item_highlight_dark.xml b/libs/candybar/src/main/res/color/navigation_view_item_highlight_dark.xml deleted file mode 100644 index 9818ec2..0000000 --- a/libs/candybar/src/main/res/color/navigation_view_item_highlight_dark.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/color/tab_icon.xml b/libs/candybar/src/main/res/color/tab_icon.xml deleted file mode 100644 index 31bd514..0000000 --- a/libs/candybar/src/main/res/color/tab_icon.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable-nodpi/clock_bg.png b/libs/candybar/src/main/res/drawable-nodpi/clock_bg.png deleted file mode 100644 index b4914faabb6ad4b4e9a0fde04b0d5f76d5b0cfc6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5899 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

^zh7&MX5wJH)NI~8!AXh;ckKa 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 Y&29CS1hf z;&lrKP9Xuw83G)Q0y0g;1sqB&tqTN1m{J;;92^*msvmxId#V+EiHEuN{K{EZuk5MX zUH`oNJkUIHz=1^F<8cfXa<32XnZ3T)(m34s^S9aS<`IdfFbE%r?sqx54zhMY6+Uj5Je_q%of|JQ}nEWc|oY&*)!kaN~*|Ji?hK#kjX z&pgluv|v{0y11i04^{xpIJ;?j`v3O%oHA1x8s6S~{`J3NI+ME!1A~GG1B1f^28IR& zMg|5)U<@>|Ffg!i0>fU2fk9wY!Du*)riamdF?h;{+n;}UrGZMWgzRfOD@BbP7Yi|L zFg;yU17oVQTdd(X6t>V}WRTuG=iKv|KQ|noC|_pW$Q#+WmtjNw>*z_y0}bKc(h-(UZ=S@V5!-RH`P r_s{?SGI-y&SDle}zY;sCa;89Z0FCtDnm{r-UW|n$L42 diff --git a/libs/candybar/src/main/res/drawable-nodpi/ic_app_default.png b/libs/candybar/src/main/res/drawable-nodpi/ic_app_default.png deleted file mode 100644 index 2a062bd2fb421f2839fb21bdf189a0099f7eaffc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2854 zcmbtWc{tST7yr%>Vq~&4sqAG&7(Pzv*p^5(1Kt0U;VeM8Q*Bls3asbSx1$bgOO=nc8m&wdz?PO z>m&wuEQMneS5E|?=zA6*c~T20v6&R#K=jElI%O^!QiwZEQUKpGdK^Gz5WQMO@Jhyl z@!`ezqbK09$b+;L1284L1P{{Ev(J!2Fy|vrdBo|*R$GSN#DN+ts-P|raNQVeDYMrh z^D&uOW5ueo3cZC3E5d^*ta>77gUonWBp5~s)iQEW_RTz_jFF;V)eSB%1)F5nTDipN zdZ!tJ^V$WVk$Q)mBDBE)saN%A$yon9V-U6eT^$@Yvdlbp&@pF#0`4cHmkcg8wcR$M zkrZ2Pb*0<_6g+4&4|ZF1z??tnDE35CW378PbD1H|j#!;7MmXKu<*b33 z*VZ5a2z3(hCgjN1>o@YY29 zB?Z(E6K`vFYkZ~wIen@QSPu_Xz zvZFQ;rSOgB?t9<^yLcRz##j0dQ>|US3hPhe3G$XLiJ~YNGaJ>s)&x^U8ixw^j63VI zV8)rH@qAnaq(M^hh`Hd}>7pb>=8f^yKhNP608c2XEH~Z~A)+!erXT;UEVulC zHGfT*cc~&aYQ7{dL|xBriys>$?t}`{44;VWhPl5dgl%aSrq3KyLky4D6Q-Yv*a%H6__5Ju~(xV zD0zqVt$K65FIZsY6O4vtMxJ>AVV(;8kA?EF3$bwa`oshau*MZl7wWd{myW@1v~4ldBN#w~XY! z?%LePD377prBYJ^p8AH1!t$fLFT5Ufig9w}Ps0j4tgkPm6%9WdJ$%4VlzCl*BM2*2 zl9Y%4k_@)tybx=-GWIL{&_LwTosU1NvWI{xm-l9}XK~-1PUgc3^np@3XHbo9pKmmB zFF2E6wUfZSk;Yk3+q9CovvOXrK}7$l7!rRZiOO=P=jp*Z5_}Om-oQ(a3S0o733mu| zRJD{D7*PAyioO&wE4-%6*dH||AWDbVRnH&|p5cw1c)6_9K_#U_nP^WyO}1NKYb(+d zFe=bNGN;Nb90lg7#cF14$aHp@@}km_+*h|9Wuq+hAM!~+vXqKn7-}D`xvQ9Mq5I0M z&=_?>*YfACnp~B*k+!VuQND4(uI1QvGPf|5BcAEPCGQ-x{1l*6n0YRyI^i(4E)uo6 zsPYKfHsOrm9357Xz~G!HbGFrf@8H7Q?n;F^i-olT=~8JoD-3W`%&Byv(re7;g9veSqy}rER~&diU+qmd+~_{NRB0Jv zF>1n7i#;S-)bFy|YjbrMr?u}*fnTSG0?T(9(tCk;TwDntZL2n|nv}dUkp!aBFTC8~ zy^fP$#6h=CxD7qYXI#qk?mjx~{XQs4|=Bm&ywD z*`cLceTf*=+j)cUOA=xWb|KLqes?K%wa<^Z?^D<)YG<*Tn)~$Xcl7Y4>O!|rYx}cY z&i(iw(Y*_on*Wkk1WLM>qHqi~bFBW;PI^=lCaZ1L=F0Q~>K`I=VHn(&A$h8fXme>p8wxIF5Yqe|WwDezC~b|rxo5hGKmLDOni6fni)b0x>74xhE| zvtlMu#p+6CyZHmWCPSiu4Rcee@r(I^a~8)s zzbZd;7^x{_G|jJXd5ccK}6|x;5mlg!O1X5Bbu#ZuC?8p{w`0dj5B4vu4a= zh`orAZ34g_6c3mQ83TI%hr{$LTk!m**z$=b6f~exk+?zYp;si%OnnghR3=iv+C^>Z zen{1Rm@UI8+}XIO3DXwR`6{&RLtJ0bam9Sww%5A6_c3qwWboU_%@$g~4d*%EoV{GH zYDSEqzE$maX}gf&uP$L{jwsKy_10v?jmb zKXwE97nOw=%nkdtvGU`z(zaZzoAr3Vj2sqo5mAd;N0LUyAn3L8o@PoO5!>VYGwKID z{5HjtJ2n}Ye|eOCTxvph%Gd7-L2bU0UVIIUTl?f$IQKRAu%S`(HCaG}-4lUoF2I7{ ODS%)`!q=L*$NdkH;`Pn| diff --git a/libs/candybar/src/main/res/drawable-nodpi/ic_splash_screen.png b/libs/candybar/src/main/res/drawable-nodpi/ic_splash_screen.png deleted file mode 100644 index 65c284f1924b9bb0401d1f5ba5a1c67c908ce15a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7262 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 - - - - - - - - diff --git a/libs/candybar/src/main/res/drawable-v21/drawer_bg_selector_selected.xml b/libs/candybar/src/main/res/drawable-v21/drawer_bg_selector_selected.xml deleted file mode 100644 index 700b896..0000000 --- a/libs/candybar/src/main/res/drawable-v21/drawer_bg_selector_selected.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - diff --git a/libs/candybar/src/main/res/drawable-v21/navigation_view_item_background.xml b/libs/candybar/src/main/res/drawable-v21/navigation_view_item_background.xml deleted file mode 100644 index 8b4aae1..0000000 --- a/libs/candybar/src/main/res/drawable-v21/navigation_view_item_background.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable-v21/navigation_view_item_background_dark.xml b/libs/candybar/src/main/res/drawable-v21/navigation_view_item_background_dark.xml deleted file mode 100644 index 8b4aae1..0000000 --- a/libs/candybar/src/main/res/drawable-v21/navigation_view_item_background_dark.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_about.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_about.png deleted file mode 100644 index 4f6fac6f5105d439d18f0618050c83f7ed6e1ef2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1676 zcmdUw`#aMM9LHUnmYI~Lxz(Z?k;r9nYyRhw;19ah;n9G4u=T%$2%bIp=mc06ci zBQ?e2+Ewv{ts^nlaw&=9S|^$?Iy*Z5#d$r?`}6wk{XFlVKAB|Faj3SDwwjt6l;DM< zZaU{jz?z%4r*P-BO}!wWqIqum|Bib^6=HJ(5JM%MR)gCf_rLN-jr4uz^CzV@!aTqy zi&bB@!03OAPwOC<>nrsE*4;1SO!Tr6qNn@3k3AR(cID2097^Bs;BHZQHm@q!^gLZn z4TK`#09w5Ir;(vwB`4r%AG+VIBReuUcyT9#+1kJUT*8(y==LoO1Bs;5iQy`8zayM!`9NOX#uOA7nku)Qb^HS)If{s-f~XpQrfowX`AZyh?U=lz*Zc6~4fu|`sLKWR=lIn5HPOge%%Kr#WYb5V*BUnq{ht2*{?1@TM~T~othzjK z%{N(=?g+HnPBLY3gypD5weEz}b=xGF35pgu&oar`y4}$Ch>H4&N8Btu7oxxy?arq} z#s@tB7?9%1OU*{GQ&gg0_z^f{;Y&*MEq97__+nct4iO|k;sdsPNgB_5mW;r}i+(}q z)pzUHfDxW~Ye9J7 z%|d((fOnI{^WMT>JTRBB$0Filj$9}l!{!6=4=f6?oG{84UI;hmw(zh$(;l`EM%mh4 z1j|2=mbxU())=Vajrk-Hg7FGK|M(~K+Dc*e43}KSC|6|f5}M1N+qOrH@Ht{WBE|wf z-eibohk&VxdS}^n>7(Z!5J#7=HwHKdBeh)~{x+%dn$Hza??5$J%mBql(czjyP>YB% zVgW}o>Ee`v=^#a+^{+4?*Y`}N#b$AiITZEf<dR~@GbJtHzmkneK464^Y7|;53 z&0Nk^<~j;}D02z^LL|r+=6;57vFn`NzQ?$sBKS~aTmQ0_&&*n`a%S(cR_x3gUpW-e z3>e>~5Y-i0vERkYp{>_v-+nYo7Zkn|ruJJolq0KAAvTR=_2tMiR0z=Xh)dGs16w}At#g3X(>!?6Z>IdEwOd`ol?+084fZyp;Xf# zk>YUu=p8@~nQR;0EP%{W@~Z&qHBpes4#LmsM{xG0*P`rj6U{_<&(#J;HeSoj*0~3% zez}8(IgkXPQK&Mr?R8zuK=@e+R&6!Emuh$ihJh#VzSMu+a#b`OU5qS&Ye?v>v4tL~ zH%GtHzGk$r47zzvIcG{2d1ILyHYGfWrBtKa83J9g^xa!}FiBLfF#jlku#pX3m}2m% zMlZCAyjBHiK@RclA#)R))k`ufsvZs%3?ez@kq+oD!fi2wTkqoCo{PQMgH<&+U}_?R z_ftSfD%>pao@rX064&;MR-EjN)|6+leRbMML}B_mG4_nP7CRes=+B2eR+M4NFsAux zQV0FA=eGL$pN)V-mr0^{_ij~vWW}4mJl9_dQ~k}qHQB5{9-S+m#Jp#gYb}3-$Nh(@ ZL8bOoARb(pHRAvHDFjavt{ThW{0qh$ycz%i diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_apply.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_apply.png deleted file mode 100644 index 980e944570f947e1d44ed1ae6fdaec7e6fc158f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 639 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=ssnsNT!HjJfxQ(n8-R9emIV0) zGl;~mK7Rl5?#a#^{lEXeFLu|-{_Jfa^LT!}3Qu|P;l&cyPuo0SuaVp?@^fbz0|R51 zr;B4q1>@U0+e;5Sh_GJN*PqC+_xrpz`<;$7xwc%f*NMQ0W|N!1BMgd4JN#AT+sbKalz{; z)fOwXAIb5(>e|uXyi4ib!v*U)kcF%kaewGg*bj8yiT?o(jI2|lxfxkoxIvDM5_|cq z*{-|fqocfQ)b9n~mCly>e-2x*oA;IY>x(<)9gIFWZ`E>1(RZm;YN}sy?i??z=-+)P qGpu{lto8cl%Od5Rcj67ZaT-G@yGywpYSLL7p diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_faqs.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_faqs.png deleted file mode 100644 index e4047b478b24d36c3d8d2abf9e7cd796f0542dfc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1956 zcmdUw_dgp51ICpKBGK5RimPhHKAWaB5+W2?YL6JLaf(B&o~k|Su9eU#MNyGBRVx%# zdv6k}wMp$7J)?)y_rG|*pU?Are|~;?lF$}NFi;H0!omVZnIN#|e)cn*Z09}nk}vsO zt>`;=qjUeiqwilLb-uwM2y2035m7-pKYmfxIotcGKKCylIHy_G+1^C~`|Sc8NXqZW zL8Y6*U~7mtBqbt{Iclk0GkqTxv%WZ_LQ+mOquNqtpAEB8Qs)51UD2Ot80e- z(Gd(blaO8|A!~Dnm9H2x#H<6Z&?Ob^c8IJy{N3WE=0%Cqj=93nJ_vawTUh=>Vt;S+ zuU(gTiFPqJj!wd$)!73%xz?5k>)3#bdDJPWTqFWiQ)*4sUa*kV0*#{@yAgAUvBh5CdY57^HI3qL5>bfb9**tVB;Ji7;Soy)eOew!KatuD5t<1pq{_Q2#^CAff7gB~*hq*I zuyVRgYqP|rBiwORyO3J_3b@hz_(VRi+{0~h@9yJqkC?%-9U!^yk=(z(Tn+dgFM#A+ zj?|;c?yOhK8G?V{mmCq8JXfV4cxj|d@DDr*(p-a@hjc5#H;artd;xB*1hgHUR&G1S*XZ|^Wgb-jFDi;5?z*iSpnHHuBVQ+nisXr!?! zRM!z_8X;#&y^ie8lA1}YoyGklljpAoE%CZcjM-z5#3A{`7M;u+JGzE2%t&h(zvEP$ z1e?7uG9C6Ig`J>PN=@hb^zc& zj(U#Py-)uJ!g{terC`$N1k}EH$6-EZMp(q88M}rLup&LZ3+LXn$vc=6Ee&KC`}~!y zYd7gR>drxNn|Xn8gf&IW;uvLObgE^xVK-!0BZYLtBk(Hn{xDgc$G%65qj>*BX(mbn z*3$qT5K(>K4!zCBb5#sCTs)thIV`a@eQ@`AQGT_m-umZGXdqw*-09BO(V#O2gkGI);3mp1d zY=Yt4@3`0+F{d!KxmFw1W2eOQyL!56?D#I&7BTsbB!XNR(e z`(YTuDzrjZsRd5Ys)7ZcmA2SqEa*bgRlz_+`79d4_X4mqK(SHhMYR{W&N&DTMIwzB z*?AQyJu?1Jdg6g)@m*_pjiUFo{bDg`T}<9l&DTLaISE3+2PrE_B?WcvLOJ`m^cMii zZUif@m9u?ePlyX;Wp#T2pZOU)rQKvVz4*Kt*x}7Du?lNH6|lH>Njf2#zNalT2n~~* zRZ@S|{ce)q>>r){uYD2l>?%KD7`1N?j~okYacMv%w$%;tV~5^TDuH@gC~{f|7l(+1 z_ecE4tXZ^&^ZNJKT^UANV-uF4<-$i{w-hxwoN7Wp1L*iBIM8f0VbQr|*;{%_i*8 t6hgQ^IHW9T&X$tHt6L$DeYF0^*~K;DS0dFj&E)6TqKqsM?+jg{{{s*4Q#t?u diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_home.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_home.png deleted file mode 100644 index 74f7e4ec827cd1fe405d5823a31fef9c36226e11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 686 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q8Ax83A=Cw=>H>U1T!Hief~IZFZ-CZol?3?( zGj!*(EdS55d$Gjn?Hbn)n><%={;U)J+a|cbeg5X@>+5HyH)p^9E+Dg7#L|FgH3I|V zR!HaR~ixXv{lF!Np z9q+P!;wQ9MwrIIuetS&xi?6s|9`&D@AneNmnS=myuQvcyZXDrfo#-yc2Z&rL*$7P&Vv+8h%+hqT>W;riD ztmPJ-^ykIbM2E5i>lJxUTux@$`LRXrrO1_4UuHVxxb07340>zHEH)v^D1~)lX}{uG z-jcSS4XtP7l~qe;p77XIamMi2em&vEosTviim(n;t9oPnWz}n=kExgZFRh+BHTBVH z#v7kpMfxA|-ZXi6@pZS+$EO{;Mfdt0@_8cZ&t279GBYB}rPgQq6dmF0irK3keZ00V zR%0ixbD%`n3Cqqz%QI)r{P>rDHPLhCiHX+5Pn-5XEPEJV)aN*_bKaw)XXDz8gqL2F zYF;6F&c|mp`z5WOnKOJ={C~e%{E$zNp{LxUeLrVLeEa{mOL|UcS9k~i<;RA+f&Z== zW@Tilt?r!`C8GInKM_szinhJ{PpSCGcL8Qi-7!mHyh#R z)dJ^SYQH@G$h&{7pS5uF=IK|A4OfVL_2J2JwHE$5vG=%9(_+c~i5@CKoi2AAciVpx z>%NvYyZ>v%iCvS$T)yQ+q&{3(^O!ULJd>k?PwIQeg*68801fA2JmvIkdQRw~)Tr@{Lu( z{m;HQrk{9I68huaS;fu#DUMyQ>mKV(mWi4$rJ0qrem0*D7 zYuVmfu=3nQefGeqCNG!{N>`uDax_rk&1%x#;q#E;V4snO_J1esvj=b59$KKi!>M0W zSFuBo?P*E9h;KpVp#_pVls^ZuZ&&5cYj9Rg;oii_Bp z|LF1p9+y`2`-}JR2Dbii`Iye=x$C&fJ82cUpDRn)jntK8`m5eDrBr`X*mkV>){f!= z$<_Dzb~DNKNY)1IVaSb-Wp>PAjs14-jOt!16WN(F6|&iMYm>thg`-?8Pe%xBepPYw z+>E_jH)tK0{yFj2Gw&K+`Q@n`+m~B$YfL$(BVsSf?yq7k#(ny{yFI7pXQQnVJ04B0 otgL09v@-JDtknNIz^R~)@x;f28mV1PcR&T0r>mdKI;Vst00~3$DF6Tf diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_presets.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_presets.png deleted file mode 100644 index 48be2346263d488c8ad85ddf615d6d17c70f7d94..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$farfrZP{#WAE}&fB|p18+Nsv_0%M zc~FvI)xhV&exY$8(IC|-b7w%UNZaB zofFje_PNl?r&~> zkN;0g@iTs%@W}DrmWubSLAl`?^Y^gdc(7vA{M*MHcYR+G;PC2jc+264`|+1o-)455 zqC9WvuI(%~OYBtIg+25Vts9_b>n1A@~e-_K0hiiJSq$d@Gxj8?}dZFUPlu`Jq0h^a=LW>(Ca(m^06w$EVI0 zp?AY`FFJo|P*LJq+t#46zr*R_;VXCNuKc4K=T#qHtg2>(sw1ng=NaQAYL~YhfGs(LB^%mLx2LugD#1`SM*ZA8-2*J`sv|s2ZP8}jU5~s z>)GEk7AY^-vksClsxF@R?!+?X{)+ETg3MLx-aOCy?5kX7C~LSNhJV}h`Xu4>3>U-j zdD*Xhyz`E*iF<99y^*x&i}^m^+QOBwce@(8JZf{FX-sdMy<)esF{5a~dXtYaQ{-y8 zJ9BQg&0E9&#p_b)$CbZ#3owcnuDvVwV(0M<%x6vBcnZB!n!Q!x)2tVPUt?$N&iA;; zcl_38xrBz5yQ+83&-#2e>;1iHvy+6EnoliRbT&M>Htg1u$dDDJVy> z_t@l@XB-*7JWe}Xv+>O1HIte@IsDuj%a*x!qj%$*y4B`yCwVvB`Iot&wkUGK?X_%H zTl9E~_J`cL_|);8NST+Z!`q<1^y>_j3s)@T%UHK!AK!|=DX$ySx=u;zmE1tFlSSjj zbVpPXm~)`+3SAL?c&V786jwdGpE z|E0Fpdtc6s*-*BAyX`x@P%F79m)Gu&`}6hJvl<~m!He&|G9}tcznVK|UOFh=JYD@< J);T3K0RXQfotppv diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_settings.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_settings.png deleted file mode 100644 index 26f363dbd1df4c49932c912b2b1d784331ae3abe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2147 zcmdUx`9Bkm1IAU@GL|&watj@k4^xXu!(5H}*vK_m$97izm3kRcBC7!grw-%j0?fSVKDT2{IjQ{FtP*&I+Cx{83z zNjB12fUm+hqYBbd#di{CUSJNdUdlFy-+C5vmV3g>cd6q-uA4riZ}WwS2mowjfyCb3 z^Q#-Vx9Nhk=!f>QR<@;#$j%Op>;Bu$#C!TcY_ILn(u{ZCmJ-|K=ApXSHKFb={GEcH zCZRRGiC6$<3oYnuViBCfpjCemqNn!mkQqy_`uM7Sm-CVW_ZQOYwpBg+}DI@;#>hPtYU^5ZSUNE9Z8dz4Q%)hsj{mw{! ze^}LZZ4Pn0tW4u}DzlDHB|9mv9c0GYYxvhLt1p~X0olcBuEEj+Pn!T|RtWI3cp5sU zdrqTb`K(&2`oqpqQx@l{{(76zD!l4e`?>Z^3bG!u+>9ndNHjqoUMX8KI68m7xdBEw z&yZ^JkXrq;d`dqwE-44^+a8a)0%(~}$QazMk^xE6*L=U0ujGOs$_do+?^v>665^fb zbxBZ&WZD-UhEc(K^=Xs@j>>!L>DSF?QtA!)1Z=p1@sEK0;r9^mj#K*-6BTIyAtaIu8IJs*^ znDBqGrFMV&jHOgEmPn~&`>tA+=Vy!I`;R#ak8?|sX`w;=Irurv z__uq!ddsBS_>y(VByo;726zlT@+C?hxZfi$SA!$a)|kapHrnj zjW_hYt%dRqk26^l$S`ulHu=%xyP9%hbM5;j)CQ}vZ90Ou9#_>WKf;~ z(~bW1d`!7sCKrRJmY~cXB?h1tZbubrdcF)*s#WcSQzq?fA7315R2$CSJIrhhKu-6I zC6_Zl-Hh~oaG0PRKT9`i_{&V%a6y*o5?r+&e=@28k0cU~Oz|oKT@=0re+72f7e$2C z^Ce`AQhDwN*;zbICZoSe#hi5Hc5&E>71hqZB<22ebjD?S-2huF-g)`gtxBOPUFi)B zI>kLCf511f=-X!Dw)eBL$ndGs#2AfL$n#1aM-@~(HoGjD(!}k;cCV)gTn%#W_0hY% z=&*#k(fRdvw@HMZcDY<-v-BLb&Q2N@4AeLcl5!^E*mP2- z)nfp|5@BsuOB>g0Hnclu{c$`|P>@FSdxs7(ZE%S1ZLLcJl5roW!QTW~QO!TR?`*IR zu4HV$o(Pt>;FXNvEqeh(2r*z4o|!bu1>=I}LF&C7DEwHea8=+lqwehvI`BvE&djTa zJYhQLar^0d0y05hI~3qO?ua{5l4nB)o&G*UCZTT_5rTBeU&T`YD8lPzD%g4m*D$H$ z?0Ub`^=;|3iTs%#dM zf^mR{l#Jhn(i}5Zwm{5Vc}__FY6Rg>o|A`Cepu0|7Jr=0L_`c=QvL_KI=bBe diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_wallpapers.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_drawer_wallpapers.png deleted file mode 100644 index 8005ecfcc647eea161b2ed351389b08bcc554565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 725 zcmeAS@N?(olHy`uVBq!ia0vp^6F``Q4M;wBd$farfoYDXi(^Oy=yNLA8c*@B8Rt@SL#queR^Po=cXi&igpHGLmFDig{rpxSuh`8i+rEF>$JV_o z-Fk*xQsDO-_RG%RFXnyxa-nEfy1DI@1=U{yn%`Y?=H2DaZ~8*c_R3PAzqG1SG1R$x2t;LyP!JBc1iWI>Z?EA9e4QdQswcz=lkw&Yd*e}e+%^4&v%*c zvfr+_?c59G2;YgWeepeDb@i7EEZ@WQf7@PpBWFA1{k#HxQ(yo*-K~D#d3|=`N z@R{8wYxsQ&(*NoGsHnFR*&HUF3e^zDa-xYqRXlvs5 z{mtU`cUjN3E^2@Fe%{|N7tX%>?#h4mzU}Xq3s?Vp{BmL4_ZvLXM|T}pyRo2M>F(tD zrBxdDY=1^>YA@+u`{`~n(6cWVW_+I^cgc1eS4scNg^pnMvwL+`7zu}g;Xr)X{8#5z SB`&%IlJs=-b6Mw<&;$Uu4P#*d diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_abc.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_abc.png deleted file mode 100644 index e0890c07b1db831013e656773aea4e0f27629aac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4027 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 U>(|at;{Q`7=gbZA&p1B$Khr5>%>V!Z diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_action.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_action.png deleted file mode 100644 index 59f7d5d92f4e589438d28606407a20e71c3e2565..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20753 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_adw.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_adw.png deleted file mode 100644 index 267e2fcdb2d556b8daaa54b5b97d411c4d724d53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3438 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 QGXMYp07*qoM6N<$f+rfH_y7O^ diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_apex.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_apex.png deleted file mode 100644 index 9ed53194b13d1b66097784a3561f9b95c58d3512..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2446 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_atom.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_atom.png deleted file mode 100644 index 6d60a765317dfbdd22f2c21c18819775e0d1ff92..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5112 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

fu__Hs|NE9(Zn4k(`{(SKV~(+7jycA*ZQHig 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 W6keafL(^{n0000 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 RDuMt2002ovPDHLkV1mx@N~-_> diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_evie.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_evie.png deleted file mode 100644 index 86882abc8f29e2d94f9ad81a9aa666c770d77c34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2670 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 EpIriXX8-^I diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_go.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_go.png deleted file mode 100644 index 68fde282593c4ed0cd237d7c151e14f1ff20920e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5547 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_holo.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_holo.png deleted file mode 100644 index 844368dfb0417ae63c3a6bc1a8c01b1103964728..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 648 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58CaNs)Vi3hp+HJ2z$e62qvFno4Al6zb^>#%D6nIAuX>^=YV|Ns9d?|u#II&<>ww}||%#|#WilAbP(Ar-gY-nLyW z>?qOpFf~ehzmP!pb@kr0GaDkj#G0OJnqAYJWG8U*-l==1E?wK7kedI{f0DqVUDn*Q z6R(|Ae7uFwx29-%)Oet_vEz$OIE$!w0PZWpdoS7?E37fljwidioi_gs-7h@Ls9u>%<9)c%?r-IX=AEqF z-5~deHKTzI3wrQOs^a_Fk6ZsU$wy7zC|&V8bFcNyx|nmh1xDXkx2#yb`Ih%#VQsgi zH&@x&*S+BPv751kW54V4)xTZ@RGm};hWDQMDem6yQ-L9_c5=Q)Q2vU8DItEm-Sd}h yc2Z9hGnAZYTK{;Sf#*Xm>wmjbnBbAe;Lx)FUYhO>8@50Rkf5ilpUXO@geCyL?Ip$l diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_holohd.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_holohd.png deleted file mode 100644 index 890684207cb744f129625d74c8c1206b06e1bf75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 548 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_kiss.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_kiss.png deleted file mode 100644 index c932404ce45775cc5c9126474a281d2b361a80a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12048 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 i{y$uQ`}-o@`3?N;Ws`Kb>j=1q0R diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lawnchair.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lawnchair.png deleted file mode 100644 index 67afe80427005424e6cf2b388a389e2d94784d11..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 42231 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 b_w@e*L-EPqXJI}400000NkvXXu0mjfc0R-s diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lg.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lg.png deleted file mode 100644 index de9a816bc5a8cfc320fcb835e82c2a2af8b11852..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1950 zcmZvcdo1ZxOty1odVgs%Kni!!JFCH*`=i=jgo2@hG&))Yl0xiqJrP`RVJC3Tv%8D zIXuCzWP8zLjobILUW)=>c8K@~MKkq5wZ`qzyB{R(4{HS@qZ&E9tT#PmUOlzEHo2`^<4(COK6i}? zTR`9M=oi;N)wJ_F;Y;#LscmxrYc2jw4l$?SM3|i=;shd5l0U^-|I=1&EpJUf))~nP zt&j1xIeIJmZIiC)$zIH`Us9Fgg1KvQYkq#y>6#ksdi;5J@#Cmtiy`%J5&M)m!joTj zY(8{b^|200qulVC;%3al-n;WU&hM*AkqNN0m67gRTJy{mb@$@p`KZ8^^p&Qk;c93C z`yfB9+Jy9TBdx@-WX?pq95P!&N2!P{Y>3|Y!3lrPsPe$9iZK4yM^P9Nq&GuQx|1MY z8CG9eu@3e>31liHzxBwSiuy%kn8^+Jyh}X3)^LzZT{||;Mgr&wcH<==spu8+aO+a0 zYm$~cbG^8`<=Ji23$g061+5ZXnCutDgxj`NLrr+p!)?^^(S7XtR3|9JDD}EoZ{r{? zWt#uhgA5y|TSDmThtl3P9?ulhI7=G{F5a5m8cqy1Zqryta{#k=rAxKwgGz%ZEfjNg zmu1v}!e*rnL$r9*Abm@LkHg3KOW35tKw=SG@SlsycHT3V3He`K8_V#s&9jD1P#_U* zaFs`P7jBd>F(;VZDo0Wj6iZZY78Kl@5wT2IB>gAYqrMcfDa{=NZ?EWl>S-9+Q}2&- zeEx?K-rzNJlNzKG2I*0a0uV(_sqLhcXq@c&tI3dMx!YbD^gDXiyw_pT11Vh1jv9@1 zv0AqOjkQrsni5X9#o~?O(79N$_pKP(Zz+(gP`wBnQE%fFqcm-$<+2-)7p=^~?vy$n zf%aZun|V5Vf70k-d)$8};({Z|0EZbx8W;6Vue=5M7Ld zo_GgEcs-{VUc!b!&IA{DLmQvTwM!%q8F!!ExF7)ctOs%B9 zJ(9q}|G7Da=WZxxeq?{0Y@fM3ewugi!Z+qUNRB z5b;(^qv<1CYvckgpkHVd7bgp*r6>b-E(Ly2PsEy+H$_k~8k93mkmF+Aj?OJE zDi4}&?29QumalA8=46mVSAS$v4G4silM?o~>CmbOB5pLUvh7Y4)3;^E0s4^E*wZFt z;=&JRL&M4{Q*Cd@{tbb|{4+icO7%X4i|w@_`;m)Uxu+}<50+`SQVU)Pw&)zH=SOKn zV*`v!wdP4-s>7ant5V!$2SiRqHErb72F~!X2*kr(dsl>knfB6?oPpdgzJ*gQe`-GL zSn7}ssAd43-heguJ^%R@#9*_O7D!fDB$bUK<7&~}6Mm2t#*O3LD+O_;h~kJCVwPFA z3qibFk2By6f(6HNkbCx2J2$S{YXT1%cOA&Vo%G-uL{fbSVykas za_d)?Ef>ofs(&%CFX`>lQDl#qSMRt_1tKc~kyU}%cW=(*`5T2kuvNP(^VV<(-~{D> z&%_7ryX?S(!dj5f_@U+u9)y@%rnbBboX%6X0|}{TSMycGpG~oN(6qtaOP<@1?u_EZ z`l@F{py$DBWkRYL*i zwu8OE3WQ@=5ua|NQ`qTob;!r8a^zHcT$k`FqOWr=QPO)+8>8xZpt5dr*M%GNsAx&4 z)~WOJR?A$Of*>Don5^Y?E7`&prev&R9O+c(O9esm^56t|Iv>}j)g$cS zA7N6KCFYjQ&~bs^OzfDd(Pd4i|2M|i=cC-dLy^an;gQ6@@b;)49(vvHfX$EozS3P7 K`yV;668;MwNSp%z diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lucid.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_lucid.png deleted file mode 100644 index 5f2f8756fb3fb415e27306a2f1924f17cba881f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2011 zcmah~Yc!M#7k=ND*JTP*M(#61Q!oPIcr`yk=ZVE|Z#6 zZj;<^r4ovaItQgwE@5aeMsf?|K5pL}eZRl8zUR;0&)U!0Ydw3fwf7B*^AQD<1_}TG z1xE)vR{#JvQxK4o+6;kZp43f(p*T_Pb>inmB2iCIk51eio;i(=72#th@Ub(v=uzA? zAvT^$Mrg7Z(>}YUZCe@mkw^ zx<=Rhi$q87O$&uWZfj3*LpPt#FMh+P+~H#*`0*9J7jk>aiM_|!LJxLNY1?utcftAI zSk_CP8IzaQvSgGvb-Svsmbc>m;H!3M_n}+g-7_a_Szn3BKtxe*w{Rx1e8}~#ptylI zJU+v2m}=%tc;^T|bnqr;mwof5Dq1HJUW}P1@IBbQ`$mF70YHY~XlG3g>-(OS5ZY;i ziN9%-8U{4&-kqZEAL||vbI0oB$(OBOGZL%=O=F_KZh|yR60S|ncj)d;*a+_Qy{8D60-7brBD2Gt^My(*6W_OHR@FDCLWvwEtN%G^=Yi515WmI>=N6eD1E>QdEg^!olJ zi#kB(ns%Bpcf(eh>%7A*EBJjRvd!3f7uok>^#G8rs=B;{O{MEtDpQq_wTb~ibuWFt zSEQc-UQ^KbP{!Q9i|3nEqC_258dcI4xR*BBYl!tYBI%nl6ry0u zYY6=Zxg9tUe>hsAXlTo#<|9{OLMgcpe2!rSY$r55rg1qfk+GWiZWnS+fFi*b(1xAH z4(*2~y z>gBw2wHaf1$QhV$2o%YLk=#Kep}tSiX0Ji!pYudmYw3`mCfChC@CBc%$>3?|b38%$ z8E|;bqkt&LC?jYyVjTljLY~V;5E2W@HD^0|Jg!0CiZR%kM*q@;PzC z3LF}Dk6tNqMyZHO?n|)lLaCt@t@EH4X7F>821@Nt*4|zf?%9W~VC(hZt<&Rsd~(i7 zookTWoe5c3pjwv6v9{=B3`;~e-?5tr6RxF}A#Z8ZILGRT=P6HPHXqaLkP+vLLo(rTLFOj|oQ?uc+l(#q60H>>m?HeTvrM-DaBnYKJiPG|JkcMYe-=`qu+d9;(+czZOnN2N8uNTv>O1v7k2T~C@! zR{NLi3aKT*nS7UElSjhKbR=-HwDi@hS0@Mtg#n4~XZ3zMCZ8|8E6Uh7o*w$`!{(L$ za)@@xP#iyUV+|e)U2QjMG4+bEFSS1KvX~wt+#~0>5p4Wv=PV|OuJF{KUuk+Of|Vhz zlg_dv=Fk=9LiQb;Iv=<0ymw2ud`Y3trN;BDn3x7rA`WcwgDsBHn1=56U;18P|2t+l zJXg9{!at8*DQCyt{|w3=<*sqFBVVB{kfDD6 z{{7pxZw()=FVONq}2)bG^^F>$OA2q{<^ib zb^S>dq(0Z_bQ+B&yhs&XtZ!^=j4aVBmCDG&U8|2a3W&Cbh6a<#r0UcMUtbadzzB<7 z9G#e_>VGVAYzCyd)}VT#o}6{5;G0bn)x;?58{ENgdn0Gtd`>?^bFp z7v_EYzdko_okk)eSJ z)Udi)aGiYfi2kOS(N}v?PX{5z@WME+!b&W<8bUzSHs%Z8T zzMGS<_M$w3aAD2Z;I9lFUMPO^va-QBy(Bm&A-po1#Rg>bS^qpC&V25}%z3B!UWCzW}i&gG` zKCv8q;E!oNJ)-E=th+2sj-`#JB{-(k*n%oP0k29*b62C<=~q!b9d-y3uYrjnYTbxN_iDa{?3$<$4}8baq=j9Ss)fn zq^w1te$LjWaw}${rL>1QIUmU@Ifna9 zx+FXM90-Ab*`4$+?<4kyWmLQ2TO6rse3tp%h}k`o&Oy?kKxRU>eTtkJOc+LO`2k9F zxf3f2M|(yE1kjHNZ<)y&_cq59lqgP`(I&ccz67klbW}Hb`PCgQN(PTtgU}-x2lT)q z)K^FF_>?Cs6wMaet(_Uuz(^5iaT^6qZ4=6(OrI)+R5?8#KUpk1N6BTblgxVN% zi@nOeeq4={$$A7U&f=!qI_BdlEZ;ta=#zYSH97^8yu@s@mO*{|qMc`Y&xAD5WuPg* zPpe-F?NS(u65st!82*ZgcN|gbBEM8^EklY^eaS-~A}}1`lOv}T3rU>(z-;ix0~>sy zdAyckL`OCba1!|AQvF=^zD_);d{yy~_Gfy>1XNB7m}?~5^Gur1Z0|5+1(NA5KgrNn zpe?E(`R!h7cF#lKh>qVOUqPByN{Hw(+dJP^2a(n7qT3t7633~RuKXx{idAmI-BQFa z=)=j`{qYwz{!v-a5udOB(pq|BrM08nVCt3Cw)5Pk{*h#~mF;&rhj z05EfDs45xyXYMQn1gHMW>fayra^HPVcT0&z3F#u(f&2-I2)B-z(qVJ0eI?7rb~#a5 zt3y<#St1DYk?bgo~Z~N_rw@aeRmB=a{>a_4gPB^Xl3`ul!G>=r{^fm2!n#HThLR@&Uuq+f!h z?~U7XGR82B9(v%;EkhVIxhcZM16K-v%?I3&LK8(Vrb;%0cJ=a>)tll{X&};!lB`~4 z+c~D{xkH+#$*L2~k3Jc;wSSgvucnP%S8flklWPUSyvWj2`YL*EK{iY>iD+9FG}Y0u z6UuwQ#FB>{ivzE2$I;cuM}S&_TKvP!VVMaf83E4hcb;(WKogY&HV_96<9S-^;E|J^;~{SvmcSu&bgc9Da~WuyXPe`b@`CE z$&XE)4&kp6y*;%%;ukT&JfA={kmS3mdwY%-y`$X@u!SHc6{0)rXM)*Xx1Jb|L=&^T z@agKSpyhgSJ)yD(JVmw*_8-BmqW>&pUID%AQ}T!R`CfIrKfG<4L>Rpk@yeQcVt*mb=5^`x$D(8P0Ox~8@RJDGs+jvk#=eww^!{ICPsR4 zaPs9ALhnNzK;RI0dbps_lT*E__lqDNr4q%iV)OJ)z0snZ4%J)~)!OOS)t<=*|F7AH znojY=E0xGE+~0-J&bt2$N=xp+Mwx&{#dg;Ae73uiOsMX*jw%U2sl6M-ll3w@9Gb1U=rIhyo@J;ec< zg7V6&l06eJxG5mWjl97t*ZpRsKhh*KwLg}B5_lUV zw~O@U7r!Mr_vx_nlt44u8iCE7FBk2WbkAsq{T{)zqGvzLPRM^K<@~#)@!mPi7gAbPc2pE=uP24{pUsE;*B3rV#_LeYKzNBcymq(Z z+NMgpPr6~E#~i~^Hl7tFUkDllcS1ibw9&@$p3Tmw<|3bsCPtpiw4BCG3rF4pkOQDm zHj2XoN_m}9esLghsY&e{C+*gi#r^R-{Y`U7IU_t$hBES4`)AAZgvo~`Q0YF0{hf!P zI`P;^dD^*gAb#8+Y>SyVLWyyelw9L5AQ5M+d z|3n-4McJ+5fk|Jxp#vf}Pe_k7yY2x<+@a|TWYos@e;@2sCQpwIhm{r5!QgBkXzLFSe zFi&rVUYpK}T0nxvVr1NR*1q-@5RWE-TW!YEmK_eiKQ|T=nezpNC6T47 zJtzyBRxyp0JI&F+e;0Q!dvFwd)o%`?Bg~>dn#_vI;l_||MhY=HtevKH3bQ;3jSsrS zHqCk^JkHBYjD%78H*yV=&G}%KG?)Q?i)(Abwef1Z)``L*m{J_!GIfb%#%ONw+t5V< zX|#jqY8}9W*cwq91AwJv2C1j5IOzu0v(fz9zHD##+r7gnPE3&KG%8=)qincv<@J^fw3 zWN>r&>m^|+BD_HNyH+N4vWdE4dSF2YDhZT_+4D-@J-L73)5|y@6dAc#BuMJ!?sW3t znVy0#7IO_%?6;l%8EmZ8L;-wh5Gcou>1tOGKUcX6UXrSCcUW$MU>%ojGbZT>Kda22 z`C$%l?mE&tT5-p|2Yn_L4S7rUh+Zt6!hZyg;SG1K*EhPKw1@Bpb7{HZM%V21g=q=v zuUqHRV~2$6OaA_en4Eg{4P3OVa7Qap~3Z#enqucG31XDVt>3YRPk+Clu%JYbn1Z?eR)?rbolvj|ia6AtdBa z_A4#_ysm=!*GSRrp&2LFi2Os$Kz~&rB72k_;df+-9#9U<%0T&mw#$-V)TI0vftx44 z7}xf#K8U%_W8k6B?|GYUXBv0hZ!aL;oR{&Rz3|-%7FD3SeH+ld`7&8+emrHohiOcT2d(m8 zSEgyIn$Fu^agZS%Z*oHw&GUu7rbnT*2Y2(VjnN?Sb7hO8dOBg{u{EiV2x^~dA>Em& zST(`HqVzfCiK3_&$}{vAVy`;K(~-_n%5Vk0hcR5riJ|;E`v&`lGKH;oE=4e(CrM5C zOQF(t`&XveK#OIgi&;^oEI_qmMO^;%QRaG%V860l==6&(Z|`ZJr3;>z1PjYp;Wfd$ zok(aI;>SJz=#daE-EO&=s5^B8+4=yJ_F_Q<`Y&jlsS4zrIB^$79&9g9;~+p?_93 zFp?5oRZiUCV_QjI`k zTL?YxV~*S$l@a}CkQs&ox6WyrYy4GmdnvEp3>rTW*!7K)$&!6%ow=EnWtzhDm{|Ct zZC%f0@Z(i-O&^jA}(JgWB2p$V_crAOnmZI32Ln}_e!ys3yez2P2aoWU6hjT$}B6%UJk!2iKx zS|Wc!GFnUXxt!QUH>C}%b6@Ao(ZTnKwFVzgOs?_c&=8T#2gREV5=-?ja)NjpnXuH? z-MGeeRmL(wTI>qCRKz4cX9y{QJ>A=@{!DJ#yco zV>4w|j|plEVEfv1Os= z>|fo60Dq5hHz;ilWi8)8u9Ks^YHz!2sA6q6g)xTIfkXiLlceN?a8mw5#;hnXW%P5% z6q^zOYcKa_L;1aGE6!U2;(ELOyL4r#TM+nfo`xVUnQVw*86E1O^q3ycsp7H0gZ%*f zE$z>S^^Sr(nqYIma;=oU0!KgGZFKX-|Cik)QPUa1#_iM2nFlL3(Ngs?8)D}c@>yH6 zm#kS`HBi62dlM|Rz>Vk4h4A^UgWu&Y3_u9Hg_;_hb}RYsTII7-VZYvNZ$yFGZpley z$-)v1HJ}gXK6H`F+GYTH8+A4@IB#^bi}A*?`DwWmCU?pk!NYgx3-LctHyPIGVuO@d zE>k%-1Asr)87%v`QA1?7dtmQjem5VPOC1N?quWuDLCgQI;!aK@Isg)_aa z)rz)*eNFg?e_%J89tjOI>?x|@hehm|%%3ovm=+&v)KP?Y;tm2%oK~0OQPhlU4jZMv zSlvcSlOztE!B;hcs)`y!w}28{Y?i@6C3-T9e+~k4{1A&h?0!HLsoT{Ren-GM99}h- zZa@4w{?i6AUeh=wnoq4&kTO}a{B`hmzcjkht?~f?xqyCNy%oaGh68uHUMfL{f3%xr z?Y>(gV~MRe5;2_!Q5>U=$VqE*2~%y@0Ru}j?t*dhT&h|6S%24J)_sNpoSn?#_J4er z?31ltQ{MW5j97Go=R6tEI@McAqie5U31;AE5oYuCEeL{s{Wbcd?4~LLFO?<_b~qNs zM#?EoVT#~VGNxChMz(j{jB1j z+Q8b4Lc2HaozpsLY&mEHK=4h)$a>!&hp~6})+=eHJ(+uFE)D9{i|cs1o=JJfKe%uu zW!gyE7j3F|?tGn-ZUh3b+wv)$soWT8W*|MPHOQ>dY2;Gl#(3v8V_jFjy-muEKY`nB zdiOE+_Vc65(o!;jUr#Cs!b)vSD=@q~Ei_$)3=DhP{$t0;HCW$-B{n&tn2i1Nhv!)l zTx4JXSyP{$SoGaS*YRPRMiYp=yv>fn=k1Qh`2oUx%NnLdz_J^-BLX&zqez`3MeP;g ziqdP_zrVE83~-r(O4H*j)~A2vgq+YvlshE5)6YCPd!E-SjZ_YH79>>Nw>D7}$!YVo z*hEvzo*QKSOOp++l}XMB=?K~A{VAw$ek)rbpEhWEnY)u_nqgbBv)TZ5Se+^?!1#m~ zr!X|t3Tn>hb{S~4;qrf5N;J)^*q;_0wbF7XX!$kd#w<^`c4n|$cccw-t^0jT76_kb zg{zDXhr4!dfm*X%%3sD`4qc(Xy@e-BoO46A*k(=t`G*P!uUfHK{3u3vGFu&DfLJpj zFkg898Cjg~?AjnEyj%VrQAWb3kZH-eBA_DD{+nraWCK(GCVW*{hemYC1zWz~W9V?N zx?|B4eqxowsk^xaPo@|^ibD)_(c3j2GKsgSD&9=gN3 zqVE#v>i$U5R#@QOq69e6JJ$VS!6d#8p7KbAftE0)>HPHT7jF^Oc~yL2Jsm{!a+ZS5 z2T>gW!074ARUt14qI9q!u2E~)KM*bd{2$Lo`t_+==!RtUJsMx5QWC}!ogekxD51%HI4;yaGo4 z;>g`hJQp5|DXX|v^h2$uetg4h!8$o~wLjC?7r;!XT{AwP>hJz3Dzb2jmx7N2ypQ8|}}_+kX*fQYyQYe!$N_GDN!6^aOy zNAN!~8pHOP2&urmPoky(h5ja2ks65DO%zr-F;p9*lGFR}L$d=NE=iSKDz)(p1K$bD z^vinz1V2s@Qq5r^v(AvMhDXW^T!5YgHmAOr;rwIL9v;!g4u_>PdhHK7aExP&+(_ol^hq_P$>#8s%jMI{$cW zk`B2b_JBy?UP+8rRK(4be-yC+$G8peRp22uf8u^)ve-vkQL3RwC)y(U+xe0`bTAL( z0lCeInIr2={Bon7i3ib!%C**iurBlQ`ILH1EU^VzF)ruLbRPN-zR+CusLrV>S&UYC zDM&hXF?*pX)@ZG_mtl4BtFTNQ@}`(QR0%x73jbv_g_l$>D3D}K<918x$xdOS3g*X+%*xH&t^w|@$V&41-1Q;%rnATUQtVpGO{0Pq37AwuEAUvMVI@$y;WrqPNILf zACX^QU>=w>oHP0x7}Ao%a-|u>E{80z9a)4$P9acbh*FO%#*Y4(HK)jM> z5IN)0qxcQjv+)N~b=~rF+{x|5F@s6l^2ghTNov-CR{Xle(j&6^N4Gg4_jW{3bEA0j z&>pT4HN1qeFgWeMiz|BngF-Gv1I+pO-X9Taweh`a4sWcIIRRIZ8F&`mA@-5rIbTA` zPj;{;E$%*Lbc2(7a&=6Zzd4<7X;yN2?LS**z%v88>QIWFBi$uD+`z|t%SGf&^Ui%cj9Q9I^*`F^3HN+>g zvL!Ocys`T?_VucRie2cRK}fbrG#ySy5-ayWR|xI@l7chBc2|TtQM6b*rxh_8e;)L! zUhU6~aY;iSIvcgzCe(0#&DiL4&W{h-t=^w@9gNbu zjL(;rWER#^gafHkABh|@7L%ZkKMM8Ao#$3ZIJJ{Y=W(Xqg-DuUgKQRpQnbOGolU>& zkb)gUh&Px>ufX1`V~or3VWK3~kRq}}AAmV+=2jhA;HUhv{| z9gW0!HGU zJ}3Ms^dPaBv_4@ew>#43y5iWMgE_&>0Moa7){F-0`4%&p?cBG!g&<80fyI&s>VzQ# z19~ZFH{Lu7IivTzZKsC33t)a`{}VcIqTs3sr=cfVS6>Sd0F$Gx`3Eaj@`O)USWob% zvdwXl_arbN+>D5oHlGPG#pk8pCPLk{o9VCdhxPrb8R+=3rcr&*-rpao)qMIT0rDu8 zNpVa&>W>^o$Q%~20X6ht43!xEfn#t!UGyH;1&NN0Cqe6t>JR%W)lXnGAUS$nau3h$ vM)nJ>SJuf9|J#RHefIyYA@P4(FV|EBZ%#)7!8``|o)Mq{(@`x~wvPNCZsib6yfWZ%nLVPu+-mCxR|J!D{83YUCPg6`IX4<}bc78XF#-q0{NK=~V{f_v-4G(UGOa#qSdnjOFFw z!NG4|zyA62XLECNdTMHXY;1XHDe6P~-0bY7d}}6?xw*f!I6wb$W@deTy<@s(XJ=<} zeEfQa*8rWmFgG_j@s0lddpWiC#pj&K-_vQ`uk7mFO{yK|fBu|UnChfaD#qX9Iufml zZVdMIbxd`W`ilJ9?s+$axV;bD-`{^Rkdx5<%%t`zo6T+-Z;9(o_Ih(?@YhIZ=f_5R zi+#f_n`&3XLfe5K)SR*6EOKr{cii3f*zN7@h3%z|Im%}WrM2b#orcI8)!xmcE&0?^ zVo#c9b?~Rz{-%kRkPk7=^}g6L=hBYyz`Ahrf~!Vl_G912dZ+sOM*13PAL@o1>p#?$ zzAYg%CVCVH%&yH1&JGXEP)oj6XAI|smqlN{@J|K+aN|u3^z6bX7{j$ZA2Hl78`%^?@H-HkU(#Xg3VjpPq4JmPkDbLf z=!2_t1XOVwVP~x~`;u|)GHZ)sqzz8u=n~h`H3Slb^Oj9@H>3z-#qfD=N_}PM$fjTs z?ld=qemWxji5ozA-z6Tj=$Hx#2f7nE4$sk%v65uLv-Vz3js__}-$9)5&G~7zGDARF zQoEzi2Bpx1)Z^+4p4Ze8;muCmB4C%fgs>Mv6`!WG^%2aoHANi6STN`flt2Y7xS`_Dwc!*%sAhJba zsi3O%{qnD_XQrRMtCd&_7jQ%19d;k{2i+2l5CU6QC3AGcID_~c+vHm6Flr?hNPhB3 z?qlBiNrRonq%rP*R&SBxYuyP#i`ELK%;}c=f*~`NK|h%MP!gxzGtA0#6Gf03Arp1L zK3^#HQ^-{iUO(}8*R?|7-iZ};kQKO)(~b(QPcfO)hA&7gO|n$88+S2lQI1lYDI zH2A)%uH=I`4J)WL|F{pKg)>!FqK5AdLfsk)^8K-%r%6m15t}62!==>LO1ZF|I20=G zz5DuV-ixH$$g1U;kTjTnFI4VEMt zi81E63|yTAb|BU~y3tbky4v?-9p4EDVcu{>z$FNN_ul1Q@E(7FtETadg&@+!c^(`Q zc!(yF5)e6J*+MUtOSvnrWiP$`;fiSUc?zT=HH0rp)p7-V2_W!;wUtlZ=S4O%Y0iqx zGAr#Sro$tub2vmsv#U~?oEG75KbL$Z${j2Y$^vxOxciRWVm^_Rmf{EGXdh`?R~P$@ z0`LO~|K|zYc&#)ijJQsVPM22FP z3+R@UfB43p*s*nS(hR5TR)Ts$I}IxVVUu0XB_#-1SD)h-jtYYlr$(XN0s?v;2{_UW zGdh7vTh;LL91mTrf_&(!*lfwj82=NspsD8N8T;~Wma$u=W!K=F`$bO)*4V4|Xw%{7 zrbow8zMIx6zT$Y(x_WvSR00$1)uJSYwgr(bKOMEX=$FjjRrXS;=I$dE+e!lNd+z#h z9K5IHhRB7`j~q2ep_9GW7jq?z7O3JEl;5UbzFCU$6GhwD@!?G><4=F1jE9I5?At%d zKvtEt5vR)Zf`s3Ar#Jj7cN!v8Bm_GWUnUCeO{2#b*K#ErwrsU8Wgq{Hr$+L_^+Xla zAEfMCzI;R488$i@_BaQHij2dPz7>c<_*!07edVDPWb5zGCHR{F&RiYz(CSQZ8}h7e zUO5LzV+2;RXN~B@12^cQO#E|TFps$S59U`N!%-G@?)H0)Fbiv7KUPp2A8gWwsdt*Y zf|06sTFK4QDn3rm&M&S9oXdbsk901S9B){8TU$(kqaN->HyFzwGy-k<{XR!jFv-+N zd!R1u)K|q2vLSfZprq=%_ywAn_D3r zXPXKd$kvKScFwxi{Qe0d`bER|&pY$JwI9#@MM1BrK<4>UacWO@L&9IDKwF;gEoZrS z$|Tl_kThvjb{;r<_`G7Pd_x#>XYElk-R89L4MxH_(b8(afQEJua(|U;bIdh#3B|U- z#z9fXd|$b->DGh7Se$IK4d}vUk$8G_+%F|u|L-lO{pltlF!A$tAlF82RwwOXX!1Tx zZc&t@$sjZ9KG<P!n>BQMlMrZG;B6t&e&bXX}o#h>tbqvfW!m{~# zI^nb#5KDJKxe_0w?pIXJCzLFQf}IscaN6gjfqzzSr@5aY)3S#a{W!JLPm8F3S7hBb)#i0P!&J2uW8nQ$VVNt{w?Mo2YE%~Nn zN(tUkL&e3(h^zKdcJM)N zBHuGjs%W+(#|^y1@=8FR?nN}~Q31QW?l{NPlP>hSNJ2EQvljb*4)f zfR!Y$*#Jxr`k>Ktp4aE-FFR~dZMUu zd`penLBgy|kQ|oP_Xn^2Qfd~imTR)rb^X+P+w$G9T)WJ`Fo&9H_imA*!4vl&fk!rl zh9<6SmJ$u`MAH^vNh$K8-Oha`TFTeYd+Zmi*eL!Ay*i+_E8))|c1&8UvmH~u?B$QC zXEIwM=F+`Pm0g*r+v(;Z2N1=e%h@pncKrP|)8RXHBEX@1+HBhwI4e5sUYpOhZZouw zw>>ut?X^FmxDJHhGiJF)yH{O0^#pFNwCUw**rT$j@2BY~=x93-6JkFDifO6Fl+JG5 zJWi4sFjZa8JRZxVb?OUQr4GGv$E%YGa+5cJ`DU;cm|k7XU6{AxHrt{%=G#mX_~$6J zq+TPYKM*Hnh;uV51#FmKnQ+Flqxi1iLNNJPjOVb+4V+jZocxbxKkERjZ9|s^v-_g_ z&3*!H+sZ6E;O%x=cDQiKv{iphC#?&Pp(*CNNBhXVvii*KV`(NeA9Db{x>#J}rPgFv z9lotST+xe~mSmy24SeS4BtpdNQV7#xR`*#3sz>!a)hz5_dHJjZC~KaOcST&z}_Jv;%E z?CFpX;dh&mgGghspcwn>+H%CTadOW~HXgkPU?R-ay$;g_pKg#;ACZH*n@oyl(Uq3s zL81rx`zolS{QjKXi&gLk?9`Tr|F61ocj(FgeF)4D`)ljj|85}=#O2*Y^s9>uBK$`t MhL#3Z`mXr@0cU{fdjJ3c diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_next.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_next.png deleted file mode 100644 index 7810bb773d9a62c54e5aecf5b0a4765836520c36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3396 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_nova.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_nova.png deleted file mode 100644 index 7f02637c0c5a378bdbfd1d068e906d0eddccd045..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5792 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 G;r|Etq{+kp diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_omega.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_omega.png deleted file mode 100644 index fa3ddcc40c4a5f19307398109ab8e1f088f9be1e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8319 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_pixel.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_pixel.png deleted file mode 100644 index 5d8312b1203ccc266305dd3472b3e3985507f1ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9914 zcmds7_fykP(EfxVks3gdo`BM&N>?DEH-$)%Dg=qaJaQZ;k|0E&+P2B_Py=p_JfYN;v8 z>3W!MWe_JYcYDq?cw6t>s)T?jC6HL)3p+@jke@pFHZ0fUm-x!hq}P)Z6-YIyKFa9ZE4?aq&sYbIf9ut;UyR=M^<$@eN2{bufxETQuU*^WOe&-=KM zJ~=Yhx9(sZKQgt}XY2ZDtl_Dfrb3xOcZDAyoTd)C#%72Tc65t%ht za>KLsqQ!-=GsD)ivS8#Q8FI+Pchr*rSc=xIE8PLN*YLPnQ8 z!PgtB#ad+tcfWF(K$^7$Tgo!Mo*q&3ij9m;u|^Wn^ZVGJ8Z%yMmAUw?GbYLN(hC$7 znjL)G3|NA`MrM(BJXFLjL@){odGXjdNXIh)P(QaSP4bORS zB-$^rU&s;k^TpOj6%OtdS;;u9A9poyj~nndzNQ#DhW;1|X#Ni%Z%pg{)lu(g2b0d! zZuAPO@cQ&*Y+Y6x!3)ob@nFi&T_GKXK9wc+#!p3Dd#7a#&Zd6BK@A@DUX+*}jPrMB zw-fm@lG;CX1#!kMGXW2vchumkcqtLQpv>|cgG`+HVBP3MT~<@a#i26S#urFsXWW)w zU^sF#T4%5I;|Cl9vE1)iO@4jaYP&i>v4g;jzOl>S$xzEmHGr~@0|xGvqrTU?M=J0= z#;wX#3%<0i%O47}ajASh>T0@(m?z-uMLT)6&arA;p3bq;ZU!# zr`$d~gY0ogaKy6~f2yrj#OADmlPQ@pm(Zo>t zpbsj>psA}xgEK3Wv4erYk?+cdk6?3bfPw5qjQ;~`wHQ^^%lG{Q*BRtdG8-9`D0{8f zTRwK~QL^ApI7t1+(c+(yK&6VY=zy#XeID;0F7n8s%d9dP!7bQ3>EGa@ESFP|3#FG`2zC7n#8nL zMV5dFjubke#9mk}N7vPFKX#my!+7;~5AI{WbavG9w&8r=o}jWZgS|;(T9?ShF=*#L zlX(#)9eZfCTa8IQ-+W@%6&^B+^{zRje~#^aAl)%MAK#jlFeURoxP?N}jC{v0`Uz&<=VO*B$|CVwirAQ|FFunHudNl$`X+(h_piMk9)m*L zWS)ZdL;yW$3e2N_r@rSyA9+d(xBV95|9;2RIjTm#Ln71T$(@L4gj$k2!-5Os`UvHK z2e9a*hoX&9XE5@^VEyQMC=-D|d=TR;Se@h6Az34unuj5~ zr{QsTk_HAa+gGXK)?>pRR0eyru#*mfg@VkzF|CH+U;sLFkxH^?1r$96eEH6gS8%b9 zKmD8j=3aT&((L|jwLvOQ^a0F;ijrTE*00u<$T>a9tzyMZHY4;Llpv|ajjq3MKvPF) zZ4N3ilaBdSG&eQ6-^xFN4n|!XduMNT%Oupo6$c$X%+sBZzT{$GE~isN&;HMMf)@Zj|lPnO_D z1nBu9$;gnXi(uJZN3(Ukn`qh}yT<$4WKBx7;)Zy+WbD}XoWye+P_Qm zWSPS^ZdHO(ieBTAI2DDlKvcd0os>N zchYnxZPafQNCeN&qN4sSJjir)zNeMwbp%#s!ZKk7a?XNv`-c#X+lbdYpK1}mQ~v-T z$9`8bjSoBbDV>A%P2vNk3x6hCzJJ!_9ph2q>R;_*s0rgPfp4$`jNS={VFmoTYl>d* zr@d%m!PuPuQ5S~BlId9G1PDEwdF-~59=BkE?r6LJYIkyLC$5lXK4YP&_z7*=P~NH9 z>7;hl8PR+#{NVAU?5GmmH;|~+%s*2vl4y9z@&)fH93^vb_}#8H^5(8k@-P3xFuTBd zt3f3?yS2C_qMm3z7V3YeMIdinuwvM~*(+E*TE=@o-$=_!FBal@ugxzG^&vvKIqYZn zutVjzU`*+Gw}l53Ti7y+FG;&wAL%w$B<1vXX>JS0pgWAuD>vA4Hu^=*PfEe@!T3o* z{@PLfgKQ!UUh!4gc{jQeQaoR^5;3{$rNeA#WpDB(EUjM z+rO%2g2&G?r)NcU0lil<5YJO1^_ucygJSGwqU=5BBWzU~oqpb#??n^77vfyxX1iJ6 zqyk1$M!Yw;jF9f5ws|57gk^pj1#=G`IT|sa9lezhbXx0uU5ji)Zj8`w=BL0 z7J}GwHuurER0o~I3EyMpUbv(o`wRq^9E7;N`IF0&-X35$XT2iVJIe@nyv~OQKN8)i znpygdK((-(aNSuVYwcML(dowj)B-4)%>MXV1TuQx7%QF~_Jq%=KhLtmtjts0qU$H+#R#YsW{drGLY;c=(3CP%z4O;_Xqcf?;k^)yXB(DJo2{+ z{}dyBrPu=FvYN~_uFt=E8}NP3YLt=ICNc6sO1D-^pN8Hta0p`awifF0;W0gH*5+7I z;FZ7H{j?dZpSa^JvYzn%Xl>+$w^qVh0v+OLeqpPfhYPAWg@;fZIwy|zScO@K6?8$g z4N>&a`J1+Eo4s-y(+})3@gc>3^POdEz669Z!-FXJ9F4 zVD4w}*yf)vE<5ha-cnndw_DX1tO7Z)hu-OsM$c1*$guXL(CtMxH@+3!ahXBKy+!EJ z7OL{{z$d(gjuZiCC~0UDwvi>>dEBYqwh=JZ~3zpDZz5Z(HI79EGY zL|Tvod=A|KeBP}>WFpA=2%!`)86(_o|gf5uQj_vs*{OegT9>Twb?b#Ud=%w+lAksS}yUfD})3ktPQGkwf-- zFD1CO6mMRL??7%XNGw$JYC%Dh_jhE2YpHW*Oj@9!3^pN3AkXe-sJODaf*r?IZ>d?` zD6W2JuCDG3Md>ezkH!ra+z}!@7y!w`Y@_}FFD_lveD5}?!p&kYDfvCHDX6=l;=u1& zvTlZSA}0rue+)nlfi^EL%XgE7b0u_o65RHB8SQS9$(oDyYLeA1H;fnR2joEJKoi%X zVkc5FQAtZqYziYOJ}gT_!`Te6Ee@y#a3J8VKTpa_!0xu&`usOPjtKwQdt|cnw}kxg z=ESRG_a#kqouAsU6O5m zE?9e7RJI!h>o;69_L-HvE&`nnYA;w)F+{!3D?@oZ7Qkt>3#5hBF0s#uintlq9$a#h zmT-p8T^IcJV)Y^$@xkUOuyP{q$tj8^&e>EBN5@z=HS0}wrD8*g<`3A>b(C*BYeX5h zt~+A{ql#4mUZcMf5IGN-vO2zk`HUN9Xdv^<3U~z{eK>?NP3%JG-(Y1ih2jsb`-_Gh zDe}{WWw3HLYqL4Fqz(=nYaJ3ek{1?hEQ>*XomFB(K-=T08Sv0CKw8m5@9lO^_*8xU zW+ygtNTzl2%9gy+!&->2N<1VihZ#dQWf1YOwdiiU%m`f>=;KC{6#oKsrFhEwc}0i5 z;8HRiNyG-IU0+r6B#AvNBJm*m4tmD;NJV~h=9JcAjWXnoP>jwcmD%m@Z`o$vMGX?N zek&x5e`@1cM?`La!O%h0+TXHG_`X|alI0CorM>yM%d^9_Be*x4t#jK>2EnK13G+Bm zenftL-5tqc!{x~k+fujktesyruEO7NSuZtjJvFe}u)h6?+|Pfw4baStQhp7fXKKXS z<_nAaeN{;Uq!0<}V7(_DA8aA1-Gh4>kRIenS6Lb{y{o$|rJ0kyYoDH4Vi@UEdN-y) zuQntor}2DKUykU#&Kln={b+dYi)=988D=QQ1YR*H(V4_NZc35NU0OBh*z$IY4&zzg z_eA`R>gaKFmX3qd;2SdO9;@)rU5)YcJyFyHpj?Ms#*OK}#DHz0zxogQ z^&%&}hx+PVf_)An*G{;5hnF=K&;Ke48OV7imYnu6*jeZy>5 z)a`CWfYf#8Cuy~9Xm**?_|TWNiqNyrcl#S!F~ki>q<}Yg!cY3EB5!)_#+KbP`>xL;^V7H@AR(n zg{jWZhA^QWc6yE5q@*qx@8B#vx+}&?S&jUE4ZEW*Nt$niZAsrj_vn za~e)V%kPdr`Yxn(omOOPm+Ommj}C_tMiocoL!CqJ}=i9h}FuqhJ_x5gBFy!VUsR~vuia*dDi(%y?3XkJ zOT_Hjv9fF24}d#%Q1J+mzZ2rs1e)N{gSHE4;tdv1B;eP9GrxB+)!AXsnwT zlIk8vpvWxlYH08KmpBV9k-I#+qr4eN4}J_)nZNEO-|kzF)jx-xtmIGCQTGzl?TH7W zUqZ1f%0E`$R`BPsb{}M38|on%FE`+>66MHsbXXz8Da&&(@q2a0WaYj6LAI=I9+;%C zycnlIYr(=adml3a$iyk`j&0DyY=72zIKCqXv|Akg+S$>#r^S*E0j=DgY@HbV@UMk& ztjTAm(!ZMV9gyXrs$iXd4!T30tr0dF&GkWUJ0am@bD+(>m=d>rBHoae)bXmT4_ud( zkNI=Jp?~IkN(FVJ7rw7_tI(d^U2;nqivDq{-ZNzijP~}6LddwSa{c6);7fRoE`J|7r_g~^R9UOHEOKpS2G~GM$wXMJ2 z*>TCes$ao^xkz?01>&X^GQ|IJs%Ht00@G-xft3&|63uL7tNdl34Hcg%J2yj2%|$Zw zvlwabgfhs`2B;HB!I!Qg8ryuA-%0ege0WaVe2D{eDRt?_86)*M_U@5IbR5F4qtV0~ zN$J??%x{)v+jKVfu8WuJp1g9p-tEA}KE)_JB}NFC2SIEFRWGBAMz?*}^~W+;^k}Es zbUsK#4bidI*W~gp5s|j8C|i_+>PBz#bwA6%IyY9lZ*eb9fLt8rY)oHYy{*A8kOhBg ze$blSwLI}s9o{f`JzP&@8RX$iCKWRiGs4JbxZD6uchyO}#@2;D(cP^1(z!SKlY z=Km5QEe|`k@l2I6o7d_wWPL6F>SI z@iTaR+qFd6UO}PO3x>@9t8W1SO6 z%_&i8Droo~@6|HVDP0^z5ew@&y@S0qm05;Kt|zrtPe;Eclr~6I7tvoFc zX;$?<3`?{&Cp#n+vl?VJ=O*ua*}D4=9uf`$@IfS>;pFqZxV~W`fEb7?7q-4RhmSLT#^c4zD*SbFStMbf(`LF$W3SZMQs%n*ccPgq zW&yr7)u@8)MUMLKrS`=xpT-`SMHV+rrb<2Sf8%zyR*Ii$w)J3t@+5pZ>)JB80}Qh} zs)vNA96&pN0&-lG;#gOLW;6V>kBImj<(7|ZZnlB5`b%uY#>>k3{DQaWy7}vdij3_| za7Oj?=QA6o&ipe7S(Bs~37?{Xx|%^9>Nn*)m)4qg#~ov@LR{IG2W)A6&*66ntu?Gf zwH$WVH$Sw|*Y2(0TEksedfKO7FPa17cLfq9kIQVqIGZmiO;4KFWREjk0*2-khY0Y8 z89DrpWJ|V?-YggO_cQTtC?OV>z-tZF^+izgas=pI9gWTG#&HWCZ%EJn%aU*C_oU8y zy!VU&-M$;fF0@WB*FNk&+e#p;dpZm1&}fYhSS2v-v%p74MLi*E6c%j7G7jq zz#5MV(;6g6w+$(qiPJyCh*oiu!lTuaR@9@KYdNFowFu$u4PjSDNhgJI`BQ)5>bMa7>2`0P5O`- z$Uav%hOKwVt&4L-pa(+*qZJDGuh)%jhz?NS4N{6QFWMh6FTx}8_! z?M=`lE~X8?xGc}jRF^p)ANyt%xLNipzS_}^2-lsD*fE@3>(skMHhKdBURxk!P`=!o zTVjRjeRqt#o4?nTEdM(#aXl)PlIHJC^5b^FDB?PQwRg}hktPA=`%{Vr9qarz8u_b3 zfjflbiv)lzsE}dpr}hL0c7d!r3IpPQ-12w1w3>ZOMKD=RWfW&r*S^xe$4obbrq)^b zp@I+3XL#Cs8bnC&kIty|l5A?)X4@;I_R#IL?RiHwl(b@{}cEf`TGTTEclL z_k8LjyK8{{z^fgy_Ux8wEx+*q3Kx?j9R?RJ%7oV@q1_Vg0xVbC^iR()dZ*+MgIiQT zwByR|1xJI)5Jr!2v7Ef z(@qAsgM+O7J)}f=!yPU@E5vXJJ-*=Zy0LUGnO%k4S~J%{P#DZQ{xgR47ZHHmkv4~; z4k~KOX`?lqXb5%IA!yI8gPj*6_}*^=wy!j!$fGg`d=FMKGlKW;ZJ<5wlOtB9XZ1~X z+aebhe(4}$oWMftmoX6L9xF*g;s%1SHXuw{(ITL9b*}0AnV<0|vzbR$C)t@avoeX- z$I;#xFCngTfsIURiDPLJlJVUA_;)>zlXU3;q}2goLL^ZuR!_jQ=&UZu0uyp8wZ#K8FO^!KjH{E}uVlIQfYH)VQcQJo~qb`>j0x z81h}VtM=nQnOC36%qB&fg!i-3n&rO}g*~2S{!`^W?+Q=yx!j1*sPQ$z;gh=i_f*kfleX$9-t-X#`)b_3S2)M|+PzO4 z9Ev%bNv08+;Hg>n_#STrJQH1=6657H@V$Q@B=LL57bFSeULXix(msl0La4VY5UlIJ)(5~3D9c%yj7*n1Sqf! zIu4pXE3dc2CN*LJl-Y7qk1?J2`DGxsqmUG$MH`jXVYWOLr$iO+%%fs8 zVnOwYkL;IB$XiPzV@xKET9#S^2pAU7VozkqZB<-k!hvZ4R{u3I<1H*yPPfU;6phl&{rq5w!DPM+zE}I z65FUnw0EykB~c1t4<-h1X^L?U>pld78ec}d1eb|OJ`i3{vnV-z(7}k_=eYoJcT?+@ zDz#VB-lMQHf+X^O%WZKk1@V0jn*H$2U^q++%W>mL1MSHF1-is;RzIr^IGJ8yc^6C> s_W6>2buqTa+5e~Ue+=++y}d%b>LA(&X`$F|`pp0}B~8V0d9?rk05vfDUH||9 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_poco.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_poco.png deleted file mode 100644 index 58c18edc16d428347b8d41c96992d618c8a558de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15705 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_posidon.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_posidon.png deleted file mode 100644 index dfb1b4733bd2325f0d529422b4926301a945276d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12262 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_smart.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_smart.png deleted file mode 100644 index 1457bf2d387797a307cb0584d9c2f7fc5b691a66..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3423 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_solo.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_solo.png deleted file mode 100644 index 43c422a99d69ae13ead946c98d18a8f4af936586..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5617 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 T{?w_w|3o7_Q{5UJa?Jk$eP#&d diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_square.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_square.png deleted file mode 100644 index 6ed11c6a7d919bfce9a008cc5ecaa57e09e123ec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1924 zcmd6oe^AnA9LK*DrDo{_L1>J-a5HK#==3OI9WVp=IbLy&jwYoI+%5+b zEjkV|qAOjH=*0{bDhfB%enU|Qx0a8HMzM$+W{w@u^C4jG1AGtzY^w&o+=D1dT?71v z1THxMNSF6;knBe5YONm3Sd>M1gWM=4&mbaZ@%em`UMZr@4+hj~Rs(~Ac)^rcBa@Sp z2b+t|V~P9k#ArbbL7-Bpl;h(bwBhcyQLH=d$)_DFa|3O33;8aKwK3#Mp2pHaCX=%> zGc!3;OeRxT>Kxi2m&@HGQF&kE6lln_Xtfv=N~Kbozj<$sP{s_iK9kr!su`MIl=#-} zUQv5^c#IT>cAoQPfHooW&-p_7((_DiA)V{cH9I>ib)kMYiq#to{sn*K9B?0$oZl=E zwNVV}Ec{f~nmu=7%Gg~e3UHYDjfRE?+740lMaW|Fep}GgbFk082#0 zP55DnAW0?tBCu43Of4)doN+kRTO2AB2n3wWbL-*1FD;Q{eQt6xjh;9K_;R31H(VEu ziksYc#HB>6rtyE0H%1Ru9feFJ&2SxU`Yxr6-M#fQr;yZm__`ojteu#+S5Z-s9a`%g z;)jJyqL!BUDt`jG=s+6$ctA7$F%~1ld(zgY*mEDP1K442GnrE`gh+W3wqdSdJ8CN$ z$Y@QXTbHL7jgvi&^E)PX3ELConuodS_9VLDQn@Q}AL0#RlUKb*H5!fd1e@Q}(?c^( zgu|SSjOBIevrAmF_Yn@(UNmd21TS~Wu>8`}QnQvXEMrGh%a9YVUsGosrnL(T54}Q* z0~a=S!x1{L4;AiRKz7^zTb>vr1WipR6(rP9ASOCG8iWb&i$IpRYM)l_at#9LkfI<+ z(Ba+RxWA$@Wy{#um`EfdeXLm4^(#g9y?;kT zKhxVeL}RCGYd(d+=*){c(p2B|niwBc9JU%TcEi~!RjN03aq6GsJHD$Mcp=?d$n6+? z7^5j@B@aaZx(;*f(pi3&QEtZbsKR-uGR-$KBV29>1%MlolXZaQWfa4)`z@cTP#b~SAL!^b0=BT_H@4NylC_W%F@ diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_v.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_v.png deleted file mode 100644 index 3ea44da75cd7ea4cd8ee4890ea3fb2bbc07f07d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2901 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_zenui.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_zenui.png deleted file mode 100644 index ca8ff328598b73b2cc8f520e451bd75f9e8f667a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2228 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 diff --git a/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_zero.png b/libs/candybar/src/main/res/drawable-xxxhdpi/ic_launcher_zero.png deleted file mode 100644 index 5b594d7c6d03e3d85658ac792b5446a1e03e4d6a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3174 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 diff --git a/libs/candybar/src/main/res/drawable/colored_cursor.xml b/libs/candybar/src/main/res/drawable/colored_cursor.xml deleted file mode 100644 index 5d597c6..0000000 --- a/libs/candybar/src/main/res/drawable/colored_cursor.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/drawer_shadow.xml b/libs/candybar/src/main/res/drawable/drawer_shadow.xml deleted file mode 100644 index 8e6f22b..0000000 --- a/libs/candybar/src/main/res/drawable/drawer_shadow.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_arrow_forward.xml b/libs/candybar/src/main/res/drawable/ic_arrow_forward.xml deleted file mode 100644 index 5f686d8..0000000 --- a/libs/candybar/src/main/res/drawable/ic_arrow_forward.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_bookmark.xml b/libs/candybar/src/main/res/drawable/ic_bookmark.xml deleted file mode 100644 index 3ac32eb..0000000 --- a/libs/candybar/src/main/res/drawable/ic_bookmark.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_bookmark_filled.xml b/libs/candybar/src/main/res/drawable/ic_bookmark_filled.xml deleted file mode 100644 index 6d9cfe7..0000000 --- a/libs/candybar/src/main/res/drawable/ic_bookmark_filled.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_bookmarks.xml b/libs/candybar/src/main/res/drawable/ic_bookmarks.xml deleted file mode 100644 index fe942fa..0000000 --- a/libs/candybar/src/main/res/drawable/ic_bookmarks.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_changelog_dot.xml b/libs/candybar/src/main/res/drawable/ic_changelog_dot.xml deleted file mode 100644 index 8273abd..0000000 --- a/libs/candybar/src/main/res/drawable/ic_changelog_dot.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_check_circle.xml b/libs/candybar/src/main/res/drawable/ic_check_circle.xml deleted file mode 100644 index 5540fd5..0000000 --- a/libs/candybar/src/main/res/drawable/ic_check_circle.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_fab_send.xml b/libs/candybar/src/main/res/drawable/ic_fab_send.xml deleted file mode 100644 index 2c8862b..0000000 --- a/libs/candybar/src/main/res/drawable/ic_fab_send.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_google_play_more_apps.xml b/libs/candybar/src/main/res/drawable/ic_google_play_more_apps.xml deleted file mode 100644 index 667c653..0000000 --- a/libs/candybar/src/main/res/drawable/ic_google_play_more_apps.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_home_app_muzei.xml b/libs/candybar/src/main/res/drawable/ic_home_app_muzei.xml deleted file mode 100644 index 75caa6c..0000000 --- a/libs/candybar/src/main/res/drawable/ic_home_app_muzei.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_shortcut_apply.xml b/libs/candybar/src/main/res/drawable/ic_shortcut_apply.xml deleted file mode 100644 index 92e1f40..0000000 --- a/libs/candybar/src/main/res/drawable/ic_shortcut_apply.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_shortcut_request.xml b/libs/candybar/src/main/res/drawable/ic_shortcut_request.xml deleted file mode 100644 index 9e8162b..0000000 --- a/libs/candybar/src/main/res/drawable/ic_shortcut_request.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_shortcut_wallpapers.xml b/libs/candybar/src/main/res/drawable/ic_shortcut_wallpapers.xml deleted file mode 100644 index b0a5cda..0000000 --- a/libs/candybar/src/main/res/drawable/ic_shortcut_wallpapers.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_stat_onesignal_default.xml b/libs/candybar/src/main/res/drawable/ic_stat_onesignal_default.xml deleted file mode 100644 index 0f0298e..0000000 --- a/libs/candybar/src/main/res/drawable/ic_stat_onesignal_default.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_apply_launcher.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_apply_launcher.xml deleted file mode 100644 index f79947e..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_apply_launcher.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_apply_options.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_apply_options.xml deleted file mode 100644 index cd3bb31..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_apply_options.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_arrow_up.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_arrow_up.xml deleted file mode 100644 index 6f201ad..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_arrow_up.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_back.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_back.xml deleted file mode 100644 index 46999e2..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_back.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_behance.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_behance.xml deleted file mode 100644 index 7fef0d2..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_behance.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_circle.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_circle.xml deleted file mode 100644 index 18d0787..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_circle.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_close.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_close.xml deleted file mode 100644 index 0f3fd31..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_close.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_dashboard.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_dashboard.xml deleted file mode 100644 index 8129efa..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_dashboard.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_default_profile.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_default_profile.xml deleted file mode 100644 index d263a60..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_default_profile.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_delete.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_delete.xml deleted file mode 100644 index 1a42834..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_delete.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_donate.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_donate.xml deleted file mode 100644 index b028d7a..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_donate.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_download.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_download.xml deleted file mode 100644 index 8026f63..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_download.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_dribbble.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_dribbble.xml deleted file mode 100644 index 7ae5b49..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_dribbble.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_email.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_email.xml deleted file mode 100644 index 26ba084..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_email.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_facebook.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_facebook.xml deleted file mode 100644 index e78f1ae..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_facebook.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_github.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_github.xml deleted file mode 100644 index 0bf77f8..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_github.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_google_plus.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_google_plus.xml deleted file mode 100644 index da4b285..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_google_plus.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_homescreen.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_homescreen.xml deleted file mode 100644 index 83d5dea..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_homescreen.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_homescreen_lockscreen.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_homescreen_lockscreen.xml deleted file mode 100644 index 1c04b22..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_homescreen_lockscreen.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_icon_request.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_icon_request.xml deleted file mode 100644 index 9097484..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_icon_request.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_icon_shape.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_icon_shape.xml deleted file mode 100644 index 9edd037..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_icon_shape.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_instagram.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_instagram.xml deleted file mode 100644 index 8952a64..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_instagram.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_language.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_language.xml deleted file mode 100644 index f8128e2..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_language.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_link.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_link.xml deleted file mode 100644 index 48bf14e..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_link.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_lockscreen.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_lockscreen.xml deleted file mode 100644 index ee08a98..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_lockscreen.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_navigation.xml deleted file mode 100644 index 0029076..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_2.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_2.xml deleted file mode 100644 index 086f393..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_2.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_3.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_3.xml deleted file mode 100644 index 5a941a3..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_3.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_4.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_4.xml deleted file mode 100644 index b3fe010..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_navigation_4.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_others.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_others.xml deleted file mode 100644 index e175475..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_others.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_people.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_people.xml deleted file mode 100644 index 9f9800e..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_people.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_pinterest.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_pinterest.xml deleted file mode 100644 index e57829b..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_pinterest.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_premium_request.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_premium_request.xml deleted file mode 100644 index 31a57f3..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_premium_request.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_rate.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_rate.xml deleted file mode 100644 index bd33850..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_rate.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_save.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_save.xml deleted file mode 100644 index 89055ba..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_save.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_search.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_search.xml deleted file mode 100644 index 4b6bece..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_search.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_select_all.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_select_all.xml deleted file mode 100644 index 68f169d..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_select_all.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_select_all_selected.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_select_all_selected.xml deleted file mode 100644 index ab60274..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_select_all_selected.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_share.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_share.xml deleted file mode 100644 index 7600bea..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_share.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_storage.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_storage.xml deleted file mode 100644 index c58015c..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_storage.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_telegram.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_telegram.xml deleted file mode 100644 index 19b36a9..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_telegram.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_theme.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_theme.xml deleted file mode 100644 index e5d4bbf..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_theme.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_twitter.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_twitter.xml deleted file mode 100644 index 7a1d277..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_twitter.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_update.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_update.xml deleted file mode 100644 index 1aa899c..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_update.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_wallpapers.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_wallpapers.xml deleted file mode 100644 index 776e2ee..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_wallpapers.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/ic_toolbar_website.xml b/libs/candybar/src/main/res/drawable/ic_toolbar_website.xml deleted file mode 100644 index 340a4bf..0000000 --- a/libs/candybar/src/main/res/drawable/ic_toolbar_website.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/libs/candybar/src/main/res/drawable/navigation_view_item_background.xml b/libs/candybar/src/main/res/drawable/navigation_view_item_background.xml deleted file mode 100644 index 585b98b..0000000 --- a/libs/candybar/src/main/res/drawable/navigation_view_item_background.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/navigation_view_item_background_dark.xml b/libs/candybar/src/main/res/drawable/navigation_view_item_background_dark.xml deleted file mode 100644 index db4eed5..0000000 --- a/libs/candybar/src/main/res/drawable/navigation_view_item_background_dark.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/numberpicker_divider.xml b/libs/candybar/src/main/res/drawable/numberpicker_divider.xml deleted file mode 100644 index 76206ff..0000000 --- a/libs/candybar/src/main/res/drawable/numberpicker_divider.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/numberpicker_divider_dark.xml b/libs/candybar/src/main/res/drawable/numberpicker_divider_dark.xml deleted file mode 100644 index c71fe53..0000000 --- a/libs/candybar/src/main/res/drawable/numberpicker_divider_dark.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/progressbar_track.xml b/libs/candybar/src/main/res/drawable/progressbar_track.xml deleted file mode 100644 index 87c9178..0000000 --- a/libs/candybar/src/main/res/drawable/progressbar_track.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/reverse_shadow.xml b/libs/candybar/src/main/res/drawable/reverse_shadow.xml deleted file mode 100644 index a16cd90..0000000 --- a/libs/candybar/src/main/res/drawable/reverse_shadow.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/searchbar_cursor.xml b/libs/candybar/src/main/res/drawable/searchbar_cursor.xml deleted file mode 100644 index bfa5a39..0000000 --- a/libs/candybar/src/main/res/drawable/searchbar_cursor.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/splash_screen.xml b/libs/candybar/src/main/res/drawable/splash_screen.xml deleted file mode 100644 index 3f6d2d6..0000000 --- a/libs/candybar/src/main/res/drawable/splash_screen.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/tab_indicator.xml b/libs/candybar/src/main/res/drawable/tab_indicator.xml deleted file mode 100644 index b8d30ad..0000000 --- a/libs/candybar/src/main/res/drawable/tab_indicator.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/tab_text.xml b/libs/candybar/src/main/res/drawable/tab_text.xml deleted file mode 100644 index 8195cbb..0000000 --- a/libs/candybar/src/main/res/drawable/tab_text.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/drawable/toolbar_shadow.xml b/libs/candybar/src/main/res/drawable/toolbar_shadow.xml deleted file mode 100644 index 9d254a9..0000000 --- a/libs/candybar/src/main/res/drawable/toolbar_shadow.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/font/bold.ttf b/libs/candybar/src/main/res/font/bold.ttf deleted file mode 100644 index 725ee416ea12babaa69f812e3360ce68faa064fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78220 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�w5c|A*FW@)*;dQ`ol73Ws9q>5& zF8hM~FyO*Nem8%YCVW-)T|9gFFnKKSQ-s1LABEStmn-C=kPi@F?AO(0;*0x&r%2KXi_aywf|HiHrCEMNUnuMdea7XX&f+TX4DW8j zyJFyZrPv1mbi5W`E5V751b?rC;2xZ> z_<}qH-h0oR^i)_9zu(}$-|N_f*#v5DutVUXELA(}7NB2+&#Su=g4CrV3f#;`yB+Jb z_GrKsFb4uH%iL>^_e9;%P&5cq<%-rh_lYseb}*UVx6~3!M^#f-lwG%St*o@feW3(n z`L^oyYnQQI2~~~9Rh4ort+g%6$FK*qPTG!LAULqtYtbu{pl?B6oF^@OAoy>M!w{g* z#7h}rT%dm;1iY+O+=2yn%LN>q0H3g^pR*)?Ff*DoBkfa}%@me)6lON`cg&h%Avqe$ zX)UcS(Li#jq|IJ>!q(4Rxh%76-*J^SlSyCH?Cj~-w|>X_Hny+($8YUB@Al*J%g(6& zGTM<=O(92TBH5SoTe(8ztKWXC9GsZVX3T>Xrxma<0X{v~{fT&siBIuHm zj%)1YRWvT_oDMow+zOmO*je4w62aq*Xy^sKDp z%yK9aO`2>2Ctk{ePG8Hy#oIe`qq(8emn_{IVAgop>u*sb zKGMH#T0Pz~(U}~yE zq0GwpiJ&v=b5Sw`Pxm}5w?Y!S>iJuosVy{+?!BwTm_z(cYoz0a5uvTEH(eR`277TL zA87Y@ymo8c;neI}EPB%N)4GSxKj~L~Eg6c)+meC9kMxb<(QRuk;I%4BOEP z{%qKt4XFu>&l~rdT|pO4zjpXfoObmMwVFo5%Ua9F;cca+o=%&FatTWU`Hw (0)k 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
    -e6}9;162SSRxUNTJKF; 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 diff --git a/libs/candybar/src/main/res/font/monospace.ttf b/libs/candybar/src/main/res/font/monospace.ttf deleted file mode 100644 index e69de29..0000000 diff --git a/libs/candybar/src/main/res/font/regular.ttf b/libs/candybar/src/main/res/font/regular.ttf deleted file mode 100644 index 980edda4ae738c9e3a55dfae6d429ba991ab43e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78628 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

    nUqw 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≪w`|46#bJ4tc5Q&=Eg8?&*7!KtKY8r!HYAb_ZN`hZXgI~(c7h>!D64BgQ z0@D?PL#J1~)Cao+r&UuO>{4sK&?vw!?&bi+OgF@*ySbW~K*0{3xkU`di!o^E-i(oh zUz|LAFc{uBlJL8$nX8gv+cX_Dt&@b{za-!@J|c)0GlJ+#44GfTJGrvy2+pe)K%08* zR4dH6Gi+?n^Sy&z02mf z>|_?rpnFpD+}?DqE7HO55h3~8hK%FjOz4eo7XbAt#t~Qw4|ie(K2s71eEzL0ZfIx zSucoAi`w$A$!)XSTIZnh=Qp=sV42d^I?d9spuNp-H@ZMgy=C@{_GSZVRCF!N2$-N& z*ygs(LwLj4=svYPnm|f2>R%Uhea0||XL(4=oVoKaKu8W);?vuvuUHq!i)+hSdMYih z;3+QErw$hf;j4q-QUeC>1OM0k6CChQaKJyo+^_NEK7ePXgE{KtwmFj=Ja`a9d4pT6 z5no+V^K8y9aC%=WHKwD;o8h;{!R#|AbXnN+wzgT#liC)dddxU=!J||cEs9I^2_T-e zp%~OAwaji?)alvB9l03V67@uU`iNNSGcxaEYQtTh@|EgRR&i-5cl=^sKxnPw%ENmt zGinr`o4oN-$uDk`4En1{i(s#{!7skxm%8AWir|+TesP=B33e;vm#8ju3U+S{dMPOh ze$jIh8BDVvXP+LiUO-=Pc6@qi4VPd#_!@#DDAf~VvitNlU+fFaVGO?O)2Bti>*V+8 z@-xU>Mc<61z)mQvzDn#!aT5Z+wSeP+Nq|Yhw=0S7S(m`R6zjNBY{M5JiSI#`u&eQP zMdI5E{NT&Ujj(UVmkEhoGyjDBx^hA%yh}m%4%Xyj0jH@n*!QW8us5kqupd&7!2T=t zYD!uYhW##dd}vrzJ%)`DE{*oqNf`Q;F7WkMh+5>%g0<40u;uP&^{cR8H8WM%X(bcu zzzSh027ws96=8@Wfy<)QcN(;$ATEKOH@R5lSM`lUMhW-q=J~BCxdnJS(M%~3EwouJ z?X4naPILP#ku+!4oLN|v)zv0nNr)K`%^ccPwy(RY<-%9v9iSd<$zD5{dAJim#d7$qObNEZce0*I9{*FN3 z1h9IK)p=T*-=$tgJ&*IRRcGPLWT<=#JCgVLe^uvTy?r8f*PiD;g6|oL_?}@=ll{M` z7XLeHDsc1tyVdRfZxJ@d|1#b_Ma!v0O(K;4J9RGhJD=x&1$T%aQj`2&BGf);YoDWzk3vzFlZ~1@a z95tg1lTpGJ|BvwV8*=mk%65`ljXjq-Vz?J&DwUPfD0?2_XD3Teh6d=hqy zryvCnPMS#6)2Hwehg>D1_d9Us>k-i(=2DoyAkT5w*PMtNN=Arr{vDvpo1Eeyip_{= z9Nf=>e~M=>d>_IGyK(qV5(fQgL4^ZbJ@bfZq za0hWW?i61Dgoj>$~IA)N~WCM zs8_p|g}Jd8ns!(R{rvBCzWDd}Klgv<{}$m-`1yYWulb4bPC!RR48i_?z>uCG{QTSe zADtYIU4FzVpp$;csrmCC@*nLC+XxS~{P4!~=*(9qWcmrBSa8Y6y=&;8yat5{#KZmr zxg(l?+8KlH$A}GOW*38sU326=;Qtq>@^&CC|0k%|rx6$GuJh-|ZdbHo;m3Yg@=0`L z*ATpO9{k2$St=1+e*z^Ao>)3PK7^)y*5(gBIp;b8^&3>%rY8V_nh3@*+$EZPC{EPn>&bRUJ#I$sODA#xRJ79+S+5fYDCH#gHCJ=@wLoI@zR4?DLOF;f0 zpPvO{0Q@Q3PgA>{z6d%UUAp=@`OW_&l?tgG!PjsB`u?J~QrJf8(Zl$Ef$MSq@BUwL zGPlbQ<^IC|0$h!J`d>tEIMl@pzaYlXI8I6jJptw&IGFY0f7}QYg4}$Ew~#=Lz>`Kh zrXyerg{C-Qz%v5AI8>LmW5jow$H^2s8511TzZSK*5;}GS_%3pda=+l;1|J^0b(Z2y zc3JDkCPH#o!kYb|DE{U zDZ-lVHINSCVjhg}+^YPL4uj*@{rNkB{D0#ACh&%og4#eZ9PrWgd1@bBcr5xa@)8tl z*BJhzH+34{e2(BWZvPhTe^0Lic%qX+fnRT&O@lItE;w@2Py>_)j3=Pf5%e6cH?s9M z8C*_-uW)?_T5KSJQ$J7DhfeJ?kY1ZUG3r`HMgfk$Yoo3b=MYbw2^00eqkq zQJ?7R=GgryTBb3MQ?3HM0xcGtED*Ny8H__7g4$uHpJ2%UBlUxmN*AEFkpi_b__~Ed zcGeq4qri`Qn$Zd|?gKipe5TKUFXI`&pZr7#1Af5a@XOWx_&YfM(~ZBM==2JN#j`WV zhODBy1-BZbeSH%MWu!!5jZ_IkvhWv)ouNJ8Qi8u|>@_Tfk81|>yA=C2@5f&b?{mt<9;wH$?{XXd^2JLy zJ5qqtBmcl&)K~G>1E)#;iJi&+!e0q?2fYi5y@$O+rF>EbJKbjM~?F{VjND)B#QBv|0m;oK{{3eCeUt9>tmQ_GaKFl8-FSqoFv!j!czWkZ>=IB$tRD^u3Wl(jNttxQ=f zQ`X9qwSuw@@Y#sJFwnR^YKW*D&Qy+IDo0{AeJN^_s2l|<{{`?S{6#aZW0=;lOlup{ z+QziDF|BP(Ya7$r#ZmI^Bh!@3Z0}UZ;DK*6C1stkYpXHrDB|OL_tJB2TAv zI_y}+IvsW#W1UX^jcQf?Mk{pkIIYmh-)V&odvLKrhkdwMp;H##wdnwF5Lw`pSyeE7 zVCrE8!3>8P12X|;63ld%R+#xPOJFXBxg6#im{l;h!mNYY46^}d6T>oRl2Dm12-OX1 z7@6qtnR_5*e1PX(nEfzVgAgCV?-MXMf19-fW)}>k(yX^&FcZr<0E78f7RKSM?_qv{ z!N{6z5qkWe8S#IO_}1 z33ZkYGgqUOhfL^4f#ycPm}3Db)&?k)a9&Wui_+sA?a_du0uZ^zdIGKn1OglW@=Ry| z{Pl(zMSkfQJ1W-1#TEx#8CP+FEBUK6aYG5xSIEkxK3!e={m@SI&nxNZUUz<$#k7=Lain=--MPR z#Km!!!@kDE-6}-NIx2Y_Yy;X5fV}HL1N1c5fZ{e06t^qxH4j=)+&-As7_%>Ka{$-r zN>JPr-3qkSD zVAuEv#>D}jV*1NqTyDT${F?Z$<9EmJiQgMP(S(MWP>~6B;>x<{1h2VL~fS=vouH$%HynTMyiWT*~`Q=rPmZ zRug*OgkCVA{h<9Jru|k>{CSuc;y=Tp$wyoZU&HlBf)cvHco=sq03{HfaqMbif1zD) zQH+DfAb)v;^Dc$qbQ6kAsKSJLn^0{4q7VrKIKH7>aHAMEz6gV?qT& zB>IS^-aRmT2}-Oop*|*5Z$g7iXgK_i;jn0HdYvauFri5%1U_lFnvfSE62UcLgJT-5 z;FtzSWE_EnrVgO=S_%K`V{LKwO zsY{ctOFgXG68WXzDgw~r7a7hoczpWW<7bf(r2^|Nwu&_TsDT*Ku%HctN@SdGgkb*i%sY(ekA;P&CM^KCj z>HY|pL^zlNj-!fW@t)wX9`AkFouEMsT?}XyL&HsI44?^&n`Gk1-*m;`_ zJ>W=bAq;(MLf~2k4jf5`(!iGt$PEZQ2euCe+yQoy33*K@+l0V{41W}&ibM1IVtLlY?J%KTCiI#Ky=6kksS)-Q6L-XfzBi#?OsE5p#p{F} z5x{xlOen>KiU5rxYIw^`sHX|_GoeNk8e&2t0}zF$pLe4EB&c&G%R2?{GueGEpoI)A z1;qXLR4Xh&YXuL&-(wtNE1>6LUhtj*GSl7NDe03GuBRcSJYPGDY)d-q97`_j8p|Bm z^_F_FHG;p_uzymn*Ran}?$h=%em~onvOSe-{{q-KS~Kh#?LNj|%k~(up}mk|qqOR^ zrDP*#5_$`;{s|pOa8-A(>puxE8`(c-3;1%*!(Z9;3fyW&7)p1sM(I|uYndNk!6a&m zY|cp)$57_KN=UIB8akw$#WD0@|9KqGZ`uan*J@wD?!~3)(m?Il>)9P1#FZ8IxNV~a!N}a zaJf=BmHFf!Yx=NdD%Aos!cZ-MKakD%bzGL)IEL9wpV=JG9FAu;(`PpOIh*~T&0%MA zY_pld%PEv9)v(J~9@IXDyIRIiBSfO7}rdYdOa`Ndp}~f6zf*s9g+u zxkhbxIoIrRu9pY7W+&;faUN!|eJjT^i}SObbMl}CH;u~WmTb1;$R=0yC{s^wfk!wj z_!C?m3}2?(j9JWa4rV$GVG0c9{14{b4(419W}kyO)L^DVBZq3Fx|WF?Hqk<mYWW%&yazO4B(1EllSYE>R29xrJ+|g~CE_2ep|N+F1;HDeP55TePL;2tzTb zOPH!d*eCcdFcF;kVb0-U&f!i@y$Ad0!Ra=zp9J=kU{GVekm5J?8O!-h;QSJ!*`S~u8fnvL;W*xnDj5IPpgC;QhT z0QZ0f5GlRT2SWJE$(BFE&h)py7V0msyQzbOSHG~0ee8fgf;~xF!SHt2nM{Xt`m!hg zuBbiiQTM{WgYeogrdW}poY=VDeVmgbbq!&-Tt03IK2Fz1rBj1AC;QY?_$lC$rg02u zT+$?tCk;AFD2G(8G%i;fmn)mgmB8gn<8q~OT4@|-5~TtiCseu=E?pXzE{%5S%K~i# zxpKXvDJtEsoc~@NmhM3Y$L5?sXA8r`fqQZMy*P$mT%r^|am6{>pW%wJonW<-U`~CB z8VbxJDwmi=al!_D#9WF~Os1RzgBlTwpy`TW&`QkVuyvGkF^zH#Jn98Dat@tHs5@vr zqO@jF&Y`D{VCDnR4@5C6k>vk!wFdTb_Opz08_K0~`qA3OdhHU}^QcC|`HY#z>CU5i z5%Z|_ai8~t1atiJpr1-g+KmmH<9V6<%br|odOh}G*FvUSI@fg?#f&ydZ6KZf7joEi zZrg=S`E(AI&Ug>Qz0`X6FH&3Crruh_^jG3;Z!k6`gCw~FoD9%eHApW^l~n`>b^*Z6Gq zxt&4@9;d`F9O@UX5STAH?3da=f~luKD=f9E&p9^i-z7YU{gPY7mmKp8?DGY#_Z{qW zHBl1!g~}R#Q5_#@TbO46h!$vMw9@lj$_l{JqkmK1Kc zDdb0Kexmu0oaaQ&a|-7zh4V9oV{mf}k|`sZ=K5GHIh7+^>UidvF6Qty=uASZGvMzD z){0>(4d3gfi(__ii;aM0D8i6`mzDxMihG2n4l#Ze+r*Q@nDU3!_1b``s;>m4?a)D=dR-U+*LB4t@7~cs{%fKRSe(y zc`x2Os=2W}GzJF!So6YU!=SZl=*t?UaI{aM)x!*e!OR$AywE1VOoD-Qt+m3;hgkx1 z4a~(bmorRKxs>~1?t=lHFm*#v``t%f}G1kXwN!! zua1>(a=*ZN3HWu2?Fb(SN} zC$Rmfe+hgxle~*FNW_;Pr@0nlxXPpnx#={?kk^AIr#k7Eg`BO1SqpPF%tn}pVW>8q zhS?6Y6Xq3|H(=g@`2gl4m@iHF)$%8ZUauj(+iUggSISvFlfsXZJB1z z&>bx#+Oix21M101Fw>Fm&BQ~*CLSFgVtbdwtQMNz2)~W(=NbPh!@F1-nZWiP%n4^w z&xJPXW3d0i@V$(G4mz$S^d6%fK?5iG*@Yc@5}KOHe$Mbop&nJw!k)nPDzy&qK(@Cs zN4if90_J{oE9~b;Du8x6^8XLEUsbmN{u8JEJY$}OofTB)GsRr7P%ITIpil2wXuVs5 zc6*?iPD+Q^SKD7C%DQr+{YCQ0z`ifL_sVi2bk3A0Jkq1Aauy zfxS(0zj1db-1`>Cw?XVvvDMZ{$;|j`i zJ?vXqKHJUsT?)J#+8;lHy-htuen_%`|D&)U)gW7o32ZOW>Hsg)dcoeR)xf?Fy7oXR zmLZW1dS%%t_>tqFPsl5m2E`pX-+E%)lscV62~Iua zg!E74$MFaJIRAhj*B|f``Um`k{Q*DjKj0_)5BP~V!B0Xnj_Zq6q^d!znLK&UT(O?* z2dB)QF-<&6+C;>TsZi1&b^*~W-XP5q;vKd>VEZGszhL`YwvV!XoNTGs4k3jc(%sfR zrB%j2Bg0ggLMmuv#=HfS=E>Z73+B#~tjvVh>8Kr2tCJ!Vwgqj=ikT}(hIAXG4(sny zbYp+uhuA#{t)bX=P2q_D2F9;QhFxrjvQ2GVVxKnIdi!Cy$!N)eaWsS7ZVhQe}2>czf9I@K0y{&_+6RkH{AI9Ia)+5&4)^}hZ zv*9XI+i=^hwx@0T?JMmM+P@94AUBjFI=B6-I9o-D78Q-#mtMf#EYMpkzt(lu25YR< z_0^KL+7orvDr={fT4*XBucD!|ck9WTXH|FTa-9i1uDagVU|p>Nt*iHT)$d6*e=aTKGN6?>lhVZS)-)6e2P&)Jaq7h|{ggOHRL&3n)Vss0!5&P$u;AR;n66-JqwpO4S0&g1+8rRR<^= zdV71SdO$hQ-`h(y0Lq0P-`=VbPzEkCk%BW7groMPK;dzCh8TKXNvkXC zbcH{~l+ra6SP`C9ddLu!^cZnN0N@`D4D~~**}%KrQY&y1UVnMkf7nKBT=Rl!UUEJZ z*O;AaEP`t+j>}9^YKl=hl3=>Q5FbE(Id_n77-Og0As1fbUC*6Q#QldkvzS!*25o@a zkDGHtlnt~W59;GYSu-Ga(71{lJ#gPZ8}`G~eI8ypRnAutq<;c@>3gyzPQBwa#}u-u z_Mts{9PEXR!MPPaB>+D-0YLC9wyV)s=)}OesM$bHh9Z;`r)n&)Ns>=d@1tHn!kUVL zX5bHDf29t<{xZnNyX<2h`*@FiU^hE_kQDGKOFeJwZ?x(mr|#Jg-XqoBE@VGFLO8T5`aQ%oc~1>%cA&O6_1I7tJ4X!m+Mq!jyc8B+jJ zizYdT!eS$^j)7+OV2mCwQAI&N{CK!2XpyHr5J+(khYY;!fM)nkw=JB0z|H1A3^$4X z*Xd&wv?){GD1{8O71kPgB3VkR0VY1rz^B2#1o!Q3yc@LiLu&!>#OJ6@>#=s@&;^Jo z%J7{In5d4sk{K(}BPfqTq;q)U7WA&frQo4~ypkpr3+@AoCIc){?^2vcSqvyp!WiI) z#ul{!s+|`rq7$S{7~O}$OsYG0l&mkh7 z-OSgcxL-yymq_4#na=$ZcdBs-s1#J&dJA-`FqEfSj)G=(B}WDMsbD`=^wJnm5i>^> z%03&Fo1f?6E?UG?&DhHm<2C^2Y5>(~`H^l&Zp`f`mAOHZHDa8u_ diff --git a/libs/candybar/src/main/res/font/semibold.ttf b/libs/candybar/src/main/res/font/semibold.ttf deleted file mode 100644 index 77f20d6c91836820904a332fabaf4226851d7a34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 78500 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%0AF8@D>{fNQ90qN~|8-*t-X9M`3; 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 diff --git a/libs/candybar/src/main/res/layout-land/fragment_about_item_footer.xml b/libs/candybar/src/main/res/layout-land/fragment_about_item_footer.xml deleted file mode 100644 index 39d11a0..0000000 --- a/libs/candybar/src/main/res/layout-land/fragment_about_item_footer.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/layout-land/fragment_about_item_footer_accent.xml b/libs/candybar/src/main/res/layout-land/fragment_about_item_footer_accent.xml deleted file mode 100644 index 5a26186..0000000 --- a/libs/candybar/src/main/res/layout-land/fragment_about_item_footer_accent.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/layout-land/fragment_about_item_header.xml b/libs/candybar/src/main/res/layout-land/fragment_about_item_header.xml deleted file mode 100644 index 3c9e4ce..0000000 --- a/libs/candybar/src/main/res/layout-land/fragment_about_item_header.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/layout-land/fragment_about_item_sub.xml b/libs/candybar/src/main/res/layout-land/fragment_about_item_sub.xml deleted file mode 100644 index cf432ba..0000000 --- a/libs/candybar/src/main/res/layout-land/fragment_about_item_sub.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/libs/candybar/src/main/res/layout-land/fragment_request_item_header.xml b/libs/candybar/src/main/res/layout-land/fragment_request_item_header.xml deleted file mode 100644 index fb6f705..0000000 --- a/libs/candybar/src/main/res/layout-land/fragment_request_item_header.xml +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - - - - - - -