Restoring the data restriction based on calling package
Bug: 3230263
Change-Id: If035dbc1a061d94b84e750c988a4e086d22e60eb
diff --git a/src/com/android/contacts/list/ContactEntryListAdapter.java b/src/com/android/contacts/list/ContactEntryListAdapter.java
index d0d0a91..e61e00c 100644
--- a/src/com/android/contacts/list/ContactEntryListAdapter.java
+++ b/src/com/android/contacts/list/ContactEntryListAdapter.java
@@ -19,10 +19,13 @@
import com.android.contacts.widget.IndexerListAdapter;
import com.android.contacts.widget.TextWithHighlightingFactory;
+import android.app.Activity;
import android.content.Context;
import android.content.CursorLoader;
import android.database.Cursor;
+import android.net.Uri;
import android.os.Bundle;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.ContactCounts;
import android.provider.ContactsContract.Directory;
import android.text.TextUtils;
@@ -54,6 +57,7 @@
private int mDisplayOrder;
private int mSortOrder;
private boolean mNameHighlightingEnabled;
+ private boolean mDataRestrictedByCallingPackage;
private boolean mDisplayPhotos;
private boolean mQuickContactEnabled;
@@ -261,6 +265,43 @@
mQuickContactEnabled = quickContactEnabled;
}
+ public boolean isDataRestrictedByCallingPackage() {
+ return mDataRestrictedByCallingPackage;
+ }
+
+ public void setDataRestrictedByCallingPackage(boolean flag) {
+ mDataRestrictedByCallingPackage = flag;
+ }
+
+ /**
+ * Adds a parameter to the URI that ensures that only unrestricted data
+ * is included in the list, if {@link #isDataRestrictedByCallingPackage()} is true.
+ */
+ protected Uri applyDataRestriction(Uri uri) {
+ if (!mDataRestrictedByCallingPackage) {
+ return uri;
+ }
+
+ return applyDataRestriction(uri.buildUpon()).build();
+ }
+
+ /**
+ * See {@link #applyDataRestriction(Uri)}.
+ */
+ protected Uri.Builder applyDataRestriction(Uri.Builder builder) {
+ if (!mDataRestrictedByCallingPackage) {
+ return builder;
+ }
+
+ String callingPackage = ((Activity)getContext()).getCallingPackage();
+ if (!TextUtils.isEmpty(callingPackage)) {
+ return builder.appendQueryParameter(
+ ContactsContract.REQUESTING_PACKAGE_PARAM_KEY, callingPackage);
+ }
+
+ return builder;
+ }
+
public void configureDirectoryLoader(DirectoryListLoader loader) {
loader.setDirectorySearchMode(mDirectorySearchMode);
loader.setLocalInvisibleDirectoryEnabled(LOCAL_INVISIBLE_DIRECTORY_ENABLED);
diff --git a/src/com/android/contacts/list/ContactEntryListFragment.java b/src/com/android/contacts/list/ContactEntryListFragment.java
index c2f5871..872a9c2 100644
--- a/src/com/android/contacts/list/ContactEntryListFragment.java
+++ b/src/com/android/contacts/list/ContactEntryListFragment.java
@@ -923,14 +923,6 @@
throw new UnsupportedOperationException("Picker result handler is not implemented.");
}
- // TODO integrate into picker fragments
-// protected Uri buildCallingPackageUri(Uri uri) {
-// String callingPackage = getContext().getCallingPackage();
-// if (!TextUtils.isEmpty(callingPackage)) {
-// uri = uri.buildUpon().appendQueryParameter(
-// ContactsContract.REQUESTING_PACKAGE_PARAM_KEY, callingPackage).build();
-// }
-// }
private ContactsPreferences.ChangeListener mPreferencesChangeListener =
new ContactsPreferences.ChangeListener() {
@Override
diff --git a/src/com/android/contacts/list/ContactPickerFragment.java b/src/com/android/contacts/list/ContactPickerFragment.java
index a0c29e1..bce4355 100644
--- a/src/com/android/contacts/list/ContactPickerFragment.java
+++ b/src/com/android/contacts/list/ContactPickerFragment.java
@@ -170,6 +170,7 @@
super.configureAdapter();
ContactEntryListAdapter adapter = getAdapter();
+ adapter.setDataRestrictedByCallingPackage(true);
// If "Create new contact" is shown, don't display the empty list UI
adapter.setEmptyListEnabled(!isCreateContactEnabled());
diff --git a/src/com/android/contacts/list/DefaultContactListAdapter.java b/src/com/android/contacts/list/DefaultContactListAdapter.java
index d74ffd3..7e79b70 100644
--- a/src/com/android/contacts/list/DefaultContactListAdapter.java
+++ b/src/com/android/contacts/list/DefaultContactListAdapter.java
@@ -64,6 +64,7 @@
builder.appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY,
String.valueOf(getDirectoryResultLimit()));
}
+ applyDataRestriction(builder);
loader.setUri(builder.build());
loader.setProjection(FILTER_PROJECTION);
} else {
@@ -110,6 +111,8 @@
ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(Directory.DEFAULT))
.build();
}
+ uri = applyDataRestriction(uri);
+
loader.setUri(uri);
}
diff --git a/src/com/android/contacts/list/PhoneNumberListAdapter.java b/src/com/android/contacts/list/PhoneNumberListAdapter.java
index f08637b..2677628 100644
--- a/src/com/android/contacts/list/PhoneNumberListAdapter.java
+++ b/src/com/android/contacts/list/PhoneNumberListAdapter.java
@@ -86,6 +86,7 @@
builder.appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY,
String.valueOf(directoryId));
+ applyDataRestriction(builder);
uri = builder.build();
// TODO a projection that includes the search snippet
loader.setProjection(PHONES_PROJECTION);
@@ -96,6 +97,7 @@
if (isSectionHeaderDisplayEnabled()) {
uri = buildSectionIndexerUri(uri);
}
+ uri = applyDataRestriction(uri);
loader.setProjection(PHONES_PROJECTION);
}
diff --git a/src/com/android/contacts/list/PostalAddressListAdapter.java b/src/com/android/contacts/list/PostalAddressListAdapter.java
index 797089c..9248ba2 100644
--- a/src/com/android/contacts/list/PostalAddressListAdapter.java
+++ b/src/com/android/contacts/list/PostalAddressListAdapter.java
@@ -62,7 +62,9 @@
@Override
public void configureLoader(CursorLoader loader, long directoryId) {
- loader.setUri(buildSectionIndexerUri(StructuredPostal.CONTENT_URI));
+ Uri uri = buildSectionIndexerUri(StructuredPostal.CONTENT_URI);
+ uri = applyDataRestriction(uri);
+ loader.setUri(uri);
loader.setProjection(POSTALS_PROJECTION);
if (getSortOrder() == ContactsContract.Preferences.SORT_ORDER_PRIMARY) {