Improve the app design

- Fix various UI glitch & bugs
 - Cleanup & Improve coding style
This commit is contained in:
Mr. Dragon
2018-05-29 13:10:42 +05:30
parent bfd8711d9d
commit c119c4059d
69 changed files with 1736 additions and 1093 deletions

View File

@@ -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();
}
}

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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;

View File

@@ -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;

View File

@@ -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);
}

View File

@@ -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<AllCategoriesAdap
static class ViewHolder extends RecyclerView.ViewHolder {
TextView topLabel;
ImageView topImage;
RoundRectView topContainer;
CardView topContainer;
ViewHolder(View v) {
super(v);

View File

@@ -2,12 +2,12 @@ package com.dragons.aurora.adapters;
import android.content.Context;
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.PopupMenu;
import com.dragons.aurora.R;
@@ -18,13 +18,12 @@ import com.dragons.aurora.fragment.details.ButtonUninstall;
import com.dragons.aurora.fragment.details.DownloadOptions;
import com.dragons.aurora.model.App;
import com.dragons.aurora.view.InstalledAppBadge;
import com.github.florent37.shapeofview.shapes.RoundRectView;
import java.util.List;
public class InstalledAppsAdapter extends RecyclerView.Adapter<InstalledAppsAdapter.ViewHolder> {
private List<App> appsToAdd;
public List<App> appsToAdd;
private Context context;
private ViewHolder viewHolder;
@@ -110,7 +109,7 @@ public class InstalledAppsAdapter extends RecyclerView.Adapter<InstalledAppsAdap
public class ViewHolder extends RecyclerView.ViewHolder {
public View view;
public RoundRectView list_container;
public CardView list_container;
public ImageView menu_3dot;
public ViewHolder(View view) {

View File

@@ -4,6 +4,7 @@ import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
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;
@@ -13,7 +14,6 @@ import android.widget.TextView;
import com.dragons.aurora.R;
import com.dragons.aurora.activities.SearchActivity;
import com.github.florent37.shapeofview.shapes.RoundRectView;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -99,8 +99,8 @@ public class SearchHistoryAdapter extends RecyclerView.Adapter<SearchHistoryAdap
}
public class ViewHolder extends RecyclerView.ViewHolder {
public RoundRectView viewForeground;
RelativeLayout viewBackground;
public CardView viewForeground;
RelativeLayout viewBackground;
TextView query;
TextView time;

View File

@@ -18,10 +18,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.dragons.aurora.R;
import com.github.florent37.shapeofview.shapes.CircleView;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import com.dragons.aurora.Util;
public class SingleDownloadsAdapter extends RecyclerView.Adapter<SingleDownloadsAdapter.ViewHolder> {
@@ -100,7 +97,7 @@ public class SingleDownloadsAdapter extends RecyclerView.Adapter<SingleDownloads
viewHolder.badgeText.setTextColor(Color.WHITE);
paintBadge(viewHolder);
} else {
viewHolder.badgeText.setTextColor(Color.BLACK);
viewHolder.badgeText.setTextColor(Util.getStyledAttribute(context, android.R.attr.textColorPrimary));
viewHolder.badgeContainer.setBackgroundTintList(null);
}
}
@@ -131,8 +128,7 @@ public class SingleDownloadsAdapter extends RecyclerView.Adapter<SingleDownloads
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private RelativeLayout badgeContainer;
private CircleView badgeDot;
private CircleView badgeCancel;
private View badgeDot;
private TextView badgeText;
public ViewHolder(View view) {
@@ -140,7 +136,6 @@ public class SingleDownloadsAdapter extends RecyclerView.Adapter<SingleDownloads
badgeContainer = view.findViewById(R.id.badge_container);
badgeDot = view.findViewById(R.id.badge_dot);
badgeText = view.findViewById(R.id.badge_text);
badgeCancel = view.findViewById(R.id.badge_cancel);
itemView.setOnClickListener(this);
}

View File

@@ -18,10 +18,7 @@ import android.widget.RelativeLayout;
import android.widget.TextView;
import com.dragons.aurora.R;
import com.github.florent37.shapeofview.shapes.CircleView;
import static android.view.View.GONE;
import static android.view.View.VISIBLE;
import com.dragons.aurora.Util;
public class SingleRatingsAdapter extends RecyclerView.Adapter<SingleRatingsAdapter.ViewHolder> {
@@ -100,7 +97,7 @@ public class SingleRatingsAdapter extends RecyclerView.Adapter<SingleRatingsAdap
viewHolder.badgeText.setTextColor(Color.WHITE);
paintBadge(viewHolder);
} else {
viewHolder.badgeText.setTextColor(Color.BLACK);
viewHolder.badgeText.setTextColor(Util.getStyledAttribute(context, android.R.attr.textColorPrimary));
viewHolder.badgeContainer.setBackgroundTintList(null);
}
}
@@ -131,8 +128,7 @@ public class SingleRatingsAdapter extends RecyclerView.Adapter<SingleRatingsAdap
static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private RelativeLayout badgeContainer;
private CircleView badgeDot;
private CircleView badgeCancel;
private View badgeDot;
private TextView badgeText;
public ViewHolder(View view) {
@@ -140,7 +136,6 @@ public class SingleRatingsAdapter extends RecyclerView.Adapter<SingleRatingsAdap
badgeContainer = view.findViewById(R.id.badge_container);
badgeDot = view.findViewById(R.id.badge_dot);
badgeText = view.findViewById(R.id.badge_text);
badgeCancel = view.findViewById(R.id.badge_cancel);
itemView.setOnClickListener(this);
}

View File

@@ -2,22 +2,21 @@ package com.dragons.aurora.adapters;
import android.content.Context;
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.LinearLayout;
import com.dragons.aurora.R;
import com.dragons.aurora.model.App;
import com.dragons.aurora.view.UpdatableAppBadge;
import com.github.florent37.shapeofview.shapes.RoundRectView;
import java.util.List;
public class UpdatableAppsAdapter extends RecyclerView.Adapter<UpdatableAppsAdapter.ViewHolder> {
private List<App> appsToAdd;
public List<App> appsToAdd;
private Context context;
public UpdatableAppsAdapter(Context context, List<App> appsToAdd) {
@@ -58,13 +57,10 @@ public class UpdatableAppsAdapter extends RecyclerView.Adapter<UpdatableAppsAdap
public void onBindViewHolder(@NonNull UpdatableAppsAdapter.ViewHolder holder, int position) {
final App app = appsToAdd.get(position);
final UpdatableAppBadge updatableAppBadge = new UpdatableAppBadge();
holder.app = app;
updatableAppBadge.setApp(app);
updatableAppBadge.setView(holder.view);
updatableAppBadge.draw();
updatableAppBadge.drawButtons();
holder.app = app;
}
@Override
@@ -74,7 +70,7 @@ public class UpdatableAppsAdapter extends RecyclerView.Adapter<UpdatableAppsAdap
public class ViewHolder extends RecyclerView.ViewHolder {
public RoundRectView viewForeground;
public CardView viewForeground;
public App app;
private View view;

View File

@@ -17,6 +17,7 @@ import com.dragons.aurora.PlayStoreApiAuthenticator;
import com.dragons.aurora.R;
import com.dragons.aurora.activities.LoginActivity;
import com.dragons.aurora.task.UserProvidedCredentialsTask;
import com.github.florent37.shapeofview.shapes.CircleView;
import com.percolate.caffeine.ViewUtils;
import com.squareup.picasso.Picasso;
@@ -41,7 +42,6 @@ public class AccountsFragment extends UtilFragment {
}
v = inflater.inflate(R.layout.app_acc_inc, container, false);
getActivity().setTitle(R.string.action_accounts);
ImageView toolbar_back = v.findViewById(R.id.toolbar_back);
toolbar_back.setOnClickListener(click -> 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() {

View File

@@ -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);
}

View File

@@ -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<App> 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<App> appsToAdd) {
RecyclerView recyclerView = view.findViewById(R.id.installed_apps_list);
recyclerView.setHasFixedSize(true);
protected void setupRecycler(List<App> 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<App> installedApps) {
if (recyclerView.getAdapter() == null)
setupRecycler(installedApps);
else {
installedAppsAdapter.appsToAdd = installedApps;
Util.reloadRecycler(recyclerView);
}
}
}

View File

@@ -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<App> 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<App> 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);
}
}

View File

@@ -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)

View File

@@ -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<App> 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<App> 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);
}
}

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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<App> 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<App> 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<App> 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<App> 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<App> 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);
}
}
}

