OSDN Git Service

Only use SurfaceTexture.release and setIconAttribute on newer platforms.
authorChih-Chung Chang <chihchung@google.com>
Fri, 13 Jul 2012 06:57:26 +0000 (14:57 +0800)
committerAndroid (Google) Code Review <android-gerrit@google.com>
Fri, 13 Jul 2012 08:01:50 +0000 (01:01 -0700)
Bug: 6706784

Change-Id: Ic1bb2bb27c3184d791de566d88dbade039fb9d87

gallerycommon/src/com/android/gallery3d/common/ApiHelper.java
src/com/android/gallery3d/app/AbstractGalleryActivity.java
src/com/android/gallery3d/ui/SurfaceTextureScreenNail.java

index 753cacd..620e1ae 100644 (file)
@@ -61,6 +61,9 @@ public class ApiHelper {
             "android.graphics.SurfaceTexture", "setDefaultBufferSize",
             int.class, int.class);
 
+    public static final boolean HAS_RELEASE_SURFACE_TEXTURE = hasMethod(
+            "android.graphics.SurfaceTexture", "release");
+
     public static final boolean HAS_MTP =
             Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1;
 
@@ -102,6 +105,9 @@ public class ApiHelper {
         }
     }
 
+    public static final boolean HAS_SET_ICON_ATTRIBUTE =
+            Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB;
+
     private static boolean hasField(Class<?> klass, String fieldName) {
         try {
             klass.getDeclaredField(fieldName);
index 24d5dbc..6b0b106 100644 (file)
@@ -171,17 +171,27 @@ public class AbstractGalleryActivity extends Activity implements GalleryActivity
                     dialog.cancel();
                 }
             };
-            mAlertDialog = new AlertDialog.Builder(this)
-                    .setIconAttribute(android.R.attr.alertDialogIcon)
+            AlertDialog.Builder builder = new AlertDialog.Builder(this)
                     .setTitle(R.string.no_external_storage_title)
                     .setMessage(R.string.no_external_storage)
                     .setNegativeButton(android.R.string.cancel, onClick)
-                    .setOnCancelListener(onCancel)
-                    .show();
+                    .setOnCancelListener(onCancel);
+            if (ApiHelper.HAS_SET_ICON_ATTRIBUTE) {
+                setAlertDialogIconAttribute(builder);
+            } else {
+                builder.setIcon(android.R.drawable.ic_dialog_alert);
+            }
+            mAlertDialog = builder.show();
             registerReceiver(mMountReceiver, mMountFilter);
         }
     }
 
+    @TargetApi(ApiHelper.VERSION_CODES.HONEYCOMB)
+    private static void setAlertDialogIconAttribute(
+            AlertDialog.Builder builder) {
+        builder.setIconAttribute(android.R.attr.alertDialogIcon);
+    }
+
     @Override
     protected void onStop() {
         super.onStop();
index a04313b..dd9b7ce 100644 (file)
@@ -57,6 +57,13 @@ public abstract class SurfaceTextureScreenNail implements ScreenNail,
         }
     }
 
+    @TargetApi(ApiHelper.VERSION_CODES.ICE_CREAM_SANDWICH)
+    private static void releaseSurfaceTexture(SurfaceTexture st) {
+        if (ApiHelper.HAS_RELEASE_SURFACE_TEXTURE) {
+            st.release();
+        }
+    }
+
     public SurfaceTexture getSurfaceTexture() {
         return mSurfaceTexture;
     }
@@ -67,7 +74,7 @@ public abstract class SurfaceTextureScreenNail implements ScreenNail,
         }
         mExtTexture.recycle();
         mExtTexture = null;
-        mSurfaceTexture.release();
+        releaseSurfaceTexture(mSurfaceTexture);
         mSurfaceTexture = null;
     }