Merge "Add native bindings for getNamesForUids" into oc-mr1-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
8c18e1faf8
@@ -172,6 +172,7 @@ LOCAL_SRC_FILES += \
|
|||||||
core/java/android/content/pm/IPackageInstallerCallback.aidl \
|
core/java/android/content/pm/IPackageInstallerCallback.aidl \
|
||||||
core/java/android/content/pm/IPackageInstallerSession.aidl \
|
core/java/android/content/pm/IPackageInstallerSession.aidl \
|
||||||
core/java/android/content/pm/IPackageManager.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/IPackageMoveObserver.aidl \
|
||||||
core/java/android/content/pm/IPackageStatsObserver.aidl \
|
core/java/android/content/pm/IPackageStatsObserver.aidl \
|
||||||
core/java/android/content/pm/IPinItemRequest.aidl \
|
core/java/android/content/pm/IPinItemRequest.aidl \
|
||||||
|
|||||||
@@ -61,12 +61,6 @@ import android.content.IntentSender;
|
|||||||
* {@hide}
|
* {@hide}
|
||||||
*/
|
*/
|
||||||
interface IPackageManager {
|
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);
|
void checkPackageStartable(String packageName, int userId);
|
||||||
boolean isPackageAvailable(String packageName, int userId);
|
boolean isPackageAvailable(String packageName, int userId);
|
||||||
PackageInfo getPackageInfo(String packageName, int flags, int userId);
|
PackageInfo getPackageInfo(String packageName, int flags, int userId);
|
||||||
@@ -134,6 +128,7 @@ interface IPackageManager {
|
|||||||
String[] getPackagesForUid(int uid);
|
String[] getPackagesForUid(int uid);
|
||||||
|
|
||||||
String getNameForUid(int uid);
|
String getNameForUid(int uid);
|
||||||
|
String[] getNamesForUids(in int[] uids);
|
||||||
|
|
||||||
int getUidForSharedUser(String sharedUserName);
|
int getUidForSharedUser(String sharedUserName);
|
||||||
|
|
||||||
|
|||||||
@@ -143,6 +143,7 @@ import android.content.pm.IPackageDeleteObserver2;
|
|||||||
import android.content.pm.IPackageInstallObserver2;
|
import android.content.pm.IPackageInstallObserver2;
|
||||||
import android.content.pm.IPackageInstaller;
|
import android.content.pm.IPackageInstaller;
|
||||||
import android.content.pm.IPackageManager;
|
import android.content.pm.IPackageManager;
|
||||||
|
import android.content.pm.IPackageManagerNative;
|
||||||
import android.content.pm.IPackageMoveObserver;
|
import android.content.pm.IPackageMoveObserver;
|
||||||
import android.content.pm.IPackageStatsObserver;
|
import android.content.pm.IPackageStatsObserver;
|
||||||
import android.content.pm.InstantAppInfo;
|
import android.content.pm.InstantAppInfo;
|
||||||
@@ -2304,6 +2305,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
factoryTest, onlyCore);
|
factoryTest, onlyCore);
|
||||||
m.enableSystemUserPackages();
|
m.enableSystemUserPackages();
|
||||||
ServiceManager.addService("package", m);
|
ServiceManager.addService("package", m);
|
||||||
|
final PackageManagerNative pmn = m.new PackageManagerNative();
|
||||||
|
ServiceManager.addService("package_native", pmn);
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6409,7 +6412,18 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
synchronized (mPackages) {
|
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) {
|
synchronized (mPackages) {
|
||||||
for (int i = uids.length - 1; i >= 0; i--) {
|
for (int i = uids.length - 1; i >= 0; i--) {
|
||||||
final int uid = uids[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;
|
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
|
@Override
|
||||||
public int getUidForSharedUser(String sharedUserName) {
|
public int getUidForSharedUser(String sharedUserName) {
|
||||||
if (getInstantAppPackageName(Binder.getCallingUid()) != null) {
|
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 {
|
private class PackageManagerInternalImpl extends PackageManagerInternal {
|
||||||
@Override
|
@Override
|
||||||
public void setLocationPackagesProvider(PackagesProvider provider) {
|
public void setLocationPackagesProvider(PackagesProvider provider) {
|
||||||
|
|||||||
Reference in New Issue
Block a user