View File

@@ -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));
}
}

View File

@@ -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();
}
});
}

View File

@@ -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 {

View File

@@ -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);
}
});
}

View File

@@ -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;

View File

@@ -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<MenuNavigationItemsAdapter.MenuNavItem> {
private Context context;
@@ -28,7 +26,6 @@ class MenuNavigationItemsAdapter extends RecyclerView.Adapter<MenuNavigationItem
this.context = context;
this.onClickListener = onClickListener;
this.navItems = new ArrayList<>();
populateNavigationItems(menuRes);
}
@@ -46,9 +43,6 @@ class MenuNavigationItemsAdapter extends RecyclerView.Adapter<MenuNavigationItem
holder.label.setText(item.getTitle());
holder.icon.setImageDrawable(item.getIcon());
holder.itemView.setTag(item.getResId());
if (item.getTitle().isEmpty()) setupMoreIcon(holder);
holder.itemView.setOnClickListener(onClickListener);
}
@@ -59,15 +53,6 @@ class MenuNavigationItemsAdapter extends RecyclerView.Adapter<MenuNavigationItem
private void populateNavigationItems(int menuRes) {
MenuParserHelper.parseMenu(context, menuRes, navItems);
//Drawable moreIcon = context.getResources().getDrawable(R.drawable.more);
//navItems.add(new MenuEntry("", moreIcon, 0));
}
private void setupMoreIcon(MenuNavItem menuNavItem) {
menuNavItem.itemView.setFocusable(false);
menuNavItem.itemView.setFocusableInTouchMode(false);
menuNavItem.itemView.setBackground(null);
menuNavItem.itemView.setTag(MORE_ICON_TAG);
}
class MenuNavItem extends RecyclerView.ViewHolder {