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;
19e879326d76734277469ca2f387f436fd0e922c87Doris Liuimport android.graphics.Bitmap;
20e879326d76734277469ca2f387f436fd0e922c87Doris Liuimport android.graphics.BitmapFactory;
212b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Linimport android.view.View.MeasureSpec;
222b3ee0ea07246b859a5b75d8a6102a7cce7ec838Owen Lin
234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.R;
24b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.android.gallery3d.app.AbstractGalleryActivity;
254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.data.MediaDetails;
264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenpublic class DetailsHelper {
294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private static DetailsAddressResolver sAddressResolver;
304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private DetailsViewContainer mContainer;
314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface DetailsSource {
334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public int size();
34995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        public int setIndex();
354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public MediaDetails getDetails();
364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface CloseListener {
394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void onClose();
404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public interface DetailsViewContainer {
43995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        public void reloadDetails();
444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void setCloseListener(CloseListener listener);
454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void show();
464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void hide();
474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
49e879326d76734277469ca2f387f436fd0e922c87Doris Liu    public interface ResolutionResolvingListener {
50e879326d76734277469ca2f387f436fd0e922c87Doris Liu        public void onResolutionAvailable(int width, int height);
51e879326d76734277469ca2f387f436fd0e922c87Doris Liu    }
52e879326d76734277469ca2f387f436fd0e922c87Doris Liu
53b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    public DetailsHelper(AbstractGalleryActivity activity, GLView rootPane, DetailsSource source) {
54a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar        mContainer = new DialogDetailsView(activity, source);
554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void layout(int left, int top, int right, int bottom) {
584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (mContainer instanceof GLView) {
594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            GLView view = (GLView) mContainer;
604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            view.measure(MeasureSpec.UNSPECIFIED,
614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    MeasureSpec.makeMeasureSpec(bottom - top, MeasureSpec.AT_MOST));
624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            view.layout(0, top, view.getMeasuredWidth(), top + view.getMeasuredHeight());
634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
66995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb    public void reloadDetails() {
67995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        mContainer.reloadDetails();
684105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void setCloseListener(CloseListener listener) {
714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.setCloseListener(listener);
724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
734105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
74b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    public static String resolveAddress(AbstractGalleryActivity activity, double[] latlng,
754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            AddressResolvingListener listener) {
764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (sAddressResolver == null) {
774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            sAddressResolver = new DetailsAddressResolver(activity);
784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        } else {
794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            sAddressResolver.cancel();
804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        return sAddressResolver.resolveAddress(latlng, listener);
824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
84e879326d76734277469ca2f387f436fd0e922c87Doris Liu    public static void resolveResolution(String path, ResolutionResolvingListener listener) {
85e879326d76734277469ca2f387f436fd0e922c87Doris Liu        Bitmap bitmap = BitmapFactory.decodeFile(path);
86e879326d76734277469ca2f387f436fd0e922c87Doris Liu        if (bitmap == null) return;
87e879326d76734277469ca2f387f436fd0e922c87Doris Liu        listener.onResolutionAvailable(bitmap.getWidth(), bitmap.getHeight());
88e879326d76734277469ca2f387f436fd0e922c87Doris Liu    }
89e879326d76734277469ca2f387f436fd0e922c87Doris Liu
904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static void pause() {
914105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (sAddressResolver != null) sAddressResolver.cancel();
924105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
934105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
944105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void show() {
954105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.show();
964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
984105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void hide() {
994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContainer.hide();
1004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
1014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
1024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public static String getDetailsName(Context context, int key) {
1034105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        switch (key) {
1044105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_TITLE:
1054105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.title);
1064105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DESCRIPTION:
1074105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.description);
1084105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DATETIME:
1094105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.time);
1104105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_LOCATION:
1114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.location);
1124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_PATH:
1134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.path);
1144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_WIDTH:
1154105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.width);
1164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_HEIGHT:
1174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.height);
1184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_ORIENTATION:
1194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.orientation);
1204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_DURATION:
1214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.duration);
1224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MIMETYPE:
1234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.mimetype);
1244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_SIZE:
1254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.file_size);
1264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MAKE:
1274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.maker);
1284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_MODEL:
1294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.model);
1304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_FLASH:
1314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.flash);
1324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_APERTURE:
1334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.aperture);
1344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_FOCAL_LENGTH:
1354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.focal_length);
1364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_WHITE_BALANCE:
1374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.white_balance);
1384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_EXPOSURE_TIME:
1394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.exposure_time);
1404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            case MediaDetails.INDEX_ISO:
1414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return context.getString(R.string.iso);
1424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            default:
1434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                return "Unknown key" + key;
1444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
1454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
1464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen}
1474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
1484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
149