Consider camera available only if intent resolves to an activity.
Fixes crash for restricted profiles without a camera.
Bug: 11289596
Change-Id: I3545dbeae2e4c9094746b51b770daa93e3896bb6
diff --git a/src/com/android/gallery3d/util/GalleryUtils.java b/src/com/android/gallery3d/util/GalleryUtils.java
index 9a78fcd..d1f8229 100644
--- a/src/com/android/gallery3d/util/GalleryUtils.java
+++ b/src/com/android/gallery3d/util/GalleryUtils.java
@@ -43,6 +43,7 @@
import com.android.gallery3d.data.DataManager;
import com.android.gallery3d.data.MediaItem;
import com.android.gallery3d.ui.TiledScreenNail;
+import com.android.gallery3d.util.IntentHelper;
import com.android.gallery3d.util.ThreadPool.CancelListener;
import com.android.gallery3d.util.ThreadPool.JobContext;
@@ -235,12 +236,10 @@
public static boolean isCameraAvailable(Context context) {
if (sCameraAvailableInitialized) return sCameraAvailable;
PackageManager pm = context.getPackageManager();
- ComponentName name = new ComponentName(context, CAMERA_LAUNCHER_NAME);
- int state = pm.getComponentEnabledSetting(name);
+ Intent cameraIntent = IntentHelper.getCameraIntent(context);
+ List<ResolveInfo> apps = pm.queryIntentActivities(cameraIntent, 0);
sCameraAvailableInitialized = true;
- sCameraAvailable =
- (state == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT)
- || (state == PackageManager.COMPONENT_ENABLED_STATE_ENABLED);
+ sCameraAvailable = !apps.isEmpty();
return sCameraAvailable;
}
diff --git a/src_pd/com/android/gallery3d/util/IntentHelper.java b/src_pd/com/android/gallery3d/util/IntentHelper.java
index 13f69eb..8aebfc1 100644
--- a/src_pd/com/android/gallery3d/util/IntentHelper.java
+++ b/src_pd/com/android/gallery3d/util/IntentHelper.java
@@ -22,7 +22,7 @@
public static Intent getCameraIntent(Context context) {
return new Intent(Intent.ACTION_MAIN)
- .setClassName("com.android.camera2", "com.android.camera.CameraActivity");
+ .setClassName("com.android.camera2", "com.android.camera.CameraLauncher");
}
public static Intent getGalleryIntent(Context context) {