Merge "Moving up avatar by 1dp (1/2)" into ub-contactsdialer-f-dev
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dda7590..ad13e51 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,8 +16,8 @@
 
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.android.contacts"
-    android:versionCode="10508"
-    android:versionName="1.5.8">
+    android:versionCode="10509"
+    android:versionName="1.5.9">
 
     <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="25" />
 
diff --git a/res/drawable/account_header_background.xml b/res/drawable/account_header_background.xml
deleted file mode 100644
index af72c6d..0000000
--- a/res/drawable/account_header_background.xml
+++ /dev/null
@@ -1,30 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<!--
-  ~ Copyright (C) 2016 The Android Open Source Project
-  ~
-  ~ Licensed under the Apache License, Version 2.0 (the "License");
-  ~ you may not use this file except in compliance with the License.
-  ~ You may obtain a copy of the License at
-  ~
-  ~      http://www.apache.org/licenses/LICENSE-2.0
-  ~
-  ~ Unless required by applicable law or agreed to in writing, software
-  ~ distributed under the License is distributed on an "AS IS" BASIS,
-  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  ~ See the License for the specific language governing permissions and
-  ~ limitations under the License
-  -->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item>
-        <shape android:shape="rectangle">
-            <solid android:color="@color/list_item_account_header_border_color" />
-        </shape>
-    </item>
-    <item android:bottom="1dp">
-        <shape android:shape="rectangle">
-            <solid android:color="@color/background_primary" />
-        </shape>
-    </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/layout/empty_group_view.xml b/res/layout/empty_group_view.xml
index 6f6e3a8..76b06d7 100644
--- a/res/layout/empty_group_view.xml
+++ b/res/layout/empty_group_view.xml
@@ -10,8 +10,9 @@
 
     <ImageView
         android:id="@+id/empty_group_image"
-        android:layout_width="@dimen/empty_group_view_image_width"
-        android:layout_height="wrap_content"
+        android:layout_width="wrap_content"
+        android:layout_height="@dimen/empty_group_view_image_height"
+        android:paddingTop="@dimen/empty_group_view_image_padding_top"
         android:scaleType="centerInside"
         android:adjustViewBounds="true"
         android:src="@drawable/label_empty"/>
diff --git a/res/values-land/dimens.xml b/res/values-land/dimens.xml
index 6404cf2..e66ab0d 100644
--- a/res/values-land/dimens.xml
+++ b/res/values-land/dimens.xml
@@ -19,9 +19,13 @@
     <dimen name="dialpad_digits_margin_bottom">50dip</dimen>
     <dimen name="editor_type_label_width">120dip</dimen>
 
-    <!-- Top padding for the text for empty group view-->
-    <dimen name="empty_group_view_text_padding_top">20dp</dimen>
+    <!-- Top padding for the image for empty group view-->
+    <dimen name="empty_group_view_image_padding_top">0dp</dimen>
 
-    <!-- Width for the image for empty group view-->
-    <dimen name="empty_group_view_image_width">176dp</dimen>
+    <!-- Height for the image for empty group view-->
+    <dimen name="empty_group_view_image_height">150dp</dimen>
+
+    <!-- Top and Bottom padding for the text for empty group view-->
+    <dimen name="empty_group_view_text_padding_top">14dp</dimen>
+    <dimen name="empty_group_view_text_padding_bottom">10dp</dimen>
 </resources>
diff --git a/res/values-land/integers.xml b/res/values-land/integers.xml
index 3e7643d..f6e9ef6 100644
--- a/res/values-land/integers.xml
+++ b/res/values-land/integers.xml
@@ -16,4 +16,7 @@
 <resources>
     <!-- Number of lines the QuickContact title can have -->
     <integer name="quickcontact_title_lines">2</integer>
+
+    <!-- Top margin ratio for the image for empty group view-->
+    <integer name="empty_group_view_image_margin">12</integer>
 </resources>
diff --git a/res/values-sw600dp-land/dimens.xml b/res/values-sw600dp-land/dimens.xml
index b4b5259..b5db99d 100644
--- a/res/values-sw600dp-land/dimens.xml
+++ b/res/values-sw600dp-land/dimens.xml
@@ -18,4 +18,11 @@
     <dimen name="quick_contact_photo_container_height">180dip</dimen>
     <dimen name="detail_contact_photo_size">192dip</dimen>
     <dimen name="detail_contact_photo_margin">16dip</dimen>
