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