[automerger skipped] Import translations. DO NOT MERGE ANYWHERE am: ef59c14ab2 -s ours

am skip reason: subject contains skip directive

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Contacts/+/20984849

Change-Id: I70475d921dd75d02ba21a75fffa4b2cc766d09b8
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e974863..0e59458 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -45,7 +45,6 @@
     <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
     <uses-permission android:name="android.permission.VIBRATE"/>
     <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.SET_DEFAULT_ACCOUNT_FOR_CONTACTS"/>
     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
     <!-- Following used for Contact metadata syncing -->
@@ -55,7 +54,7 @@
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
     <!-- Required in P to run Service.startForeground() -->
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
-    <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS" />
+    <uses-permission android:name="android.permission.HIDE_OVERLAY_WINDOWS" />
     <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 
     <uses-feature
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 99820d1..d5aaf47 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -230,11 +230,11 @@
     <string name="hamburger_feature_highlight_body" msgid="782935036630531528">"So sind deine Kontakte immer organisiert und übersichtlich"</string>
     <string name="undo" msgid="2446931036220975026">"Rückgängig machen"</string>
     <string name="call_custom" msgid="2844900154492073207">"<xliff:g id="CUSTOM_LABEL">%s</xliff:g> anrufen"</string>
-    <string name="call_home" msgid="2443904771140750492">"Zu Hause anrufen"</string>
+    <string name="call_home" msgid="2443904771140750492">"Anruf (privat)"</string>
     <string name="call_mobile" msgid="6504312789160309832">"Anruf (mobil)"</string>
     <string name="call_work" msgid="2414313348547560346">"Anruf (geschäftl.)"</string>
     <string name="call_fax_work" msgid="5026843006300760797">"Fax (geschäftlich) anrufen"</string>
-    <string name="call_fax_home" msgid="4421886641585565445">"Fax (zu Hause) anrufen"</string>
+    <string name="call_fax_home" msgid="4421886641585565445">"Fax (privat) anrufen"</string>
     <string name="call_pager" msgid="7988386598814899644">"Anruf (Pager)"</string>
     <string name="call_other" msgid="2264440725373659661">"Anruf"</string>
     <string name="call_callback" msgid="1226584395279365027">"Rückrufnummer anrufen"</string>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 0b3c5f4..1673fa3 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -149,8 +149,8 @@
     <string name="action_menu_back_from_edit_select" msgid="7911226757462657242">"жабуу"</string>
     <string name="aggregation_suggestion_edit_dialog_message" msgid="4339333746086996062">"Тандалган байланышты түзөтүүгө өтөсүзбү? Буга чейин киргизилген маалыматтар көчүрүлөт."</string>
     <string name="contact_directory_description" msgid="1773630547110881835">"<xliff:g id="TYPE">%1$s</xliff:g> каталогу"</string>
-    <string name="activity_title_settings" msgid="4004290638426915162">"Параметрлер"</string>
-    <string name="menu_settings" msgid="3524924670246877187">"Параметрлер"</string>
+    <string name="activity_title_settings" msgid="4004290638426915162">"Жөндөөлөр"</string>
+    <string name="menu_settings" msgid="3524924670246877187">"Жөндөөлөр"</string>
     <string name="menu_help" msgid="287801702920372292">"Жардам жана пикир билдирүү"</string>
     <string name="organization_entry_two_field" msgid="6034934619269052455">"<xliff:g id="FIRST">%1$s</xliff:g> • <xliff:g id="SECOND">%2$s</xliff:g>"</string>
     <string name="organization_entry_all_field" msgid="6724345890324437167">"<xliff:g id="COMPANY">%1$s</xliff:g> • <xliff:g id="DEPARTMENT">%2$s</xliff:g> • <xliff:g id="TITLE">%3$s</xliff:g>"</string>
@@ -363,7 +363,7 @@
     <string name="dialog_sync_add" msgid="8012361965908515959">"Шайкештирүү тобуна кошуу"</string>
     <string name="display_more_groups" msgid="8398232980355188133">"Дагы топтор…"</string>
     <string name="display_warn_remove_ungrouped" msgid="522866344738506017">"\"<xliff:g id="GROUP">%s</xliff:g>\" тобун шайкештирүүдөн алып салуу топко кирбеген башка байланыштарды дагы шайкештирүүдөн чыгарып салат."</string>
