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

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

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

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

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

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

Требования

Для использования функции Quick Access Wallet на вашем устройстве должен быть 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 изначально будет установлено по умолчанию , но пользователи могут выбрать другое приложение в настройках. Если установлено только одно приложение для оплаты NFC, оно автоматически становится приложением по умолчанию (см. CardEmulationManager ).

Выполнение

Для предоставления карт в Quick Access Wallet UI платежные приложения 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 и в тесте CTS TestQuickAccessWalletService .

Включить быстрый доступ к кошельку UI в 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 для предоставления карт в Quick Access Wallet. Если приложение для оплаты NFC по умолчанию не экспортирует эту службу, пользовательский интерфейс кошелька будет скрыт.

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

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

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

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

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

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

    • Если сервис не экспортирован, кошелек быстрого доступа не отображается.
  3. Quick Access Wallet UI привязывается к 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();

После проверки того, что плагин не является пустым и что PanelViewController возвращаемый onPanelShown , не является пустым, диалоговое окно прикрепляет 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();

Чтобы удалить Quick Access Wallet из меню питания, исключите цель QuickAccessWallet из системной сборки. Чтобы удалить Quick Access Wallet из меню питания, но добавить его в другой представленный System UI вид, включите цель сборки и удалите ссылки на GlobalActionsPanelPlugin из GlobalActionsImpl .

Установить конфигурации по умолчанию

Андроид 12

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

Андроид 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

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

Доступность

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

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

  • Если QuickAccessWalletService включен и экспортирован, но не предоставляет никаких карт, плитка в Shade отображается так, как показано в примере на рисунке 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

Для тестирования основных функций Quick Access Wallet требуется платежный терминал 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 включен и экспортирован, но не предоставляет никаких карт, в пользовательском интерфейсе быстрого доступа к кошельку отображается пустое состояние.
  • При нажатии на пустое состояние открывается приложение кошелька.

    Пустое состояние просмотра в пользовательском интерфейсе быстрого доступа к кошельку
    Рисунок 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.