Кошелек быстрого доступа

Функция «Быстрый доступ к кошельку», доступная начиная с Android 11, позволяет пользователю получать доступ к платежным картам и соответствующим пропускам непосредственно из меню питания. Основные сценарии использования включают выбор подходящего способа оплаты перед совершением транзакции на NFC-терминале, а также быстрый доступ к авиабилетам и другим пропускам на предстоящие мероприятия.

В Android 12 и более поздних версиях функция быстрого доступа к кошельку доступна в панели инструментов, как показано на рисунках 1 и 2.

Функция быстрого доступа к кошельку в оттенке
Рисунок 1. Функция быстрого доступа к кошельку (устройство заблокировано).
Функция быстрого доступа к кошельку в оттенке
Рисунок 2. Функция быстрого доступа к кошельку (устройство разблокировано).

В Android 11 эта функция доступна через меню питания, как показано на рисунке 3.

Функция быстрого доступа к кошельку в меню питания
Рисунок 3. Функция быстрого доступа к кошельку в меню питания.

Требования

Для использования функции быстрого доступа к кошельку ваше устройство должно поддерживать NFC. Эта функция привязывается к QuickAccessWalletService стандартного приложения для платежей NFC, а это значит, что устройство также должно поддерживать эмуляцию карты на основе NFC (HCE) .

Обзор функций

Кошелек быстрого доступа состоит из двух частей: пользовательского интерфейса кошелька быстрого доступа и поставщика карт кошелька быстрого доступа.

В Android 12 и более поздних версиях Wallet UI работает в System UI и находится в frameworks/base/packages/SystemUI/src/com/android/systemui/wallet . В Android 11 Wallet UI, расположенный в platform/packages/apps/QuickAccessWallet , должен быть установлен и добавлен в белый список.

Приложение Quick Access Wallet для бесконтактных платежей является приложением по умолчанию для NFC-платежей. Пользователи могут одновременно установить несколько приложений для NFC-платежей, но только приложение по умолчанию может отображать карты в меню питания. Вы можете указать, какое приложение для NFC-платежей будет установлено по умолчанию изначально, но пользователи могут выбрать другое приложение в настройках. Если установлено только одно приложение для NFC-платежей, оно автоматически становится приложением по умолчанию (см. CardEmulationManager ).

Выполнение

Для предоставления доступа к картам через пользовательский интерфейс быстрого доступа к кошельку приложения для NFC-платежей должны реализовывать QuickAccessWalletService . Платежные приложения должны включать запись в манифесте, рекламирующую эту услугу.

Чтобы гарантировать, что только пользовательский интерфейс системы может подключаться к QuickAccessWalletService , приложение для NFC-платежей должно запросить разрешение android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE . Запрос этого разрешения гарантирует, что только пользовательский интерфейс системы сможет подключаться к QuickAccessWalletService .

<service
     android:name=".MyQuickAccessWalletService"
     android:label="@string/my_default_tile_label"
     android:icon="@drawable/my_default_icon_label"
     android:logo="@drawable/my_wallet_logo"
     android:permission="android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE">
     <intent-filter>
         <action android:name="android.service.quickaccesswallet.QuickAccessWalletService" />
         <category android:name="android.intent.category.DEFAULT"/>
     </intent-filter>
     <meta-data android:name="android.quickaccesswallet"
          android:resource="@xml/quickaccesswallet_configuration" />
     <meta-data
          android:name="android.quickaccesswallet.tile"
          android:resource="@drawable/my_default_tile_icon"/>
</service>

Дополнительная информация о кошельке содержится в связанном XML-файле:

<quickaccesswallet-service
   xmlns:android="http://schemas.android.com/apk/res/android"
   android:settingsActivity="com.example.android.SettingsActivity"
   android:shortcutLongLabel="@string/my_wallet_empty_state_text"
   android:shortcutShortLabel="@string/my_wallet_button_text"
   android:targetActivity="com.example.android.WalletActivity"/>

Далее, платежное приложение должно реализовать QuickAccessWalletService :

