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