1/*
2 * Copyright (C) 2010 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 */
16package com.android.gallery3d.ui;
17
18import android.content.Context;
19import android.view.View.MeasureSpec;
20
21import com.android.gallery3d.R;
22import com.android.gallery3d.app.AbstractGalleryActivity;
23import com.android.gallery3d.data.MediaDetails;
24import com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
25
26public class DetailsHelper {
27    private static DetailsAddressResolver sAddressResolver;
28    private DetailsViewContainer mContainer;
29
30    public interface DetailsSource {
31        public int size();
32        public int setIndex();
33        public MediaDetails getDetails();
34    }
35
36    public interface CloseListener {
37        public void onClose();
38    }
39
40    public interface DetailsViewContainer {
41        public void reloadDetails();
42        public void setCloseListener(CloseListener listener);
43        public void show();
44        public void hide();
45    }
46
47    public DetailsHelper(AbstractGalleryActivity activity, GLView rootPane, DetailsSource source) {
48        mContainer = new DialogDetailsView(activity, source);
49    }
50
51    public void layout(int left, int top, int right, int bottom) {
52        if (mContainer instanceof GLView) {
53            GLView view = (GLView) mContainer;
54            view.measure(MeasureSpec.UNSPECIFIED,
55                    MeasureSpec.makeMeasureSpec(bottom - top, MeasureSpec.AT_MOST));
56            view.layout(0, top, view.getMeasuredWidth(), top + view.getMeasuredHeight());
57        }
58    }
59
60    public void reloadDetails() {
61        mContainer.reloadDetails();
62    }
63
64    public void setCloseListener(CloseListener listener) {
65        mContainer.setCloseListener(listener);
66    }
67
68    public static String resolveAddress(AbstractGalleryActivity activity, double[] latlng,
69            AddressResolvingListener listener) {
70        if (sAddressResolver == null) {
71            sAddressResolver = new DetailsAddressResolver(activity);
72        } else {
73            sAddressResolver.cancel();
74        }
75        return sAddressResolver.resolveAddress(latlng, listener);
76    }
77
78    public static void pause() {
79        if (sAddressResolver != null) sAddressResolver.cancel();
80    }
81
82    public void show() {
83        mContainer.show();
84    }
85
86    public void hide() {
87        mContainer.hide();
88    }
89
90    public static String getDetailsName(Context context, int key) {
91        switch (key) {
92            case MediaDetails.INDEX_TITLE:
93                return context.getString(R.string.title);
94            case MediaDetails.INDEX_DESCRIPTION:
95                return context.getString(R.string.description);
96            case MediaDetails.INDEX_DATETIME:
97                return context.getString(R.string.time);
98            case MediaDetails.INDEX_LOCATION:
99                return context.getString(R.string.location);
100            case MediaDetails.INDEX_PATH:
101                return context.getString(R.string.path);
102            case MediaDetails.INDEX_WIDTH:
103                return context.getString(R.string.width);
104            case MediaDetails.INDEX_HEIGHT:
105                return context.getString(R.string.height);
106            case MediaDetails.INDEX_ORIENTATION:
107                return context.getString(R.string.orientation);
108            case MediaDetails.INDEX_DURATION:
109                return context.getString(R.string.duration);
110            case MediaDetails.INDEX_MIMETYPE:
111                return context.getString(R.string.mimetype);
112            case MediaDetails.INDEX_SIZE:
113                return context.getString(R.string.file_size);
114            case MediaDetails.INDEX_MAKE:
115                return context.getString(R.string.maker);
116            case MediaDetails.INDEX_MODEL:
117                return context.getString(R.string.model);
118            case MediaDetails.INDEX_FLASH:
119                return context.getString(R.string.flash);
120            case MediaDetails.INDEX_APERTURE:
121                return context.getString(R.string.aperture);
122            case MediaDetails.INDEX_FOCAL_LENGTH:
123                return context.getString(R.string.focal_length);
124            case MediaDetails.INDEX_WHITE_BALANCE:
125                return context.getString(R.string.white_balance);
126            case MediaDetails.INDEX_EXPOSURE_TIME:
127                return context.getString(R.string.exposure_time);
128            case MediaDetails.INDEX_ISO:
129                return context.getString(R.string.iso);
130            default:
131                return "Unknown key" + key;
132        }
133    }
134}
135
136
137