-    <string name="savingDisplayGroups" msgid="6779839417901711381">"Параметрлер сакталууда…"</string>
+    <string name="savingDisplayGroups" msgid="6779839417901711381">"Жөндөөлөр сакталууда…"</string>
     <string name="listCustomView" msgid="5782275477737032610">"Ылайыкташтырылган көрүнүш"</string>
     <string name="dialog_new_contact_account" msgid="5652018124788855057">"Өткөрүлүп алынган байланыштар төмөнкүгө сакталсын:"</string>
     <string name="import_from_sim" msgid="7825280799813847991">"SIM-карта"</string>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 90da046..1dbd162 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -117,7 +117,7 @@
     <string name="menu_sendMessageOption" msgid="8051852013078110910">"ମେସେଜ୍‌ ପଠାନ୍ତୁ"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="8265907544009447967">"ଯୋଗାଯୋଗ ବାଛନ୍ତୁ"</string>
     <string name="send_to_selection" msgid="3655197947726443720">"ପଠାନ୍ତୁ"</string>
-    <string name="listFoundAllContactsZero" msgid="1933842282916988563">"କୌଣସି କଣ୍ଟାକ୍ଟ ନାହିଁ"</string>
+    <string name="listFoundAllContactsZero" msgid="1933842282916988563">"କୌଣସି ଯୋଗାଯୋଗ ନାହାନ୍ତି"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7498024710169591375">"\"<xliff:g id="EMAIL">%s</xliff:g>\"କୁ ଯୋଗାଯୋଗ ସହ ଯୋଡ଼ିବେ?"</string>
     <string name="search_settings_description" msgid="5630675648560839920">"ଆପଣଙ୍କ ଯୋଗାଯୋଗଙ୍କର ନାମ"</string>
     <string name="quickcontact_transparent_view_description" msgid="7783027850792852265">"ପୂର୍ବବର୍ତ୍ତୀ ସ୍କ୍ରୀନ୍‌କୁ ଫେରିବା ପାଇଁ କ୍ଲିକ୍ କରନ୍ତୁ"</string>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 43a099a..675cb3b 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -117,7 +117,7 @@
     <string name="menu_sendMessageOption" msgid="8051852013078110910">"Надіслати повідомлення"</string>
     <string name="pickerSelectContactsActivityTitle" msgid="8265907544009447967">"Вибрати контакти"</string>
     <string name="send_to_selection" msgid="3655197947726443720">"Надіслати"</string>
-    <string name="listFoundAllContactsZero" msgid="1933842282916988563">"Немає контактів"</string>
+    <string name="listFoundAllContactsZero" msgid="1933842282916988563">"Контактів немає"</string>
     <string name="add_contact_dlg_message_fmt" msgid="7498024710169591375">"Додати в контакти <xliff:g id="EMAIL">%s</xliff:g>?"</string>
     <string name="search_settings_description" msgid="5630675648560839920">"Імена ваших контактів"</string>
     <string name="quickcontact_transparent_view_description" msgid="7783027850792852265">"Натисніть, щоб повернутися на попередній екран"</string>
