Merge "Modified doPickRingtone() and onRingtonePicked() to handle silent ringtone" into ub-contactsdialer-a-dev
diff --git a/src/com/android/contacts/activities/ContactSelectionActivity.java b/src/com/android/contacts/activities/ContactSelectionActivity.java
index 36e805c..53bfce0 100644
--- a/src/com/android/contacts/activities/ContactSelectionActivity.java
+++ b/src/com/android/contacts/activities/ContactSelectionActivity.java
@@ -84,6 +84,8 @@
private ContactsIntentResolver mIntentResolver;
protected ContactEntryListFragment<?> mListFragment;
+ private boolean mIsVisible;
+
private int mActionCode = -1;
private boolean mIsSearchMode;
private boolean mIsSearchSupported;
@@ -137,6 +139,25 @@
prepareSearchViewAndActionBar();
}
+ @Override
+ protected void onStart() {
+ super.onStart();
+ mIsVisible = true;
+ }
+
+ @Override
+ protected void onStop() {
+ mIsVisible = false;
+ super.onStop();
+ }
+
+ /**
+ * Returns true when the Activity is currently visible (between onStart and onStop).
+ */
+ /* package */ boolean isVisible() {
+ return mIsVisible;
+ }
+
private void prepareSearchViewAndActionBar() {
final ActionBar actionBar = getActionBar();
mSearchViewContainer = LayoutInflater.from(actionBar.getThemedContext())
@@ -212,6 +233,7 @@
@Override
protected void onSaveInstanceState(Bundle outState) {
+ mIsVisible = false;
super.onSaveInstanceState(outState);
outState.putInt(KEY_ACTION_CODE, mActionCode);
outState.putBoolean(KEY_SEARCH_MODE, mIsSearchMode);
@@ -484,17 +506,13 @@
private final class PhoneNumberPickerActionListener implements
OnPhoneNumberPickerActionListener {
@Override
- public void onPickPhoneNumberAction(Uri dataUri) {
+ public void onPickPhoneNumberAction(Uri dataUri, int callInitiationType) {
returnPickerResult(dataUri);
}
@Override
- public void onCallNumberDirectly(String phoneNumber) {
- Log.w(TAG, "Unsupported call.");
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall) {
+ public void onCallNumberDirectly(String phoneNumber, boolean isVideoCall,
+ int callInitiationType) {
Log.w(TAG, "Unsupported call.");
}
@@ -503,6 +521,7 @@
returnPickerResult(intent);
}
+ @Override
public void onHomeInActionBarSelected() {
ContactSelectionActivity.this.onBackPressed();
}
@@ -672,6 +691,10 @@
@Override
public void onBackPressed() {
+ if (!isVisible()) {
+ return;
+ }
+
if (mIsSearchMode) {
mIsSearchMode = false;
configureSearchMode();
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 9103a53..ec78b4d 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -142,6 +142,8 @@
private MultiSelectContactsListFragment mAllFragment;
private ContactTileListFragment mFavoritesFragment;
+ private boolean mIsVisible;
+
/** ViewPager for swipe */
private ViewPager mTabPager;
private ViewPagerTabs mViewPagerTabs;
@@ -410,6 +412,14 @@
configureFragments(!mIsRecreatedInstance);
}
super.onStart();
+
+ mIsVisible = true;
+ }
+
+ @Override
+ protected void onStop() {
+ mIsVisible = false;
+ super.onStop();
}
@Override
@@ -454,6 +464,13 @@
super.onDestroy();
}
+ /**
+ * Returns true when the Activity is currently visible (between onStart and onStop).
+ */
+ /* package */ boolean isVisible() {
+ return mIsVisible;
+ }
+
private void configureFragments(boolean fromRequest) {
if (fromRequest) {
ContactListFilter filter = null;
@@ -1338,6 +1355,10 @@
@Override
public void onBackPressed() {
+ if (!isVisible()) {
+ return;
+ }
+
if (mActionBarAdapter.isSelectionMode()) {
mActionBarAdapter.setSelectionMode(false);
mAllFragment.displayCheckBoxes(false);
@@ -1350,6 +1371,8 @@
@Override
protected void onSaveInstanceState(Bundle outState) {
+ mIsVisible = false;
+
super.onSaveInstanceState(outState);
mActionBarAdapter.onSaveInstanceState(outState);
diff --git a/src/com/android/contacts/editor/CompactContactEditorFragment.java b/src/com/android/contacts/editor/CompactContactEditorFragment.java
index 656c5ae..3a062cf 100644
--- a/src/com/android/contacts/editor/CompactContactEditorFragment.java
+++ b/src/com/android/contacts/editor/CompactContactEditorFragment.java
@@ -363,8 +363,8 @@
// Prepare an Intent to start the expanded editor
final Intent intent = isInsert
- ? EditorIntents.createInsertContactIntent(
- mState, getDisplayName(), getPhoneticName(), mUpdatedPhotos)
+ ? EditorIntents.createInsertContactIntent(mState, getDisplayName(),
+ getPhoneticName(), mUpdatedPhotos, mNewLocalProfile)
: EditorIntents.createEditContactIntent(mLookupUri, getMaterialPalette(),
mPhotoId, mNameId);
ImplicitIntentsUtil.startActivityInApp(getActivity(), intent);
diff --git a/src/com/android/contacts/editor/ContactEditorBaseFragment.java b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
index fc85fe7..4f2ae78 100644
--- a/src/com/android/contacts/editor/ContactEditorBaseFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorBaseFragment.java
@@ -792,7 +792,7 @@
&& !isSingleReadOnlyContact);
// Cannot join a user profile
joinMenu.setVisible(!isEditingUserProfile());
- deleteMenu.setVisible(!mDisableDeleteMenuOption);
+ deleteMenu.setVisible(!mDisableDeleteMenuOption && !isEditingUserProfile());
} else {
// something else, so don't show the help menu
helpMenu.setVisible(false);
@@ -970,7 +970,7 @@
// If we're coming back from the fully expanded editor and this is an insert, just
// pass any values entered by the user back to the compact editor without doing a save
final Intent resultIntent = EditorIntents.createCompactInsertContactIntent(
- mState, getDisplayName(), getPhoneticName(), mUpdatedPhotos);
+ mState, getDisplayName(), getPhoneticName(), mUpdatedPhotos, mNewLocalProfile);
resultIntent.putExtra(INTENT_EXTRA_SAVE_BACK_PRESSED, backPressed);
mListener.onSaveFinished(resultIntent);
return true;
@@ -1123,7 +1123,7 @@
mListener.onCustomCreateContactActivityRequested(account, mIntentExtras);
}
} else {
- setStateForNewContact(account, accountType);
+ setStateForNewContact(account, accountType, isEditingUserProfile());
}
}
@@ -1200,9 +1200,10 @@
/**
* Prepare {@link #mState} for a newly created phone-local contact.
*/
- private void setStateForNewContact(AccountWithDataSet account, AccountType accountType) {
- setStateForNewContact(account, accountType,
- /* oldState =*/ null, /* oldAccountType =*/ null);
+ private void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
+ boolean isUserProfile) {
+ setStateForNewContact(account, accountType, /* oldState =*/ null,
+ /* oldAccountType =*/ null, isUserProfile);
}
/**
@@ -1210,9 +1211,10 @@
* specified by oldState and oldAccountType.
*/
protected void setStateForNewContact(AccountWithDataSet account, AccountType accountType,
- RawContactDelta oldState, AccountType oldAccountType) {
+ RawContactDelta oldState, AccountType oldAccountType, boolean isUserProfile) {
mStatus = Status.EDITING;
mState.add(createNewRawContactDelta(account, accountType, oldState, oldAccountType));
+ mIsUserProfile = isUserProfile;
mNewContactDataReady = true;
bindEditors();
}
@@ -1448,7 +1450,8 @@
mContext, contactLookupUri, mLookupUri);
final Intent resultIntent = isInsert(getActivity().getIntent())
? EditorIntents.createCompactInsertContactIntent(
- mState, getDisplayName(), getPhoneticName(), updatedPhotos)
+ mState, getDisplayName(), getPhoneticName(), updatedPhotos,
+ mNewLocalProfile)
: EditorIntents.createCompactEditContactIntent(
lookupUri, getMaterialPalette(), updatedPhotos, photoId,
nameId);
diff --git a/src/com/android/contacts/editor/ContactEditorFragment.java b/src/com/android/contacts/editor/ContactEditorFragment.java
index 4da17fa..b29ad30 100644
--- a/src/com/android/contacts/editor/ContactEditorFragment.java
+++ b/src/com/android/contacts/editor/ContactEditorFragment.java
@@ -166,9 +166,11 @@
mExistingContactDataReady = false;
mNewContactDataReady = false;
mState = new RawContactDeltaList();
- setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType);
+ setStateForNewContact(newAccount, newAccountType, oldState, oldAccountType,
+ isEditingUserProfile());
if (mIsEdit) {
- setStateForExistingContact(mReadOnlyDisplayName, mIsUserProfile, mRawContacts);
+ setStateForExistingContact(mReadOnlyDisplayName, isEditingUserProfile(),
+ mRawContacts);
}
}
}
@@ -300,7 +302,7 @@
rawContactEditor.setAutoAddToDefaultGroup(mAutoAddToDefaultGroup);
- if (isAggregationSuggestionRawContactId(rawContactId)) {
+ if (!isEditingUserProfile() && isAggregationSuggestionRawContactId(rawContactId)) {
acquireAggregationSuggestions(activity,
rawContactEditor.getNameEditor().getRawContactId(),
rawContactEditor.getNameEditor().getValues());
diff --git a/src/com/android/contacts/editor/EditorIntents.java b/src/com/android/contacts/editor/EditorIntents.java
index a3c29fc..68ce76f 100644
--- a/src/com/android/contacts/editor/EditorIntents.java
+++ b/src/com/android/contacts/editor/EditorIntents.java
@@ -58,7 +58,8 @@
*/
public static Intent createCompactInsertContactIntent() {
return createCompactInsertContactIntent(/* rawContactDeltaList =*/ null,
- /* displayName =*/ null, /* phoneticName =*/ null, /* updatedPhotos =*/ null);
+ /* displayName =*/ null, /* phoneticName =*/ null, /* updatedPhotos =*/ null,
+ /* isNewLocalProfile =*/ false);
}
/**
@@ -66,8 +67,10 @@
* the field values specified by rawContactDeltaList pre-populate in the form.
*/
public static Intent createCompactInsertContactIntent(RawContactDeltaList rawContactDeltaList,
- String displayName, String phoneticName, Bundle updatedPhotos) {
+ String displayName, String phoneticName, Bundle updatedPhotos,
+ boolean isNewLocalProfile) {
final Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI);
+ intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
if (rawContactDeltaList != null || displayName != null || phoneticName != null) {
putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
}
@@ -112,9 +115,11 @@
* existing contact.
*/
public static Intent createInsertContactIntent(RawContactDeltaList rawContactDeltaList,
- String displayName, String phoneticName, Bundle updatedPhotos) {
+ String displayName, String phoneticName, Bundle updatedPhotos,
+ boolean isNewLocalProfile) {
final Intent intent = new Intent(ContactEditorBaseActivity.ACTION_INSERT,
Contacts.CONTENT_URI);
+ intent.putExtra(ContactEditorFragment.INTENT_EXTRA_NEW_LOCAL_PROFILE, isNewLocalProfile);
addContactIntentFlags(intent);
putRawContactDeltaValues(intent, rawContactDeltaList, displayName, phoneticName);
putUpdatedPhotos(intent, updatedPhotos);
diff --git a/src/com/android/contacts/editor/RawContactDeltaComparator.java b/src/com/android/contacts/editor/RawContactDeltaComparator.java
index 17a4dda..1a00c9d 100644
--- a/src/com/android/contacts/editor/RawContactDeltaComparator.java
+++ b/src/com/android/contacts/editor/RawContactDeltaComparator.java
@@ -120,12 +120,14 @@
// Both are in the same account, fall back to contact ID
Long oneId = one.getRawContactId();
Long twoId = two.getRawContactId();
- if (oneId == null) {
+ if (oneId == null && twoId == null) {
+ return 0;
+ } else if (oneId == null) {
return -1;
} else if (twoId == null) {
return 1;
}
- return (int) (oneId - twoId);
+ return Long.compare(oneId, twoId);
}
-}
\ No newline at end of file
+}
diff --git a/src/com/android/contacts/interactions/ContactDeletionInteraction.java b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
index b05cbab..a626ad0 100644
--- a/src/com/android/contacts/interactions/ContactDeletionInteraction.java
+++ b/src/com/android/contacts/interactions/ContactDeletionInteraction.java
@@ -114,7 +114,7 @@
static ContactDeletionInteraction startWithTestLoaderManager(
Activity activity, Uri contactUri, boolean finishActivityWhenDone,
TestLoaderManagerBase testLoaderManager) {
- if (contactUri == null) {
+ if (contactUri == null || activity.isDestroyed()) {
return null;
}
diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java
index 64d8aec..8bb6976 100644
--- a/src/com/android/contacts/quickcontact/QuickContactActivity.java
+++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java
@@ -2396,7 +2396,7 @@
}
final MenuItem deleteMenuItem = menu.findItem(R.id.menu_delete);
- deleteMenuItem.setVisible(isContactEditable());
+ deleteMenuItem.setVisible(isContactEditable() && !mContactData.isUserProfile());
final MenuItem shareMenuItem = menu.findItem(R.id.menu_share);
shareMenuItem.setVisible(isContactShareable());