package mil.nga.dice.cardview;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import java.util.prefs.Preferences;
import mil.nga.dice.R;
import mil.nga.dice.ReportCollectionCallbacks;
import mil.nga.dice.report.NoteActivity;
import mil.nga.dice.report.Report;
import mil.nga.dice.report.ReportManager;
public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {
private final Context context;
private final List<Report> reports;
private List<Report> swipedReports;
private final ReportCollectionCallbacks callbacks;
private final LayoutInflater inflater;
private Activity activityToUpdate;
public CardAdapter(Context context, List<Report> reports, ReportCollectionCallbacks callbacks) {
this.reports = reports;
this.context = context;
this.callbacks = callbacks;
this.swipedReports = new ArrayList<>();
inflater = (LayoutInflater) this.context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getItemCount() {
return reports.size();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = inflater.inflate(R.layout.report_card, parent, false);
ViewHolder vh = new ViewHolder(v);
return vh;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Report report = reports.get(position);
if (this.swipedReports.contains(report)) {
holder.mDeleteButton.setVisibility(View.VISIBLE);
holder.mCancelButton.setVisibility(View.VISIBLE);
holder.mTitleTextView.setVisibility(View.INVISIBLE);
holder.mDescriptionTextView.setVisibility(View.INVISIBLE);
holder.mNoteButton.setVisibility(View.INVISIBLE);
holder.mThumbnailImageView.setVisibility(View.INVISIBLE);
holder.itemView.setBackgroundColor(Color.RED);
} else {
holder.itemView.setBackgroundColor(Color.WHITE);
holder.mDeleteButton.setVisibility(View.GONE);
holder.mCancelButton.setVisibility(View.GONE);
holder.mTitleTextView.setVisibility(View.VISIBLE);
holder.mDescriptionTextView.setVisibility(View.VISIBLE);
holder.mNoteButton.setVisibility(View.VISIBLE);
holder.mThumbnailImageView.setVisibility(View.VISIBLE);
}
holder.mReport = report;
holder.mTitleTextView.setText(report.getTitle());
holder.mDescriptionTextView.setText(report.getDescription());
Drawable thumbnail = ReportManager.getInstance().thumbnailForReport(report);
holder.mThumbnailImageView.setImageDrawable(thumbnail);
holder.itemView.setEnabled(holder.mReport != null && holder.mReport.isEnabled());
if (holder.itemView.isEnabled()) {
holder.mNoteButton.setVisibility(View.VISIBLE);
}
else {
holder.mNoteButton.setVisibility(View.INVISIBLE);
}
}
public void swiped(int swipedPosition, Activity activity) {
this.swipedReports.add(reports.get(swipedPosition));
notifyItemChanged(swipedPosition);
activityToUpdate = activity;
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private Report mReport;
private ImageView mThumbnailImageView;
private TextView mTitleTextView;
private TextView mDescriptionTextView;
private Button mNoteButton;
private Button mDeleteButton;
private Button mCancelButton;
public ViewHolder(View v) {
super(v);
mThumbnailImageView = (ImageView) v.findViewById(R.id.card_thumbnail);
mTitleTextView = (TextView) v.findViewById(R.id.card_title);
mDescriptionTextView = (TextView) v.findViewById(R.id.card_description);
mNoteButton = (Button) v.findViewById(R.id.view_note_button);
mNoteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent noteIntent = new Intent(context, NoteActivity.class);
noteIntent.putExtra("report", mReport);
context.startActivity(noteIntent);
}
});
mDeleteButton = (Button) v.findViewById(R.id.delete_report_button);
mDeleteButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
ReportManager.getInstance().deleteReport(mReport);
ReportManager.getInstance().refreshReports(activityToUpdate);
}
});
mCancelButton = (Button) v.findViewById(R.id.cancel_delete_button);
mCancelButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
// let the card go back to how it was
swipedReports.remove(mReport);
notifyItemChanged(reports.indexOf(mReport));
}
});
v.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (!mReport.isEnabled()) {
return;
}
if (mReport.getId() != null && mReport.getId().equalsIgnoreCase(ReportManager.USER_GUIDE_REPORT_ID)) {
String url = "https://github.com/ngageoint/disconnected-content-explorer-examples/raw/master/reportzips/DICEUserGuide.zip";
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
context.startActivity(i);
} else {
callbacks.reportSelectedToView(mReport);
}
}
}
}