diff --git a/src/com/android/contacts/NfcHandler.java b/src/com/android/contacts/NfcHandler.java
deleted file mode 100644
index 07b3f06..0000000
--- a/src/com/android/contacts/NfcHandler.java
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2011 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.
- */
-
-package com.android.contacts;
-
-import android.app.Activity;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.net.Uri;
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-import android.nfc.NfcAdapter;
-import android.nfc.NfcEvent;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.Profile;
-import android.util.Log;
-
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
-  * This class implements sharing the currently displayed
-  * contact to another device using NFC. NFC sharing is only
-  * enabled when the activity is in the foreground and resumed.
-  * When an NFC link is established, {@link #createMessage}
-  * will be called to create the data to be sent over the link,
-  * which is a vCard in this case.
-  */
-public class NfcHandler implements NfcAdapter.CreateNdefMessageCallback {
-
-    private static final String TAG = "ContactNfcHandler";
-    private static final String PROFILE_LOOKUP_KEY = "profile";
-    private final Context mContext;
-    private final Uri mContactUri;
-
-    /* Register NFC handler. This should be called in activities' onCreate(), or similar methods */
-    public static void register(Activity activity, Uri contactUri) {
-        NfcAdapter adapter = NfcAdapter.getDefaultAdapter(activity.getApplicationContext());
-        if (adapter == null) {
-            return;  // NFC not available on this device
-        }
-        adapter.setNdefPushMessageCallback(new NfcHandler(activity, contactUri), activity);
-    }
-
-    public NfcHandler(Context context, Uri contactUri) {
-        mContext = context;
-        mContactUri = contactUri;
-    }
-
-    @Override
-    public NdefMessage createNdefMessage(NfcEvent event) {
-        ContentResolver resolver = mContext.getContentResolver();
-        if (mContactUri != null) {
-            final String lookupKey = Uri.encode(mContactUri.getPathSegments().get(2));
-            final Uri shareUri;
-            // TODO find out where to get this constant from, or find another way
-            // of determining this.
-            if (lookupKey.equals(PROFILE_LOOKUP_KEY)) {
-                shareUri = Profile.CONTENT_VCARD_URI.buildUpon().
-                appendQueryParameter(Contacts.QUERY_PARAMETER_VCARD_NO_PHOTO, "true").
-                build();
-            } else {
-                shareUri = Contacts.CONTENT_VCARD_URI.buildUpon().
-                appendPath(lookupKey).
-                appendQueryParameter(Contacts.QUERY_PARAMETER_VCARD_NO_PHOTO, "true").
-                build();
-            }
-            ByteArrayOutputStream ndefBytes = new ByteArrayOutputStream();
-            byte[] buffer = new byte[1024];
-            int r;
-            try {
-                InputStream vcardInputStream = resolver.openInputStream(shareUri);
-                while ((r = vcardInputStream.read(buffer)) > 0) {
-                    ndefBytes.write(buffer, 0, r);
-                }
-
-                NdefRecord record = NdefRecord.createMime("text/x-vcard", ndefBytes.toByteArray());
-                return new NdefMessage(record);
-            } catch (IOException e) {
-                Log.e(TAG, "IOException creating vcard.");
-                return null;
-            }
-        } else {
-            Log.w(TAG, "No contact URI to share.");
-            return null;
-        }
-    }
-}
diff --git a/src/com/android/contacts/activities/ContactEditorActivity.java b/src/com/android/contacts/activities/ContactEditorActivity.java
index 74a0df6..2af25f8 100644
--- a/src/com/android/contacts/activities/ContactEditorActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorActivity.java
@@ -314,6 +314,8 @@
     public void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
+        getWindow().setHideOverlayWindows(true);
+
         RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
 
         final Intent intent = getIntent();
diff --git a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
index cf2ce9c..64283d2 100644
--- a/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
+++ b/src/com/android/contacts/activities/ContactEditorSpringBoardActivity.java
@@ -242,6 +242,7 @@
         finish();
     }
 
