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