@Override public void populateView(Displayable displayable) { HeaderRow row = (HeaderRow) displayable; title.setText(row.getLabel()); if (row.isHasMore()) { more.setVisibility(View.VISIBLE); if (storeName == null || TextUtils.isEmpty(storeName)) { if (storeId == 0) { more.setOnClickListener(new BaseAdapter.IHasMoreOnClickListener(row, theme)); moreLayout.setOnClickListener(new BaseAdapter.IHasMoreOnClickListener(row, theme)); } else { more.setOnClickListener(new BaseAdapter.IHasMoreOnClickListener(row, theme, storeId)); moreLayout.setOnClickListener( new BaseAdapter.IHasMoreOnClickListener(row, theme, storeId)); } } else { if (storeId == 0) { more.setOnClickListener(new BaseAdapter.IHasMoreOnClickListener(row, theme, storeName)); moreLayout.setOnClickListener( new BaseAdapter.IHasMoreOnClickListener(row, theme, storeName)); } else { more.setOnClickListener( new BaseAdapter.IHasMoreOnClickListener(row, theme, storeName, storeId)); moreLayout.setOnClickListener( new BaseAdapter.IHasMoreOnClickListener(row, theme, storeName, storeId)); } } } else { more.setVisibility(View.GONE); moreLayout.setClickable(false); moreLayout.setFocusable(false); } if (theme != null) { @ColorInt int color = itemView.getContext().getResources().getColor(theme.getStoreHeader()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { more.getBackground().setColorFilter(color, PorterDuff.Mode.SRC_IN); } else { // put this in Utils when you need to tint a Button background Drawable wrapDrawable = DrawableCompat.wrap(more.getBackground()); DrawableCompat.setTint( wrapDrawable, itemView.getContext().getResources().getColor(theme.getStoreHeader())); more.setBackgroundDrawable(DrawableCompat.unwrap(wrapDrawable)); } } }
@Override public void onBindViewHolder(final BaseViewHolder holder, final int position) { switch (holder.viewType) { case R.layout.layout_header: HeaderViewHolder headerViewHolder = (HeaderViewHolder) holder; HeaderRow headerRow = (HeaderRow) displayableList.get(position); headerViewHolder.title.setText(headerRow.getLabel()); headerViewHolder.more.setText( headerViewHolder.more.getContext().getString(R.string.update_all)); ViewGroup.LayoutParams layoutParams = headerViewHolder.more.getLayoutParams(); layoutParams.width = ViewGroup.LayoutParams.WRAP_CONTENT; headerViewHolder.more.setLayoutParams(layoutParams); headerViewHolder.more.setVisibility(!headerRow.isHasMore() ? View.GONE : View.VISIBLE); headerViewHolder.more.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { List<UpdateRow> updateRows = new ArrayList<>(); for (Displayable displayable : displayableList) { if (displayable instanceof UpdateRow) { UpdateRow row = (UpdateRow) displayable; updateRows.add(row); } Analytics.Updates.updateAll(); } BusProvider.getInstance().post(new OttoEvents.StartDownload(updateRows)); } }); break; case R.layout.update_row: final UpdateViewHolder updateViewHolder = (UpdateViewHolder) holder; final UpdateRow appItem = (UpdateRow) displayableList.get(position); updateViewHolder.name.setText(appItem.appName); updateViewHolder.appInstalledVersion.setText(appItem.versionNameInstalled); updateViewHolder.appUpdateVersion.setText(String.valueOf(appItem.versionName)); updateViewHolder.updateButtonLayout.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Displayable displayable = displayableList.get(holder.getAdapterPosition()); if (displayable instanceof UpdateRow) { UpdateRow row = (UpdateRow) displayable; List<UpdateRow> updateRows = new ArrayList<>(); updateRows.add(row); BusProvider.getInstance().post(new OttoEvents.StartDownload(updateRows)); } Analytics.Updates.update(); } }); updateViewHolder.itemView.setLongClickable(true); updateViewHolder.itemView.setOnLongClickListener( new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); View dialogView = LayoutInflater.from(v.getContext()) .inflate(R.layout.exclude_update_uninstall_menu, null); builder.setView(dialogView); final AlertDialog alertDialog = builder.create(); dialogView .findViewById(R.id.confirmIgnoreUpdateUninstall) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { new Thread( new Runnable() { @Override public void run() { AptoideDatabase database = new AptoideDatabase(Aptoide.getDb()); database.addToExcludeUpdate(appItem); BusProvider.getInstance() .post( new OttoEvents.ExcludedUpdateAddedEvent(position)); } }) .start(); int position = holder.getAdapterPosition(); if (position != RecyclerView.NO_POSITION) { displayableList.remove(position); notifyItemRemoved(position); } // When we remove the last update, we also need to remove the header. checkAndRemoveHeaderRow(holder.getAdapterPosition()); Toast.makeText(v.getContext(), "Ignored", Toast.LENGTH_SHORT).show(); alertDialog.dismiss(); } }); alertDialog.show(); return true; } /** * Check if there's any Update on the displayableList and if so, removes the Update * header */ void checkAndRemoveHeaderRow(int position) { if (isUpdateListEmpty()) { for (Iterator<Displayable> it = displayableList.iterator(); it.hasNext(); ) { Displayable displayable = it.next(); if (displayable instanceof UpdateHeaderRow) { it.remove(); notifyItemRemoved(position); } } } } /** * Iterates through the displayableList and check if there's an Update row type. * * @return */ boolean isUpdateListEmpty() { for (Displayable displayable : displayableList) { if (displayable instanceof UpdateRow) { return false; } } return true; } }); updateViewHolder.itemView.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(v.getContext(), AppViewActivity.class); i.putExtra(Constants.UPDATE_FROM_KEY, true); i.putExtra(Constants.MD5SUM_KEY, appItem.md5sum); i.putExtra(Constants.PACKAGENAME_KEY, appItem.packageName); i.putExtra(Constants.VERSIONNAME_KEY, appItem.versionName); i.putExtra(Constants.APPNAME_KEY, appItem.appName); i.putExtra(Constants.STORENAME_KEY, appItem.storeName); i.putExtra(Constants.ICON_KEY, appItem.icon); i.putExtra( Constants.DOWNLOAD_FROM_KEY, "updates"); // renamed from: recommended_apps v.getContext().startActivity(i); } }); Glide.with(updateViewHolder.itemView.getContext()) .load(appItem.icon) .asBitmap() .into(updateViewHolder.icon); break; case R.layout.installed_row: final InstalledViewHolder installedViewHolder = (InstalledViewHolder) holder; final InstallRow installRow = (InstallRow) displayableList.get(position); installedViewHolder.name.setText(installRow.appName); installedViewHolder.tvAppVersion.setText(installRow.versionName); installedViewHolder.createReviewLayout.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(v.getContext(), UploadApkActivity.class); String packageName = installRow.packageName; intent.putExtra("package_name", packageName); v.getContext().startActivity(intent); Analytics.Updates.createReview(); } }); installedViewHolder.installedItemFrame.setOnLongClickListener( new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext()); final View dialogView = LayoutInflater.from(v.getContext()) .inflate(R.layout.exclude_update_uninstall_menu, null); builder.setView(dialogView); final AlertDialog alertDialog = builder.create(); ((TextView) dialogView.findViewById(R.id.tvUpdateUninstall)) .setText(R.string.updatesTabAdapterUninstall); dialogView .findViewById(R.id.confirmIgnoreUpdateUninstall) .setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Fragment fragment = new UninstallRetainFragment(); Bundle args = new Bundle(); args.putString("name", installRow.appName); args.putString("package", installRow.packageName); args.putString("version", installRow.versionName); args.putString("icon", installRow.icon); fragment.setArguments(args); activity .getSupportFragmentManager() .beginTransaction() .add(fragment, "uninstall") .commit(); // // displayableList.remove(holder.getAdapterPosition()); // // notifyItemRemoved(holder.getAdapterPosition()); alertDialog.dismiss(); } }); alertDialog.show(); return true; } }); installedViewHolder.installedItemFrame.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View v) { Intent intent = activity.getPackageManager().getLaunchIntentForPackage(installRow.packageName); if (installedViewHolder.itemView != null && installedViewHolder.itemView.getContext() != null && intent != null) { installedViewHolder.itemView.getContext().startActivity(intent); } } }); // // installedViewHolder.downloads.setText(String.valueOf(installRow.versionName)); // installedViewHolder.ratingBar.setRating((float) installRow.rating); // installedViewHolder.icon.setImageURI(Uri.parse(installRow.icon)); Glide.with(installedViewHolder.itemView.getContext()) .load(installRow.icon) .into(installedViewHolder.icon); break; } }