+    @SuppressWarnings("MissingSuperCall") // TODO: Fix me
     @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         // Ignore failed requests
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 2057c9d..9273c61 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -107,8 +107,7 @@
     protected void onCreate(Bundle savedState) {
         super.onCreate(savedState);
 
-        getWindow().addSystemFlags(android.view.WindowManager.LayoutParams
-            .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+        getWindow().setHideOverlayWindows(true);
 
         RequestPermissionsActivity.startPermissionActivityIfNeeded(this);
 
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 412c067..ceb3d59 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -421,6 +421,7 @@
         getWindow().setBackgroundDrawable(null);
     }
 
+    @SuppressWarnings("MissingSuperCall") // TODO: Fix me
     @Override
     protected void onNewIntent(Intent intent) {
         final String action = intent.getAction();
@@ -603,6 +604,7 @@
         onSyncStateUpdated();
     }
 
+    @SuppressWarnings("MissingSuperCall") // TODO: Fix me
     @Override
     public void onMultiWindowModeChanged(boolean entering) {
         initializeHomeVisibility();
diff --git a/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java b/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
index 224339a..2f17fe7 100644
--- a/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
+++ b/src/com/android/contacts/activities/RequestImportVCardPermissionsActivity.java
@@ -28,9 +28,7 @@
             // Contacts group
             permission.GET_ACCOUNTS,
             permission.READ_CONTACTS,
-            permission.WRITE_CONTACTS,
-            // Storage group
-            permission.READ_EXTERNAL_STORAGE,
+            permission.WRITE_CONTACTS
     };
 
     @Override
diff --git a/src/com/android/contacts/dialog/CallSubjectDialog.java b/src/com/android/contacts/dialog/CallSubjectDialog.java
index 036a0f3..ffce0f5 100644
--- a/src/com/android/contacts/dialog/CallSubjectDialog.java
+++ b/src/com/android/contacts/dialog/CallSubjectDialog.java
@@ -274,6 +274,7 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
+        getWindow().setHideOverlayWindows(true);
         mAnimationDuration = getResources().getInteger(R.integer.call_subject_animation_duration);
         mPrefs = PreferenceManager.getDefaultSharedPreferences(this);
         mPhotoSize = getResources().getDimensionPixelSize(
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index ce4b9bc..52c20e6 100755
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -98,6 +98,7 @@
 import com.google.common.collect.Lists;
 
 import java.io.FileNotFoundException;
+import java.util.Arrays;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
@@ -132,11 +133,10 @@
     private static final String KEY_PHOTO_RAW_CONTACT_ID = "photo_raw_contact_id";
     private static final String KEY_UPDATED_PHOTOS = "updated_photos";
 
-    private static final List<String> VALID_INTENT_ACTIONS = new ArrayList<String>() {{
-        add(Intent.ACTION_EDIT);
-        add(Intent.ACTION_INSERT);
-        add(ContactEditorActivity.ACTION_SAVE_COMPLETED);
-    }};
+    private static final List<String> VALID_INTENT_ACTIONS = Arrays.asList(
+            Intent.ACTION_EDIT,
+            Intent.ACTION_INSERT,
+            ContactEditorActivity.ACTION_SAVE_COMPLETED);
 
     private static final String KEY_ACTION = "action";
     private static final String KEY_URI = "uri";
diff --git a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
index df22773..461a752 100644
--- a/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
+++ b/src/com/android/contacts/editor/SuggestionEditConfirmationDialogFragment.java
@@ -47,7 +47,7 @@
         return new AlertDialog.Builder(getActivity())
                 .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setMessage(R.string.aggregation_suggestion_edit_dialog_message)
-                .setPositiveButton(android.R.string.yes,
+                .setPositiveButton(android.R.string.ok,
                         new DialogInterface.OnClickListener() {
                             @Override
                             public void onClick(DialogInterface dialog, int whichButton) {
@@ -61,7 +61,7 @@
                             }
                         }
                 )
-                .setNegativeButton(android.R.string.no, null)
+                .setNegativeButton(android.R.string.cancel, null)
                 .create();
     }
 }
diff --git a/src/com/android/contacts/group/GroupMembersFragment.java b/src/com/android/contacts/group/GroupMembersFragment.java
index 3b66739..b0369c7 100644
--- a/src/com/android/contacts/group/GroupMembersFragment.java
+++ b/src/com/android/contacts/group/GroupMembersFragment.java
@@ -90,7 +90,6 @@
 
     private static final int LOADER_GROUP_METADATA = 100;
     private static final int MSG_FAIL_TO_LOAD = 1;
-    private static final int RESULT_GROUP_ADD_MEMBER = 100;
 
     /** Filters out duplicate contacts. */
     private class FilterCursorWrapper extends CursorWrapper {
@@ -448,7 +447,7 @@
 
     private void startGroupAddMemberActivity() {
         startActivityForResult(GroupUtil.createPickMemberIntent(getContext(), mGroupMetaData,
-                getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
+                getMemberContactIds()), GroupUtil.RESULT_GROUP_ADD_MEMBER);
     }
 
     @Override
@@ -504,7 +503,7 @@
     @Override
     public void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (resultCode != Activity.RESULT_OK || data == null
-                || requestCode != RESULT_GROUP_ADD_MEMBER) {
+                || requestCode != GroupUtil.RESULT_GROUP_ADD_MEMBER) {
             return;
         }
 
@@ -776,7 +775,7 @@
             @Override
             public void onClick(View v) {
                 startActivityForResult(GroupUtil.createPickMemberIntent(getContext(),
-                        mGroupMetaData, getMemberContactIds()), RESULT_GROUP_ADD_MEMBER);
+                        mGroupMetaData, getMemberContactIds()), GroupUtil.RESULT_GROUP_ADD_MEMBER);
             }
         });
         return view;
