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;
40e879326d76734277469ca2f387f436fd0e922c87Doris Liuimport com.android.gallery3d.ui.DetailsHelper.ResolutionResolvingListener;
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
49b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    private final AbstractGalleryActivity mActivity;
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
57b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin    public DialogDetailsView(AbstractGalleryActivity activity, DetailsSource source) {
58b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        mActivity = activity;
594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mSource = source;
604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
627817979db0c52ffeacb951625b1e821eba303285Ahbong Chang    @Override
634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void show() {
64995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        reloadDetails();
654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mDialog.show();
664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
687817979db0c52ffeacb951625b1e821eba303285Ahbong Chang    @Override
694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void hide() {
704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mDialog.hide();
714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
737817979db0c52ffeacb951625b1e821eba303285Ahbong Chang    @Override
74995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb    public void reloadDetails() {
75995c4566bed7df1aa48ba7e1351f964efa73880bMichael Kolb        int index = mSource.setIndex();
764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (index == -1) return;
774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        MediaDetails details = mSource.getDetails();
784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        if (details != null) {
794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            if (mIndex == index && mDetails == details) return;
804105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mIndex = index;
814105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mDetails = details;
824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            setDetails(details);
834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
844105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
864105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    private void setDetails(MediaDetails details) {
874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        mAdapter = new DetailsAdapter(details);
884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        String title = String.format(
89b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin                mActivity.getAndroidContext().getString(R.string.details_title),
904105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                mIndex + 1, mSource.size());
91b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        ListView detailsList = (ListView) LayoutInflater.from(mActivity.getAndroidContext()).inflate(
92a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar                R.layout.details_list, null, false);
93a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar        detailsList.setAdapter(mAdapter);
94b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin        mDialog = new AlertDialog.Builder(mActivity)
95a29127be09f74782dee7d6c18cf6dd50728652aaEvan Millar            .setView(detailsList)
964105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            .setTitle(title)
974105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            .setPositiveButton(R.string.close, new DialogInterface.OnClickListener() {
987817979db0c52ffeacb951625b1e821eba303285Ahbong Chang                @Override
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() {
1067817979db0c52ffeacb951625b1e821eba303285Ahbong Chang            @Override
107a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen            public void onDismiss(DialogInterface dialog) {
108a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen                if (mListener != null) {
109a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen                    mListener.onClose();
110a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen                }
111a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen            }
112a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen        });
1134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
1144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
115e879326d76734277469ca2f387f436fd0e922c87Doris Liu
116e879326d76734277469ca2f387f436fd0e922c87Doris Liu    private class DetailsAdapter extends BaseAdapter
117e879326d76734277469ca2f387f436fd0e922c87Doris Liu        implements AddressResolvingListener, ResolutionResolvingListener {
118b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen        private final ArrayList<String> mItems;
119b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen        private int mLocationIndex;
120e879326d76734277469ca2f387f436fd0e922c87Doris Liu        private int mWidthIndex = -1;
121e879326d76734277469ca2f387f436fd0e922c87Doris Liu        private int mHeightIndex = -1;
1224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
1234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public DetailsAdapter(MediaDetails details) {
124b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin            Context context = mActivity.getAndroidContext();
1254105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mItems = new ArrayList<String>(details.size());
1264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mLocationIndex = -1;
1274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            setDetails(context, details);
1284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
1294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
1304105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        private void setDetails(Context context, MediaDetails details) {
131e879326d76734277469ca2f387f436fd0e922c87Doris Liu            boolean resolutionIsValid = true;
132e879326d76734277469ca2f387f436fd0e922c87Doris Liu            String path = null;
1334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            for (Entry<Integer, Object> detail : details) {
1344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                String value;
1354105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                switch (detail.getKey()) {
1364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    case MediaDetails.INDEX_LOCATION: {
1374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        double[] latlng = (double[]) detail.getValue();
1384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        mLocationIndex = mItems.size();
139b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin                        value = DetailsHelper.resolveAddress(mActivity, latlng, this);
1404105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        break;
1414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
1424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    case MediaDetails.INDEX_SIZE: {
1434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        value = Formatter.formatFileSize(
1444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                                context, (Long) detail.getValue());
1454105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        break;
1464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
1474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    case MediaDetails.INDEX_WHITE_BALANCE: {
1484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        value = "1".equals(detail.getValue())
1494105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                                ? context.getString(R.string.manual)
1504105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                                : context.getString(R.string.auto);
1514105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        break;
1524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
1534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    case MediaDetails.INDEX_FLASH: {
1544105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        MediaDetails.FlashState flash =
1554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                                (MediaDetails.FlashState) detail.getValue();
1564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        // TODO: camera doesn't fill in the complete values, show more information
1574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        // when it is fixed.
1584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        if (flash.isFlashFired()) {
1594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            value = context.getString(R.string.flash_on);
1604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        } else {
1614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            value = context.getString(R.string.flash_off);
1624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        }
1634105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        break;
1644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
1654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    case MediaDetails.INDEX_EXPOSURE_TIME: {
1664105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        value = (String) detail.getValue();
1674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        double time = Double.valueOf(value);
1684105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        if (time < 1.0f) {
1694105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            value = String.format("1/%d", (int) (0.5f + 1 / time));
1704105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        } else {
1714105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            int integer = (int) time;
1724105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            time -= integer;
1734105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            value = String.valueOf(integer) + "''";
1744105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            if (time > 0.0001) {
1754105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                                value += String.format(" 1/%d", (int) (0.5f + 1 / time));
1764105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            }
1774105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        }
1784105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        break;
1794105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
180e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    case MediaDetails.INDEX_WIDTH:
181e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        mWidthIndex = mItems.size();
182e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        value = detail.getValue().toString();
183e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        if (value.equalsIgnoreCase("0")) {
184e879326d76734277469ca2f387f436fd0e922c87Doris Liu                            value = context.getString(R.string.unknown);
185e879326d76734277469ca2f387f436fd0e922c87Doris Liu                            resolutionIsValid = false;
186e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        }
187e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        break;
188e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    case MediaDetails.INDEX_HEIGHT: {
189e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        mHeightIndex = mItems.size();
190e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        value = detail.getValue().toString();
191e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        if (value.equalsIgnoreCase("0")) {
192e879326d76734277469ca2f387f436fd0e922c87Doris Liu                            value = context.getString(R.string.unknown);
193e879326d76734277469ca2f387f436fd0e922c87Doris Liu                            resolutionIsValid = false;
194e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        }
195e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        break;
196e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    }
197e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    case MediaDetails.INDEX_PATH:
198e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        // Get the path and then fall through to the default case
199e879326d76734277469ca2f387f436fd0e922c87Doris Liu                        path = detail.getValue().toString();
2004105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    default: {
2014105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        Object valueObj = detail.getValue();
2024105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        // This shouldn't happen, log its key to help us diagnose the problem.
203cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang                        if (valueObj == null) {
204cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang                            Utils.fail("%s's value is Null",
205cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang                                    DetailsHelper.getDetailsName(context, detail.getKey()));
206cfa105d3934c4dfa14f02b693bfa97c8d17d56a9Chih-Chung Chang                        }
2074105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        value = valueObj.toString();
2084105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                    }
2094105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                }
2104105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                int key = detail.getKey();
2114105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                if (details.hasUnit(key)) {
21202ec00b91039736d478c6e59ba90d5bbcd1a8044Owen Lin                    value = String.format("%s: %s %s", DetailsHelper.getDetailsName(
2134105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            context, key), value, context.getString(details.getUnit(key)));
2144105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                } else {
21502ec00b91039736d478c6e59ba90d5bbcd1a8044Owen Lin                    value = String.format("%s: %s", DetailsHelper.getDetailsName(
2164105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                            context, key), value);
2174105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                }
2184105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                mItems.add(value);
219e879326d76734277469ca2f387f436fd0e922c87Doris Liu                if (!resolutionIsValid) {
220e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    DetailsHelper.resolveResolution(path, this);
221e879326d76734277469ca2f387f436fd0e922c87Doris Liu                }
2224105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            }
2234105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2244105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
225b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen        @Override
2264105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public boolean areAllItemsEnabled() {
2274105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return false;
2284105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2294105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
230b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen        @Override
2314105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public boolean isEnabled(int position) {
2324105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return false;
2334105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2344105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2357817979db0c52ffeacb951625b1e821eba303285Ahbong Chang        @Override
2364105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public int getCount() {
2374105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return mItems.size();
2384105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2394105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2407817979db0c52ffeacb951625b1e821eba303285Ahbong Chang        @Override
2414105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public Object getItem(int position) {
2424105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return mDetails.getDetail(position);
2434105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2444105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2457817979db0c52ffeacb951625b1e821eba303285Ahbong Chang        @Override
2464105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public long getItemId(int position) {
2474105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return position;
2484105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2494105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2507817979db0c52ffeacb951625b1e821eba303285Ahbong Chang        @Override
2514105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public View getView(int position, View convertView, ViewGroup parent) {
2524105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            TextView tv;
2534105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            if (convertView == null) {
254b21b8e58a604f6c701245d84b141b5b87663192bOwen Lin                tv = (TextView) LayoutInflater.from(mActivity.getAndroidContext()).inflate(
2554105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                        R.layout.details, parent, false);
2564105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            } else {
2574105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen                tv = (TextView) convertView;
2584105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            }
2594105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            tv.setText(mItems.get(position));
2604105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            return tv;
2614105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
2624105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2637817979db0c52ffeacb951625b1e821eba303285Ahbong Chang        @Override
2644105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        public void onAddressAvailable(String address) {
2654105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen            mItems.set(mLocationIndex, address);
266b5bc8833b142985652a0438ae7d64ff5477b590eRay Chen            notifyDataSetChanged();
2674105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen        }
268e879326d76734277469ca2f387f436fd0e922c87Doris Liu
269e879326d76734277469ca2f387f436fd0e922c87Doris Liu        @Override
270e879326d76734277469ca2f387f436fd0e922c87Doris Liu        public void onResolutionAvailable(int width, int height) {
271e879326d76734277469ca2f387f436fd0e922c87Doris Liu            if (width == 0 || height == 0) return;
272e879326d76734277469ca2f387f436fd0e922c87Doris Liu            // Update the resolution with the new width and height
273e879326d76734277469ca2f387f436fd0e922c87Doris Liu            Context context = mActivity.getAndroidContext();
274e879326d76734277469ca2f387f436fd0e922c87Doris Liu            String widthString = String.format("%s: %d", DetailsHelper.getDetailsName(
275e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    context, MediaDetails.INDEX_WIDTH), width);
276e879326d76734277469ca2f387f436fd0e922c87Doris Liu            String heightString = String.format("%s: %d", DetailsHelper.getDetailsName(
277e879326d76734277469ca2f387f436fd0e922c87Doris Liu                    context, MediaDetails.INDEX_HEIGHT), height);
278e879326d76734277469ca2f387f436fd0e922c87Doris Liu            mItems.set(mWidthIndex, String.valueOf(widthString));
279e879326d76734277469ca2f387f436fd0e922c87Doris Liu            mItems.set(mHeightIndex, String.valueOf(heightString));
280e879326d76734277469ca2f387f436fd0e922c87Doris Liu            notifyDataSetChanged();
281e879326d76734277469ca2f387f436fd0e922c87Doris Liu        }
2824105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
2834105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen
2847817979db0c52ffeacb951625b1e821eba303285Ahbong Chang    @Override
2854105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    public void setCloseListener(CloseListener listener) {
286a4f0526dc8d993fb914d0e6505e22a1f30ad0e14Ray Chen        mListener = listener;
2874105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen    }
2884105e22d72d7a44e67cba4a58ad88018ed664d10Ray Chen}
289