+
+    <!-- Height for the image for empty group view-->
+    <dimen name="empty_group_view_image_height">180dp</dimen>
+
+    <!-- Top and Bottom padding for the text for empty group view-->
+    <dimen name="empty_group_view_text_padding_top">32dp</dimen>
+    <dimen name="empty_group_view_text_padding_bottom">16dp</dimen>
 </resources>
diff --git a/res/values-sw600dp-land/integers.xml b/res/values-sw600dp-land/integers.xml
index 0ee0135..f5f713a 100644
--- a/res/values-sw600dp-land/integers.xml
+++ b/res/values-sw600dp-land/integers.xml
@@ -20,4 +20,7 @@
     <!-- Layout weight of ListViews in PeopleActivityfor tile favorites list and all
          contacts list in PeopleActivity -->
     <integer name="contact_list_card_layout_weight">6</integer>
+
+    <!-- Top margin ratio for the image for empty group view-->
+    <integer name="empty_group_view_image_margin">8</integer>
 </resources>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 0d4d820..65f75e1 100644
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -48,4 +48,7 @@
 
     <!-- End margin of edit group title -->
     <dimen name="edit_group_end_margin">80dp</dimen>
+
+    <!-- Top padding for the image for empty group view-->
+    <dimen name="empty_group_view_image_padding_top">0dp</dimen>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 8089a2e..0d1b6ea 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -60,9 +60,6 @@
     <!-- Background color of pinned header items. -->
     <color name="list_item_pinned_header_color">@color/background_primary</color>
 
-    <!-- 8% black. -->
-    <color name="list_item_account_header_border_color">#15000000</color>
-
     <!-- Color of the mime-type icons inside the editor. 50% black. -->
     <color name="editor_icon_color">#7f7f7f</color>
 
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index f577f50..f9111d3 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -276,16 +276,22 @@
     <dimen name="nav_activity_horizontal_margin">16dp</dimen>
     <dimen name="nav_activity_vertical_margin">16dp</dimen>
 
+    <!-- Top padding for the image for empty group view-->
+    <dimen name="empty_group_view_image_padding_top">8dp</dimen>
+
+    <!-- Height for the image for empty group view-->
+    <dimen name="empty_group_view_image_height">180dp</dimen>
+
     <!-- Top and Bottom padding for the text for empty group view-->
     <dimen name="empty_group_view_text_padding_top">32dp</dimen>
     <dimen name="empty_group_view_text_padding_bottom">16dp</dimen>
 
-    <!-- Width for the image for empty group view-->
-    <dimen name="empty_group_view_image_width">232dp</dimen>
-
     <!-- End margin of edit group title -->
     <dimen name="edit_group_end_margin">72dp</dimen>
 
     <!-- Minimum height for group name EditText -->
     <dimen name="group_name_edit_text_min_height">48dp</dimen>
+
+    <!-- Elevation of contact list header -->
+    <dimen name="contact_list_header_elevation">2dp</dimen>
 </resources>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index c1d0e11..26e72a5 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -28,4 +28,6 @@
     <!-- Fade in/out duration of search and selection -->
     <integer name="action_bar_animation_duration">195</integer>
 
+    <!-- Top margin ratio for the image for empty group view-->
+    <integer name="empty_group_view_image_margin">6</integer>
 </resources>
diff --git a/src/com/android/contacts/ContactSaveService.java b/src/com/android/contacts/ContactSaveService.java
index b68d34c..8683809 100755
--- a/src/com/android/contacts/ContactSaveService.java
+++ b/src/com/android/contacts/ContactSaveService.java
@@ -1142,7 +1142,8 @@
 
     /**
      * Creates an intent that can be sent to this service to split a contact into it's constituent
-     * pieces.
+     * pieces. This will set the raw contact ids to TYPE_AUTOMATIC for AggregationExceptions so
+     * they may be re-merged by the auto-aggregator.
      */
     public static Intent createSplitContactIntent(Context context, long[][] rawContactIds,
             ResultReceiver receiver) {
@@ -1193,7 +1194,7 @@
     }
 
     /**
-     * Adds insert aggregation exception ContentProviderOperations between {@param rawContactIds1}
+     * Insert aggregation exception ContentProviderOperations between {@param rawContactIds1}
      * and {@param rawContactIds2} to {@param operations}.
      * @return false if an error occurred, true otherwise.
      */
