Merge "Remove VR package disable logic." into nyc-mr1-dev
This commit is contained in:
@@ -403,107 +403,6 @@ public class VrManagerService extends SystemService implements EnabledComponentC
|
|||||||
|
|
||||||
publishLocalService(VrManagerInternal.class, new LocalService());
|
publishLocalService(VrManagerInternal.class, new LocalService());
|
||||||
publishBinderService(VR_MANAGER_BINDER_SERVICE, mVrManager.asBinder());
|
publishBinderService(VR_MANAGER_BINDER_SERVICE, mVrManager.asBinder());
|
||||||
|
|
||||||
// If there are no VR packages installed on the device, then disable VR
|
|
||||||
// components, otherwise, enable them.
|
|
||||||
setEnabledStatusOfVrComponents();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setEnabledStatusOfVrComponents() {
|
|
||||||
ArraySet<ComponentName> vrComponents = SystemConfig.getInstance().getDefaultVrComponents();
|
|
||||||
if (vrComponents == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// We only want to enable VR components if there is a VR package installed on the device.
|
|
||||||
// The VR components themselves do not quality as a VR package, so exclude them.
|
|
||||||
ArraySet<String> vrComponentPackageNames = new ArraySet<>();
|
|
||||||
for (ComponentName componentName : vrComponents) {
|
|
||||||
vrComponentPackageNames.add(componentName.getPackageName());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check to see if there are any packages on the device, other than the VR component
|
|
||||||
// packages.
|
|
||||||
PackageManager pm = mContext.getPackageManager();
|
|
||||||
List<PackageInfo> packageInfos = pm.getInstalledPackages(
|
|
||||||
PackageManager.GET_CONFIGURATIONS);
|
|
||||||
boolean vrModeIsUsed = false;
|
|
||||||
for (PackageInfo packageInfo : packageInfos) {
|
|
||||||
if (packageInfo != null && packageInfo.packageName != null &&
|
|
||||||
pm.getApplicationEnabledSetting(packageInfo.packageName) ==
|
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DEFAULT) {
|
|
||||||
vrModeIsUsed = enableVrComponentsIfVrModeUsed(pm, packageInfo,
|
|
||||||
vrComponentPackageNames, vrComponents);
|
|
||||||
if (vrModeIsUsed) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!vrModeIsUsed) {
|
|
||||||
Slog.i(TAG, "No VR packages found, disabling VR components");
|
|
||||||
setVrComponentsEnabledOrDisabled(vrComponents, false);
|
|
||||||
|
|
||||||
// Register to receive an intent when a new package is installed, in case that package
|
|
||||||
// requires VR components.
|
|
||||||
IntentFilter intentFilter = new IntentFilter();
|
|
||||||
intentFilter.addAction(Intent.ACTION_PACKAGE_ADDED);
|
|
||||||
intentFilter.addDataScheme("package");
|
|
||||||
mContext.registerReceiver(new BroadcastReceiver() {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
PackageManager pm = context.getPackageManager();
|
|
||||||
final String packageName = intent.getData().getSchemeSpecificPart();
|
|
||||||
if (packageName != null) {
|
|
||||||
try {
|
|
||||||
PackageInfo packageInfo = pm.getPackageInfo(packageName,
|
|
||||||
PackageManager.GET_CONFIGURATIONS);
|
|
||||||
enableVrComponentsIfVrModeUsed(pm, packageInfo,
|
|
||||||
vrComponentPackageNames, vrComponents);
|
|
||||||
} catch (NameNotFoundException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}, intentFilter);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setVrComponentsEnabledOrDisabled(ArraySet<ComponentName> vrComponents,
|
|
||||||
boolean enabled) {
|
|
||||||
int state = enabled ?
|
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
|
|
||||||
PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
|
|
||||||
PackageManager pm = mContext.getPackageManager();
|
|
||||||
for (ComponentName componentName : vrComponents) {
|
|
||||||
try {
|
|
||||||
// Note that we must first check for the existance of the package before trying
|
|
||||||
// to set its enabled state. This is to prevent PackageManager from throwing
|
|
||||||
// an excepton if the package is not found (not just a NameNotFoundException
|
|
||||||
// exception).
|
|
||||||
PackageInfo packageInfo = pm.getPackageInfo(componentName.getPackageName(),
|
|
||||||
PackageManager.GET_CONFIGURATIONS);
|
|
||||||
pm.setApplicationEnabledSetting(componentName.getPackageName(), state , 0);
|
|
||||||
} catch (NameNotFoundException e) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean enableVrComponentsIfVrModeUsed(PackageManager pm, PackageInfo packageInfo,
|
|
||||||
ArraySet<String> vrComponentPackageNames, ArraySet<ComponentName> vrComponents) {
|
|
||||||
boolean isVrComponent = vrComponents != null &&
|
|
||||||
vrComponentPackageNames.contains(packageInfo.packageName);
|
|
||||||
if (packageInfo != null && packageInfo.reqFeatures != null && !isVrComponent) {
|
|
||||||
for (FeatureInfo featureInfo : packageInfo.reqFeatures) {
|
|
||||||
if (featureInfo.name != null &&
|
|
||||||
(featureInfo.name.equals(PackageManager.FEATURE_VR_MODE) ||
|
|
||||||
featureInfo.name.equals(PackageManager.FEATURE_VR_MODE_HIGH_PERFORMANCE))) {
|
|
||||||
Slog.i(TAG, "VR package found, enabling VR components");
|
|
||||||
setVrComponentsEnabledOrDisabled(vrComponents, true);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user