public class MyQuickAccessWalletService extends QuickAccessWalletService {

    @Override
    public void onWalletCardsRequested(
            GetWalletCardsRequest request,
            GetWalletCardsCallback callback) {
        GetWalletCardsResponse response = // generate response
        callback.onSuccess(response);
    }

    @Override
    public void onWalletCardSelected(SelectWalletCardRequest request) {
        // selecting a card should ensure that it is used when making an NFC payment
    }

    @Override
    public void onWalletDismissed() {
        // May un-select card if the wallet app has the concept of a 'default'
        // payment method
    }
}

Если HostApduService начинает обрабатывать NFC-транзакцию и, как следствие, запускает действие для отображения хода и результата платежа, он также должен попытаться получить ссылку на связанный QuickAccessWalletService и вызвать QuickAccessWalletService#sendEvent с типом события TYPE_NFC_PAYMENT_STARTED . Это приведет к закрытию интерфейса быстрого доступа к кошельку, что позволит пользователю беспрепятственно наблюдать за ходом платежа.

Дополнительную документацию по реализации QuickAccessWalletService см. в разделе QuickAccessWalletService и в тесте TestQuickAccessWalletService CTS.

Включение быстрого доступа к интерфейсу кошелька в Android 11

Чтобы настроить быстрый доступ к кошельку из меню питания в Android 11, добавьте цель QuickAccessWallet в сборку и активируйте плагин globalactions.wallet , добавив выделенную жирным шрифтом строку из приведенного ниже примера кода в файл overlay/frameworks/base/packages/SystemUI/res/values/config.xml .

<resources>
    ...
    <!-- SystemUI Plugins that can be loaded on user builds. -->
    <string-array name="config_pluginWhitelist" translatable="false">
        <item>com.android.systemui</item>
        <item>com.android.systemui.plugin.globalactions.wallet</item>
    </string-array>
</resources>

Укажите приложение для платежей NFC по умолчанию в файле конфигурации настроек, используя def_nfc_payment_component .

Приложение для платежей NFC по умолчанию должно предоставлять доступ к QuickAccessWalletService для отправки карт в кошелек быстрого доступа. Если приложение для платежей NFC по умолчанию не предоставляет этот сервис, пользовательский интерфейс кошелька будет скрыт.

Детали реализации QuickAccessWalletService

QuickAccessWalletService имеет три абстрактных метода, которые необходимо реализовать: onWalletCardsRequested , onWalletCardSelected и onWalletDismissed . Приведенная ниже диаграмма последовательности иллюстрирует последовательность вызовов при просмотре кошелька быстрого доступа непосредственно перед платежом NFC.

Диаграмма последовательности быстрого доступа к кошельку

Пример последовательности вызовов при просмотре приложения «Быстрый доступ к кошельку».
Рисунок 4. Пример последовательности вызовов при просмотре приложения «Быстрый доступ к кошельку».

Не все представления кошелька быстрого доступа сопровождаются платежом NFC, но на рисунке 4 выше показаны все возможности QuickAccessWalletService . В этом примере поставщик карт кошелька быстрого доступа реализует элементы, выделенные синим цветом. Предполагается, что платежные карты хранятся на устройстве в базе данных и доступ к ним осуществляется через интерфейс с именем PaymentCardManager . Кроме того, предполагается, что действие с именем PaymentActivity отображает результат платежа NFC. Процесс выглядит следующим образом:

  1. Пользователь выполняет жест для вызова приложения «Кошелек быстрого доступа».
  2. Интерфейс быстрого доступа к кошельку (часть системного интерфейса) проверяет менеджер пакетов, экспортирует ли стандартное приложение для NFC-платежей QuickAccessWalletService .

    • Если услуга не экспортирована, кошелек быстрого доступа не отображается.
  3. Интерфейс быстрого доступа к кошельку привязывается к QuickAccessWalletService и вызывает метод onWalletCardsRequested . Этот метод принимает объект запроса, содержащий данные о количестве и размере предоставляемых карт, а также функцию обратного вызова. Функция обратного вызова может быть вызвана из фонового потока.

  4. QuickAccessWalletService вычисляет, какие карты он хочет отобразить, а затем вызывает метод onSuccess для предоставленной функции обратного вызова. Рекомендуется, чтобы сервис выполнял эти действия в фоновом потоке.

  5. Как только карты отобразятся, пользовательский интерфейс системы уведомляет QuickAccessWalletService о том, что первая карта выбрана, вызывая onWalletCardSelected .

    • onWalletCardSelected вызывается каждый раз, когда пользователь выбирает новую карту.
    • onWalletCardSelected может быть вызван даже в том случае, если текущая выбранная карта не изменилась.
  6. Когда пользователь закрывает окно быстрого доступа к кошельку, пользовательский интерфейс системы уведомляет об этом QuickAccessWalletService , вызывая onWalletDismissed .

