Merge "Add native bindings for getNamesForUids" into oc-mr1-dev

This commit is contained in:
TreeHugger Robot
2017-08-08 15:58:41 +00:00
committed by Android (Google) Code Review
3 changed files with 45 additions and 23 deletions

View File

@@ -172,6 +172,7 @@ LOCAL_SRC_FILES += \
core/java/android/content/pm/IPackageInstallerCallback.aidl \
core/java/android/content/pm/IPackageInstallerSession.aidl \
core/java/android/content/pm/IPackageManager.aidl \
../native/libs/binder/aidl/android/content/pm/IPackageManagerNative.aidl \
core/java/android/content/pm/IPackageMoveObserver.aidl \
core/java/android/content/pm/IPackageStatsObserver.aidl \
core/java/android/content/pm/IPinItemRequest.aidl \

View File

@@ -61,12 +61,6 @@ import android.content.IntentSender;
* {@hide}
*/
interface IPackageManager {
// Since these transactions are also called from native code, these must be kept in sync with
// the ones in frameworks/native/include/binder/IPackageManager.h
// =============== Beginning of transactions used on native side as well ======================
String[] getNamesForUids(in int[] uids);
// =============== End of transactions used on native side as well ============================
void checkPackageStartable(String packageName, int userId);
boolean isPackageAvailable(String packageName, int userId);
PackageInfo getPackageInfo(String packageName, int flags, int userId);
@@ -134,6 +128,7 @@ interface IPackageManager {
String[] getPackagesForUid(int uid);
String getNameForUid(int uid);
String[] getNamesForUids(in int[] uids);
int getUidForSharedUser(String sharedUserName);

View File

@@ -143,6 +143,7 @@ import android.content.pm.IPackageDeleteObserver2;
import android.content.pm.IPackageInstallObserver2;
import android.content.pm.IPackageInstaller;
import android.content.pm.IPackageManager;
import android.content.pm.IPackageManagerNative;
import android.content.pm.IPackageMoveObserver;
import android.content.pm.IPackageStatsObserver;
import android.content.pm.InstantAppInfo;
@@ -2304,6 +2305,8 @@ public class PackageManagerService extends IPackageManager.Stub
factoryTest, onlyCore);
m.enableSystemUserPackages();
ServiceManager.addService("package", m);
final PackageManagerNative pmn = m.new PackageManagerNative();
ServiceManager.addService("package_native", pmn);
return m;
}
@@ -6409,7 +6412,18 @@ public class PackageManagerService extends IPackageManager.Stub
return null;
}
synchronized (mPackages) {
return getNameForUidLocked(callingUid, uid);
Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid));
if (obj instanceof SharedUserSetting) {
final SharedUserSetting sus = (SharedUserSetting) obj;
return sus.name + ":" + sus.userId;
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) {
return null;
}
return ps.name;
}
return null;
}
}
@@ -6426,27 +6440,25 @@ public class PackageManagerService extends IPackageManager.Stub
synchronized (mPackages) {
for (int i = uids.length - 1; i >= 0; i--) {
final int uid = uids[i];
names[i] = getNameForUidLocked(callingUid, uid);
Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid));
if (obj instanceof SharedUserSetting) {
final SharedUserSetting sus = (SharedUserSetting) obj;
names[i] = "shared:" + sus.name;
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) {
names[i] = null;
} else {
names[i] = ps.name;
}
} else {
names[i] = null;
}
}
}
return names;
}
private String getNameForUidLocked(int callingUid, int uid) {
Object obj = mSettings.getUserIdLPr(UserHandle.getAppId(uid));
if (obj instanceof SharedUserSetting) {
final SharedUserSetting sus = (SharedUserSetting) obj;
return sus.name + ":" + sus.userId;
} else if (obj instanceof PackageSetting) {
final PackageSetting ps = (PackageSetting) obj;
if (filterAppAccessLPr(ps, callingUid, UserHandle.getUserId(callingUid))) {
return null;
}
return ps.name;
}
return null;
}
@Override
public int getUidForSharedUser(String sharedUserName) {
if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
@@ -24789,6 +24801,20 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
}
}
private class PackageManagerNative extends IPackageManagerNative.Stub {
@Override
public String[] getNamesForUids(int[] uids) throws RemoteException {
final String[] results = PackageManagerService.this.getNamesForUids(uids);
// massage results so they can be parsed by the native binder
for (int i = results.length - 1; i >= 0; --i) {
if (results[i] == null) {
results[i] = "";
}
}
return results;
}
}
private class PackageManagerInternalImpl extends PackageManagerInternal {
@Override
public void setLocationPackagesProvider(PackagesProvider provider) {