From 039c68e75606e837cf021815a0210836724574ad Mon Sep 17 00:00:00 2001 From: Dianne Hackborn Date: Sat, 26 Sep 2009 16:39:23 -0700 Subject: The touch screen is probably a feature. Also extend the feature APIs a bit. Change-Id: I99e932d7f4e61edb0e20f75c55e9831e4b59a14d --- api/current.xml | 26 +++++++++++++ cmds/pm/src/com/android/commands/pm/Pm.java | 45 ++++++++++++++++++++++ core/java/android/app/ApplicationContext.java | 9 +++++ core/java/android/content/pm/IPackageManager.aidl | 2 + core/java/android/content/pm/PackageManager.java | 10 ++++- .../android.hardware.touchscreen.multitouch.xml | 21 ++++++++++ data/etc/required_hardware.xml | 1 + .../com/android/server/PackageManagerService.java | 6 +++ .../android/test/mock/MockPackageManager.java | 5 +++ 9 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 data/etc/android.hardware.touchscreen.multitouch.xml diff --git a/api/current.xml b/api/current.xml index a331c64..b430e2c 100644 --- a/api/current.xml +++ b/api/current.xml @@ -41626,6 +41626,19 @@ + + + + + + + + list = new ArrayList(); + FeatureInfo[] rawList = mPm.getSystemAvailableFeatures(); + for (int i=0; i() { + public int compare(FeatureInfo o1, FeatureInfo o2) { + if (o1.name == o2.name) return 0; + if (o1.name == null) return -1; + if (o2.name == null) return 1; + return o1.name.compareTo(o2.name); + } + }); + + int count = (list != null) ? list.size() : 0; + for (int p = 0; p < count; p++) { + FeatureInfo fi = list.get(p); + System.out.print("feature:"); + if (fi.name != null) System.out.println(fi.name); + else System.out.println("reqGlEsVersion=0x" + + Integer.toHexString(fi.reqGlEsVersion)); + } + } catch (RemoteException e) { + System.err.println(e.toString()); + System.err.println(PM_NOT_RUNNING_ERR); + } + } + + /** * Lists all of the installed instrumentation, or all for a given package * * pm list instrumentation [package] [-f] @@ -778,6 +820,7 @@ public final class Pm { System.err.println(" pm list permission-groups"); System.err.println(" pm list permissions [-g] [-f] [-d] [-u] [GROUP]"); System.err.println(" pm list instrumentation [-f] [TARGET-PACKAGE]"); + System.err.println(" pm list features"); System.err.println(" pm path PACKAGE"); System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] PATH"); System.err.println(" pm uninstall [-k] PACKAGE"); @@ -802,6 +845,8 @@ public final class Pm { System.err.println("or only those that target a specified package. Options:"); System.err.println(" -f: see their associated file."); System.err.println(""); + System.err.println("The list features command prints all features of the system."); + System.err.println(""); System.err.println("The path command prints the path to the .apk of a package."); System.err.println(""); System.err.println("The install command installs a package to the system. Options:"); diff --git a/core/java/android/app/ApplicationContext.java b/core/java/android/app/ApplicationContext.java index 8896015..0582e34 100644 --- a/core/java/android/app/ApplicationContext.java +++ b/core/java/android/app/ApplicationContext.java @@ -1686,6 +1686,15 @@ class ApplicationContext extends Context { } @Override + public boolean hasSystemFeature(String name) { + try { + return mPM.hasSystemFeature(name); + } catch (RemoteException e) { + throw new RuntimeException("Package manager has died", e); + } + } + + @Override public int checkPermission(String permName, String pkgName) { try { return mPM.checkPermission(permName, pkgName); diff --git a/core/java/android/content/pm/IPackageManager.aidl b/core/java/android/content/pm/IPackageManager.aidl index c322951..fc6538f 100644 --- a/core/java/android/content/pm/IPackageManager.aidl +++ b/core/java/android/content/pm/IPackageManager.aidl @@ -283,6 +283,8 @@ interface IPackageManager { */ FeatureInfo[] getSystemAvailableFeatures(); + boolean hasSystemFeature(String name); + void enterSafeMode(); boolean isSafeMode(); void systemReady(); diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 825eb85..cd48dcb 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -995,11 +995,19 @@ public abstract class PackageManager { * * @return An array of FeatureInfo classes describing the features * that are available on the system, or null if there are none(!!). - * */ public abstract FeatureInfo[] getSystemAvailableFeatures(); /** + * Check whether the given feature name is one of the available + * features as returned by {@link #getSystemAvailableFeatures()}. + * + * @return Returns true if the devices supports the feature, else + * false. + */ + public abstract boolean hasSystemFeature(String name); + + /** * Determine the best action to perform for a given Intent. This is how * {@link Intent#resolveActivity} finds an activity if a class has not * been explicitly specified. diff --git a/data/etc/android.hardware.touchscreen.multitouch.xml b/data/etc/android.hardware.touchscreen.multitouch.xml new file mode 100644 index 0000000..3d2399a --- /dev/null +++ b/data/etc/android.hardware.touchscreen.multitouch.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/data/etc/required_hardware.xml b/data/etc/required_hardware.xml index 896a148..05e7f8a 100644 --- a/data/etc/required_hardware.xml +++ b/data/etc/required_hardware.xml @@ -22,4 +22,5 @@ + diff --git a/services/java/com/android/server/PackageManagerService.java b/services/java/com/android/server/PackageManagerService.java index 323a11f..867f215 100644 --- a/services/java/com/android/server/PackageManagerService.java +++ b/services/java/com/android/server/PackageManagerService.java @@ -1103,6 +1103,12 @@ class PackageManagerService extends IPackageManager.Stub { return null; } + public boolean hasSystemFeature(String name) { + synchronized (mPackages) { + return mAvailableFeatures.containsKey(name); + } + } + public int checkPermission(String permName, String pkgName) { synchronized (mPackages) { PackageParser.Package p = mPackages.get(pkgName); diff --git a/test-runner/android/test/mock/MockPackageManager.java b/test-runner/android/test/mock/MockPackageManager.java index beb9044..2f313af 100644 --- a/test-runner/android/test/mock/MockPackageManager.java +++ b/test-runner/android/test/mock/MockPackageManager.java @@ -430,6 +430,11 @@ public class MockPackageManager extends PackageManager { } @Override + public boolean hasSystemFeature(String name) { + throw new UnsupportedOperationException(); + } + + @Override public boolean isSafeMode() { throw new UnsupportedOperationException(); } -- cgit v1.1