В приведенном выше примере пользователь подносит телефон в зону действия NFC-платежного терминала, в то время как отображается кошелек. Ключевым компонентом обработки NFC-платежей является HostApduService , который необходимо реализовать для обработки APDU, предоставляемых NFC-считывателем (подробнее см. Эмуляция карты на основе хоста ). Предполагается, что платежное приложение запускает действие для отображения хода и результата взаимодействия с NFC-терминалом. Однако интерфейс быстрого доступа к кошельку отображается поверх окна приложения, что означает, что действие оплаты перекрывается интерфейсом быстрого доступа к кошельку. Чтобы исправить это, приложение должно уведомить системный интерфейс о необходимости закрыть интерфейс быстрого доступа к кошельку. Это можно сделать, получив ссылку на связанный QuickAccessWalletService и вызвав sendWalletServiceEvent с типом события TYPE_NFC_PAYMENT_STARTED .

Пример реализации QuickAccessWalletService

/** Sample implementation of {@link QuickAccessWalletService} */
@RequiresApi(VERSION_CODES.R)
public class MyQuickAccessWalletService extends QuickAccessWalletService {

  private static final String TAG = "QAWalletSvc";
  private ExecutorService executor;
  private PaymentCardManager paymentCardManager;

  @Override
  public void onCreate() {
    super.onCreate();
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      Log.w(TAG, "Should not run on pre-R devices");
      stopSelf();
      return;
    }
    executor = Executors.newSingleThreadExecutor();
    paymentCardManager = new PaymentCardManager();
  }

  @Override
  public void onDestroy() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.shutdownNow();
  }

  @Override
  public void onWalletCardsRequested(
      @NonNull GetWalletCardsRequest request, @NonNull GetWalletCardsCallback callback) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.submit(
        () -> {
          List<PaymentCard> paymentCards = paymentCardManager.getCards();
          int maxCards = Math.min(paymentCards.size(), request.getMaxCards());
          List<WalletCard> walletCards = new ArrayList<>(maxCards);
          int selectedIndex = 0;
          int cardWidthPx = request.getCardWidthPx();
          int cardHeightPx = request.getCardHeightPx();
          for (int index = 0; index < maxCards; index++) {
            PaymentCard paymentCard = paymentCards.get(index);
            WalletCard walletCard =
                new WalletCard.Builder(
                        paymentCard.getCardId(),
                        paymentCard.getCardImage(cardWidthPx, cardHeightPx),
                        paymentCard.getContentDescription(),
                        paymentCard.getPendingIntent())
                    .build();
            walletCards.add(walletCard);
            if (paymentCard.isSelected()) {
              selectedIndex = index;
            }
          }
          GetWalletCardsResponse response =
              new GetWalletCardsResponse(walletCards, selectedIndex);
          callback.onSuccess(response);
        });
  }

  @Override
  public void onWalletCardSelected(@NonNull SelectWalletCardRequest request) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.submit(
        () -> paymentCardManager.selectCardById(request.getCardId()));
  }

  @Override
  public void onWalletDismissed() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.submit(() -> {
      paymentCardManager.removeCardOverrides();
    });
  }
}

