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