Merge changes from topic "am-d8363787-88bb-4e45-b57c-b18d9d8290cb" into oc-dev am: f7bdc8fd87 am: 24fba8cf55
am: 8f2f5671b0

Change-Id: If409352ed52e8b4a1bf92b2bceedf5f032e8a7ed
diff --git a/Android.mk b/Android.mk
index 06ac9e6..c9ada0d 100644
--- a/Android.mk
+++ b/Android.mk
@@ -20,43 +20,34 @@
 LOCAL_SRC_FILES := $(call all-java-files-under, src)
 
 LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
-ifeq ($(TARGET_BUILD_APPS),)
-    LOCAL_RESOURCE_DIR += frameworks/support/v7/appcompat/res
-    LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
-else
-    LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res
-    LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/recyclerview/res
-endif
-LOCAL_RESOURCE_DIR += frameworks/opt/chips/res
-LOCAL_RESOURCE_DIR += frameworks/opt/colorpicker/res
-LOCAL_RESOURCE_DIR += frameworks/opt/photoviewer/res
-LOCAL_RESOURCE_DIR += frameworks/opt/photoviewer/activity/res
+LOCAL_USE_AAPT2 := true
 
-LOCAL_STATIC_JAVA_LIBRARIES := android-common
-LOCAL_STATIC_JAVA_LIBRARIES += android-common-framesequence
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v4
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-palette
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
-LOCAL_STATIC_JAVA_LIBRARIES += android-support-v13
-LOCAL_STATIC_JAVA_LIBRARIES += com.android.vcard
-LOCAL_STATIC_JAVA_LIBRARIES += guava
-LOCAL_STATIC_JAVA_LIBRARIES += libchips
-LOCAL_STATIC_JAVA_LIBRARIES += libphotoviewer
-LOCAL_STATIC_JAVA_LIBRARIES += libphonenumber
-LOCAL_STATIC_JAVA_LIBRARIES += colorpicker
+LOCAL_STATIC_ANDROID_LIBRARIES := \
+    android-support-compat \
+    android-support-media-compat \
+    android-support-core-utils \
+    android-support-core-ui \
+    android-support-fragment \
+    android-support-v7-appcompat \
+    android-support-v7-palette \
+    android-support-v7-recyclerview \
+    android-support-v13 \
+    colorpicker \
+    libchips \
+    libphotoviewer
+
+LOCAL_STATIC_JAVA_LIBRARIES := \
+    android-support-annotations \
+    android-common \
+    android-common-framesequence \
+    com.android.vcard \
+    guava \
+    libphonenumber
 
 include $(LOCAL_PATH)/version.mk
 
-LOCAL_AAPT_FLAGS := --auto-add-overlay
 LOCAL_AAPT_FLAGS += --version-name "$(version_name_package)"
 LOCAL_AAPT_FLAGS += --version-code $(version_code_package)
-LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat
-LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview
-LOCAL_AAPT_FLAGS += --extra-packages com.android.ex.chips
-LOCAL_AAPT_FLAGS += --extra-packages com.android.vcard
-LOCAL_AAPT_FLAGS += --extra-packages com.android.ex.photo
-LOCAL_AAPT_FLAGS += --extra-packages com.android.colorpicker
 
 ifdef TARGET_BUILD_APPS
     LOCAL_JNI_SHARED_LIBRARIES := libframesequence libgiftranscode
@@ -64,11 +55,9 @@
     LOCAL_REQUIRED_MODULES:= libframesequence libgiftranscode
 endif
 
-LOCAL_PROGUARD_FLAGS := -ignorewarnings
+LOCAL_PROGUARD_ENABLED := obfuscation optimization
 
-LOCAL_PROGUARD_ENABLED := nosystem
-
-LOCAL_PROGUARD_FLAG_FILES := ../../../build/core/proguard_basic_keeps.flags proguard.flags
+LOCAL_PROGUARD_FLAG_FILES := proguard.flags
 ifeq (eng,$(TARGET_BUILD_VARIANT))
     LOCAL_PROGUARD_FLAG_FILES += proguard-test.flags
 else
diff --git a/jni/Android.mk b/jni/Android.mk
index dbc0674..cb9a69c 100644
--- a/jni/Android.mk
+++ b/jni/Android.mk
@@ -27,7 +27,7 @@
 LOCAL_MODULE    := libgiftranscode
 LOCAL_SRC_FILES := GifTranscoder.cpp
 