Для получения более подробной информации о QuickAccessWalletService см. справочник по API QuickAccessWalletService .

Разрешения

В манифесте для QuickAccessWalletService необходимо указать разрешение android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE , введенное в Android 11. Это разрешение на уровне подписи, которое находится в ведении системного интерфейса, а это значит, что только процесс системного интерфейса может привязываться к реализациям QuickAccessWalletService . Следует учитывать, что приложения, установленные сторонними разработчиками, могут претендовать на это разрешение и получить полный доступ к данным QuickAccessWalletService на устройствах под управлением Android 10 или ниже. Чтобы предотвратить это, рекомендуется проверять версию сборки в onCreate и включать службу только на устройствах под управлением Android 11 и выше. Никаких других разрешений приложения, кроме тех, которые необходимы для предоставления платежных услуг эмуляции карты, не требуется.

Если стандартное приложение для NFC-платежей не реализует или не экспортирует QuickAccessWalletService , интерфейс быстрого доступа к кошельку не отображается.

Настройки в Android 12

Чтобы включить или отключить быстрый доступ к кошельку на экране блокировки, пользователи могут использовать переключатель «Показать кошелек» в разделе «Настройки» > «Дисплей» > «Экран блокировки» . Чтобы отключить кошелек в панели настроек, пользователям необходимо вручную изменить его в панели быстрых настроек.

Переключатель позволяет включить или отключить кошелек на экране блокировки.

Рисунок 5. Отображение переключателя кошелька на странице экрана блокировки в настройках.

Настройки в Android 11

Пользователи могут отключить функцию быстрого доступа к кошельку в приложении «Настройки». Страница настроек находится в разделе «Настройки» > «Система» > «Жесты» > «Карты и пропуска» .

Страница настроек для включения или отключения функции быстрого доступа к кошельку.
Рисунок 6. Страница настроек для включения или отключения функции быстрого доступа к кошельку.

Настройка

Добавить представление «Быстрый доступ к кошельку» в другое место в системном интерфейсе.

Интерфейс быстрого доступа к кошельку реализован как системный плагин . Хотя в реализации AOSP он используется в GlobalActionsDialog (отображается при длительном нажатии), вы можете перенести эту функцию за другой жест, если сохраните контракт, указанный в интерфейсе плагина.

public interface GlobalActionsPanelPlugin extends Plugin {

  /** Invoked when the view is shown */
  PanelViewController onPanelShown(Callbacks callbacks, boolean deviceLocked);

  /** Callbacks for interacting with the view container */
  interface Callbacks {
    /** Dismisses the view */
    void dismissGlobalActionsMenu();

    /** Starts a PendingIntent, dismissing the keyguard if necessary. */
    void startPendingIntentDismissingKeyguard(PendingIntent pendingIntent);
  }

  /** Provides the Quick Access Wallet view */
  interface PanelViewController {

    /** Returns the QuickAccessWallet view, which may take any size */
    View getPanelContent();

    /** Invoked when the view is dismissed */
    void onDismissed();

    /** Invoked when the device is either locked or unlocked. */
    void onDeviceLockStateChanged(boolean locked);
  }
}

Интерфейс быстрого доступа к кошельку реализует интерфейсы GlobalActionsPanelPlugin и PanelViewController . GlobalActionsDialog получает экземпляр плагина кошелька, используя com.android.systemui.Dependency :

GlobalActionsPanelPlugin mPanelPlugin =
    Dependency.get(ExtensionController.class)
        .newExtension(GlobalActionsPanelPlugin.class)
        .withPlugin(GlobalActionsPanelPlugin.class)
        .build()
        .get();

После проверки того, что плагин не равен null и что возвращаемый функцией onPanelShown объект PanelViewController также не равен null, диалоговое окно прикрепляет View предоставленное функцией getPanelContent , к своему собственному View и предоставляет соответствующие обратные вызовы для системных событий.

