The response has been limited to 50k tokens of the smallest files in the repo. You can remove this limitation by removing the max tokens filter.
├── .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


--------------------------------------------------------------------------------