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