// Construct a Wallet PanelViewController.
// `this` implements GlobalActionsPanelPlugin.Callbacks
GlobalActionsPanelPlugin.PanelViewController mPanelController =
    mPanelPlugin.onPanelShown(this, !mKeyguardStateController.isUnlocked());

// Attach the view
FrameLayout panelContainer = findViewById(R.id.my_panel_container);
FrameLayout.LayoutParams panelParams =
    new FrameLayout.LayoutParams(
        FrameLayout.LayoutParams.MATCH_PARENT,
        FrameLayout.LayoutParams.MATCH_PARENT);
panelContainer.addView(mPanelController.getPanelContent(), panelParams);

// Respond to unlock events (if the view can be accessed while the phone is locked)
keyguardStateController.addCallback(new KeyguardStateController.Callback() {
  @Override
  public void onUnlockedChanged() {
    boolean unlocked = keyguardStateController.isUnlocked()
        || keyguardStateController.canDismissLockScreen();
    mPanelController.onDeviceLockStateChanged(unlocked);
  }
});

// Implement GlobalActionsPanelPlugin.Callbacks
@Override
public void dismissGlobalActionsMenu() {
  dismissDialog();
}
@Override
public void startPendingIntentDismissingKeyguard(PendingIntent pendingIntent) {
  mActivityStarter.startPendingIntentDismissingKeyguard(pendingIntent);
}

// Notify the wallet when the container view is dismissed
mPanelController.onDismissed();

Чтобы удалить «Быстрый доступ к кошельку» из меню питания, исключите цель QuickAccessWallet из сборки системы. Чтобы удалить «Быстрый доступ к кошельку» из меню питания, но добавить его в другое представление, предоставляемое системным пользовательским интерфейсом, включите цель сборки и удалите ссылки на GlobalActionsPanelPlugin из GlobalActionsImpl .

Установить параметры по умолчанию

Android 12

В Android 12 и более поздних версиях приложение «Быстрый доступ к кошельку» всегда отображается в панели быстрых настроек. Видимость приложения «Быстрый доступ к кошельку» на экране блокировки регулируется следующим параметром безопасности: LOCKSCREEN_SHOW_WALLET . Этот параметр определяет, отображается ли значок приложения «Быстрый доступ к кошельку» в правом нижнем углу экрана блокировки. По умолчанию этот параметр установлен в true , но пользователь может отключить его в разделе «Настройки» > «Дисплей» > «Экран блокировки» > «Показать кошелек» .

Android 11

В Android 11 видимость быстрого доступа к кошельку регулируется двумя параметрами безопасности: GLOBAL_ACTIONS_PANEL_ENABLED и GLOBAL_ACTIONS_PANEL_AVAILABLE . Параметр AVAILABLE определяет, можно ли включить или выключить эту функцию в настройках. Параметр устанавливается в true в WalletPluginService . Если QuickAccessWallet не включен в сборку, параметр остается в false . Параметр ENABLED по умолчанию установлен в true в том же месте, но может быть отключен пользователем в настройках. Чтобы изменить поведение по умолчанию, измените WalletPluginService#enableFeatureInSettings .

Валидация

Для проверки правильности вашей реализации кошелька быстрого доступа запустите тесты CTS и ручные тесты. Изменения в плагине также должны проверяться включенными в него тестами robolectric .

Тесты CTS

Запустите тесты CTS, расположенные по адресу cts/tests/quickaccesswallet .

Ручные тесты для Android 12

Для тестирования основных функций кошелька быстрого доступа требуется платежный терминал NFC (реальный или имитированный) и приложение для платежей NFC, реализующее интерфейс QuickAccessWalletService (приложение кошелька). К основным функциям, которые необходимо протестировать, относятся: доступность, обнуление состояния, выбор карты и поведение на экране блокировки.

