diff --git a/app/build.gradle b/app/build.gradle index ad8f2c270..b610d0640 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -84,7 +84,7 @@ dependencies { annotationProcessor 'org.projectlombok:lombok:1.18.10' //PlayStoreApi - implementation 'com.github.whyorean:playstore-api-v2:2.4' + implementation 'com.github.whyorean:playstore-api-v2:2.5' //OkHTTP3 implementation 'com.squareup.okhttp3:okhttp:4.2.2' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index a69866ef8..c011815a3 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -34,6 +34,7 @@ -dontwarn okio.** -keep class com.google.** -dontwarn com.google.** +-keep class com.google.gson.Gson {*;} # Glide -keep public class * implements com.bumptech.glide.module.GlideModule diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 99ceddeca..7248eda0c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -153,6 +153,7 @@ + buildSplitRequestList(Context context, App app, AndroidAppDeliveryData deliveryData) { - List splitList = deliveryData.getSplitList(); + List splitList = deliveryData.getSplitDeliveryDataList(); List requestList = new ArrayList<>(); - for (Split split : splitList) { + for (SplitDeliveryData split : splitList) { final Request request = buildSplitRequest(context, app, split); requestList.add(request); } diff --git a/app/src/main/java/com/aurora/store/iterator/CustomAppListIterator.java b/app/src/main/java/com/aurora/store/iterator/CustomAppListIterator.java index 7a4b66ac1..7352a0e83 100644 --- a/app/src/main/java/com/aurora/store/iterator/CustomAppListIterator.java +++ b/app/src/main/java/com/aurora/store/iterator/CustomAppListIterator.java @@ -88,7 +88,7 @@ public class CustomAppListIterator implements Iterator { private boolean shouldSkip(App app) { return (!filterModel.isPaidApps() && !app.isFree()) - || (!filterModel.isAppsWithAds() && app.containsAds()) + || (!filterModel.isAppsWithAds() && app.isContainsAds()) || (!filterModel.isGsfDependentApps() && !app.getDependencies().isEmpty()) || (filterModel.getRating() > 0 && app.getRating().getAverage() < filterModel.getRating()) || (filterModel.getDownloads() > 0 && app.getInstalls() < filterModel.getDownloads()); diff --git a/app/src/main/java/com/aurora/store/model/App.java b/app/src/main/java/com/aurora/store/model/App.java index 5dabc63ad..c7444023c 100644 --- a/app/src/main/java/com/aurora/store/model/App.java +++ b/app/src/main/java/com/aurora/store/model/App.java @@ -22,10 +22,10 @@ */ package com.aurora.store.model; -import android.text.TextUtils; - import com.aurora.store.R; +import com.dragons.aurora.playstoreapiv2.Features; import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; +import com.dragons.aurora.playstoreapiv2.ProductDetailsSection; import java.util.ArrayList; import java.util.Collection; @@ -35,183 +35,57 @@ import java.util.List; import java.util.Map; import java.util.Set; +import lombok.Data; -public class App implements Comparable { - private String packageName = "unknown"; - private String displayName; - private String versionName = "unknown"; - private int versionCode = 0; - private int offerType; - private String updated; - private long size; - private long installs; - private Rating rating = new Rating(); - private String categoryIconUrl; +@Data +public class App { + + private Features features; private ImageSource pageBackgroundImage; - private String iconUrl; - private String videoUrl; - private String changes; - private String developerName; - private String description; - private String shortDescription; - private Set permissions = new HashSet<>(); - private boolean isInstalled; - private boolean isFree; - private boolean isAd; private List screenshotUrls = new ArrayList<>(); - private Review userReview; - private String categoryId; - private String price; - private boolean containsAds; - private Set dependencies = new HashSet<>(); private Map offerDetails = new HashMap<>(); - private boolean system; - private boolean inPlayStore; private Map relatedLinks = new HashMap<>(); + private Rating rating = new Rating(); + private Restriction restriction; + private Review userReview; + private Set dependencies = new HashSet<>(); + private Set permissions = new HashSet<>(); + private String categoryIconUrl; + private String categoryId; + private String categoryName; + private String changes; + private String description; + private String developerName; + private String developerEmail; + private String developerAddress; + private String developerWebsite; + private String displayName; + private String downloadString; + private String footerHtml; + private String iconUrl; + private String instantAppLink; + private String labeledRating; + private String packageName = "unknown"; + private String price; + private String shortDescription; + private String testingProgramEmail; + private String updated; + private String versionName = "unknown"; + private String videoUrl; + private boolean containsAds; private boolean earlyAccess; + private boolean inPlayStore; + private boolean isAd; + private boolean isFree; + private boolean isInstalled; + private boolean system; private boolean testingProgramAvailable; private boolean testingProgramOptedIn; - private String testingProgramEmail; - private Restriction restriction; - private String labeledRating; - private String instantAppLink; - - public String getLabeledRating() { - return labeledRating; - } - - public void setLabeledRating(String labeledRating) { - this.labeledRating = labeledRating; - } - - public String getPackageName() { - return packageName; - } - - public void setPackageName(String packageName) { - this.packageName = packageName; - } - - public String getDisplayName() { - return displayName; - } - - public void setDisplayName(String displayName) { - this.displayName = displayName; - } - - public String getVersionName() { - return versionName; - } - - public void setVersionName(String versionName) { - this.versionName = versionName; - } - - public int getVersionCode() { - return versionCode; - } - - public void setVersionCode(int versionCode) { - this.versionCode = versionCode; - } - - public int getOfferType() { - return offerType; - } - - public void setOfferType(int offerType) { - this.offerType = offerType; - } - - public String getUpdated() { - return updated; - } - - public void setUpdated(String updated) { - this.updated = updated; - } - - public long getSize() { - return size; - } - - public void setSize(long size) { - this.size = size; - } - - public long getInstalls() { - return installs; - } - - public void setInstalls(long installs) { - this.installs = installs; - } - - public Rating getRating() { - return rating; - } - - public String getCategoryIconUrl() { - return categoryIconUrl; - } - - public void setCategoryIconUrl(String categoryIconUrl) { - this.categoryIconUrl = categoryIconUrl; - } - - public ImageSource getPageBackgroundImage() { - return pageBackgroundImage; - } - - public void setPageBackgroundImage(ImageSource pageBackgroundImage) { - this.pageBackgroundImage = pageBackgroundImage; - } - - public void setIconUrl(String iconUrl) { - this.iconUrl = iconUrl; - } - - public ImageSource getIconInfo() { - ImageSource imageSource = new ImageSource(); - if (!TextUtils.isEmpty(iconUrl)) { - imageSource.setUrl(iconUrl); - } - return imageSource; - } - - public String getVideoUrl() { - return videoUrl; - } - - public void setVideoUrl(String videoUrl) { - this.videoUrl = videoUrl; - } - - public String getChanges() { - return changes; - } - - public void setChanges(String changes) { - this.changes = changes; - } - - public String getDeveloperName() { - return developerName; - } - - public void setDeveloperName(String developerName) { - this.developerName = developerName; - } - - public String getDescription() { - return description; - } - - public void setDescription(String description) { - this.description = description; - } + private int offerType; + private int versionCode = 0; + private long installs; + private long size; public Set getPermissions() { return permissions; @@ -221,22 +95,6 @@ public class App implements Comparable { this.permissions = new HashSet<>(permissions); } - public String getShortDescription() { - return shortDescription; - } - - public void setShortDescription(String shortDescription) { - this.shortDescription = shortDescription; - } - - public boolean isInstalled() { - return isInstalled; - } - - public void setInstalled(boolean installed) { - isInstalled = installed; - } - public int getInstalledVersionCode() { return versionCode; } @@ -245,152 +103,6 @@ public class App implements Comparable { return versionName; } - public boolean isFree() { - return isFree; - } - - public void setFree(boolean free) { - isFree = free; - } - - public boolean isAd() { - return isAd; - } - - public void setAd(boolean ad) { - isAd = ad; - } - - public List getScreenshotUrls() { - return screenshotUrls; - } - - public Review getUserReview() { - return userReview; - } - - public void setUserReview(Review userReview) { - this.userReview = userReview; - } - - public String getCategoryId() { - return categoryId; - } - - public void setCategoryId(String categoryId) { - this.categoryId = categoryId; - } - - public String getPrice() { - return price; - } - - public void setPrice(String price) { - this.price = price; - } - - public boolean containsAds() { - return containsAds; - } - - public void setContainsAds(boolean containsAds) { - this.containsAds = containsAds; - } - - public Set getDependencies() { - return dependencies; - } - - public Map getOfferDetails() { - return offerDetails; - } - - public boolean isSystem() { - return system; - } - - public void setSystem(boolean system) { - this.system = system; - } - - public boolean isInPlayStore() { - return inPlayStore; - } - - public void setInPlayStore(boolean inPlayStore) { - this.inPlayStore = inPlayStore; - } - - public Map getRelatedLinks() { - return relatedLinks; - } - - public boolean isEarlyAccess() { - return earlyAccess; - } - - public void setEarlyAccess(boolean earlyAccess) { - this.earlyAccess = earlyAccess; - } - - public boolean isTestingProgramAvailable() { - return testingProgramAvailable; - } - - public void setTestingProgramAvailable(boolean testingProgramAvailable) { - this.testingProgramAvailable = testingProgramAvailable; - } - - public boolean isTestingProgramOptedIn() { - return testingProgramOptedIn; - } - - public void setTestingProgramOptedIn(boolean testingProgramOptedIn) { - this.testingProgramOptedIn = testingProgramOptedIn; - } - - public String getTestingProgramEmail() { - return testingProgramEmail; - } - - public void setTestingProgramEmail(String testingProgramEmail) { - this.testingProgramEmail = testingProgramEmail; - } - - public Restriction getRestriction() { - return restriction; - } - - public void setRestriction(Restriction restriction) { - this.restriction = restriction; - } - - public String getInstantAppLink() { - return instantAppLink; - } - - public void setInstantAppLink(String instantAppLink) { - this.instantAppLink = instantAppLink; - } - - @Override - public int compareTo(App o) { - return getDisplayName().compareToIgnoreCase(o.getDisplayName()); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof App)) - return false; - - return getPackageName().equals(((App) obj).getPackageName()); - } - - @Override - public int hashCode() { - return (getPackageName().isEmpty()) ? 0 : getPackageName().hashCode(); - } - public enum Restriction { GENERIC(-1), diff --git a/app/src/main/java/com/aurora/store/model/AppBuilder.java b/app/src/main/java/com/aurora/store/model/AppBuilder.java index 3d68a7f6c..5269c9707 100644 --- a/app/src/main/java/com/aurora/store/model/AppBuilder.java +++ b/app/src/main/java/com/aurora/store/model/AppBuilder.java @@ -34,8 +34,8 @@ import com.dragons.aurora.playstoreapiv2.DetailsResponse; import com.dragons.aurora.playstoreapiv2.DocV2; import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; import com.dragons.aurora.playstoreapiv2.Image; +import com.dragons.aurora.playstoreapiv2.ProductDetailsSection; import com.dragons.aurora.playstoreapiv2.RelatedLink; -import com.dragons.aurora.playstoreapiv2.Unknown25Item; import java.util.List; import java.util.regex.Matcher; @@ -45,6 +45,8 @@ public class AppBuilder { static public App build(DetailsResponse detailsResponse) { App app = build(detailsResponse.getDocV2()); + app.setFooterHtml(detailsResponse.hasFooterHtml() ? detailsResponse.getFooterHtml() : ""); + app.setFeatures(detailsResponse.getFeatures()); if (TextUtils.isEmpty(app.getCategoryIconUrl()) || app.getRelatedLinks().isEmpty()) { walkBadges(app, detailsResponse.getBadgeList()); } @@ -73,9 +75,11 @@ public class AppBuilder { app.setPackageName(appDetails.getPackageName()); app.setVersionName(appDetails.getVersionString()); app.setVersionCode(appDetails.getVersionCode()); + app.setCategoryName(appDetails.getCategoryName()); app.setDeveloperName(appDetails.getDeveloperName()); app.setSize(appDetails.getInstallationSize()); app.setInstalls(getInstallsNum(appDetails.getNumDownloads())); + app.setDownloadString(appDetails.getNumDownloads()); app.setUpdated(appDetails.getUploadDate()); app.setChanges(appDetails.getRecentChangesHtml()); app.setPermissions(appDetails.getPermissionList()); @@ -85,6 +89,10 @@ public class AppBuilder { app.setTestingProgramAvailable(appDetails.hasTestingProgramInfo()); app.setLabeledRating(details.getRelatedLinks().getRated().getLabel()); app.setAd(details.getDetailsUrl().contains("nocache_isad=1")); + app.setDeveloperName(appDetails.getDeveloperName()); + app.setDeveloperEmail(appDetails.getDeveloperEmail()); + app.setDeveloperAddress(appDetails.getDeveloperAddress()); + app.setDeveloperWebsite(appDetails.getDeveloperWebsite()); if (appDetails.getHasInstantLink() && !TextUtils.isEmpty(appDetails.getInstantLink())) { app.setInstantAppLink(appDetails.getInstantLink()); } @@ -94,11 +102,12 @@ public class AppBuilder { } fillImages(app, details.getImageList()); fillDependencies(app, appDetails); + fillOfferDetails(app, details); return app; } static private long getInstallsNum(String installsRaw) { - Matcher matcher = Pattern.compile("[\\d]+").matcher(installsRaw.replaceAll("[,\\.\\s]+", "")); + Matcher matcher = Pattern.compile("[\\d]+").matcher(installsRaw.replaceAll("[,.\\s]+", "")); if (matcher.find()) { return Util.parseLong(matcher.group(0), 0); } @@ -125,14 +134,14 @@ public class AppBuilder { } static private void fillOfferDetails(App app, DocV2 details) { - if (!details.hasUnknown25() || details.getUnknown25().getItemCount() == 0) { + if (!details.hasUnknown25() || details.getUnknown25().getSectionCount() == 0) { return; } - for (Unknown25Item item : details.getUnknown25().getItemList()) { + for (ProductDetailsSection item : details.getUnknown25().getSectionList()) { if (!item.hasContainer()) { continue; } - app.getOfferDetails().put(item.getLabel(), item.getContainer().getValue()); + app.getOfferDetails().put(item.getLabel(), item.getContainer().getDescription()); } } diff --git a/app/src/main/java/com/aurora/store/notification/GeneralNotification.java b/app/src/main/java/com/aurora/store/notification/GeneralNotification.java index 73b4a58e5..a9a9065ea 100644 --- a/app/src/main/java/com/aurora/store/notification/GeneralNotification.java +++ b/app/src/main/java/com/aurora/store/notification/GeneralNotification.java @@ -135,7 +135,7 @@ public class GeneralNotification extends NotificationBase { if (NotificationUtil.isNotificationEnabled(context)) { Glide.with(context.getApplicationContext()) .asBitmap() - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .into(new SimpleTarget() { @Override public void onResourceReady(@NotNull Bitmap bitmap, Transition transition) { diff --git a/app/src/main/java/com/aurora/store/section/BlackListedAppSection.java b/app/src/main/java/com/aurora/store/section/BlackListedAppSection.java index c557ba511..05f30911b 100644 --- a/app/src/main/java/com/aurora/store/section/BlackListedAppSection.java +++ b/app/src/main/java/com/aurora/store/section/BlackListedAppSection.java @@ -103,7 +103,7 @@ public class BlackListedAppSection extends Section { GlideApp .with(context) - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .transforms(new CenterCrop(), new RoundedCorners(30)) .into(contentHolder.img); diff --git a/app/src/main/java/com/aurora/store/section/EndlessResultSection.java b/app/src/main/java/com/aurora/store/section/EndlessResultSection.java index f09e9c382..328e1de5b 100644 --- a/app/src/main/java/com/aurora/store/section/EndlessResultSection.java +++ b/app/src/main/java/com/aurora/store/section/EndlessResultSection.java @@ -37,7 +37,7 @@ public class EndlessResultSection extends InstallAppSection { if (PackageUtil.isInstalled(context, app.getPackageName())) Version.add(context.getString(R.string.action_installed)); Extra.add(app.getPrice()); - Extra.add(context.getString(app.containsAds() ? R.string.list_app_has_ads : R.string.list_app_no_ads)); + Extra.add(context.getString(app.isContainsAds() ? R.string.list_app_has_ads : R.string.list_app_no_ads)); Extra.add(context.getString(app.getDependencies().isEmpty() ? R.string.list_app_independent_from_gsf : R.string.list_app_depends_on_gsf)); if (!StringUtils.isEmpty(app.getUpdated())) Extra.add(app.getUpdated()); diff --git a/app/src/main/java/com/aurora/store/section/FavouriteAppSection.java b/app/src/main/java/com/aurora/store/section/FavouriteAppSection.java index 422126c84..ea236ec67 100644 --- a/app/src/main/java/com/aurora/store/section/FavouriteAppSection.java +++ b/app/src/main/java/com/aurora/store/section/FavouriteAppSection.java @@ -111,7 +111,7 @@ public class FavouriteAppSection extends Section { GlideApp .with(context) - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .transforms(new CenterCrop(), new RoundedCorners(30)) .into(contentHolder.img); diff --git a/app/src/main/java/com/aurora/store/section/InstallAppSection.java b/app/src/main/java/com/aurora/store/section/InstallAppSection.java index 514e8022f..647c903e1 100644 --- a/app/src/main/java/com/aurora/store/section/InstallAppSection.java +++ b/app/src/main/java/com/aurora/store/section/InstallAppSection.java @@ -114,7 +114,7 @@ public class InstallAppSection extends Section { GlideApp .with(context) - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .transition(new DrawableTransitionOptions().crossFade()) .transforms(new CenterCrop(), new RoundedCorners(30)) .into(contentHolder.AppIcon); diff --git a/app/src/main/java/com/aurora/store/section/SearchResultSection.java b/app/src/main/java/com/aurora/store/section/SearchResultSection.java index c81e6ce24..0f312ef0f 100644 --- a/app/src/main/java/com/aurora/store/section/SearchResultSection.java +++ b/app/src/main/java/com/aurora/store/section/SearchResultSection.java @@ -37,7 +37,7 @@ public class SearchResultSection extends InstallAppSection { if (PackageUtil.isInstalled(context, app.getPackageName())) Version.add(context.getString(R.string.action_installed)); Extra.add(app.getPrice()); - Extra.add(context.getString(app.containsAds() ? R.string.list_app_has_ads : R.string.list_app_no_ads)); + Extra.add(context.getString(app.isContainsAds() ? R.string.list_app_has_ads : R.string.list_app_no_ads)); Extra.add(context.getString(app.getDependencies().isEmpty() ? R.string.list_app_independent_from_gsf : R.string.list_app_depends_on_gsf)); if (!StringUtils.isEmpty(app.getUpdated())) Extra.add(app.getUpdated()); diff --git a/app/src/main/java/com/aurora/store/section/UpdateAppSection.java b/app/src/main/java/com/aurora/store/section/UpdateAppSection.java index 078f0ad66..917744bad 100644 --- a/app/src/main/java/com/aurora/store/section/UpdateAppSection.java +++ b/app/src/main/java/com/aurora/store/section/UpdateAppSection.java @@ -116,7 +116,7 @@ public class UpdateAppSection extends Section { : Html.fromHtml(app.getChanges()).toString()); GlideApp .with(context) - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .transition(new DrawableTransitionOptions().crossFade()) .transforms(new CenterCrop(), new RoundedCorners(30)) .into(contentHolder.imgIcon); diff --git a/app/src/main/java/com/aurora/store/sheet/MoreInfoSheet.java b/app/src/main/java/com/aurora/store/sheet/MoreInfoSheet.java deleted file mode 100644 index e2110ddc4..000000000 --- a/app/src/main/java/com/aurora/store/sheet/MoreInfoSheet.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Aurora Store - * Copyright (C) 2019, Rahul Kumar Patel - * - * Aurora Store is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 2 of the License, or - * (at your option) any later version. - * - * Aurora Store is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with Aurora Store. If not, see . - * - * - */ - -package com.aurora.store.sheet; - -import android.os.Build; -import android.os.Bundle; -import android.text.Html; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import com.aurora.store.R; -import com.aurora.store.model.App; -import com.google.android.material.bottomsheet.BottomSheetBehavior; -import com.google.android.material.bottomsheet.BottomSheetDialogFragment; - -import butterknife.BindView; -import butterknife.ButterKnife; - -public class MoreInfoSheet extends BottomSheetDialogFragment { - - @BindView(R.id.content_readMore) - TextView contentReadMore; - - private App app; - - public MoreInfoSheet() { - } - - public void setApp(App app) { - this.app = app; - } - - @Override - public void onStart() { - super.onStart(); - getDialog().getBehavior().setState(BottomSheetBehavior.STATE_EXPANDED); - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - View view = inflater.inflate(R.layout.sheet_read_more, container, false); - ButterKnife.bind(this, view); - view.setFitsSystemWindows(true); - return view; - } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) - contentReadMore.setText(Html.fromHtml(app.getDescription(), Html.FROM_HTML_MODE_LEGACY).toString()); - else - contentReadMore.setText(Html.fromHtml(app.getDescription()).toString()); - } -} diff --git a/app/src/main/java/com/aurora/store/task/AppDetailTask.java b/app/src/main/java/com/aurora/store/task/AppDetailTask.java index 4e8883d7f..08bbb95a1 100644 --- a/app/src/main/java/com/aurora/store/task/AppDetailTask.java +++ b/app/src/main/java/com/aurora/store/task/AppDetailTask.java @@ -24,6 +24,7 @@ import android.content.Context; import com.aurora.store.model.App; import com.aurora.store.model.AppBuilder; +import com.aurora.store.util.Log; import com.aurora.store.util.PackageUtil; import com.dragons.aurora.playstoreapiv2.DetailsResponse; import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; @@ -40,6 +41,7 @@ public class AppDetailTask { public App getInfo(String packageName) throws Exception { DetailsResponse response = api.details(packageName); + Log.writeToFile(context,response); App app = AppBuilder.build(response); if (PackageUtil.isInstalled(context, app)) app.setInstalled(true); diff --git a/app/src/main/java/com/aurora/store/task/AuthTask.java b/app/src/main/java/com/aurora/store/task/AuthTask.java index ed39cfdf3..0020d4ab3 100644 --- a/app/src/main/java/com/aurora/store/task/AuthTask.java +++ b/app/src/main/java/com/aurora/store/task/AuthTask.java @@ -53,6 +53,10 @@ public class AuthTask extends BaseTask { if (image.getImageType() == GooglePlayAPI.IMAGE_TYPE_APP_ICON) { PrefUtil.putString(context, Accountant.PROFILE_AVATAR, image.getImageUrl()); } + + if (image.getImageType() == GooglePlayAPI.IMAGE_TYPE_GOOGLE_PLUS_BACKGROUND) { + PrefUtil.putString(context, Accountant.PROFILE_BACKGROUND, image.getImageUrl()); + } } return !loginInfo.isEmpty(); } diff --git a/app/src/main/java/com/aurora/store/task/LiveUpdate.java b/app/src/main/java/com/aurora/store/task/LiveUpdate.java index 52a613adb..4cc10466c 100644 --- a/app/src/main/java/com/aurora/store/task/LiveUpdate.java +++ b/app/src/main/java/com/aurora/store/task/LiveUpdate.java @@ -64,7 +64,7 @@ public class LiveUpdate { //Add and to PseudoMaps PackageUtil.addToPseudoPackageMap(context, app.getPackageName(), app.getDisplayName()); - PackageUtil.addToPseudoURLMap(context, app.getPackageName(), app.getIconInfo().getUrl()); + PackageUtil.addToPseudoURLMap(context, app.getPackageName(), app.getIconUrl()); } private FetchListener getFetchListener() { diff --git a/app/src/main/java/com/aurora/store/ui/accounts/AccountsActivity.java b/app/src/main/java/com/aurora/store/ui/accounts/AccountsActivity.java index d1a7615b5..c5c88b44e 100644 --- a/app/src/main/java/com/aurora/store/ui/accounts/AccountsActivity.java +++ b/app/src/main/java/com/aurora/store/ui/accounts/AccountsActivity.java @@ -20,7 +20,9 @@ package com.aurora.store.ui.accounts; +import android.content.Intent; import android.os.Bundle; +import android.view.Menu; import android.view.MenuItem; import androidx.appcompat.app.ActionBar; @@ -29,7 +31,9 @@ import androidx.fragment.app.FragmentTransaction; import com.aurora.store.R; import com.aurora.store.ui.accounts.fragment.AccountsFragment; +import com.aurora.store.ui.preference.SettingsActivity; import com.aurora.store.ui.single.activity.BaseActivity; +import com.aurora.store.util.ViewUtil; import butterknife.BindView; import butterknife.ButterKnife; @@ -45,19 +49,36 @@ public class AccountsActivity extends BaseActivity { setContentView(R.layout.activity_accounts); ButterKnife.bind(this); setupActionbar(); - init(); + + getSupportFragmentManager() + .beginTransaction() + .replace(R.id.content, new AccountsFragment()) + .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) + .commitAllowingStateLoss(); } @Override public boolean onOptionsItemSelected(final MenuItem menuItem) { - if (menuItem.getItemId() == android.R.id.home) { - onBackPressed(); - return true; + switch (menuItem.getItemId()) { + case android.R.id.home: { + onBackPressed(); + return true; + } + case R.id.action_setting: { + startActivity(new Intent(this, SettingsActivity.class), ViewUtil.getEmptyActivityBundle(this)); + return true; + } } return false; } + @Override + public boolean onCreateOptionsMenu(final Menu menu) { + getMenuInflater().inflate(R.menu.menu_intro, menu); + return true; + } + @Override protected void onResume() { super.onResume(); @@ -73,13 +94,4 @@ public class AccountsActivity extends BaseActivity { actionBar.setTitle(getString(R.string.menu_account)); } } - - private void init() { - AccountsFragment fragment = new AccountsFragment(); - getSupportFragmentManager() - .beginTransaction() - .replace(R.id.content, fragment) - .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) - .commitAllowingStateLoss(); - } } diff --git a/app/src/main/java/com/aurora/store/ui/accounts/fragment/AccountsFragment.java b/app/src/main/java/com/aurora/store/ui/accounts/fragment/AccountsFragment.java index 30bb3dbd4..b94e1bee7 100644 --- a/app/src/main/java/com/aurora/store/ui/accounts/fragment/AccountsFragment.java +++ b/app/src/main/java/com/aurora/store/ui/accounts/fragment/AccountsFragment.java @@ -42,13 +42,13 @@ import androidx.fragment.app.Fragment; import com.aurora.store.GlideApp; import com.aurora.store.R; import com.aurora.store.api.PlayStoreApiAuthenticator; -import com.aurora.store.ui.preference.SettingsActivity; import com.aurora.store.ui.single.activity.GoogleLoginActivity; import com.aurora.store.util.Accountant; import com.aurora.store.util.ContextUtil; import com.aurora.store.util.Log; import com.aurora.store.util.NetworkUtil; import com.aurora.store.util.PrefUtil; +import com.aurora.store.util.Util; import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; import com.dragons.aurora.playstoreapiv2.Image; import com.dragons.aurora.playstoreapiv2.UserProfile; @@ -130,6 +130,14 @@ public class AccountsFragment extends Fragment { return view; } + @Override + public void onResume() { + super.onResume(); + if (Accountant.isLoggedIn(context)) { + Util.validateApi(context); + } + } + @Override public void onDestroy() { disposable.clear(); @@ -139,8 +147,6 @@ public class AccountsFragment extends Fragment { @OnClick(R.id.btn_positive) public void openLoginActivity() { context.startActivity(new Intent(context, GoogleLoginActivity.class)); - if (getActivity() instanceof SettingsActivity) - getActivity().finish(); } @OnClick(R.id.btn_negative) diff --git a/app/src/main/java/com/aurora/store/ui/details/DetailsActivity.java b/app/src/main/java/com/aurora/store/ui/details/DetailsActivity.java index 9a7d1cc0f..6e0c73255 100644 --- a/app/src/main/java/com/aurora/store/ui/details/DetailsActivity.java +++ b/app/src/main/java/com/aurora/store/ui/details/DetailsActivity.java @@ -244,7 +244,7 @@ public class DetailsActivity extends BaseActivity { private void drawBasic() { GlideApp.with(this) .asBitmap() - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .transition(new BitmapTransitionOptions().crossFade()) .transforms(new CenterCrop(), new RoundedCorners(50)) .into(icon); diff --git a/app/src/main/java/com/aurora/store/ui/details/ReadMoreActivity.java b/app/src/main/java/com/aurora/store/ui/details/ReadMoreActivity.java new file mode 100644 index 000000000..f520ccbb8 --- /dev/null +++ b/app/src/main/java/com/aurora/store/ui/details/ReadMoreActivity.java @@ -0,0 +1,131 @@ +/* + * Aurora Store + * Copyright (C) 2019, Rahul Kumar Patel + * + * Aurora Store is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Aurora Store is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Aurora Store. If not, see . + * + * + */ + +package com.aurora.store.ui.details; + +import android.os.Build; +import android.os.Bundle; +import android.text.Html; +import android.view.MenuItem; +import android.widget.LinearLayout; + +import androidx.annotation.Nullable; +import androidx.appcompat.app.ActionBar; +import androidx.appcompat.widget.AppCompatTextView; +import androidx.appcompat.widget.Toolbar; + +import com.aurora.store.R; +import com.aurora.store.model.App; +import com.aurora.store.ui.single.activity.BaseActivity; +import com.aurora.store.ui.view.MoreLayout; +import com.aurora.store.util.TextUtil; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class ReadMoreActivity extends BaseActivity { + + public static App app; + @BindView(R.id.toolbar) + Toolbar toolbar; + @BindView(R.id.txt_changelog) + AppCompatTextView txtChangelog; + @BindView(R.id.content_readMore) + AppCompatTextView contentReadMore; + @BindView(R.id.layout_more) + LinearLayout layoutMore; + + @Override + protected void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_read_more); + ButterKnife.bind(this); + if (app == null) { + finish(); + return; + } + setupActionBar(); + setupMore(); + } + + @Override + public boolean onOptionsItemSelected(final MenuItem menuItem) { + switch (menuItem.getItemId()) { + case android.R.id.home: + onBackPressed(); + return true; + } + return super.onOptionsItemSelected(menuItem); + } + + private void setupActionBar() { + setSupportActionBar(toolbar); + ActionBar actionBar = getSupportActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + actionBar.setDisplayShowTitleEnabled(true); + actionBar.setTitle(app.getDisplayName()); + } + } + + @Override + protected void onDestroy() { + app = null; + super.onDestroy(); + } + + private void setupMore() { + + String changes = app.getChanges(); + + if (TextUtil.isEmpty(changes)) + txtChangelog.setText(getString(R.string.details_no_changes)); + else + txtChangelog.setText(Html.fromHtml(changes).toString()); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) + contentReadMore.setText(Html.fromHtml(app.getDescription(), Html.FROM_HTML_MODE_LEGACY).toString()); + else + contentReadMore.setText(Html.fromHtml(app.getDescription())); + + MoreLayout m1 = new MoreLayout(this); + m1.setLabel(getString(R.string.details_more_version)); + m1.setValue(app.getVersionName()); + + MoreLayout m2 = new MoreLayout(this); + m2.setLabel(getString(R.string.details_more_updated)); + m2.setValue(app.getUpdated()); + + MoreLayout m3 = new MoreLayout(this); + m3.setLabel(getString(R.string.menu_downloads)); + m3.setValue(app.getDownloadString()); + + layoutMore.addView(m1); + layoutMore.addView(m2); + layoutMore.addView(m3); + + for (String key : app.getOfferDetails().keySet()) { + MoreLayout moreLayout = new MoreLayout(this); + moreLayout.setLabel(key); + moreLayout.setValue(app.getOfferDetails().get(key)); + layoutMore.addView(moreLayout); + } + } +} diff --git a/app/src/main/java/com/aurora/store/ui/details/views/AbstractDetails.java b/app/src/main/java/com/aurora/store/ui/details/views/AbstractDetails.java index b67b9ed95..e097c8904 100644 --- a/app/src/main/java/com/aurora/store/ui/details/views/AbstractDetails.java +++ b/app/src/main/java/com/aurora/store/ui/details/views/AbstractDetails.java @@ -23,7 +23,6 @@ package com.aurora.store.ui.details.views; import android.content.Context; import android.content.Intent; import android.net.Uri; -import android.transition.TransitionManager; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -80,8 +79,11 @@ public abstract class AbstractDetails { protected void setText(int viewId, String text) { TextView textView = activity.findViewById(viewId); - if (null != textView) { - textView.setText(text); + if (textView != null) { + if (text.isEmpty()) + textView.setVisibility(View.GONE); + else + textView.setText(text); } } @@ -94,7 +96,6 @@ public abstract class AbstractDetails { } protected void show(ViewGroup viewGroup, int... viewIds) { - TransitionManager.beginDelayedTransition(viewGroup); for (int viewId : viewIds) { activity.findViewById(viewId).setVisibility(View.VISIBLE); } diff --git a/app/src/main/java/com/aurora/store/ui/details/views/ActionButton.java b/app/src/main/java/com/aurora/store/ui/details/views/ActionButton.java index 805ec2386..5eaa8f8d3 100644 --- a/app/src/main/java/com/aurora/store/ui/details/views/ActionButton.java +++ b/app/src/main/java/com/aurora/store/ui/details/views/ActionButton.java @@ -302,7 +302,7 @@ public class ActionButton extends AbstractDetails { //Add and to PseudoMaps PackageUtil.addToPseudoPackageMap(context, app.getPackageName(), app.getDisplayName()); - PackageUtil.addToPseudoURLMap(context, app.getPackageName(), app.getIconInfo().getUrl()); + PackageUtil.addToPseudoURLMap(context, app.getPackageName(), app.getIconUrl()); } private FetchListener getFetchListener() { diff --git a/app/src/main/java/com/aurora/store/ui/details/views/GeneralDetails.java b/app/src/main/java/com/aurora/store/ui/details/views/GeneralDetails.java index 99c2953c4..7f825ac3c 100644 --- a/app/src/main/java/com/aurora/store/ui/details/views/GeneralDetails.java +++ b/app/src/main/java/com/aurora/store/ui/details/views/GeneralDetails.java @@ -20,48 +20,37 @@ package com.aurora.store.ui.details.views; +import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.res.ColorStateList; -import android.graphics.Bitmap; -import android.graphics.Color; -import android.text.Html; import android.text.TextUtils; import android.text.format.Formatter; -import android.text.util.Linkify; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; import android.widget.TextView; -import androidx.annotation.Nullable; -import androidx.core.graphics.ColorUtils; -import androidx.palette.graphics.Palette; +import androidx.core.text.HtmlCompat; import com.aurora.store.GlideApp; import com.aurora.store.R; -import com.aurora.store.manager.CategoryManager; import com.aurora.store.model.App; -import com.aurora.store.sheet.MoreInfoSheet; import com.aurora.store.ui.details.DetailsActivity; -import com.aurora.store.util.ColorUtil; -import com.aurora.store.util.Log; +import com.aurora.store.ui.details.ReadMoreActivity; +import com.aurora.store.ui.view.FeatureChip; import com.aurora.store.util.TextUtil; -import com.aurora.store.util.ThemeUtil; import com.aurora.store.util.Util; import com.aurora.store.util.ViewUtil; -import com.bumptech.glide.load.DataSource; -import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.resource.bitmap.BitmapTransitionOptions; import com.bumptech.glide.load.resource.bitmap.CenterCrop; import com.bumptech.glide.load.resource.bitmap.RoundedCorners; -import com.bumptech.glide.request.RequestListener; -import com.bumptech.glide.request.target.Target; +import com.dragons.aurora.playstoreapiv2.Feature; import com.google.android.material.button.MaterialButton; import com.google.android.material.chip.Chip; import com.google.android.material.chip.ChipGroup; +import org.apache.commons.lang3.StringUtils; import org.apache.maven.artifact.versioning.DefaultArtifactVersion; import java.util.ArrayList; @@ -85,10 +74,10 @@ public class GeneralDetails extends AbstractDetails { RelativeLayout moreLayout; @BindView(R.id.versionString) TextView app_version; - @BindView(R.id.txt_new) - TextView txtNew; @BindView(R.id.chip_group_info) ChipGroup chipGroupInfo; + @BindView(R.id.chip_group_features) + ChipGroup chipGroupFeatures; @BindView(R.id.txt_updated) Chip txtUpdated; @BindView(R.id.txt_google_dependencies) @@ -101,8 +90,14 @@ public class GeneralDetails extends AbstractDetails { Chip txtSize; @BindView(R.id.category) Chip category; - @BindView(R.id.developer_layout) - LinearLayout developerLayout; + @BindView(R.id.txt_footer) + TextView txtFooter; + @BindView(R.id.txt_dev_web_desc) + TextView txtDevWeb; + @BindView(R.id.txt_dev_email_desc) + TextView txtDevEmail; + @BindView(R.id.txt_dev_addr_desc) + TextView txtDevAddr; @BindView(R.id.btn_positive) MaterialButton btnPositive; @BindView(R.id.btn_negative) @@ -118,7 +113,6 @@ public class GeneralDetails extends AbstractDetails { drawAppBadge(); if (app.isInPlayStore()) { drawGeneralDetails(); - drawDescription(); setupReadMore(); } } @@ -126,21 +120,9 @@ public class GeneralDetails extends AbstractDetails { private void drawAppBadge() { GlideApp.with(context) .asBitmap() - .load(app.getIconInfo().getUrl()) + .load(app.getIconUrl()) .transition(new BitmapTransitionOptions().crossFade()) .transforms(new CenterCrop(), new RoundedCorners(50)) - .listener(new RequestListener() { - @Override - public boolean onLoadFailed(@Nullable GlideException e, Object model, Target target, boolean isFirstResource) { - return false; - } - - @Override - public boolean onResourceReady(Bitmap resource, Object model, Target target, DataSource dataSource, boolean isFirstResource) { - getPalette(resource); - return false; - } - }) .into(appIcon); setText(R.id.displayName, app.getDisplayName()); setText(R.id.packageName, app.getPackageName()); @@ -149,118 +131,45 @@ public class GeneralDetails extends AbstractDetails { drawVersion(); } - private void getPalette(Bitmap bitmap) { - Palette.from(bitmap).generate(palette -> { - if (palette != null) - paintEmAll(palette); - }); - } - - private void paintEmAll(Palette palette) { - Palette.Swatch swatch = palette.getDarkVibrantSwatch(); - int colorPrimary = Color.GRAY; - int colorPrimaryText = Color.BLACK; - - //Make sure we get a fallback swatch if DarkVibrantSwatch is not available - if (swatch == null) - swatch = palette.getVibrantSwatch(); - - //Make sure we get another fallback swatch if VibrantSwatch is not available - if (swatch == null) - swatch = palette.getDominantSwatch(); - - if (swatch != null) { - colorPrimary = swatch.getRgb(); - colorPrimaryText = ColorUtil.manipulateColor(colorPrimary, 0.3f); - } - - if (ColorUtil.isColorLight(colorPrimary)) - btnPositive.setTextColor(Color.BLACK); - else - btnPositive.setTextColor(Color.WHITE); - - btnPositive.setBackgroundColor(colorPrimary); - btnPositive.setStrokeColor(ColorStateList.valueOf(colorPrimary)); - - if (ThemeUtil.isLightTheme(context)) { - btnNegative.setTextColor(colorPrimaryText); - txtDevName.setTextColor(colorPrimaryText); - txtNew.setTextColor(colorPrimaryText); - txtDescShort.setTextColor(colorPrimaryText); - txtDescShort.setBackgroundTintList(ColorStateList.valueOf(ColorUtils.setAlphaComponent(colorPrimary, 60))); - } - } - private void drawGeneralDetails() { - if (context != null) { - if (app.isEarlyAccess()) { - setText(R.id.rating, R.string.early_access); - } else { - setText(R.id.rating, R.string.details_rating, app.getRating().getAverage()); - } - - final String category = new CategoryManager(context).getCategoryName(app.getCategoryId()); - if (TextUtil.isEmpty(category)) - hide(R.id.category); - else - setText(R.id.category, new CategoryManager(context).getCategoryName(app.getCategoryId())); - - if (app.getPrice() != null && app.getPrice().isEmpty()) - setText(R.id.price, R.string.category_appFree); - else - setText(R.id.price, app.getPrice()); - setText(R.id.contains_ads, app.containsAds() ? R.string.details_contains_ads : R.string.details_no_ads); - - txtUpdated.setText(app.getUpdated()); - txtDependencies.setText(app.getDependencies().isEmpty() - ? R.string.list_app_independent_from_gsf - : R.string.list_app_depends_on_gsf); - txtRating.setText(app.getLabeledRating()); - txtInstalls.setText(app.getInstalls() <= 100 ? "Unknown" : Util.addDiPrefix(app.getInstalls())); - txtSize.setText(app.getSize() == 0 ? "Unknown" : Formatter.formatShortFileSize(context, app.getSize())); - setText(R.id.app_desc_short, TextUtil.emptyIfNull(app.getShortDescription())); - - drawOfferDetails(); - drawChanges(); - - - show(rootLayout, R.id.chip_group_info, R.id.app_desc_short); + if (app.isEarlyAccess()) { + setText(R.id.rating, R.string.early_access); + } else { + setText(R.id.rating, R.string.details_rating, app.getRating().getAverage()); } - } - private void drawChanges() { - String changes = app.getChanges(); - if (TextUtil.isEmpty(changes)) - setText(R.id.txt_changelog, context.getString(R.string.details_no_changes)); + setText(R.id.category, app.getCategoryName()); + + if (app.getPrice() != null && app.getPrice().isEmpty()) + setText(R.id.price, R.string.category_appFree); else - setText(R.id.txt_changelog, Html.fromHtml(changes).toString()); - show(rootLayout, R.id.changes_container); + setText(R.id.price, app.getPrice()); + setText(R.id.contains_ads, app.isContainsAds() ? R.string.details_contains_ads : R.string.details_no_ads); + + txtUpdated.setText(app.getUpdated()); + txtDependencies.setText(app.getDependencies().isEmpty() + ? R.string.list_app_independent_from_gsf + : R.string.list_app_depends_on_gsf); + txtRating.setText(app.getLabeledRating()); + txtInstalls.setText(app.getInstalls() <= 100 ? "Unknown" : Util.addDiPrefix(app.getInstalls())); + txtSize.setText(app.getSize() == 0 ? "Unknown" : Formatter.formatShortFileSize(context, app.getSize())); + + setText(R.id.app_desc_short, TextUtil.emptyIfNull(app.getShortDescription())); + setText(R.id.txt_footer, TextUtil.emptyIfNull(app.getFooterHtml())); + + txtDevWeb.setText(app.getDeveloperWebsite()); + txtDevEmail.setText(app.getDeveloperEmail()); + txtDevAddr.setText(HtmlCompat.fromHtml(app.getDeveloperAddress(), HtmlCompat.FROM_HTML_MODE_LEGACY)); + + drawOfferDetails(); + drawFeatures(); + show(rootLayout, R.id.developer_container); + show(rootLayout, R.id.chip_group_info, R.id.app_desc_short); } private void drawOfferDetails() { List keyList = new ArrayList<>(app.getOfferDetails().keySet()); Collections.reverse(keyList); - for (String key : keyList) { - addOfferItem(key, app.getOfferDetails().get(key)); - } - } - - private void addOfferItem(String key, String value) { - if (null == value) { - return; - } - TextView itemView = new TextView(context); - try { - itemView.setAutoLinkMask(Linkify.ALL); - itemView.setText(context.getString(R.string.two_items, key, Html.fromHtml(value))); - } catch (RuntimeException e) { - Log.w("System WebView missing: %s", e.getMessage()); - itemView.setAutoLinkMask(0); - itemView.setText(context.getString(R.string.two_items, key, Html.fromHtml(value))); - } - itemView.setTextColor(ViewUtil.getStyledAttribute(context, android.R.attr.textColorPrimary)); - developerLayout.addView(itemView); - ViewUtil.setVisibility(developerLayout, true); } private void drawVersion() { @@ -310,21 +219,27 @@ public class GeneralDetails extends AbstractDetails { } } - private void drawDescription() { - if (context != null) { - if (TextUtils.isEmpty(app.getDescription())) { - hide(R.id.more_layout); - } else { - show(rootLayout, R.id.more_layout); - } + private void drawFeatures() { + if (app.getFeatures() == null) + return; + for (Feature feature : app.getFeatures().getFeaturePresenceList()) { + FeatureChip chip = new FeatureChip(context); + chip.setLabel(StringUtils.capitalize(feature.getLabel())); + chipGroupFeatures.addView(chip); } + show(R.id.chip_group_features); } private void setupReadMore() { - moreLayout.setOnClickListener(v -> { - MoreInfoSheet moreInfoSheet = new MoreInfoSheet(); - moreInfoSheet.setApp(app); - moreInfoSheet.show(activity.getSupportFragmentManager(), "MORE"); - }); + if (TextUtils.isEmpty(app.getDescription())) { + hide(R.id.more_layout); + } else { + show(rootLayout, R.id.more_layout); + moreLayout.setOnClickListener(v -> { + ReadMoreActivity.app = app; + activity.startActivity(new Intent(activity, ReadMoreActivity.class), + ViewUtil.getEmptyActivityBundle(activity)); + }); + } } } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/ui/intro/IntroActivity.java b/app/src/main/java/com/aurora/store/ui/intro/IntroActivity.java index bd1b28d25..d154bf0cb 100644 --- a/app/src/main/java/com/aurora/store/ui/intro/IntroActivity.java +++ b/app/src/main/java/com/aurora/store/ui/intro/IntroActivity.java @@ -40,6 +40,7 @@ import androidx.navigation.Navigation; import com.aurora.store.R; import com.aurora.store.api.PlayStoreApiAuthenticator; +import com.aurora.store.ui.main.AuroraActivity; import com.aurora.store.ui.preference.SettingsActivity; import com.aurora.store.ui.single.activity.BaseActivity; import com.aurora.store.ui.single.activity.GoogleLoginActivity; @@ -99,7 +100,7 @@ public class IntroActivity extends BaseActivity { protected void onResume() { super.onResume(); if (Accountant.isLoggedIn(this)) { - startActivity(new Intent(this, SplashActivity.class)); + startActivity(new Intent(this, AuroraActivity.class)); supportFinishAfterTransition(); } } @@ -200,7 +201,6 @@ public class IntroActivity extends BaseActivity { return; } startActivity(new Intent(this, GoogleLoginActivity.class), ViewUtil.getEmptyActivityBundle(this)); - supportFinishAfterTransition(); } private void resetAnonymousLogin() { diff --git a/app/src/main/java/com/aurora/store/ui/intro/fragment/WelcomeFragment.java b/app/src/main/java/com/aurora/store/ui/intro/fragment/WelcomeFragment.java index eb49ba9ea..787717e28 100644 --- a/app/src/main/java/com/aurora/store/ui/intro/fragment/WelcomeFragment.java +++ b/app/src/main/java/com/aurora/store/ui/intro/fragment/WelcomeFragment.java @@ -48,9 +48,4 @@ public class WelcomeFragment extends Fragment { ButterKnife.bind(this, view); return view; } - - @Override - public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { - super.onViewCreated(view, savedInstanceState); - } } diff --git a/app/src/main/java/com/aurora/store/ui/main/AuroraActivity.java b/app/src/main/java/com/aurora/store/ui/main/AuroraActivity.java index 266940300..f8a1c2981 100644 --- a/app/src/main/java/com/aurora/store/ui/main/AuroraActivity.java +++ b/app/src/main/java/com/aurora/store/ui/main/AuroraActivity.java @@ -255,6 +255,7 @@ public class AuroraActivity extends BaseActivity { @Override public void onDrawerOpened(@NonNull View drawerView) { + ImageView backgroundView = drawerView.findViewById(R.id.background); ImageView imageView = drawerView.findViewById(R.id.img); TextView textView1 = drawerView.findViewById(R.id.line1); TextView textView2 = drawerView.findViewById(R.id.line2); @@ -266,6 +267,11 @@ public class AuroraActivity extends BaseActivity { .circleCrop() .into(imageView); + GlideApp + .with(AuroraActivity.this) + .load(Accountant.getBackgroundImageURL(AuroraActivity.this)) + .into(backgroundView); + textView1.setText(Accountant.isAnonymous(AuroraActivity.this) ? getText(R.string.account_dummy) : Accountant.getUserName(AuroraActivity.this)); @@ -289,8 +295,8 @@ public class AuroraActivity extends BaseActivity { Intent intent = new Intent(this, GenericActivity.class); switch (item.getItemId()) { case R.id.action_accounts: - intent.putExtra(Constants.FRAGMENT_NAME, Constants.FRAGMENT_ACCOUNTS); - startActivity(intent, ViewUtil.getEmptyActivityBundle(this)); + startActivity(new Intent(this, AccountsActivity.class), + ViewUtil.getEmptyActivityBundle(this)); break; case R.id.action_all_apps: startActivity(new Intent(this, InstalledAppActivity.class), diff --git a/app/src/main/java/com/aurora/store/ui/main/fragment/category/CategoriesFragment.java b/app/src/main/java/com/aurora/store/ui/main/fragment/category/CategoriesFragment.java index a2d70bd8f..8bb119925 100644 --- a/app/src/main/java/com/aurora/store/ui/main/fragment/category/CategoriesFragment.java +++ b/app/src/main/java/com/aurora/store/ui/main/fragment/category/CategoriesFragment.java @@ -30,6 +30,7 @@ import android.widget.ProgressBar; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; @@ -58,6 +59,7 @@ public class CategoriesFragment extends Fragment implements CategoriesSection.Cl @BindView(R.id.progress_bar) ProgressBar progressBar; + private AppCompatActivity activity; private Context context; private CategoryManager categoryManager; @@ -78,9 +80,10 @@ public class CategoriesFragment extends Fragment implements CategoriesSection.Cl @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + activity = (AuroraActivity) getActivity(); categoryManager = new CategoryManager(context); - CategoriesModel categoriesModel = ViewModelProviders.of(this).get(CategoriesModel.class); - categoriesModel.getFetchCompleted().observe(this, success -> { + CategoriesModel categoriesModel = ViewModelProviders.of(activity).get(CategoriesModel.class); + categoriesModel.getFetchCompleted().observe(activity, success -> { if (success) { setupRecycler(); progressBar.setVisibility(View.GONE); diff --git a/app/src/main/java/com/aurora/store/ui/main/fragment/home/HomeFragment.java b/app/src/main/java/com/aurora/store/ui/main/fragment/home/HomeFragment.java index 748384a0e..1e1950e1e 100644 --- a/app/src/main/java/com/aurora/store/ui/main/fragment/home/HomeFragment.java +++ b/app/src/main/java/com/aurora/store/ui/main/fragment/home/HomeFragment.java @@ -29,6 +29,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; import androidx.recyclerview.widget.LinearLayoutManager; @@ -64,6 +65,7 @@ public class HomeFragment extends Fragment { @BindView(R.id.btn_top_family) MaterialButton btnTopFamily; + private AppCompatActivity activity; private Context context; private FeaturedAppsAdapter topAppsAdapter; private FeaturedAppsAdapter topGamesAdapter; @@ -106,18 +108,19 @@ public class HomeFragment extends Fragment { @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + activity = (AuroraActivity) getActivity(); setupRecyclers(); - HomeAppsModel homeAppsModel = ViewModelProviders.of(this).get(HomeAppsModel.class); - homeAppsModel.getTopApps().observe(this, appList -> { + HomeAppsModel homeAppsModel = ViewModelProviders.of(activity).get(HomeAppsModel.class); + homeAppsModel.getTopApps().observe(activity, appList -> { topAppsAdapter.addData(appList); }); - homeAppsModel.getTopGames().observe(this, appList -> { + homeAppsModel.getTopGames().observe(activity, appList -> { topGamesAdapter.addData(appList); }); - homeAppsModel.getTopFamily().observe(this, appList -> { + homeAppsModel.getTopFamily().observe(activity, appList -> { topFamilyAdapter.addData(appList); }); - homeAppsModel.getError().observe(this, errorType -> { + homeAppsModel.getError().observe(activity, errorType -> { }); } diff --git a/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatableAppsModel.java b/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatableAppsModel.java index c7a867645..092c31262 100644 --- a/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatableAppsModel.java +++ b/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatableAppsModel.java @@ -3,70 +3,43 @@ package com.aurora.store.ui.main.fragment.updates; import android.app.Application; import androidx.annotation.NonNull; -import androidx.lifecycle.AndroidViewModel; import androidx.lifecycle.LiveData; import androidx.lifecycle.MutableLiveData; import com.aurora.store.AuroraApplication; -import com.aurora.store.enums.ErrorType; -import com.aurora.store.exception.CredentialsEmptyException; -import com.aurora.store.exception.InvalidApiException; import com.aurora.store.model.App; import com.aurora.store.task.UpdatableAppsTask; -import com.dragons.aurora.playstoreapiv2.AuthException; -import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; +import com.aurora.store.viewmodel.BaseViewModel; -import java.net.UnknownHostException; import java.util.List; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; -import io.reactivex.disposables.CompositeDisposable; import io.reactivex.schedulers.Schedulers; -public class UpdatableAppsModel extends AndroidViewModel { - - private Application application; - private CompositeDisposable disposable = new CompositeDisposable(); - - private GooglePlayAPI api; - +public class UpdatableAppsModel extends BaseViewModel { private MutableLiveData> listMutableLiveData = new MutableLiveData<>(); - private MutableLiveData errorTypeMutableLiveData = new MutableLiveData<>(); public UpdatableAppsModel(@NonNull Application application) { super(application); - this.application = application; this.api = AuroraApplication.api; fetchUpdatableApps(); } - public LiveData getErrorTypeMutableLiveData() { - return errorTypeMutableLiveData; - } public LiveData> getListMutableLiveData() { return listMutableLiveData; } public void fetchUpdatableApps() { - disposable.add(Observable.fromCallable(() -> new UpdatableAppsTask(api, application) + disposable.add(Observable.fromCallable(() -> new UpdatableAppsTask(api, getApplication()) .getUpdatableApps()) .subscribeOn(Schedulers.computation()) .observeOn(AndroidSchedulers.mainThread()) .subscribe((appList) -> { listMutableLiveData.setValue(appList); - }, err -> { - if (err instanceof CredentialsEmptyException || err instanceof InvalidApiException) - errorTypeMutableLiveData.setValue(ErrorType.LOGOUT_ERR); - else if (err instanceof AuthException) - errorTypeMutableLiveData.setValue(ErrorType.SESSION_EXPIRED); - else if (err instanceof UnknownHostException) - errorTypeMutableLiveData.setValue(ErrorType.NO_NETWORK); - else - errorTypeMutableLiveData.setValue(ErrorType.UNKNOWN); - })); + }, err -> handleError(err))); } @Override diff --git a/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java b/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java index f4a953267..bf8e2d4eb 100644 --- a/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java +++ b/app/src/main/java/com/aurora/store/ui/main/fragment/updates/UpdatesFragment.java @@ -29,6 +29,7 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.AppCompatTextView; import androidx.fragment.app.Fragment; import androidx.lifecycle.ViewModelProviders; @@ -46,6 +47,7 @@ import com.aurora.store.section.UpdateAppSection; import com.aurora.store.sheet.AppMenuSheet; import com.aurora.store.ui.details.DetailsActivity; import com.aurora.store.ui.main.AuroraActivity; +import com.aurora.store.ui.single.fragment.BaseFragment; import com.aurora.store.ui.view.CustomSwipeToRefresh; import com.aurora.store.util.Util; import com.aurora.store.util.ViewUtil; @@ -64,7 +66,7 @@ import io.github.luizgrp.sectionedrecyclerviewadapter.SectionedRecyclerViewAdapt import io.reactivex.disposables.CompositeDisposable; -public class UpdatesFragment extends Fragment implements UpdateAppSection.ClickListener { +public class UpdatesFragment extends BaseFragment implements UpdateAppSection.ClickListener { @BindView(R.id.swipe_layout) CustomSwipeToRefresh customSwipeToRefresh; @@ -75,6 +77,7 @@ public class UpdatesFragment extends Fragment implements UpdateAppSection.ClickL @BindView(R.id.btn_action) MaterialButton btnAction; + private AppCompatActivity activity; private Context context; private Fetch fetch; private CompositeDisposable disposable = new CompositeDisposable(); @@ -100,16 +103,17 @@ public class UpdatesFragment extends Fragment implements UpdateAppSection.ClickL @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); + activity = (AuroraActivity) getActivity(); fetch = DownloadManager.getFetchInstance(context); setupRecycler(); - model = ViewModelProviders.of(this).get(UpdatableAppsModel.class); - model.getListMutableLiveData().observe(this, appList -> { + model = ViewModelProviders.of(activity).get(UpdatableAppsModel.class); + model.getListMutableLiveData().observe(activity, appList -> { dispatchAppsToAdapter(appList); customSwipeToRefresh.setRefreshing(false); }); - model.getErrorTypeMutableLiveData().observe(this, errorType -> { + model.getError().observe(activity, errorType -> { switch (errorType) { case NO_API: case SESSION_EXPIRED: diff --git a/app/src/main/java/com/aurora/store/ui/single/activity/GoogleLoginActivity.java b/app/src/main/java/com/aurora/store/ui/single/activity/GoogleLoginActivity.java index cc3346d2c..e923225c8 100644 --- a/app/src/main/java/com/aurora/store/ui/single/activity/GoogleLoginActivity.java +++ b/app/src/main/java/com/aurora/store/ui/single/activity/GoogleLoginActivity.java @@ -82,6 +82,7 @@ public class GoogleLoginActivity extends BaseActivity { String oauth_token = cookieMap.get(OAUTH_TOKEN); webview.evaluateJavascript("(function() { return document.getElementById('profileIdentifier').innerHTML; })();", email -> { + email = email.replaceAll("\"", ""); generateTokens(email, oauth_token); }); } diff --git a/app/src/main/java/com/aurora/store/ui/single/activity/ManualDownloadActivity.java b/app/src/main/java/com/aurora/store/ui/single/activity/ManualDownloadActivity.java index 8fb3e5739..04d734ac9 100644 --- a/app/src/main/java/com/aurora/store/ui/single/activity/ManualDownloadActivity.java +++ b/app/src/main/java/com/aurora/store/ui/single/activity/ManualDownloadActivity.java @@ -38,7 +38,6 @@ import androidx.appcompat.widget.Toolbar; import com.aurora.store.R; import com.aurora.store.manager.CategoryManager; import com.aurora.store.model.App; -import com.aurora.store.model.ImageSource; import com.aurora.store.task.DeliveryData; import com.aurora.store.task.LiveUpdate; import com.aurora.store.ui.details.DetailsActivity; @@ -114,20 +113,15 @@ public class ManualDownloadActivity extends BaseActivity { } private void drawAppBadge() { - ImageSource imageSource = app.getIconInfo(); - if (null != imageSource.getApplicationInfo()) { - appIcon.setImageDrawable(getPackageManager().getApplicationIcon(imageSource.getApplicationInfo())); - } else { - Glide.with(this) - .asBitmap() - .load(imageSource.getUrl()) - .apply(new RequestOptions() - .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) - .placeholder(R.color.colorTransparent) - .priority(Priority.HIGH)) - .transition(new BitmapTransitionOptions().crossFade()) - .into(appIcon); - } + Glide.with(this) + .asBitmap() + .load(app.getIconUrl()) + .apply(new RequestOptions() + .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC) + .placeholder(R.color.colorTransparent) + .priority(Priority.HIGH)) + .transition(new BitmapTransitionOptions().crossFade()) + .into(appIcon); setText(R.id.displayName, app.getDisplayName()); setText(R.id.packageName, app.getPackageName()); @@ -158,7 +152,7 @@ public class ManualDownloadActivity extends BaseActivity { setText(R.id.price, R.string.category_appFree); else setText(R.id.price, app.getPrice()); - setText(R.id.contains_ads, app.containsAds() ? R.string.details_contains_ads : R.string.details_no_ads); + setText(R.id.contains_ads, app.isContainsAds() ? R.string.details_contains_ads : R.string.details_no_ads); setText(R.id.txt_rating, app.getLabeledRating()); setText(R.id.txt_installs, Util.addDiPrefix(app.getInstalls())); setText(R.id.txt_size, Formatter.formatShortFileSize(this, app.getSize())); diff --git a/app/src/main/java/com/aurora/store/ui/single/fragment/BaseFragment.java b/app/src/main/java/com/aurora/store/ui/single/fragment/BaseFragment.java new file mode 100644 index 000000000..8c7e5fe2f --- /dev/null +++ b/app/src/main/java/com/aurora/store/ui/single/fragment/BaseFragment.java @@ -0,0 +1,21 @@ +package com.aurora.store.ui.single.fragment; + +import android.content.Context; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +public class BaseFragment extends Fragment { + + @Override + public void onAttach(@NonNull Context context) { + super.onAttach(context); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + } +} diff --git a/app/src/main/java/com/aurora/store/ui/view/FeatureChip.java b/app/src/main/java/com/aurora/store/ui/view/FeatureChip.java new file mode 100644 index 000000000..9160d2eb6 --- /dev/null +++ b/app/src/main/java/com/aurora/store/ui/view/FeatureChip.java @@ -0,0 +1,46 @@ +package com.aurora.store.ui.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.RelativeLayout; + +import com.aurora.store.R; +import com.google.android.material.chip.Chip; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class FeatureChip extends RelativeLayout { + + @BindView(R.id.chip) + public Chip chip; + + public FeatureChip(Context context) { + super(context); + init(); + } + + public FeatureChip(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public FeatureChip(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + View view = inflate(getContext(), R.layout.item_feature_chip, this); + ButterKnife.bind(this, view); + } + + public void setLabel(String label) { + chip.setText(label); + } + + public void setProgress(int progress) { + + } +} diff --git a/app/src/main/java/com/aurora/store/ui/view/LinkView.java b/app/src/main/java/com/aurora/store/ui/view/LinkView.java index 8ef6c6a03..f8121273d 100644 --- a/app/src/main/java/com/aurora/store/ui/view/LinkView.java +++ b/app/src/main/java/com/aurora/store/ui/view/LinkView.java @@ -35,7 +35,6 @@ import com.aurora.store.R; public class LinkView extends RelativeLayout { - Context context; CardView link_card; ImageView card_icon; TextView card_title; @@ -48,21 +47,20 @@ public class LinkView extends RelativeLayout { public LinkView(Context context, String linkURL, String title, String summary, int cardIconID) { super(context); - this.context = context; this.linkURL = linkURL; this.title = title; this.summary = summary; this.cardIconID = cardIconID; - init(context); + init(); } public LinkView(Context context, AttributeSet attrs) { super(context, attrs); - init(context); + init(); } - private void init(Context context) { - View view = inflate(context, R.layout.item_link, this); + private void init() { + View view = inflate(getContext(), R.layout.item_link, this); card_icon = view.findViewById(R.id.link_icon); card_title = view.findViewById(R.id.link_title); card_summary = view.findViewById(R.id.link_summary); @@ -73,7 +71,7 @@ public class LinkView extends RelativeLayout { view.setOnClickListener(click -> { final Intent browserIntent = new Intent(Intent.ACTION_VIEW); browserIntent.setData(Uri.parse(linkURL)); - context.startActivity(browserIntent); + getContext().startActivity(browserIntent); }); } } diff --git a/app/src/main/java/com/aurora/store/ui/view/MoreLayout.java b/app/src/main/java/com/aurora/store/ui/view/MoreLayout.java new file mode 100644 index 000000000..e66fed5f2 --- /dev/null +++ b/app/src/main/java/com/aurora/store/ui/view/MoreLayout.java @@ -0,0 +1,48 @@ +package com.aurora.store.ui.view; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.View; +import android.widget.LinearLayout; +import android.widget.TextView; + +import com.aurora.store.R; + +import butterknife.BindView; +import butterknife.ButterKnife; + +public class MoreLayout extends LinearLayout { + + @BindView(R.id.txt_column1) + public TextView txtColumn1; + @BindView(R.id.txt_column2) + public TextView txtColumn2; + + public MoreLayout(Context context) { + super(context); + init(); + } + + public MoreLayout(Context context, AttributeSet attrs) { + super(context, attrs); + init(); + } + + public MoreLayout(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + init(); + } + + private void init() { + View view = inflate(getContext(), R.layout.item_more_two_column, this); + ButterKnife.bind(this, view); + } + + public void setLabel(String label) { + txtColumn1.setText(label); + } + + public void setValue(String value) { + txtColumn2.setText(value); + } +} diff --git a/app/src/main/java/com/aurora/store/util/Accountant.java b/app/src/main/java/com/aurora/store/util/Accountant.java index 8d01cf716..04f452302 100644 --- a/app/src/main/java/com/aurora/store/util/Accountant.java +++ b/app/src/main/java/com/aurora/store/util/Accountant.java @@ -29,6 +29,7 @@ public class Accountant { public static final String EMAIL = "EMAIL"; public static final String PROFILE_NAME = "PROFILE_NAME"; public static final String PROFILE_AVATAR = "PROFILE_AVATAR"; + public static final String PROFILE_BACKGROUND = "PROFILE_BACKGROUND"; public static final String LOGGED_IN = "LOGGED_IN"; public static final String ANONYMOUS = "ANONYMOUS"; @@ -54,11 +55,16 @@ public class Accountant { return PrefUtil.getString(context, PROFILE_AVATAR); } + public static String getBackgroundImageURL(Context context) { + return PrefUtil.getString(context, PROFILE_BACKGROUND); + } + public static void completeCheckout(Context context) { PrefUtil.remove(context, LOGGED_IN); PrefUtil.remove(context, EMAIL); PrefUtil.remove(context, PROFILE_NAME); PrefUtil.remove(context, PROFILE_AVATAR); + PrefUtil.remove(context, PROFILE_BACKGROUND); LoginInfo.removeSavedInstance(context); } diff --git a/app/src/main/java/com/aurora/store/util/Log.java b/app/src/main/java/com/aurora/store/util/Log.java index 694a874c4..43b1a2289 100644 --- a/app/src/main/java/com/aurora/store/util/Log.java +++ b/app/src/main/java/com/aurora/store/util/Log.java @@ -20,8 +20,14 @@ package com.aurora.store.util; +import android.content.Context; + import com.aurora.store.Constants; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; + public class Log { public static void e(String message, Object... args) { @@ -55,4 +61,14 @@ public class Log { public static void w(String message) { android.util.Log.w(Constants.TAG, message); } + + public static void writeToFile(Context context, Object object) { + try { + FileWriter out = new FileWriter(new File(context.getFilesDir(), "AuroraLogs.txt")); + out.write(object.toString()); + out.close(); + } catch (IOException e) { + Log.e(e.getMessage()); + } + } } diff --git a/app/src/main/java/com/aurora/store/util/Util.java b/app/src/main/java/com/aurora/store/util/Util.java index fba1fd9eb..ce239eca1 100644 --- a/app/src/main/java/com/aurora/store/util/Util.java +++ b/app/src/main/java/com/aurora/store/util/Util.java @@ -538,12 +538,16 @@ public class Util { public static Map parseCookieString(String cookies) { Map cookieList = new HashMap<>(); - Pattern cookiePattern = Pattern.compile("([^=]+)=([^;]*);?\\s?"); - Matcher matcher = cookiePattern.matcher(cookies); - while (matcher.find()) { - String cookieKey = matcher.group(1); - String cookieValue = matcher.group(2); - cookieList.put(cookieKey, cookieValue); + try { + Pattern cookiePattern = Pattern.compile("([^=]+)=([^;]*);?\\s?"); + Matcher matcher = cookiePattern.matcher(cookies); + while (matcher.find()) { + String cookieKey = matcher.group(1); + String cookieValue = matcher.group(2); + cookieList.put(cookieKey, cookieValue); + } + } catch (Exception e) { + Log.d(e.getMessage()); } return cookieList; } diff --git a/app/src/main/res/anim/anim_falldown.xml b/app/src/main/res/anim/anim_falldown.xml deleted file mode 100644 index 781032aff..000000000 --- a/app/src/main/res/anim/anim_falldown.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/anim_slideright.xml b/app/src/main/res/anim/anim_slideright.xml deleted file mode 100644 index 3cf5571e4..000000000 --- a/app/src/main/res/anim/anim_slideright.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/item_falldown.xml b/app/src/main/res/anim/item_falldown.xml deleted file mode 100644 index 58af49353..000000000 --- a/app/src/main/res/anim/item_falldown.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/anim/item_slideright.xml b/app/src/main/res/anim/item_slideright.xml deleted file mode 100644 index 5613f0382..000000000 --- a/app/src/main/res/anim/item_slideright.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/feature_chip_bg.xml b/app/src/main/res/drawable/feature_chip_bg.xml new file mode 100644 index 000000000..be7a2d56e --- /dev/null +++ b/app/src/main/res/drawable/feature_chip_bg.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/feature_chip_level.xml b/app/src/main/res/drawable/feature_chip_level.xml new file mode 100644 index 000000000..b7db7ede5 --- /dev/null +++ b/app/src/main/res/drawable/feature_chip_level.xml @@ -0,0 +1,5 @@ + + diff --git a/app/src/main/res/drawable/ic_about.xml b/app/src/main/res/drawable/ic_about.xml deleted file mode 100644 index 5b919114f..000000000 --- a/app/src/main/res/drawable/ic_about.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_action.xml b/app/src/main/res/drawable/ic_action.xml deleted file mode 100644 index 702150964..000000000 --- a/app/src/main/res/drawable/ic_action.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_all.xml b/app/src/main/res/drawable/ic_all.xml deleted file mode 100644 index 6b9a989e8..000000000 --- a/app/src/main/res/drawable/ic_all.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_bulletin.xml b/app/src/main/res/drawable/ic_bulletin.xml deleted file mode 100644 index 7004b6171..000000000 --- a/app/src/main/res/drawable/ic_bulletin.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_cat_communication.xml b/app/src/main/res/drawable/ic_cat_communication.xml deleted file mode 100644 index 44c70898a..000000000 --- a/app/src/main/res/drawable/ic_cat_communication.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_cat_family.xml b/app/src/main/res/drawable/ic_cat_family.xml deleted file mode 100644 index dcc835ecb..000000000 --- a/app/src/main/res/drawable/ic_cat_family.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_cat_games.xml b/app/src/main/res/drawable/ic_cat_games.xml deleted file mode 100644 index 9605b59b9..000000000 --- a/app/src/main/res/drawable/ic_cat_games.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_cat_music.xml b/app/src/main/res/drawable/ic_cat_music.xml deleted file mode 100644 index 1f9315610..000000000 --- a/app/src/main/res/drawable/ic_cat_music.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_cat_personalization.xml b/app/src/main/res/drawable/ic_cat_personalization.xml deleted file mode 100644 index f79e0bf80..000000000 --- a/app/src/main/res/drawable/ic_cat_personalization.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_cat_photography.xml b/app/src/main/res/drawable/ic_cat_photography.xml deleted file mode 100644 index f710dbb06..000000000 --- a/app/src/main/res/drawable/ic_cat_photography.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_cat_shopping.xml b/app/src/main/res/drawable/ic_cat_shopping.xml deleted file mode 100644 index f67010860..000000000 --- a/app/src/main/res/drawable/ic_cat_shopping.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_cat_social.xml b/app/src/main/res/drawable/ic_cat_social.xml deleted file mode 100644 index 44c70898a..000000000 --- a/app/src/main/res/drawable/ic_cat_social.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - diff --git a/app/src/main/res/drawable/ic_cat_social_alt.xml b/app/src/main/res/drawable/ic_cat_social_alt.xml deleted file mode 100644 index 5eec74495..000000000 --- a/app/src/main/res/drawable/ic_cat_social_alt.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_delete.xml b/app/src/main/res/drawable/ic_delete.xml deleted file mode 100644 index 532552cc2..000000000 --- a/app/src/main/res/drawable/ic_delete.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_download_alt.xml b/app/src/main/res/drawable/ic_download_alt.xml deleted file mode 100644 index 249144de3..000000000 --- a/app/src/main/res/drawable/ic_download_alt.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_empty_box.xml b/app/src/main/res/drawable/ic_empty_box.xml deleted file mode 100644 index ba72da211..000000000 --- a/app/src/main/res/drawable/ic_empty_box.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_filter.xml b/app/src/main/res/drawable/ic_filter.xml index be37f6188..b187a3f1b 100644 --- a/app/src/main/res/drawable/ic_filter.xml +++ b/app/src/main/res/drawable/ic_filter.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_installation.xml b/app/src/main/res/drawable/ic_installation.xml index 79eedd140..451f010d0 100644 --- a/app/src/main/res/drawable/ic_installation.xml +++ b/app/src/main/res/drawable/ic_installation.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_language.xml b/app/src/main/res/drawable/ic_language.xml index bc824bfe3..132447dfd 100644 --- a/app/src/main/res/drawable/ic_language.xml +++ b/app/src/main/res/drawable/ic_language.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_login.xml b/app/src/main/res/drawable/ic_login.xml deleted file mode 100644 index 47078b5df..000000000 --- a/app/src/main/res/drawable/ic_login.xml +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_mail.xml b/app/src/main/res/drawable/ic_mail.xml new file mode 100644 index 000000000..19f15b550 --- /dev/null +++ b/app/src/main/res/drawable/ic_mail.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_map.xml b/app/src/main/res/drawable/ic_map.xml new file mode 100644 index 000000000..95e993415 --- /dev/null +++ b/app/src/main/res/drawable/ic_map.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_network.xml b/app/src/main/res/drawable/ic_network.xml index fb5a18730..261d1e769 100644 --- a/app/src/main/res/drawable/ic_network.xml +++ b/app/src/main/res/drawable/ic_network.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_no_network.xml b/app/src/main/res/drawable/ic_no_network.xml deleted file mode 100644 index 65fbf377e..000000000 --- a/app/src/main/res/drawable/ic_no_network.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_no_updates.xml b/app/src/main/res/drawable/ic_no_updates.xml deleted file mode 100644 index 1d65d0704..000000000 --- a/app/src/main/res/drawable/ic_no_updates.xml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_notifications.xml b/app/src/main/res/drawable/ic_notifications.xml index fb436ff3c..6cec7c206 100644 --- a/app/src/main/res/drawable/ic_notifications.xml +++ b/app/src/main/res/drawable/ic_notifications.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_playstore.xml b/app/src/main/res/drawable/ic_playstore.xml deleted file mode 100644 index 3440b6e92..000000000 --- a/app/src/main/res/drawable/ic_playstore.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - diff --git a/app/src/main/res/drawable/ic_read_more.xml b/app/src/main/res/drawable/ic_read_more.xml deleted file mode 100644 index 095bd5e93..000000000 --- a/app/src/main/res/drawable/ic_read_more.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - diff --git a/app/src/main/res/drawable/ic_search_alt.xml b/app/src/main/res/drawable/ic_search_alt.xml deleted file mode 100644 index 9b80c53eb..000000000 --- a/app/src/main/res/drawable/ic_search_alt.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_share.xml b/app/src/main/res/drawable/ic_share.xml deleted file mode 100644 index 3ab1fb04e..000000000 --- a/app/src/main/res/drawable/ic_share.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - diff --git a/app/src/main/res/drawable/ic_shield.xml b/app/src/main/res/drawable/ic_shield.xml new file mode 100644 index 000000000..28c2294fa --- /dev/null +++ b/app/src/main/res/drawable/ic_shield.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_ui.xml b/app/src/main/res/drawable/ic_ui.xml index df512373c..db3006a20 100644 --- a/app/src/main/res/drawable/ic_ui.xml +++ b/app/src/main/res/drawable/ic_ui.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/ic_unknown.xml b/app/src/main/res/drawable/ic_unknown.xml deleted file mode 100644 index d385d1f2c..000000000 --- a/app/src/main/res/drawable/ic_unknown.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_update.xml b/app/src/main/res/drawable/ic_update.xml index 0f9a8bfba..00fd74049 100644 --- a/app/src/main/res/drawable/ic_update.xml +++ b/app/src/main/res/drawable/ic_update.xml @@ -4,6 +4,6 @@ android:viewportWidth="24" android:viewportHeight="24"> diff --git a/app/src/main/res/drawable/rounded_bg.xml b/app/src/main/res/drawable/rounded_bg.xml deleted file mode 100644 index 3e6f762d1..000000000 --- a/app/src/main/res/drawable/rounded_bg.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/drawable/search_bg.xml b/app/src/main/res/drawable/search_bg.xml deleted file mode 100644 index 5228038d5..000000000 --- a/app/src/main/res/drawable/search_bg.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml index 5e08571eb..83c35aedb 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -74,8 +74,21 @@ app:autoSizeTextType="uniform" tools:visibility="visible" /> - - + + + + @@ -85,6 +98,7 @@ android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_marginTop="@dimen/margin_small" android:orientation="horizontal" android:visibility="invisible" tools:itemCount="5" @@ -128,26 +142,25 @@ - - - + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index f5ee0b003..ed56b5cd1 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -58,6 +58,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" + android:background="?android:attr/windowBackground" app:headerLayout="@layout/item_nav_header" app:itemIconTint="?android:attr/colorAccent" app:itemTextAppearance="@style/TextAppearance.Aurora.Line2" diff --git a/app/src/main/res/layout/activity_read_more.xml b/app/src/main/res/layout/activity_read_more.xml new file mode 100644 index 000000000..83d89f1af --- /dev/null +++ b/app/src/main/res/layout/activity_read_more.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_dev_applist.xml b/app/src/main/res/layout/fragment_dev_applist.xml deleted file mode 100644 index bd89a4ac0..000000000 --- a/app/src/main/res/layout/fragment_dev_applist.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/include_details_actions_button.xml b/app/src/main/res/layout/include_details_actions_button.xml index 54d18d97e..6454288af 100644 --- a/app/src/main/res/layout/include_details_actions_button.xml +++ b/app/src/main/res/layout/include_details_actions_button.xml @@ -46,7 +46,7 @@ diff --git a/app/src/main/res/layout/include_details_dev_info.xml b/app/src/main/res/layout/include_details_dev_info.xml new file mode 100644 index 000000000..fbef2aff9 --- /dev/null +++ b/app/src/main/res/layout/include_details_dev_info.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/include_details_exodus.xml b/app/src/main/res/layout/include_details_exodus.xml index 813e6151a..1218f5b8f 100644 --- a/app/src/main/res/layout/include_details_exodus.xml +++ b/app/src/main/res/layout/include_details_exodus.xml @@ -31,10 +31,11 @@ + android:src="@drawable/ic_shield" + android:tint="?android:attr/colorAccent" /> - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_exodus.xml b/app/src/main/res/layout/item_exodus.xml index a581e75d4..47487c141 100644 --- a/app/src/main/res/layout/item_exodus.xml +++ b/app/src/main/res/layout/item_exodus.xml @@ -1,5 +1,4 @@ - - + android:layout_height="@dimen/height_nav_header" + android:background="@color/colorScrim"> + + + android:layout_above="@id/line1" + android:layout_marginBottom="@dimen/margin_small" + android:layout_marginStart="@dimen/margin_normal" /> \ No newline at end of file diff --git a/app/src/main/res/layout/item_sheet_menu.xml b/app/src/main/res/layout/item_sheet_menu.xml deleted file mode 100644 index 392c2738c..000000000 --- a/app/src/main/res/layout/item_sheet_menu.xml +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_sheet_menu_iconed.xml b/app/src/main/res/layout/item_sheet_menu_iconed.xml deleted file mode 100644 index daea72679..000000000 --- a/app/src/main/res/layout/item_sheet_menu_iconed.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/view_cluster_apps.xml b/app/src/main/res/layout/view_cluster_apps.xml deleted file mode 100644 index d52b076fb..000000000 --- a/app/src/main/res/layout/view_cluster_apps.xml +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/view_error.xml b/app/src/main/res/layout/view_error.xml deleted file mode 100644 index 8c9a62bf6..000000000 --- a/app/src/main/res/layout/view_error.xml +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/view_featured_apps.xml b/app/src/main/res/layout/view_featured_apps.xml deleted file mode 100644 index e54f66a4b..000000000 --- a/app/src/main/res/layout/view_featured_apps.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/menu/menu_accounts.xml b/app/src/main/res/menu/menu_accounts.xml deleted file mode 100644 index fcf6b4924..000000000 --- a/app/src/main/res/menu/menu_accounts.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - diff --git a/app/src/main/res/menu/menu_download_single.xml b/app/src/main/res/menu/menu_download_single.xml deleted file mode 100644 index 7c9e70084..000000000 --- a/app/src/main/res/menu/menu_download_single.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph_main.xml b/app/src/main/res/navigation/nav_graph_main.xml index e6e4c5c40..d69c8ceec 100644 --- a/app/src/main/res/navigation/nav_graph_main.xml +++ b/app/src/main/res/navigation/nav_graph_main.xml @@ -22,4 +22,10 @@ android:name="com.aurora.store.ui.main.fragment.category.CategoriesFragment" android:label="@string/title_categories" tools:layout="@layout/fragment_categories" /> + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 458eb581c..f038db14e 100755 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -44,5 +44,6 @@ 52dp 52dp + 148dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index dcecd5cae..d12205cee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -87,11 +87,17 @@ "Read all reviews" "Contains ads" "Download" + "Developer contact" + "Email" + "Address" + "Website" "Add to favourites" "Remove from favourites" "Install" "Installing" "Read more" + "Updated on" + "Version" "No ads" "App permissions" "Purchase" diff --git a/app/src/main/res/values/styles_text.xml b/app/src/main/res/values/styles_text.xml index 1d4924d8d..3648bd425 100644 --- a/app/src/main/res/values/styles_text.xml +++ b/app/src/main/res/values/styles_text.xml @@ -68,7 +68,7 @@ diff --git a/app/src/main/res/xml/searchable.xml b/app/src/main/res/xml/searchable.xml deleted file mode 100644 index 5ae74ae09..000000000 --- a/app/src/main/res/xml/searchable.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - \ No newline at end of file