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; 2500dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenenimport android.preference.CheckBoxPreference; 2626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.preference.Preference; 2700dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenenimport android.preference.Preference.OnPreferenceChangeListener; 2826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.preference.PreferenceManager; 2926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.preference.PreferenceScreen; 305c3052936883038d25b2afe52c2dd023e9aa6812Svetoslavimport android.provider.Settings; 31b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenenimport android.text.TextUtils; 32da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.util.Log; 33da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.view.LayoutInflater; 340e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.Menu; 350e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.MenuInflater; 360e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.MenuItem; 3726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.view.View; 3826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.view.View.OnClickListener; 39da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.view.ViewGroup; 40da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.widget.ImageView; 4126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.widget.RadioButton; 42da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.widget.TextView; 4326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 440e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport com.android.internal.content.PackageMonitor; 45b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenenimport com.android.settings.HelpUtils; 4626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.R; 4726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.SettingsPreferenceFragment; 4826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.nfc.PaymentBackend.PaymentAppInfo; 4926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 5026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport java.util.List; 5126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 5226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenpublic class PaymentSettings extends SettingsPreferenceFragment implements 5300dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen OnClickListener, OnPreferenceChangeListener { 5426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public static final String TAG = "PaymentSettings"; 55da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen private LayoutInflater mInflater; 5626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen private PaymentBackend mPaymentBackend; 570e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen private final PackageMonitor mSettingsPackageMonitor = new SettingsPackageMonitor(); 580e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 59da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen 6026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen @Override 6126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public void onCreate(Bundle icicle) { 6226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen super.onCreate(icicle); 6326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 6426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen mPaymentBackend = new PaymentBackend(getActivity()); 65da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 660e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen setHasOptionsMenu(true); 6726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 6826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 6926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public void refresh() { 7026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen PreferenceManager manager = getPreferenceManager(); 7126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen PreferenceScreen screen = manager.createPreferenceScreen(getActivity()); 7200dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen 7326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen // Get all payment services 7426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen List<PaymentAppInfo> appInfos = mPaymentBackend.getPaymentAppInfos(); 7526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen if (appInfos != null && appInfos.size() > 0) { 7626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen // Add all payment apps 7726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen for (PaymentAppInfo appInfo : appInfos) { 7826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen PaymentAppPreference preference = 7926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen new PaymentAppPreference(getActivity(), appInfo, this); 8026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen preference.setTitle(appInfo.caption); 81da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen if (appInfo.banner != null) { 82da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen screen.addPreference(preference); 83da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } else { 84da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen // Ignore, no banner 85da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen Log.e(TAG, "Couldn't load banner drawable of service " + appInfo.componentName); 86da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } 8726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 8826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 89da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen TextView emptyText = (TextView) getView().findViewById(R.id.nfc_payment_empty_text); 90b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen TextView learnMore = (TextView) getView().findViewById(R.id.nfc_payment_learn_more); 91da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen ImageView emptyImage = (ImageView) getView().findViewById(R.id.nfc_payment_tap_image); 92da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen if (screen.getPreferenceCount() == 0) { 93da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen emptyText.setVisibility(View.VISIBLE); 94b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen learnMore.setVisibility(View.VISIBLE); 95da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen emptyImage.setVisibility(View.VISIBLE); 96b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen getListView().setVisibility(View.GONE); 97da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } else { 9800dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen CheckBoxPreference foreground = new CheckBoxPreference(getActivity()); 9900dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen boolean foregroundMode = mPaymentBackend.isForegroundMode(); 10000dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen foreground.setPersistent(false); 10100dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen foreground.setTitle(getString(R.string.nfc_payment_favor_foreground)); 10200dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen foreground.setChecked(foregroundMode); 10300dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen foreground.setOnPreferenceChangeListener(this); 10400dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen screen.addPreference(foreground); 105da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen emptyText.setVisibility(View.GONE); 106b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen learnMore.setVisibility(View.GONE); 107da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen emptyImage.setVisibility(View.GONE); 108b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen getListView().setVisibility(View.VISIBLE); 109da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } 1100e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen setPreferenceScreen(screen); 111da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } 112da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen 113da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen @Override 114da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen public View onCreateView(LayoutInflater inflater, ViewGroup container, 115da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen Bundle savedInstanceState) { 116da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen super.onCreateView(inflater, container, savedInstanceState); 117da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen View v = mInflater.inflate(R.layout.nfc_payment, container, false); 118b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen TextView learnMore = (TextView) v.findViewById(R.id.nfc_payment_learn_more); 119b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen learnMore.setOnClickListener(new OnClickListener() { 120b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen @Override 121b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen public void onClick(View v) { 122b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen String helpUrl; 123b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen if (!TextUtils.isEmpty(helpUrl = getResources().getString( 124b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen R.string.help_url_nfc_payment))) { 125b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen final Uri fullUri = HelpUtils.uriWithAddedParameters( 126b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen PaymentSettings.this.getActivity(), Uri.parse(helpUrl)); 127b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen Intent intent = new Intent(Intent.ACTION_VIEW, fullUri); 128b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK 129b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); 130b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen startActivity(intent); 131b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen } else { 132b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen Log.e(TAG, "Help url not set."); 133b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen } 134b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen } 135b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen }); 136da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen return v; 13726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 13826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 13926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen @Override 14026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public void onClick(View v) { 14126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen if (v.getTag() instanceof PaymentAppInfo) { 14226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen PaymentAppInfo appInfo = (PaymentAppInfo) v.getTag(); 14326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen if (appInfo.componentName != null) { 14426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen mPaymentBackend.setDefaultPaymentApp(appInfo.componentName); 14526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 14626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen refresh(); 14726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 14826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 14926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 15026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen @Override 15126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public void onResume() { 15226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen super.onResume(); 1530e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen mSettingsPackageMonitor.register(getActivity(), getActivity().getMainLooper(), false); 15426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen refresh(); 15526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 15626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 1570e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1580e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onPause() { 1590e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen mSettingsPackageMonitor.unregister(); 1600e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen super.onPause(); 1610e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1620e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1630e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1640e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 1650e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen super.onCreateOptionsMenu(menu, inflater); 1665c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav String searchUri = Settings.Secure.getString(getContentResolver(), 1675c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav Settings.Secure.PAYMENT_SERVICE_SEARCH_URI); 1685c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav if (!TextUtils.isEmpty(searchUri)) { 1695c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav MenuItem menuItem = menu.add(R.string.nfc_payment_menu_item_add_service); 1705c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); 1715c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav menuItem.setIntent(new Intent(Intent.ACTION_VIEW,Uri.parse(searchUri))); 1725c3052936883038d25b2afe52c2dd023e9aa6812Svetoslav } 1730e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1740e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1750e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen private final Handler mHandler = new Handler() { 1760e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1770e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void dispatchMessage(Message msg) { 1780e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen refresh(); 1790e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1800e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen }; 1810e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1820e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen private class SettingsPackageMonitor extends PackageMonitor { 1830e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1840e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onPackageAdded(String packageName, int uid) { 1850e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen mHandler.obtainMessage().sendToTarget(); 1860e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1870e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1880e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1890e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onPackageAppeared(String packageName, int reason) { 1900e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen mHandler.obtainMessage().sendToTarget(); 1910e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1920e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1930e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1940e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onPackageDisappeared(String packageName, int reason) { 1950e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen mHandler.obtainMessage().sendToTarget(); 1960e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1970e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1980e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1990e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onPackageRemoved(String packageName, int uid) { 2000e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen mHandler.obtainMessage().sendToTarget(); 2010e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 2020e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 2030e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 20426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public static class PaymentAppPreference extends Preference { 20526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen private final OnClickListener listener; 20626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen private final PaymentAppInfo appInfo; 20726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 20826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public PaymentAppPreference(Context context, PaymentAppInfo appInfo, 20926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen OnClickListener listener) { 21026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen super(context); 21126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen setLayoutResource(R.layout.nfc_payment_option); 21226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen this.appInfo = appInfo; 21326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen this.listener = listener; 21426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 21526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 21626515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen @Override 21726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen protected void onBindView(View view) { 21826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen super.onBindView(view); 21926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 22026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen RadioButton radioButton = (RadioButton) view.findViewById(android.R.id.button1); 22126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen radioButton.setChecked(appInfo.isDefault); 22200dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen radioButton.setOnClickListener(listener); 22300dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen radioButton.setTag(appInfo); 224da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen 225da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen ImageView banner = (ImageView) view.findViewById(R.id.banner); 226da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen banner.setImageDrawable(appInfo.banner); 22700dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen banner.setOnClickListener(listener); 22800dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen banner.setTag(appInfo); 22900dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen } 23000dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen } 23100dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen 23200dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen @Override 23300dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen public boolean onPreferenceChange(Preference preference, Object newValue) { 23400dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen if (preference instanceof CheckBoxPreference) { 23500dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen mPaymentBackend.setForegroundMode(((Boolean) newValue).booleanValue()); 23600dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen return true; 23700dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen } else { 23800dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen return false; 23926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 24026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 241b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen} 242