Доступность

  • Если стандартное приложение для NFC-платежей не поддерживает эту функцию, то быстрый доступ к кошельку будет недоступен ни в быстрых настройках, ни на экране блокировки.
  • Если стандартное приложение для NFC-платежей поддерживает эту функцию, то в панели быстрых настроек можно получить доступ к кошельку быстрого доступа.
  • Если стандартное приложение для NFC-платежей поддерживает эту функцию и если параметр LOCKSCREEN_SHOW_WALLET имеет значение true , то кошелек быстрого доступа будет доступен на экране блокировки.
  • Если стандартное приложение для NFC-платежей поддерживает эту функцию и если параметр LOCKSCREEN_SHOW_WALLET имеет значение false , то быстрый доступ к кошельку будет недоступен на экране блокировки.

Нулевое состояние

  • Если QuickAccessWalletService включен и экспортирован, но не предоставляет никаких карт, в области «Тень» отображается плитка, как показано в примере на рисунке 7. Щелчок по плитке открывает приложение для NFC-платежей по умолчанию.

    Пример плитки в тени, отображающей приложение для NFC-платежей по умолчанию.

    Рисунок 7. Пример плитки в тени, показывающий приложение для NFC-платежей по умолчанию.

  • Нажатие на пустое окно состояния, как показано на рисунке 8, открывает стандартное приложение для NFC-платежей. Это пустое окно состояния отображается только тогда, когда у пользователя осталась одна карта в кошельке, он удаляет карту со страницы сведений о карте, а затем возвращается к экрану кошелька.

  • На экране блокировки отображается значок кошелька.

Пустое отображение состояния в кошельке быстрого доступа

Рисунок 8. Пустое отображение состояния в пользовательском интерфейсе кошелька быстрого доступа.

Ненулевое состояние

  • Если приложение «Кошелек» содержит одну или несколько карт, то плитка в тени будет отображаться, как показано на рисунке 9.

    Пример плитки в тени, когда в приложении «Кошелек» есть одна или несколько карт.

    Рисунок 9. Пример плитки в тени, когда в приложении «Кошелек» есть одна или несколько карт.

  • При нажатии на плитку открывается карусель карточек.

  • На экране блокировки отображается кнопка, открывающая раздел «Быстрый доступ к кошельку».

    Быстрый доступ к интерфейсу кошелька с отображением карты.

    Рисунок 10. Пользовательский интерфейс быстрого доступа к кошельку с отображаемой картой.

  • Если отображаемая карта представляет собой способ оплаты с использованием NFC, то при поднесении телефона к терминалу оплаты NFC будет использован именно этот способ оплаты, а окно кошелька закроется.

  • Нажатие на отображаемую карточку открывает подробную информацию о действиях, связанных с этой карточкой.

  • Если QuickAccessWalletService предоставляет несколько карт, пользователь может переключаться между ними с помощью жеста смахивания.

  • В дополнительном меню есть один пункт: открыть настройки экрана блокировки, чтобы пользователь мог изменить параметр « Показать кошелек» .

Тесты состояния блокировки

  • Если телефон заблокирован, кошелек отображается в панели быстрых настроек с описанием « Добавить карту» , ​​если в приложении для платежей по умолчанию нет карты, или «Разблокировать для использования», если карты есть в приложении для платежей по умолчанию.
  • Если телефон заблокирован, видимость кошелька на экране блокировки регулируется параметром Secure.LOCKSCREEN_SHOW_WALLET , который находится в настройках.
  • Если телефон заблокирован, LOCKSCREEN_SHOW_WALLET имеет false , и в стандартном приложении для NFC-платежей нет карты, кошелек не отображается на экране блокировки.
  • Если телефон заблокирован, LOCKSCREEN_SHOW_WALLET имеет true , и в стандартном приложении для NFC-платежей нет карты, кошелек не отображается на экране блокировки.
  • Если телефон заблокирован, LOCKSCREEN_SHOW_WALLET имеет true , и карты существуют в стандартном приложении для NFC-платежей, то кошелек отображается на экране блокировки.
  • Разблокировка телефона во время отображения приложения «Кошелек» на экране блокировки приводит к повторному запросу карт, что может привести к изменению их содержимого.

