DialogDetailsView.java revision b5bc8833b142985652a0438ae7d64ff5477b590e
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.Activity;
204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.app.AlertDialog;
214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.app.Dialog;
224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.content.Context;
234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.content.DialogInterface;
24a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chenimport android.content.DialogInterface.OnDismissListener;
254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.text.format.Formatter;
264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.LayoutInflater;
274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.View;
284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.view.ViewGroup;
294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.widget.BaseAdapter;
30a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millarimport android.widget.ListView;
314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport android.widget.TextView;
324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
33b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.R;
34b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.app.GalleryActivity;
35b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.common.Utils;
36b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.data.MediaDetails;
37b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsAddressResolver.AddressResolvingListener;
38b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsHelper.CloseListener;
39b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsHelper.DetailsSource;
40b5bc8833b142985652a0438ae7d64ff5477b590eRay Chenimport com.android.gallery3d.ui.DetailsHelper.DetailsViewContainer;
41b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen
424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport java.util.ArrayList;
434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenimport java.util.Map.Entry;
444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chenpublic class DialogDetailsView implements DetailsViewContainer {
464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    @SuppressWarnings("unused")
474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private static final String TAG = "DialogDetailsView";
484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
49b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen    private final GalleryActivity mContext;
504105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private DetailsAdapter mAdapter;
514105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private MediaDetails mDetails;
52b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen    private final DetailsSource mSource;
534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private int mIndex;
544105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private Dialog mDialog;
55a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen    private CloseListener mListener;
564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public DialogDetailsView(GalleryActivity activity, DetailsSource source) {
584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mContext = activity;
594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mSource = source;
604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void show() {
634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        reloadDetails(mSource.getIndex());
644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mDialog.show();
654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void hide() {
684105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mDialog.hide();
694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void reloadDetails(int indexHint) {
724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        int index = mSource.findIndex(indexHint);
734105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (index == -1) return;
744105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        MediaDetails details = mSource.getDetails();
754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (details != null) {
764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            if (mIndex == index && mDetails == details) return;
774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mIndex = index;
784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mDetails = details;
794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            setDetails(details);
804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public boolean isVisible() {
844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        return mDialog.isShowing();
854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private void setDetails(MediaDetails details) {
884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mAdapter = new DetailsAdapter(details);
894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        String title = String.format(
904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                mContext.getAndroidContext().getString(R.string.details_title),
914105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                mIndex + 1, mSource.size());
92a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar        ListView detailsList = (ListView) LayoutInflater.from(mContext.getAndroidContext()).inflate(
93a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar                R.layout.details_list, null, false);
94a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar        detailsList.setAdapter(mAdapter);
954105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mDialog = new AlertDialog.Builder((Activity) mContext)
96a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar            .setView(detailsList)
974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            .setTitle(title)
984105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            .setPositiveButton(R.string.close, new DialogInterface.OnClickListener() {
994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                public void onClick(DialogInterface dialog, int whichButton) {
1004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    mDialog.dismiss();
1014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                }
1024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            })
1034105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            .create();
104a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen
105a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen        mDialog.setOnDismissListener(new OnDismissListener() {
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) {
1194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            Context context = mContext.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();
132924a510c32087410cd8e922a915c0486feb6790dRay Chen                        value = DetailsHelper.resolveAddress(mContext, 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.
1764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        Utils.assertTrue(valueObj != null, "%s's value is Null",
1774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                                DetailsHelper.getDetailsName(context, detail.getKey()));
1784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        value = valueObj.toString();
1794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
1804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                }
1814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                int key = detail.getKey();
1824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                if (details.hasUnit(key)) {
1834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    value = String.format("%s : %s %s", DetailsHelper.getDetailsName(
1844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            context, key), value, context.getString(details.getUnit(key)));
1854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                } else {
1864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    value = String.format("%s : %s", DetailsHelper.getDetailsName(
1874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            context, key), value);
1884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                }
1894105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                mItems.add(value);
1904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            }
1914105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
1924105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
193b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen        @Override
1944105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public boolean areAllItemsEnabled() {
1954105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return false;
1964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
1974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
198b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen        @Override
1994105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public boolean isEnabled(int position) {
2004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return false;
2014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2034105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public int getCount() {
2044105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return mItems.size();
2054105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2064105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2074105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public Object getItem(int position) {
2084105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return mDetails.getDetail(position);
2094105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2104105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public long getItemId(int position) {
2124105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return position;
2134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2154105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public View getView(int position, View convertView, ViewGroup parent) {
2164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            TextView tv;
2174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            if (convertView == null) {
2184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                tv = (TextView) LayoutInflater.from(mContext.getAndroidContext()).inflate(
2194105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        R.layout.details, parent, false);
2204105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            } else {
2214105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                tv = (TextView) convertView;
2224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            }
2234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            tv.setText(mItems.get(position));
2244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return tv;
2254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void onAddressAvailable(String address) {
2284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mItems.set(mLocationIndex, address);
229b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen            notifyDataSetChanged();
2304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
2324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void setCloseListener(CloseListener listener) {
234a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen        mListener = listener;
2354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
2364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen}
237