Merge "Add executor utility classes" into ub-contactsdialer-i-dev
diff --git a/tests/src/com/android/contacts/DynamicShortcutsTests.java b/tests/src/com/android/contacts/DynamicShortcutsTests.java
index 1f64417..3074efb 100644
--- a/tests/src/com/android/contacts/DynamicShortcutsTests.java
+++ b/tests/src/com/android/contacts/DynamicShortcutsTests.java
@@ -15,14 +15,6 @@
  */
 package com.android.contacts;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.equalTo;
-import static org.mockito.Matchers.anyString;
-import static org.mockito.Matchers.eq;
-import static org.mockito.Mockito.mock;
-import static org.mockito.Mockito.verify;
-import static org.mockito.Mockito.when;
-
 import android.annotation.TargetApi;
 import android.app.job.JobScheduler;
 import android.content.ContentProvider;
@@ -49,10 +41,19 @@
 import org.hamcrest.Matchers;
 import org.mockito.ArgumentCaptor;
 
+import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
 
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
 @TargetApi(Build.VERSION_CODES.N_MR1)
 @SdkSuppress(minSdkVersion = Build.VERSION_CODES.N_MR1)
 @SmallTest
@@ -118,10 +119,10 @@
         assertEquals("123456789…", shortcut.getLongLabel());
     }
 
-    public void test_updatePinned_disablesShortcutsForRemovedContacts() {
+    public void test_updatePinned_disablesShortcutsForRemovedContacts() throws Exception {
         final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
         when(mockShortcutManager.getPinnedShortcuts()).thenReturn(
-                Collections.singletonList(shortcutFor(1l, "key1", "name1")));
+                Collections.singletonList(makeDynamic(shortcutFor(1l, "key1", "name1"))));
 
         final DynamicShortcuts sut = createDynamicShortcuts(emptyResolver(), mockShortcutManager);
 
@@ -131,13 +132,13 @@
                 eq(Collections.singletonList("key1")), anyString());
     }
 
-    public void test_updatePinned_updatesExistingShortcutsWithMatchingKeys() {
+    public void test_updatePinned_updatesExistingShortcutsWithMatchingKeys() throws Exception {
         final ShortcutManager mockShortcutManager = mock(ShortcutManager.class);
         when(mockShortcutManager.getPinnedShortcuts()).thenReturn(
                 Arrays.asList(
-                        shortcutFor(1l, "key1", "name1"),
-                        shortcutFor(2l, "key2", "name2"),
-                        shortcutFor(3l, "key3", "name3")
+                        makeDynamic(shortcutFor(1l, "key1", "name1")),
+                        makeDynamic(shortcutFor(2l, "key2", "name2")),
+                        makeDynamic(shortcutFor(3l, "key3", "name3"))
                 ));
 
         final DynamicShortcuts sut = createDynamicShortcuts(resolverWithExpectedQueries(
@@ -348,6 +349,15 @@
         return queryResult(DynamicShortcuts.PROJECTION, values);
     }
 
+    // Ugly hack because the API is hidden. Alternative is to actually set the shortcut on the real
+    // ShortcutManager but this seems simpler for now.
+    private ShortcutInfo makeDynamic(ShortcutInfo shortcutInfo) throws Exception {
+        final Method addFlagsMethod = ShortcutInfo.class.getMethod("addFlags", int.class);
+        // 1 = FLAG_DYNAMIC
+        addFlagsMethod.invoke(shortcutInfo, 1);
+        return shortcutInfo;
+    }
+
     private Cursor queryResult(String[] columns, Object... values) {
         MatrixCursor result = new MatrixCursor(new String[] {
                 Contacts._ID, Contacts.LOOKUP_KEY,