Merge "Fix seekbar seek control missing on RTL mode" into nyc-dev
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 1c27440..6c25275 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -27,11 +27,9 @@
 import android.support.v7.widget.CardView;
 import android.support.v7.widget.RecyclerView;
 import android.telecom.PhoneAccountHandle;
-import android.telephony.PhoneNumberUtils;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
-import android.util.Log;
 import android.view.ContextMenu;
 import android.view.MenuItem;
 import android.view.View;
@@ -66,8 +64,6 @@
 import com.google.common.collect.Lists;
 
 import java.util.List;
-import java.util.Map;
-import java.util.Set;
 
 /**
  * This is an object containing references to views contained by the call log list item. This
@@ -625,13 +621,6 @@
     public void updatePhoto() {
         quickContactView.assignContactUri(info.lookupUri);
 
-        if (isBlocked && !TextUtils.isEmpty(number) /* maybe a private number ? */) {
-            quickContactView.setImageDrawable(mContext.getDrawable(R.drawable.blocked_contact));
-            phoneCallDetailsViews.callLocationAndDate.setText(
-                    mContext.getString(R.string.blocked_number_call_log_label));
-            return;
-        }
-
         final boolean isVoicemail = mCallLogCache.isVoicemailNumber(accountHandle, number);
         int contactType = ContactPhotoManager.TYPE_DEFAULT;
         if (isVoicemail) {
@@ -653,6 +642,14 @@
             ContactPhotoManager.getInstance(mContext).loadThumbnail(quickContactView, info.photoId,
                     false /* darkTheme */, true /* isCircular */, request);
         }
+
+        if (mExtendedBlockingButtonRenderer != null) {
+            mExtendedBlockingButtonRenderer.updatePhotoAndLabelIfNecessary(
+                    number,
+                    countryIso,
+                    quickContactView,
+                    phoneCallDetailsViews.callLocationAndDate);
+        }
     }
 
     @Override
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 9ff74cf..3b493cf 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -291,7 +291,7 @@
      */
     private String getUnreadMissedCallsQuery() {
         StringBuilder where = new StringBuilder();
-        where.append(Calls.IS_READ).append(" = 0");
+        where.append(Calls.IS_READ).append(" = 0 OR ").append(Calls.IS_READ).append(" IS NULL");
         where.append(" AND ");
         where.append(Calls.TYPE).append(" = ").append(Calls.MISSED_TYPE);
         return where.toString();
diff --git a/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java b/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java
index 5ff3732..f8d5ea0 100644
--- a/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java
+++ b/src/com/android/dialer/service/ExtendedBlockingButtonRenderer.java
@@ -19,6 +19,8 @@
 import android.support.annotation.Nullable;
 import android.view.View;
 import android.view.ViewStub;
+import android.widget.QuickContactBadge;
+import android.widget.TextView;
 
 import java.util.List;
 
@@ -70,4 +72,15 @@
     void render(ViewStub viewStub);
 
     void setViewHolderInfo(ViewHolderInfo info);
+
+    /**
+     * Updates the photo and label for the given phone number and country iso.
+     *
+     * @param number Phone number for which the rendering occurs.
+     * @param countryIso Two-letter country code.
+     * @param badge {@link QuickContactBadge} in which the photo should be rendered.
+     * @param view Textview that will hold the new label.
+     */
+    void updatePhotoAndLabelIfNecessary(
+            String number, String countryIso, QuickContactBadge badge, TextView view);
 }
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
index 7d72028..19b592d 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackLayout.java
@@ -151,6 +151,11 @@
         @Override
         public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
             setClipPosition(progress, seekBar.getMax());
+            // Update the seek position if user manually changed it. This makes sure position gets
+            // updated when user use volume button to seek playback in talkback mode.
+            if (fromUser) {
+                mPresenter.seek(progress);
+            }
         }
     };
 
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index e58cb34..fcb35e5 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -747,6 +747,15 @@
         }
     }
 
+    /**
+     * Seek to position. This is called when user manually seek the playback. It could be either
+     * by touch or volume button while in talkback mode.
+     * @param position
+     */
+    public void seek(int position) {
+        mPosition = position;
+    }
+
     private void enableProximitySensor() {
         if (mProximityWakeLock == null || mIsSpeakerphoneOn || !mIsPrepared
                 || mMediaPlayer == null || !mMediaPlayer.isPlaying()) {