/*
* Copyright(c) 2017 lizhaotailang
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package io.github.marktony.espresso.mvp.packages;
import android.content.Context;
import android.graphics.Typeface;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.AppCompatTextView;
import android.support.v7.widget.RecyclerView;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.LinearLayout;
import java.util.List;
import de.hdodenhof.circleimageview.CircleImageView;
import io.github.marktony.espresso.R;
import io.github.marktony.espresso.data.Package;
import io.github.marktony.espresso.interfaze.OnRecyclerViewItemClickListener;
/**
* Created by lizhaotailang on 2017/2/11.
*/
public class PackagesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
@NonNull
private final Context context;
@NonNull
private final LayoutInflater inflater;
@NonNull
private List<Package> list;
@Nullable
private OnRecyclerViewItemClickListener listener;
private String[] packageStatus;
public PackagesAdapter(@NonNull Context context, @NonNull List<Package> list) {
this.context = context;
inflater = LayoutInflater.from(context);
this.list = list;
packageStatus = context.getResources().getStringArray(R.array.package_status);
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
return new PackageViewHolder(inflater.inflate(R.layout.item_package, parent, false), listener);
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
Package item = list.get(position);
PackageViewHolder pvh = (PackageViewHolder) holder;
if (item.getData() != null && item.getData().size() > 0) {
int state = Integer.parseInt(item.getState());
pvh.textViewStatus.setText(String.valueOf(packageStatus[state]) + " - " + item.getData().get(0).getContext());
pvh.textViewTime.setText(item.getData().get(0).getTime());
} else {
pvh.textViewTime.setText("");
pvh.textViewStatus.setText(R.string.get_status_error);
}
if (item.isReadable()) {
pvh.textViewPackageName.setTypeface(null, Typeface.BOLD);
pvh.textViewTime.setTypeface(null, Typeface.BOLD);
pvh.textViewStatus.setTypeface(null, Typeface.BOLD);
} else {
pvh.textViewPackageName.setTypeface(null, Typeface.NORMAL);
pvh.textViewTime.setTypeface(null, Typeface.NORMAL);
pvh.textViewStatus.setTypeface(null, Typeface.NORMAL);
}
pvh.textViewPackageName.setText(item.getName());
pvh.textViewAvatar.setText(item.getName().substring(0,1));
pvh.circleImageViewAvatar.setImageResource(item.getColorAvatar());
}
@Override
public int getItemCount() {
return list.size();
}
public void setOnRecyclerViewItemClickListener(OnRecyclerViewItemClickListener listener) {
this.listener = listener;
}
/**
* Update the data. Keep the data is the latest.
* @param list The data.
*/
public void updateData(@NonNull List<Package> list) {
this.list.clear();
this.list.addAll(list);
notifyDataSetChanged();
}
/**
* The view holder of package in home list.
*/
public class PackageViewHolder extends RecyclerView.ViewHolder
implements View.OnClickListener, View.OnCreateContextMenuListener {
AppCompatTextView textViewPackageName;
AppCompatTextView textViewTime;
AppCompatTextView textViewStatus;
AppCompatTextView textViewAvatar;
AppCompatTextView textViewRemove;
ImageView imageViewRemove;
CircleImageView circleImageViewAvatar;
LinearLayout layoutMain;
View wrapperView;
private OnRecyclerViewItemClickListener listener;
public PackageViewHolder(View itemView, OnRecyclerViewItemClickListener listener) {
super(itemView);
textViewPackageName = (AppCompatTextView) itemView.findViewById(R.id.textViewPackageName);
textViewStatus = (AppCompatTextView) itemView.findViewById(R.id.textViewStatus);
textViewTime = (AppCompatTextView) itemView.findViewById(R.id.textViewTime);
textViewAvatar = (AppCompatTextView) itemView.findViewById(R.id.textViewAvatar);
textViewRemove = (AppCompatTextView) itemView.findViewById(R.id.textViewRemove);
imageViewRemove = (ImageView) itemView.findViewById(R.id.imageViewRemove);
circleImageViewAvatar = (CircleImageView) itemView.findViewById(R.id.circleImageView);
layoutMain = (LinearLayout) itemView.findViewById(R.id.layoutPackageItemMain);
wrapperView = itemView.findViewById(R.id.layoutPackageItem);
this.listener = listener;
itemView.setOnClickListener(this);
itemView.setOnCreateContextMenuListener(this);
}
@Override
public void onClick(View v) {
if (this.listener != null) {
listener.OnItemClick(v, getLayoutPosition());
}
}
/**
* Create the context menu.
* @param menu The context menu.
* @param v The view.
* @param menuInfo The menu information.
*/
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (menu != null) {
((MainActivity)context).setSelectedPackageId(list.get(getLayoutPosition()).getNumber());
Package pack = list.get(getLayoutPosition());
menu.setHeaderTitle(pack.getName());
// Set different title according to the data({@link Package#readable})
if (pack.isReadable()) {
menu.add(Menu.NONE, R.id.action_set_readable, 0, R.string.set_read);
} else {
menu.add(Menu.NONE, R.id.action_set_readable, 0, R.string.set_unread);
}
menu.add(Menu.NONE, R.id.action_copy_code, 0, R.string.copy_code);
menu.add(Menu.NONE, R.id.action_share, 0, R.string.share);
}
}
}
}