тесты на доступность

  • Пользователи Talkback могут перемещаться по экрану кошелька, проводя пальцем влево и вправо, а также прослушивая описания содержимого карт.
  • При включенной функции Talkback, проводя пальцем влево и вправо, можно поочередно выбрать каждую карту. Пользователи Talkback могут выбрать и использовать способ оплаты NFC на платежном терминале NFC.

Ручные тесты для Android 11

Для тестирования основных функций кошелька быстрого доступа требуется платежный терминал NFC (реальный или имитированный) и приложение для платежей NFC, реализующее интерфейс QuickAccessWalletService (приложение кошелька). К основным функциям, которые необходимо протестировать, относятся доступность, обнуление состояния, выбор карты и поведение на экране блокировки.

Доступность

  • Если параметр GLOBAL_ACTIONS_PANEL_ENABLED имеет true и стандартное приложение для NFC-платежей поддерживает эту функцию, то доступ к кошельку быстрого доступа возможен.
  • Если параметр GLOBAL_ACTIONS_PANEL_ENABLED имеет false , а стандартное приложение для NFC-платежей поддерживает эту функцию, то доступ к кошельку быстрого доступа будет закрыт .
  • Если параметр GLOBAL_ACTIONS_PANEL_ENABLED имеет true , а стандартное приложение для NFC-платежей не поддерживает эту функцию, то доступ к кошельку быстрого доступа будет закрыт.
  • Если параметр GLOBAL_ACTIONS_PANEL_ENABLED имеет false , и стандартное приложение для NFC-платежей не поддерживает эту функцию, доступ к кошельку быстрого доступа будет закрыт.

Нулевое состояние

  • Если QuickAccessWalletService включен и экспортирован, но не предоставляет никаких карт, в пользовательском интерфейсе Quick Access Wallet отображается пустое состояние.
  • Нажатие на пустое поле состояния открывает приложение кошелька.

    Пустое отображение состояния в пользовательском интерфейсе быстрого доступа к кошельку.
    Рисунок 11. Пустое отображение состояния в пользовательском интерфейсе кошелька быстрого доступа.

Ненулевое состояние

  • Если приложение-кошелек предоставляет одну или несколько карт, они отображаются в интерфейсе быстрого доступа к кошельку.

    Быстрый доступ к интерфейсу кошелька с отображением карты.
    Рисунок 12. Пользовательский интерфейс быстрого доступа к кошельку с отображаемой картой.
  • Если отображаемая карта представляет собой способ оплаты с использованием NFC, то при поднесении телефона к терминалу оплаты NFC будет использован именно этот способ оплаты, а окно кошелька закроется.

  • Щелчок по отображаемой карте закрывает окно кошелька и открывает подробную информацию об операциях с этой картой.

  • Если QuickAccessWalletService предоставляет несколько карт, пользователь может переключаться между ними с помощью жеста смахивания.

  • В меню дополнительных пунктов содержатся два пункта: один открывает приложение «Кошелек», а другой — экран «Показать карты и пропуска» в настройках.

Тесты состояния блокировки

  • Если телефон заблокирован, видимость содержимого кошелька контролируется параметром Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT , который можно изменить в настройках.
  • Если телефон заблокирован и POWER_MENU_LOCK_SHOW_CONTENT имеет false , то кошелек не отображается.
  • Если телефон заблокирован и POWER_MENU_LOCK_SHOW_CONTENT имеет true , отображается кошелек.
  • Разблокировка телефона во время отображения приложения «Кошелек» на экране блокировки приводит к повторному запросу данных карт, что может привести к изменению содержимого карт.

тесты на доступность

  • Пользователи TalkBack могут перемещаться по экрану кошелька, проводя пальцем влево и вправо, а также прослушивая описания содержимого карт.
  • При включенной функции TalkBack, проводя пальцем влево и вправо, можно поочередно выбрать каждую карту. Пользователи TalkBack могут выбрать и использовать способ оплаты NFC на платежном терминале NFC.