18ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde/*
28ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Copyright (C) 2013 The Android Open Source Project
38ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *
48ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Licensed under the Apache License, Version 2.0 (the "License");
58ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * you may not use this file except in compliance with the License.
68ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * You may obtain a copy of the License at
78ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *
88ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *      http://www.apache.org/licenses/LICENSE-2.0
98ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde *
108ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * Unless required by applicable law or agreed to in writing, software
118ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * distributed under the License is distributed on an "AS IS" BASIS,
128ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * See the License for the specific language governing permissions and
148ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * limitations under the License.
158ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde */
168ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
178ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdepackage com.android.camera.data;
188ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
198ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport android.graphics.Bitmap;
208ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport android.net.Uri;
218ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport android.view.View;
228ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
238ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport com.android.camera.debug.Log;
248ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport com.android.camera.util.Size;
258ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport com.google.common.base.Optional;
268ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
278ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport java.util.Date;
288ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdeimport java.util.UUID;
298ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
3077d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohdeimport javax.annotation.Nonnull;
3177d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde
328ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde/**
338ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde * A LocalData that does nothing but only shows a view.
348ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde */
358ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohdepublic class PlaceholderItem implements FilmstripItem {
368ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private static final Log.Tag TAG = new Log.Tag("PlaceholderItem");
378ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private static final String SIMPLE_VIEW_URI_SCHEME = "simple_view_data";
388ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
398ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private static final FilmstripItemAttributes PLACEHOLDER_ITEM_ATTRIBUTES =
408ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          new FilmstripItemAttributes.Builder()
418ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde                .build();
428ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
438ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final View mView;
448ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final Metadata mMetaData;
458ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final FilmstripItemType mItemViewType;
468ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final FilmstripItemData mItemData;
478ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    private final FilmstripItemAttributes mAttributes;
488ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
498ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public PlaceholderItem(
508ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          View v, FilmstripItemType viewType, int width, int height) {
518ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mView = v;
528ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mItemViewType = viewType;
538ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        Size dimensions = new Size(width, height);
548ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        Date creationDate = new Date(0);
558ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        Date lastModifiedDate = new Date(0);
568ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mMetaData = new Metadata();
578ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mMetaData.setLoaded(true);
588ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        Uri.Builder builder = new Uri.Builder();
598ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        String uuid = UUID.randomUUID().toString();
608ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        builder.scheme(SIMPLE_VIEW_URI_SCHEME).appendPath(uuid);
618ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        Uri uri = builder.build();
628ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
638ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mItemData = new FilmstripItemData(
648ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              -1,
658ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              uuid,
668ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              "",
678ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              creationDate,
688ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              lastModifiedDate,
698ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              "" /* path */,
708ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              uri,
718ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              dimensions,
728ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              0,
738ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              0,
748ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde              Location.UNKNOWN);
758ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
768ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        mAttributes = PLACEHOLDER_ITEM_ATTRIBUTES;
778ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
788ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
798ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
808ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public FilmstripItemData getData() {
818ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mItemData;
828ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
838ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
848ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
858ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public FilmstripItemAttributes getAttributes() {
868ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mAttributes;
878ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
888ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
898ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
908ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public FilmstripItemType getItemViewType() {
918ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mItemViewType;
928ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
938ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
948ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
958ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public FilmstripItem refresh() {
968ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return this;
978ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
988ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
998ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
1008ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public boolean delete() {
1018ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return false;
1028ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1038ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1048ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
10577d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    public View getView(Optional<View> optionalView,
106005bb2f26e73c4c9daad41b615f6dd414396f625Alan Newberger          LocalFilmstripDataAdapter adapter, boolean isInProgress,
1078ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde          VideoClickedCallback videoClickedCallback) {
1088ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mView;
1098ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1108ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1118ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
11277d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    public void setSuggestedSize(int widthPx, int heightPx) { }
11377d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde
11477d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    @Override
11577d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    public void renderTiny(@Nonnull View view) { }
11677d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde
11777d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    @Override
11877d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    public void renderThumbnail(@Nonnull View view) { }
11977d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde
12077d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    @Override
12177d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    public void renderFullRes(@Nonnull View view) { }
1228ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1238ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
12477d9f023e76816e5da7bd067ad46cc0e9c98623fPaul Rohde    public void recycle(@Nonnull View view) {
1258ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        // Do nothing.
1268ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1278ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1288ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
1298ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Optional<MediaDetails> getMediaDetails() {
1308ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return Optional.absent();
1318ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1328ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1338ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
1348ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Metadata getMetadata() {
1358ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return mMetaData;
1368ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
1378ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde
1388ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    @Override
1398ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    public Optional<Bitmap> generateThumbnail(int boundingWidthPx, int boundingHeightPx) {
1408ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde        return Optional.absent();
1418ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde    }
14251cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger
14351cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    @Override
14451cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    public Size getDimensions() {
14551cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger        return mItemData.getDimensions();
14651cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    }
14751cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger
14851cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    @Override
14951cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    public int getOrientation() {
15051cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger        return mItemData.getOrientation();
15151cafa0a35546a42c573357aa7a031a79cf9ba1bAlan Newberger    }
1528ee16b8a323ffa20e6fb1270d498ec445f64defcPaul Rohde}
153