@@ -1546,13 +1547,13 @@
     }
 
     /**
-     * Construct a {@link AggregationExceptions#TYPE_KEEP_SEPARATE} ContentProviderOperation.
+     * Construct a {@link AggregationExceptions#TYPE_AUTOMATIC} ContentProviderOperation.
      */
     private void buildSplitContactDiff(ArrayList<ContentProviderOperation> operations,
             long rawContactId1, long rawContactId2) {
         final Builder builder =
                 ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
-        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_SEPARATE);
+        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_AUTOMATIC);
         builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1);
         builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2);
         operations.add(builder.build());
diff --git a/src/com/android/contacts/ContactsDrawerActivity.java b/src/com/android/contacts/ContactsDrawerActivity.java
index a12d0e1..6ae6a59 100644
--- a/src/com/android/contacts/ContactsDrawerActivity.java
+++ b/src/com/android/contacts/ContactsDrawerActivity.java
@@ -43,6 +43,7 @@
 import android.view.SubMenu;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.LinearLayout;
 import android.widget.Toast;
 
 import com.android.contacts.activities.GroupMembersActivity;
@@ -53,6 +54,7 @@
 import com.android.contacts.common.list.ContactListFilter;
 import com.android.contacts.common.list.ContactListFilterController;
 import com.android.contacts.common.model.AccountTypeManager;
+import com.android.contacts.common.model.account.AccountType;
 import com.android.contacts.common.model.account.AccountWithDataSet;
 import com.android.contacts.common.preference.ContactsPreferenceActivity;
 import com.android.contacts.common.util.AccountFilterUtil;
@@ -488,6 +490,16 @@
             menuItem.setIcon(filter.icon);
             // Get rid of the default menu item overlay and show original account icons.
             menuItem.getIcon().setColorFilter(Color.TRANSPARENT, PorterDuff.Mode.SRC_ATOP);
+            // Create a dummy action view to attach extra hidden content description to the menuItem
+            // for Talkback. We want Talkback to read out the account type but not have it be part
+            // of the menuItem title.
+            final AccountType account = AccountTypeManager.getInstance(this)
+                    .getAccountType(filter.accountType, filter.dataSet);
+            LinearLayout view = (LinearLayout) LayoutInflater.from(this)
+                    .inflate(R.layout.account_type_info, null);
+            view.setContentDescription(account.getDisplayLabel(this));
+            view.setVisibility(View.VISIBLE);
+            menuItem.setActionView(view);
         }
 
         if (getContactListFilter() != null) {
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index d1f05f6..ab25dc8 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -683,11 +683,11 @@
             return;
         }
 
-        if (mIsSearchMode) {
+        if (isSelectionMode()) {
+            mActionBarAdapter.setSelectionMode(false);
+        } else if (mIsSearchMode) {
             mIsSearchMode = false;
             configureSearchMode();
-        } else if (isSelectionMode()) {
-            mActionBarAdapter.setSelectionMode(false);
         } else {
             super.onBackPressed();
         }
diff --git a/src/com/android/contacts/activities/GroupMembersActivity.java b/src/com/android/contacts/activities/GroupMembersActivity.java
index edd93dd..f8efa85 100644
--- a/src/com/android/contacts/activities/GroupMembersActivity.java
+++ b/src/com/android/contacts/activities/GroupMembersActivity.java
@@ -25,7 +25,6 @@
 import android.os.Bundle;
 import android.provider.ContactsContract.RawContacts;
 import android.support.v4.view.GravityCompat;
-import android.support.v7.app.ActionBar;
 import android.util.Log;
 import android.view.Menu;
 import android.view.MenuItem;
diff --git a/src/com/android/contacts/group/GroupMembersAdapter.java b/src/com/android/contacts/group/GroupMembersAdapter.java
index 622db67..af1f61e 100644
--- a/src/com/android/contacts/group/GroupMembersAdapter.java
+++ b/src/com/android/contacts/group/GroupMembersAdapter.java
@@ -73,8 +73,8 @@
 
     public GroupMembersAdapter(Context context) {
         super(context, GroupMembersQuery.CONTACT_ID);
+
         mUnknownNameText = context.getText(R.string.missing_name);
-        setSectionHeaderDisplayEnabled(true);
     }
 
     /** Sets the ID of the group whose members will be displayed. */
@@ -83,7 +83,7 @@
     }
 
     /** Returns the lookup Uri for the contact at the given position in the underlying cursor. */
