├── .codebeatignore ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── feature_request.md │ ├── question.md │ └── translation.md └── stale.yml ├── .gitignore ├── .travis.yml ├── Android.mk ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── contemporary │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── github │ │ │ └── yeriomin │ │ │ └── yalpstore │ │ │ ├── BaseActivity.java │ │ │ ├── OnAppClickListener.java │ │ │ ├── PreferenceActivity.java │ │ │ ├── SearchActivity.java │ │ │ ├── ThemeManager.java │ │ │ ├── fragment │ │ │ ├── details │ │ │ │ └── Background.java │ │ │ └── preference │ │ │ │ └── PreferenceFragment.java │ │ │ ├── task │ │ │ ├── LoadCircularImageTask.java │ │ │ └── playstore │ │ │ │ ├── NavHeaderUpdateTask.java │ │ │ │ └── SearchSuggestionTask.java │ │ │ └── view │ │ │ ├── DialogWrapper.java │ │ │ ├── InstalledAppsMainButtonAdapter.java │ │ │ └── UpdatableAppsButtonAdapter.java │ └── res │ │ ├── drawable-v21 │ │ └── ic_menu.xml │ │ ├── drawable │ │ ├── button_border.xml │ │ └── ic_menu.xml │ │ ├── layout │ │ ├── applist_main_button.xml │ │ ├── base_activity_layout.xml │ │ ├── details_activity_layout.xml │ │ ├── details_beta.xml │ │ ├── details_button_bar.xml │ │ ├── details_content_layout.xml │ │ ├── details_permissions.xml │ │ ├── details_reviews.xml │ │ ├── details_screenshots.xml │ │ ├── nav_header.xml │ │ ├── preferences_layout.xml │ │ ├── search_view_layout.xml │ │ └── suggestion_list_item.xml │ │ ├── menu │ │ ├── menu_accounts.xml │ │ ├── menu_bar.xml │ │ └── menu_drawer.xml │ │ ├── values-v21 │ │ └── style.xml │ │ └── values │ │ ├── colors.xml │ │ └── style.xml │ ├── legacy │ ├── AndroidManifest.xml │ ├── java │ │ ├── android │ │ │ ├── preference │ │ │ │ └── MultiSelectListPreference.java │ │ │ ├── support │ │ │ │ └── v4 │ │ │ │ │ └── content │ │ │ │ │ └── FileProvider.java │ │ │ └── util │ │ │ │ └── LruCache.java │ │ └── com │ │ │ └── github │ │ │ └── yeriomin │ │ │ └── yalpstore │ │ │ ├── BaseActivity.java │ │ │ ├── OnAppClickListener.java │ │ │ ├── PreferenceActivity.java │ │ │ ├── SearchActivity.java │ │ │ ├── ThemeManager.java │ │ │ ├── fragment │ │ │ └── details │ │ │ │ └── Background.java │ │ │ └── view │ │ │ ├── DialogWrapper.java │ │ │ ├── InstalledAppsMainButtonAdapter.java │ │ │ └── UpdatableAppsButtonAdapter.java │ └── res │ │ ├── drawable-v21 │ │ └── ic_accounts.xml │ │ ├── drawable │ │ └── ic_accounts.png │ │ ├── layout │ │ ├── applist_main_button.xml │ │ ├── details_activity_layout.xml │ │ ├── details_beta.xml │ │ ├── details_button_bar.xml │ │ ├── details_content_layout.xml │ │ ├── details_permissions.xml │ │ ├── details_reviews.xml │ │ └── details_screenshots.xml │ │ ├── menu │ │ └── menu_bar.xml │ │ ├── values │ │ └── donottranslate.xml │ │ └── xml │ │ └── searchable.xml │ └── main │ ├── AndroidManifest.xml │ ├── java │ ├── android │ │ └── content │ │ │ └── pm │ │ │ └── IPackageInstallObserver.java │ └── com │ │ └── github │ │ └── yeriomin │ │ ├── util │ │ └── StringExtractor.java │ │ └── yalpstore │ │ ├── AboutActivity.java │ │ ├── AppListActivity.java │ │ ├── AppListInstallReceiver.java │ │ ├── AppListIterator.java │ │ ├── BitmapManager.java │ │ ├── BlackWhiteListManager.java │ │ ├── BootReceiver.java │ │ ├── BugReportActivity.java │ │ ├── CategoryAppsActivity.java │ │ ├── CategoryListActivity.java │ │ ├── CategoryManager.java │ │ ├── ClusterActivity.java │ │ ├── ConnectivityChangeReceiver.java │ │ ├── ContextUtil.java │ │ ├── CredentialsEmptyException.java │ │ ├── DebugHttpClientAdapter.java │ │ ├── DetailsActivity.java │ │ ├── DetailsInstallReceiver.java │ │ ├── DeveloperActivity.java │ │ ├── DeviceInfoActivity.java │ │ ├── DirectDownloadActivity.java │ │ ├── EglExtensionRetriever.java │ │ ├── EndlessScrollActivity.java │ │ ├── FirstLaunchChecker.java │ │ ├── FullscreenImageActivity.java │ │ ├── FullscreenImageAdapter.java │ │ ├── GlobalInstallReceiver.java │ │ ├── HistoryActivity.java │ │ ├── ImageAdapter.java │ │ ├── InstalledApkCopier.java │ │ ├── InstalledAppsActivity.java │ │ ├── ListActivity.java │ │ ├── ListAdapter.java │ │ ├── ManualDownloadActivity.java │ │ ├── NativeDeviceInfoProvider.java │ │ ├── NativeGsfVersionProvider.java │ │ ├── NativeHttpClientAdapter.java │ │ ├── NetworkUtil.java │ │ ├── NotPurchasedException.java │ │ ├── OnListPreferenceChangeListener.java │ │ ├── PackageSpecificReceiver.java │ │ ├── Paths.java │ │ ├── PermissionsComparator.java │ │ ├── PlayStoreApiAuthenticator.java │ │ ├── PreferenceUtil.java │ │ ├── ReviewIterator.java │ │ ├── ReviewRetrieverIterator.java │ │ ├── ReviewStorageIterator.java │ │ ├── ScrollEdgeListener.java │ │ ├── SearchActivityAbstract.java │ │ ├── SharedPreferencesCachedSet.java │ │ ├── SharedPreferencesTranslator.java │ │ ├── SpoofDeviceManager.java │ │ ├── SqliteHelper.java │ │ ├── ThemeManagerAbstract.java │ │ ├── TokenDispenserMirrors.java │ │ ├── UpdatableAppsActivity.java │ │ ├── UpdateAllReceiver.java │ │ ├── UpdateChecker.java │ │ ├── Util.java │ │ ├── VersionIgnoreManager.java │ │ ├── WishlistActivity.java │ │ ├── YalpStoreActivity.java │ │ ├── YalpStoreApplication.java │ │ ├── YalpStorePermissionManager.java │ │ ├── YalpStoreSuggestionProvider.java │ │ ├── YalpStoreUncaughtExceptionHandler.java │ │ ├── bugreport │ │ ├── BugReportBuilder.java │ │ ├── BugReportDeviceInfoBuilder.java │ │ ├── BugReportLogBuilder.java │ │ ├── BugReportMessageBuilder.java │ │ ├── BugReportPreferencesBuilder.java │ │ ├── BugReportPropertiesBuilder.java │ │ ├── BugReportSender.java │ │ ├── BugReportSenderEmail.java │ │ ├── BugReportSenderFtp.java │ │ └── BugReportService.java │ │ ├── delta │ │ ├── BSDiff.java │ │ ├── GDiff.java │ │ ├── Patcher.java │ │ └── PatcherFactory.java │ │ ├── download │ │ ├── AppListProgressListener.java │ │ ├── DetailsProgressListener.java │ │ ├── DownloadManager.java │ │ ├── ProgressListenerFactory.java │ │ ├── ProgressNotificationListener.java │ │ ├── Request.java │ │ ├── RequestApk.java │ │ ├── RequestBuilder.java │ │ ├── RequestDelta.java │ │ ├── RequestObb.java │ │ ├── RequestSplit.java │ │ └── State.java │ │ ├── fragment │ │ ├── Abstract.java │ │ ├── Button.java │ │ ├── ButtonCancel.java │ │ ├── ButtonDownload.java │ │ ├── ButtonInstall.java │ │ ├── ButtonRun.java │ │ ├── ButtonUninstall.java │ │ ├── DownloadMenu.java │ │ ├── FilterMenu.java │ │ ├── details │ │ │ ├── AllFragments.java │ │ │ ├── AppLists.java │ │ │ ├── BackToPlayStore.java │ │ │ ├── Beta.java │ │ │ ├── Exodus.java │ │ │ ├── Fdroid.java │ │ │ ├── GeneralDetails.java │ │ │ ├── GoogleDependency.java │ │ │ ├── InstantAppLink.java │ │ │ ├── Permissions.java │ │ │ ├── Review.java │ │ │ ├── Screenshot.java │ │ │ ├── Share.java │ │ │ ├── SystemAppPage.java │ │ │ ├── Video.java │ │ │ └── Wishlist.java │ │ └── preference │ │ │ ├── Abstract.java │ │ │ ├── AllPreferences.java │ │ │ ├── Blacklist.java │ │ │ ├── CheckUpdates.java │ │ │ ├── DownloadDirectory.java │ │ │ ├── InstallationMethod.java │ │ │ ├── InternalStorage.java │ │ │ ├── List.java │ │ │ ├── OnInstallationMethodChangeListener.java │ │ │ ├── Proxy.java │ │ │ └── Theme.java │ │ ├── install │ │ ├── ApkSignatureVerifier.java │ │ ├── InstallationState.java │ │ ├── InstallerAbstract.java │ │ ├── InstallerBackground.java │ │ ├── InstallerDefault.java │ │ ├── InstallerFactory.java │ │ ├── InstallerPrivileged.java │ │ ├── InstallerPrivilegedReflection.java │ │ ├── InstallerPrivilegedSession.java │ │ └── InstallerRoot.java │ │ ├── model │ │ ├── App.java │ │ ├── AppBuilder.java │ │ ├── Dao.java │ │ ├── Event.java │ │ ├── EventDao.java │ │ ├── Filter.java │ │ ├── ImageSource.java │ │ ├── LoginInfo.java │ │ ├── LoginInfoDao.java │ │ ├── Rating.java │ │ ├── Review.java │ │ └── ReviewBuilder.java │ │ ├── notification │ │ ├── CancelDownloadReceiver.java │ │ ├── IgnoreUpdatesReceiver.java │ │ ├── NotificationBuilder.java │ │ ├── NotificationBuilderHoneycomb.java │ │ ├── NotificationBuilderIcs.java │ │ ├── NotificationBuilderJellybean.java │ │ ├── NotificationBuilderKitkatWatch.java │ │ ├── NotificationBuilderLegacy.java │ │ ├── NotificationBuilderO.java │ │ ├── NotificationManagerWrapper.java │ │ └── SignatureCheckReceiver.java │ │ ├── selfupdate │ │ ├── Signature.java │ │ ├── Updater.java │ │ ├── UpdaterFactory.java │ │ ├── UpdaterFdroid.java │ │ └── UpdaterGithub.java │ │ ├── task │ │ ├── AppListValidityCheckTask.java │ │ ├── BitmapCacheCleanupTask.java │ │ ├── CheckShellTask.java │ │ ├── CheckSuTask.java │ │ ├── CleanupTask.java │ │ ├── ConvertToNormalTask.java │ │ ├── ConvertToSystemTask.java │ │ ├── CopyApkTask.java │ │ ├── DownloadTask.java │ │ ├── ExodusCsrfTask.java │ │ ├── ExodusSearchTask.java │ │ ├── ExodusSubmitTask.java │ │ ├── ExodusTask.java │ │ ├── FdroidListTask.java │ │ ├── HistoryTask.java │ │ ├── HttpTask.java │ │ ├── InstallTask.java │ │ ├── InstalledAppsTask.java │ │ ├── LoadImageTask.java │ │ ├── LowCpuIntensityTask.java │ │ ├── OldApkCleanupTask.java │ │ ├── PatchTask.java │ │ ├── RebootTask.java │ │ ├── SystemRemountTask.java │ │ ├── TaskWithProgress.java │ │ ├── UninstallSystemAppTask.java │ │ └── playstore │ │ │ ├── AppProvidedCredentialsTask.java │ │ │ ├── BackgroundCategoryTask.java │ │ │ ├── BackgroundPurchaseTask.java │ │ │ ├── BackgroundUpdatableAppsTask.java │ │ │ ├── BetaToggleTask.java │ │ │ ├── CategoryAppsTask.java │ │ │ ├── CategoryListTask.java │ │ │ ├── CategoryTask.java │ │ │ ├── ChangelogTask.java │ │ │ ├── CheckCredentialsTask.java │ │ │ ├── CheckLoginTask.java │ │ │ ├── CloneableTask.java │ │ │ ├── ClusterTask.java │ │ │ ├── DeliveryDataTask.java │ │ │ ├── DependencyTranslationTask.java │ │ │ ├── DetailsCategoryTask.java │ │ │ ├── DetailsTask.java │ │ │ ├── DownloadLinkTask.java │ │ │ ├── EndlessScrollTask.java │ │ │ ├── FlagTask.java │ │ │ ├── ForegroundUpdatableAppsTask.java │ │ │ ├── LoginTask.java │ │ │ ├── PlayStorePayloadTask.java │ │ │ ├── PlayStoreTask.java │ │ │ ├── PurchaseCheckTask.java │ │ │ ├── PurchaseTask.java │ │ │ ├── RefreshTokenTask.java │ │ │ ├── RemoteAppListTask.java │ │ │ ├── ReviewAddTask.java │ │ │ ├── ReviewDeleteTask.java │ │ │ ├── ReviewLoadTask.java │ │ │ ├── SearchTask.java │ │ │ ├── UpdatableAppsTask.java │ │ │ ├── UserProfileTask.java │ │ │ ├── WishlistToggleTask.java │ │ │ └── WishlistUpdateTask.java │ │ ├── view │ │ ├── AppBadge.java │ │ ├── ButtonAdapter.java │ │ ├── CredentialsDialogBuilder.java │ │ ├── DialogWrapperAbstract.java │ │ ├── FlagDialogBuilder.java │ │ ├── HistoryItem.java │ │ ├── HttpTaskOnClickListener.java │ │ ├── InstalledAppBadge.java │ │ ├── InstalledAppsMainButtonAdapterAbstract.java │ │ ├── IntentOnClickListener.java │ │ ├── ListItem.java │ │ ├── LoginDialogBuilder.java │ │ ├── ProgressIndicator.java │ │ ├── PurchaseDialogBuilder.java │ │ ├── SearchResultAppBadge.java │ │ ├── SystemRemountDialogBuilder.java │ │ ├── UpdatableAppBadge.java │ │ ├── UpdatableAppsButtonAdapterAbstract.java │ │ ├── UriOnClickListener.java │ │ └── UserReviewDialogBuilder.java │ │ └── widget │ │ ├── Badge.java │ │ ├── ExpansionPanel.java │ │ └── PermissionGroup.java │ └── res │ ├── drawable-anydpi-v21 │ ├── ic_about.xml │ ├── ic_add.xml │ ├── ic_apps.xml │ ├── ic_arrow_drop_down.xml │ ├── ic_bug_report.xml │ ├── ic_cancel.xml │ ├── ic_categories.xml │ ├── ic_check.xml │ ├── ic_chevron_left.xml │ ├── ic_chevron_right.xml │ ├── ic_circle.xml │ ├── ic_delete.xml │ ├── ic_download.xml │ ├── ic_edit.xml │ ├── ic_events.xml │ ├── ic_exodus.xml │ ├── ic_expand_less.xml │ ├── ic_expand_more.xml │ ├── ic_fdroid.xml │ ├── ic_filter.xml │ ├── ic_google_play.xml │ ├── ic_instant_app.xml │ ├── ic_link.xml │ ├── ic_logout.xml │ ├── ic_more.xml │ ├── ic_more_vert.xml │ ├── ic_notification.xml │ ├── ic_permission_android.xml │ ├── ic_permission_google.xml │ ├── ic_permission_unknown.xml │ ├── ic_placeholder.xml │ ├── ic_refresh.xml │ ├── ic_search.xml │ ├── ic_settings.xml │ ├── ic_share.xml │ ├── ic_star.xml │ ├── ic_storage.xml │ ├── ic_video.xml │ ├── ic_visibility_off.xml │ ├── ic_visibility_on.xml │ ├── ic_wishlist_plus.xml │ └── ic_wishlist_tick.xml │ ├── drawable │ ├── ic_about.png │ ├── ic_add.png │ ├── ic_apps.png │ ├── ic_arrow_drop_down.png │ ├── ic_bug_report.png │ ├── ic_cancel.png │ ├── ic_categories.png │ ├── ic_check.png │ ├── ic_chevron_left.png │ ├── ic_chevron_right.png │ ├── ic_circle.png │ ├── ic_delete.png │ ├── ic_download.png │ ├── ic_download_animation.xml │ ├── ic_download_animation_1.png │ ├── ic_download_animation_2.png │ ├── ic_download_animation_3.png │ ├── ic_download_animation_4.png │ ├── ic_download_animation_5.png │ ├── ic_download_animation_6.png │ ├── ic_edit.png │ ├── ic_events.png │ ├── ic_exodus.png │ ├── ic_expand_less.png │ ├── ic_expand_more.png │ ├── ic_fdroid.png │ ├── ic_filter.png │ ├── ic_google_play.png │ ├── ic_instant_app.png │ ├── ic_launcher_foreground.xml │ ├── ic_link.png │ ├── ic_logout.png │ ├── ic_more.png │ ├── ic_more_vert.png │ ├── ic_notification.png │ ├── ic_permission_android.png │ ├── ic_permission_google.png │ ├── ic_permission_unknown.png │ ├── ic_placeholder.png │ ├── ic_refresh.png │ ├── ic_search.png │ ├── ic_settings.png │ ├── ic_share.png │ ├── ic_star.png │ ├── ic_storage.png │ ├── ic_video.png │ ├── ic_visibility_off.png │ ├── ic_visibility_on.png │ ├── ic_wishlist_plus.png │ └── ic_wishlist_tick.png │ ├── layout-v21 │ ├── permission_group_widget_layout.xml │ └── two_line_list_item_with_icon.xml │ ├── layout │ ├── about_activity_layout.xml │ ├── applist_activity_layout.xml │ ├── badge_widget_layout.xml │ ├── bugreport_activity_layout.xml │ ├── details_general.xml │ ├── deviceinfo_activity_layout.xml │ ├── event_list_item.xml │ ├── expansion_panel_widget_layout.xml │ ├── fullscreen_image_activity_layout.xml │ ├── list_activity_layout.xml │ ├── login_dialog_layout.xml │ ├── manual_download_activity_layout.xml │ ├── permission_group_widget_layout.xml │ ├── review_dialog_layout.xml │ ├── review_list_item.xml │ └── two_line_list_item_with_icon.xml │ ├── menu │ └── menu_download.xml │ ├── mipmap-anydpi-v26 │ └── ic_launcher.xml │ ├── mipmap-hdpi-v24 │ └── ic_launcher.png │ ├── mipmap-hdpi │ └── ic_launcher.png │ ├── mipmap-mdpi-v24 │ └── ic_launcher.png │ ├── mipmap-xhdpi-v24 │ └── ic_launcher.png │ ├── mipmap-xhdpi │ └── ic_launcher.png │ ├── mipmap-xxhdpi-v24 │ └── ic_launcher.png │ ├── mipmap-xxhdpi │ └── ic_launcher.png │ ├── mipmap-xxxhdpi-v24 │ └── ic_launcher.png │ ├── mipmap-xxxhdpi │ └── ic_launcher.png │ ├── mipmap │ └── ic_launcher.png │ ├── values-ar │ └── strings.xml │ ├── values-ast │ └── strings.xml │ ├── values-bg │ └── strings.xml │ ├── values-cs │ └── strings.xml │ ├── values-de │ └── strings.xml │ ├── values-el │ └── strings.xml │ ├── values-es │ └── strings.xml │ ├── values-eu │ └── strings.xml │ ├── values-fr-rBE │ └── strings.xml │ ├── values-fr │ └── strings.xml │ ├── values-in │ └── strings.xml │ ├── values-it │ └── strings.xml │ ├── values-ja │ └── strings.xml │ ├── values-kk │ └── strings.xml │ ├── values-ko │ └── strings.xml │ ├── values-nl │ └── strings.xml │ ├── values-pl │ └── strings.xml │ ├── values-pt-rBR │ └── strings.xml │ ├── values-pt │ └── strings.xml │ ├── values-ru │ └── strings.xml │ ├── values-sk │ └── strings.xml │ ├── values-uk │ └── strings.xml │ ├── values-zh-rTW │ └── strings.xml │ ├── values-zh │ └── strings.xml │ ├── values │ ├── array.xml │ ├── attrs.xml │ ├── donottranslate.xml │ ├── ic_launcher_background.xml │ └── strings.xml │ └── xml │ ├── paths.xml │ └── settings.xml ├── build.gradle ├── drawable-source ├── ic_bug_report.svg ├── ic_categories.svg ├── ic_chevron_left.svg ├── ic_chevron_right.svg ├── ic_circle.svg ├── ic_delete.svg ├── ic_download.svg ├── ic_edit.svg ├── ic_events.svg ├── ic_exodus.svg ├── ic_expand_less.svg ├── ic_expand_more.svg ├── ic_fdroid.svg ├── ic_google_play.svg ├── ic_ignore.svg ├── ic_instant_app.svg ├── ic_launcher.svg ├── ic_launcher_borderless.svg ├── ic_logout.svg ├── ic_notification.svg ├── ic_notification_round.svg ├── ic_notification_square.svg ├── ic_permission_android.svg ├── ic_permission_google.svg ├── ic_permission_unknown.svg ├── ic_placeholder.svg ├── ic_refresh.svg ├── ic_search.svg ├── ic_settings.svg ├── ic_star.svg ├── ic_storage.svg ├── ic_video.svg ├── ic_wishlist_plus.svg └── ic_wishlist_tick.svg ├── fastlane └── metadata │ └── android │ └── en-US │ └── phoneScreenshots │ ├── details.png │ ├── search.png │ └── updates.png ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── settings.gradle ├── yalp-store-ota-zip ├── 81-YalpStore.sh ├── META-INF │ └── com │ │ └── google │ │ └── android │ │ └── update-binary └── privapp-permissions-YalpStore.xml └── yeriomin-keystore.jks.enc /.codebeatignore: -------------------------------------------------------------------------------- 1 | /app/src/legacy/java/android/support/v4/content/FileProvider.java 2 | /app/src/legacy/java/android/util/LruCache.java 3 | /app/src/legacy/java/android/preference/MultiSelectListPreference.java 4 | /app/src/main/java/com/github/yeriomin/yalpstore/EglExtensionRetriever.java 5 | /app/src/main/java/com/github/yeriomin/yalpstore/model/App.java 6 | /app/src/main/java/com/github/yeriomin/yalpstore/model/LoginInfo.java 7 | /app/src/main/java/com/github/yeriomin/yalpstore/model/AppBuilder.java 8 | /app/src/main/java/com/github/yeriomin/yalpstore/model/Filter.java 9 | /app/src/main/java/com/github/yeriomin/yalpstore/model/Review.java 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: There is a problem with Yalp Store 4 | 5 | --- 6 | 7 | **Before creating an issue** 8 | 1. Make sure you are running the latest version of Yalp Store. Check [here](https://github.com/yeriomin/YalpStore/releases/latest). 9 | 2. Search for similar issues [here](https://github.com/yeriomin/YalpStore/issues?q=is%3Aissue). 10 | 3. Send developer a bug report using Yalp's built-in crash tool. Please identify yourself - the reports are anonymous by default. 11 | 4. Number 3 is important. Please do it. It helps a lot. 12 | 5. Use the following template to write the text of your issue. 13 | 14 | **Expected behavior** 15 | Tell us what should happen 16 | 17 | **Actual behavior** 18 | Tell us what happens instead 19 | 20 | **Steps to reproduce** 21 | 1. 22 | 2. 23 | 3. 24 | 25 | **Your setup** 26 | Device model, android falvor, Yalp Store version 27 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 9 | 10 | **Describe the solution you'd like** 11 | A clear and concise description of what you want to happen. 12 | 13 | **Describe alternatives you've considered** 14 | A clear and concise description of any alternative solutions or features you've considered. 15 | 16 | **Additional context** 17 | Add any other context or screenshots about the feature request here. 18 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/question.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Question 3 | about: You have something to ask 4 | 5 | --- 6 | 7 | If you have a question or want to discuss something which is not a bug or a feature request, please use [the gitter chat room](https://gitter.im/YalpStore/Lobby). 8 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/translation.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Translation 3 | about: You are contributing a translation 4 | 5 | --- 6 | 7 | I appreciate your effort! 8 | 9 | Please use POEditor to contribute translations: 10 | 11 | https://poeditor.com/projects/view?id=95185 12 | 13 | I (obviously) cannot speak every language, so I cannot blindly overwrite someone else's translation with yours. POEditor lets you collaborate with other translators. 14 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 30 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 7 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - pinned 8 | - security 9 | - enhancement 10 | # Label to use when marking an issue as stale 11 | staleLabel: stale 12 | # Comment to post when marking an issue as stale. Set to `false` to disable 13 | markComment: > 14 | This issue has been automatically marked as stale because it has not had 15 | recent activity. It will be closed if no further activity occurs. Thank you 16 | for your contributions. 17 | # Comment to post when closing a stale issue. Set to `false` to disable 18 | closeComment: false 19 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Built application files 2 | *.apk 3 | *.ap_ 4 | 5 | # Files for the Dalvik VM 6 | *.dex 7 | 8 | # Java class files 9 | *.class 10 | 11 | # Generated files 12 | bin/ 13 | gen/ 14 | 15 | # Gradle files 16 | .gradle/ 17 | build/ 18 | /*/build/ 19 | 20 | # Local configuration file (sdk path, etc) 21 | local.properties 22 | 23 | # Proguard folder generated by Eclipse 24 | proguard/ 25 | 26 | # Log Files 27 | *.log 28 | 29 | # From .gitignore generated by Android Studio 30 | *.iml 31 | .DS_Store 32 | /captures 33 | /.idea 34 | /.gradle* 35 | gradle-app.setting 36 | *.zip 37 | 38 | *.jar 39 | *.json 40 | -------------------------------------------------------------------------------- /Android.mk: -------------------------------------------------------------------------------- 1 | LOCAL_PATH:= $(call my-dir) 2 | 3 | include $(CLEAR_VARS) 4 | LOCAL_MODULE := privapp-permissions-YalpStore.xml 5 | LOCAL_MODULE_CLASS := ETC 6 | LOCAL_MODULE_TAGS := optional 7 | LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions 8 | LOCAL_SRC_FILES := $(LOCAL_PATH)/yalp-store-ota-zip/$(LOCAL_MODULE) 9 | include $(BUILD_PREBUILT) 10 | 11 | include $(CLEAR_VARS) 12 | 13 | LOCAL_MODULE := YalpStore 14 | LOCAL_MODULE_TAGS := optional 15 | LOCAL_PACKAGE_NAME := YalpStore 16 | 17 | yalpstore_root := $(LOCAL_PATH) 18 | yalpstore_dir := app 19 | yalpstore_out := $(OUT_DIR)/target/common/obj/APPS/$(LOCAL_MODULE)_intermediates 20 | yalpstore_build := $(yalpstore_root)/$(yalpstore)/build 21 | yalpstore_apk := build/outputs/apk/release/app-release-unsigned.apk 22 | 23 | $(yalpstore_root)/$(yalpstore_dir)/$(yalpstore_apk): 24 | rm -Rf $(yalpstore_build) 25 | mkdir -p $(yalpstore_out) 26 | ln -s $(yalpstore_out) $(yalpstore_build) 27 | echo "sdk.dir=$(ANDROID_HOME)" > $(yalpstore_root)/local.properties 28 | cd $(yalpstore_root) && git submodule update --recursive --init 29 | cd $(yalpstore_root)/$(yalpstore_dir) && JAVA_TOOL_OPTIONS="$(JAVA_TOOL_OPTIONS) -Dfile.encoding=UTF8" ../gradlew assembleLegacyRelease 30 | 31 | LOCAL_CERTIFICATE := platform 32 | LOCAL_SRC_FILES := $(yalpstore_dir)/$(yalpstore_apk) 33 | LOCAL_MODULE_CLASS := APPS 34 | LOCAL_MODULE_SUFFIX := $(COMMON_ANDROID_PACKAGE_SUFFIX) 35 | 36 | include $(BUILD_PREBUILT) -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Thank you for considering to contribute! 2 | 3 | ### Questions 4 | 5 | If you have a question or want to discuss something which is not a bug or a feature request, please use [the gitter chat room](https://gitter.im/YalpStore/Lobby). 6 | 7 | ### Bugs and feature requests 8 | 9 | Please, [search the closed issues](https://github.com/yeriomin/YalpStore/issues?q=is%3Aissue) before creating a bug or a feature request. 10 | 11 | Also, please make sure you are using the [latest version available](https://github.com/yeriomin/YalpStore/releases/latest). 12 | 13 | Keep in mind that naming an issue is important for future searches. Naming it "Bug" or "A request" is unhelpful. 14 | 15 | ### Translations 16 | 17 | Please, check out project's POEditor page: 18 | 19 | https://poeditor.com/join/project/LUPUijv2Cs 20 | 21 | POEditor is a web service for managing opensource translations. Don't hesitate to try it, you don't have to be technically adept to use it. 22 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in F:\android-sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -dontobfuscate 19 | -keep public interface android.content.pm.IPackageInstallObserver { *; } 20 | -keep class android.content.pm.IPackageInstallObserver$Stub { *; } 21 | -keep public class android.preference.MultiSelectListPreference { *; } 22 | -keep public class com.google.protobuf.ExtensionRegistryLite { *; } 23 | -keep public class com.google.protobuf.ExtensionRegistry { *; } 24 | -keep final class com.google.protobuf.ExtensionRegistryFactory { *; } 25 | -keep public class android.support.v4.content.FileProvider { *; } 26 | -keep public class android.util.LruCache { *; } 27 | -keep public class com.github.yeriomin.yalpstore.install.InstallerPrivilegedReflection$* { *; } 28 | -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable 29 | -dontwarn sun.misc.Unsafe 30 | -optimizationpasses 5 31 | -allowaccessmodification 32 | -dontskipnonpubliclibraryclasses 33 | -renamesourcefileattribute SourceFile 34 | -keepattributes SourceFile,LineNumberTable -------------------------------------------------------------------------------- /app/src/contemporary/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <manifest 3 | package="com.github.yeriomin.yalpstore" 4 | xmlns:tools="http://schemas.android.com/tools" 5 | tools:node="merge" 6 | xmlns:android="http://schemas.android.com/apk/res/android"> 7 | 8 | <application 9 | android:name=".YalpStoreApplication" 10 | android:hardwareAccelerated="true" 11 | android:theme="@style/Theme.AppCompat.Light.NoActionBar" /> 12 | 13 | </manifest> 14 | -------------------------------------------------------------------------------- /app/src/contemporary/java/com/github/yeriomin/yalpstore/SearchActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.support.v7.widget.SearchView; 23 | import android.view.Menu; 24 | 25 | public class SearchActivity extends SearchActivityAbstract { 26 | 27 | @Override 28 | protected void search(String query, boolean isPackageName) { 29 | if (isPackageName) { 30 | startActivity(DetailsActivity.getDetailsIntent(this, query)); 31 | finish(); 32 | } else { 33 | onNewIntent(getSearchIntent(query)); 34 | } 35 | } 36 | 37 | @Override 38 | public boolean onCreateOptionsMenu(Menu menu) { 39 | boolean result = super.onCreateOptionsMenu(menu); 40 | ((SearchView) menu.findItem(R.id.action_search).getActionView()).setQuery(query,false); 41 | return result; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/contemporary/java/com/github/yeriomin/yalpstore/fragment/preference/PreferenceFragment.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.fragment.preference; 21 | 22 | import android.os.Bundle; 23 | import android.support.annotation.Nullable; 24 | 25 | import com.github.yeriomin.yalpstore.PreferenceActivity; 26 | import com.github.yeriomin.yalpstore.R; 27 | 28 | public class PreferenceFragment extends android.preference.PreferenceFragment { 29 | 30 | @Override 31 | public void onCreate(@Nullable Bundle savedInstanceState) { 32 | super.onCreate(savedInstanceState); 33 | addPreferencesFromResource(R.xml.settings); 34 | new AllPreferences((PreferenceActivity) getActivity()).draw(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/contemporary/java/com/github/yeriomin/yalpstore/task/LoadCircularImageTask.java: -------------------------------------------------------------------------------- 1 | package com.github.yeriomin.yalpstore.task; 2 | 3 | import android.graphics.Bitmap; 4 | import android.graphics.drawable.Drawable; 5 | import android.support.v4.graphics.drawable.RoundedBitmapDrawable; 6 | import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory; 7 | import android.widget.ImageView; 8 | 9 | public class LoadCircularImageTask extends LoadImageTask { 10 | 11 | private boolean cropCircle = false; 12 | 13 | public LoadImageTask setCropCircle(boolean cropCircle) { 14 | this.cropCircle = cropCircle; 15 | return this; 16 | } 17 | 18 | public LoadCircularImageTask(ImageView imageView) { 19 | super(imageView); 20 | } 21 | 22 | @Override 23 | protected Drawable getDrawable(Bitmap bitmap) { 24 | if (cropCircle) { 25 | RoundedBitmapDrawable roundedBitmapDrawable = RoundedBitmapDrawableFactory.create(imageView.getResources(), bitmap); 26 | roundedBitmapDrawable.setCircular(true); 27 | roundedBitmapDrawable.setAntiAlias(true); 28 | return roundedBitmapDrawable; 29 | } else { 30 | return super.getDrawable(bitmap); 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/contemporary/java/com/github/yeriomin/yalpstore/view/InstalledAppsMainButtonAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.support.design.widget.FloatingActionButton; 23 | import android.view.View; 24 | 25 | import com.github.yeriomin.yalpstore.R; 26 | 27 | public class InstalledAppsMainButtonAdapter extends InstalledAppsMainButtonAdapterAbstract { 28 | 29 | public InstalledAppsMainButtonAdapter(View button) { 30 | super(button); 31 | } 32 | 33 | @Override 34 | public InstalledAppsMainButtonAdapterAbstract init() { 35 | ((FloatingActionButton) button).setImageResource(R.drawable.ic_refresh); 36 | return super.init(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/contemporary/java/com/github/yeriomin/yalpstore/view/UpdatableAppsButtonAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.support.design.widget.FloatingActionButton; 23 | import android.view.View; 24 | 25 | import com.github.yeriomin.yalpstore.R; 26 | 27 | public class UpdatableAppsButtonAdapter extends UpdatableAppsButtonAdapterAbstract { 28 | 29 | public UpdatableAppsButtonAdapter(View button) { 30 | super(button); 31 | } 32 | 33 | @Override 34 | public UpdatableAppsButtonAdapterAbstract setReady() { 35 | ((FloatingActionButton) button).setImageResource(R.drawable.ic_download); 36 | return super.setReady(); 37 | } 38 | 39 | @Override 40 | public UpdatableAppsButtonAdapterAbstract setUpdating() { 41 | ((FloatingActionButton) button).setImageResource(R.drawable.ic_cancel); 42 | return super.setUpdating(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/contemporary/res/drawable-v21/ic_menu.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/contemporary/res/drawable/button_border.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <shape 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | android:shape="rectangle"> 5 | <corners android:radius="3dp" /> 6 | <stroke android:width="1dp" android:color="@color/color_accent" /> 7 | <solid android:color="@android:color/transparent" /> 8 | </shape> -------------------------------------------------------------------------------- /app/src/contemporary/res/drawable/ic_menu.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="@color/gray50" 8 | android:pathData="M3,18h18v-2L3,16v2zM3,13h18v-2L3,11v2zM3,6v2h18L21,6L3,6z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/contemporary/res/layout/applist_main_button.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <ViewStub 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | android:layout_width="wrap_content" 5 | android:layout_height="wrap_content" /> -------------------------------------------------------------------------------- /app/src/contemporary/res/layout/details_permissions.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <com.github.yeriomin.yalpstore.widget.ExpansionPanel 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | xmlns:app="http://schemas.android.com/apk/res-auto" 5 | app:headerText="@string/details_permissions" 6 | android:id="@+id/permissions_panel" 7 | android:layout_width="match_parent" 8 | android:layout_height="wrap_content" 9 | android:layout_margin="4dp" 10 | android:elevation="2dp" 11 | android:background="?attr/colorDetailsItemBackground"> 12 | 13 | <LinearLayout 14 | android:id="@+id/permissions_container_widgets" 15 | android:layout_width="match_parent" 16 | android:layout_height="wrap_content" 17 | android:orientation="vertical" /> 18 | 19 | <TextView 20 | android:id="@+id/permissions_none" 21 | android:text="@string/no_permissions" 22 | android:layout_width="match_parent" 23 | android:layout_height="wrap_content" 24 | android:visibility="gone" /> 25 | 26 | </com.github.yeriomin.yalpstore.widget.ExpansionPanel> -------------------------------------------------------------------------------- /app/src/contemporary/res/layout/details_screenshots.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <com.github.yeriomin.yalpstore.widget.ExpansionPanel 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | xmlns:app="http://schemas.android.com/apk/res-auto" 5 | app:headerText="@string/details_screenshots" 6 | android:id="@+id/screenshots_panel" 7 | android:layout_width="match_parent" 8 | android:layout_height="wrap_content" 9 | android:layout_margin="4dp" 10 | android:elevation="2dp" 11 | android:background="?attr/colorDetailsItemBackground"> 12 | 13 | <Gallery 14 | android:id="@+id/screenshots_gallery" 15 | android:spacing="10dp" 16 | android:animationDuration="100" 17 | android:layout_width="match_parent" 18 | android:layout_height="wrap_content" /> 19 | 20 | </com.github.yeriomin.yalpstore.widget.ExpansionPanel> -------------------------------------------------------------------------------- /app/src/contemporary/res/layout/preferences_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:orientation="vertical" 4 | android:layout_width="match_parent" 5 | android:layout_height="match_parent"> 6 | 7 | <fragment 8 | android:name="com.github.yeriomin.yalpstore.fragment.preference.PreferenceFragment" 9 | android:id="@+id/preferences_fragment" 10 | android:layout_width="wrap_content" 11 | android:layout_height="wrap_content"/> 12 | 13 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/contemporary/res/layout/search_view_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <android.support.v7.widget.SearchView xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:id="@+id/search_view" 4 | android:layout_width="match_parent" 5 | android:layout_height="wrap_content" /> 6 | -------------------------------------------------------------------------------- /app/src/contemporary/res/layout/suggestion_list_item.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <LinearLayout 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | android:orientation="horizontal" 5 | android:layout_width="fill_parent" 6 | android:layout_height="fill_parent"> 7 | 8 | <ImageView android:id="@+id/icon" 9 | android:layout_width="48dp" 10 | android:layout_height="48dp" 11 | android:gravity="center" 12 | android:layout_margin="5dp" /> 13 | 14 | <TextView android:id="@+id/text" 15 | android:layout_width="wrap_content" 16 | android:layout_height="match_parent" 17 | android:gravity="center_vertical" 18 | android:textAppearance="@android:style/TextAppearance.Medium" 19 | android:layout_margin="5dp" /> 20 | 21 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/contemporary/res/menu/menu_accounts.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <menu xmlns:android="http://schemas.android.com/apk/res/android"> 3 | <item 4 | android:id="@+id/action_accounts" 5 | android:visible="false" 6 | android:title="@string/action_accounts" /> 7 | <item 8 | android:id="@+id/action_new_account" 9 | android:icon="@drawable/ic_add" 10 | android:title="@string/action_new_account" /> 11 | <group 12 | android:id="@+id/group_accounts" /> 13 | <item 14 | android:id="@+id/action_logout" 15 | android:icon="@drawable/ic_logout" 16 | android:visible="false" 17 | android:orderInCategory="100" 18 | android:title="@string/action_logout" /> 19 | </menu> 20 | -------------------------------------------------------------------------------- /app/src/contemporary/res/menu/menu_drawer.xml: -------------------------------------------------------------------------------- 1 | <menu xmlns:android="http://schemas.android.com/apk/res/android"> 2 | <group android:id="@+id/navigation"> 3 | <item 4 | android:id="@+id/action_installed_apps" 5 | android:title="@string/activity_title_updates_and_other_apps" 6 | android:icon="@drawable/ic_apps" /> 7 | <item 8 | android:id="@+id/action_updates" 9 | android:title="@string/action_updates" 10 | android:icon="@drawable/ic_refresh" /> 11 | <item 12 | android:id="@+id/action_categories" 13 | android:title="@string/action_categories" 14 | android:icon="@drawable/ic_categories" /> 15 | <item 16 | android:id="@+id/action_wishlist" 17 | android:title="@string/action_wishlist" 18 | android:icon="@drawable/ic_wishlist_tick" /> 19 | <item 20 | android:id="@+id/action_history" 21 | android:title="@string/action_history" 22 | android:icon="@drawable/ic_events" /> 23 | </group> 24 | <item 25 | android:id="@+id/action_settings" 26 | android:title="@string/action_settings" 27 | android:icon="@drawable/ic_settings" /> 28 | <item 29 | android:id="@+id/action_bug_report" 30 | android:title="@string/action_bug_report" 31 | android:icon="@drawable/ic_bug_report" /> 32 | <item 33 | android:id="@+id/action_about" 34 | android:title="@string/action_about" 35 | android:icon="@drawable/ic_about" /> 36 | </menu> 37 | -------------------------------------------------------------------------------- /app/src/contemporary/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <resources> 3 | <color name="color_accent">#357ec7</color> 4 | <color name="gray50">#7f7f7f</color> 5 | </resources> -------------------------------------------------------------------------------- /app/src/contemporary/res/values/style.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <resources> 3 | <style name="YalpStoreThemeLight" parent="Theme.AppCompat.Light.NoActionBar"> 4 | <item name="colorAccent">@color/color_accent</item> 5 | <item name="colorDetailsItemBackground">?android:colorBackground</item> 6 | <item name="android:dialogTheme">@style/YalpStoreDialogStyleLight</item> 7 | <item name="android:alertDialogTheme">@style/YalpStoreAlertDialogStyleLight</item> 8 | </style> 9 | <style name="YalpStoreDialogStyleLight" parent="Theme.AppCompat.Light.Dialog"> 10 | <item name="colorAccent">@color/color_accent</item> 11 | </style> 12 | <style name="YalpStoreAlertDialogStyleLight" parent="Theme.AppCompat.Light.Dialog.Alert"> 13 | <item name="colorAccent">@color/color_accent</item> 14 | </style> 15 | <style name="YalpStoreThemeDark" parent="Theme.AppCompat.NoActionBar"> 16 | <item name="colorAccent">@color/color_accent</item> 17 | <item name="colorDetailsItemBackground">?android:colorBackground</item> 18 | <item name="android:dialogTheme">@style/YalpStoreDialogStyleDark</item> 19 | <item name="android:alertDialogTheme">@style/YalpStoreAlertDialogStyleDark</item> 20 | </style> 21 | <style name="YalpStoreThemeBlack" parent="YalpStoreThemeDark"> 22 | <item name="colorDetailsItemBackground">@android:color/black</item> 23 | <item name="android:windowBackground">@android:color/black</item> 24 | </style> 25 | <style name="YalpStoreDialogStyleDark" parent="Theme.AppCompat.Dialog"> 26 | <item name="colorAccent">@color/color_accent</item> 27 | </style> 28 | <style name="YalpStoreAlertDialogStyleDark" parent="Theme.AppCompat.Dialog.Alert"> 29 | <item name="colorAccent">@color/color_accent</item> 30 | </style> 31 | </resources> -------------------------------------------------------------------------------- /app/src/legacy/java/com/github/yeriomin/yalpstore/OnAppClickListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.view.View; 23 | import android.widget.AdapterView; 24 | 25 | import com.github.yeriomin.yalpstore.model.App; 26 | 27 | class OnAppClickListener implements AdapterView.OnItemClickListener { 28 | 29 | private AppListActivity activity; 30 | 31 | public OnAppClickListener(AppListActivity activity) { 32 | this.activity = activity; 33 | } 34 | 35 | @Override 36 | public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 37 | App app = activity.getAppByListPosition(position); 38 | if (null == app) { 39 | return; 40 | } 41 | DetailsActivity.app = app; 42 | activity.startActivity(DetailsActivity.getDetailsIntent(activity, DetailsActivity.app.getPackageName())); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/legacy/java/com/github/yeriomin/yalpstore/PreferenceActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.os.Bundle; 23 | 24 | import com.github.yeriomin.yalpstore.fragment.preference.AllPreferences; 25 | 26 | public class PreferenceActivity extends android.preference.PreferenceActivity { 27 | 28 | @Override 29 | public void onCreate(Bundle savedInstanceState) { 30 | new ThemeManager().setTheme(this); 31 | super.onCreate(savedInstanceState); 32 | PreferenceUtil.putStringSet(this, PreferenceUtil.PREFERENCE_UPDATE_LIST, PreferenceUtil.getStringSet(this, PreferenceUtil.PREFERENCE_UPDATE_LIST)); 33 | addPreferencesFromResource(R.xml.settings); 34 | new AllPreferences(this).draw(); 35 | } 36 | 37 | @Override 38 | public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { 39 | if (!YalpStorePermissionManager.isGranted(requestCode, permissions, grantResults)) { 40 | finish(); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /app/src/legacy/java/com/github/yeriomin/yalpstore/SearchActivity.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | public class SearchActivity extends SearchActivityAbstract { 23 | } 24 | -------------------------------------------------------------------------------- /app/src/legacy/java/com/github/yeriomin/yalpstore/fragment/details/Background.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.fragment.details; 21 | 22 | import com.github.yeriomin.yalpstore.DetailsActivity; 23 | import com.github.yeriomin.yalpstore.fragment.Abstract; 24 | import com.github.yeriomin.yalpstore.model.App; 25 | 26 | public class Background extends Abstract { 27 | 28 | public Background(DetailsActivity activity, App app) { 29 | super(activity, app); 30 | } 31 | 32 | @Override 33 | public void draw() { 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/legacy/java/com/github/yeriomin/yalpstore/view/InstalledAppsMainButtonAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.view.View; 23 | import android.widget.Button; 24 | 25 | import com.github.yeriomin.yalpstore.R; 26 | 27 | public class InstalledAppsMainButtonAdapter extends InstalledAppsMainButtonAdapterAbstract { 28 | 29 | public InstalledAppsMainButtonAdapter(View button) { 30 | super(button); 31 | } 32 | 33 | @Override 34 | public InstalledAppsMainButtonAdapterAbstract init() { 35 | ((Button) button).setText(R.string.list_check_updates); 36 | return super.init(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/legacy/java/com/github/yeriomin/yalpstore/view/UpdatableAppsButtonAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.view.View; 23 | import android.widget.Button; 24 | 25 | import com.github.yeriomin.yalpstore.R; 26 | 27 | public class UpdatableAppsButtonAdapter extends UpdatableAppsButtonAdapterAbstract { 28 | 29 | public UpdatableAppsButtonAdapter(View button) { 30 | super(button); 31 | } 32 | 33 | @Override 34 | public UpdatableAppsButtonAdapterAbstract setReady() { 35 | ((Button) button).setText(R.string.list_update_all); 36 | return super.setReady(); 37 | } 38 | 39 | @Override 40 | public UpdatableAppsButtonAdapterAbstract setUpdating() { 41 | ((Button) button).setText(android.R.string.cancel); 42 | return super.setUpdating(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/legacy/res/drawable-v21/ic_accounts.xml: -------------------------------------------------------------------------------- 1 | <!-- 2 | ~ Yalp Store 3 | ~ Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | ~ 5 | ~ This program is free software; you can redistribute it and/or modify 6 | ~ it under the terms of the GNU General Public License as published by 7 | ~ the Free Software Foundation; either version 2 of the License, or 8 | ~ (at your option) any later version. 9 | ~ 10 | ~ This program is distributed in the hope that it will be useful, 11 | ~ but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ~ GNU General Public License for more details. 14 | ~ 15 | ~ You should have received a copy of the GNU General Public License along 16 | ~ with this program; if not, write to the Free Software Foundation, Inc., 17 | ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | --> 19 | 20 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 21 | android:width="24dp" 22 | android:height="24dp" 23 | android:viewportWidth="24.0" 24 | android:viewportHeight="24.0"> 25 | <path 26 | android:fillColor="#FF000000" 27 | android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,5c1.66,0 3,1.34 3,3s-1.34,3 -3,3 -3,-1.34 -3,-3 1.34,-3 3,-3zM12,19.2c-2.5,0 -4.71,-1.28 -6,-3.22 0.03,-1.99 4,-3.08 6,-3.08 1.99,0 5.97,1.09 6,3.08 -1.29,1.94 -3.5,3.22 -6,3.22z"/> 28 | </vector> 29 | -------------------------------------------------------------------------------- /app/src/legacy/res/drawable/ic_accounts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/legacy/res/drawable/ic_accounts.png -------------------------------------------------------------------------------- /app/src/legacy/res/layout/applist_main_button.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <LinearLayout 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | android:layout_width="match_parent" 5 | android:layout_height="wrap_content" 6 | android:orientation="horizontal" > 7 | 8 | <Button 9 | android:id="@+id/main_button" 10 | android:visibility="gone" 11 | android:layout_width="match_parent" 12 | android:layout_height="match_parent" 13 | android:text="@string/list_update_all" /> 14 | 15 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/legacy/res/layout/details_button_bar.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <ViewStub 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | android:layout_width="wrap_content" 5 | android:layout_height="wrap_content" /> -------------------------------------------------------------------------------- /app/src/legacy/res/layout/details_permissions.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <com.github.yeriomin.yalpstore.widget.ExpansionPanel 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | xmlns:app="http://schemas.android.com/apk/res-auto" 5 | app:headerText="@string/details_permissions" 6 | android:id="@+id/permissions_panel" 7 | android:layout_width="match_parent" 8 | android:layout_height="wrap_content" 9 | android:layout_margin="4dp" 10 | android:elevation="2dp" 11 | android:background="?android:colorBackground"> 12 | 13 | <LinearLayout 14 | android:id="@+id/permissions_container_widgets" 15 | android:layout_width="match_parent" 16 | android:layout_height="wrap_content" 17 | android:orientation="vertical" /> 18 | 19 | <TextView 20 | android:id="@+id/permissions_none" 21 | android:text="@string/no_permissions" 22 | android:layout_width="match_parent" 23 | android:layout_height="wrap_content" 24 | android:visibility="gone" /> 25 | 26 | </com.github.yeriomin.yalpstore.widget.ExpansionPanel> -------------------------------------------------------------------------------- /app/src/legacy/res/layout/details_screenshots.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <com.github.yeriomin.yalpstore.widget.ExpansionPanel 3 | xmlns:android="http://schemas.android.com/apk/res/android" 4 | xmlns:app="http://schemas.android.com/apk/res-auto" 5 | app:headerText="@string/details_screenshots" 6 | android:id="@+id/screenshots_panel" 7 | android:layout_width="match_parent" 8 | android:layout_height="wrap_content" 9 | android:layout_margin="4dp" 10 | android:elevation="2dp" 11 | android:background="?android:colorBackground"> 12 | 13 | <Gallery 14 | android:id="@+id/screenshots_gallery" 15 | android:spacing="10dp" 16 | android:animationDuration="100" 17 | android:layout_width="match_parent" 18 | android:layout_height="wrap_content" /> 19 | 20 | </com.github.yeriomin.yalpstore.widget.ExpansionPanel> -------------------------------------------------------------------------------- /app/src/legacy/res/values/donottranslate.xml: -------------------------------------------------------------------------------- 1 | <resources> 2 | <string name="app_name" translatable="false">Yalp Store</string> 3 | </resources> -------------------------------------------------------------------------------- /app/src/legacy/res/xml/searchable.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <searchable xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:label="@string/app_name" 4 | android:searchSuggestAuthority="com.github.yeriomin.yalpstore.YalpStoreSuggestionProvider" 5 | android:searchSuggestIntentAction="android.intent.action.VIEW" 6 | android:hint="@string/search_title" /> -------------------------------------------------------------------------------- /app/src/main/java/android/content/pm/IPackageInstallObserver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015-2016 Dominik Schürmann <dominik@dominikschuermann.de> 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package android.content.pm; 18 | 19 | import android.os.Binder; 20 | import android.os.IBinder; 21 | import android.os.IInterface; 22 | import android.os.Parcel; 23 | import android.os.RemoteException; 24 | 25 | /** 26 | * Just a non-working implementation of this Stub to satisfy compiler! 27 | */ 28 | public interface IPackageInstallObserver extends IInterface { 29 | 30 | abstract class Stub extends Binder implements android.content.pm.IPackageInstallObserver { 31 | 32 | public Stub() { 33 | throw new RuntimeException("Stub!"); 34 | } 35 | 36 | public static android.content.pm.IPackageInstallObserver asInterface(IBinder obj) { 37 | throw new RuntimeException("Stub!"); 38 | } 39 | 40 | public IBinder asBinder() { 41 | throw new RuntimeException("Stub!"); 42 | } 43 | 44 | public boolean onTransact(int code, Parcel data, Parcel reply, int flags) 45 | throws RemoteException { 46 | throw new RuntimeException("Stub!"); 47 | } 48 | } 49 | 50 | void packageInstalled(String packageName, int returnCode) throws RemoteException; 51 | } -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/AppListInstallReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.content.BroadcastReceiver; 23 | import android.content.Context; 24 | import android.content.Intent; 25 | import android.content.IntentFilter; 26 | 27 | import java.lang.ref.WeakReference; 28 | 29 | public class AppListInstallReceiver extends BroadcastReceiver { 30 | 31 | private WeakReference<AppListActivity> activityRef; 32 | 33 | public AppListInstallReceiver(AppListActivity activity) { 34 | super(); 35 | activityRef = new WeakReference<>(activity); 36 | IntentFilter filter = new IntentFilter(); 37 | filter.addAction(GlobalInstallReceiver.ACTION_INSTALL_UI_UPDATE); 38 | activity.registerReceiver(this, filter); 39 | } 40 | 41 | @Override 42 | public void onReceive(Context context, Intent intent) { 43 | activityRef.get().onResume(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/BootReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.content.BroadcastReceiver; 23 | import android.content.Context; 24 | import android.content.Intent; 25 | 26 | public class BootReceiver extends BroadcastReceiver { 27 | 28 | @Override 29 | public void onReceive(Context context, Intent intent) { 30 | if (!Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) { 31 | return; 32 | } 33 | UpdateChecker.enable(context.getApplicationContext(), getUpdateInterval(context)); 34 | } 35 | 36 | static private int getUpdateInterval(Context context) { 37 | return Util.parseInt( 38 | PreferenceUtil.getDefaultSharedPreferences(context).getString( 39 | PreferenceUtil.PREFERENCE_BACKGROUND_UPDATE_INTERVAL, 40 | "-1" 41 | ), 42 | -1 43 | ); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/ConnectivityChangeReceiver.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.content.BroadcastReceiver; 23 | import android.content.Context; 24 | import android.content.Intent; 25 | import android.util.Log; 26 | 27 | import com.github.yeriomin.yalpstore.download.DownloadManager; 28 | 29 | import static android.net.ConnectivityManager.EXTRA_NO_CONNECTIVITY; 30 | 31 | public class ConnectivityChangeReceiver extends BroadcastReceiver { 32 | 33 | @Override 34 | public void onReceive(Context context, Intent intent) { 35 | if (!intent.getBooleanExtra(EXTRA_NO_CONNECTIVITY, false)) { 36 | Log.i(getClass().getSimpleName(), "Resuming downloads"); 37 | DownloadManager.resumeAll(); 38 | } 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/CredentialsEmptyException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import com.github.yeriomin.playstoreapi.AuthException; 23 | 24 | public class CredentialsEmptyException extends AuthException { 25 | 26 | public CredentialsEmptyException() { 27 | super("CredentialsEmptyException"); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/FirstLaunchChecker.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.content.Context; 23 | import android.content.SharedPreferences; 24 | 25 | public class FirstLaunchChecker { 26 | 27 | static private final String FIRST_LOGIN = "FIRST_LOGIN"; 28 | 29 | private SharedPreferences prefs; 30 | 31 | public FirstLaunchChecker(Context context) { 32 | prefs = PreferenceUtil.getDefaultSharedPreferences(context); 33 | } 34 | 35 | public boolean isFirstLogin() { 36 | return prefs.getBoolean(FIRST_LOGIN, true); 37 | } 38 | 39 | public void setLoggedIn() { 40 | prefs.edit() 41 | .putBoolean(FIRST_LOGIN, false) 42 | .commit() 43 | ; 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/NotPurchasedException.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import java.io.IOException; 23 | 24 | public class NotPurchasedException extends IOException { 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/ReviewIterator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.content.Context; 23 | 24 | import com.github.yeriomin.yalpstore.model.Review; 25 | 26 | import java.util.Iterator; 27 | import java.util.List; 28 | 29 | abstract public class ReviewIterator implements Iterator<List<Review>> { 30 | 31 | protected String packageName; 32 | protected Context context; 33 | 34 | protected int page = -1; 35 | 36 | public void setPackageName(String packageName) { 37 | this.packageName = packageName; 38 | } 39 | 40 | public void setContext(Context context) { 41 | this.context = context; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/ScrollEdgeListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.widget.AbsListView; 23 | import android.widget.ListView; 24 | 25 | abstract public class ScrollEdgeListener implements ListView.OnScrollListener { 26 | 27 | private int lastLastitem; 28 | 29 | abstract protected void loadMore(); 30 | 31 | @Override 32 | public void onScrollStateChanged(AbsListView view, int scrollState) {} 33 | 34 | @Override 35 | public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { 36 | int lastItem = firstVisibleItem + visibleItemCount; 37 | boolean loadMore = lastItem >= totalItemCount; 38 | if (totalItemCount > 0 && loadMore && lastLastitem != lastItem) { 39 | lastLastitem = lastItem; 40 | loadMore(); 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/SharedPreferencesTranslator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | import android.content.Context; 23 | import android.content.SharedPreferences; 24 | 25 | import java.util.Locale; 26 | 27 | public class SharedPreferencesTranslator { 28 | 29 | private static final String PREFIX = "translation"; 30 | private SharedPreferences prefs; 31 | 32 | public SharedPreferencesTranslator(Context context) { 33 | this.prefs = context.getSharedPreferences(getClass().getName(), Context.MODE_PRIVATE); 34 | } 35 | 36 | public String getString(String id, Object... params) { 37 | return String.format(prefs.getString(getFullId(id), id), params); 38 | } 39 | 40 | public void putString(String id, String value) { 41 | prefs.edit().putString(getFullId(id), value).commit(); 42 | } 43 | 44 | static private String getFullId(String partId) { 45 | return PREFIX + "_" + Locale.getDefault().getLanguage() + "_" + partId; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/TokenDispenserMirrors.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore; 21 | 22 | public class TokenDispenserMirrors { 23 | 24 | private int n = 0; 25 | 26 | static private String[] mirrors = new String[] { 27 | "https://token-dispenser.herokuapp.com", 28 | "https://token-dispenser-mirror.herokuapp.com", 29 | "http://route-token-dispenser.193b.starter-ca-central-1.openshiftapps.com", 30 | "http://token-dispenser.duckdns.org:8080" 31 | }; 32 | 33 | public void reset() { 34 | n = 0; 35 | } 36 | 37 | public String get() { 38 | if (n >= mirrors.length) { 39 | reset(); 40 | } 41 | return mirrors[n++]; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/bugreport/BugReportPropertiesBuilder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.bugreport; 21 | 22 | import android.content.Context; 23 | 24 | import java.util.Map; 25 | 26 | public class BugReportPropertiesBuilder extends BugReportBuilder { 27 | 28 | public BugReportPropertiesBuilder(Context context) { 29 | super(context); 30 | } 31 | 32 | static protected String buildProperties(Map<String, String> properties) { 33 | StringBuilder stringBuilder = new StringBuilder(); 34 | for (String key: properties.keySet()) { 35 | stringBuilder 36 | .append(key) 37 | .append(" = ") 38 | .append(String.valueOf(properties.get(key))) 39 | .append("\n") 40 | ; 41 | } 42 | return stringBuilder.toString(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/delta/GDiff.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.delta; 21 | 22 | import android.content.Context; 23 | 24 | import com.github.yeriomin.yalpstore.model.App; 25 | 26 | import java.io.IOException; 27 | 28 | public class GDiff extends Patcher { 29 | 30 | public GDiff(Context context, App app) { 31 | super(context, app); 32 | } 33 | 34 | @Override 35 | protected boolean patchSpecific() throws IOException { 36 | new com.nothome.delta.GDiffPatcher().patch(originalApk, patch, destinationApk); 37 | return true; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/delta/PatcherFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.delta; 21 | 22 | import android.content.Context; 23 | 24 | import com.github.yeriomin.playstoreapi.GooglePlayAPI; 25 | import com.github.yeriomin.yalpstore.model.App; 26 | 27 | public class PatcherFactory { 28 | 29 | static public Patcher get(Context context, App app, GooglePlayAPI.PATCH_FORMAT patchFormat) { 30 | switch (patchFormat) { 31 | case GZIPPED_BSDIFF: 32 | return new BSDiff(context, app); 33 | default: 34 | return new GDiff(context, app); 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/download/RequestApk.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.download; 21 | 22 | class RequestApk extends Request { 23 | 24 | public Type getType() { 25 | return Type.APK; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/download/RequestDelta.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.download; 21 | 22 | import com.github.yeriomin.playstoreapi.GooglePlayAPI; 23 | 24 | public class RequestDelta extends Request { 25 | 26 | private byte[] baseHash; 27 | private GooglePlayAPI.PATCH_FORMAT patchFormat; 28 | 29 | public byte[] getBaseHash() { 30 | return baseHash; 31 | } 32 | 33 | public void setBaseHash(byte[] baseHash) { 34 | this.baseHash = baseHash; 35 | } 36 | 37 | public GooglePlayAPI.PATCH_FORMAT getPatchFormat() { 38 | return patchFormat; 39 | } 40 | 41 | public void setPatchFormat(GooglePlayAPI.PATCH_FORMAT patchFormat) { 42 | this.patchFormat = patchFormat; 43 | } 44 | 45 | @Override 46 | public Type getType() { 47 | return Type.DELTA; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/download/RequestObb.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.download; 21 | 22 | public class RequestObb extends Request { 23 | 24 | private boolean main; 25 | private int versionCode; 26 | 27 | public boolean isMain() { 28 | return main; 29 | } 30 | 31 | public void setMain(boolean main) { 32 | this.main = main; 33 | } 34 | 35 | public int getVersionCode() { 36 | return versionCode; 37 | } 38 | 39 | public void setVersionCode(int versionCode) { 40 | this.versionCode = versionCode; 41 | } 42 | 43 | @Override 44 | public Type getType() { 45 | return main ? Type.OBB_MAIN : Type.OBB_PATCH; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/download/RequestSplit.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.download; 21 | 22 | public class RequestSplit extends Request { 23 | 24 | private String name; 25 | 26 | public String getName() { 27 | return name; 28 | } 29 | 30 | public void setName(String name) { 31 | this.name = name; 32 | } 33 | 34 | @Override 35 | public Type getType() { 36 | return Type.SPLIT; 37 | } 38 | 39 | @Override 40 | public String getTypeName() { 41 | return Type.SPLIT + "_" + name; 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/fragment/Abstract.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.fragment; 21 | 22 | import android.widget.TextView; 23 | 24 | import com.github.yeriomin.yalpstore.YalpStoreActivity; 25 | import com.github.yeriomin.yalpstore.model.App; 26 | 27 | public abstract class Abstract { 28 | 29 | protected YalpStoreActivity activity; 30 | protected App app; 31 | 32 | abstract public void draw(); 33 | 34 | public Abstract(YalpStoreActivity activity, App app) { 35 | this.activity = activity; 36 | this.app = app; 37 | } 38 | 39 | protected void setText(int viewId, String text) { 40 | ((TextView) activity.findViewById(viewId)).setText(text); 41 | } 42 | 43 | protected void setText(int viewId, int stringId, Object... text) { 44 | setText(viewId, activity.getString(stringId, text)); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/fragment/preference/Abstract.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.fragment.preference; 21 | 22 | import com.github.yeriomin.yalpstore.PreferenceActivity; 23 | 24 | public abstract class Abstract { 25 | 26 | protected PreferenceActivity activity; 27 | 28 | abstract public void draw(); 29 | 30 | public Abstract(PreferenceActivity activity) { 31 | this.activity = activity; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/fragment/preference/InstallationMethod.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.fragment.preference; 21 | 22 | import android.preference.ListPreference; 23 | import android.preference.Preference; 24 | 25 | import com.github.yeriomin.yalpstore.PreferenceActivity; 26 | 27 | public class InstallationMethod extends Abstract { 28 | 29 | private ListPreference installationMethod; 30 | 31 | public InstallationMethod(PreferenceActivity activity) { 32 | super(activity); 33 | } 34 | 35 | public void setInstallationMethodPreference(ListPreference installationMethod) { 36 | this.installationMethod = installationMethod; 37 | } 38 | 39 | @Override 40 | public void draw() { 41 | Preference.OnPreferenceChangeListener listener = new OnInstallationMethodChangeListener(activity); 42 | listener.onPreferenceChange(installationMethod, installationMethod.getValue()); 43 | installationMethod.setOnPreferenceChangeListener(listener); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/model/Dao.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.model; 21 | 22 | import android.database.sqlite.SQLiteDatabase; 23 | 24 | public class Dao { 25 | 26 | protected SQLiteDatabase db; 27 | 28 | public Dao(SQLiteDatabase db) { 29 | this.db = db; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/model/ImageSource.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.model; 21 | 22 | import android.content.pm.ApplicationInfo; 23 | 24 | public class ImageSource { 25 | 26 | private String url; 27 | private ApplicationInfo applicationInfo; 28 | private boolean fullSize; 29 | 30 | public ImageSource() { 31 | } 32 | 33 | public ImageSource(String url) { 34 | setUrl(url); 35 | } 36 | 37 | public void setUrl(String url) { 38 | this.url = url; 39 | } 40 | 41 | public void setApplicationInfo(ApplicationInfo applicationInfo) { 42 | this.applicationInfo = applicationInfo; 43 | } 44 | 45 | public String getUrl() { 46 | return url; 47 | } 48 | 49 | public ApplicationInfo getApplicationInfo() { 50 | return applicationInfo; 51 | } 52 | 53 | public boolean isFullSize() { 54 | return fullSize; 55 | } 56 | 57 | public ImageSource setFullSize(boolean fullSize) { 58 | this.fullSize = fullSize; 59 | return this; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/model/Rating.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.model; 21 | 22 | public class Rating { 23 | 24 | private float average; 25 | private int[] stars = new int[5]; 26 | 27 | public float getAverage() { 28 | return average; 29 | } 30 | 31 | public void setAverage(float average) { 32 | this.average = average; 33 | } 34 | 35 | public int getStars(int starNum) { 36 | return stars[starNum - 1]; 37 | } 38 | 39 | public void setStars(int starNum, int ratings) { 40 | stars[starNum - 1] = ratings; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/model/ReviewBuilder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.model; 21 | 22 | import com.github.yeriomin.playstoreapi.GooglePlayAPI; 23 | import com.github.yeriomin.playstoreapi.Image; 24 | 25 | public class ReviewBuilder { 26 | 27 | public static Review build(com.github.yeriomin.playstoreapi.Review reviewProto) { 28 | Review review = new Review(); 29 | review.setComment(reviewProto.getComment()); 30 | review.setTitle(reviewProto.getTitle()); 31 | review.setRating(reviewProto.getStarRating()); 32 | review.setUserName(reviewProto.getUserProfile().getName()); 33 | for (Image image: reviewProto.getUserProfile().getImageList()) { 34 | if (image.getImageType() == GooglePlayAPI.IMAGE_TYPE_APP_ICON) { 35 | review.setUserPhotoUrl(image.getImageUrl()); 36 | } 37 | } 38 | review.setGooglePlusUrl(reviewProto.getUserProfile().getGooglePlusUrl()); 39 | return review; 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/notification/CancelDownloadReceiver.java: -------------------------------------------------------------------------------- 1 | package com.github.yeriomin.yalpstore.notification; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.text.TextUtils; 6 | 7 | import com.github.yeriomin.yalpstore.PackageSpecificReceiver; 8 | import com.github.yeriomin.yalpstore.download.DownloadManager; 9 | 10 | public class CancelDownloadReceiver extends PackageSpecificReceiver { 11 | 12 | public static final String ACTION_CANCEL_DOWNLOAD = "ACTION_CANCEL_DOWNLOAD"; 13 | 14 | @Override 15 | public void onReceive(Context context, Intent intent) { 16 | super.onReceive(context, intent); 17 | if (TextUtils.isEmpty(packageName)) { 18 | return; 19 | } 20 | new DownloadManager(context).cancel(packageName); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/notification/NotificationBuilderIcs.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.notification; 21 | 22 | import android.annotation.TargetApi; 23 | import android.content.Context; 24 | import android.os.Build; 25 | 26 | @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) 27 | class NotificationBuilderIcs extends NotificationBuilderHoneycomb { 28 | 29 | @Override 30 | public NotificationBuilder setProgress(int max, int progress) { 31 | super.setProgress(max, progress); 32 | builder.setProgress(max, progress, false); 33 | return this; 34 | } 35 | 36 | public NotificationBuilderIcs(Context context) { 37 | super(context); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/notification/NotificationBuilderJellybean.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.notification; 21 | 22 | import android.annotation.TargetApi; 23 | import android.app.PendingIntent; 24 | import android.content.Context; 25 | import android.os.Build; 26 | 27 | @TargetApi(Build.VERSION_CODES.JELLY_BEAN) 28 | class NotificationBuilderJellybean extends NotificationBuilderIcs { 29 | 30 | @Override 31 | public NotificationBuilder addAction(int iconId, int stringId, PendingIntent pendingIntent) { 32 | builder.addAction(iconId, context.getString(stringId), pendingIntent); 33 | return this; 34 | } 35 | 36 | public NotificationBuilderJellybean(Context context) { 37 | super(context); 38 | } 39 | 40 | @Override 41 | public NotificationBuilder setTitle(String title) { 42 | builder.setPriority(title.hashCode()); 43 | return super.setTitle(title); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/notification/NotificationBuilderKitkatWatch.java: -------------------------------------------------------------------------------- 1 | package com.github.yeriomin.yalpstore.notification; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.Context; 5 | import android.os.Build; 6 | 7 | @TargetApi(Build.VERSION_CODES.KITKAT_WATCH) 8 | class NotificationBuilderKitkatWatch extends NotificationBuilderJellybean { 9 | 10 | public NotificationBuilderKitkatWatch(Context context) { 11 | super(context); 12 | } 13 | 14 | @Override 15 | public NotificationBuilder setTitle(String title) { 16 | builder.setSortKey(title); 17 | return super.setTitle(title); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/notification/SignatureCheckReceiver.java: -------------------------------------------------------------------------------- 1 | package com.github.yeriomin.yalpstore.notification; 2 | 3 | import android.content.Context; 4 | import android.content.Intent; 5 | import android.text.TextUtils; 6 | import android.util.Log; 7 | 8 | import com.github.yeriomin.yalpstore.PackageSpecificReceiver; 9 | import com.github.yeriomin.yalpstore.download.DownloadManager; 10 | import com.github.yeriomin.yalpstore.install.InstallerDefault; 11 | import com.github.yeriomin.yalpstore.task.InstallTask; 12 | 13 | public class SignatureCheckReceiver extends PackageSpecificReceiver { 14 | 15 | static public final String ACTION_CHECK_APK = "ACTION_CHECK_APK"; 16 | 17 | @Override 18 | public void onReceive(Context context, Intent intent) { 19 | super.onReceive(context, intent); 20 | if (TextUtils.isEmpty(packageName)) { 21 | return; 22 | } 23 | Log.i(getClass().getSimpleName(), "Launching installer for " + packageName); 24 | InstallerDefault installerDefault = new InstallerDefault(context); 25 | installerDefault.setBackground(false); 26 | new InstallTask(installerDefault, DownloadManager.getApp(packageName)).execute(); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/selfupdate/UpdaterFactory.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.selfupdate; 21 | 22 | import android.content.Context; 23 | 24 | public class UpdaterFactory { 25 | 26 | static public Updater get(Context context) { 27 | return Signature.isFdroid(context) ? new UpdaterFdroid(context) : new UpdaterGithub(context); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/selfupdate/UpdaterFdroid.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.selfupdate; 21 | 22 | import android.content.Context; 23 | 24 | class UpdaterFdroid extends Updater { 25 | 26 | public UpdaterFdroid(Context context) { 27 | super(context); 28 | } 29 | 30 | @Override 31 | public String getUrlString(int versionCode) { 32 | return "https://f-droid.org/repo/com.github.yeriomin.yalpstore_" + versionCode + ".apk"; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/selfupdate/UpdaterGithub.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.selfupdate; 21 | 22 | import android.content.Context; 23 | 24 | class UpdaterGithub extends Updater { 25 | 26 | public UpdaterGithub(Context context) { 27 | super(context); 28 | } 29 | 30 | @Override 31 | public String getUrlString(int versionCode) { 32 | return "https://github.com/yeriomin/YalpStore/releases/download/0." + versionCode + "/com.github.yeriomin.yalpstore_" + versionCode + ".apk"; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/BitmapCacheCleanupTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.content.Context; 23 | 24 | import com.github.yeriomin.yalpstore.BitmapManager; 25 | 26 | import java.io.File; 27 | 28 | public class BitmapCacheCleanupTask extends CleanupTask { 29 | 30 | public BitmapCacheCleanupTask(Context context) { 31 | super(context); 32 | } 33 | 34 | @Override 35 | protected boolean shouldDelete(File file) { 36 | return file.getName().endsWith(".png") 37 | && file.lastModified() + BitmapManager.VALID_MILLIS < System.currentTimeMillis() 38 | ; 39 | } 40 | 41 | @Override 42 | protected File[] getFiles() { 43 | return contextRef.get().getCacheDir().listFiles(); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/CleanupTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.content.Context; 23 | 24 | import java.io.File; 25 | import java.lang.ref.WeakReference; 26 | 27 | abstract public class CleanupTask extends LowCpuIntensityTask<Void, Void, Void> { 28 | 29 | protected WeakReference<Context> contextRef; 30 | 31 | public CleanupTask(Context context) { 32 | this.contextRef = new WeakReference<>(context); 33 | } 34 | 35 | abstract protected boolean shouldDelete(File file); 36 | abstract protected File[] getFiles(); 37 | 38 | @Override 39 | protected Void doInBackground(Void... voids) { 40 | if (null == contextRef.get()) { 41 | return null; 42 | } 43 | File[] files = getFiles(); 44 | if (null == files) { 45 | return null; 46 | } 47 | for (File file: files) { 48 | if (shouldDelete(file)) { 49 | file.delete(); 50 | } 51 | } 52 | return null; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/ConvertToNormalTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.app.Activity; 23 | 24 | import com.github.yeriomin.yalpstore.model.App; 25 | 26 | import java.util.ArrayList; 27 | import java.util.List; 28 | 29 | public class ConvertToNormalTask extends SystemRemountTask { 30 | 31 | public ConvertToNormalTask(Activity activity, App app) { 32 | super(activity, app); 33 | } 34 | 35 | @Override 36 | protected List<String> getCommands() { 37 | List<String> commands = new ArrayList<>(); 38 | String from = app.getPackageInfo().applicationInfo.sourceDir; 39 | commands.add(getBusyboxCommand("mv " + from + " /data/app")); 40 | return commands; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/InstallTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.content.Context; 23 | import android.os.AsyncTask; 24 | 25 | import com.github.yeriomin.yalpstore.install.InstallerAbstract; 26 | import com.github.yeriomin.yalpstore.install.InstallerFactory; 27 | import com.github.yeriomin.yalpstore.model.App; 28 | 29 | public class InstallTask extends AsyncTask<Void, Void, Void> { 30 | 31 | private App app; 32 | private InstallerAbstract installer; 33 | 34 | public InstallTask(Context context, App app) { 35 | this(InstallerFactory.get(context), app); 36 | } 37 | 38 | public InstallTask(InstallerAbstract installer, App app) { 39 | this.installer = installer; 40 | this.app = app; 41 | } 42 | 43 | @Override 44 | protected Void doInBackground(Void... voids) { 45 | installer.verifyAndInstall(app); 46 | return null; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/OldApkCleanupTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.content.Context; 23 | 24 | import java.io.File; 25 | 26 | public class OldApkCleanupTask extends CleanupTask { 27 | 28 | static public final long VALID_MILLIS = 1000*60*60*24; 29 | 30 | private boolean deleteAll; 31 | 32 | public void setDeleteAll(boolean deleteAll) { 33 | this.deleteAll = deleteAll; 34 | } 35 | 36 | public OldApkCleanupTask(Context context) { 37 | super(context); 38 | } 39 | 40 | @Override 41 | protected boolean shouldDelete(File file) { 42 | return file.getName().endsWith(".apk") 43 | && (deleteAll || file.lastModified() + VALID_MILLIS < System.currentTimeMillis()) 44 | ; 45 | } 46 | 47 | @Override 48 | protected File[] getFiles() { 49 | return contextRef.get().getFilesDir().listFiles(); 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/RebootTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.os.AsyncTask; 23 | 24 | import eu.chainfire.libsuperuser.Shell; 25 | 26 | public class RebootTask extends AsyncTask<Void, Void, Void> { 27 | 28 | @Override 29 | protected Void doInBackground(Void... params) { 30 | Shell.SU.run("reboot"); 31 | return null; 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/UninstallSystemAppTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task; 21 | 22 | import android.app.Activity; 23 | 24 | import com.github.yeriomin.yalpstore.model.App; 25 | 26 | import java.util.ArrayList; 27 | import java.util.List; 28 | 29 | public class UninstallSystemAppTask extends SystemRemountTask { 30 | 31 | public UninstallSystemAppTask(Activity activity, App app) { 32 | super(activity, app); 33 | } 34 | 35 | @Override 36 | protected List<String> getCommands() { 37 | List<String> commands = new ArrayList<>(); 38 | String from = app.getPackageInfo().applicationInfo.sourceDir; 39 | commands.add("am force-stop " + app.getPackageName()); 40 | commands.add(getBusyboxCommand("rm -rf " + from)); 41 | return commands; 42 | } 43 | 44 | @Override 45 | protected void onPostExecute(List<String> output) { 46 | super.onPostExecute(output); 47 | app.setInstalled(false); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/AppProvidedCredentialsTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import android.app.Activity; 23 | 24 | import com.github.yeriomin.yalpstore.view.CredentialsDialogBuilder; 25 | import com.github.yeriomin.yalpstore.view.LoginDialogBuilder; 26 | 27 | import java.io.IOException; 28 | 29 | public abstract class AppProvidedCredentialsTask extends CheckCredentialsTask { 30 | 31 | abstract protected void payload() throws IOException; 32 | 33 | @Override 34 | protected CredentialsDialogBuilder getDialogBuilder() { 35 | return new LoginDialogBuilder((Activity) context); 36 | } 37 | 38 | @Override 39 | protected Void doInBackground(String[] params) { 40 | try { 41 | payload(); 42 | } catch (IOException e) { 43 | exception = e; 44 | } 45 | return null; 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/BackgroundCategoryTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import android.os.Build; 23 | 24 | import com.github.yeriomin.yalpstore.YalpStoreActivity; 25 | 26 | public class BackgroundCategoryTask extends CategoryTask { 27 | 28 | @Override 29 | protected void fill() { 30 | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB && context instanceof YalpStoreActivity) { 31 | ((YalpStoreActivity) context).invalidateOptionsMenu(); 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/BackgroundPurchaseTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import com.github.yeriomin.playstoreapi.AndroidAppDeliveryData; 23 | import com.github.yeriomin.yalpstore.DetailsActivity; 24 | import com.github.yeriomin.yalpstore.R; 25 | import com.github.yeriomin.yalpstore.notification.NotificationManagerWrapper; 26 | 27 | class BackgroundPurchaseTask extends PurchaseTask { 28 | 29 | @Override 30 | protected void onPostExecute(AndroidAppDeliveryData deliveryData) { 31 | super.onPostExecute(deliveryData); 32 | if (!success()) { 33 | new NotificationManagerWrapper(context).show( 34 | app.getPackageName(), 35 | DetailsActivity.getDetailsIntent(context, app.getPackageName()), 36 | app.getDisplayName(), 37 | context.getString(R.string.error_could_not_download) 38 | ); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/BetaToggleTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import com.github.yeriomin.playstoreapi.GooglePlayAPI; 23 | import com.github.yeriomin.yalpstore.model.App; 24 | 25 | import java.io.IOException; 26 | 27 | public class BetaToggleTask extends PlayStorePayloadTask<Void> { 28 | 29 | private App app; 30 | 31 | public BetaToggleTask(App app) { 32 | this.app = app; 33 | } 34 | 35 | @Override 36 | protected Void getResult(GooglePlayAPI api, String... arguments) throws IOException { 37 | api.testingProgram(app.getPackageName(), !app.isTestingProgramOptedIn()); 38 | return null; 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/CloneableTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | public interface CloneableTask { 23 | 24 | CloneableTask clone(); 25 | } 26 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/DependencyTranslationTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import com.github.yeriomin.playstoreapi.GooglePlayAPI; 23 | import com.github.yeriomin.yalpstore.model.App; 24 | 25 | import java.io.IOException; 26 | import java.util.HashMap; 27 | import java.util.List; 28 | import java.util.Map; 29 | 30 | public class DependencyTranslationTask extends RemoteAppListTask { 31 | 32 | protected Map<String, String> translated = new HashMap<>(); 33 | 34 | @Override 35 | protected List<App> getResult(GooglePlayAPI api, String... packageNames) throws IOException { 36 | List<App> result = super.getResult(api, packageNames); 37 | for (App app: result) { 38 | translated.put(app.getPackageName(), app.getDisplayName()); 39 | } 40 | return result; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/DetailsCategoryTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import com.github.yeriomin.yalpstore.widget.Badge; 23 | 24 | import java.lang.ref.WeakReference; 25 | 26 | public class DetailsCategoryTask extends CategoryTask { 27 | 28 | private String categoryId; 29 | private WeakReference<Badge> categoryViewRef = new WeakReference<>(null); 30 | 31 | public void setCategoryId(String categoryId) { 32 | this.categoryId = categoryId; 33 | } 34 | 35 | public void setCategoryView(Badge categoryView) { 36 | this.categoryViewRef = new WeakReference<>(categoryView); 37 | } 38 | 39 | @Override 40 | protected void fill() { 41 | Badge categoryView = categoryViewRef.get(); 42 | if (null != categoryView) { 43 | categoryView.setLabel(manager.getCategoryName(categoryId)); 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/LoginTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import com.github.yeriomin.yalpstore.PlayStoreApiAuthenticator; 23 | 24 | import java.io.IOException; 25 | 26 | public class LoginTask extends AppProvidedCredentialsTask { 27 | 28 | @Override 29 | protected void payload() throws IOException { 30 | new PlayStoreApiAuthenticator(context).login(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/task/playstore/RefreshTokenTask.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.task.playstore; 21 | 22 | import com.github.yeriomin.yalpstore.PlayStoreApiAuthenticator; 23 | 24 | import java.io.IOException; 25 | 26 | public class RefreshTokenTask extends AppProvidedCredentialsTask { 27 | 28 | @Override 29 | public void setCaller(PlayStoreTask caller) { 30 | super.setCaller(caller); 31 | setProgressIndicator(caller.getProgressIndicator()); 32 | } 33 | 34 | @Override 35 | protected void payload() throws IOException { 36 | new PlayStoreApiAuthenticator(context).refreshToken(); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/ButtonAdapter.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.view.View; 23 | 24 | public abstract class ButtonAdapter { 25 | 26 | protected View button; 27 | 28 | public ButtonAdapter(View button) { 29 | this.button = button; 30 | } 31 | 32 | public ButtonAdapter show() { 33 | button.setVisibility(View.VISIBLE); 34 | return this; 35 | } 36 | 37 | public ButtonAdapter hide() { 38 | button.setVisibility(View.GONE); 39 | return this; 40 | } 41 | 42 | public ButtonAdapter enable() { 43 | button.setEnabled(true); 44 | return this; 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/CredentialsDialogBuilder.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.app.Activity; 23 | 24 | import com.github.yeriomin.yalpstore.task.playstore.PlayStoreTask; 25 | 26 | abstract public class CredentialsDialogBuilder extends DialogWrapper { 27 | 28 | protected PlayStoreTask caller; 29 | 30 | public CredentialsDialogBuilder(Activity activity) { 31 | super(activity); 32 | } 33 | 34 | public void setCaller(PlayStoreTask caller) { 35 | this.caller = caller; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/HttpTaskOnClickListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.view.View; 23 | 24 | import com.github.yeriomin.yalpstore.ContextUtil; 25 | import com.github.yeriomin.yalpstore.NetworkUtil; 26 | import com.github.yeriomin.yalpstore.R; 27 | import com.github.yeriomin.yalpstore.task.HttpTask; 28 | 29 | public class HttpTaskOnClickListener implements View.OnClickListener { 30 | 31 | private HttpTask task; 32 | 33 | public HttpTaskOnClickListener(HttpTask task) { 34 | this.task = task; 35 | } 36 | 37 | @Override 38 | public void onClick(View v) { 39 | if (NetworkUtil.isNetworkAvailable(v.getContext())) { 40 | task.executeOnExecutorIfPossible(); 41 | } else { 42 | ContextUtil.toast(v.getContext(), R.string.error_no_network); 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/InstalledAppsMainButtonAdapterAbstract.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.content.Intent; 23 | import android.view.View; 24 | 25 | import com.github.yeriomin.yalpstore.UpdatableAppsActivity; 26 | 27 | public class InstalledAppsMainButtonAdapterAbstract extends ButtonAdapter { 28 | 29 | public InstalledAppsMainButtonAdapterAbstract(final View button) { 30 | super(button); 31 | } 32 | 33 | public InstalledAppsMainButtonAdapterAbstract init() { 34 | enable(); 35 | show(); 36 | button.setOnClickListener(new View.OnClickListener() { 37 | @Override 38 | public void onClick(View view) { 39 | button.getContext().startActivity(new Intent(button.getContext(), UpdatableAppsActivity.class)); 40 | } 41 | }); 42 | return this; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/ProgressIndicator.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.view.View; 23 | 24 | import com.github.yeriomin.yalpstore.R; 25 | 26 | public class ProgressIndicator extends ListItem { 27 | 28 | @Override 29 | public void draw() { 30 | view.findViewById(R.id.more).setVisibility(View.GONE); 31 | view.findViewById(R.id.app).setVisibility(View.GONE); 32 | view.findViewById(R.id.progress).setVisibility(View.VISIBLE); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/UpdatableAppBadge.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.content.Context; 23 | import android.text.TextUtils; 24 | 25 | import com.github.yeriomin.yalpstore.R; 26 | 27 | public class UpdatableAppBadge extends AppBadge { 28 | 29 | @Override 30 | public void draw() { 31 | if (null == view) { 32 | return; 33 | } 34 | line2.clear(); 35 | line3.clear(); 36 | Context c = view.getContext(); 37 | String updated = app.getUpdated(); 38 | if (!TextUtils.isEmpty(updated)) { 39 | line2.add(c.getString(R.string.list_line_2_updatable, updated)); 40 | } 41 | if (app.isSystem()) { 42 | line3.add(c.getString(R.string.list_app_system)); 43 | } 44 | super.draw(); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/java/com/github/yeriomin/yalpstore/view/UriOnClickListener.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Yalp Store 3 | * Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | * 5 | * This program is free software; you can redistribute it and/or modify 6 | * it under the terms of the GNU General Public License as published by 7 | * the Free Software Foundation; either version 2 of the License, or 8 | * (at your option) any later version. 9 | * 10 | * This program is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License along 16 | * with this program; if not, write to the Free Software Foundation, Inc., 17 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | */ 19 | 20 | package com.github.yeriomin.yalpstore.view; 21 | 22 | import android.content.ActivityNotFoundException; 23 | import android.content.Context; 24 | import android.content.Intent; 25 | import android.net.Uri; 26 | import android.util.Log; 27 | 28 | public class UriOnClickListener extends IntentOnClickListener { 29 | 30 | private String uriString; 31 | 32 | public UriOnClickListener(Context context, String uriString) { 33 | super(context); 34 | this.uriString = uriString; 35 | } 36 | 37 | @Override 38 | protected Intent buildIntent() { 39 | return new Intent(Intent.ACTION_VIEW, Uri.parse(uriString)); 40 | } 41 | 42 | @Override 43 | protected void onActivityNotFound(ActivityNotFoundException e) { 44 | Log.e(getClass().getSimpleName(), "Could not find activity for uri " + uriString); 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_about.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M11,17h2v-6h-2v6zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM12,20c-4.41,0 -8,-3.59 -8,-8s3.59,-8 8,-8 8,3.59 8,8 -3.59,8 -8,8zM11,9h2L13,7h-2v2z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_add.xml: -------------------------------------------------------------------------------- 1 | <!-- 2 | ~ Yalp Store 3 | ~ Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | ~ 5 | ~ This program is free software; you can redistribute it and/or modify 6 | ~ it under the terms of the GNU General Public License as published by 7 | ~ the Free Software Foundation; either version 2 of the License, or 8 | ~ (at your option) any later version. 9 | ~ 10 | ~ This program is distributed in the hope that it will be useful, 11 | ~ but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ~ GNU General Public License for more details. 14 | ~ 15 | ~ You should have received a copy of the GNU General Public License along 16 | ~ with this program; if not, write to the Free Software Foundation, Inc., 17 | ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | --> 19 | 20 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 21 | android:width="24dp" 22 | android:height="24dp" 23 | android:viewportWidth="24.0" 24 | android:viewportHeight="24.0"> 25 | <path 26 | android:fillColor="?android:textColorSecondary" 27 | android:pathData="M19,13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"/> 28 | </vector> 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_apps.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M4,8h4L8,4L4,4v4zM10,20h4v-4h-4v4zM4,20h4v-4L4,16v4zM4,14h4v-4L4,10v4zM10,14h4v-4h-4v4zM16,4v4h4L20,4h-4zM10,8h4L14,4h-4v4zM16,14h4v-4h-4v4zM16,20h4v-4h-4v4z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_arrow_drop_down.xml: -------------------------------------------------------------------------------- 1 | <!-- 2 | ~ Yalp Store 3 | ~ Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | ~ 5 | ~ This program is free software; you can redistribute it and/or modify 6 | ~ it under the terms of the GNU General Public License as published by 7 | ~ the Free Software Foundation; either version 2 of the License, or 8 | ~ (at your option) any later version. 9 | ~ 10 | ~ This program is distributed in the hope that it will be useful, 11 | ~ but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ~ GNU General Public License for more details. 14 | ~ 15 | ~ You should have received a copy of the GNU General Public License along 16 | ~ with this program; if not, write to the Free Software Foundation, Inc., 17 | ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | --> 19 | 20 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 21 | android:width="24dp" 22 | android:height="24dp" 23 | android:viewportWidth="24.0" 24 | android:viewportHeight="24.0"> 25 | <path 26 | android:fillColor="?android:textColorSecondary" 27 | android:pathData="M7,10l5,5 5,-5z"/> 28 | </vector> 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_bug_report.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_cancel.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_categories.xml: -------------------------------------------------------------------------------- 1 | <!-- 2 | ~ Yalp Store 3 | ~ Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | ~ 5 | ~ This program is free software; you can redistribute it and/or modify 6 | ~ it under the terms of the GNU General Public License as published by 7 | ~ the Free Software Foundation; either version 2 of the License, or 8 | ~ (at your option) any later version. 9 | ~ 10 | ~ This program is distributed in the hope that it will be useful, 11 | ~ but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ~ GNU General Public License for more details. 14 | ~ 15 | ~ You should have received a copy of the GNU General Public License along 16 | ~ with this program; if not, write to the Free Software Foundation, Inc., 17 | ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | --> 19 | 20 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 21 | android:width="24dp" 22 | android:height="24dp" 23 | android:viewportWidth="24" 24 | android:viewportHeight="24"> 25 | <path 26 | android:pathData="M12,2l-5.5,9h11z" 27 | android:fillColor="?android:colorForeground"/> 28 | <path 29 | android:pathData="M17.5,17.5m-4.5,0a4.5,4.5 0,1 1,9 0a4.5,4.5 0,1 1,-9 0" 30 | android:fillColor="?android:colorForeground"/> 31 | <path 32 | android:pathData="M3,13.5h8v8H3z" 33 | android:fillColor="?android:colorForeground"/> 34 | </vector> 35 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_check.xml: -------------------------------------------------------------------------------- 1 | <!-- 2 | ~ Yalp Store 3 | ~ Copyright (C) 2018 Sergey Yeriomin <yeriomin@gmail.com> 4 | ~ 5 | ~ This program is free software; you can redistribute it and/or modify 6 | ~ it under the terms of the GNU General Public License as published by 7 | ~ the Free Software Foundation; either version 2 of the License, or 8 | ~ (at your option) any later version. 9 | ~ 10 | ~ This program is distributed in the hope that it will be useful, 11 | ~ but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | ~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | ~ GNU General Public License for more details. 14 | ~ 15 | ~ You should have received a copy of the GNU General Public License along 16 | ~ with this program; if not, write to the Free Software Foundation, Inc., 17 | ~ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 18 | --> 19 | 20 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 21 | android:width="24dp" 22 | android:height="24dp" 23 | android:viewportWidth="24.0" 24 | android:viewportHeight="24.0"> 25 | <path 26 | android:fillColor="?android:textColorSecondary" 27 | android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"/> 28 | </vector> 29 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_chevron_left.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="32dp" 3 | android:height="32dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M15.41,7.41L14,6l-6,6 6,6 1.41,-1.41L10.83,12z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_chevron_right.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="32dp" 3 | android:height="32dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M10,6L8.59,7.41 13.17,12l-4.58,4.59L10,18l6,-6z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_circle.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval"> 3 | <solid android:color="?android:colorAccent"/> 4 | <size android:width="64dp" android:height="64dp"/> 5 | </shape> -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_delete.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M6,19c0,1.1 0.9,2 2,2h8c1.1,0 2,-0.9 2,-2V7H6v12zM19,4h-3.5l-1,-1h-5l-1,1H5v2h14V4z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_download.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="#FFFFFFFF" 8 | android:pathData="M19,9h-4V3H9v6H5l7,7 7,-7zM5,18v2h14v-2H5z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_edit.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M3,17.25V21h3.75L17.81,9.94l-3.75,-3.75L3,17.25zM20.71,7.04c0.39,-0.39 0.39,-1.02 0,-1.41l-2.34,-2.34c-0.39,-0.39 -1.02,-0.39 -1.41,0l-1.83,1.83 3.75,3.75 1.83,-1.83z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_events.xml: -------------------------------------------------------------------------------- 1 | <vector android:height="24dp" android:tint="?android:colorForeground" 2 | android:viewportHeight="24.0" android:viewportWidth="24.0" 3 | android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 4 | <path android:fillColor="?android:colorForeground" android:pathData="M17,10L7,10v2h10v-2zM19,3h-1L18,1h-2v2L8,3L8,1L6,1v2L5,3c-1.11,0 -1.99,0.9 -1.99,2L3,19c0,1.1 0.89,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM19,19L5,19L5,8h14v11zM14,14L7,14v2h7v-2z"/> 5 | </vector> 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_expand_less.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="32dp" 3 | android:height="32dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M12,8l-6,6 1.41,1.41L12,10.83l4.59,4.58L18,14z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_expand_more.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="32dp" 3 | android:height="32dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M16.59,8.59L12,13.17 7.41,8.59 6,10l6,6 6,-6z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_filter.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M10,18h4v-2h-4v2zM3,6v2h18L21,6L3,6zM6,13h12v-2L6,11v2z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_google_play.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:pathData="M3,20.5V3.5C3,2.91 3.34,2.39 3.84,2.15L13.69,12L3.84,21.85C3.34,21.6 3,21.09 3,20.5M16.81,15.12L6.05,21.34L14.54,12.85L16.81,15.12M20.16,10.81C20.5,11.08 20.75,11.5 20.75,12C20.75,12.5 20.53,12.9 20.18,13.18L17.89,14.5L15.39,12L17.89,9.5L20.16,10.81M6.05,2.66L16.81,8.88L14.54,11.15L6.05,2.66Z" 8 | android:fillColor="?android:textColorSecondary"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_instant_app.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24" 5 | android:viewportHeight="24"> 6 | <path 7 | android:pathData="M13.1397,1.1315 L5.4923,15.3277h5.3683v7.5409L18.5077,8.6725h-5.368z" 8 | android:strokeWidth="0.13417962" 9 | android:fillColor="?android:textColorSecondary" 10 | android:fillType="evenOdd"/> 11 | </vector> 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_link.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M3.9,12c0,-1.71 1.39,-3.1 3.1,-3.1h4L11,7L7,7c-2.76,0 -5,2.24 -5,5s2.24,5 5,5h4v-1.9L7,15.1c-1.71,0 -3.1,-1.39 -3.1,-3.1zM8,13h8v-2L8,11v2zM17,7h-4v1.9h4c1.71,0 3.1,1.39 3.1,3.1s-1.39,3.1 -3.1,3.1h-4L13,17h4c2.76,0 5,-2.24 5,-5s-2.24,-5 -5,-5z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_logout.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M17,17.25V14H10V10H17V6.75L22.25,12L17,17.25M13,2A2,2 0,0 1,15 4V8H13V4H4V20H13V16H15V20A2,2 0,0 1,13 22H4A2,2 0,0 1,2 20V4A2,2 0,0 1,4 2H13Z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_more.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M6,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM18,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_more_vert.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M12,8c1.1,0 2,-0.9 2,-2s-0.9,-2 -2,-2 -2,0.9 -2,2 0.9,2 2,2zM12,10c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2zM12,16c-1.1,0 -2,0.9 -2,2s0.9,2 2,2 2,-0.9 2,-2 -0.9,-2 -2,-2z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_notification.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:viewportWidth="450" 4 | android:viewportHeight="450" 5 | android:width="24dp" 6 | android:height="24dp"> 7 | <path 8 | android:pathData="M80.485941 240.14157l57.385759 31.63487 52.29738 -48.48157 -48.82337 -46.36512 -60.859769 33.74747c0 0 -11.79115 5.18494 -11.79115 13.75119 0 9.76351 11.79115 15.71316 11.79115 15.71316zM370.69181 55.944004c-1.00802 -0.264557 -2.07591 -0.453803 -3.28669 -0.453803 -9.14751 0 -17.68672 5.893642 -17.68672 5.893642L160.93454 166.06745 202.75004 211.63117 370.69181 55.944004ZM215.41596 225.43257L370.31525 394.21628c13.02896 -2.61082 10.86423 -22.44682 10.84299 -24.42618l0 -294.656993c0 0 0.23945 -16.049175 -10.16325 -19.100274L215.41596 225.43257Zm-54.31728 59.14497l186.65388 102.88963c0 0 11.90122 7.04263 19.58111 7.04263 1.03119 0 1.98321 -0.0927 2.86958 -0.2607L204.70622 237.0924 161.09868 284.57754Z" 9 | android:fillColor="#ffffff" /> 10 | </vector> -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_permission_android.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M6,18c0,0.55 0.45,1 1,1h1v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L11,19h2v3.5c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5L16,19h1c0.55,0 1,-0.45 1,-1L18,8L6,8v10zM3.5,8C2.67,8 2,8.67 2,9.5v7c0,0.83 0.67,1.5 1.5,1.5S5,17.33 5,16.5v-7C5,8.67 4.33,8 3.5,8zM20.5,8c-0.83,0 -1.5,0.67 -1.5,1.5v7c0,0.83 0.67,1.5 1.5,1.5s1.5,-0.67 1.5,-1.5v-7c0,-0.83 -0.67,-1.5 -1.5,-1.5zM15.53,2.16l1.3,-1.3c0.2,-0.2 0.2,-0.51 0,-0.71 -0.2,-0.2 -0.51,-0.2 -0.71,0l-1.48,1.48C13.85,1.23 12.95,1 12,1c-0.96,0 -1.86,0.23 -2.66,0.63L7.85,0.15c-0.2,-0.2 -0.51,-0.2 -0.71,0 -0.2,0.2 -0.2,0.51 0,0.71l1.31,1.31C6.97,3.26 6,5.01 6,7h12c0,-1.99 -0.97,-3.75 -2.47,-4.84zM10,5L9,5L9,4h1v1zM15,5h-1L14,4h1v1z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_permission_google.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:pathData="M21.35,11.1H12.18V13.83H18.69C18.36,17.64 15.19,19.27 12.19,19.27C8.36,19.27 5,16.25 5,12C5,7.9 8.2,4.73 12.2,4.73C15.29,4.73 17.1,6.7 17.1,6.7L19,4.72C19,4.72 16.56,2 12.1,2C6.42,2 2.03,6.8 2.03,12C2.03,17.05 6.16,22 12.25,22C17.6,22 21.5,18.33 21.5,12.91C21.5,11.76 21.35,11.1 21.35,11.1V11.1Z" 8 | android:fillColor="?android:textColorSecondary"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_permission_unknown.xml: -------------------------------------------------------------------------------- 1 | <vector android:height="24dp" android:viewportHeight="40.64" 2 | android:viewportWidth="54.1866" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 3 | <path android:fillColor="?android:textColorSecondary" android:pathData="M29.9,26.57l-4.39,0c-0.01,-0.63 -0.02,-1.02 -0.02,-1.16 0,-1.42 0.24,-2.59 0.71,-3.51 0.47,-0.92 1.42,-1.95 2.83,-3.1 1.41,-1.15 2.26,-1.9 2.53,-2.26 0.43,-0.56 0.64,-1.18 0.64,-1.86 0,-0.94 -0.38,-1.75 -1.13,-2.42 -0.75,-0.67 -1.76,-1.01 -3.04,-1.01 -1.23,0 -2.26,0.35 -3.09,1.05 -0.82,0.7 -1.39,1.77 -1.71,3.2l-4.44,-0.55c0.12,-2.06 1,-3.8 2.62,-5.24 1.63,-1.43 3.76,-2.15 6.4,-2.15 2.78,0 4.99,0.73 6.63,2.18 1.64,1.45 2.46,3.14 2.46,5.07 0,1.06 -0.31,2.08 -0.91,3.03 -0.61,0.95 -1.89,2.25 -3.87,3.89 -1.02,0.85 -1.66,1.53 -1.9,2.05 -0.25,0.52 -0.36,1.44 -0.34,2.78zM25.51,33.08l0,-4.84 4.84,0 0,4.84 -4.84,0z"/> 4 | </vector> 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_placeholder.xml: -------------------------------------------------------------------------------- 1 | <vector android:height="24dp" android:viewportHeight="450.0" 2 | android:viewportWidth="450.0" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android"> 3 | <path android:fillAlpha="0.5029586" android:fillColor="#808080" 4 | android:fillType="evenOdd" 5 | android:pathData="M225,4.8A219.4,220.2 0,0 0,5.6 225A219.4,220.2 0,0 0,225 445.2A219.4,220.2 0,0 0,444.4 225A219.4,220.2 0,0 0,225 4.8zM324.3,68.1C325.5,68.1 326.5,68.3 327.4,68.5L172.5,212.6L133.9,170.5L308,73.6C308,73.6 315.9,68.1 324.3,68.1zM327.7,68.6C337.3,71.5 337,86.3 337,86.3L337,359C337.1,360.8 339.1,379.2 327,381.6L184.2,225.4L327.7,68.6zM115.8,180.5L160.9,223.4L112.6,268.3L59.7,239C59.7,239 48.8,233.5 48.8,224.5C48.8,216.5 59.7,211.7 59.7,211.7L115.8,180.5zM174.3,236.2L326.9,381.6C326.1,381.8 325.2,381.9 324.3,381.9C317.2,381.9 306.2,375.4 306.2,375.4L134.1,280.1L174.3,236.2z" 6 | android:strokeAlpha="1" android:strokeColor="#00000000" android:strokeWidth="30"/> 7 | </vector> 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_refresh.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M21,10.12h-6.78l2.74,-2.82c-2.73,-2.7 -7.15,-2.8 -9.88,-0.1 -2.73,2.71 -2.73,7.08 0,9.79 2.73,2.71 7.15,2.71 9.88,0C18.32,15.65 19,14.08 19,12.1h2c0,1.98 -0.88,4.55 -2.64,6.29 -3.51,3.48 -9.21,3.48 -12.72,0 -3.5,-3.47 -3.53,-9.11 -0.02,-12.58 3.51,-3.47 9.14,-3.47 12.65,0L21,3v7.12zM12.5,8v4.25l3.5,2.08 -0.72,1.21L11,13V8h1.5z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_search.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_settings.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M19.43,12.98c0.04,-0.32 0.07,-0.64 0.07,-0.98s-0.03,-0.66 -0.07,-0.98l2.11,-1.65c0.19,-0.15 0.24,-0.42 0.12,-0.64l-2,-3.46c-0.12,-0.22 -0.39,-0.3 -0.61,-0.22l-2.49,1c-0.52,-0.4 -1.08,-0.73 -1.69,-0.98l-0.38,-2.65C14.46,2.18 14.25,2 14,2h-4c-0.25,0 -0.46,0.18 -0.49,0.42l-0.38,2.65c-0.61,0.25 -1.17,0.59 -1.69,0.98l-2.49,-1c-0.23,-0.09 -0.49,0 -0.61,0.22l-2,3.46c-0.13,0.22 -0.07,0.49 0.12,0.64l2.11,1.65c-0.04,0.32 -0.07,0.65 -0.07,0.98s0.03,0.66 0.07,0.98l-2.11,1.65c-0.19,0.15 -0.24,0.42 -0.12,0.64l2,3.46c0.12,0.22 0.39,0.3 0.61,0.22l2.49,-1c0.52,0.4 1.08,0.73 1.69,0.98l0.38,2.65c0.03,0.24 0.24,0.42 0.49,0.42h4c0.25,0 0.46,-0.18 0.49,-0.42l0.38,-2.65c0.61,-0.25 1.17,-0.59 1.69,-0.98l2.49,1c0.23,0.09 0.49,0 0.61,-0.22l2,-3.46c0.12,-0.22 0.07,-0.49 -0.12,-0.64l-2.11,-1.65zM12,15.5c-1.93,0 -3.5,-1.57 -3.5,-3.5s1.57,-3.5 3.5,-3.5 3.5,1.57 3.5,3.5 -1.57,3.5 -3.5,3.5z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_share.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:textColorSecondary" 8 | android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_star.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="#FFFFFFFF" 8 | android:pathData="M12,17.27L18.18,21l-1.64,-7.03L22,9.24l-7.19,-0.61L12,2 9.19,8.63 2,9.24l5.46,4.73L5.82,21z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_storage.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="#FFFFFFFF" 8 | android:pathData="M2,20h20v-4L2,16v4zM4,17h2v2L4,19v-2zM2,4v4h20L22,4L2,4zM6,7L4,7L4,5h2v2zM2,14h20v-4L2,10v4zM4,11h2v2L4,13v-2z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_video.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:pathData="M10,16.5V7.5L16,12M20,4.4C19.4,4.2 15.7,4 12,4C8.3,4 4.6,4.19 4,4.38C2.44,4.9 2,8.4 2,12C2,15.59 2.44,19.1 4,19.61C4.6,19.81 8.3,20 12,20C15.7,20 19.4,19.81 20,19.61C21.56,19.1 22,15.59 22,12C22,8.4 21.56,4.91 20,4.4Z" 8 | android:fillColor="?android:textColorSecondary"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_visibility_off.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M12,7c2.76,0 5,2.24 5,5 0,0.65 -0.13,1.26 -0.36,1.83l2.92,2.92c1.51,-1.26 2.7,-2.89 3.43,-4.75 -1.73,-4.39 -6,-7.5 -11,-7.5 -1.4,0 -2.74,0.25 -3.98,0.7l2.16,2.16C10.74,7.13 11.35,7 12,7zM2,4.27l2.28,2.28 0.46,0.46C3.08,8.3 1.78,10.02 1,12c1.73,4.39 6,7.5 11,7.5 1.55,0 3.03,-0.3 4.38,-0.84l0.42,0.42L19.73,22 21,20.73 3.27,3 2,4.27zM7.53,9.8l1.55,1.55c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.66 1.34,3 3,3 0.22,0 0.44,-0.03 0.65,-0.08l1.55,1.55c-0.67,0.33 -1.41,0.53 -2.2,0.53 -2.76,0 -5,-2.24 -5,-5 0,-0.79 0.2,-1.53 0.53,-2.2zM11.84,9.02l3.15,3.15 0.02,-0.16c0,-1.66 -1.34,-3 -3,-3l-0.17,0.01z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_visibility_on.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24.0" 5 | android:viewportHeight="24.0"> 6 | <path 7 | android:fillColor="?android:colorForeground" 8 | android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/> 9 | </vector> 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_wishlist_plus.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24" 5 | android:viewportHeight="24"> 6 | <path 7 | android:pathData="M17,3L7,3C5.8965,3 5.0107,3.8955 5.0107,5L5,21L12,18L19,21L19,5C19,3.8955 18.1045,3 17,3L17,3ZM17,18L12,15.824L7,18L7,5L17,5L17,18L17,18Z" 8 | android:strokeWidth="1" 9 | android:fillColor="?android:colorForeground"/> 10 | <path 11 | android:pathData="M13,9L13,7L11,7L11,9L9,9L9,11L11,11L11,13L13,13L13,11L15,11L15,9L13,9" 12 | android:strokeWidth="1" 13 | android:fillColor="?android:colorForeground"/> 14 | </vector> 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-anydpi-v21/ic_wishlist_tick.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="24dp" 3 | android:height="24dp" 4 | android:viewportWidth="24" 5 | android:viewportHeight="24"> 6 | <path 7 | android:pathData="M17,3L7,3C5.8965,3 5.0107,3.8955 5.0107,5L5,21L12,18L19,21L19,5C19,3.8955 18.1045,3 17,3L17,3ZM10.4228,14.2L6.7477,10.525L8.2325,9.0402L10.4228,11.2305L15.8573,5.796L17.342,7.2807L10.4228,14.2L10.4228,14.2Z" 8 | android:strokeWidth="1" 9 | android:fillColor="?android:colorForeground"/> 10 | </vector> 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_about.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_about.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_add.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_apps.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_apps.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_arrow_drop_down.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_bug_report.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_bug_report.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_cancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_cancel.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_categories.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_categories.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_check.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_chevron_left.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chevron_right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_chevron_right.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_circle.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_circle.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_delete.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <!-- This Source Code Form is subject to the terms of the Mozilla Public 3 | - License, v. 2.0. If a copy of the MPL was not distributed with this 4 | - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> 5 | 6 | <animation-list xmlns:android="http://schemas.android.com/apk/res/android" 7 | android:oneshot="false"> 8 | 9 | <item android:drawable="@drawable/ic_download_animation_1" android:duration="150" /> 10 | <item android:drawable="@drawable/ic_download_animation_2" android:duration="150" /> 11 | <item android:drawable="@drawable/ic_download_animation_3" android:duration="150" /> 12 | <item android:drawable="@drawable/ic_download_animation_4" android:duration="150" /> 13 | <item android:drawable="@drawable/ic_download_animation_5" android:duration="150" /> 14 | <item android:drawable="@drawable/ic_download_animation_6" android:duration="150" /> 15 | 16 | </animation-list> 17 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download_animation_1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download_animation_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download_animation_3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download_animation_4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download_animation_5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_animation_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_download_animation_6.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_edit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_events.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_events.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_exodus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_exodus.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_less.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_expand_less.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_expand_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_expand_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fdroid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_fdroid.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_filter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_filter.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_google_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_google_play.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_instant_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_instant_app.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | <vector xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:width="108dp" 3 | android:height="108dp" 4 | android:viewportWidth="714.2857" 5 | android:viewportHeight="714.2857"> 6 | <group android:translateX="132.14285" 7 | android:translateY="132.14285"> 8 | <path 9 | android:pathData="m40.5,240.1c19.1,10.5 38.3,21.1 57.4,31.6 17.4,-16.2 34.9,-32.3 52.3,-48.5 -16.3,-15.5 -32.5,-30.9 -48.8,-46.4 -22.2,12.5 -44.9,24.4 -66.8,37.4 -11.4,7.8 -4.1,21.1 5.9,25.8zM330.7,55.9c-15,-1.7 -26.7,9.8 -39.5,15.7 -56.7,31.5 -113.5,62.9 -170.2,94.4 13.9,15.2 27.9,30.4 41.8,45.6C218.7,159.7 274.7,107.8 330.7,55.9ZM175.4,225.4c51.6,56.3 103.3,112.5 154.9,168.8 13.6,-4.1 10.6,-20.6 10.8,-31.8 -0.1,-96.6 0.2,-193.2 -0.1,-289.8 0.6,-12.8 -11.4,-21.5 -17.5,-8.4C274.1,117.9 224.8,171.7 175.4,225.4ZM121.1,284.6c64.6,35.4 128.8,71.4 193.6,106.4 11.1,6 19.5,3.7 7.5,-4.4C269.7,336.8 217.2,286.9 164.7,237.1c-14.5,15.8 -29.1,31.7 -43.6,47.5z" 10 | android:fillAlpha="1" 11 | android:fillColor="#357ec7"/> 12 | </group> 13 | </vector> 14 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_link.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_logout.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_logout.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_vert.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_more_vert.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_notification.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_notification.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_permission_android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_permission_android.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_permission_google.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_permission_google.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_permission_unknown.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_permission_unknown.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_placeholder.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_refresh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_refresh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_search.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_settings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_settings.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_share.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_share.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_star.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_star.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_storage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_storage.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_visibility_off.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_visibility_off.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_visibility_on.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_visibility_on.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wishlist_plus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_wishlist_plus.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_wishlist_tick.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/drawable/ic_wishlist_tick.png -------------------------------------------------------------------------------- /app/src/main/res/layout-v21/permission_group_widget_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:id="@+id/permission_group_parent" 4 | android:orientation="horizontal" 5 | android:paddingTop="5dp" 6 | android:paddingBottom="5dp" 7 | android:layout_width="wrap_content" 8 | android:layout_height="wrap_content"> 9 | 10 | <ImageView 11 | android:id="@+id/permission_group_icon" 12 | android:minWidth="24dp" 13 | android:minHeight="24dp" 14 | android:layout_width="24dp" 15 | android:layout_height="24dp" 16 | android:layout_marginLeft="16dp" 17 | android:layout_marginStart="16dp" 18 | android:layout_marginRight="8dp" 19 | android:layout_marginEnd="8dp" 20 | android:tint="?android:textColorSecondary" 21 | android:scaleType="fitCenter" /> 22 | 23 | <ImageView 24 | android:layout_width="wrap_content" 25 | android:layout_height="match_parent" /> 26 | 27 | <LinearLayout 28 | android:id="@+id/permission_labels" 29 | android:orientation="vertical" 30 | android:textAppearance="?android:attr/textAppearanceSmall" 31 | android:textSize="16sp" 32 | android:layout_marginLeft="8dp" 33 | android:layout_marginStart="8dp" 34 | android:layout_width="wrap_content" 35 | android:layout_height="wrap_content" 36 | android:layout_gravity="top|start" /> 37 | 38 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/main/res/layout/applist_activity_layout.xml: -------------------------------------------------------------------------------- 1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:layout_width="match_parent" 3 | android:layout_height="match_parent" 4 | android:orientation="vertical" > 5 | 6 | <RelativeLayout 7 | android:id="@+id/listContainer" 8 | android:layout_width="match_parent" 9 | android:layout_height="0dp" 10 | android:layout_weight="1" > 11 | 12 | <ProgressBar 13 | android:id="@+id/progress" 14 | android:layout_width="wrap_content" 15 | android:layout_height="wrap_content" 16 | android:indeterminate="true" 17 | android:layout_alignParentRight="true" 18 | android:layout_alignParentEnd="true" 19 | android:visibility="gone" 20 | android:padding="5dp" /> 21 | 22 | <ListView 23 | android:id="@android:id/list" 24 | android:layout_width="match_parent" 25 | android:layout_height="match_parent" /> 26 | 27 | <TextView 28 | android:id="@android:id/empty" 29 | android:layout_width="match_parent" 30 | android:layout_height="match_parent" 31 | android:gravity="center" 32 | android:textAppearance="?android:attr/textAppearanceLarge" /> 33 | 34 | </RelativeLayout> 35 | 36 | <include layout="@layout/applist_main_button"/> 37 | 38 | </LinearLayout> 39 | -------------------------------------------------------------------------------- /app/src/main/res/layout/badge_widget_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <merge xmlns:android="http://schemas.android.com/apk/res/android"> 3 | 4 | <RelativeLayout 5 | android:layout_width="48dp" 6 | android:layout_height="48dp"> 7 | 8 | <ImageView 9 | android:layout_width="match_parent" 10 | android:layout_height="match_parent" 11 | android:src="@drawable/ic_circle" /> 12 | 13 | <ImageView 14 | android:id="@+id/icon" 15 | android:layout_width="32dp" 16 | android:layout_height="32dp" 17 | android:background="@android:color/transparent" 18 | android:layout_centerInParent="true" /> 19 | 20 | </RelativeLayout> 21 | 22 | <TextView 23 | android:id="@+id/label" 24 | android:textAlignment="center" 25 | android:layout_width="wrap_content" 26 | android:layout_height="wrap_content"/> 27 | 28 | </merge> -------------------------------------------------------------------------------- /app/src/main/res/layout/deviceinfo_activity_layout.xml: -------------------------------------------------------------------------------- 1 | <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:layout_width="match_parent" 3 | android:layout_height="match_parent" > 4 | 5 | <TableLayout 6 | android:id="@+id/device_info" 7 | android:layout_width="match_parent" 8 | android:layout_height="wrap_content" /> 9 | 10 | </ScrollView> 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/expansion_panel_widget_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <merge xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:layout_width="match_parent" 4 | android:layout_height="wrap_content"> 5 | 6 | <TextView 7 | android:id="@+id/header" 8 | android:layout_width="match_parent" 9 | android:layout_height="48dp" 10 | android:paddingLeft="16dp" 11 | android:paddingRight="16dp" 12 | android:drawableEnd="@drawable/ic_expand_more" 13 | android:drawableRight="@drawable/ic_expand_more" 14 | android:focusable="true" 15 | android:gravity="center_vertical" 16 | android:textSize="18sp"/> 17 | 18 | <LinearLayout 19 | android:id="@+id/container" 20 | android:transitionGroup="true" 21 | android:layout_width="match_parent" 22 | android:layout_height="0px" 23 | android:orientation="vertical" 24 | android:paddingBottom="16dp" 25 | android:paddingLeft="16dp" 26 | android:paddingRight="16dp"/> 27 | 28 | </merge> -------------------------------------------------------------------------------- /app/src/main/res/layout/fullscreen_image_activity_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:orientation="vertical" 4 | android:gravity="center" 5 | android:layout_width="match_parent" 6 | android:layout_height="match_parent"> 7 | 8 | <Gallery 9 | android:id="@+id/gallery" 10 | android:adjustViewBounds="true" 11 | android:spacing="10dp" 12 | android:layout_width="match_parent" 13 | android:layout_height="match_parent" /> 14 | 15 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/main/res/layout/list_activity_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | 3 | 4 | <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 5 | android:id="@+id/listContainer" 6 | android:layout_width="match_parent" 7 | android:layout_height="match_parent" 8 | android:padding="6dp"> 9 | 10 | <ProgressBar 11 | android:id="@+id/progress" 12 | android:layout_width="wrap_content" 13 | android:layout_height="wrap_content" 14 | android:indeterminate="true" 15 | android:layout_alignParentRight="true" 16 | android:layout_alignParentEnd="true" 17 | android:visibility="gone" 18 | android:padding="5dp" /> 19 | 20 | <ListView 21 | android:id="@android:id/list" 22 | android:layout_width="match_parent" 23 | android:layout_height="match_parent"/> 24 | 25 | <TextView 26 | android:id="@+id/empty" 27 | android:layout_width="match_parent" 28 | android:layout_height="match_parent" 29 | android:gravity="center" 30 | android:textAppearance="?android:attr/textAppearanceLarge"/> 31 | 32 | </RelativeLayout> 33 | -------------------------------------------------------------------------------- /app/src/main/res/layout/permission_group_widget_layout.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 | android:id="@+id/permission_group_parent" 4 | android:orientation="horizontal" 5 | android:paddingTop="5dp" 6 | android:paddingBottom="5dp" 7 | android:layout_width="wrap_content" 8 | android:layout_height="wrap_content"> 9 | 10 | <ImageView 11 | android:id="@+id/permission_group_icon" 12 | android:minWidth="24dp" 13 | android:minHeight="24dp" 14 | android:layout_width="24dp" 15 | android:layout_height="24dp" 16 | android:layout_marginLeft="16dp" 17 | android:layout_marginStart="16dp" 18 | android:layout_marginRight="8dp" 19 | android:layout_marginEnd="8dp" 20 | android:tint="#808080" 21 | android:scaleType="fitCenter" /> 22 | 23 | <ImageView 24 | android:layout_width="wrap_content" 25 | android:layout_height="match_parent" /> 26 | 27 | <LinearLayout 28 | android:id="@+id/permission_labels" 29 | android:orientation="vertical" 30 | android:textAppearance="?android:attr/textAppearanceSmall" 31 | android:textSize="16sp" 32 | android:layout_marginLeft="8dp" 33 | android:layout_marginStart="8dp" 34 | android:layout_width="wrap_content" 35 | android:layout_height="wrap_content" 36 | android:layout_gravity="top|start" /> 37 | 38 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/main/res/layout/review_dialog_layout.xml: -------------------------------------------------------------------------------- 1 | <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 | android:layout_width="match_parent" 3 | android:layout_height="wrap_content" 4 | android:orientation="vertical" 5 | android:gravity="center" 6 | android:paddingLeft="15dip" 7 | android:paddingRight="15dip" > 8 | 9 | <TextView 10 | android:text="@string/details_review_dialog_fields_optional" 11 | android:textSize="18sp" 12 | android:paddingBottom="6dp" 13 | android:layout_width="match_parent" 14 | android:layout_height="wrap_content" /> 15 | 16 | <EditText 17 | android:id="@+id/review_dialog_review_title" 18 | android:hint="@string/details_review_dialog_review_title_hint" 19 | android:inputType="textCapSentences" 20 | android:lines="1" 21 | android:layout_width="match_parent" 22 | android:layout_height="wrap_content" /> 23 | 24 | <EditText 25 | android:id="@+id/review_dialog_review_comment" 26 | android:hint="@string/details_review_dialog_review_comment_hint" 27 | android:inputType="textCapSentences|textMultiLine" 28 | android:maxLines="8" 29 | android:layout_width="match_parent" 30 | android:layout_height="wrap_content" /> 31 | 32 | </LinearLayout> -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android"> 3 | <background android:drawable="@color/ic_launcher_background"/> 4 | <foreground android:drawable="@drawable/ic_launcher_foreground"/> 5 | </adaptive-icon> -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi-v24/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-hdpi-v24/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi-v24/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-mdpi-v24/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi-v24/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-xhdpi-v24/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi-v24/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-xxhdpi-v24/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi-v24/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-xxxhdpi-v24/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/app/src/main/res/mipmap/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <resources> 3 | 4 | <declare-styleable name="MultiSelectListPreference"> 5 | <attr name="android:entries" /> 6 | <attr name="android:entryValues" /> 7 | </declare-styleable> 8 | 9 | <declare-styleable name="ExpansionPanel"> 10 | <attr name="headerText" format="string" /> 11 | <attr name="colorDetailsItemBackground" format="color" /> 12 | </declare-styleable> 13 | 14 | <declare-styleable name="Badge"> 15 | <attr name="icon" format="reference" /> 16 | <attr name="label" format="string" /> 17 | </declare-styleable> 18 | 19 | </resources> -------------------------------------------------------------------------------- /app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <resources> 3 | <color name="ic_launcher_background">#FFFFFF</color> 4 | </resources> -------------------------------------------------------------------------------- /app/src/main/res/xml/paths.xml: -------------------------------------------------------------------------------- 1 | <paths> 2 | <root-path name="apks" path="." /> 3 | <cache-path name="cache" path="." /> 4 | </paths> -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | repositories { 5 | google() 6 | jcenter() 7 | } 8 | dependencies { 9 | classpath 'com.android.tools.build:gradle:3.2.1' 10 | } 11 | } 12 | 13 | allprojects { 14 | repositories { 15 | maven { url 'https://jitpack.io' } 16 | google() 17 | jcenter() 18 | } 19 | } -------------------------------------------------------------------------------- /drawable-source/ic_chevron_left.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_chevron_left.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="656" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" 53 | id="path4" 54 | style="fill:#808080" /> 55 | <path 56 | d="M0 0h24v24H0z" 57 | fill="none" 58 | id="path6" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_chevron_right.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_chevron_right.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="656" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" 53 | id="path4" 54 | style="fill:#808080" /> 55 | <path 56 | d="M0 0h24v24H0z" 57 | fill="none" 58 | id="path6" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_delete.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_delete.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="656" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M6 19c0 1.1.9 2 2 2h8c1.1 0 2-.9 2-2V7H6v12zM19 4h-3.5l-1-1h-5l-1 1H5v2h14V4z" 53 | id="path4" 54 | style="fill:#808080" /> 55 | <path 56 | d="M0 0h24v24H0z" 57 | fill="none" 58 | id="path6" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_download.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_download.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="660" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z" 53 | id="path4" 54 | style="fill:#ffffff" /> 55 | <path 56 | d="M0 0h24v24H0z" 57 | fill="none" 58 | id="path6" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_expand_less.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_expand_less.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="656" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M12 8l-6 6 1.41 1.41L12 10.83l4.59 4.58L18 14z" 53 | id="path4" 54 | style="fill:#808080" /> 55 | <path 56 | d="M0 0h24v24H0z" 57 | fill="none" 58 | id="path6" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_expand_more.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_expand_more.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="656" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M16.59 8.59L12 13.17 7.41 8.59 6 10l6 6 6-6z" 53 | id="path4" 54 | style="fill:#808080" /> 55 | <path 56 | d="M0 0h24v24H0z" 57 | fill="none" 58 | id="path6" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_logout.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | version="1.1" 11 | width="24" 12 | height="24" 13 | viewBox="0 0 24 24" 14 | id="svg2" 15 | inkscape:version="0.91 r13725" 16 | sodipodi:docname="ic_logout.svg"> 17 | <metadata 18 | id="metadata10"> 19 | <rdf:RDF> 20 | <cc:Work 21 | rdf:about=""> 22 | <dc:format>image/svg+xml</dc:format> 23 | <dc:type 24 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 25 | </cc:Work> 26 | </rdf:RDF> 27 | </metadata> 28 | <defs 29 | id="defs8" /> 30 | <sodipodi:namedview 31 | pagecolor="#ffffff" 32 | bordercolor="#666666" 33 | borderopacity="1" 34 | objecttolerance="10" 35 | gridtolerance="10" 36 | guidetolerance="10" 37 | inkscape:pageopacity="0" 38 | inkscape:pageshadow="2" 39 | inkscape:window-width="656" 40 | inkscape:window-height="480" 41 | id="namedview6" 42 | showgrid="false" 43 | inkscape:zoom="9.8333333" 44 | inkscape:cx="12" 45 | inkscape:cy="12" 46 | inkscape:window-x="0" 47 | inkscape:window-y="0" 48 | inkscape:window-maximized="0" 49 | inkscape:current-layer="svg2" /> 50 | <path 51 | d="M17,17.25V14H10V10H17V6.75L22.25,12L17,17.25M13,2A2,2 0 0,1 15,4V8H13V4H4V20H13V16H15V20A2,2 0 0,1 13,22H4A2,2 0 0,1 2,20V4A2,2 0 0,1 4,2H13Z" 52 | id="path4" 53 | style="fill:#808080" /> 54 | </svg> 55 | -------------------------------------------------------------------------------- /drawable-source/ic_storage.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | fill="#000000" 11 | height="24" 12 | viewBox="0 0 24 24" 13 | width="24" 14 | id="svg2" 15 | version="1.1" 16 | inkscape:version="0.91 r13725" 17 | sodipodi:docname="ic_storage.svg"> 18 | <metadata 19 | id="metadata12"> 20 | <rdf:RDF> 21 | <cc:Work 22 | rdf:about=""> 23 | <dc:format>image/svg+xml</dc:format> 24 | <dc:type 25 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs10" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="660" 41 | inkscape:window-height="480" 42 | id="namedview8" 43 | showgrid="false" 44 | inkscape:zoom="9.8333333" 45 | inkscape:cx="12" 46 | inkscape:cy="12" 47 | inkscape:window-x="0" 48 | inkscape:window-y="0" 49 | inkscape:window-maximized="0" 50 | inkscape:current-layer="svg2" /> 51 | <path 52 | d="M0 0h24v24H0z" 53 | fill="none" 54 | id="path4" /> 55 | <path 56 | d="M2 20h20v-4H2v4zm2-3h2v2H4v-2zM2 4v4h20V4H2zm4 3H4V5h2v2zm-4 7h20v-4H2v4zm2-3h2v2H4v-2z" 57 | id="path6" 58 | style="fill:#ffffff" /> 59 | </svg> 60 | -------------------------------------------------------------------------------- /drawable-source/ic_video.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | version="1.1" 11 | width="24" 12 | height="24" 13 | viewBox="0 0 24 24" 14 | id="svg2" 15 | inkscape:version="0.91 r13725" 16 | sodipodi:docname="ic_video.svg"> 17 | <metadata 18 | id="metadata10"> 19 | <rdf:RDF> 20 | <cc:Work 21 | rdf:about=""> 22 | <dc:format>image/svg+xml</dc:format> 23 | <dc:type 24 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 25 | </cc:Work> 26 | </rdf:RDF> 27 | </metadata> 28 | <defs 29 | id="defs8" /> 30 | <sodipodi:namedview 31 | pagecolor="#ffffff" 32 | bordercolor="#666666" 33 | borderopacity="1" 34 | objecttolerance="10" 35 | gridtolerance="10" 36 | guidetolerance="10" 37 | inkscape:pageopacity="0" 38 | inkscape:pageshadow="2" 39 | inkscape:window-width="660" 40 | inkscape:window-height="480" 41 | id="namedview6" 42 | showgrid="false" 43 | inkscape:zoom="9.8333333" 44 | inkscape:cx="12" 45 | inkscape:cy="12" 46 | inkscape:window-x="0" 47 | inkscape:window-y="0" 48 | inkscape:window-maximized="0" 49 | inkscape:current-layer="svg2" /> 50 | <path 51 | d="M10,16.5V7.5L16,12M20,4.4C19.4,4.2 15.7,4 12,4C8.3,4 4.6,4.19 4,4.38C2.44,4.9 2,8.4 2,12C2,15.59 2.44,19.1 4,19.61C4.6,19.81 8.3,20 12,20C15.7,20 19.4,19.81 20,19.61C21.56,19.1 22,15.59 22,12C22,8.4 21.56,4.91 20,4.4Z" 52 | id="path4" 53 | style="fill:#808080" /> 54 | </svg> 55 | -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/phoneScreenshots/details.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/fastlane/metadata/android/en-US/phoneScreenshots/details.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/phoneScreenshots/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/fastlane/metadata/android/en-US/phoneScreenshots/search.png -------------------------------------------------------------------------------- /fastlane/metadata/android/en-US/phoneScreenshots/updates.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/fastlane/metadata/android/en-US/phoneScreenshots/updates.png -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | android.enableAapt2=false 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Oct 04 21:55:13 MSK 2018 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip 7 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /yalp-store-ota-zip/81-YalpStore.sh: -------------------------------------------------------------------------------- 1 | #!/sbin/sh 2 | 3 | . /tmp/backuptool.functions 4 | 5 | PACKAGE_NAME=YalpStore 6 | 7 | list_files() { 8 | cat <<EOF 9 | app/${PACKAGE_NAME}.apk 10 | app/${PACKAGE_NAME}/${PACKAGE_NAME}.apk 11 | etc/permissions/privapp-permissions-${PACKAGE_NAME}.xml 12 | priv-app/${PACKAGE_NAME}.apk 13 | priv-app/${PACKAGE_NAME}/${PACKAGE_NAME}.apk 14 | EOF 15 | } 16 | 17 | case "$1" in 18 | backup) 19 | list_files | while read FILE DUMMY; do 20 | backup_file $S/"$FILE" 21 | done 22 | ;; 23 | restore) 24 | list_files | while read FILE REPLACEMENT; do 25 | R="" 26 | [ -n "$REPLACEMENT" ] && R="$S/$REPLACEMENT" 27 | [ -f "$C/$S/$FILE" ] && restore_file $S/"$FILE" "$R" 28 | done 29 | ;; 30 | pre-backup) 31 | # Stub 32 | ;; 33 | post-backup) 34 | # Stub 35 | ;; 36 | pre-restore) 37 | # Stub 38 | ;; 39 | post-restore) 40 | # Stub 41 | ;; 42 | esac 43 | -------------------------------------------------------------------------------- /yalp-store-ota-zip/privapp-permissions-YalpStore.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <permissions> 3 | <privapp-permissions package="com.github.yeriomin.yalpstore"> 4 | <permission name="android.permission.INSTALL_PACKAGES"/> 5 | </privapp-permissions> 6 | </permissions> 7 | -------------------------------------------------------------------------------- /yeriomin-keystore.jks.enc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/yeriomin/YalpStore/37f24c2fc2078cefc141d03c1379a650298ee2a8/yeriomin-keystore.jks.enc --------------------------------------------------------------------------------