126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen/*
226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * Copyright (C) 2013 The Android Open Source Project
326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen *
426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * Licensed under the Apache License, Version 2.0 (the "License");
526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * you may not use this file except in compliance with the License.
626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * You may obtain a copy of the License at
726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen *
826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen *      http://www.apache.org/licenses/LICENSE-2.0
926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen *
1026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * Unless required by applicable law or agreed to in writing, software
1126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * distributed under the License is distributed on an "AS IS" BASIS,
1226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * See the License for the specific language governing permissions and
1426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen * limitations under the License.
1526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen */
1626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
1726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenpackage com.android.settings.nfc;
1826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
1926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.content.Context;
200e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.content.Intent;
210e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.net.Uri;
2226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.os.Bundle;
230e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.os.Handler;
240e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.os.Message;
2526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.preference.Preference;
2626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.preference.PreferenceManager;
2726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.preference.PreferenceScreen;
285c3052936883038d25b2afe52c2dd023e9aa6812Svetoslavimport android.provider.Settings;
29b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenenimport android.text.TextUtils;
30da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.util.Log;
31da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.view.LayoutInflater;
320e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.Menu;
330e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.MenuInflater;
340e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.MenuItem;
3526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.view.View;
3626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.view.View.OnClickListener;
37da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.view.ViewGroup;
38da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.widget.ImageView;
3926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.widget.RadioButton;
40da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.widget.TextView;
4126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
420e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport com.android.internal.content.PackageMonitor;
43b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenenimport com.android.settings.HelpUtils;
4426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.R;
4526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.SettingsPreferenceFragment;
4626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.nfc.PaymentBackend.PaymentAppInfo;
4726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
4826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport java.util.List;
4926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
5026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenpublic class PaymentSettings extends SettingsPreferenceFragment implements
5126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        OnClickListener {
5226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    public static final String TAG = "PaymentSettings";
53da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen    private LayoutInflater mInflater;
5426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    private PaymentBackend mPaymentBackend;
550e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor();
560e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
57da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen
5826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    @Override
5926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    public void onCreate(Bundle icicle) {
6026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        super.onCreate(icicle);
6126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
6226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        mPaymentBackend = new PaymentBackend(getActivity());
63da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
640e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        setHasOptionsMenu(true);
6526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    }
6626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
6726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    public void refresh() {
6826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        PreferenceManager manager = getPreferenceManager();
6926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        PreferenceScreen screen = manager.createPreferenceScreen(getActivity());
7026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        // Get all payment services
7126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        List<PaymentAppInfo> appInfos = mPaymentBackend.getPaymentAppInfos();
7226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        if (appInfos != null && appInfos.size() > 0) {
7326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            // Add all payment apps
7426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            for (PaymentAppInfo appInfo : appInfos) {
7526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen                PaymentAppPreference preference =
7626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen                        new PaymentAppPreference(getActivity(), appInfo, this);
7726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen                preference.setTitle(appInfo.caption);
78da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen                if (appInfo.banner != null) {
79da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen                    screen.addPreference(preference);
80da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen                } else {
81da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen                    // Ignore, no banner
82da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen                    Log.e(TAG, "Couldn't load banner drawable of service " + appInfo.componentName);
83da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen                }
8426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            }
8526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        }
86da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        TextView emptyText = (TextView) getView().findViewById(R.id.nfc_payment_empty_text);
87b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen        TextView learnMore = (TextView) getView().findViewById(R.id.nfc_payment_learn_more);
88da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        ImageView emptyImage = (ImageView) getView().findViewById(R.id.nfc_payment_tap_image);
89da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        if (screen.getPreferenceCount() == 0) {
90da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            emptyText.setVisibility(View.VISIBLE);
91b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            learnMore.setVisibility(View.VISIBLE);
92da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            emptyImage.setVisibility(View.VISIBLE);
93b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            getListView().setVisibility(View.GONE);
94da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        } else {
95da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            emptyText.setVisibility(View.GONE);
96b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            learnMore.setVisibility(View.GONE);
97da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            emptyImage.setVisibility(View.GONE);
98b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            getListView().setVisibility(View.VISIBLE);
99da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        }
1000e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        setPreferenceScreen(screen);
101da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen    }
102da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen
103da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen    @Override
104da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen    public View onCreateView(LayoutInflater inflater, ViewGroup container,
105da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            Bundle savedInstanceState) {
106da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        super.onCreateView(inflater, container, savedInstanceState);
107da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        View v = mInflater.inflate(R.layout.nfc_payment, container, false);
108b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen        TextView learnMore = (TextView) v.findViewById(R.id.nfc_payment_learn_more);
109b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen        learnMore.setOnClickListener(new OnClickListener() {
110b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            @Override
111b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            public void onClick(View v) {
112b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                String helpUrl;
113b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                if (!TextUtils.isEmpty(helpUrl = getResources().getString(
114b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                        R.string.help_url_nfc_payment))) {
115b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                    final Uri fullUri = HelpUtils.uriWithAddedParameters(
116b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                            PaymentSettings.this.getActivity(), Uri.parse(helpUrl));
117b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                    Intent intent = new Intent(Intent.ACTION_VIEW, fullUri);
118b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
119b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                            | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
120b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                    startActivity(intent);
121b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                } else {
122b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                    Log.e(TAG, "Help url not set.");
123b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen                }
124b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen            }
125b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen        });
126da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen        return v;
12726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    }
12826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
12926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    @Override
13026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    public void onClick(View v) {
13126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        if (v.getTag() instanceof PaymentAppInfo) {
13226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            PaymentAppInfo appInfo = (PaymentAppInfo) v.getTag();
13326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            if (appInfo.componentName != null) {
13426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen                mPaymentBackend.setDefaultPaymentApp(appInfo.componentName);
13526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            }
13626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            refresh();
13726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        }
13826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    }
13926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
14026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    @Override
14126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    public void onResume() {
14226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        super.onResume();
1430e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false);
14426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        refresh();
14526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    }
14626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
1470e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    @Override
1480e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    public void onPause() {
1490e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        mSettingsPackageMonitor.unregister();
1500e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        super.onPause();
1510e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    }
1520e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
1530e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    @Override
1540e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
1550e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        super.onCreateOptionsMenu(menu, inflater);
1565c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav        String searchUri = Settings.Secure.getString(getContentResolver(),
1575c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav                Settings.Secure.PAYMENT_SERVICE_SEARCH_URI);
1585c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav        if (!TextUtils.isEmpty(searchUri)) {
1595c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav            MenuItem menuItem = menu.add(R.string.nfc_payment_menu_item_add_service);
1605c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav            menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM);
1615c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav            menuItem.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse(searchUri)));
1625c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav        }
1630e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    }
1640e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
1650e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    private final Handler mHandler = new Handler() {
1660e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        @Override
1670e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        public void dispatchMessage(Message msg) {
1680e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen            refresh();
1690e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        }
1700e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    };
1710e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
1720e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    private class SettingsPackageMonitor extends PackageMonitor {
1730e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        @Override
1740e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        public void onPackageAdded(String packageName, int uid) {
1750e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen           mHandler.obtainMessage().sendToTarget();
1760e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        }
1770e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
1780e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        @Override
1790e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        public void onPackageAppeared(String packageName, int reason) {
1800e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen            mHandler.obtainMessage().sendToTarget();
1810e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        }
1820e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
1830e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        @Override
1840e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        public void onPackageDisappeared(String packageName, int reason) {
1850e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen            mHandler.obtainMessage().sendToTarget();
1860e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        }
1870e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
1880e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        @Override
1890e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        public void onPackageRemoved(String packageName, int uid) {
1900e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen            mHandler.obtainMessage().sendToTarget();
1910e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen        }
1920e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen    }
1930e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen
19426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    public static class PaymentAppPreference extends Preference {
19526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        private final OnClickListener listener;
19626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        private final PaymentAppInfo appInfo;
19726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
19826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        public PaymentAppPreference(Context context, PaymentAppInfo appInfo,
19926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen                OnClickListener listener) {
20026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            super(context);
20126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            setLayoutResource(R.layout.nfc_payment_option);
20226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            this.appInfo = appInfo;
20326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            this.listener = listener;
20426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        }
20526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
20626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        @Override
20726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        protected void onBindView(View view) {
20826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            super.onBindView(view);
20926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
21026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            view.setOnClickListener(listener);
21126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            view.setTag(appInfo);
21226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen
21326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            RadioButton radioButton = (RadioButton) view.findViewById(android.R.id.button1);
21426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen            radioButton.setChecked(appInfo.isDefault);
215da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen
216da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            ImageView banner = (ImageView) view.findViewById(R.id.banner);
217da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen            banner.setImageDrawable(appInfo.banner);
21826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen        }
21926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen    }
220b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen}
221