aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMakoto Onuki <omakoto@google.com>2023-05-18 11:34:26 -0700
committerMakoto Onuki <omakoto@google.com>2023-05-23 12:15:42 -0700
commit37ebcd9c8c07070203c3bbad8302124dbba7601c (patch)
tree68be0ee30de1b02b4769611b09a1df80921d4163
parent198236e095e42c3efe9e12e0253d9335f660a6ae (diff)
downloadContactsProvider-37ebcd9c8c07070203c3bbad8302124dbba7601c.tar.gz
Log GAL provider calls
Test: atest ContactsProviderTests CtsContactsProviderTestCases Bug: 161166785 Change-Id: I9e6b46ccd936bc31c1c5f55504a628944c8aecc7
-rw-r--r--src/com/android/providers/contacts/ContactsProvider2.java35
-rw-r--r--src/com/android/providers/contacts/util/LogFields.java14
-rw-r--r--src/com/android/providers/contacts/util/LogUtils.java4
-rw-r--r--tests/src/com/android/providers/contacts/ContactsMockPackageManager.java5
4 files changed, 52 insertions, 6 deletions
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index c38cc364..56162916 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -1373,6 +1373,7 @@ public class ContactsProvider2 extends AbstractContactsProvider
String authority;
String accountName;
String accountType;
+ String packageName;
}
/**
@@ -2366,7 +2367,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
.setUriType(sUriMatcher.match(uri))
.setCallerIsSyncAdapter(readBooleanQueryParameter(
uri, ContactsContract.CALLER_IS_SYNCADAPTER, false))
- .setStartNanos(SystemClock.elapsedRealtimeNanos());
+ .setStartNanos(SystemClock.elapsedRealtimeNanos())
+ .setUid(Binder.getCallingUid());
Uri resultUri = null;
try {
@@ -2405,7 +2407,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
.setUriType(sUriMatcher.match(uri))
.setCallerIsSyncAdapter(readBooleanQueryParameter(
uri, ContactsContract.CALLER_IS_SYNCADAPTER, false))
- .setStartNanos(SystemClock.elapsedRealtimeNanos());
+ .setStartNanos(SystemClock.elapsedRealtimeNanos())
+ .setUid(Binder.getCallingUid());
int updates = 0;
try {
@@ -2443,7 +2446,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
.setUriType(sUriMatcher.match(uri))
.setCallerIsSyncAdapter(readBooleanQueryParameter(
uri, ContactsContract.CALLER_IS_SYNCADAPTER, false))
- .setStartNanos(SystemClock.elapsedRealtimeNanos());
+ .setStartNanos(SystemClock.elapsedRealtimeNanos())
+ .setUid(Binder.getCallingUid());
int deletes = 0;
try {
@@ -5661,7 +5665,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
.setUriType(sUriMatcher.match(uri))
.setCallerIsSyncAdapter(readBooleanQueryParameter(
uri, ContactsContract.CALLER_IS_SYNCADAPTER, false))
- .setStartNanos(SystemClock.elapsedRealtimeNanos());
+ .setStartNanos(SystemClock.elapsedRealtimeNanos())
+ .setUid(Binder.getCallingUid());
Cursor cursor = null;
try {
@@ -5960,8 +5965,20 @@ public class ContactsProvider2 extends AbstractContactsProvider
if (projection == null) {
projection = getDefaultProjection(uri);
}
+ int galUid = -1;
+ try {
+ galUid = getContext().getPackageManager().getPackageUid(directoryInfo.packageName,
+ PackageManager.MATCH_ALL);
+ } catch (NameNotFoundException e) {
+ // Shouldn't happen, but just in case.
+ Log.w(TAG, "getPackageUid() failed", e);
+ }
+ final LogFields.Builder logBuilder = LogFields.Builder.aLogFields()
+ .setApiType(LogUtils.ApiType.GAL_CALL)
+ .setUriType(sUriMatcher.match(uri))
+ .setUid(galUid);
- Cursor cursor;
+ Cursor cursor = null;
try {
if (VERBOSE_LOGGING) {
Log.v(TAG, "Making directory query: uri=" + directoryUri +
@@ -5979,6 +5996,9 @@ public class ContactsProvider2 extends AbstractContactsProvider
} catch (RuntimeException e) {
Log.w(TAG, "Directory query failed", e);
return null;
+ } finally {
+ LogUtils.log(
+ logBuilder.setResultCount(cursor == null ? 0 : cursor.getCount()).build());
}
if (cursor.getCount() > 0) {
@@ -6132,7 +6152,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
Directory._ID,
Directory.DIRECTORY_AUTHORITY,
Directory.ACCOUNT_NAME,
- Directory.ACCOUNT_TYPE
+ Directory.ACCOUNT_TYPE,
+ Directory.PACKAGE_NAME
};
public static final int DIRECTORY_ID = 0;
@@ -6158,6 +6179,8 @@ public class ContactsProvider2 extends AbstractContactsProvider
info.authority = cursor.getString(DirectoryQuery.AUTHORITY);
info.accountName = cursor.getString(DirectoryQuery.ACCOUNT_NAME);
info.accountType = cursor.getString(DirectoryQuery.ACCOUNT_TYPE);
+ info.packageName =
+ cursor.getString(cursor.getColumnIndex(Directory.PACKAGE_NAME));
mDirectoryCache.put(id, info);
}
} finally {
diff --git a/src/com/android/providers/contacts/util/LogFields.java b/src/com/android/providers/contacts/util/LogFields.java
index fc05c847..1672d3db 100644
--- a/src/com/android/providers/contacts/util/LogFields.java
+++ b/src/com/android/providers/contacts/util/LogFields.java
@@ -37,6 +37,8 @@ public final class LogFields {
private int resultCount;
+ private int uid;
+
public LogFields(
int apiType, int uriType, int taskType, boolean callerIsSyncAdapter, long startNanos) {
this.apiType = apiType;
@@ -78,6 +80,10 @@ public final class LogFields {
return resultCount;
}
+ public int getUid() {
+ return uid;
+ }
+
public static final class Builder {
private int apiType;
private int uriType;
@@ -88,6 +94,8 @@ public final class LogFields {
private Uri resultUri;
private int resultCount;
+ private int uid;
+
private Builder() {
}
@@ -135,12 +143,18 @@ public final class LogFields {
return this;
}
+ public Builder setUid(int uid) {
+ this.uid = uid;
+ return this;
+ }
+
public LogFields build() {
LogFields logFields =
new LogFields(apiType, uriType, taskType, callerIsSyncAdapter, startNanos);
logFields.resultCount = this.resultCount;
logFields.exception = this.exception;
logFields.resultUri = this.resultUri;
+ logFields.uid = this.uid;
return logFields;
}
}
diff --git a/src/com/android/providers/contacts/util/LogUtils.java b/src/com/android/providers/contacts/util/LogUtils.java
index a2301006..41409645 100644
--- a/src/com/android/providers/contacts/util/LogUtils.java
+++ b/src/com/android/providers/contacts/util/LogUtils.java
@@ -37,6 +37,8 @@ public class LogUtils {
int INSERT = 2;
int UPDATE = 3;
int DELETE = 4;
+ int CALL = 5;
+ int GAL_CALL = 6;
}
// Keep in sync with ContactsProviderStatus#TaskType in
@@ -66,6 +68,8 @@ public class LogUtils {
.writeInt(logFields.getResultCount())
.writeLong(getLatencyMicros(logFields.getStartNanos()))
.writeInt(logFields.getTaskType())
+ .writeInt(0) // Not used yet.
+ .writeInt(logFields.getUid())
.usePooledBuffer()
.build());
}
diff --git a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java
index 6210229e..62f17eab 100644
--- a/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java
+++ b/tests/src/com/android/providers/contacts/ContactsMockPackageManager.java
@@ -156,4 +156,9 @@ public class ContactsMockPackageManager extends MockPackageManager {
UserHandle user) {
return new ArrayList<>();
}
+
+ @Override
+ public int getPackageUid(String packageName, int flags) throws NameNotFoundException {
+ return 123;
+ }
}