1/*
2 * Copyright (C) 2013 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.camera.filmstrip;
18
19import android.content.Context;
20import android.net.Uri;
21import android.view.View;
22
23/**
24 * Common interface for all images in the filmstrip.
25 */
26public interface ImageData {
27
28    // View types.
29    public static final int VIEW_TYPE_NONE = 0;
30    public static final int VIEW_TYPE_STICKY = 1;
31    public static final int VIEW_TYPE_REMOVABLE = 2;
32
33    // Actions allowed to be performed on the image data.
34    // The actions are defined bit-wise so we can use bit operations like
35    // | and &.
36    public static final int ACTION_NONE = 0;
37    public static final int ACTION_PROMOTE = 1;
38    public static final int ACTION_DEMOTE = (1 << 1);
39    /**
40     * For image data that supports zoom, it should also provide a valid
41     * content uri.
42     */
43    public static final int ACTION_ZOOM = (1 << 2);
44
45    /**
46     * SIZE_FULL can be returned by {@link ImageData#getWidth()} and
47     * {@link ImageData#getHeight()}. When SIZE_FULL is returned for
48     * width/height, it means the the width or height will be disregarded
49     * when deciding the view size of this ImageData, just use full screen
50     * size.
51     */
52    public static final int SIZE_FULL = -2;
53
54    /**
55     * Returns the width in pixels of the image before orientation applied.
56     * The final layout of the view returned by
57     * {@link DataAdapter#getView(Context, int)} will
58     * preserve the aspect ratio of
59     * {@link ImageData#getWidth()} and
60     * {@link ImageData#getHeight()}.
61     */
62    public int getWidth();
63
64    /**
65     * Returns the height in pixels of the image before orientation applied.
66     * The final layout of the view returned by
67     * {@link DataAdapter#getView(Context, int)} will
68     * preserve the aspect ratio of
69     * {@link ImageData#getWidth()} and
70     * {@link ImageData#getHeight()}.
71     */
72    public int getHeight();
73
74    /**
75     * Returns the rotation of the image in degrees clockwise. The valid values
76     * are 0, 90, 180, and 270.
77     */
78    public int getRotation();
79
80    /** Returns the image data type. The current valid values are
81     * {@code VIEW_TYPE_*}.
82     */
83    public int getViewType();
84
85    /**
86     * Returns the coordinates of this item.
87     *
88     * @return A 2-element array containing {latitude, longitude}, or null,
89     *         if no position is known for this item.
90     */
91    public double[] getLatLong();
92
93    /**
94     * Checks if the UI action is supported.
95     *
96     * @param action The UI actions to check.
97     * @return Whether at all of the actions set in {@code action} are
98     * supported.
99     */
100    public boolean isUIActionSupported(int action);
101
102    /**
103     * Gives the data a hint when its view is going to be displayed.
104     * {@code FilmStripView} should always call this function before showing
105     * its corresponding view every time.
106     */
107    public void prepare();
108
109    /**
110     * Gives the data a hint when its view is going to be removed from the
111     * view hierarchy. {@code FilmStripView} should always call this
112     * function after its corresponding view is removed from the view
113     * hierarchy.
114     */
115    public void recycle(View view);
116
117    /**
118     * @return The URI of this data. Must be a unique one and not null.
119     */
120    public Uri getUri();
121}
122