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
182b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport android.content.Context;
192b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport android.view.View.MeasureSpec;
202b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Lin
214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.R;
22b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.android.gallery3d.app.AbstractGalleryActivity;
234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.data.MediaDetails;
244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
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();
32995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        public int setIndex();
334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public MediaDetails getDetails();
344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface CloseListener {
374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void onClose();
384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface DetailsViewContainer {
41995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        public void reloadDetails();
424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void setCloseListener(CloseListener listener);
434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void show();
444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void hide();
454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
47b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    public DetailsHelper(AbstractGalleryActivity activity, GLView rootPane, DetailsSource source) {
48a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar        mContainer = new DialogDetailsView(activity, source);
494105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
504105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
514105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void layout(int left, int top, int right, int bottom) {
524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (mContainer instanceof GLView) {
534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            GLView view = (GLView) mContainer;
544105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            view.measure(MeasureSpec.UNSPECIFIED,
554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    MeasureSpec.makeMeasureSpec(bottom - top, MeasureSpec.AT_MOST));
564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            view.layout(0, top, view.getMeasuredWidth(), top + view.getMeasuredHeight());
574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
60995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb    public void reloadDetails() {
61995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        mContainer.reloadDetails();
624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void setCloseListener(CloseListener listener) {
654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.setCloseListener(listener);
664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
68b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    public static String resolveAddress(AbstractGalleryActivity activity, double[] latlng,
694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            AddressResolvingListener listener) {
704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (sAddressResolver == null) {
714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            sAddressResolver = new DetailsAddressResolver(activity);
724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        } else {
734105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            sAddressResolver.cancel();
744105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        return sAddressResolver.resolveAddress(latlng, listener);
764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static void pause() {
794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (sAddressResolver != null) sAddressResolver.cancel();
804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void show() {
834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.show();
844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void hide() {
874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.hide();
884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static String getDetailsName(Context context, int key) {
914105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        switch (key) {
924105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_TITLE:
934105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.title);
944105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DESCRIPTION:
954105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.description);
964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DATETIME:
974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.time);
984105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_LOCATION:
994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.location);
1004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_PATH:
1014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.path);
1024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_WIDTH:
1034105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.width);
1044105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_HEIGHT:
1054105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.height);
1064105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_ORIENTATION:
1074105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.orientation);
1084105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DURATION:
1094105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.duration);
1104105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MIMETYPE:
1114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.mimetype);
1124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_SIZE:
1134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.file_size);
1144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MAKE:
1154105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.maker);
1164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MODEL:
1174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.model);
1184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_FLASH:
1194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.flash);
1204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_APERTURE:
1214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.aperture);
1224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_FOCAL_LENGTH:
1234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.focal_length);
1244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_WHITE_BALANCE:
1254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.white_balance);
1264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_EXPOSURE_TIME:
1274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.exposure_time);
1284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_ISO:
1294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.iso);
1304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            default:
1314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return "Unknown key" + key;
1324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
1334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
1344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen}
1354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
1364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
137