From 329e025544578faef757614f568ba1dcdc898883 Mon Sep 17 00:00:00 2001 From: uabdullah Date: Mon, 11 Dec 2017 17:35:52 -0800 Subject: Implement today and older for NUI Voicemail and update MediaPlayerView tests This CL also updates the tests that were TODOs from http://b/70401224 to allow testing the MediaPlayerView SCREENSHOT: Today: http://screen/8KvVtLtHeq4 Older: http://screen/5oskBZPbDR5 Test: Unit tests PiperOrigin-RevId: 178699528 Change-Id: Idab797eff18fd277618938a8a54da350c60b3d54 --- .../voicemail/listui/NewVoicemailAdapter.java | 243 +++++++++++++++++++-- .../listui/NewVoicemailHeaderViewHolder.java | 43 ++++ .../voicemail/listui/NewVoicemailViewHolder.java | 10 + .../voicemail/listui/VoicemailCursorLoader.java | 4 + .../res/layout/new_voicemail_entry_header.xml | 29 +++ .../dialer/voicemail/listui/res/values/dimens.xml | 2 + .../dialer/voicemail/listui/res/values/strings.xml | 7 + 7 files changed, 315 insertions(+), 23 deletions(-) create mode 100644 java/com/android/dialer/voicemail/listui/NewVoicemailHeaderViewHolder.java create mode 100644 java/com/android/dialer/voicemail/listui/res/layout/new_voicemail_entry_header.xml (limited to 'java/com/android/dialer/voicemail') diff --git a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java index 61fed52e6..955c7daee 100644 --- a/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java +++ b/java/com/android/dialer/voicemail/listui/NewVoicemailAdapter.java @@ -21,28 +21,49 @@ import android.media.MediaPlayer; import android.media.MediaPlayer.OnCompletionListener; import android.media.MediaPlayer.OnErrorListener; import android.media.MediaPlayer.OnPreparedListener; +import android.support.annotation.IntDef; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; +import android.support.v7.widget.RecyclerView.ViewHolder; import android.util.ArrayMap; import android.util.ArraySet; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import com.android.dialer.calllogutils.CallLogDates; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.time.Clock; import com.android.dialer.voicemail.listui.NewVoicemailViewHolder.NewVoicemailViewHolderListener; import com.android.dialer.voicemail.model.VoicemailEntry; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.util.Objects; import java.util.Set; /** {@link RecyclerView.Adapter} for the new voicemail call log fragment. */ -final class NewVoicemailAdapter extends RecyclerView.Adapter +final class NewVoicemailAdapter extends RecyclerView.Adapter implements NewVoicemailViewHolderListener { + /** IntDef for the different types of rows that can be shown in the call log. */ + @Retention(RetentionPolicy.SOURCE) + @IntDef({RowType.HEADER, RowType.VOICEMAIL_ENTRY}) + @interface RowType { + /** Header that displays "Today" or "Older". */ + int HEADER = 1; + /** A row representing a voicemail entry. */ + int VOICEMAIL_ENTRY = 2; + } + private final Cursor cursor; private final Clock clock; + + /** {@link Integer#MAX_VALUE} when the "Today" header should not be displayed. */ + private final int todayHeaderPosition; + /** {@link Integer#MAX_VALUE} when the "Older" header should not be displayed. */ + private final int olderHeaderPosition; + private final FragmentManager fragmentManager; /** A valid id for {@link VoicemailEntry} is greater than 0 */ private int currentlyExpandedViewHolderId = -1; @@ -73,6 +94,33 @@ final class NewVoicemailAdapter extends RecyclerView.Adapter todayHeaderPosition) { + previousHeaders++; + } + if (olderHeaderPosition != Integer.MAX_VALUE && position > olderHeaderPosition) { + previousHeaders++; + } + + LogUtil.i( + "NewVoicemailAdapter.onBindViewHolder", + "view holder at pos:%d, prevHeaderCount:%d", + position, + previousHeaders); + // Remove if the viewholder is being recycled. - if (newVoicemailViewHolderArrayMap.containsKey(viewHolder.getViewHolderId())) { - // TODO(uabdullah): Remove the logging, only here for debugging during development. + if (newVoicemailViewHolderArrayMap.containsKey(newVoicemailViewHolder.getViewHolderId())) { + // TODO(uabdullah): a bug Remove logging, temporarily here for debugging. LogUtil.i( "NewVoicemailAdapter.onBindViewHolder", - "Removing from hashset:%d, hashsetSize:%d", - viewHolder.getViewHolderId(), - newVoicemailViewHolderArrayMap.size()); + "Removing from hashset:%d, hashsetSize:%d, currExpanded:%d", + newVoicemailViewHolder.getViewHolderId(), + newVoicemailViewHolderArrayMap.size(), + currentlyExpandedViewHolderId); - newVoicemailViewHolderArrayMap.remove(viewHolder.getViewHolderId()); + newVoicemailViewHolderArrayMap.remove(newVoicemailViewHolder.getViewHolderId()); + printHashSet(); + printHashMap(); } - viewHolder.reset(); - cursor.moveToPosition(position); - viewHolder.bindViewHolderValuesFromAdapter( + newVoicemailViewHolder.reset(); + cursor.moveToPosition(position - previousHeaders); + newVoicemailViewHolder.bindViewHolderValuesFromAdapter( cursor, fragmentManager, mediaPlayer, position, currentlyExpandedViewHolderId); + // TODO(uabdullah): a bug Remove logging, temporarily here for debugging. + LogUtil.i( + "NewVoicemailAdapter.onBindViewHolder", + "Adding to hashset:%d, hashsetSize:%d, pos:%d, currExpanded:%d", + newVoicemailViewHolder.getViewHolderId(), + newVoicemailViewHolderArrayMap.size(), + position, + currentlyExpandedViewHolderId); + // Need this to ensure correct getCurrentlyExpandedViewHolder() value - newVoicemailViewHolderArrayMap.put(viewHolder.getViewHolderId(), viewHolder); + newVoicemailViewHolderArrayMap.put( + newVoicemailViewHolder.getViewHolderId(), newVoicemailViewHolder); + + // TODO(uabdullah): a bug Remove logging, temporarily here for debugging. + printHashSet(); + // TODO(uabdullah): a bug Remove logging, temporarily here for debugging. + printHashMap(); // If the viewholder is playing the voicemail, keep updating its media player view (seekbar, // duration etc.) - if (viewHolder.isViewHolderExpanded() && mediaPlayer.isPlaying()) { + if (newVoicemailViewHolder.isViewHolderExpanded() && mediaPlayer.isPlaying()) { + LogUtil.i( + "NewVoicemailAdapter.onBindViewHolder", + "Adding to hashset:%d, hashsetSize:%d, pos:%d, currExpanded:%d", + newVoicemailViewHolderSet.size(), + newVoicemailViewHolderArrayMap.size(), + position, + currentlyExpandedViewHolderId); + Assert.checkArgument( - viewHolder + newVoicemailViewHolder .getViewHolderVoicemailUri() .equals(mediaPlayer.getLastPlayedOrPlayingVoicemailUri()), "only the expanded view holder can be playing."); @@ -126,10 +256,48 @@ final class NewVoicemailAdapter extends RecyclerView.Adapter + + + + diff --git a/java/com/android/dialer/voicemail/listui/res/values/dimens.xml b/java/com/android/dialer/voicemail/listui/res/values/dimens.xml index e37bc65fe..52fad4917 100644 --- a/java/com/android/dialer/voicemail/listui/res/values/dimens.xml +++ b/java/com/android/dialer/voicemail/listui/res/values/dimens.xml @@ -36,4 +36,6 @@ 56dp 0dp + + 16dp diff --git a/java/com/android/dialer/voicemail/listui/res/values/strings.xml b/java/com/android/dialer/voicemail/listui/res/values/strings.xml index 508f67436..53c525279 100644 --- a/java/com/android/dialer/voicemail/listui/res/values/strings.xml +++ b/java/com/android/dialer/voicemail/listui/res/values/strings.xml @@ -27,4 +27,11 @@ 00:00 + + + Today + + + Older + \ No newline at end of file -- cgit v1.2.3