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