-LOCAL_CFLAGS += -Wall -Wno-unused-parameter -Wno-switch
+LOCAL_CFLAGS += -Wall -Werror -Wno-unused-parameter -Wno-switch
 
 LOCAL_SDK_VERSION := 19
 LOCAL_NDK_STL_VARIANT := c++_static # LLVM libc++
diff --git a/src/com/android/messaging/datamodel/media/GifImageResource.java b/src/com/android/messaging/datamodel/media/GifImageResource.java
index 6801165..cbea1ee 100644
--- a/src/com/android/messaging/datamodel/media/GifImageResource.java
+++ b/src/com/android/messaging/datamodel/media/GifImageResource.java
@@ -58,10 +58,10 @@
     public Drawable getDrawable(Resources resources) {
         try {
             return new FrameSequenceDrawable(mFrameSequence);
-        } catch (final Exception e) {
-            // Malicious gif images can make platform throw different kind of exceptions. Catch
-            // them all.
-            LogUtil.e(LogUtil.BUGLE_TAG, "Error getting drawable for GIF", e);
+        } catch (final Throwable t) {
+            // Malicious gif images can make the platform throw different kind of throwables, such
+            // as OutOfMemoryError and NullPointerException. Catch them all.
+            LogUtil.e(LogUtil.BUGLE_TAG, "Error getting drawable for GIF", t);
             return null;
         }
     }
diff --git a/tests/Android.mk b/tests/Android.mk
index a137a92..dc1999b 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -32,7 +32,11 @@
 LOCAL_STATIC_JAVA_LIBRARIES := \
     mockito-target
 
-LOCAL_JAVA_LIBRARIES := android.test.mock.sdk legacy-android-test
+LOCAL_JAVA_LIBRARIES := \
+    android.test.mock.stubs \
+    android.test.runner.stubs \
+    android.test.base.stubs \
+
 
 include $(BUILD_PACKAGE)
 
diff --git a/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java b/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java
index 5ec5ab5..e81cd54 100644
--- a/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java
+++ b/tests/src/com/android/messaging/ui/attachmentchooser/AttachmentChooserFragmentTest.java
@@ -36,10 +36,10 @@
 import com.android.messaging.ui.attachmentchooser.AttachmentChooserFragment.AttachmentChooserFragmentHost;
 import com.android.messaging.ui.conversationlist.ConversationListFragment;
 
+import org.mockito.ArgumentMatcher;
 import org.mockito.Matchers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.compat.ArgumentMatcher;
 
 import java.util.Arrays;
 import java.util.HashSet;
@@ -62,16 +62,14 @@
     /** A custom argument matcher that checks whether the set argument passed in is a set
      * with identical attachment data as the given set.
      */