-    public Uri getContactLookupUri(int position) {
+    public Uri getContactUri(int position) {
         final Cursor cursor = (Cursor) getItem(position);
         final long contactId = cursor.getLong(GroupMembersQuery.CONTACT_ID);
         final String lookupKey = cursor.getString(GroupMembersQuery.CONTACT_LOOKUP_KEY);
@@ -135,13 +135,6 @@
         return ((Cursor) getItem(position)).getString(GroupMembersQuery.CONTACT_DISPLAY_NAME);
     }
 
-    public Uri getContactUri(int position) {
-        final Cursor cursor = (Cursor) getItem(position);
-        final long contactId = cursor.getLong(GroupMembersQuery.CONTACT_ID);
-        final String lookupKey = cursor.getString(GroupMembersQuery.CONTACT_LOOKUP_KEY);
-        return Contacts.getLookupUri(contactId, lookupKey);
-    }
-
     @Override
     protected ContactListItemView newView(Context context, int partition, Cursor cursor,
             int position, ViewGroup parent) {
@@ -155,7 +148,6 @@
     protected void bindView(View v, int partition, Cursor cursor, int position) {
         super.bindView(v, partition, cursor, position);
         final ContactListItemView view = (ContactListItemView) v;
-        bindViewId(view, cursor, GroupMembersQuery.CONTACT_ID);
         bindSectionHeaderAndDivider(view, position);
         bindName(view, cursor);
         bindPhoto(view, cursor);
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 266e5fc..276a7e9 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -17,7 +17,6 @@
 
 import android.app.Activity;
 import android.app.LoaderManager.LoaderCallbacks;
-import android.content.Context;
 import android.content.CursorLoader;
 import android.content.Loader;
 import android.content.res.Configuration;
@@ -162,8 +161,15 @@
 
         @Override
         public boolean moveToPosition(int position) {
-            if (position >= mCount || position < 0) return false;
-            return super.moveToPosition(mIndex[position]);
+            if (position >= mCount) {
+                mPos = mCount;
+                return false;
+            } else if (position < 0) {
+                mPos = -1;
+                return false;
+            }
+            mPos = mIndex[position];
+            return super.moveToPosition(mPos);
         }
 
         @Override
@@ -364,11 +370,9 @@
         final Resources resources = getContext().getResources();
         final DisplayMetrics metrics = resources.getDisplayMetrics();
         final int height = metrics.heightPixels;
-        if (resources.getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
-            params.setMargins(0, height / 8, 0, 0);
-        } else {
-            params.setMargins(0, height / 6, 0, 0);
-        }
+
+        params.setMargins(0,
+                height / getResources().getInteger(R.integer.empty_group_view_image_margin), 0, 0);
         params.gravity = Gravity.CENTER_HORIZONTAL;
         image.setLayoutParams(params);
 
@@ -397,8 +401,7 @@
             return;
         }
         if (mListener != null) {
-            final Uri contactLookupUri = getAdapter().getContactLookupUri(position);
-            mListener.onGroupMemberListItemClicked(position, contactLookupUri);
+            mListener.onGroupMemberListItemClicked(position, uri);
         }
     }
 
diff --git a/src/com/android/contacts/list/GroupMemberPickerFragment.java b/src/com/android/contacts/list/GroupMemberPickerFragment.java
index 519a6a9..6f4d0c0 100644
--- a/src/com/android/contacts/list/GroupMemberPickerFragment.java
+++ b/src/com/android/contacts/list/GroupMemberPickerFragment.java
@@ -148,8 +148,15 @@
 
         @Override
         public boolean moveToPosition(int position) {
-            if (position >= mCount || position < 0) return false;
-            return super.moveToPosition(mIndex[position]);
+            if (position >= mCount) {
+                mPos = mCount;
+                return false;
+            } else if (position < 0) {
+                mPos = -1;
+                return false;
+            }
+            mPos = mIndex[position];
+            return super.moveToPosition(mPos);
         }
 
         @Override
diff --git a/src/com/android/contacts/list/MultiSelectContactsListFragment.java b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
index 2612cf2..937d4c2 100644
--- a/src/com/android/contacts/list/MultiSelectContactsListFragment.java
+++ b/src/com/android/contacts/list/MultiSelectContactsListFragment.java
@@ -30,12 +30,13 @@
 
 import android.content.Context;
 import android.database.Cursor;
-import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.provider.ContactsContract;
+import android.support.v4.view.ViewCompat;
 import android.util.Log;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 import android.widget.AbsListView;
 import android.widget.ImageView;
@@ -291,11 +292,10 @@
             return;
         }
         if (firstVisibleItem == 0) {
-            accountFilterContainer.setBackground(
-                    new ColorDrawable(getResources().getColor(R.color.background_primary)));
+            ViewCompat.setElevation(accountFilterContainer, 0);
         } else {
-            accountFilterContainer.setBackground(
-                    getResources().getDrawable(R.drawable.account_header_background));
+            ViewCompat.setElevation(accountFilterContainer,
+                    getResources().getDimension(R.dimen.contact_list_header_elevation));
         }
     }
 
