14105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen/*
24105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * Copyright (C) 2010 The Android Open Source Project
34105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen *
44105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * Licensed under the Apache License, Version 2.0 (the "License");
54105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * you may not use this file except in compliance with the License.
64105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * You may obtain a copy of the License at
74105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen *
84105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen *      http://www.apache.org/licenses/LICENSE-2.0
94105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen *
104105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * Unless required by applicable law or agreed to in writing, software
114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * distributed under the License is distributed on an "AS IS" BASIS,
124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * See the License for the specific language governing permissions and
144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * limitations under the License.
154105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen */
164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenpackage com.android.gallery3d.ui;
174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.R;
194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.app.GalleryActivity;
204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.data.MediaDetails;
214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.content.Context;
244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.View.MeasureSpec;
254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenpublic class DetailsHelper {
274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private static DetailsAddressResolver sAddressResolver;
284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private DetailsViewContainer mContainer;
294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface DetailsSource {
314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public int size();
324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public int getIndex();
334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public int findIndex(int indexHint);
344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public MediaDetails getDetails();
354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface CloseListener {
384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void onClose();
394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface DetailsViewContainer {
424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void reloadDetails(int indexHint);
434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void setCloseListener(CloseListener listener);
444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void show();
454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void hide();
464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public DetailsHelper(GalleryActivity activity, GLView rootPane, DetailsSource source) {
49a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar        mContainer = new DialogDetailsView(activity, source);
504105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
514105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void layout(int left, int top, int right, int bottom) {
534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (mContainer instanceof GLView) {
544105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            GLView view = (GLView) mContainer;
554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            view.measure(MeasureSpec.UNSPECIFIED,
564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    MeasureSpec.makeMeasureSpec(bottom - top, MeasureSpec.AT_MOST));
574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            view.layout(0, top, view.getMeasuredWidth(), top + view.getMeasuredHeight());
584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void reloadDetails(int indexHint) {
624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.reloadDetails(indexHint);
634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void setCloseListener(CloseListener listener) {
664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.setCloseListener(listener);
674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
684105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static String resolveAddress(GalleryActivity activity, double[] latlng,
704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            AddressResolvingListener listener) {
714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (sAddressResolver == null) {
724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            sAddressResolver = new DetailsAddressResolver(activity);
734105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        } else {
744105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            sAddressResolver.cancel();
754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        return sAddressResolver.resolveAddress(latlng, listener);
774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static void pause() {
804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (sAddressResolver != null) sAddressResolver.cancel();
814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void show() {
844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.show();
854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void hide() {
884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.hide();
894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
914105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static String getDetailsName(Context context, int key) {
924105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        switch (key) {
934105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_TITLE:
944105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.title);
954105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DESCRIPTION:
964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.description);
974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DATETIME:
984105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.time);
994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_LOCATION:
1004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.location);
1014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_PATH:
1024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.path);
1034105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_WIDTH:
1044105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.width);
1054105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_HEIGHT:
1064105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.height);
1074105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_ORIENTATION:
1084105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.orientation);
1094105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DURATION:
1104105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.duration);
1114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MIMETYPE:
1124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.mimetype);
1134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_SIZE:
1144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.file_size);
1154105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MAKE:
1164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.maker);
1174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MODEL:
1184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.model);
1194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_FLASH:
1204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.flash);
1214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_APERTURE:
1224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.aperture);
1234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_FOCAL_LENGTH:
1244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.focal_length);
1254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_WHITE_BALANCE:
1264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.white_balance);
1274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_EXPOSURE_TIME:
1284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.exposure_time);
1294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_ISO:
1304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.iso);
1314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            default:
1324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return "Unknown key" + key;
1334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
1344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
1354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen}
1364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
1374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
138