package com.safemobile.adapters; import android.app.Activity; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; import com.safemobile.activities.AbstractRecordingsActivity; import com.safemobile.lib.R; import com.safemobile.lib.Recording; import com.safemobile.lib.SM; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Hashtable; public class RecordingsGridViewAdapter extends BaseAdapter { private final ArrayList listRecordings; private final ArrayList recordingExists; private final ArrayList playingPositions; private final Activity activity; private final Hashtable hash = new Hashtable<>(); public RecordingsGridViewAdapter(Activity activity, ArrayList listRecordings, ArrayList recordingExists) { super(); this.activity = activity; this.listRecordings = listRecordings; this.recordingExists = recordingExists; playingPositions = new ArrayList<>(); for (int i = 0; i < recordingExists.size(); i++) { playingPositions.add(false); listRecordings.get(i).date = listRecordings.get(i).startGMT; listRecordings.get(i).duration = listRecordings.get(i).endGMT - listRecordings.get(i).startGMT; } } @Override public int getCount() { return listRecordings.size(); } @Override public Recording getItem(int position) { return listRecordings.get(position); } @Override public long getItemId(int position) { return 0; } /** * Define Row Template */ public static class ViewHolder { private LinearLayout layoutRecording; private ImageView imageViewPlay; private ImageView imageViewRecycle; private TextView textViewSender; private TextView textViewDuration; private TextView textViewDate; public LinearLayout getLayoutRecording() { return layoutRecording; } public void setLayoutRecording(LinearLayout layoutRecording) { this.layoutRecording = layoutRecording; } public ImageView getImageViewPlay() { return imageViewPlay; } public void setImageViewPlay(ImageView imageViewPlay) { this.imageViewPlay = imageViewPlay; } public ImageView getImageViewRecycle() { return imageViewRecycle; } public void setImageViewRecycle(ImageView imageViewRecycle) { this.imageViewRecycle = imageViewRecycle; } public TextView getTextViewSender() { return textViewSender; } public void setTextViewSender(TextView textViewSender) { this.textViewSender = textViewSender; } public TextView getTextViewDuration() { return textViewDuration; } public void setTextViewDuration(TextView textViewDuration) { this.textViewDuration = textViewDuration; } public TextView getTextViewDate() { return textViewDate; } public void setTextViewDate(TextView textViewDate) { this.textViewDate = textViewDate; } } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder view; LayoutInflater layoutInflater = activity.getLayoutInflater(); if (convertView == null) { view = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.row_recordings, null); view.setLayoutRecording(convertView.findViewById(R.id.layoutRecording)); view.setImageViewPlay(convertView.findViewById(R.id.imageViewPlay)); view.setTextViewSender(convertView.findViewById(R.id.textViewSender)); view.setTextViewDuration(convertView.findViewById(R.id.textViewDuration)); view.setTextViewDate(convertView.findViewById(R.id.textViewDate)); view.setImageViewRecycle(convertView.findViewById(R.id.imageViewRecycle)); view.getImageViewRecycle().setVisibility(View.GONE); convertView.setTag(view); } else { view = (ViewHolder) convertView.getTag(); } hash.put(position, convertView); /* if recording doesn't exists change background */ if (Boolean.FALSE.equals(recordingExists.get(position))) view.getLayoutRecording().setBackgroundColor(0xFFFFFFFF); else { /* if recording is not playing let background to white */ if (Boolean.FALSE.equals(playingPositions.get(position))) view.getLayoutRecording().setBackgroundColor(0xFFFFFFFF); else view.getLayoutRecording().setBackgroundColor(0xFF457c98); } /* change icon according to call type [outgoing or incoming] */ SM.Exception("REC TYPE : " + listRecordings.get(position).callType); switch (listRecordings.get(position).callType) { case 6: view.getImageViewPlay().setImageResource(R.drawable.call_received_all); break; case 2: view.getImageViewPlay().setImageResource(R.drawable.call_made_all); break; case 4: view.getImageViewPlay().setImageResource(R.drawable.call_received); break; case 0: view.getImageViewPlay().setImageResource(R.drawable.call_made); break; case 5: view.getImageViewPlay().setImageResource(R.drawable.call_received_group); break; case 1: view.getImageViewPlay().setImageResource(R.drawable.call_made_group); break; default: view.getImageViewPlay().setImageResource(R.drawable.alert); } /* intercept Recycle click */ view.getImageViewRecycle().setOnClickListener(v -> { // change the background for marked record View view1 = hash.get(position); ViewHolder viewHolder = null; if (view1 != null) { viewHolder = (ViewHolder) view1.getTag(); } if (viewHolder != null) { viewHolder.getLayoutRecording().setBackgroundColor(0xFF457c98); } ((AbstractRecordingsActivity) activity).deleteSelected(position); }); view.getTextViewSender().setText(String.format("%s -> %s", getItem(position).userWhoCalled, getItem(position).userWhoWasCalled)); view.textViewDuration.setText(String.format("[%d sec]", getItem(position).duration)); /* Add call Date */ Date date = new Date(); date.setTime(listRecordings.get(position).date * 1000); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); if (date.after(calendar.getTime())) simpleDateFormat = new SimpleDateFormat("HH:mm:ss"); else simpleDateFormat = new SimpleDateFormat("MMM-dd HH:mm"); view.getTextViewDate().setText(simpleDateFormat.format(date)); return convertView; } /** * Get the View for one row in the GridView */ public View getView(int position) { return hash.get(position); } /** * Change playing recording background */ public void changePlaying(int position, boolean playing) { // change value in the vector playingPositions.set(position, playing); RecordingsGridViewAdapter.ViewHolder viewHolder = (RecordingsGridViewAdapter.ViewHolder) getView(position).getTag(); if (!playing) viewHolder.getLayoutRecording().setBackgroundColor(0xFFFFFFFF); else viewHolder.getLayoutRecording().setBackgroundColor(0xFF457c98); View view = hash.get(position); // update hash if (view != null) view.setTag(viewHolder); } }