diff --git a/src/com/android/contacts/group/GroupUtil.java b/src/com/android/contacts/group/GroupUtil.java
index dae4f4e..17998f8 100644
--- a/src/com/android/contacts/group/GroupUtil.java
+++ b/src/com/android/contacts/group/GroupUtil.java
@@ -58,7 +58,8 @@
     public static final String ACTION_SWITCH_GROUP = "switchGroup";
     public static final String ACTION_UPDATE_GROUP = "updateGroup";
 
-    public static final int RESULT_SEND_TO_SELECTION = 100;
+    public static final int RESULT_GROUP_ADD_MEMBER = 100;
+    public static final int RESULT_SEND_TO_SELECTION = 200;
 
     // System IDs of FFC groups in Google accounts
     private static final Set<String> FFC_GROUPS =
diff --git a/src/com/android/contacts/list/CustomContactListFilterActivity.java b/src/com/android/contacts/list/CustomContactListFilterActivity.java
index 425ee7e..5bc3c35 100644
--- a/src/com/android/contacts/list/CustomContactListFilterActivity.java
+++ b/src/com/android/contacts/list/CustomContactListFilterActivity.java
@@ -982,8 +982,8 @@
         public Dialog onCreateDialog(Bundle savedInstanceState) {
             return new AlertDialog.Builder(getActivity(), getTheme())
                     .setMessage(R.string.leave_customize_confirmation_dialog_message)
-                    .setNegativeButton(android.R.string.no, null)
-                    .setPositiveButton(android.R.string.yes, this)
+                    .setNegativeButton(android.R.string.cancel, null)
+                    .setPositiveButton(android.R.string.ok, this)
                     .create();
         }
 
diff --git a/src/com/android/contacts/model/SimContact.java b/src/com/android/contacts/model/SimContact.java
index 820e346..ee0e6dc 100644
--- a/src/com/android/contacts/model/SimContact.java
+++ b/src/com/android/contacts/model/SimContact.java
@@ -172,11 +172,7 @@
 
     @Override
     public int hashCode() {
-        int result = (int) (mRecordNumber ^ (mRecordNumber >>> 32));
-        result = 31 * result + (mName != null ? mName.hashCode() : 0);
-        result = 31 * result + (mPhone != null ? mPhone.hashCode() : 0);
-        result = 31 * result + Arrays.hashCode(mEmails);
-        return result;
+        return Objects.hash(mRecordNumber, mName, mPhone, Arrays.hashCode(mEmails));
     }
 
     @Override
diff --git a/src/com/android/contacts/model/dataitem/ImDataItem.java b/src/com/android/contacts/model/dataitem/ImDataItem.java
index a0e087c..a142585 100644
--- a/src/com/android/contacts/model/dataitem/ImDataItem.java
+++ b/src/com/android/contacts/model/dataitem/ImDataItem.java
@@ -23,6 +23,8 @@
 import android.provider.ContactsContract.CommonDataKinds.Im;
 import android.text.TextUtils;
 
