| /* |
| * 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.nfc.cardemulation; |
| |
| import android.content.BroadcastReceiver; |
| import android.content.Context; |
| import android.content.DialogInterface; |
| import android.content.Intent; |
| import android.content.IntentFilter; |
| import android.content.pm.PackageManager; |
| import android.nfc.NfcAdapter; |
| import android.nfc.cardemulation.ApduServiceInfo; |
| import android.nfc.cardemulation.CardEmulation; |
| import android.os.Bundle; |
| import android.view.Window; |
| import android.view.WindowManager; |
| import android.widget.TextView; |
| |
| import com.android.internal.R; |
| import com.android.internal.app.AlertActivity; |
| import com.android.internal.app.AlertController; |
| |
| public class TapAgainDialog extends AlertActivity implements DialogInterface.OnClickListener { |
| public static final String ACTION_CLOSE = |
| "com.android.nfc.cardemulation.action.CLOSE_TAP_DIALOG"; |
| public static final String EXTRA_APDU_SERVICE = "apdu_service"; |
| |
| public static final String EXTRA_CATEGORY = "category"; |
| |
| // Variables below only accessed on the main thread |
| private CardEmulation mCardEmuManager; |
| private boolean mClosedOnRequest = false; |
| final BroadcastReceiver mReceiver = new BroadcastReceiver() { |
| @Override |
| public void onReceive(Context context, Intent intent) { |
| mClosedOnRequest = true; |
| finish(); |
| } |
| }; |
| |
| @Override |
| protected void onCreate(Bundle savedInstanceState) { |
| super.onCreate(savedInstanceState); |
| |
| setTheme(com.android.nfc.R.style.DiagAlertDayNight); |
| |
| final NfcAdapter adapter = NfcAdapter.getDefaultAdapter(this); |
| mCardEmuManager = CardEmulation.getInstance(adapter); |
| Intent intent = getIntent(); |
| String category = intent.getStringExtra(EXTRA_CATEGORY); |
| ApduServiceInfo serviceInfo = intent.getParcelableExtra(EXTRA_APDU_SERVICE); |
| IntentFilter filter = new IntentFilter(ACTION_CLOSE); |
| filter.addAction(Intent.ACTION_SCREEN_OFF); |
| registerReceiver(mReceiver, filter); |
| AlertController.AlertParams ap = mAlertParams; |
| |
| ap.mTitle = ""; |
| ap.mView = getLayoutInflater().inflate(com.android.nfc.R.layout.tapagain, null); |
| |
| PackageManager pm = getPackageManager(); |
| TextView tv = (TextView) ap.mView.findViewById(com.android.nfc.R.id.textview); |
| String description = serviceInfo.getDescription(); |
| if (description == null) { |
| CharSequence label = serviceInfo.loadLabel(pm); |
| if (label == null) { |
| finish(); |
| } else { |
| description = label.toString(); |
| } |
| } |
| if (CardEmulation.CATEGORY_PAYMENT.equals(category)) { |
| String formatString = getString(com.android.nfc.R.string.tap_again_to_pay); |
| tv.setText(String.format(formatString, description)); |
| } else { |
| String formatString = getString(com.android.nfc.R.string.tap_again_to_complete); |
| tv.setText(String.format(formatString, description)); |
| } |
| ap.mNegativeButtonText = getString(R.string.cancel); |
| setupAlert(); |
| Window window = getWindow(); |
| window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD); |
| } |
| |
| @Override |
| protected void onDestroy() { |
| super.onDestroy(); |
| unregisterReceiver(mReceiver); |
| } |
| |
| @Override |
| protected void onStop() { |
| super.onStop(); |
| if (!mClosedOnRequest) { |
| mCardEmuManager.setDefaultForNextTap(null); |
| } |
| } |
| |
| @Override |
| public void onClick(DialogInterface dialog, int which) { |
| finish(); |
| } |
| } |