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 199d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monkimport android.content.Context; 20cbcc76e8d32f95690d08258a91d58136cd9fb056Martijn Coenenimport android.content.Intent; 214d03c5b48980faba7eff60267696da346f595714Andre Eisenbachimport android.content.pm.PackageManager; 224302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoiimport android.content.res.Resources; 2326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.os.Bundle; 2439b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceManager; 2539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.PreferenceScreen; 260e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.Menu; 270e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.MenuInflater; 280e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenenimport android.view.MenuItem; 2926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport android.view.View; 30da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenenimport android.view.ViewGroup; 319d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 32265d3c2a0c36251bf8a9f571d7239b6dd404d942Tamas Berghammerimport com.android.internal.logging.nano.MetricsProto.MetricsEvent; 3326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.R; 3426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport com.android.settings.SettingsPreferenceFragment; 3582be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhangimport com.android.settings.search.BaseSearchIndexProvider; 3682be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhangimport com.android.settings.search.Indexable; 3782be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhangimport com.android.settings.search.SearchIndexableRaw; 3826515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 394302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoiimport java.util.ArrayList; 4026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenenimport java.util.List; 4126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 424302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoipublic class PaymentSettings extends SettingsPreferenceFragment implements Indexable { 4326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public static final String TAG = "PaymentSettings"; 444d03c5b48980faba7eff60267696da346f595714Andre Eisenbach 454d03c5b48980faba7eff60267696da346f595714Andre Eisenbach static final String PAYMENT_KEY = "payment"; 464d03c5b48980faba7eff60267696da346f595714Andre Eisenbach 4726515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen private PaymentBackend mPaymentBackend; 48da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen 4926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen @Override 506507613ebcd22e4691c2af92a5c161bd327db336Fan Zhang public int getMetricsCategory() { 519d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren return MetricsEvent.NFC_PAYMENT; 528a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren } 538a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren 548a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren @Override 55024668a2c5291bbd29b93b8aba8b28b06d16a2cbDoris Ling protected int getPreferenceScreenResId() { 56024668a2c5291bbd29b93b8aba8b28b06d16a2cbDoris Ling return R.xml.nfc_payment_settings; 57024668a2c5291bbd29b93b8aba8b28b06d16a2cbDoris Ling } 58024668a2c5291bbd29b93b8aba8b28b06d16a2cbDoris Ling 59024668a2c5291bbd29b93b8aba8b28b06d16a2cbDoris Ling @Override 6026515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public void onCreate(Bundle icicle) { 6126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen super.onCreate(icicle); 6226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 6326515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen mPaymentBackend = new PaymentBackend(getActivity()); 640e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen setHasOptionsMenu(true); 65fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen 664a01283309f737395a01f0fae68a369dc537a8daDoris Ling final PreferenceScreen screen = getPreferenceScreen(); 6700dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen 682fe90293a16352c119acd6014ad0b9583896cd5eJason Monk List<PaymentBackend.PaymentAppInfo> appInfos = mPaymentBackend.getPaymentAppInfos(); 6926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen if (appInfos != null && appInfos.size() > 0) { 70fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen NfcPaymentPreference preference = 7139b467482d1bf256a111c757e9b7621c6f523271Jason Monk new NfcPaymentPreference(getPrefContext(), mPaymentBackend); 724d03c5b48980faba7eff60267696da346f595714Andre Eisenbach preference.setKey(PAYMENT_KEY); 73fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen screen.addPreference(preference); 7439b467482d1bf256a111c757e9b7621c6f523271Jason Monk NfcForegroundPreference foreground = new NfcForegroundPreference(getPrefContext(), 75fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen mPaymentBackend); 7600dbb74b8d699510ece683fc7ab12fc2343fa5d5Martijn Coenen screen.addPreference(foreground); 77da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } 78da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen } 79da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen 80da6c0ba382c1c2c9b98f11a1ef9e572472654e27Martijn Coenen @Override 812fe90293a16352c119acd6014ad0b9583896cd5eJason Monk public void onViewCreated(View view, Bundle savedInstanceState) { 822fe90293a16352c119acd6014ad0b9583896cd5eJason Monk super.onViewCreated(view, savedInstanceState); 832fe90293a16352c119acd6014ad0b9583896cd5eJason Monk ViewGroup contentRoot = (ViewGroup) getListView().getParent(); 842fe90293a16352c119acd6014ad0b9583896cd5eJason Monk View emptyView = getActivity().getLayoutInflater().inflate( 852fe90293a16352c119acd6014ad0b9583896cd5eJason Monk R.layout.nfc_payment_empty, contentRoot, false); 862fe90293a16352c119acd6014ad0b9583896cd5eJason Monk contentRoot.addView(emptyView); 872fe90293a16352c119acd6014ad0b9583896cd5eJason Monk setEmptyView(emptyView); 882fe90293a16352c119acd6014ad0b9583896cd5eJason Monk } 892fe90293a16352c119acd6014ad0b9583896cd5eJason Monk 902fe90293a16352c119acd6014ad0b9583896cd5eJason Monk @Override 9126515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen public void onResume() { 9226515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen super.onResume(); 93fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen mPaymentBackend.onResume(); 9426515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 9526515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen 960e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 970e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onPause() { 980e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen super.onPause(); 99fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen mPaymentBackend.onPause(); 1000e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen } 1010e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen 1020e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen @Override 1030e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 1040e940d6c00d06578c4c0f89a95e5d31c8073fbc1Martijn Coenen super.onCreateOptionsMenu(menu, inflater); 105fe58b534f6a1bf63dadb18dae13c59ed8a014eecMartijn Coenen MenuItem menuItem = menu.add(R.string.nfc_payment_how_it_works); 106cbcc76e8d32f95690d08258a91d58136cd9fb056Martijn Coenen Intent howItWorksIntent = new Intent(getActivity(), HowItWorks.class); 107cbcc76e8d32f95690d08258a91d58136cd9fb056Martijn Coenen menuItem.setIntent(howItWorksIntent); 108cbcc76e8d32f95690d08258a91d58136cd9fb056Martijn Coenen menuItem.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_NEVER); 10926515da08707b6f8182cc8b0ed5e01e97aa92a96Martijn Coenen } 1109d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk 1114302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = 1124302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi new BaseSearchIndexProvider() { 1134302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi @Override 1144302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) { 1154302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>(); 1164302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi final Resources res = context.getResources(); 1174302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi 1184302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi // Add fragment title 1194302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi SearchIndexableRaw data = new SearchIndexableRaw(context); 1207e0df1e48c6a6555a791d32073062357ac0007d9Andre Eisenbach data.key = PAYMENT_KEY; 1214302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi data.title = res.getString(R.string.nfc_payment_settings_title); 1224302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi data.screenTitle = res.getString(R.string.nfc_payment_settings_title); 1234302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi data.keywords = res.getString(R.string.keywords_payment_settings); 1244302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi result.add(data); 1254302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi return result; 1264302dfa853a962c3bb4898c568a62a2834998056Ruchi Kandoi } 1274d03c5b48980faba7eff60267696da346f595714Andre Eisenbach 1284d03c5b48980faba7eff60267696da346f595714Andre Eisenbach @Override 1294d03c5b48980faba7eff60267696da346f595714Andre Eisenbach public List<String> getNonIndexableKeys(Context context) { 13082be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhang final List<String> nonVisibleKeys = super.getNonIndexableKeys(context); 1314d03c5b48980faba7eff60267696da346f595714Andre Eisenbach final PackageManager pm = context.getPackageManager(); 13282be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhang if (pm.hasSystemFeature(PackageManager.FEATURE_NFC)) { 13382be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhang return nonVisibleKeys; 13482be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhang } 1354d03c5b48980faba7eff60267696da346f595714Andre Eisenbach nonVisibleKeys.add(PAYMENT_KEY); 1364d03c5b48980faba7eff60267696da346f595714Andre Eisenbach return nonVisibleKeys; 1374d03c5b48980faba7eff60267696da346f595714Andre Eisenbach } 13882be5f0c3fa4b9511e1e7e4c4e9c20cf31a8294fFan Zhang }; 139b412e18296cf3958585efdaec15c8b9d28bd2c50Martijn Coenen} 140