+import java.util.Objects;
+
 /**
  * Represents an IM data item, wrapping the columns in
  * {@link ContactsContract.CommonDataKinds.Im}.
@@ -101,7 +103,7 @@
                 return that.getProtocol() == Im.PROTOCOL_CUSTOM;
             }
             return true;
-        } else if (getProtocol() != that.getProtocol()) {
+        } else if (!Objects.equals(getProtocol(), that.getProtocol())) {
             return false;
         } else if (getProtocol() == Im.PROTOCOL_CUSTOM &&
                 !TextUtils.equals(getCustomProtocol(), that.getCustomProtocol())) {
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 5b144e1..35fc2cc 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -104,7 +104,6 @@
 import com.android.contacts.ContactsActivity;
 import com.android.contacts.ContactsUtils;
 import com.android.contacts.DynamicShortcuts;
-import com.android.contacts.NfcHandler;
 import com.android.contacts.R;
 import com.android.contacts.ShortcutIntentBuilder;
 import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener;
@@ -990,7 +989,6 @@
             }
         };
         mEntriesAndActionsTask.execute();
-        NfcHandler.register(this, mContactData.getLookupUri());
     }
 
     private void bindDataToCards(Cp2DataCardModel cp2DataCardModel) {
@@ -1486,6 +1484,11 @@
             final String dataString = event.buildDataStringForDisplay(context, kind);
             final Calendar cal = DateUtils.parseDate(dataString, false);
             if (cal != null) {
+                final int eventType = event.getContentValues().getAsInteger(Event.TYPE);
+                if (eventType == Event.TYPE_ANNIVERSARY || eventType == Event.TYPE_BIRTHDAY) {
+                    // setting the year to 0 makes a click open the coming birthday
+                    cal.set(Calendar.YEAR, 0);
+                }
                 final Date nextAnniversary =
                         DateUtils.getNextAnnualDate(cal);
                 final Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon();
diff --git a/src/com/android/contacts/vcard/ImportVCardActivity.java b/src/com/android/contacts/vcard/ImportVCardActivity.java
index 38367c4..6ddb8fa 100644
--- a/src/com/android/contacts/vcard/ImportVCardActivity.java
+++ b/src/com/android/contacts/vcard/ImportVCardActivity.java
@@ -546,8 +546,7 @@
     protected void onCreate(Bundle bundle) {
         super.onCreate(bundle);
 
-        getWindow().addSystemFlags(android.view.WindowManager.LayoutParams
-            .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+        getWindow().setHideOverlayWindows(true);
 
         Uri sourceUri = getIntent().getData();
 
diff --git a/src/com/android/contacts/vcard/ImportVCardDialogFragment.java b/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
index 521a610..7ad67d1 100644
--- a/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
+++ b/src/com/android/contacts/vcard/ImportVCardDialogFragment.java
@@ -68,7 +68,7 @@
         return new AlertDialog.Builder(getActivity())
                 .setIconAttribute(android.R.attr.alertDialogIcon)
                 .setMessage(R.string.import_from_vcf_file_confirmation_message)
-                .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
+                .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int whichButton) {
                         final Listener listener = (Listener) getActivity();
@@ -77,7 +77,7 @@
                         }
                     }
                 })
-                .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
+                .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                     @Override
                     public void onClick(DialogInterface dialog, int whichButton) {
                         final Listener listener = (Listener) getActivity();
diff --git a/src/com/android/contacts/vcard/SelectAccountActivity.java b/src/com/android/contacts/vcard/SelectAccountActivity.java
index eb13e50..8ead5fa 100644
--- a/src/com/android/contacts/vcard/SelectAccountActivity.java
+++ b/src/com/android/contacts/vcard/SelectAccountActivity.java
@@ -52,8 +52,7 @@
     protected void onCreate(Bundle bundle) {
         super.onCreate(bundle);
 
-        getWindow().addSystemFlags(android.view.WindowManager.LayoutParams
-            .SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS);
+        getWindow().setHideOverlayWindows(true);
 
         // There's three possibilities:
         // - more than one accounts -> ask the user
diff --git a/src/com/android/contacts/vcard/VCardService.java b/src/com/android/contacts/vcard/VCardService.java
index 075d6bb..5e647c4 100644
--- a/src/com/android/contacts/vcard/VCardService.java
+++ b/src/com/android/contacts/vcard/VCardService.java
@@ -16,6 +16,7 @@
 package com.android.contacts.vcard;
 
 import android.app.Notification;
+import android.app.NotificationManager;
 import android.app.Service;
 import android.content.Intent;
 import android.media.MediaScannerConnection;
@@ -129,6 +130,10 @@
                     VCardCommonArguments.ARG_CALLING_ACTIVITY);
         } else {
             mCallingActivity = null;
+            // The intent will be null if the service is restarted after the app
+            // is killed but the notification may still exist so remove it.
+            NotificationManager nm = getSystemService(NotificationManager.class);
+            nm.cancelAll();
         }
         return START_STICKY;
     }
@@ -255,6 +260,9 @@
                 }
             }
         } else {
+            // In case notification of import is still present and app is killed remove it
+            NotificationManager nm = getSystemService(NotificationManager.class);
+            nm.cancel(NotificationImportExportListener.DEFAULT_NOTIFICATION_TAG, jobId);
             Log.w(LOG_TAG, String.format("Tried to remove unknown job (id: %d)", jobId));
         }
         stopServiceIfAppropriate();