Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 74148092 authored by Wei Huang's avatar Wei Huang Committed by Android Git Automerger
Browse files

am 40ac84e6: Merge "Fix NPE while flipping through pictures." into ics-mr0

* commit '40ac84e6':
  Fix NPE while flipping through pictures.
parents f9c4464d 40ac84e6
Loading
Loading
Loading
Loading
+12 −10
Original line number Diff line number Diff line
@@ -16,6 +16,10 @@

package com.android.gallery3d.ui;

import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.RectF;

import com.android.gallery3d.app.GalleryContext;
import com.android.gallery3d.common.Utils;
import com.android.gallery3d.data.DecodeUtils;
@@ -24,10 +28,6 @@ import com.android.gallery3d.util.ThreadPool;
import com.android.gallery3d.util.ThreadPool.CancelListener;
import com.android.gallery3d.util.ThreadPool.JobContext;

import android.graphics.Bitmap;
import android.graphics.Rect;
import android.graphics.RectF;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
@@ -55,17 +55,20 @@ public class TileImageView extends GLView {
     *               --> RECYCLED - by recycleTile)
     *      DECODING --> RECYCLING - by recycleTile()
     *               --> DECODED  - by decodeTile()
     *               --> DECODE_FAIL - by decodeTile()
     *      RECYCLING --> RECYCLED - by decodeTile()
     *      DECODED --> ACTIVATED - (after the decoded bitmap is uploaded)
     *      DECODED --> RECYCLED - by recycleTile()
     *      DECODE_FAIL -> RECYCLED - by recycleTile()
     *      RECYCLED --> ACTIVATED - by obtainTile()
     */
    private static final int STATE_ACTIVATED = 0x01;
    private static final int STATE_IN_QUEUE = 0x02;
    private static final int STATE_DECODING = 0x04;
    private static final int STATE_DECODED = 0x08;
    private static final int STATE_RECYCLING = 0x10;
    private static final int STATE_RECYCLED = 0x20;
    private static final int STATE_DECODE_FAIL = 0x10;
    private static final int STATE_RECYCLING = 0x20;
    private static final int STATE_RECYCLED = 0x40;

    private Model mModel;
    protected BitmapTexture mBackupImage;
@@ -435,7 +438,7 @@ public class TileImageView extends GLView {
                mRecycledQueue.push(tile);
                return false;
            }
            tile.mTileState = STATE_DECODED;
            tile.mTileState = decodeComplete ? STATE_DECODED : STATE_DECODE_FAIL;
            return decodeComplete;
        }
    }
@@ -526,7 +529,7 @@ public class TileImageView extends GLView {
                    } else {
                        mRenderComplete = false;
                    }
                } else {
                } else if (tile.mTileState != STATE_DECODE_FAIL){
                    mRenderComplete = false;
                    queueForDecode(tile);
                }
@@ -603,11 +606,10 @@ public class TileImageView extends GLView {
            try {
                mDecodedTile = DecodeUtils.ensureGLCompatibleBitmap(mModel.getTile(
                        mTileLevel, mX - borderLength, mY - borderLength, tileLength));
                return mDecodedTile != null;
            } catch (Throwable t) {
                Log.w(TAG, "fail to decode tile", t);
                return false;
            }
            return mDecodedTile != null;
        }

        @Override
+10 −2
Original line number Diff line number Diff line
@@ -16,8 +16,6 @@

package com.android.gallery3d.ui;

import com.android.gallery3d.common.Utils;

import android.graphics.Bitmap;
import android.graphics.Bitmap.Config;
import android.graphics.BitmapFactory;
@@ -25,7 +23,10 @@ import android.graphics.BitmapRegionDecoder;
import android.graphics.Canvas;
import android.graphics.Rect;

import com.android.gallery3d.common.Utils;

public class TileImageViewAdapter implements TileImageView.Model {
    private static final String TAG = "TileImageViewAdapter";
    protected BitmapRegionDecoder mRegionDecoder;
    protected int mImageWidth;
    protected int mImageHeight;
@@ -80,6 +81,8 @@ public class TileImageViewAdapter implements TileImageView.Model {

    @Override
    public synchronized Bitmap getTile(int level, int x, int y, int length) {
        if (mRegionDecoder == null) return null;

        Rect region = mRegionRect;
        Rect intersectRect = mIntersectRect;
        region.set(x, y, x + (length << level), y + (length << level));
@@ -104,6 +107,11 @@ public class TileImageViewAdapter implements TileImageView.Model {
        // If so, we fill black pixels on it.
        if (intersectRect.equals(region)) return bitmap;

        if (bitmap == null) {
            Log.w(TAG, "fail in decoding region");
            return null;
        }

        Bitmap tile = Bitmap.createBitmap(length, length, Config.ARGB_8888);
        Canvas canvas = new Canvas(tile);
        canvas.drawBitmap(bitmap,