1666ea1b28a76aeba74744148b15099254d918671Owen Lin/*
2666ea1b28a76aeba74744148b15099254d918671Owen Lin * Copyright (C) 2009 The Android Open Source Project
3666ea1b28a76aeba74744148b15099254d918671Owen Lin *
4666ea1b28a76aeba74744148b15099254d918671Owen Lin * Licensed under the Apache License, Version 2.0 (the "License");
5666ea1b28a76aeba74744148b15099254d918671Owen Lin * you may not use this file except in compliance with the License.
6666ea1b28a76aeba74744148b15099254d918671Owen Lin * You may obtain a copy of the License at
7666ea1b28a76aeba74744148b15099254d918671Owen Lin *
8666ea1b28a76aeba74744148b15099254d918671Owen Lin *      http://www.apache.org/licenses/LICENSE-2.0
9666ea1b28a76aeba74744148b15099254d918671Owen Lin *
10666ea1b28a76aeba74744148b15099254d918671Owen Lin * Unless required by applicable law or agreed to in writing, software
11666ea1b28a76aeba74744148b15099254d918671Owen Lin * distributed under the License is distributed on an "AS IS" BASIS,
12666ea1b28a76aeba74744148b15099254d918671Owen Lin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13666ea1b28a76aeba74744148b15099254d918671Owen Lin * See the License for the specific language governing permissions and
14666ea1b28a76aeba74744148b15099254d918671Owen Lin * limitations under the License.
15666ea1b28a76aeba74744148b15099254d918671Owen Lin */
16666ea1b28a76aeba74744148b15099254d918671Owen Lin
17666ea1b28a76aeba74744148b15099254d918671Owen Linpackage com.android.camera.gallery;
18666ea1b28a76aeba74744148b15099254d918671Owen Lin
19666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.content.ContentResolver;
20666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.database.Cursor;
21666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.graphics.Bitmap;
22666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.net.Uri;
23666ea1b28a76aeba74744148b15099254d918671Owen Linimport android.provider.DrmStore;
24666ea1b28a76aeba74744148b15099254d918671Owen Lin
25666ea1b28a76aeba74744148b15099254d918671Owen Lin/**
26666ea1b28a76aeba74744148b15099254d918671Owen Lin * Represents an ordered collection of Image objects from the DRM provider.
27666ea1b28a76aeba74744148b15099254d918671Owen Lin */
28666ea1b28a76aeba74744148b15099254d918671Owen Linpublic class DrmImageList extends ImageList implements IImageList {
29666ea1b28a76aeba74744148b15099254d918671Owen Lin
30666ea1b28a76aeba74744148b15099254d918671Owen Lin    // TODO: get other field from database too ?
31666ea1b28a76aeba74744148b15099254d918671Owen Lin    private static final String[] DRM_IMAGE_PROJECTION = new String[] {
32666ea1b28a76aeba74744148b15099254d918671Owen Lin        DrmStore.Images._ID,
33666ea1b28a76aeba74744148b15099254d918671Owen Lin        DrmStore.Images.DATA,
34666ea1b28a76aeba74744148b15099254d918671Owen Lin        DrmStore.Images.MIME_TYPE,
35666ea1b28a76aeba74744148b15099254d918671Owen Lin    };
36666ea1b28a76aeba74744148b15099254d918671Owen Lin
37666ea1b28a76aeba74744148b15099254d918671Owen Lin    private static final int INDEX_ID = 0;
38666ea1b28a76aeba74744148b15099254d918671Owen Lin    private static final int INDEX_DATA_PATH = 1;
39666ea1b28a76aeba74744148b15099254d918671Owen Lin    private static final int INDEX_MIME_TYPE = 2;
40666ea1b28a76aeba74744148b15099254d918671Owen Lin
41666ea1b28a76aeba74744148b15099254d918671Owen Lin    public DrmImageList(ContentResolver resolver, Uri imageUri, int sort,
42666ea1b28a76aeba74744148b15099254d918671Owen Lin            String bucketId) {
43b62254a185d04ecfe2ddc837b7e0e54f0273c478Owen Lin        super(resolver, imageUri, sort, bucketId);
44666ea1b28a76aeba74744148b15099254d918671Owen Lin    }
45666ea1b28a76aeba74744148b15099254d918671Owen Lin
46666ea1b28a76aeba74744148b15099254d918671Owen Lin    @Override
47666ea1b28a76aeba74744148b15099254d918671Owen Lin    protected String sortOrder() {
48666ea1b28a76aeba74744148b15099254d918671Owen Lin        // We have no date information in DrmStore, so we just sort by _id.
49666ea1b28a76aeba74744148b15099254d918671Owen Lin        return "_id ASC";
50666ea1b28a76aeba74744148b15099254d918671Owen Lin    }
51666ea1b28a76aeba74744148b15099254d918671Owen Lin
52666ea1b28a76aeba74744148b15099254d918671Owen Lin    @Override
53666ea1b28a76aeba74744148b15099254d918671Owen Lin    protected Cursor createCursor() {
54666ea1b28a76aeba74744148b15099254d918671Owen Lin        return mContentResolver.query(
55666ea1b28a76aeba74744148b15099254d918671Owen Lin                mBaseUri, DRM_IMAGE_PROJECTION, null, null, sortOrder());
56666ea1b28a76aeba74744148b15099254d918671Owen Lin    }
57666ea1b28a76aeba74744148b15099254d918671Owen Lin
58666ea1b28a76aeba74744148b15099254d918671Owen Lin    private static class DrmImage extends Image {
59666ea1b28a76aeba74744148b15099254d918671Owen Lin
60666ea1b28a76aeba74744148b15099254d918671Owen Lin        protected DrmImage(BaseImageList container, ContentResolver cr,
61666ea1b28a76aeba74744148b15099254d918671Owen Lin                long id, int index, Uri uri, String dataPath,
62666ea1b28a76aeba74744148b15099254d918671Owen Lin                long miniThumbMagic, String mimeType, long dateTaken,
63185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang                String title, int rotation) {
64b62254a185d04ecfe2ddc837b7e0e54f0273c478Owen Lin            super(container, cr, id, index, uri, dataPath,
65185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang                    mimeType, dateTaken, title, rotation);
66666ea1b28a76aeba74744148b15099254d918671Owen Lin        }
67666ea1b28a76aeba74744148b15099254d918671Owen Lin
68666ea1b28a76aeba74744148b15099254d918671Owen Lin        @Override
69666ea1b28a76aeba74744148b15099254d918671Owen Lin        public int getDegreesRotated() {
70666ea1b28a76aeba74744148b15099254d918671Owen Lin            return 0;
71666ea1b28a76aeba74744148b15099254d918671Owen Lin        }
72666ea1b28a76aeba74744148b15099254d918671Owen Lin
73666ea1b28a76aeba74744148b15099254d918671Owen Lin        @Override
74666ea1b28a76aeba74744148b15099254d918671Owen Lin        public boolean isDrm() {
75666ea1b28a76aeba74744148b15099254d918671Owen Lin            return true;
76666ea1b28a76aeba74744148b15099254d918671Owen Lin        }
77666ea1b28a76aeba74744148b15099254d918671Owen Lin
78666ea1b28a76aeba74744148b15099254d918671Owen Lin        @Override
79666ea1b28a76aeba74744148b15099254d918671Owen Lin        public boolean isReadonly() {
80666ea1b28a76aeba74744148b15099254d918671Owen Lin            return true;
81666ea1b28a76aeba74744148b15099254d918671Owen Lin        }
82666ea1b28a76aeba74744148b15099254d918671Owen Lin
83666ea1b28a76aeba74744148b15099254d918671Owen Lin        @Override
84666ea1b28a76aeba74744148b15099254d918671Owen Lin        public Bitmap miniThumbBitmap() {
85666ea1b28a76aeba74744148b15099254d918671Owen Lin            return fullSizeBitmap(IImage.MINI_THUMB_TARGET_SIZE,
86666ea1b28a76aeba74744148b15099254d918671Owen Lin                    IImage.MINI_THUMB_MAX_NUM_PIXELS);
87666ea1b28a76aeba74744148b15099254d918671Owen Lin        }
88666ea1b28a76aeba74744148b15099254d918671Owen Lin
89666ea1b28a76aeba74744148b15099254d918671Owen Lin        @Override
90666ea1b28a76aeba74744148b15099254d918671Owen Lin        public Bitmap thumbBitmap(boolean rotateAsNeeded) {
91666ea1b28a76aeba74744148b15099254d918671Owen Lin            return fullSizeBitmap(IImage.THUMBNAIL_TARGET_SIZE,
92666ea1b28a76aeba74744148b15099254d918671Owen Lin                    IImage.THUMBNAIL_MAX_NUM_PIXELS);
93666ea1b28a76aeba74744148b15099254d918671Owen Lin        }
94666ea1b28a76aeba74744148b15099254d918671Owen Lin    }
95666ea1b28a76aeba74744148b15099254d918671Owen Lin
96666ea1b28a76aeba74744148b15099254d918671Owen Lin    @Override
97666ea1b28a76aeba74744148b15099254d918671Owen Lin    protected BaseImage loadImageFromCursor(Cursor cursor) {
98666ea1b28a76aeba74744148b15099254d918671Owen Lin        long id = cursor.getLong(INDEX_ID);
99666ea1b28a76aeba74744148b15099254d918671Owen Lin        String dataPath = cursor.getString(INDEX_DATA_PATH);
100666ea1b28a76aeba74744148b15099254d918671Owen Lin        String mimeType = cursor.getString(INDEX_MIME_TYPE);
101666ea1b28a76aeba74744148b15099254d918671Owen Lin        return new DrmImage(this, mContentResolver, id, cursor.getPosition(),
102666ea1b28a76aeba74744148b15099254d918671Owen Lin                contentUri(id), dataPath, 0, mimeType, 0, "DrmImage-" + id,
103185a1a7c5f33ecc5cb9a36d23cecb719c8727178Chih-Chung Chang                0);
104666ea1b28a76aeba74744148b15099254d918671Owen Lin    }
105666ea1b28a76aeba74744148b15099254d918671Owen Lin}
106