-    private class IsSetOfGivenAttachments extends ArgumentMatcher<Set<MessagePartData>> {
+    private class IsSetOfGivenAttachments implements ArgumentMatcher<Set<MessagePartData>> {
         private final Set<MessagePartData> mGivenParts;
         public IsSetOfGivenAttachments(final Set<MessagePartData> givenParts) {
             mGivenParts = givenParts;
         }
 
         @Override
-        public boolean matchesObject(final Object set) {
-            @SuppressWarnings("unchecked")
-            final Set<MessagePartData> actualSet = (Set<MessagePartData>) set;
+        public boolean matches(final Set<MessagePartData> actualSet) {
             if (actualSet.size() != mGivenParts.size()) {
                 return false;
             }
diff --git a/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java b/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java
index 8c372f2..2148c71 100644
--- a/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java
+++ b/tests/src/com/android/messaging/ui/conversation/ComposeMessageViewTest.java
@@ -16,6 +16,9 @@
 
 package com.android.messaging.ui.conversation;
 
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.isNull;
+
 import android.content.Context;
 import android.media.MediaPlayer;
 import android.test.suitebuilder.annotation.MediumTest;
@@ -39,10 +42,10 @@
 import com.android.messaging.util.FakeMediaUtil;
 import com.android.messaging.util.ImeUtil;
 
+import org.mockito.ArgumentMatcher;
 import org.mockito.Matchers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.compat.ArgumentMatcher;
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
@@ -127,8 +130,8 @@
 
         view.requestDraftMessage(false);
 
-        Mockito.verify(mockDraftMessageData).loadFromStorage(Matchers.any(BindingBase.class),
-                Matchers.any(MessageData.class), Mockito.eq(false));
+        Mockito.verify(mockDraftMessageData).loadFromStorage(any(BindingBase.class),
+                isNull(), Mockito.eq(false));
 
         view.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
 
@@ -136,12 +139,9 @@
 
         sendButton.performClick();
         Mockito.verify(mockIComposeMessageViewHost).sendMessage(
-                Mockito.argThat(new ArgumentMatcher<MessageData>() {
-                    @Override
-                    public boolean matchesObject(final Object o) {
-                        assertEquals(message.getMessageText(), ((MessageData) o).getMessageText());
-                        return true;
-                    }
+                Mockito.argThat(o -> {
+                    assertEquals(message.getMessageText(), o.getMessageText());
+                    return true;
                 }));
     }
 
@@ -170,8 +170,8 @@
 
         view.requestDraftMessage(false);
 
-        Mockito.verify(mockDraftMessageData).loadFromStorage(Matchers.any(BindingBase.class),
-                Matchers.any(MessageData.class), Mockito.eq(false));
+        Mockito.verify(mockDraftMessageData).loadFromStorage(any(BindingBase.class),
+                isNull(), Mockito.eq(false));
 
         view.onDraftChanged(mockDraftMessageData, DraftMessageData.ALL_CHANGED);
 
@@ -179,6 +179,6 @@
 
         sendButton.performClick();
         Mockito.verify(mockIComposeMessageViewHost).warnOfMissingActionConditions(
-                Matchers.any(Boolean.class), Matchers.any(Runnable.class));
+                any(Boolean.class), any(Runnable.class));
     }
 }
diff --git a/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java b/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java
index 1fbba1f..afac0d8 100644
--- a/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java
+++ b/tests/src/com/android/messaging/ui/conversationlist/ConversationListItemViewTest.java
@@ -35,9 +35,9 @@
 import com.android.messaging.ui.conversationlist.ConversationListItemView;
 import com.android.messaging.util.Dates;
 
+import org.mockito.ArgumentMatcher;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.compat.ArgumentMatcher;
 
 @MediumTest
 public class ConversationListItemViewTest extends ViewTest<ConversationListItemView> {
@@ -60,12 +60,7 @@
             final ConversationListItemView conversationView) {
         // Must be a short click.
         final ArgumentMatcher<ConversationListItemData> itemDataIdMatcher =
-                new ArgumentMatcher<ConversationListItemData>() {
-            @Override
-            public boolean matchesObject(final Object arg) {
-                return TextUtils.equals(id, ((ConversationListItemData) arg).getConversationId());
-            }
-        };
+                arg -> TextUtils.equals(id, arg.getConversationId());
         Mockito.verify(mockHost).onConversationClicked(
                 Mockito.argThat(itemDataIdMatcher), Mockito.eq(false),
                 Mockito.eq(conversationView));
diff --git a/version.mk b/version.mk
index 6568cc8..8811741 100644
--- a/version.mk
+++ b/version.mk
@@ -55,7 +55,7 @@
 #####################################################
 #####################################################
 # Collect automatic version code parameters
-ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
+ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
   # This is an eng build
   base_version_buildtype := 0
 else
@@ -106,12 +106,12 @@
 #       where nnnnnn is the build number from the build server (no zero-padding)
 # On eng builds, the BUILD_NUMBER has the user and timestamp inline
 ifdef TARGET_BUILD_APPS
-ifneq "" "$(filter eng.%,$(BUILD_NUMBER))"
+ifeq ($(strip $(HAS_BUILD_NUMBER)),false)
   git_hash := $(shell git --git-dir $(LOCAL_PATH)/.git log -n 1 --pretty=format:%h)
   date_string := $(shell date +%m%d%y_%H%M%S)
   version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) (eng.$(USER).$(git_hash).$(date_string)-$(base_version_arch)$(base_version_density))
 else
-  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER)-$(base_version_arch)$(base_version_density))
+  version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build) ($(BUILD_NUMBER_FROM_FILE)-$(base_version_arch)$(base_version_density))
 endif
 else # !TARGET_BUILD_APPS
   version_name_package := $(base_version_major).$(base_version_minor).$(base_version_build)