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