1d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu/* 2d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Copyright (C) 2013 The Android Open Source Project 3d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * 4d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Licensed under the Apache License, Version 2.0 (the "License"); 5d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * you may not use this file except in compliance with the License. 6d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * You may obtain a copy of the License at 7d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * 8d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * http://www.apache.org/licenses/LICENSE-2.0 9d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * 10d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * Unless required by applicable law or agreed to in writing, software 11d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * distributed under the License is distributed on an "AS IS" BASIS, 12d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * See the License for the specific language governing permissions and 14d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu * limitations under the License. 15d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu */ 16d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 17d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescupackage com.android.gallery3d.ingest.ui; 18d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 19d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.content.Context; 20d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.graphics.Bitmap; 21d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.graphics.Canvas; 22d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.graphics.Paint; 23d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.mtp.MtpDevice; 24d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.mtp.MtpObjectInfo; 25d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.util.AttributeSet; 26d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport android.widget.Checkable; 27d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 28d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescuimport com.android.gallery3d.R; 29c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescuimport com.android.gallery3d.ingest.data.MtpBitmapFetch; 30d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 31c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 32c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescupublic class MtpThumbnailTileView extends MtpImageView implements Checkable { 33d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 34d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu private Paint mForegroundPaint; 35d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu private boolean mIsChecked; 36c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu private Bitmap mBitmap; 37d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 38d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu private void init() { 39d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu mForegroundPaint = new Paint(); 40d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu mForegroundPaint.setColor(getResources().getColor(R.color.ingest_highlight_semitransparent)); 41d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 42d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 43d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public MtpThumbnailTileView(Context context) { 44d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu super(context); 45d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu init(); 46d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 47d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 48d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public MtpThumbnailTileView(Context context, AttributeSet attrs) { 49d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu super(context, attrs); 50d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu init(); 51d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 52d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 53d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public MtpThumbnailTileView(Context context, AttributeSet attrs, int defStyle) { 54d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu super(context, attrs, defStyle); 55d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu init(); 56d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 57d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 58d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 59d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 60d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu // Force this to be square 61d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu super.onMeasure(widthMeasureSpec, widthMeasureSpec); 62d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 63d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 64d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 65c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu protected Object fetchMtpImageDataFromDevice(MtpDevice device, MtpObjectInfo info) { 66c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu return MtpBitmapFetch.getThumbnail(device, info); 67c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu } 68c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 69c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu @Override 70c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu protected void onMtpImageDataFetchedFromDevice(Object result) { 71c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu mBitmap = (Bitmap)result; 72c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu setImageBitmap(mBitmap); 73c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu } 74c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu 75c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu @Override 76d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public void draw(Canvas canvas) { 77d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu super.draw(canvas); 78c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu if (isChecked()) { 79d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu canvas.drawRect(canvas.getClipBounds(), mForegroundPaint); 80d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 81d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 82d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 83d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 84d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public boolean isChecked() { 85d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu return mIsChecked; 86d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 87d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 88d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 89d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public void setChecked(boolean checked) { 90d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu mIsChecked = checked; 91d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 92d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 93d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu @Override 94d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu public void toggle() { 95d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu setChecked(!mIsChecked); 96d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 97d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu 98c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu @Override 99c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu protected void cancelLoadingAndClear() { 100c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu super.cancelLoadingAndClear(); 101c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu if (mBitmap != null) { 102c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu MtpBitmapFetch.recycleThumbnail(mBitmap); 103c8a9e86919dca8938948f97efc3dcbe143e806bfBobby Georgescu mBitmap = null; 104d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 105d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu } 106d3aac52ffb88ced53413d5eef29c641dd6982267Bobby Georgescu} 107