DialogDetailsView.java revision 02ec00b91039736d478c6e59ba90d5bbcd1a8044
14105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen/* 24105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen * Copyright (C) 2011 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 Chen 174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenpackage com.android.gallery3d.ui; 184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.app.AlertDialog; 204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.app.Dialog; 214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.content.Context; 224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.content.DialogInterface; 23a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chenimport android.content.DialogInterface.OnDismissListener; 244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.text.format.Formatter; 254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.LayoutInflater; 264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.View; 274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.ViewGroup; 284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.widget.BaseAdapter; 29a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millarimport android.widget.ListView; 304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.widget.TextView; 314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 32b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.R; 33b21b8e58a604f6c701245d84b141b5b87663192bOwen Linimport com.android.gallery3d.app.AbstractGalleryActivity; 34b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.common.Utils; 35b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.data.MediaDetails; 36b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener; 37b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsHelper.CloseListener; 38b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsHelper.DetailsSource; 39b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsHelper.DetailsViewContainer; 40b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen 414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport java.util.ArrayList; 424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport java.util.Map.Entry; 434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenpublic class DialogDetailsView implements DetailsViewContainer { 454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen @SuppressWarnings("unused") 464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private static final String TAG = "DialogDetailsView"; 474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 48b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin private final AbstractGalleryActivity mActivity; 494105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private DetailsAdapter mAdapter; 504105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private MediaDetails mDetails; 51b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen private final DetailsSource mSource; 524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private int mIndex; 534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private Dialog mDialog; 54a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen private CloseListener mListener; 554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 56b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin public DialogDetailsView(AbstractGalleryActivity activity, DetailsSource source) { 57b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin mActivity = activity; 584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mSource = source; 594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 617817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public void show() { 63995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb reloadDetails(); 644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDialog.show(); 654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 677817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 684105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public void hide() { 694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDialog.hide(); 704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 727817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 73995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb public void reloadDetails() { 74995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb int index = mSource.setIndex(); 754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (index == -1) return; 764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen MediaDetails details = mSource.getDetails(); 774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (details != null) { 784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (mIndex == index && mDetails == details) return; 794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mIndex = index; 804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDetails = details; 814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen setDetails(details); 824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private void setDetails(MediaDetails details) { 864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mAdapter = new DetailsAdapter(details); 874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen String title = String.format( 88b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin mActivity.getAndroidContext().getString(R.string.details_title), 894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mIndex + 1, mSource.size()); 90b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin ListView detailsList = (ListView) LayoutInflater.from(mActivity.getAndroidContext()).inflate( 91a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar R.layout.details_list, null, false); 92a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar detailsList.setAdapter(mAdapter); 93b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin mDialog = new AlertDialog.Builder(mActivity) 94a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar .setView(detailsList) 954105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen .setTitle(title) 964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen .setPositiveButton(R.string.close, new DialogInterface.OnClickListener() { 977817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 984105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public void onClick(DialogInterface dialog, int whichButton) { 994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mDialog.dismiss(); 1004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen }) 1024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen .create(); 103a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen 104a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen mDialog.setOnDismissListener(new OnDismissListener() { 1057817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 106a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen public void onDismiss(DialogInterface dialog) { 107a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen if (mListener != null) { 108a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen mListener.onClose(); 109a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen } 110a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen } 111a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen }); 1124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 1144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private class DetailsAdapter extends BaseAdapter implements AddressResolvingListener { 115b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen private final ArrayList<String> mItems; 116b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen private int mLocationIndex; 1174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 1184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public DetailsAdapter(MediaDetails details) { 119b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin Context context = mActivity.getAndroidContext(); 1204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mItems = new ArrayList<String>(details.size()); 1214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mLocationIndex = -1; 1224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen setDetails(context, details); 1234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 1254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen private void setDetails(Context context, MediaDetails details) { 1264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen for (Entry<Integer, Object> detail : details) { 1274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen String value; 1284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen switch (detail.getKey()) { 1294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen case MediaDetails.INDEX_LOCATION: { 1304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen double[] latlng = (double[]) detail.getValue(); 1314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mLocationIndex = mItems.size(); 132b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin value = DetailsHelper.resolveAddress(mActivity, latlng, this); 1334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen break; 1344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen case MediaDetails.INDEX_SIZE: { 1364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = Formatter.formatFileSize( 1374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen context, (Long) detail.getValue()); 1384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen break; 1394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen case MediaDetails.INDEX_WHITE_BALANCE: { 1414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = "1".equals(detail.getValue()) 1424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen ? context.getString(R.string.manual) 1434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen : context.getString(R.string.auto); 1444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen break; 1454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen case MediaDetails.INDEX_FLASH: { 1474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen MediaDetails.FlashState flash = 1484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen (MediaDetails.FlashState) detail.getValue(); 1494105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen // TODO: camera doesn't fill in the complete values, show more information 1504105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen // when it is fixed. 1514105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (flash.isFlashFired()) { 1524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = context.getString(R.string.flash_on); 1534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } else { 1544105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = context.getString(R.string.flash_off); 1554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen break; 1574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen case MediaDetails.INDEX_EXPOSURE_TIME: { 1594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = (String) detail.getValue(); 1604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen double time = Double.valueOf(value); 1614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (time < 1.0f) { 1624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = String.format("1/%d", (int) (0.5f + 1 / time)); 1634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } else { 1644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen int integer = (int) time; 1654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen time -= integer; 1664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = String.valueOf(integer) + "''"; 1674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (time > 0.0001) { 1684105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value += String.format(" 1/%d", (int) (0.5f + 1 / time)); 1694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen break; 1724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1734105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen default: { 1744105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen Object valueObj = detail.getValue(); 1754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen // This shouldn't happen, log its key to help us diagnose the problem. 176cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang if (valueObj == null) { 177cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang Utils.fail("%s's value is Null", 178cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang DetailsHelper.getDetailsName(context, detail.getKey())); 179cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang } 1804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen value = valueObj.toString(); 1814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen int key = detail.getKey(); 1844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (details.hasUnit(key)) { 18502ec00b91039736d478c6e59ba90d5bbcd1a8044Owen Lin value = String.format("%s: %s %s", DetailsHelper.getDetailsName( 1864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen context, key), value, context.getString(details.getUnit(key))); 1874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } else { 18802ec00b91039736d478c6e59ba90d5bbcd1a8044Owen Lin value = String.format("%s: %s", DetailsHelper.getDetailsName( 1894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen context, key), value); 1904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1914105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mItems.add(value); 1924105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1934105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1944105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 195b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen @Override 1964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public boolean areAllItemsEnabled() { 1974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return false; 1984105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 1994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 200b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen @Override 2014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public boolean isEnabled(int position) { 2024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return false; 2034105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2044105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 2057817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 2064105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public int getCount() { 2074105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return mItems.size(); 2084105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2094105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 2107817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 2114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public Object getItem(int position) { 2124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return mDetails.getDetail(position); 2134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 2157817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 2164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public long getItemId(int position) { 2174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return position; 2184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 2207817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 2214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public View getView(int position, View convertView, ViewGroup parent) { 2224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen TextView tv; 2234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen if (convertView == null) { 224b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin tv = (TextView) LayoutInflater.from(mActivity.getAndroidContext()).inflate( 2254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen R.layout.details, parent, false); 2264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } else { 2274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen tv = (TextView) convertView; 2284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen tv.setText(mItems.get(position)); 2304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen return tv; 2314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 2337817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 2344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public void onAddressAvailable(String address) { 2354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen mItems.set(mLocationIndex, address); 236b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen notifyDataSetChanged(); 2374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen 2407817979db0c52ffeacb951625b1e821eba303285Ahbong Chang @Override 2414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen public void setCloseListener(CloseListener listener) { 242a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen mListener = listener; 2434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen } 2444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen} 245