diff --git a/app/build.gradle b/app/build.gradle index 72ab03b8f..a70a3da2f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,7 +56,7 @@ dependencies { implementation 'com.squareup.picasso:picasso:2.5.2' implementation 'com.squareup.okhttp3:okhttp:3.10.0' implementation 'com.github.percolate:caffeine:0.4.7' - implementation 'com.github.florent37:shapeofview:1.0.6' + implementation 'com.github.florent37:shapeofview:1.1.0' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' implementation 'com.jakewharton:butterknife:8.8.1' annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1' diff --git a/app/src/main/java/com/dragons/aurora/Util.java b/app/src/main/java/com/dragons/aurora/Util.java index 896e55e44..4c68f3fed 100644 --- a/app/src/main/java/com/dragons/aurora/Util.java +++ b/app/src/main/java/com/dragons/aurora/Util.java @@ -1,8 +1,14 @@ package com.dragons.aurora; import android.content.Context; +import android.content.res.TypedArray; +import android.graphics.drawable.GradientDrawable; import android.preference.PreferenceManager; +import android.support.v7.widget.RecyclerView; import android.text.TextUtils; +import android.util.TypedValue; +import android.view.animation.AnimationUtils; +import android.view.animation.LayoutAnimationController; import com.dragons.aurora.downloader.DownloadState; import com.dragons.aurora.fragment.PreferenceFragment; @@ -86,6 +92,10 @@ public class Util { PreferenceManager.getDefaultSharedPreferences(context).edit().putString(key, TextUtils.join(DELIMITER, set)).apply(); } + static public void putBoolean(Context context, String key, boolean value) { + PreferenceManager.getDefaultSharedPreferences(context).edit().putBoolean(key, value).apply(); + } + static public int parseInt(String intAsString, int defaultValue) { try { return Integer.parseInt(intAsString); @@ -158,4 +168,29 @@ public class Util { } } + public static int getStyledAttribute(Context context, int styleID) { + TypedArray arr = context.obtainStyledAttributes(new TypedValue().data, new int[]{styleID}); + int styledColor = arr.getColor(0, -1); + arr.recycle(); + return styledColor; + } + + public static GradientDrawable getGradient(int startColor, int endColor) { + GradientDrawable gd = new GradientDrawable(); + gd.setOrientation(GradientDrawable.Orientation.TOP_BOTTOM); + gd.setColors(new int[]{startColor, endColor}); + gd.setShape(GradientDrawable.RECTANGLE); + gd.setGradientType(GradientDrawable.LINEAR_GRADIENT); + gd.setDither(true); + gd.setSize(200, 200); + return gd; + } + + public static void reloadRecycler(final RecyclerView recyclerView) { + final Context context = recyclerView.getContext(); + final LayoutAnimationController controller = AnimationUtils.loadLayoutAnimation(context, R.anim.layout_anim); + recyclerView.setLayoutAnimation(controller); + recyclerView.getAdapter().notifyDataSetChanged(); + recyclerView.scheduleLayoutAnimation(); + } } diff --git a/app/src/main/java/com/dragons/aurora/activities/AccountsActivity.java b/app/src/main/java/com/dragons/aurora/activities/AccountsActivity.java index c5bac5dcd..28cd7aa1e 100644 --- a/app/src/main/java/com/dragons/aurora/activities/AccountsActivity.java +++ b/app/src/main/java/com/dragons/aurora/activities/AccountsActivity.java @@ -1,7 +1,6 @@ package com.dragons.aurora.activities; import android.content.Intent; -import android.graphics.Color; import android.os.Bundle; import android.view.View; diff --git a/app/src/main/java/com/dragons/aurora/activities/AuroraActivity.java b/app/src/main/java/com/dragons/aurora/activities/AuroraActivity.java index f4554bacf..9536de4ab 100755 --- a/app/src/main/java/com/dragons/aurora/activities/AuroraActivity.java +++ b/app/src/main/java/com/dragons/aurora/activities/AuroraActivity.java @@ -4,6 +4,7 @@ import android.Manifest; import android.content.BroadcastReceiver; import android.content.Intent; import android.graphics.Color; +import android.os.Build; import android.os.Bundle; import android.support.v4.app.ActivityCompat; import android.support.v4.view.ViewPager; @@ -35,7 +36,10 @@ public class AuroraActivity extends BaseActivity implements View.OnClickListener protected void onCreate(Bundle savedInstanceState) { setTheme(getThemeFromPref()); super.onCreate(savedInstanceState); - getWindow().setStatusBarColor(Color.TRANSPARENT); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) + getWindow().setStatusBarColor(Color.TRANSPARENT); + else + getWindow().setStatusBarColor(getResources().getColor(R.color.semi_transparent)); setContentView(R.layout.activity_main); ButterKnife.bind(this); @@ -43,7 +47,6 @@ public class AuroraActivity extends BaseActivity implements View.OnClickListener bottm_bar.setSecondaryMenu(R.menu.nav_menu, this); viewPager.setAdapter(new ViewPagerAdapter(this, getSupportFragmentManager())); viewPager.setOffscreenPageLimit(3); - ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } diff --git a/app/src/main/java/com/dragons/aurora/activities/DetailsActivity.java b/app/src/main/java/com/dragons/aurora/activities/DetailsActivity.java index 4f7198532..d677003fe 100644 --- a/app/src/main/java/com/dragons/aurora/activities/DetailsActivity.java +++ b/app/src/main/java/com/dragons/aurora/activities/DetailsActivity.java @@ -2,7 +2,6 @@ package com.dragons.aurora.activities; import android.content.Context; import android.content.Intent; -import android.graphics.Color; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; diff --git a/app/src/main/java/com/dragons/aurora/activities/ManualDownloadActivity.java b/app/src/main/java/com/dragons/aurora/activities/ManualDownloadActivity.java index ff1e9e067..7ed1c1ff6 100644 --- a/app/src/main/java/com/dragons/aurora/activities/ManualDownloadActivity.java +++ b/app/src/main/java/com/dragons/aurora/activities/ManualDownloadActivity.java @@ -1,20 +1,28 @@ package com.dragons.aurora.activities; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.drawable.BitmapDrawable; import android.os.Bundle; +import android.support.v7.graphics.Palette; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; +import android.widget.ScrollView; import android.widget.TextView; import com.dragons.aurora.R; +import com.dragons.aurora.Util; import com.dragons.aurora.fragment.details.DownloadOrInstall; import com.dragons.aurora.model.App; import com.dragons.aurora.task.playstore.PurchaseCheckTask; -import com.dragons.aurora.view.AdaptiveToolbar; +import com.squareup.picasso.Callback; +import com.squareup.picasso.Picasso; import java.util.Timer; import java.util.TimerTask; @@ -27,9 +35,9 @@ public class ManualDownloadActivity extends DetailsActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN); getWindow().setStatusBarColor(getResources().getColor(R.color.semi_transparent)); - AdaptiveToolbar dadtb = findViewById(R.id.d_adtb); - dadtb.getAction_icon().setOnClickListener((v -> this.onBackPressed())); } @Override @@ -52,17 +60,20 @@ public class ManualDownloadActivity extends DetailsActivity { private void draw(App app) { setTitle(app.getDisplayName()); setContentView(R.layout.manual_download_activity_layout); + drawDetails(); + if (app.getOfferType() == 0) { app.setOfferType(1); } - ((TextView) findViewById(R.id.compatibility)).setText( - app.getVersionCode() > 0 - ? R.string.manual_download_compatible - : R.string.manual_download_incompatible - ); + + ((TextView) findViewById(R.id.compatibility)).setText(app.getVersionCode() > 0 + ? R.string.manual_download_compatible + : R.string.manual_download_incompatible); + if (app.getVersionCode() > 0) { ((EditText) findViewById(R.id.version_code)).setHint(String.valueOf(latestVersionCode)); } + DownloadOrInstall downloadOrInstallFragment = new DownloadOrInstall(this, app); ManualDownloadTextWatcher textWatcher = new ManualDownloadTextWatcher(app, findViewById(R.id.download), @@ -76,6 +87,56 @@ public class ManualDownloadActivity extends DetailsActivity { downloadOrInstallFragment.draw(); } + private void drawDetails() { + ((TextView) findViewById(R.id.displayName)).setText(app.getDisplayName()); + ((TextView) findViewById(R.id.packageName)).setText(app.getPackageName()); + ((TextView) findViewById(R.id.versionString)).setText(String.valueOf(app.getVersionCode())); + + ScrollView disclaimer = findViewById(R.id.disclaimer); + ImageView showLessMore = findViewById(R.id.show_LessMore); + showLessMore.setOnClickListener(v -> { + if (disclaimer.getVisibility() == View.GONE) { + disclaimer.setVisibility(View.VISIBLE); + showLessMore.animate().rotation(180).start(); + } else { + disclaimer.setVisibility(View.GONE); + showLessMore.animate().rotation(0).start(); + } + }); + + ImageView appIcon = findViewById(R.id.icon); + Picasso + .with(this) + .load(app.getIconInfo().getUrl()) + .placeholder(R.color.transparent) + .into((ImageView) findViewById(R.id.icon), new Callback() { + @Override + public void onSuccess() { + Bitmap bitmap = ((BitmapDrawable) appIcon.getDrawable()).getBitmap(); + if (bitmap != null) + getPalette(bitmap); + } + + @Override + public void onError() { + + } + }); + } + + private void getPalette(Bitmap bitmap) { + Palette.from(bitmap).generate(this::drawGradients); + } + + private void drawGradients(Palette myPalette) { + (findViewById(R.id.diagonalView1)) + .setBackground(Util.getGradient(myPalette.getLightVibrantColor(Color.LTGRAY), + myPalette.getDominantColor(Color.GRAY))); + (findViewById(R.id.diagonalView2)) + .setBackground(Util.getGradient(myPalette.getLightVibrantColor(Color.GRAY), + myPalette.getVibrantColor(Color.DKGRAY))); + } + static private class ManualDownloadTextWatcher implements TextWatcher { static private final int TIMEOUT = 1000; diff --git a/app/src/main/java/com/dragons/aurora/activities/SearchActivity.java b/app/src/main/java/com/dragons/aurora/activities/SearchActivity.java index 00ed7afa2..c5995b4a3 100644 --- a/app/src/main/java/com/dragons/aurora/activities/SearchActivity.java +++ b/app/src/main/java/com/dragons/aurora/activities/SearchActivity.java @@ -11,7 +11,6 @@ import android.support.design.widget.FloatingActionButton; import android.support.v7.widget.RecyclerView; import android.text.TextUtils; import android.util.Log; -import android.view.Menu; import android.view.View; import android.widget.Button; import android.widget.ImageView; @@ -53,9 +52,9 @@ public class SearchActivity extends AuroraActivity implements SingleDownloadsAda switch (newState) { case BottomSheetBehavior.STATE_HIDDEN: break; - //case BottomSheetBehavior.STATE_EXPANDED: - // filter_fab.hide(); - // break; + case BottomSheetBehavior.STATE_EXPANDED: + filter_fab.hide(); + break; case BottomSheetBehavior.STATE_COLLAPSED: filter_fab.show(); break; @@ -83,7 +82,7 @@ public class SearchActivity extends AuroraActivity implements SingleDownloadsAda filter_apply.setOnClickListener(click -> { toggleBottomSheet(); new Handler(Looper.getMainLooper()).postDelayed(() -> { - getCategoryApps(query,getTitleString()); + getCategoryApps(query, getTitleString()); }, 500); }); @@ -112,7 +111,7 @@ public class SearchActivity extends AuroraActivity implements SingleDownloadsAda getCategoryApps(query, getTitleString()); } } - + @Override public void onDownloadBadgeClickListener() { singleDownloadAdapter.notifyDataSetChanged(); @@ -130,6 +129,7 @@ public class SearchActivity extends AuroraActivity implements SingleDownloadsAda getResources().getStringArray(R.array.filterDownloadsLabels), getResources().getStringArray(R.array.filterDownloadsValues)); singleDownloadAdapter.setOnDownloadBadgeClickListener(this); + filter_downloads.setItemViewCacheSize(10); filter_downloads.setAdapter(singleDownloadAdapter); } @@ -139,6 +139,7 @@ public class SearchActivity extends AuroraActivity implements SingleDownloadsAda getResources().getStringArray(R.array.filterRatingLabels), getResources().getStringArray(R.array.filterRatingValues)); singleRatingAdapter.setOnRatingBadgeClickListener(this); + filter_ratings.setItemViewCacheSize(10); filter_ratings.setAdapter(singleRatingAdapter); } diff --git a/app/src/main/java/com/dragons/aurora/adapters/AllCategoriesAdapter.java b/app/src/main/java/com/dragons/aurora/adapters/AllCategoriesAdapter.java index 4c3cbabe4..d47a332b5 100644 --- a/app/src/main/java/com/dragons/aurora/adapters/AllCategoriesAdapter.java +++ b/app/src/main/java/com/dragons/aurora/adapters/AllCategoriesAdapter.java @@ -3,19 +3,17 @@ package com.dragons.aurora.adapters; import android.content.Context; import android.preference.PreferenceManager; import android.support.annotation.NonNull; +import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import com.dragons.aurora.R; import com.dragons.aurora.SharedPreferencesTranslator; import com.dragons.aurora.activities.CategoryAppsActivity; -import com.github.florent37.shapeofview.shapes.CircleView; -import com.github.florent37.shapeofview.shapes.RoundRectView; import com.percolate.caffeine.ViewUtils; import java.util.ArrayList; @@ -95,7 +93,7 @@ public class AllCategoriesAdapter extends RecyclerView.Adapter { - private List appsToAdd; + public List appsToAdd; private Context context; private ViewHolder viewHolder; @@ -110,7 +109,7 @@ public class InstalledAppsAdapter extends RecyclerView.Adapter { @@ -100,7 +97,7 @@ public class SingleDownloadsAdapter extends RecyclerView.Adapter { @@ -100,7 +97,7 @@ public class SingleRatingsAdapter extends RecyclerView.Adapter { - private List appsToAdd; + public List appsToAdd; private Context context; public UpdatableAppsAdapter(Context context, List appsToAdd) { @@ -58,13 +57,10 @@ public class UpdatableAppsAdapter extends RecyclerView.Adapter getActivity().onBackPressed()); @@ -118,8 +118,8 @@ public class AccountsFragment extends UtilFragment { private void drawEmpty() { show(v, R.id.emptyCard); - ImageButton addSecondary = v.findViewById(R.id.add_secondary); - addSecondary.setOnClickListener(v -> switchGoogle()); + CircleView add_account = v.findViewById(R.id.add_account); + add_account.setOnClickListener(v -> switchGoogle()); } private void drawDummyButtons() { diff --git a/app/src/main/java/com/dragons/aurora/fragment/CategoryAppsFragment.java b/app/src/main/java/com/dragons/aurora/fragment/CategoryAppsFragment.java index bb5027fc6..0cebcc16a 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/CategoryAppsFragment.java +++ b/app/src/main/java/com/dragons/aurora/fragment/CategoryAppsFragment.java @@ -71,9 +71,9 @@ public class CategoryAppsFragment extends CategoryAppsTask implements SingleDown switch (newState) { case BottomSheetBehavior.STATE_HIDDEN: break; - //case BottomSheetBehavior.STATE_EXPANDED: - // filter_fab.hide(); - // break; + case BottomSheetBehavior.STATE_EXPANDED: + filter_fab.hide(); + break; case BottomSheetBehavior.STATE_COLLAPSED: filter_fab.show(); break; @@ -135,6 +135,7 @@ public class CategoryAppsFragment extends CategoryAppsTask implements SingleDown getResources().getStringArray(R.array.filterDownloadsLabels), getResources().getStringArray(R.array.filterDownloadsValues)); singleDownloadAdapter.setOnDownloadBadgeClickListener(this); + filter_downloads.setItemViewCacheSize(10); filter_downloads.setAdapter(singleDownloadAdapter); } @@ -144,6 +145,7 @@ public class CategoryAppsFragment extends CategoryAppsTask implements SingleDown getResources().getStringArray(R.array.filterRatingLabels), getResources().getStringArray(R.array.filterRatingValues)); singleRatingAdapter.setOnRatingBadgeClickListener(this); + filter_ratings.setItemViewCacheSize(10); filter_ratings.setAdapter(singleRatingAdapter); } diff --git a/app/src/main/java/com/dragons/aurora/fragment/InstalledAppsFragment.java b/app/src/main/java/com/dragons/aurora/fragment/InstalledAppsFragment.java index e1d22cd4c..c20c02ff5 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/InstalledAppsFragment.java +++ b/app/src/main/java/com/dragons/aurora/fragment/InstalledAppsFragment.java @@ -1,7 +1,6 @@ package com.dragons.aurora.fragment; import android.os.Bundle; -import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.widget.LinearLayoutManager; @@ -11,19 +10,21 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; +import android.widget.Button; import com.dragons.aurora.PlayStoreApiAuthenticator; import com.dragons.aurora.R; +import com.dragons.aurora.Util; import com.dragons.aurora.adapters.InstalledAppsAdapter; import com.dragons.aurora.model.App; import com.dragons.aurora.task.playstore.InstalledAppsTaskHelper; -import com.percolate.caffeine.ViewUtils; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; +import butterknife.BindView; +import butterknife.ButterKnife; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -31,11 +32,19 @@ import io.reactivex.schedulers.Schedulers; public class InstalledAppsFragment extends InstalledAppsTaskHelper { + @BindView(R.id.swipe_refresh_layout) + SwipeRefreshLayout swipeRefreshLayout; + @BindView(R.id.installed_apps_list) + RecyclerView recyclerView; + @BindView(R.id.ohhSnap_retry) + Button retry_update; + @BindView(R.id.includeSystem) + SwitchCompat includeSystem; + private View view; private Disposable loadApps; - private SwipeRefreshLayout swipeRefreshLayout; private List installedApps = new ArrayList<>(new HashSet<>()); - private SwitchCompat includeSystem; + private InstalledAppsAdapter installedAppsAdapter; public static InstalledAppsFragment newInstance() { return new InstalledAppsFragment(); @@ -59,28 +68,29 @@ public class InstalledAppsFragment extends InstalledAppsTaskHelper { } view = inflater.inflate(R.layout.app_installed_inc, container, false); + ButterKnife.bind(this, view); - swipeRefreshLayout = ViewUtils.findViewById(view, R.id.swipe_refresh_layout); swipeRefreshLayout.setOnRefreshListener(() -> { - if (isLoggedIn()) + if (isLoggedIn() && isConnected(getContext())) loadMarketApps(); else swipeRefreshLayout.setRefreshing(false); }); - includeSystem = view.findViewById(R.id.includeSystem); + retry_update.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.ohhSnap); + if (installedAppsAdapter == null || installedAppsAdapter.getItemCount() <= 0) + loadMarketApps(); + } + }); + includeSystem.setChecked(PreferenceFragment.getBoolean(getContext(), "INCLUDE_SYSTEM")); includeSystem.setOnCheckedChangeListener((buttonView, isChecked) -> { if (isChecked) - PreferenceManager.getDefaultSharedPreferences(getActivity()) - .edit() - .putBoolean("INCLUDE_SYSTEM", true) - .apply(); + Util.putBoolean(getContext(), "INCLUDE_SYSTEM", true); else - PreferenceManager.getDefaultSharedPreferences(getActivity()) - .edit() - .putBoolean("INCLUDE_SYSTEM", false) - .apply(); + Util.putBoolean(getContext(), "INCLUDE_SYSTEM", false); loadMarketApps(); }); @@ -100,12 +110,11 @@ public class InstalledAppsFragment extends InstalledAppsTaskHelper { swipeRefreshLayout.setRefreshing(false); } - protected void setupListView(List appsToAdd) { - RecyclerView recyclerView = view.findViewById(R.id.installed_apps_list); - recyclerView.setHasFixedSize(true); + protected void setupRecycler(List appsToAdd) { + installedAppsAdapter = new InstalledAppsAdapter(getActivity(), appsToAdd); recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(getContext(), R.anim.layout_anim)); - recyclerView.setAdapter(new InstalledAppsAdapter(getActivity(), appsToAdd)); + recyclerView.setAdapter(installedAppsAdapter); } public void loadMarketApps() { @@ -115,12 +124,24 @@ public class InstalledAppsFragment extends InstalledAppsTaskHelper { .observeOn(AndroidSchedulers.mainThread()) .subscribe((appList) -> { if (view != null) { - installedApps = new ArrayList<>(new HashSet<>(appList)); - Collections.sort(installedApps); - setupListView(installedApps); + installedApps.clear(); + installedApps.addAll(appList); + setupList(installedApps); swipeRefreshLayout.setRefreshing(false); } - }, this::processException); + }, err -> { + swipeRefreshLayout.setRefreshing(false); + processException(err); + show(view, R.id.ohhSnap); + }); } + private void setupList(List installedApps) { + if (recyclerView.getAdapter() == null) + setupRecycler(installedApps); + else { + installedAppsAdapter.appsToAdd = installedApps; + Util.reloadRecycler(recyclerView); + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/dragons/aurora/fragment/SearchAppsFragment.java b/app/src/main/java/com/dragons/aurora/fragment/SearchAppsFragment.java index b7cb7860c..6f92c1e47 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/SearchAppsFragment.java +++ b/app/src/main/java/com/dragons/aurora/fragment/SearchAppsFragment.java @@ -9,7 +9,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; -import android.widget.ProgressBar; +import android.widget.Button; +import android.widget.RelativeLayout; import com.dragons.aurora.AppListIterator; import com.dragons.aurora.PlayStoreApiAuthenticator; @@ -37,8 +38,12 @@ public class SearchAppsFragment extends SearchTask { RecyclerView recyclerView; @BindView(R.id.adaptive_toolbar) AdaptiveToolbar adaptiveToolbar; + @BindView(R.id.unicorn) + RelativeLayout unicorn; + @BindView(R.id.ohhSnap) + RelativeLayout ohhSnap; @BindView(R.id.progress) - ProgressBar progressBar; + RelativeLayout progress; private String title; private boolean setLooper = true; @@ -56,6 +61,20 @@ public class SearchAppsFragment extends SearchTask { adaptiveToolbar.getAction_icon().setOnClickListener((v -> this.getActivity().onBackPressed())); adaptiveToolbar.getTitle0().setText(title); adaptiveToolbar.getTitle1().setVisibility(View.GONE); + Button ohhSnap_retry = view.findViewById(R.id.ohhSnap_retry); + ohhSnap_retry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.ohhSnap); + fetchSearchAppsList(false); + } + }); + Button retry_querry = view.findViewById(R.id.recheck_query); + retry_querry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.unicorn); + fetchSearchAppsList(false); + } + }); return view; } @@ -85,6 +104,7 @@ public class SearchAppsFragment extends SearchTask { } protected void setupListView(List appsToAdd) { + progress.setVisibility(View.GONE); LinearLayoutManager mLayoutManager = new LinearLayoutManager(this.getActivity()); endlessAppsAdapter = new EndlessAppsAdapter(getActivity(), appsToAdd); recyclerView.setLayoutManager(mLayoutManager); @@ -93,7 +113,7 @@ public class SearchAppsFragment extends SearchTask { recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - if ((visibleItems + oldItems) >= totalItems + 2) + if ((visibleItems + oldItems) >= totalItems + 2 || endlessAppsAdapter.getItemCount() > 20) setLooper = false; if (dy > 0) { visibleItems = mLayoutManager.getChildCount(); @@ -124,7 +144,10 @@ public class SearchAppsFragment extends SearchTask { } else setupListView(appList); } - }, this::processException); + }, err -> { + processException(err); + ohhSnap.setVisibility(View.VISIBLE); + }); } public void addApps(List appsToAdd) { @@ -139,5 +162,7 @@ public class SearchAppsFragment extends SearchTask { public void getLooper() { if (iterator.hasNext() && setLooper) fetchSearchAppsList(true); + else if (!iterator.hasNext() && endlessAppsAdapter.getItemCount() <= 0) + unicorn.setVisibility(View.VISIBLE); } } \ No newline at end of file diff --git a/app/src/main/java/com/dragons/aurora/fragment/SearchFragment.java b/app/src/main/java/com/dragons/aurora/fragment/SearchFragment.java index bbed3e5a1..884a595dc 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/SearchFragment.java +++ b/app/src/main/java/com/dragons/aurora/fragment/SearchFragment.java @@ -6,6 +6,7 @@ import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.v7.widget.CardView; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; @@ -44,7 +45,7 @@ public class SearchFragment extends SearchHistoryTask implements HistoryItemTouc @BindView(R.id.searchHistory) RecyclerView recyclerView; @BindView(R.id.search_layout) - RoundRectView search_layout; + CardView search_layout; @BindView(R.id.emptyView) TextView emptyView; @BindView(R.id.clearAll) diff --git a/app/src/main/java/com/dragons/aurora/fragment/TopFreeApps.java b/app/src/main/java/com/dragons/aurora/fragment/TopFreeApps.java index a6f7caad7..86399ec07 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/TopFreeApps.java +++ b/app/src/main/java/com/dragons/aurora/fragment/TopFreeApps.java @@ -8,6 +8,8 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; +import android.widget.Button; +import android.widget.RelativeLayout; import com.dragons.aurora.AppListIterator; import com.dragons.aurora.PlayStoreApiAuthenticator; @@ -21,6 +23,8 @@ import com.dragons.aurora.task.playstore.CategoryAppsTask; import java.io.IOException; import java.util.List; +import butterknife.BindView; +import butterknife.ButterKnife; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -28,12 +32,20 @@ import io.reactivex.schedulers.Schedulers; public class TopFreeApps extends CategoryAppsTask { + @BindView(R.id.endless_apps_list) + RecyclerView recyclerView; + @BindView(R.id.unicorn) + RelativeLayout unicorn; + @BindView(R.id.ohhSnap) + RelativeLayout ohhSnap; + @BindView(R.id.progress) + RelativeLayout progress; + private boolean setLooper = true; private boolean loading = true; private int oldItems, visibleItems, totalItems; private View view; private AppListIterator iterator; - private RecyclerView recyclerView; private EndlessAppsAdapter endlessAppsAdapter; private Disposable disposable; @@ -56,9 +68,24 @@ public class TopFreeApps extends CategoryAppsTask { @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.app_endless_inc, container, false); - setRecyclerView(view.findViewById(R.id.endless_apps_list)); + ButterKnife.bind(this, view); + setRecyclerView(recyclerView); setIterator(setupIterator(CategoryAppsFragment.categoryId, GooglePlayAPI.SUBCATEGORY.TOP_FREE)); fetchCategoryApps(false); + Button ohhSnap_retry = view.findViewById(R.id.ohhSnap_retry); + ohhSnap_retry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.ohhSnap); + fetchCategoryApps(false); + } + }); + Button retry_querry = view.findViewById(R.id.recheck_query); + retry_querry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.unicorn); + fetchCategoryApps(false); + } + }); return view; } @@ -78,6 +105,7 @@ public class TopFreeApps extends CategoryAppsTask { } protected void setupListView(List appsToAdd) { + progress.setVisibility(View.GONE); LinearLayoutManager mLayoutManager = new LinearLayoutManager(this.getActivity()); endlessAppsAdapter = new EndlessAppsAdapter(getActivity(), appsToAdd); recyclerView.setLayoutManager(mLayoutManager); @@ -86,7 +114,7 @@ public class TopFreeApps extends CategoryAppsTask { recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { - if ((visibleItems + oldItems) >= totalItems + 2) + if ((visibleItems + oldItems) >= totalItems + 2 || endlessAppsAdapter.getItemCount() > 20) setLooper = false; if (dy > 0) { visibleItems = mLayoutManager.getChildCount(); @@ -115,7 +143,10 @@ public class TopFreeApps extends CategoryAppsTask { addApps(appList); } else setupListView(appList); - }, this::processException); + }, err -> { + processException(err); + ohhSnap.setVisibility(View.VISIBLE); + }); } public void addApps(List appsToAdd) { @@ -130,5 +161,7 @@ public class TopFreeApps extends CategoryAppsTask { public void getLooper() { if (iterator.hasNext() && setLooper) fetchCategoryApps(true); + else if (!iterator.hasNext() && endlessAppsAdapter.getItemCount() <= 0) + unicorn.setVisibility(View.VISIBLE); } } \ No newline at end of file diff --git a/app/src/main/java/com/dragons/aurora/fragment/TopGrossingApps.java b/app/src/main/java/com/dragons/aurora/fragment/TopGrossingApps.java index 2852b362b..3c7fa2f49 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/TopGrossingApps.java +++ b/app/src/main/java/com/dragons/aurora/fragment/TopGrossingApps.java @@ -2,21 +2,50 @@ package com.dragons.aurora.fragment; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.RelativeLayout; import com.dragons.aurora.R; import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; +import butterknife.BindView; +import butterknife.ButterKnife; + public class TopGrossingApps extends TopFreeApps { + @BindView(R.id.endless_apps_list) + RecyclerView recyclerView; + @BindView(R.id.unicorn) + RelativeLayout unicorn; + @BindView(R.id.ohhSnap) + RelativeLayout ohhSnap; + @BindView(R.id.progress) + RelativeLayout progress; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.app_endless_inc, container, false); + ButterKnife.bind(this, view); setIterator(setupIterator(CategoryAppsFragment.categoryId, GooglePlayAPI.SUBCATEGORY.TOP_GROSSING)); - setRecyclerView(view.findViewById(R.id.endless_apps_list)); + setRecyclerView(recyclerView); fetchCategoryApps(false); + Button ohhSnap_retry = view.findViewById(R.id.ohhSnap_retry); + ohhSnap_retry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.ohhSnap); + fetchCategoryApps(false); + } + }); + Button retry_querry = view.findViewById(R.id.recheck_query); + retry_querry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.unicorn); + fetchCategoryApps(false); + } + }); return view; } } \ No newline at end of file diff --git a/app/src/main/java/com/dragons/aurora/fragment/TopTrendingApps.java b/app/src/main/java/com/dragons/aurora/fragment/TopTrendingApps.java index 9cc8dff1f..70374cc68 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/TopTrendingApps.java +++ b/app/src/main/java/com/dragons/aurora/fragment/TopTrendingApps.java @@ -2,21 +2,50 @@ package com.dragons.aurora.fragment; import android.os.Bundle; import android.support.annotation.NonNull; +import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.Button; +import android.widget.RelativeLayout; import com.dragons.aurora.R; import com.dragons.aurora.playstoreapiv2.GooglePlayAPI; +import butterknife.BindView; +import butterknife.ButterKnife; + public class TopTrendingApps extends TopFreeApps { + @BindView(R.id.endless_apps_list) + RecyclerView recyclerView; + @BindView(R.id.unicorn) + RelativeLayout unicorn; + @BindView(R.id.ohhSnap) + RelativeLayout ohhSnap; + @BindView(R.id.progress) + RelativeLayout progress; @Override public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.app_endless_inc, container, false); + ButterKnife.bind(this, view); setIterator(setupIterator(CategoryAppsFragment.categoryId, GooglePlayAPI.SUBCATEGORY.MOVERS_SHAKERS)); - setRecyclerView(view.findViewById(R.id.endless_apps_list)); + setRecyclerView(recyclerView); fetchCategoryApps(false); + Button ohhSnap_retry = view.findViewById(R.id.ohhSnap_retry); + ohhSnap_retry.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.ohhSnap); + fetchCategoryApps(false); + } + }); + Button retry_query = view.findViewById(R.id.recheck_query); + retry_query.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.unicorn); + fetchCategoryApps(false); + } + }); return view; } } \ No newline at end of file diff --git a/app/src/main/java/com/dragons/aurora/fragment/UpdatableAppsFragment.java b/app/src/main/java/com/dragons/aurora/fragment/UpdatableAppsFragment.java index 5ee77fa05..b2e777585 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/UpdatableAppsFragment.java +++ b/app/src/main/java/com/dragons/aurora/fragment/UpdatableAppsFragment.java @@ -1,11 +1,11 @@ package com.dragons.aurora.fragment; import android.content.Intent; -import android.content.SharedPreferences; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.annotation.NonNull; import android.support.v4.widget.SwipeRefreshLayout; +import android.support.v7.widget.CardView; import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; import android.support.v7.widget.helper.ItemTouchHelper; @@ -15,7 +15,6 @@ import android.view.ViewGroup; import android.view.animation.AnimationUtils; import android.widget.Button; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import com.dragons.aurora.AuroraApplication; @@ -25,19 +24,20 @@ import com.dragons.aurora.R; import com.dragons.aurora.UpdatableRecyclerItemTouchHelper; import com.dragons.aurora.UpdateAllReceiver; import com.dragons.aurora.UpdateChecker; +import com.dragons.aurora.Util; import com.dragons.aurora.adapters.UpdatableAppsAdapter; import com.dragons.aurora.model.App; import com.dragons.aurora.notification.CancelDownloadService; import com.dragons.aurora.task.playstore.UpdatableAppsTaskHelper; import com.github.florent37.shapeofview.shapes.RoundRectView; import com.percolate.caffeine.ToastUtils; -import com.percolate.caffeine.ViewUtils; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; +import butterknife.BindView; +import butterknife.ButterKnife; import io.reactivex.Observable; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.Disposable; @@ -48,20 +48,35 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up public static int updates = 0; public static boolean recheck = false; public UpdatableAppsAdapter updatableAppsAdapter; + @BindView(R.id.swipe_refresh_layout) + SwipeRefreshLayout swipeRefreshLayout; + @BindView(R.id.updatable_apps_list) + RecyclerView recyclerView; + @BindView(R.id.update_all) + Button update; + @BindView(R.id.update_cancel) + Button cancel; + @BindView(R.id.recheck_updates) + Button recheck_update; + @BindView(R.id.ohhSnap_retry) + Button retry_update; + @BindView(R.id.updates_txt) + TextView updates_txt; + @BindView(R.id.updates_setting) + TextView deltaTextView; + private List updatableApps = new ArrayList<>(new HashSet<>()); + private UpdateAllReceiver updateAllReceiver; private View view; private Disposable loadApps; - private SwipeRefreshLayout swipeRefreshLayout; - private UpdateAllReceiver updateAllReceiver; - private Button update; - private Button recheck_update; - private Button cancel; - private TextView txt; - private List updatableApps = new ArrayList<>(new HashSet<>()); public static UpdatableAppsFragment newInstance() { return new UpdatableAppsFragment(); } + public Boolean isAlreadyUpdating() { + return ((AuroraApplication) getActivity().getApplication()).isBackgroundUpdating(); + } + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -80,10 +95,10 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up } view = inflater.inflate(R.layout.app_updatable_inc, container, false); - initViews(); + ButterKnife.bind(this, view); swipeRefreshLayout.setOnRefreshListener(() -> { - if (isLoggedIn() && isConnected(getContext())) + if (isLoggedIn() && isConnected(getContext()) && !isAlreadyUpdating()) loadUpdatableApps(); else swipeRefreshLayout.setRefreshing(false); @@ -92,25 +107,26 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up recheck_update.setOnClickListener(click -> { if (isLoggedIn() && isConnected(getContext())) { hide(view, R.id.unicorn); - txt.setText(R.string.list_update_chk_txt); - swipeRefreshLayout.setRefreshing(true); + updates_txt.setText(R.string.list_update_chk_txt); loadUpdatableApps(); } }); + retry_update.setOnClickListener(click -> { + if (isLoggedIn() && isConnected(getContext())) { + hide(view, R.id.ohhSnap); + if (updatableAppsAdapter == null || updatableAppsAdapter.getItemCount() <= 0) { + updates_txt.setText(R.string.list_update_chk_txt); + loadUpdatableApps(); + } + } + }); + setupAutoUpdate(); setupDelta(); return view; } - private void initViews() { - recheck_update = ViewUtils.findViewById(view, R.id.recheck_updates); - update = ViewUtils.findViewById(view, R.id.update_all); - cancel = ViewUtils.findViewById(view, R.id.update_cancel); - txt = ViewUtils.findViewById(view, R.id.updates_txt); - swipeRefreshLayout = ViewUtils.findViewById(view, R.id.swipe_refresh_layout); - } - @Override public void onResume() { super.onResume(); @@ -136,21 +152,6 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up swipeRefreshLayout.setRefreshing(false); } - protected void setupListView(List appsToAdd) { - RecyclerView recyclerView = view.findViewById(R.id.updatable_apps_list); - recyclerView.setItemViewCacheSize(30); - recyclerView.setHasFixedSize(true); - recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); - recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(getContext(), R.anim.layout_anim)); - - updatableAppsAdapter = new UpdatableAppsAdapter(getActivity(), appsToAdd); - recyclerView.setAdapter(updatableAppsAdapter); - - new ItemTouchHelper( - new UpdatableRecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this)) - .attachToRecyclerView(recyclerView); - } - public void launchUpdateAll() { ((AuroraApplication) getActivity().getApplicationContext()).setBackgroundUpdating(true); new UpdateChecker().onReceive(UpdatableAppsFragment.this.getActivity(), getActivity().getIntent()); @@ -158,13 +159,16 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up show(view, R.id.update_cancel); } - public void setupButtons() { + public void addButtons() { + if (update.getVisibility() == View.VISIBLE) + return; + hide(view, R.id.unicorn); update.setVisibility(View.VISIBLE); update.setOnClickListener(v -> { launchUpdateAll(); update.setVisibility(View.GONE); cancel.setVisibility(View.VISIBLE); - txt.setText(R.string.list_updating); + updates_txt.setText(R.string.list_updating); }); cancel.setOnClickListener(v -> { @@ -172,22 +176,23 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up getContext().startService(new Intent(getContext().getApplicationContext(), CancelDownloadService.class) .putExtra(CancelDownloadService.PACKAGE_NAME, app.getPackageName())); } + ((AuroraApplication) getActivity().getApplicationContext()).setBackgroundUpdating(false); update.setVisibility(View.VISIBLE); cancel.setVisibility(View.GONE); - setText(view, R.id.updates_txt, R.string.list_update_all_txt, updatableApps.size()); + setUpdates(updatableApps.size()); }); } public void removeButtons() { + show(view, R.id.unicorn); update.setVisibility(View.GONE); cancel.setVisibility(View.GONE); } public void setupDelta() { - SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getActivity()); - TextView delta = ViewUtils.findViewById(view, R.id.updates_setting); - delta.setText(sharedPreferences.getBoolean("PREFERENCE_DOWNLOAD_DELTAS", true) ? R.string.delta_enabled : R.string.delta_disabled); - delta.setVisibility(View.VISIBLE); + deltaTextView.setText(PreferenceFragment.getBoolean(getContext(), "PREFERENCE_DOWNLOAD_DELTAS") + ? R.string.delta_enabled + : R.string.delta_disabled); } public void updateInteger(int count) { @@ -197,7 +202,7 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up } public void setupAutoUpdate() { - RoundRectView autoUpdatesCard = view.findViewById(R.id.autoUpdatesCard); + CardView autoUpdatesCard = view.findViewById(R.id.autoUpdatesCard); ImageView autoUpdatesClose = view.findViewById(R.id.autoUpdatesClose); Button autoUpdatesSwitch = view.findViewById(R.id.autoUpdatesSwitch); boolean shouldAsk = PreferenceFragment.getBoolean(getContext(), "PROMPT_UPDATE_INTERVAL"); @@ -229,23 +234,48 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up .observeOn(AndroidSchedulers.mainThread()) .subscribe((appList) -> { if (view != null) { - updatableApps = new ArrayList<>(new HashSet<>(appList)); - Collections.sort(updatableApps); - setupListView(updatableApps); - updateInteger(updatableApps.size()); + updatableApps.clear(); + updatableApps.addAll(appList); + setupList(updatableApps); swipeRefreshLayout.setRefreshing(false); - - if (success() && updatableApps.isEmpty()) { - show(view, R.id.unicorn); - setText(view, R.id.updates_txt, R.string.list_update_all_txt, updatableApps.size()); - removeButtons(); - } else { - hide(view, R.id.unicorn); - setText(view, R.id.updates_txt, R.string.list_update_all_txt, updatableApps.size()); - setupButtons(); - } } - }, this::processException); + }, err -> { + swipeRefreshLayout.setRefreshing(false); + processException(err); + show(view, R.id.ohhSnap); + }); + } + + private void setupList(List updatableApps) { + setUpdates(updatableApps.size()); + updateInteger(updatableApps.size()); + + if (updatableApps.isEmpty()) + removeButtons(); + else + addButtons(); + + if (recyclerView.getAdapter() == null) + setupRecycler(updatableApps); + else { + updatableAppsAdapter.appsToAdd = updatableApps; + Util.reloadRecycler(recyclerView); + } + } + + protected void setupRecycler(List appsToAdd) { + updatableAppsAdapter = new UpdatableAppsAdapter(getActivity(), appsToAdd); + recyclerView.setItemViewCacheSize(20); + recyclerView.setLayoutManager(new LinearLayoutManager(this.getActivity())); + recyclerView.setLayoutAnimation(AnimationUtils.loadLayoutAnimation(getContext(), R.anim.layout_anim)); + recyclerView.setAdapter(updatableAppsAdapter); + new ItemTouchHelper( + new UpdatableRecyclerItemTouchHelper(0, ItemTouchHelper.LEFT, this)) + .attachToRecyclerView(recyclerView); + } + + private void setUpdates(int count) { + setText(view, R.id.updates_txt, R.string.list_update_all_txt, count); } @Override @@ -255,14 +285,11 @@ public class UpdatableAppsFragment extends UpdatableAppsTaskHelper implements Up .add(((UpdatableAppsAdapter.ViewHolder) viewHolder).app.getPackageName()); updatableAppsAdapter.remove(position); + setUpdates(updatableAppsAdapter.getItemCount()); + updateInteger(updatableAppsAdapter.getItemCount()); - if (updatableAppsAdapter.getItemCount() == 0) { - view.findViewById(R.id.unicorn).setVisibility(View.VISIBLE); - setText(view, R.id.updates_txt, R.string.list_update_all_txt, 0); - updateInteger(0); + if (updatableAppsAdapter.getItemCount() == 0) removeButtons(); - } else - view.findViewById(R.id.unicorn).setVisibility(View.GONE); } } } diff --git a/app/src/main/java/com/dragons/aurora/fragment/UtilFragment.java b/app/src/main/java/com/dragons/aurora/fragment/UtilFragment.java index 3dd6eafb2..7d37e1124 100755 --- a/app/src/main/java/com/dragons/aurora/fragment/UtilFragment.java +++ b/app/src/main/java/com/dragons/aurora/fragment/UtilFragment.java @@ -30,5 +30,4 @@ public abstract class UtilFragment extends AccountsHelper { protected void setText(View v, int viewId, int stringId, Object... text) { setText(v, viewId, v.getResources().getString(stringId, text)); } - } diff --git a/app/src/main/java/com/dragons/aurora/fragment/details/GeneralDetails.java b/app/src/main/java/com/dragons/aurora/fragment/details/GeneralDetails.java index 7db332e56..9d95dea96 100644 --- a/app/src/main/java/com/dragons/aurora/fragment/details/GeneralDetails.java +++ b/app/src/main/java/com/dragons/aurora/fragment/details/GeneralDetails.java @@ -25,6 +25,7 @@ import com.dragons.aurora.activities.AuroraActivity; import com.dragons.aurora.fragment.DetailsFragment; import com.dragons.aurora.model.App; import com.dragons.aurora.model.ImageSource; +import com.github.florent37.shapeofview.shapes.RoundRectView; import com.squareup.picasso.Callback; import com.squareup.picasso.Picasso; @@ -133,12 +134,14 @@ public class GeneralDetails extends AbstractHelper { paintButton(color, R.id.run); paintButton(color, R.id.beta_subscribe_button); paintButton(color, R.id.beta_submit_button); - paintTextView(color, R.id.beta_header); - paintTextView(color, R.id.permissions_header); - paintTextView(color, R.id.exodus_title); - paintTextView(color, R.id.changes_upper); + if (!Util.isDark(fragment.getContext())) { + paintTextView(color, R.id.beta_header); + paintTextView(color, R.id.permissions_header); + paintTextView(color, R.id.exodus_title); + paintTextView(color, R.id.changes_upper); + paintTextView(color, R.id.showLessMoreTxt); + } paintLLayout(color, R.id.changes_container); - paintTextView(color, R.id.showLessMoreTxt); paintImageView(color, R.id.privacy_ico); paintImageViewBg(color, R.id.apps_similar); paintImageViewBg(color, R.id.apps_recommended); @@ -291,11 +294,11 @@ public class GeneralDetails extends AbstractHelper { if (changelogLayout.getVisibility() == View.GONE) { show(fragment.getView(), R.id.changelog_container); showLessMoreTxt.setText(R.string.details_less); - showLessMore.setImageResource(R.drawable.ic_expand_less); + showLessMore.animate().rotation(180).start(); } else { hide(fragment.getView(), R.id.changelog_container); showLessMoreTxt.setText(R.string.details_more); - showLessMore.setImageResource(R.drawable.ic_expand_more); + showLessMore.animate().rotation(0).start(); } }); } diff --git a/app/src/main/java/com/dragons/aurora/view/ListItem.java b/app/src/main/java/com/dragons/aurora/view/ListItem.java index fd8e0b5af..c976dc051 100644 --- a/app/src/main/java/com/dragons/aurora/view/ListItem.java +++ b/app/src/main/java/com/dragons/aurora/view/ListItem.java @@ -15,7 +15,6 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.dragons.aurora.Util; -import com.github.florent37.shapeofview.shapes.RoundRectView; public abstract class ListItem { diff --git a/app/src/main/java/com/dragons/aurora/view/UpdatableAppBadge.java b/app/src/main/java/com/dragons/aurora/view/UpdatableAppBadge.java index 18c7b8304..8f23dd52b 100644 --- a/app/src/main/java/com/dragons/aurora/view/UpdatableAppBadge.java +++ b/app/src/main/java/com/dragons/aurora/view/UpdatableAppBadge.java @@ -107,11 +107,11 @@ public class UpdatableAppBadge extends AppBadge { } } else removeChanges(); }); + drawButtons(); } - public void drawButtons() { + private void drawButtons() { init(); - listContainer.setOnClickListener(click -> context.startActivity(DetailsActivity.getDetailsIntent(context, app.getPackageName()))); @@ -174,13 +174,11 @@ public class UpdatableAppBadge extends AppBadge { } private void drawChanges() { - viewChanges.setImageResource(R.drawable.ic_expand_less_24); - + viewChanges.animate().rotation(180).start(); if (app.getChanges().isEmpty()) changes.setText(R.string.details_changelog_empty); else changes.setText(Html.fromHtml(app.getChanges()).toString()); - show(changesContainer); show(singleButtons); show(progressContainer); @@ -190,17 +188,19 @@ public class UpdatableAppBadge extends AppBadge { hide(changesContainer); hide(singleButtons); hide(progressContainer); - viewChanges.setImageResource(R.drawable.ic_expand_more_24); + viewChanges.animate().rotation(0).start(); } private void getPalette(Bitmap bitmap) { Palette.from(bitmap) .generate(palette -> { - paintTextView(palette.getDarkVibrantColor(Color.DKGRAY), changes); paintButton(palette.getDarkVibrantColor(Color.DKGRAY), update); paintButton(palette.getDarkVibrantColor(Color.DKGRAY), install); - paintLayout(palette.getDarkVibrantColor(Color.DKGRAY), R.id.view_background); - paintLLayout(palette.getDarkVibrantColor(Color.DKGRAY), R.id.changes_container); + if (!Util.isDark(context)) { + paintTextView(palette.getDarkVibrantColor(Color.DKGRAY), changes); + paintLayout(palette.getDarkVibrantColor(Color.DKGRAY), R.id.view_background); + paintLLayout(palette.getDarkVibrantColor(Color.DKGRAY), R.id.changes_container); + } }); } diff --git a/app/src/main/java/com/dragons/custom/FilterBadge.java b/app/src/main/java/com/dragons/custom/FilterBadge.java index 25a523457..86c61a9e5 100644 --- a/app/src/main/java/com/dragons/custom/FilterBadge.java +++ b/app/src/main/java/com/dragons/custom/FilterBadge.java @@ -16,13 +16,14 @@ import android.widget.RelativeLayout; import android.widget.TextView; import com.dragons.aurora.R; +import com.dragons.aurora.Util; import com.github.florent37.shapeofview.shapes.CircleView; public class FilterBadge extends RelativeLayout { private Context context; private boolean badgeChecked; private RelativeLayout badgeContainer; - private CircleView badgeDot; + private View badgeDot; private CircleView badgeCancel; private TextView badgeText; private String title; @@ -102,7 +103,7 @@ public class FilterBadge extends RelativeLayout { private void setupBadge() { if (!isBadgeChecked()) { badgeDot.setVisibility(VISIBLE); - badgeText.setTextColor(Color.BLACK); + badgeText.setTextColor(Util.getStyledAttribute(context, android.R.attr.textColorPrimary)); badgeContainer.setBackgroundTintList(null); badgeCancel.setVisibility(GONE); badgeChecked = false; diff --git a/app/src/main/java/com/dragons/custom/MenuNavigationItemsAdapter.java b/app/src/main/java/com/dragons/custom/MenuNavigationItemsAdapter.java index d9a035a03..22933f390 100644 --- a/app/src/main/java/com/dragons/custom/MenuNavigationItemsAdapter.java +++ b/app/src/main/java/com/dragons/custom/MenuNavigationItemsAdapter.java @@ -15,8 +15,6 @@ import com.dragons.aurora.R; import java.util.ArrayList; import java.util.List; -import static com.dragons.custom.CustomAppBar.MORE_ICON_TAG; - class MenuNavigationItemsAdapter extends RecyclerView.Adapter { private Context context; @@ -28,7 +26,6 @@ class MenuNavigationItemsAdapter extends RecyclerView.Adapter(); - populateNavigationItems(menuRes); } @@ -46,9 +43,6 @@ class MenuNavigationItemsAdapter extends RecyclerView.Adapter + android:color="?android:attr/strokeColor" /> diff --git a/app/src/main/res/drawable/button_bg.xml b/app/src/main/res/drawable/button_bg.xml index 4eef0d276..4430c20e1 100644 --- a/app/src/main/res/drawable/button_bg.xml +++ b/app/src/main/res/drawable/button_bg.xml @@ -7,7 +7,8 @@ - + + diff --git a/app/src/main/res/drawable/button_negative.xml b/app/src/main/res/drawable/button_negative.xml index 40b3d0407..7c951f334 100644 --- a/app/src/main/res/drawable/button_negative.xml +++ b/app/src/main/res/drawable/button_negative.xml @@ -6,11 +6,8 @@ - + - diff --git a/app/src/main/res/drawable/button_positive.xml b/app/src/main/res/drawable/button_positive.xml index 25a75150b..c09555aba 100644 --- a/app/src/main/res/drawable/button_positive.xml +++ b/app/src/main/res/drawable/button_positive.xml @@ -6,11 +6,8 @@ - + - diff --git a/app/src/main/res/drawable/ic_download_alt.xml b/app/src/main/res/drawable/ic_download_alt.xml new file mode 100644 index 000000000..76b8dfa38 --- /dev/null +++ b/app/src/main/res/drawable/ic_download_alt.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_err.xml b/app/src/main/res/drawable/ic_err.xml new file mode 100644 index 000000000..67bf3d83c --- /dev/null +++ b/app/src/main/res/drawable/ic_err.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout-land/activity_login.xml b/app/src/main/res/layout-land/activity_login.xml index 4e17fac71..b215a0fa1 100644 --- a/app/src/main/res/layout-land/activity_login.xml +++ b/app/src/main/res/layout-land/activity_login.xml @@ -16,19 +16,30 @@ + app:shape_diagonal_angle="5" + app:shape_diagonal_direction="left" + app:shape_diagonal_position="right"> + + + + + app:shape_diagonal_angle="10" + app:shape_diagonal_direction="right" + app:shape_diagonal_position="right"> + + + - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp" + app:cardElevation="1dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> - + - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp" + app:cardElevation="1dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> - + diff --git a/app/src/main/res/layout-land/app_acc_inc.xml b/app/src/main/res/layout-land/app_acc_inc.xml index 20ad97a0f..05bfe6956 100644 --- a/app/src/main/res/layout-land/app_acc_inc.xml +++ b/app/src/main/res/layout-land/app_acc_inc.xml @@ -4,6 +4,7 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:background="?android:attr/colorBackground" + android:baselineAligned="false" android:orientation="horizontal" android:weightSum="2"> @@ -16,19 +17,30 @@ + app:shape_diagonal_angle="5" + app:shape_diagonal_direction="left" + app:shape_diagonal_position="right"> + + + + + app:shape_diagonal_angle="10" + app:shape_diagonal_direction="right" + app:shape_diagonal_position="right"> + + + + android:paddingBottom="10dp" + android:paddingTop="28dp"> - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp"> - + - + app:cardCornerRadius="10dp"> + app:shape_circle_borderColor="@color/colorRed" + app:shape_circle_borderWidth="1dp"> @@ -268,21 +275,17 @@ android:textSize="16sp" /> + - - - + app:cardCornerRadius="10dp"> - - + diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index 63f7fcfbd..ae1cf1f69 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -13,19 +13,31 @@ + app:shape_diagonal_angle="5" + app:shape_diagonal_direction="left" + app:shape_diagonal_position="bottom"> + + + + + app:shape_diagonal_angle="10" + app:shape_diagonal_direction="right" + app:shape_diagonal_position="bottom"> + + + + - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp" + app:cardElevation="2dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> - + - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp" + app:cardElevation="2dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> - + diff --git a/app/src/main/res/layout/all_cat_item.xml b/app/src/main/res/layout/all_cat_item.xml index df260ae08..6ad7b4411 100644 --- a/app/src/main/res/layout/all_cat_item.xml +++ b/app/src/main/res/layout/all_cat_item.xml @@ -1,15 +1,16 @@ - + android:layout_marginBottom="2dp" + android:layout_marginEnd="4dp" + android:layout_marginStart="4dp" + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp" + app:cardElevation="1dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/app_acc_inc.xml b/app/src/main/res/layout/app_acc_inc.xml index 16302809b..524c466e7 100644 --- a/app/src/main/res/layout/app_acc_inc.xml +++ b/app/src/main/res/layout/app_acc_inc.xml @@ -16,19 +16,30 @@ + app:shape_diagonal_angle="5" + app:shape_diagonal_direction="left" + app:shape_diagonal_position="bottom"> + + + + + app:shape_diagonal_angle="10" + app:shape_diagonal_direction="right" + app:shape_diagonal_position="bottom"> + + + + android:paddingBottom="10dp" + android:paddingTop="10dp"> - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp"> - + - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp"> + app:shape_circle_borderColor="@color/colorRed" + app:shape_circle_borderWidth="1dp"> @@ -268,21 +273,17 @@ android:textSize="16sp" /> + - - - + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp"> - - + diff --git a/app/src/main/res/layout/app_actions_inc.xml b/app/src/main/res/layout/app_actions_inc.xml index e731d011b..49be47ed4 100644 --- a/app/src/main/res/layout/app_actions_inc.xml +++ b/app/src/main/res/layout/app_actions_inc.xml @@ -13,11 +13,12 @@ android:layout_width="0dp" android:layout_height="32dp" android:layout_weight="1" - android:fontFamily="@font/google_sans" android:background="@drawable/button_negative" - android:padding="5dp" + android:fontFamily="@font/google_sans" android:maxLines="1" + android:padding="5dp" android:text="@string/details_uninstall" + android:textAllCaps="false" android:textColor="@color/white" android:textSize="12sp" android:visibility="gone" /> @@ -27,14 +28,15 @@ style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="0dp" android:layout_height="32dp" - android:fontFamily="@font/google_sans" android:layout_weight="1" android:background="@drawable/button_positive" - android:padding="5dp" - android:maxLines="1" - android:text="@string/details_playstore" - android:textColor="@color/white" android:backgroundTint="@color/colorGreen" + android:fontFamily="@font/google_sans" + android:maxLines="1" + android:padding="5dp" + android:text="@string/details_playstore" + android:textAllCaps="false" + android:textColor="@color/white" android:textSize="12sp" android:visibility="gone" /> @@ -43,12 +45,13 @@ style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="0dp" android:layout_height="32dp" - android:fontFamily="@font/google_sans" android:layout_weight="1" android:background="@drawable/button_positive" - android:padding="5dp" + android:fontFamily="@font/google_sans" android:maxLines="1" + android:padding="5dp" android:text="@string/details_download" + android:textAllCaps="false" android:textColor="@color/white" android:textSize="12sp" android:visibility="gone" /> @@ -58,12 +61,13 @@ style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="0dp" android:layout_height="32dp" - android:fontFamily="@font/google_sans" android:layout_weight="1" android:background="@drawable/button_negative" - android:padding="5dp" + android:fontFamily="@font/google_sans" android:maxLines="1" + android:padding="5dp" android:text="@string/details_cancel" + android:textAllCaps="false" android:textColor="@color/white" android:textSize="12sp" android:visibility="gone" /> @@ -73,11 +77,11 @@ style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="0dp" android:layout_height="32dp" - android:fontFamily="@font/google_sans" android:layout_weight="1" android:background="@drawable/button_positive" - android:padding="5dp" + android:fontFamily="@font/google_sans" android:maxLines="1" + android:padding="5dp" android:text="@string/details_install" android:textColor="@color/white" android:textSize="12sp" @@ -88,12 +92,13 @@ style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="0dp" android:layout_height="32dp" - android:fontFamily="@font/google_sans" android:layout_weight="1" android:background="@drawable/button_positive" - android:padding="5dp" + android:fontFamily="@font/google_sans" android:maxLines="1" + android:padding="5dp" android:text="@string/details_run" + android:textAllCaps="false" android:textColor="@color/white" android:textSize="12sp" android:visibility="gone" /> diff --git a/app/src/main/res/layout/app_category_inc.xml b/app/src/main/res/layout/app_category_inc.xml index 165ddd837..d64f675d8 100644 --- a/app/src/main/res/layout/app_category_inc.xml +++ b/app/src/main/res/layout/app_category_inc.xml @@ -11,6 +11,7 @@ android:layout_height="wrap_content" android:layout_marginStart="15dp" android:layout_marginTop="15dp" + android:layout_marginEnd="15dp" android:fontFamily="@font/google_sans" android:gravity="start" android:text="@string/top_categories" @@ -23,7 +24,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/top_cat" - android:layout_margin="10dp" android:nestedScrollingEnabled="false" android:orientation="horizontal" app:layoutManager="android.support.v7.widget.LinearLayoutManager" /> @@ -35,6 +35,7 @@ android:layout_below="@id/top_cat_view" android:layout_marginStart="15dp" android:layout_marginTop="15dp" + android:layout_marginEnd="15dp" android:fontFamily="@font/google_sans" android:gravity="start" android:text="@string/all_categories" @@ -47,10 +48,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@id/all_cat" - android:layout_marginEnd="10dp" - android:layout_marginStart="10dp" - android:layout_marginBottom="8dp" - android:layout_marginTop="10dp"> + android:layout_marginStart="6dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="6dp" + android:layout_marginBottom="8dp"> - + android:layout_marginEnd="5dp" + android:layout_marginStart="5dp" + android:layout_marginTop="5dp" + app:cardBackgroundColor="?android:attr/panelBackground" + app:cardCornerRadius="10dp" + app:cardElevation="1dp" + app:cardPreventCornerOverlap="false" + app:cardUseCompatPadding="true"> - + - - - + android:layout_height="match_parent" + android:gravity="center" + android:orientation="horizontal" + android:paddingEnd="10dp" + android:paddingStart="10dp"> - + - + - + - + - + - + - + - + - - + - \ No newline at end of file + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/app_endless_inc.xml b/app/src/main/res/layout/app_endless_inc.xml index 89baee3de..319958a10 100644 --- a/app/src/main/res/layout/app_endless_inc.xml +++ b/app/src/main/res/layout/app_endless_inc.xml @@ -4,6 +4,97 @@ android:layout_height="match_parent" android:orientation="vertical"> + + + + + + +