From 5eb2a0688dce0661d8aa713a125b2c6570419f97 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Thu, 25 May 2023 17:08:41 +0530 Subject: [PATCH 01/20] add xml layout item for labels --- res/layout/quickcontact_content.xml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/res/layout/quickcontact_content.xml b/res/layout/quickcontact_content.xml index b6cff4b14c..736767805e 100644 --- a/res/layout/quickcontact_content.xml +++ b/res/layout/quickcontact_content.xml @@ -42,6 +42,12 @@ android:visibility="gone" cardview:cardCornerRadius="@dimen/expanding_entry_card_card_corner_radius" /> + + Date: Fri, 26 May 2023 05:41:43 +0530 Subject: [PATCH 02/20] create class GroupMembershipTools --- .../contacts/model/GroupMembershipTools.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 src/com/android/contacts/model/GroupMembershipTools.java diff --git a/src/com/android/contacts/model/GroupMembershipTools.java b/src/com/android/contacts/model/GroupMembershipTools.java new file mode 100644 index 0000000000..747627276e --- /dev/null +++ b/src/com/android/contacts/model/GroupMembershipTools.java @@ -0,0 +1,49 @@ +package com.android.contacts.model; + +import android.content.Context; +import android.database.Cursor; +import android.net.Uri; +import android.provider.ContactsContract; + +public class GroupMembershipTools { + + public boolean isTypeGroupMembership(String mimeType) { + return ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE.equals(mimeType); + } + + public String getGroupTitle(Context context, long groupId) { + Uri groupUri = ContactsContract.Groups.CONTENT_URI; + + String[] projection = new String[]{ + ContactsContract.Groups._ID, + ContactsContract.Groups.TITLE, + }; + String selection = ContactsContract.Groups.AUTO_ADD + " = ? AND " + ContactsContract.Groups.FAVORITES + " = ?"; + String[] selectionArgs = new String[]{"0", "0"}; + + try { + Cursor groupCursor = context.getContentResolver().query(groupUri, projection, selection, selectionArgs, null, null); + if (groupCursor.moveToFirst()) { + do { + int groupIdColumnIndex = groupCursor.getColumnIndex(ContactsContract.Groups._ID); + int groupTitleColumnIndex = groupCursor.getColumnIndex(ContactsContract.Groups.TITLE); + if (groupIdColumnIndex == -1 || groupTitleColumnIndex == -1) { + groupCursor.close(); + return null; + } + long id = groupCursor.getLong(groupIdColumnIndex); + String title = groupCursor.getString(groupTitleColumnIndex); + if (groupId == id) { + groupCursor.close(); + return title; + } + } while (groupCursor.moveToNext()); + } + groupCursor.close(); + return null; + } catch (Exception e) { + return null; + } + } + +} -- GitLab From 756b43e624dd36546ac4889ed60e3c4028db8ce2 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 05:52:06 +0530 Subject: [PATCH 03/20] just define programmatic object for labels card - mLabelsCard --- src/com/android/contacts/quickcontact/QuickContactActivity.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 1d095cc9ae..63dc093215 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -282,6 +282,7 @@ public class QuickContactActivity extends ContactsActivity { private QuickContactImageView mPhotoView; private ExpandingEntryCardView mContactCard; + private ExpandingEntryCardView mLabelsCard; private ExpandingEntryCardView mNoContactDetailsCard; private ExpandingEntryCardView mAboutCard; @@ -701,6 +702,7 @@ public class QuickContactActivity extends ContactsActivity { mScroller = (MultiShrinkScroller) findViewById(R.id.multiscroller); mContactCard = (ExpandingEntryCardView) findViewById(R.id.communication_card); + mLabelsCard = (ExpandingEntryCardView) findViewById(R.id.labels_card); mNoContactDetailsCard = (ExpandingEntryCardView) findViewById(R.id.no_contact_data_card); mAboutCard = (ExpandingEntryCardView) findViewById(R.id.about_card); -- GitLab From 0e5ddf5d5fdb9956ff12b95e1be969890fb54ade Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 05:55:12 +0530 Subject: [PATCH 04/20] create GroupMembershipTools object to create visible view item in dataItemsToEntries() --- .../contacts/quickcontact/QuickContactActivity.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 63dc093215..70d3852a51 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -132,6 +132,7 @@ import com.android.contacts.logging.ScreenEvent.ScreenType; import com.android.contacts.model.AccountTypeManager; import com.android.contacts.model.Contact; import com.android.contacts.model.ContactLoader; +import com.android.contacts.model.GroupMembershipTools; import com.android.contacts.model.RawContact; import com.android.contacts.model.account.AccountType; import com.android.contacts.model.dataitem.CustomDataItem; @@ -139,6 +140,7 @@ import com.android.contacts.model.dataitem.DataItem; import com.android.contacts.model.dataitem.DataKind; import com.android.contacts.model.dataitem.EmailDataItem; import com.android.contacts.model.dataitem.EventDataItem; +import com.android.contacts.model.dataitem.GroupMembershipDataItem; import com.android.contacts.model.dataitem.ImDataItem; import com.android.contacts.model.dataitem.NicknameDataItem; import com.android.contacts.model.dataitem.NoteDataItem; @@ -356,6 +358,8 @@ public class QuickContactActivity extends ContactsActivity { private static final String FRAGMENT_TAG_SELECT_ACCOUNT = "select_account_fragment"; + private static final GroupMembershipTools groupMembershipTools = new GroupMembershipTools(); + final OnClickListener mEntryClickHandler = new OnClickListener() { @Override public void onClick(View v) { @@ -1721,6 +1725,15 @@ public class QuickContactActivity extends ContactsActivity { aboutCardName.value = res.getString(R.string.about_card_title); } } + } else if (dataItem instanceof GroupMembershipDataItem) { + + final GroupMembershipDataItem group = (GroupMembershipDataItem) dataItem; + String groupTitle = groupMembershipTools.getGroupTitle(context, group.getGroupRowId()); + if (!TextUtils.isEmpty(groupTitle)) { + text = groupTitle; + textIcon = res.getDrawable(R.drawable.quantum_ic_label_vd_theme_24); + } + } else if (CallUtil.isTachyonEnabled(context) && MIMETYPE_TACHYON.equals( dataItem.getMimeType())) { // Skip these actions. They will be placed by the phone number. -- GitLab From 4d7ac9e3ff6763c19a86c21b9584585445a94cda Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 05:57:01 +0530 Subject: [PATCH 05/20] modify some filtration logic that were removing labels --- .../contacts/quickcontact/QuickContactActivity.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 70d3852a51..cf0c162aee 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -1280,7 +1280,7 @@ public class QuickContactActivity extends ContactsActivity { dataItem.setDataKind(dataKind); final boolean hasData = !TextUtils.isEmpty(dataItem.buildDataString(this, - dataKind)); + dataKind)) || groupMembershipTools.isTypeGroupMembership(mimeType); if (isMimeExcluded(mimeType) || !hasData) continue; } else if (!tachyonEnabled) { @@ -1308,8 +1308,14 @@ public class QuickContactActivity extends ContactsActivity { */ final List> dataItemsList = new ArrayList<>(); for (List mimeTypeDataItems : dataItemsMap.values()) { - // Remove duplicate data items - Collapser.collapseList(mimeTypeDataItems, this); + if (mimeTypeDataItems.isEmpty()) { + continue; + } + String mimeType = mimeTypeDataItems.get(0).getMimeType(); + if (!groupMembershipTools.isTypeGroupMembership(mimeType)) { + // Remove duplicate data items + Collapser.collapseList(mimeTypeDataItems, this); + } // Sort within mimetype Collections.sort(mimeTypeDataItems, mWithinMimeTypeDataItemComparator); // Add to the list of data item lists -- GitLab From 03624c85406be11426c7446a6e5c00fc2f536b04 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 06:05:20 +0530 Subject: [PATCH 06/20] remove labels from about section --- src/com/android/contacts/quickcontact/QuickContactActivity.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index cf0c162aee..a771b3a2d2 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -341,7 +341,6 @@ public class QuickContactActivity extends ContactsActivity { Event.CONTENT_ITEM_TYPE, Relation.CONTENT_ITEM_TYPE, Im.CONTENT_ITEM_TYPE, - GroupMembership.CONTENT_ITEM_TYPE, Identity.CONTENT_ITEM_TYPE, CustomDataItem.MIMETYPE_CUSTOM_FIELD, Note.CONTENT_ITEM_TYPE); -- GitLab From e1f978421bf045d56cfb1fc135f84d69330d9c71 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 05:59:30 +0530 Subject: [PATCH 07/20] use dataItemsToEntries() to get visible view items for labels --- .../contacts/quickcontact/QuickContactActivity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index a771b3a2d2..66ea1d0e09 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -1331,6 +1331,7 @@ public class QuickContactActivity extends ContactsActivity { final List> contactCardEntries = new ArrayList<>(); final List> aboutCardEntries = buildAboutCardEntries(dataItemsMap); + final List> labelCardEntries = new ArrayList<>(); final MutableString aboutCardName = new MutableString(); for (int i = 0; i < dataItemsList.size(); ++i) { @@ -1339,6 +1340,12 @@ public class QuickContactActivity extends ContactsActivity { if (SORTED_ABOUT_CARD_MIMETYPES.contains(topDataItem.getMimeType())) { // About card mimetypes are built in buildAboutCardEntries, skip here continue; + } else if (groupMembershipTools.isTypeGroupMembership(topDataItem.getMimeType())) { + List labelEntries = dataItemsToEntries(dataItemsByMimeType, + aboutCardName); + if (labelEntries.size() > 0) { + labelCardEntries.add(labelEntries); + } } else { List contactEntries = dataItemsToEntries(dataItemsList.get(i), aboutCardName); -- GitLab From a8e35298c27b145b16d0d05bfa440c8b0a334144 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 06:02:20 +0530 Subject: [PATCH 08/20] Cp2DataCardModel - create new list labelEntries to store items generated in the last commit --- src/com/android/contacts/quickcontact/QuickContactActivity.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 66ea1d0e09..572c1878eb 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -1361,6 +1361,7 @@ public class QuickContactActivity extends ContactsActivity { dataModel.customAboutCardName = aboutCardName.value; dataModel.aboutCardEntries = aboutCardEntries; dataModel.contactCardEntries = contactCardEntries; + dataModel.labelEntries = labelCardEntries; dataModel.dataItemsMap = dataItemsMap; dataModel.areAllRawContactsSimAccounts = data.areAllRawContactsSimAccounts(this); return dataModel; @@ -1400,6 +1401,7 @@ public class QuickContactActivity extends ContactsActivity { public Map> dataItemsMap; public List> aboutCardEntries; public List> contactCardEntries; + public List> labelEntries; public String customAboutCardName; public boolean areAllRawContactsSimAccounts; } -- GitLab From 8bb644ec96995eccc9539f9cf876674ff2733bbc Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 06:03:53 +0530 Subject: [PATCH 09/20] define populateLabelsCard() and use it --- .../quickcontact/QuickContactActivity.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 572c1878eb..66fa0a51b8 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -1036,6 +1036,7 @@ public class QuickContactActivity extends ContactsActivity { mOnlyOneEmail = emailDataItems != null && emailDataItems.size() == 1; populateContactAndAboutCard(cp2DataCardModel, /* shouldAddPhoneticName */ true); + populateLabelsCard(mCachedCp2DataCardModel); } private void showActivity() { @@ -1076,6 +1077,7 @@ public class QuickContactActivity extends ContactsActivity { if (mHasIntentLaunched) { mHasIntentLaunched = false; populateContactAndAboutCard(mCachedCp2DataCardModel, /* shouldAddPhoneticName */ false); + populateLabelsCard(mCachedCp2DataCardModel); } maybeShowProgressDialog(); @@ -1187,6 +1189,30 @@ public class QuickContactActivity extends ContactsActivity { Trace.endSection(); } + private void populateLabelsCard(Cp2DataCardModel cp2DataCardModel) { + mCachedCp2DataCardModel = cp2DataCardModel; + if (mHasIntentLaunched || cp2DataCardModel == null) { + return; + } + + final List> labelEntries = cp2DataCardModel.labelEntries; + final String cardTitle = getString(R.string.groupsLabel); + + mLabelsCard.setTitle(cardTitle); + mLabelsCard.initialize(labelEntries, + /* numInitialVisibleEntries = */ 1, + /* isExpanded = */ true, + /* isAlwaysExpanded = */ true, + mExpandingEntryCardViewListener, + mScroller); + + if (labelEntries.size() > 0) { + mLabelsCard.setVisibility(View.VISIBLE); + } else { + mLabelsCard.setVisibility(View.GONE); + } + } + /** * Create a card that shows "Add email" and "Add phone number" entries in grey. * When contact is a SIM contact, only shows "Add phone number". -- GitLab From 28974a9581caf924bafc43bdd1171fce929fab50 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 06:06:08 +0530 Subject: [PATCH 10/20] set color to labels card title --- src/com/android/contacts/quickcontact/QuickContactActivity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 66fa0a51b8..16af56040d 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -2114,6 +2114,7 @@ public class QuickContactActivity extends ContactsActivity { new PorterDuffColorFilter(mColorFilterColor, PorterDuff.Mode.SRC_ATOP); mContactCard.setColorAndFilter(mColorFilterColor, mColorFilter); mAboutCard.setColorAndFilter(mColorFilterColor, mColorFilter); + mLabelsCard.setColorAndFilter(mColorFilterColor, mColorFilter); } private void updateStatusBarColor() { -- GitLab From 1dd9d0390e6ede5b4cf81b6904bf27b29db3141d Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 06:08:57 +0530 Subject: [PATCH 11/20] xml change - use horizontal linear layout for text and icon_text --- res/layout/expanding_entry_card_item.xml | 33 ++++++++++++++---------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/res/layout/expanding_entry_card_item.xml b/res/layout/expanding_entry_card_item.xml index dbbeee5fa4..c044428d57 100644 --- a/res/layout/expanding_entry_card_item.xml +++ b/res/layout/expanding_entry_card_item.xml @@ -67,24 +67,29 @@ android:layout_marginEnd="@dimen/expanding_entry_card_item_sub_header_icon_margin_right" android:layout_marginBottom="@dimen/expanding_entry_card_item_sub_header_icon_margin_bottom" /> - - - + android:orientation="horizontal" + android:gravity="center" + > + + + + + + Date: Fri, 26 May 2023 06:09:54 +0530 Subject: [PATCH 12/20] xml change - make item top and bottom padding equal --- res/values/dimens.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 6d100aca06..774ce1284c 100644 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -143,7 +143,7 @@ 20dp 8dp 13dp - 16dp + 13dp 27dp -- GitLab From 96ce81acd93ceee83d5e40ce82cb1c72f832b8cf Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 08:09:09 +0530 Subject: [PATCH 13/20] allow long press to copy a label --- .../contacts/quickcontact/QuickContactActivity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index 16af56040d..c3b55a6c10 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -716,6 +716,9 @@ public class QuickContactActivity extends ContactsActivity { mAboutCard.setOnClickListener(mEntryClickHandler); mAboutCard.setOnCreateContextMenuListener(mEntryContextMenuListener); + mLabelsCard.setOnClickListener(mEntryClickHandler); + mLabelsCard.setOnCreateContextMenuListener(mEntryContextMenuListener); + mPhotoView = (QuickContactImageView) findViewById(R.id.photo); final View transparentView = findViewById(R.id.transparent_view); if (mScroller != null) { @@ -1772,6 +1775,10 @@ public class QuickContactActivity extends ContactsActivity { if (!TextUtils.isEmpty(groupTitle)) { text = groupTitle; textIcon = res.getDrawable(R.drawable.quantum_ic_label_vd_theme_24); + + entryContextMenuInfo = new EntryContextMenuInfo(text, + res.getString(R.string.groupsLabel), dataItem.getMimeType(), + dataItem.getId(), dataItem.isSuperPrimary()); } } else if (CallUtil.isTachyonEnabled(context) && MIMETYPE_TACHYON.equals( -- GitLab From f5c2bde5b859135c1014cd2df9a6f54fd6b61e7e Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 08:27:33 +0530 Subject: [PATCH 14/20] PeopleActivity - code to open a label / group from intent --- .../contacts/activities/PeopleActivity.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java index 8fababc5d7..c8169c7f47 100644 --- a/src/com/android/contacts/activities/PeopleActivity.java +++ b/src/com/android/contacts/activities/PeopleActivity.java @@ -104,6 +104,7 @@ import com.google.common.util.concurrent.Futures; import java.util.Collections; import java.util.List; +import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; /** @@ -140,6 +141,9 @@ public class PeopleActivity extends AppCompatContactsActivity implements private static final String KEY_CONTACTS_VIEW = "contactsView"; private static final String KEY_NEW_GROUP_ACCOUNT = "newGroupAccount"; + public static final String ACTION_OPEN_GROUP_FROM_CONTACT = "openGroupFromContact"; + public static final String EXTRA_GROUP_ID = "groupId"; + private static final long DRAWER_CLOSE_DELAY = 300L; private ContactsIntentResolver mIntentResolver; @@ -419,6 +423,18 @@ public class PeopleActivity extends AppCompatContactsActivity implements Log.d(Constants.PERFORMANCE_TAG, "PeopleActivity.onCreate finish"); } getWindow().setBackgroundDrawable(null); + + openProvidedGroupFromContact(getIntent()); + } + + private void openProvidedGroupFromContact(Intent intent) { + String action = intent.getAction(); + if (Objects.equals(action, ACTION_OPEN_GROUP_FROM_CONTACT)) { + long groupId = intent.getLongExtra(EXTRA_GROUP_ID, -1); + if (groupId != -1) { + onGroupMenuItemClicked(groupId); + } + } } @Override -- GitLab From 31609a775b560208c1848ca511464b44c7cb2d52 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 08:33:33 +0530 Subject: [PATCH 15/20] QuickContactActivity - intent to open label --- .../android/contacts/quickcontact/QuickContactActivity.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index c3b55a6c10..ae76b84a9a 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -110,6 +110,7 @@ import com.android.contacts.ShortcutIntentBuilder; import com.android.contacts.ShortcutIntentBuilder.OnShortcutIntentCreatedListener; import com.android.contacts.activities.ContactEditorActivity; import com.android.contacts.activities.ContactSelectionActivity; +import com.android.contacts.activities.PeopleActivity; import com.android.contacts.activities.RequestPermissionsActivity; import com.android.contacts.compat.CompatUtils; import com.android.contacts.compat.EventCompat; @@ -1779,6 +1780,10 @@ public class QuickContactActivity extends ContactsActivity { entryContextMenuInfo = new EntryContextMenuInfo(text, res.getString(R.string.groupsLabel), dataItem.getMimeType(), dataItem.getId(), dataItem.isSuperPrimary()); + + intent = new Intent(context, PeopleActivity.class) + .setAction(PeopleActivity.ACTION_OPEN_GROUP_FROM_CONTACT) + .putExtra(PeopleActivity.EXTRA_GROUP_ID, group.getGroupRowId()); } } else if (CallUtil.isTachyonEnabled(context) && MIMETYPE_TACHYON.equals( -- GitLab From 38974958255177f9b330cc8309ea187f8de44118 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Fri, 26 May 2023 08:37:50 +0530 Subject: [PATCH 16/20] PeopleActivity - prevent opening all contacts if label opened from contact --- .../android/contacts/activities/PeopleActivity.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java index c8169c7f47..d39e1de2f7 100644 --- a/src/com/android/contacts/activities/PeopleActivity.java +++ b/src/com/android/contacts/activities/PeopleActivity.java @@ -161,6 +161,8 @@ public class PeopleActivity extends AppCompatContactsActivity implements private boolean mShouldSwitchToGroupView; + private boolean mGroupOpenedFromContact = false; + private ContactsView mCurrentView; private CoordinatorLayout mLayoutRoot; @@ -433,6 +435,7 @@ public class PeopleActivity extends AppCompatContactsActivity implements long groupId = intent.getLongExtra(EXTRA_GROUP_ID, -1); if (groupId != -1) { onGroupMenuItemClicked(groupId); + mGroupOpenedFromContact = true; } } } @@ -816,6 +819,11 @@ public class PeopleActivity extends AppCompatContactsActivity implements return; } + if (isGroupOpenedFromContact()) { + finish(); + return; + } + // Handle the back event in "second level". if (isGroupView()) { onBackPressedGroupView(); @@ -1260,6 +1268,10 @@ public class PeopleActivity extends AppCompatContactsActivity implements return mCurrentView == ContactsView.GROUP_VIEW; } + public boolean isGroupOpenedFromContact() { + return mGroupOpenedFromContact; + } + protected boolean isAssistantView() { return mCurrentView == ContactsView.ASSISTANT; } -- GitLab From 8937cb8e675bb72141b234abe1a6d0a1758801f9 Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Tue, 30 May 2023 01:29:06 +0530 Subject: [PATCH 17/20] fix tint issue in light mode in text icon --- .../quickcontact/ExpandingEntryCardView.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java index d462a0ee04..917034b6c6 100644 --- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java +++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.graphics.ColorFilter; +import android.graphics.PorterDuff; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -617,6 +618,18 @@ public class ExpandingEntryCardView extends CardView { thirdIcon.mutate(); thirdIcon.setColorFilter(mThemeColorFilter); } + Drawable textIcon = entry.getTextIcon(); + if (textIcon != null) { + textIcon.mutate(); + if (entry.shouldApplyColor()) { + textIcon.setColorFilter(mThemeColorFilter); + } else { + int textColor = + getResources().getColor(R.color.quickcontact_entry_sub_header_text_color); + textIcon.setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP); + } + textIcon.setAlpha(200); + } } } } -- GitLab From 5e230ee7b2c10c6045dee6936080733edacd228e Mon Sep 17 00:00:00 2001 From: SayantanRC Date: Tue, 30 May 2023 02:22:20 +0530 Subject: [PATCH 18/20] fix not opening label group from dialer --- src/com/android/contacts/activities/PeopleActivity.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java index d39e1de2f7..4e427fab64 100644 --- a/src/com/android/contacts/activities/PeopleActivity.java +++ b/src/com/android/contacts/activities/PeopleActivity.java @@ -443,6 +443,12 @@ public class PeopleActivity extends AppCompatContactsActivity implements @Override protected void onNewIntent(Intent intent) { final String action = intent.getAction(); + + openProvidedGroupFromContact(intent); + if(isGroupOpenedFromContact()) { + return; + } + if (GroupUtil.ACTION_CREATE_GROUP.equals(action)) { mGroupUri = intent.getData(); if (mGroupUri == null) { -- GitLab From a79ee0f3033d7514cbf8f341e8afbb13e40cd6ba Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Thu, 1 Jun 2023 15:47:57 +0530 Subject: [PATCH 19/20] apply suggestions --- .../contacts/activities/PeopleActivity.java | 4 +-- .../contacts/model/GroupMembershipTools.java | 34 ++++++++++++++----- .../quickcontact/ExpandingEntryCardView.java | 2 +- .../quickcontact/QuickContactActivity.java | 9 +++-- 4 files changed, 36 insertions(+), 13 deletions(-) diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java index 4e427fab64..4eec116bd9 100644 --- a/src/com/android/contacts/activities/PeopleActivity.java +++ b/src/com/android/contacts/activities/PeopleActivity.java @@ -430,7 +430,7 @@ public class PeopleActivity extends AppCompatContactsActivity implements } private void openProvidedGroupFromContact(Intent intent) { - String action = intent.getAction(); + final String action = intent.getAction(); if (Objects.equals(action, ACTION_OPEN_GROUP_FROM_CONTACT)) { long groupId = intent.getLongExtra(EXTRA_GROUP_ID, -1); if (groupId != -1) { @@ -445,7 +445,7 @@ public class PeopleActivity extends AppCompatContactsActivity implements final String action = intent.getAction(); openProvidedGroupFromContact(intent); - if(isGroupOpenedFromContact()) { + if (isGroupOpenedFromContact()) { return; } diff --git a/src/com/android/contacts/model/GroupMembershipTools.java b/src/com/android/contacts/model/GroupMembershipTools.java index 747627276e..5d506b31c6 100644 --- a/src/com/android/contacts/model/GroupMembershipTools.java +++ b/src/com/android/contacts/model/GroupMembershipTools.java @@ -1,3 +1,20 @@ +/* + * Copyright (C) 2019-2023 E FOUNDATION + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + package com.android.contacts.model; import android.content.Context; @@ -12,27 +29,27 @@ public class GroupMembershipTools { } public String getGroupTitle(Context context, long groupId) { - Uri groupUri = ContactsContract.Groups.CONTENT_URI; + final Uri groupUri = ContactsContract.Groups.CONTENT_URI; - String[] projection = new String[]{ + final String[] projection = new String[]{ ContactsContract.Groups._ID, ContactsContract.Groups.TITLE, }; - String selection = ContactsContract.Groups.AUTO_ADD + " = ? AND " + ContactsContract.Groups.FAVORITES + " = ?"; - String[] selectionArgs = new String[]{"0", "0"}; + final String selection = ContactsContract.Groups.AUTO_ADD + " = ? AND " + ContactsContract.Groups.FAVORITES + " = ?"; + final String[] selectionArgs = new String[]{"0", "0"}; try { Cursor groupCursor = context.getContentResolver().query(groupUri, projection, selection, selectionArgs, null, null); if (groupCursor.moveToFirst()) { do { - int groupIdColumnIndex = groupCursor.getColumnIndex(ContactsContract.Groups._ID); - int groupTitleColumnIndex = groupCursor.getColumnIndex(ContactsContract.Groups.TITLE); + final int groupIdColumnIndex = groupCursor.getColumnIndex(ContactsContract.Groups._ID); + final int groupTitleColumnIndex = groupCursor.getColumnIndex(ContactsContract.Groups.TITLE); if (groupIdColumnIndex == -1 || groupTitleColumnIndex == -1) { groupCursor.close(); return null; } - long id = groupCursor.getLong(groupIdColumnIndex); - String title = groupCursor.getString(groupTitleColumnIndex); + final long id = groupCursor.getLong(groupIdColumnIndex); + final String title = groupCursor.getString(groupTitleColumnIndex); if (groupId == id) { groupCursor.close(); return title; @@ -42,6 +59,7 @@ public class GroupMembershipTools { groupCursor.close(); return null; } catch (Exception e) { + e.printStackTrace(); return null; } } diff --git a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java index 917034b6c6..5ed14d8862 100644 --- a/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java +++ b/src/com/android/contacts/quickcontact/ExpandingEntryCardView.java @@ -624,7 +624,7 @@ public class ExpandingEntryCardView extends CardView { if (entry.shouldApplyColor()) { textIcon.setColorFilter(mThemeColorFilter); } else { - int textColor = + final int textColor = getResources().getColor(R.color.quickcontact_entry_sub_header_text_color); textIcon.setColorFilter(textColor, PorterDuff.Mode.SRC_ATOP); } diff --git a/src/com/android/contacts/quickcontact/QuickContactActivity.java b/src/com/android/contacts/quickcontact/QuickContactActivity.java index ae76b84a9a..9801b31913 100644 --- a/src/com/android/contacts/quickcontact/QuickContactActivity.java +++ b/src/com/android/contacts/quickcontact/QuickContactActivity.java @@ -1212,9 +1212,10 @@ public class QuickContactActivity extends ContactsActivity { if (labelEntries.size() > 0) { mLabelsCard.setVisibility(View.VISIBLE); - } else { - mLabelsCard.setVisibility(View.GONE); + return; } + + mLabelsCard.setVisibility(View.GONE); } /** @@ -1340,11 +1341,14 @@ public class QuickContactActivity extends ContactsActivity { if (mimeTypeDataItems.isEmpty()) { continue; } + String mimeType = mimeTypeDataItems.get(0).getMimeType(); + if (!groupMembershipTools.isTypeGroupMembership(mimeType)) { // Remove duplicate data items Collapser.collapseList(mimeTypeDataItems, this); } + // Sort within mimetype Collections.sort(mimeTypeDataItems, mWithinMimeTypeDataItemComparator); // Add to the list of data item lists @@ -1773,6 +1777,7 @@ public class QuickContactActivity extends ContactsActivity { final GroupMembershipDataItem group = (GroupMembershipDataItem) dataItem; String groupTitle = groupMembershipTools.getGroupTitle(context, group.getGroupRowId()); + if (!TextUtils.isEmpty(groupTitle)) { text = groupTitle; textIcon = res.getDrawable(R.drawable.quantum_ic_label_vd_theme_24); -- GitLab From 6a5e8a7476f159ef0a60d4d872528dfb21972982 Mon Sep 17 00:00:00 2001 From: Sayantan Roychowdhury Date: Thu, 1 Jun 2023 15:52:52 +0530 Subject: [PATCH 20/20] check intent nullity --- src/com/android/contacts/activities/PeopleActivity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java index 4eec116bd9..413924a301 100644 --- a/src/com/android/contacts/activities/PeopleActivity.java +++ b/src/com/android/contacts/activities/PeopleActivity.java @@ -430,6 +430,9 @@ public class PeopleActivity extends AppCompatContactsActivity implements } private void openProvidedGroupFromContact(Intent intent) { + if (intent == null) { + return; + } final String action = intent.getAction(); if (Objects.equals(action, ACTION_OPEN_GROUP_FROM_CONTACT)) { long groupId = intent.getLongExtra(EXTRA_GROUP_ID, -1); -- GitLab