1135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren/*
2135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * Copyright (C) 2012 The Android Open Source Project
3135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren *
4135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * Licensed under the Apache License, Version 2.0 (the "License");
5135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * you may not use this file except in compliance with the License.
6135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * You may obtain a copy of the License at
7135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren *
8135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren *      http://www.apache.org/licenses/LICENSE-2.0
9135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren *
10135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * Unless required by applicable law or agreed to in writing, software
11135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * distributed under the License is distributed on an "AS IS" BASIS,
12135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * See the License for the specific language governing permissions and
14135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * limitations under the License.
15135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren */
16135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wrenpackage com.android.dreams.phototable;
17135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
18135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wrenimport android.content.Context;
19d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wrenimport android.content.SharedPreferences;
20135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
2183fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wrenimport java.io.InputStream;
22b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wrenimport java.util.ArrayList;
2388d80f4471c900628e2cb6eef23029b99af48e09Chris Wrenimport java.util.Collection;
24135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
25135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren/**
26135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren * Picks a random image from the local store.
27135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren */
2888d80f4471c900628e2cb6eef23029b99af48e09Chris Wrenpublic class StockSource extends PhotoSource {
29d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    public static final String ALBUM_ID = "com.android.dreams.phototable.StockSource";
30135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren    private static final String TAG = "PhotoTable.StockSource";
31b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private static final int[] PHOTOS = { R.drawable.blank_photo };
32135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
3388d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    private final ArrayList<ImageData> mImageCache;
3488d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    private final ArrayList<AlbumData> mAlbumCache;
3588d80f4471c900628e2cb6eef23029b99af48e09Chris Wren
36b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private final ArrayList<ImageData> mImageList;
37b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren    private final ArrayList<AlbumData> mAlbumList;
38135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
39e38c0c80e3e9b3b835e5c2e014ccf23e29663396Chris Wren    private final String mStockPhotoName;
40135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
41d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    public StockSource(Context context, SharedPreferences settings) {
42b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        super(context, settings, null);
4383fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        mSourceName = TAG;
44e38c0c80e3e9b3b835e5c2e014ccf23e29663396Chris Wren        mStockPhotoName = mResources.getString(R.string.stock_photo_album_name, "Default Photos");
4588d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        mImageCache = new ArrayList<ImageData>(PHOTOS.length);
4688d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        mAlbumCache = new ArrayList<AlbumData>(1);
47b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        mImageList = new ArrayList<ImageData>(PHOTOS.length);
48b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren        mAlbumList = new ArrayList<AlbumData>(1);
4988d80f4471c900628e2cb6eef23029b99af48e09Chris Wren
5088d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        AlbumData albumData = new AlbumData();
5188d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        albumData.id = ALBUM_ID;
5288d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        albumData.account = mStockPhotoName;
5388d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        albumData.title = mStockPhotoName;
5488d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        mAlbumCache.add(albumData);
5588d80f4471c900628e2cb6eef23029b99af48e09Chris Wren
5688d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        for (int i = 0; i < PHOTOS.length; i++) {
5788d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            ImageData imageData = new ImageData();
5888d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            imageData.id = Integer.toString(i);
5988d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            mImageCache.add(imageData);
6088d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        }
6188d80f4471c900628e2cb6eef23029b99af48e09Chris Wren
6283fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        fillQueue();
6383fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren    }
64135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
6583fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren    @Override
66d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    public Collection<AlbumData> findAlbums() {
67d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        if (mAlbumList.isEmpty()) {
6888d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            mAlbumList.addAll(mAlbumCache);
69d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        }
70d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        log(TAG, "returning a list of albums: " + mAlbumList.size());
71d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren        return mAlbumList;
72d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    }
73d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren
74d85f53c69dead1f1f6c0290b8104422143bc5166Chris Wren    @Override
7583fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren    protected Collection<ImageData> findImages(int howMany) {
7683fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        if (mImageList.isEmpty()) {
7788d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            mImageList.addAll(mImageCache);
78135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren        }
7983fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        return mImageList;
80135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren    }
81135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
8283fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren    @Override
83c6bebae5e07c0108294d05e33fbace209d2f9b0dChris Wren    protected InputStream getStream(ImageData data, int longSide) {
8483fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        InputStream is = null;
8583fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        try {
8683fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren            log(TAG, "opening:" + data.id);
8788d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            int idx = Integer.valueOf(data.id);
8888d80f4471c900628e2cb6eef23029b99af48e09Chris Wren            is = mResources.openRawResource(PHOTOS[idx]);
8983fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        } catch (Exception ex) {
9083fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren            log(TAG, ex.toString());
9183fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren            is = null;
92135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren        }
93135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren
9483fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren        return is;
9583fee9012b6d5c5940de5b96fe8d98653ba14c0dChris Wren    }
9688d80f4471c900628e2cb6eef23029b99af48e09Chris Wren
97bcfd4439d730a4d783a02596c8ab444796323aadChris Wren    @Override
9888d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    public ImageData naturalNext(ImageData current) {
9988d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        int idx = Integer.valueOf(current.id);
10088d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        idx = (idx + 1) % PHOTOS.length;
10188d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        return mImageCache.get(idx);
10288d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    }
10388d80f4471c900628e2cb6eef23029b99af48e09Chris Wren
104bcfd4439d730a4d783a02596c8ab444796323aadChris Wren    @Override
10588d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    public ImageData naturalPrevious(ImageData current) {
10688d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        int idx = Integer.valueOf(current.id);
10788d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        idx = (PHOTOS.length + idx - 1) % PHOTOS.length;
10888d80f4471c900628e2cb6eef23029b99af48e09Chris Wren        return mImageCache.get(idx);
10988d80f4471c900628e2cb6eef23029b99af48e09Chris Wren    }
110bcfd4439d730a4d783a02596c8ab444796323aadChris Wren
111bcfd4439d730a4d783a02596c8ab444796323aadChris Wren    @Override
112bcfd4439d730a4d783a02596c8ab444796323aadChris Wren    protected void donePaging(ImageData current) {
113bcfd4439d730a4d783a02596c8ab444796323aadChris Wren    }
114135f525b62eb20c31c593e09f8bdb92215d538a4Chris Wren}
115b8235acb0fdc33c50e864ec801b93b9750d7600cChris Wren
116