Merge commit 'bc21ba2410233b40b21a190b26285a791ac5cc58' * commit 'bc21ba2410233b40b21a190b26285a791ac5cc58': The touch screen is probably a feature.
This commit is contained in:
@ -41626,6 +41626,19 @@
|
|||||||
<parameter name="appInfo" type="android.content.pm.ApplicationInfo">
|
<parameter name="appInfo" type="android.content.pm.ApplicationInfo">
|
||||||
</parameter>
|
</parameter>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="hasSystemFeature"
|
||||||
|
return="boolean"
|
||||||
|
abstract="true"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="name" type="java.lang.String">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
<method name="isSafeMode"
|
<method name="isSafeMode"
|
||||||
return="boolean"
|
return="boolean"
|
||||||
abstract="true"
|
abstract="true"
|
||||||
@ -131377,6 +131390,19 @@
|
|||||||
<parameter name="appInfo" type="android.content.pm.ApplicationInfo">
|
<parameter name="appInfo" type="android.content.pm.ApplicationInfo">
|
||||||
</parameter>
|
</parameter>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="hasSystemFeature"
|
||||||
|
return="boolean"
|
||||||
|
abstract="false"
|
||||||
|
native="false"
|
||||||
|
synchronized="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
<parameter name="name" type="java.lang.String">
|
||||||
|
</parameter>
|
||||||
|
</method>
|
||||||
<method name="isSafeMode"
|
<method name="isSafeMode"
|
||||||
return="boolean"
|
return="boolean"
|
||||||
abstract="false"
|
abstract="false"
|
||||||
|
@ -18,6 +18,7 @@ package com.android.commands.pm;
|
|||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.pm.ApplicationInfo;
|
import android.content.pm.ApplicationInfo;
|
||||||
|
import android.content.pm.FeatureInfo;
|
||||||
import android.content.pm.IPackageDeleteObserver;
|
import android.content.pm.IPackageDeleteObserver;
|
||||||
import android.content.pm.IPackageInstallObserver;
|
import android.content.pm.IPackageInstallObserver;
|
||||||
import android.content.pm.IPackageManager;
|
import android.content.pm.IPackageManager;
|
||||||
@ -137,6 +138,7 @@ public final class Pm {
|
|||||||
* pm list [package | packages]
|
* pm list [package | packages]
|
||||||
* pm list permission-groups
|
* pm list permission-groups
|
||||||
* pm list permissions
|
* pm list permissions
|
||||||
|
* pm list features
|
||||||
* pm list instrumentation
|
* pm list instrumentation
|
||||||
*/
|
*/
|
||||||
private void runList() {
|
private void runList() {
|
||||||
@ -152,6 +154,8 @@ public final class Pm {
|
|||||||
runListPermissionGroups();
|
runListPermissionGroups();
|
||||||
} else if ("permissions".equals(type)) {
|
} else if ("permissions".equals(type)) {
|
||||||
runListPermissions();
|
runListPermissions();
|
||||||
|
} else if ("features".equals(type)) {
|
||||||
|
runListFeatures();
|
||||||
} else if ("instrumentation".equals(type)) {
|
} else if ("instrumentation".equals(type)) {
|
||||||
runListInstrumentation();
|
runListInstrumentation();
|
||||||
} else {
|
} else {
|
||||||
@ -204,6 +208,44 @@ public final class Pm {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists all of the features supported by the current device.
|
||||||
|
*
|
||||||
|
* pm list features
|
||||||
|
*/
|
||||||
|
private void runListFeatures() {
|
||||||
|
try {
|
||||||
|
List<FeatureInfo> list = new ArrayList<FeatureInfo>();
|
||||||
|
FeatureInfo[] rawList = mPm.getSystemAvailableFeatures();
|
||||||
|
for (int i=0; i<rawList.length; i++) {
|
||||||
|
list.add(rawList[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Sort by name
|
||||||
|
Collections.sort(list, new Comparator<FeatureInfo>() {
|
||||||
|
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
|
* Lists all of the installed instrumentation, or all for a given package
|
||||||
*
|
*
|
||||||
@ -778,6 +820,7 @@ public final class Pm {
|
|||||||
System.err.println(" pm list permission-groups");
|
System.err.println(" pm list permission-groups");
|
||||||
System.err.println(" pm list permissions [-g] [-f] [-d] [-u] [GROUP]");
|
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 instrumentation [-f] [TARGET-PACKAGE]");
|
||||||
|
System.err.println(" pm list features");
|
||||||
System.err.println(" pm path PACKAGE");
|
System.err.println(" pm path PACKAGE");
|
||||||
System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] PATH");
|
System.err.println(" pm install [-l] [-r] [-t] [-i INSTALLER_PACKAGE_NAME] PATH");
|
||||||
System.err.println(" pm uninstall [-k] PACKAGE");
|
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("or only those that target a specified package. Options:");
|
||||||
System.err.println(" -f: see their associated file.");
|
System.err.println(" -f: see their associated file.");
|
||||||
System.err.println("");
|
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("The path command prints the path to the .apk of a package.");
|
||||||
System.err.println("");
|
System.err.println("");
|
||||||
System.err.println("The install command installs a package to the system. Options:");
|
System.err.println("The install command installs a package to the system. Options:");
|
||||||
|
@ -1685,6 +1685,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
|
@Override
|
||||||
public int checkPermission(String permName, String pkgName) {
|
public int checkPermission(String permName, String pkgName) {
|
||||||
try {
|
try {
|
||||||
|
@ -283,6 +283,8 @@ interface IPackageManager {
|
|||||||
*/
|
*/
|
||||||
FeatureInfo[] getSystemAvailableFeatures();
|
FeatureInfo[] getSystemAvailableFeatures();
|
||||||
|
|
||||||
|
boolean hasSystemFeature(String name);
|
||||||
|
|
||||||
void enterSafeMode();
|
void enterSafeMode();
|
||||||
boolean isSafeMode();
|
boolean isSafeMode();
|
||||||
void systemReady();
|
void systemReady();
|
||||||
|
@ -995,10 +995,18 @@ public abstract class PackageManager {
|
|||||||
*
|
*
|
||||||
* @return An array of FeatureInfo classes describing the features
|
* @return An array of FeatureInfo classes describing the features
|
||||||
* that are available on the system, or null if there are none(!!).
|
* that are available on the system, or null if there are none(!!).
|
||||||
*
|
|
||||||
*/
|
*/
|
||||||
public abstract FeatureInfo[] getSystemAvailableFeatures();
|
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
|
* Determine the best action to perform for a given Intent. This is how
|
||||||
* {@link Intent#resolveActivity} finds an activity if a class has not
|
* {@link Intent#resolveActivity} finds an activity if a class has not
|
||||||
|
21
data/etc/android.hardware.touchscreen.multitouch.xml
Normal file
21
data/etc/android.hardware.touchscreen.multitouch.xml
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2009 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<!-- This is the standard set of features for a touchscreen that supports
|
||||||
|
multitouch. -->
|
||||||
|
<permissions>
|
||||||
|
<feature name="android.hardware.touchscreen.multitouch" />
|
||||||
|
</permissions>
|
@ -22,4 +22,5 @@
|
|||||||
<feature name="android.hardware.sensor.accelerometer" />
|
<feature name="android.hardware.sensor.accelerometer" />
|
||||||
<feature name="android.hardware.bluetooth" />
|
<feature name="android.hardware.bluetooth" />
|
||||||
<feature name="android.hardware.wifi" />
|
<feature name="android.hardware.wifi" />
|
||||||
|
<feature name="android.hardware.touchscreen" />
|
||||||
</permissions>
|
</permissions>
|
||||||
|
@ -1103,6 +1103,12 @@ class PackageManagerService extends IPackageManager.Stub {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasSystemFeature(String name) {
|
||||||
|
synchronized (mPackages) {
|
||||||
|
return mAvailableFeatures.containsKey(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public int checkPermission(String permName, String pkgName) {
|
public int checkPermission(String permName, String pkgName) {
|
||||||
synchronized (mPackages) {
|
synchronized (mPackages) {
|
||||||
PackageParser.Package p = mPackages.get(pkgName);
|
PackageParser.Package p = mPackages.get(pkgName);
|
||||||
|
@ -429,6 +429,11 @@ public class MockPackageManager extends PackageManager {
|
|||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasSystemFeature(String name) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean isSafeMode() {
|
public boolean isSafeMode() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
Reference in New Issue
Block a user