Skip to content

Commit 1e71461

Browse files
committed
Fixes #403 by adding proper api level checks for camera types on the device. Props shooh
1 parent e38f05b commit 1e71461

File tree

3 files changed

+38
-15
lines changed

3 files changed

+38
-15
lines changed

src/org/wordpress/android/ui/WPActionBarActivity.java

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151
import org.wordpress.android.ui.posts.PostsActivity;
5252
import org.wordpress.android.ui.prefs.PreferencesActivity;
5353
import org.wordpress.android.ui.reader.ReaderActivity;
54+
import org.wordpress.android.util.DeviceUtils;
5455
import org.wordpress.android.util.EscapeUtils;
5556

5657
/**
@@ -399,25 +400,18 @@ public void onItemClick(AdapterView<?> parent, View view, int position, long id)
399400
break;
400401
case QUICK_PHOTO_ACTIVITY:
401402
mShouldFinish = false;
402-
PackageManager pm = WPActionBarActivity.this.getPackageManager();
403403
intent = new Intent(WPActionBarActivity.this, EditPostActivity.class);
404-
if
405-
(pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
406-
intent.putExtra("quick-media", Constants.QUICK_POST_PHOTO_CAMERA);
407-
} else {
408-
intent.putExtra("quick-media", Constants.QUICK_POST_PHOTO_LIBRARY);
409-
}
404+
intent.putExtra("quick-media", DeviceUtils.getInstance().hasCamera(getApplicationContext())
405+
? Constants.QUICK_POST_PHOTO_CAMERA
406+
: Constants.QUICK_POST_PHOTO_LIBRARY);
410407
intent.putExtra("isNew", true);
411408
break;
412409
case QUICK_VIDEO_ACTIVITY:
413410
mShouldFinish = false;
414-
PackageManager vpm = WPActionBarActivity.this.getPackageManager();
415411
intent = new Intent(WPActionBarActivity.this, EditPostActivity.class);
416-
if (vpm.hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
417-
intent.putExtra("quick-media", Constants.QUICK_POST_VIDEO_CAMERA);
418-
} else {
419-
intent.putExtra("quick-media", Constants.QUICK_POST_VIDEO_LIBRARY);
420-
}
412+
intent.putExtra("quick-media", DeviceUtils.getInstance().hasCamera(getApplicationContext())
413+
? Constants.QUICK_POST_VIDEO_CAMERA
414+
: Constants.QUICK_POST_VIDEO_LIBRARY);
421415
intent.putExtra("isNew", true);
422416
break;
423417
case VIEW_SITE_ACTIVITY:

src/org/wordpress/android/ui/posts/EditPostActivity.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
import org.wordpress.android.models.MediaFile;
9494
import org.wordpress.android.models.Post;
9595
import org.wordpress.android.ui.accounts.NewAccountActivity;
96+
import org.wordpress.android.util.DeviceUtils;
9697
import org.wordpress.android.util.EscapeUtils;
9798
import org.wordpress.android.util.ImageHelper;
9899
import org.wordpress.android.util.LocationHelper;
@@ -509,11 +510,11 @@ public void onSaveInstanceState(Bundle savedInstanceState) {
509510
public void onCreateContextMenu(ContextMenu menu, View v,
510511
ContextMenu.ContextMenuInfo menuInfo) {
511512
menu.add(0, 0, 0, getResources().getText(R.string.select_photo));
512-
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
513+
if (DeviceUtils.getInstance().hasCamera(getApplicationContext())) {
513514
menu.add(0, 1, 0, getResources().getText(R.string.take_photo));
514515
}
515516
menu.add(0, 2, 0, getResources().getText(R.string.select_video));
516-
if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)) {
517+
if (DeviceUtils.getInstance().hasCamera(getApplicationContext())) {
517518
menu.add(0, 3, 0, getResources().getText(R.string.take_video));
518519
}
519520
}

src/org/wordpress/android/util/DeviceUtils.java

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
package org.wordpress.android.util;
22

3+
import android.content.Context;
4+
import android.content.pm.PackageManager;
5+
import android.os.Build;
6+
37
import org.wordpress.android.WordPress;
48

59
/**
@@ -70,4 +74,28 @@ private DeviceUtils() {
7074
public static String getBlackBerryUserAgent() {
7175
return "wp-blackberry/"+WordPress.versionName;
7276
}
77+
78+
/**
79+
* Checks camera availability recursively based on API level.
80+
*
81+
* TODO: change "android.hardware.camera.front" and "android.hardware.camera.any" to
82+
* {@link PackageManager#FEATURE_CAMERA_FRONT} and {@link PackageManager#FEATURE_CAMERA_ANY},
83+
* respectively, once they become accessible or minSdk version is incremented.
84+
*
85+
* @param context The context.
86+
* @return Whether camera is available.
87+
*/
88+
public boolean hasCamera(Context context) {
89+
final PackageManager pm = context.getPackageManager();
90+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) {
91+
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA);
92+
}
93+
94+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.JELLY_BEAN_MR1) {
95+
return pm.hasSystemFeature(PackageManager.FEATURE_CAMERA)
96+
|| pm.hasSystemFeature("android.hardware.camera.front");
97+
}
98+
99+
return pm.hasSystemFeature("android.hardware.camera.any");
100+
}
73101
}

0 commit comments

Comments
 (0)