Быстрый доступ к Кошельку

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

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

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

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

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

Требования

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

Общая информация

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

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

Поставщик карт для быстрого доступа к Кошельку – это приложение для бесконтактной оплаты через 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 и тесте CTS TestQuickAccessWalletService.

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

Сведения о реализации 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();
    });
  }
}

Подробнее о QuickAccessWalletServiceQuickAccessWalletService API…

Разрешения

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

Если платежное приложение по умолчанию не реализует или не экспортирует 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 и что PanelViewController, возвращенный onPanelShown, не равен 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 не поддерживает эту функцию, быстрый доступ к Кошельку будет недоступен ни на заблокированном экране, ни в быстрых настройках.
  • Если приложение для бесконтактной оплаты по умолчанию поддерживает эту функцию, быстрый доступ к Кошельку можно получить в панели быстрых настроек.
  • Если приложение для бесконтактных платежей по умолчанию поддерживает эту функцию и для параметра LOCKSCREEN_SHOW_WALLET задано значение true, Кошелек с быстрым доступом будет доступен на заблокированном экране.
  • Если приложение для бесконтактной оплаты по умолчанию поддерживает эту функцию и параметр LOCKSCREEN_SHOW_WALLET имеет значение false, Кошелек быстрого доступа будет недоступен на заблокированном экране.

Начальное состояние

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

    Пример плитки на панели уведомлений, на которой показано платежное приложение NFC по умолчанию

    Рисунок 7. Пример значка в шторке, на котором показано платежное приложение NFC по умолчанию.

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

  • На заблокированном экране виден значок Кошелька.

Пустое состояние в Кошельке с быстрым доступом

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

Уровень громкости выше нуля

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

    Пример параметра в шторке, когда в приложении &quot;Кошелек&quot; есть одна или несколько карт

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

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

  • На заблокированном экране есть кнопка, которая открывает Кошелек.

    Интерфейс быстрого доступа к Кошельку с отображенной картой

    Рисунок 10. Интерфейс Кошелька для быстрого доступа с одной картой.

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

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

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

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

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

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

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

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

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

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

Доступность

  • Если для параметра GLOBAL_ACTIONS_PANEL_ENABLED задано значение true и приложение для бесконтактной оплаты по умолчанию поддерживает эту функцию, Кошелек с быстрым доступом будет доступен.
  • Если параметр GLOBAL_ACTIONS_PANEL_ENABLED имеет значение false и приложение для бесконтактной оплаты по умолчанию поддерживает эту функцию, быстрый доступ к Кошельку невозможен.
  • Если параметр 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.