@@ -343,10 +343,49 @@
         final Drawable icon = accountType != null ? accountType.getDisplayIcon(context) : null;
         final ImageView accountFilterHeaderIcon = (ImageView) accountFilterContainer
                 .findViewById(R.id.account_filter_icon);
+
+        // If it's a writable Google account, we set icon size as 24dp; otherwise, we set it as
+        // 20dp. And we need to change margin accordingly. This is because the Google icon looks
+        // smaller when the icons are of the same size.
+        if (accountType instanceof GoogleAccountType) {
+            accountFilterHeaderIcon.getLayoutParams().height = getResources()
+                    .getDimensionPixelOffset(R.dimen.contact_browser_list_header_icon_size);
+            accountFilterHeaderIcon.getLayoutParams().width =
+                    accountFilterHeaderIcon.getLayoutParams().height;
+
+            setMargins(accountFilterHeaderIcon,
+                    getResources().getDimensionPixelOffset(
+                            R.dimen.contact_browser_list_header_icon_left_margin),
+                    getResources().getDimensionPixelOffset(
+                            R.dimen.contact_browser_list_header_icon_right_margin));
+        } else {
+            accountFilterHeaderIcon.getLayoutParams().height = getResources()
+                    .getDimensionPixelOffset(R.dimen.contact_browser_list_header_icon_size_alt);
+            accountFilterHeaderIcon.getLayoutParams().width =
+                    accountFilterHeaderIcon.getLayoutParams().height;
+
+            setMargins(accountFilterHeaderIcon,
+                    getResources().getDimensionPixelOffset(
+                            R.dimen.contact_browser_list_header_icon_left_margin_alt),
+                    getResources().getDimensionPixelOffset(
+                            R.dimen.contact_browser_list_header_icon_right_margin_alt));
+        }
+        accountFilterHeaderIcon.requestLayout();
+
         accountFilterHeaderIcon.setVisibility(View.VISIBLE);
         accountFilterHeaderIcon.setImageDrawable(icon);
     }
 
+    private void setMargins(View v, int l, int r) {
+        if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
+            ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
+            p.setMarginStart(l);
+            p.setMarginEnd(r);
+            v.setLayoutParams(p);
+            v.requestLayout();
+        }
+    }
+
     private void bindListHeaderCommon(View listView, View accountFilterContainer) {
         // Show header and remove top padding of the list
         accountFilterContainer.setVisibility(View.VISIBLE);
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 7a01ede..16f137e 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -958,21 +958,25 @@
         // 2. App doesn't have permission, user denied it previously.
         // 3. App has permission.
         // Permission explanation card is displayed only for case 1.
+        final boolean hasTelephonyFeature =
+                getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY);
+
         final boolean hasCalendarPermission = PermissionsUtil.hasPermission(
                 this, Manifest.permission.READ_CALENDAR);
-        final boolean hasSMSPermission = PermissionsUtil.hasPermission(
-                this, Manifest.permission.READ_SMS);
+        final boolean hasSMSPermission = hasTelephonyFeature
+                && PermissionsUtil.hasPermission(this, Manifest.permission.READ_SMS);
 
         final boolean wasCalendarPermissionDenied =
                 ActivityCompat.shouldShowRequestPermissionRationale(
                         this, Manifest.permission.READ_CALENDAR);
         final boolean wasSMSPermissionDenied =
-                ActivityCompat.shouldShowRequestPermissionRationale(
+                hasTelephonyFeature && ActivityCompat.shouldShowRequestPermissionRationale(
                         this, Manifest.permission.READ_SMS);
 
         final boolean shouldDisplayCalendarMessage =
                 !hasCalendarPermission && !wasCalendarPermissionDenied;
-        final boolean shouldDisplaySMSMessage = !hasSMSPermission && !wasSMSPermissionDenied;
+        final boolean shouldDisplaySMSMessage =
+                hasTelephonyFeature && !hasSMSPermission && !wasSMSPermissionDenied;
         mShouldShowPermissionExplanation = shouldDisplayCalendarMessage || shouldDisplaySMSMessage;
 
         if (shouldDisplayCalendarMessage && shouldDisplaySMSMessage) {