/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settings.nfc; import android.content.ComponentName; import android.content.DialogInterface; import android.content.Intent; import android.nfc.cardemulation.CardEmulation; import android.os.Bundle; import android.util.Log; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.settings.R; import com.android.settings.nfc.PaymentBackend.PaymentAppInfo; import java.util.List; public final class PaymentDefaultDialog extends AlertActivity implements DialogInterface.OnClickListener { public static final String TAG = "PaymentDefaultDialog"; private static final int PAYMENT_APP_MAX_CAPTION_LENGTH = 40; private PaymentBackend mBackend; private ComponentName mNewDefault; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mBackend = new PaymentBackend(this); Intent intent = getIntent(); ComponentName component = intent.getParcelableExtra( CardEmulation.EXTRA_SERVICE_COMPONENT); String category = intent.getStringExtra(CardEmulation.EXTRA_CATEGORY); setResult(RESULT_CANCELED); if (!buildDialog(component, category)) { finish(); } } @Override public void onClick(DialogInterface dialog, int which) { switch (which) { case BUTTON_POSITIVE: mBackend.setDefaultPaymentApp(mNewDefault); setResult(RESULT_OK); break; case BUTTON_NEGATIVE: break; } } private boolean buildDialog(ComponentName component, String category) { if (component == null || category == null) { Log.e(TAG, "Component or category are null"); return false; } if (!CardEmulation.CATEGORY_PAYMENT.equals(category)) { Log.e(TAG, "Don't support defaults for category " + category); return false; } // Check if passed in service exists PaymentAppInfo requestedPaymentApp = null; PaymentAppInfo defaultPaymentApp = null; List<PaymentAppInfo> services = mBackend.getPaymentAppInfos(); for (PaymentAppInfo service : services) { if (component.equals(service.componentName)) { requestedPaymentApp = service; } if (service.isDefault) { defaultPaymentApp = service; } } if (requestedPaymentApp == null) { Log.e(TAG, "Component " + component + " is not a registered payment service."); return false; } // Get current mode and default component ComponentName defaultComponent = mBackend.getDefaultPaymentApp(); if (defaultComponent != null && defaultComponent.equals(component)) { Log.e(TAG, "Component " + component + " is already default."); return false; } mNewDefault = component; // Compose dialog; get final AlertController.AlertParams p = mAlertParams; p.mTitle = getString(R.string.nfc_payment_set_default_label); if (defaultPaymentApp == null) { String formatString = getString(R.string.nfc_payment_set_default); String msg = String.format(formatString, sanitizePaymentAppCaption(requestedPaymentApp.label.toString())); p.mMessage = msg; } else { String formatString = getString(R.string.nfc_payment_set_default_instead_of); String msg = String.format(formatString, sanitizePaymentAppCaption(requestedPaymentApp.label.toString()), sanitizePaymentAppCaption(defaultPaymentApp.label.toString())); p.mMessage = msg; } p.mPositiveButtonText = getString(R.string.yes); p.mNegativeButtonText = getString(R.string.no); p.mPositiveButtonListener = this; p.mNegativeButtonListener = this; setupAlert(); return true; } private String sanitizePaymentAppCaption(String input) { String sanitizedString = input.replace('\n', ' ').replace('\r', ' ').trim(); if (sanitizedString.length() > PAYMENT_APP_MAX_CAPTION_LENGTH) { return sanitizedString.substring(0, PAYMENT_APP_MAX_CAPTION_LENGTH); } return sanitizedString; } }