Merge "Fix ExternalAccountTypeTests" into ub-contactsdialer-h-dev
diff --git a/res/layout/fragment_sim_import.xml b/res/layout/fragment_sim_import.xml
index b0eb280..00336dd 100644
--- a/res/layout/fragment_sim_import.xml
+++ b/res/layout/fragment_sim_import.xml
@@ -41,7 +41,7 @@
style="@style/Widget.AppCompat.Button.Borderless"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="right|center_vertical"
+ android:layout_gravity="end|center_vertical"
android:text="@string/sim_import_button_text"
/>
</android.support.v7.widget.Toolbar>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6980f23..a402d68 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -972,9 +972,9 @@
<string name="permission_explanation_subheader_SMS">Messages</string>
<!-- The header text for hamburger promo [CHAR LIMIT=60]-->
- <string name="hamburger_feature_highlight_header">Organize your list</string>
+ <string name="hamburger_feature_highlight_header">Suggestions</string>
<!-- The body text for hamburger promo [CHAR LIMIT=200]-->
- <string name="hamburger_feature_highlight_body">Clean up duplicates & group contacts by label</string>
+ <string name="hamburger_feature_highlight_body">Keep your contacts organized and useful</string>
<!-- The label for the action shown in a snackbar after an operation that modifies some data is performed.
The user can click on the action to rollback the modification-->
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index c2198bb..5d478fe 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -810,9 +810,13 @@
R.id.contacts_list_container, mMembersFragment, TAG_GROUP_VIEW);
} else if (isAssistantView()) {
Fragment uiFragment = fragmentManager.findFragmentByTag(TAG_ASSISTANT);
+ Fragment unavailableFragment = fragmentManager.findFragmentByTag(TAG_UNAVAILABLE);
if (uiFragment == null) {
uiFragment = ObjectFactory.getAssistantFragment();
}
+ if (unavailableFragment != null) {
+ transaction.remove(unavailableFragment);
+ }
transaction.replace(R.id.contacts_list_container, uiFragment, TAG_ASSISTANT);
resetToolBarStatusBarColor();
}
diff --git a/src/com/android/contacts/common/database/SimContactDao.java b/src/com/android/contacts/common/database/SimContactDao.java
index 8805c52..3175ce4 100644
--- a/src/com/android/contacts/common/database/SimContactDao.java
+++ b/src/com/android/contacts/common/database/SimContactDao.java
@@ -24,7 +24,6 @@
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.net.Uri;
-import android.os.AsyncTask;
import android.os.Build;
import android.os.RemoteException;
import android.provider.BaseColumns;
@@ -40,14 +39,12 @@
import android.util.SparseArray;
import com.android.contacts.R;
-import com.android.contacts.common.Experiments;
import com.android.contacts.common.compat.CompatUtils;
import com.android.contacts.common.model.SimCard;
import com.android.contacts.common.model.SimContact;
import com.android.contacts.common.model.account.AccountWithDataSet;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.contacts.util.SharedPreferenceUtil;
-import com.android.contactsbind.experiments.Flags;
import com.google.common.base.Joiner;
import java.util.ArrayList;
@@ -97,17 +94,6 @@
mTelephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
}
- public void warmupSimQueryIfNeeded() {
- if (!canReadSimContacts()) return;
-
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- getSimCardsWithContacts();
- return null;
- }
- }.execute();
- }
public Context getContext() {
return mContext;
@@ -279,13 +265,19 @@
return contacts != null ? contacts : loadContactsForSim(sim);
}
+ // See b/32831092
+ // Sometimes the SIM contacts provider seems to get stuck if read from multiple threads
+ // concurrently. So we just have a global lock around it to prevent potential issues.
+ private static final Object SIM_READ_LOCK = new Object();
private ArrayList<SimContact> loadFrom(Uri uri) {
- final Cursor cursor = mResolver.query(uri, null, null, null, null);
+ synchronized (SIM_READ_LOCK) {
+ final Cursor cursor = mResolver.query(uri, null, null, null, null);
- try {
- return loadFromCursor(cursor);
- } finally {
- cursor.close();
+ try {
+ return loadFromCursor(cursor);
+ } finally {
+ cursor.close();
+ }
}
}
@@ -423,10 +415,6 @@
}
@Override
- public void warmupSimQueryIfNeeded() {
- }
-
- @Override
public List<SimCard> getSimCards() {
return SharedPreferenceUtil.restoreSimStates(getContext(), mSimCards);
}