package io.virtualapp.home.adapters; import android.content.Context; import android.support.v7.widget.RecyclerView; import android.util.SparseIntArray; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import java.util.List; import io.virtualapp.R; import io.virtualapp.abs.ui.VUiKit; import io.virtualapp.home.models.AppData; import io.virtualapp.home.models.MultiplePackageAppData; import io.virtualapp.widgets.LabelView; import io.virtualapp.widgets.LauncherIconView; /** * @author Lody */ public class LaunchpadAdapter extends RecyclerView.Adapter<LaunchpadAdapter.ViewHolder> { private LayoutInflater mInflater; private List<AppData> mList; private SparseIntArray mColorArray = new SparseIntArray(); private OnAppClickListener mAppClickListener; public LaunchpadAdapter(Context context) { mInflater = LayoutInflater.from(context); } public void add(AppData model) { mList.add(model); notifyItemInserted(mList.size() - 1); } public void replace(int index, AppData data) { mList.set(index, data); notifyItemChanged(index); } public void remove(AppData data) { if (mList.remove(data)) { notifyDataSetChanged(); } } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return new ViewHolder(mInflater.inflate(R.layout.item_launcher_app, null)); } @Override public void onBindViewHolder(ViewHolder holder, int position) { AppData data = mList.get(position); holder.color = getColor(position); holder.iconView.setImageDrawable(data.getIcon()); holder.nameView.setText(data.getName()); if (data.isFirstOpen() && !data.isLoading()) { holder.firstOpenDot.setVisibility(View.VISIBLE); } else { holder.firstOpenDot.setVisibility(View.INVISIBLE); } holder.itemView.setBackgroundColor(holder.color); holder.itemView.setOnClickListener(v -> { if (mAppClickListener != null) { mAppClickListener.onAppClick(position, data); } }); if (data instanceof MultiplePackageAppData) { MultiplePackageAppData multipleData = (MultiplePackageAppData) data; holder.spaceLabelView.setVisibility(View.VISIBLE); holder.spaceLabelView.setText(multipleData.userId + 1 + ""); } else { holder.spaceLabelView.setVisibility(View.INVISIBLE); } if (data.isLoading()) { startLoadingAnimation(holder.iconView); } else { holder.iconView.setProgress(100, false); } } private void startLoadingAnimation(LauncherIconView iconView) { iconView.setProgress(40, true); VUiKit.defer().when(() -> { try { Thread.sleep(900L); } catch (InterruptedException e) { e.printStackTrace(); } }).done((res) -> iconView.setProgress(80, true)); } private int getColor(int position) { int color = mColorArray.get(position); if (color == 0) { int type = position % 3; int row = position / 3; int rowType = row % 3; if (rowType == 0) { if (type == 0) { color = mInflater.getContext().getResources().getColor(R.color.desktopColorA); } else if (type == 1) { color = mInflater.getContext().getResources().getColor(R.color.desktopColorB); } else { color = mInflater.getContext().getResources().getColor(R.color.desktopColorC); } } else if (rowType == 1) { if (type == 0) { color = mInflater.getContext().getResources().getColor(R.color.desktopColorB); } else if (type == 1) { color = mInflater.getContext().getResources().getColor(R.color.desktopColorC); } else { color = mInflater.getContext().getResources().getColor(R.color.desktopColorA); } } else { if (type == 0) { color = mInflater.getContext().getResources().getColor(R.color.desktopColorC); } else if (type == 1) { color = mInflater.getContext().getResources().getColor(R.color.desktopColorA); } else { color = mInflater.getContext().getResources().getColor(R.color.desktopColorB); } } mColorArray.put(position, color); } return color; } @Override public int getItemCount() { return mList == null ? 0 : mList.size(); } public List<AppData> getList() { return mList; } public void setList(List<AppData> list) { this.mList = list; notifyDataSetChanged(); } public void setAppClickListener(OnAppClickListener mAppClickListener) { this.mAppClickListener = mAppClickListener; } public void moveItem(int pos, int targetPos) { AppData model = mList.remove(pos); mList.add(targetPos, model); notifyItemMoved(pos, targetPos); } public void refresh(AppData model) { int index = mList.indexOf(model); if (index >= 0) { notifyItemChanged(index); } } public interface OnAppClickListener { void onAppClick(int position, AppData model); } public class ViewHolder extends RecyclerView.ViewHolder { public int color; LauncherIconView iconView; TextView nameView; LabelView spaceLabelView; View firstOpenDot; ViewHolder(View itemView) { super(itemView); iconView = (LauncherIconView) itemView.findViewById(R.id.item_app_icon); nameView = (TextView) itemView.findViewById(R.id.item_app_name); spaceLabelView = (LabelView) itemView.findViewById(R.id.item_app_space_idx); firstOpenDot = itemView.findViewById(R.id.item_first_open_dot); } } }