Portfel z szybkim dostępem

Funkcja Quick Access Wallet, dostępna w Androidzie 11, umożliwia użytkownikowi dostęp do kart płatniczych i odpowiednich kart dostępu bezpośrednio z menu zasilania. Główne przypadki użycia obejmują wybór odpowiedniej formy płatności przed dokonaniem transakcji w terminalu NFC oraz szybki dostęp do lotów i innych kart na nadchodzące wydarzenia.

W Androidzie 12 lub nowszym funkcja Szybki dostęp do portfela jest dostępna w panelu, jak pokazano na rysunkach 1 i 2.

Szybki dostęp do Portfela w panelu powiadomień
Rysunek 1. Funkcja Szybki dostęp do Portfela (na zablokowanym urządzeniu).
Szybki dostęp do Portfela w panelu powiadomień
Rysunek 2. Funkcja Szybki dostęp do Portfela (odblokowane urządzenie).

W Androidzie 11 ta funkcja jest dostępna w menu zasilania (patrz rys. 3).

Funkcja Szybki dostęp do Portfela w menu zasilania
Rysunek 3. Funkcja Szybki dostęp do Portfela w menu zasilania.

Wymagania

Aby korzystać z funkcji Szybki dostęp do Portfela, musisz mieć na urządzeniu komunikację NFC. Ta funkcja wiąże się z QuickAccessWalletService domyślnej aplikacji do płatności NFC, co oznacza, że urządzenie musi też obsługiwać emulację karty hosta (HCE).

Omówienie funkcji

Szybki dostęp do Portfela składa się z 2 części: interfejsu Szybkiego dostępu do Portfela i dostawcy kart Szybkiego dostępu do Portfela.

W Androidzie 12 lub nowszym interfejs Portfel działa w interfejsie systemowym i znajduje się w sekcji frameworks/base/packages/SystemUI/src/com/android/systemui/wallet. W Androidzie 11 interfejs Portfela, który znajduje się w sekcji platform/packages/apps/QuickAccessWallet, musi zostać zainstalowany i umieszczony na białej liście.

Dostawca karty Portfela Szybkiego Dostępu to domyślna aplikacja do płatności NFC. Użytkownicy mogą mieć zainstalowane jednocześnie kilka aplikacji do płatności NFC, ale tylko domyślna aplikacja do płatności NFC może wyświetlać karty w menu zasilania. Możesz określić, która aplikacja do płatności NFC ma być domyślnie ustawiona, ale użytkownicy mogą wybrać inną aplikację w Ustawieniach. Jeśli zainstalowana jest tylko 1 aplikacja do płatności NFC, automatycznie staje się ona domyślną (patrz: CardEmulationManager).

Implementacja

Aby udostępniać karty w interfejsie Portfela Szybkiego Dostępu, aplikacje do płatności NFC muszą implementować interfejs QuickAccessWalletService. Aplikacje do płatności muszą zawierać wpis w pliku manifestu reklamujący usługę.

Aby mieć pewność, że tylko interfejs systemowy może się powiązać z QuickAccessWalletService, aplikacja do płatności NFC musi wymagać uprawnienia android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE. Wymaganie tego uprawnienia zapewnia, że tylko interfejs UI systemu może się wiązać z elementem 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>

Dodatkowe informacje o portfelu są zawarte w połączonym pliku 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"/>

Następnie aplikacja do płatności musi zaimplementować 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
    }
}

Jeśli usługa HostApduService zacznie obsługiwać transakcję NFC i w konsekwencji uruchomi aktywność wyświetlającą postęp i wynik płatności, powinna też spróbować uzyskać odwołanie do powiązanej usługi QuickAccessWalletService i wywołać usługę QuickAccessWalletService#sendEvent z typem zdarzenia TYPE_NFC_PAYMENT_STARTED. Spowoduje to zamknięcie interfejsu portfela Szybki dostęp, dzięki czemu użytkownik będzie miał pełny widok aktywności związanej z płatnościami.

Więcej informacji o wdrażaniu QuickAccessWalletService znajdziesz w dokumentacji QuickAccessWalletService oraz w teście CTS TestQuickAccessWalletService.

Włączanie interfejsu Portfela Szybkiego Dostępu w Androidzie 11

Aby skonfigurować portfel Quick Access Wallet tak, aby był dostępny w menu zasilania w Androidzie 11, dodaj do kompilacji obiekt QuickAccessWallet i włącz wtyczkę globalactions.wallet, dodając do pliku overlay/frameworks/base/packages/SystemUI/res/values/config.xml wiersz pogrubiony w przykładowym kodzie poniżej.

<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>

pliku konfiguracyjnym ustawień użyj parametru def_nfc_payment_component, aby określić domyślną aplikację do płatności NFC.

Domyślna aplikacja do płatności NFC musi udostępniaćQuickAccessWalletServicekarty w Portfelu Szybkiego Dostępu. Jeśli domyślna aplikacja do płatności NFC nie eksportuje tej usługi, interfejs portfela jest ukryty.

Szczegóły implementacji QuickAccessWalletService

QuickAccessWalletService ma 3 abstrakcyjne metody, które muszą zostać zaimplementowane: onWalletCardsRequested, onWalletCardSelected i onWalletDismissed. Poniższy diagram sekwencji przedstawia sekwencję wywołań, gdy widok Wallet Szybki dostęp jest wyświetlany bezpośrednio przed płatnością NFC.

Schemat sekwencji Szybki dostęp do Portfela

Przykładowa sekwencja połączeń podczas wyświetlania Portfela Szybki dostęp
Rysunek 4. Przykładowa sekwencja wywołania, gdy wyświetlany jest Szybki dostęp do Portfela

Płatność NFC nie jest dostępna we wszystkich widokach Portfela Szybkiego Dostępu, ale rycina 4 powyżej przedstawia wszystkie możliwości QuickAccessWalletService. W tym przykładzie dostawca karty Szybki dostęp do Portfela implementuje elementy zaznaczone na niebiesko. Zakłada się, że karty płatnicze są przechowywane na urządzeniu w bazie danych i dostęp do nich jest możliwy za pomocą interfejsu o nazwie PaymentCardManager. Zakładamy też, że aktywność o nazwie PaymentActivity wyświetla wynik płatności NFC. Proces przebiega w ten sposób:

  1. Użytkownik wykonuje gest, aby wyświetlić Portfel Szybkiego Dostępu.
  2. Interfejs użytkownika Portfela Szybkiego Dostępu (część interfejsu System UI) sprawdza menedżera pakietów, aby sprawdzić, czy domyślna aplikacja do płatności NFC eksportuje dane.QuickAccessWalletService

    • Jeśli usługa nie jest eksportowana, Portfel Szybki dostęp nie jest wyświetlany.
  3. Interfejs użytkownika Portfela Szybki dostęp łączy się z QuickAccessWalletService i wywołuje onWalletCardsRequested. Ta metoda przyjmuje obiekt żądania zawierający dane o liczbie i rozmiarze kart, które można podać, oraz funkcję wywołania zwrotnego. Funkcja callback może być wywoływana z wątku w tle.

  4. QuickAccessWalletService oblicza karty, które chce wyświetlić, a następnie wywołuje metodę onSuccess w ramach podanego wywołania zwrotnego. Zalecamy, aby usługa wykonywała te czynności w wątku w tle.

  5. Gdy tylko karty zostaną wyświetlone, interfejs systemu powiadomi QuickAccessWalletService, że pierwsza karta została wybrana, wywołując funkcję onWalletCardSelected.

    • Funkcja onWalletCardSelected jest wywoływana za każdym razem, gdy użytkownik wybierze nową kartę.
    • onWalletCardSelected może być wywoływany nawet wtedy, gdy wybrana karta się nie zmieniła.
  6. Gdy użytkownik zamknie Portfel Szybki dostęp, interfejs użytkownika systemu wyśle powiadomienieQuickAccessWalletService, wywołując funkcję onWalletDismissed.

W powyższym przykładzie użytkownik zbliża telefon do terminala płatniczego NFC, gdy wyświetlany jest portfel. Kluczowym elementem obsługi płatności NFC jest HostApduService, który musi zostać zaimplementowany w celu przetwarzania APDU udostępnianych przez czytnik NFC (więcej informacji znajdziesz w artykule dotyczącym emulacji karty na hoście). Zakłada się, że aplikacja do płatności uruchamia działanie, aby wyświetlić postęp i wynik interakcji z terminalem NFC. Interfejs Portfela Szybki dostęp jest jednak wyświetlany na górze okna aplikacji, co oznacza, że aktywność związana z płatnościami jest zasłonięta przez interfejs Portfela Szybki dostęp. Aby to naprawić, aplikacja musi powiadomić interfejs systemowy, że interfejs Portfela Szybkiego dostępu powinien zostać zamknięty. Może to zrobić, uzyskując odwołanie do zawiązanego QuickAccessWalletService i wywołując sendWalletServiceEvent z typem zdarzenia TYPE_NFC_PAYMENT_STARTED.

Przykładowa implementacja 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();
    });
  }
}

Więcej informacji o QuickAccessWalletService znajdziesz w dokumentacji interfejsu API QuickAccessWalletService.

Uprawnienia

Wpis w pliku manifestu dla QuickAccessWalletService musi wymagać uprawnienia android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE wprowadzonego w Androidzie 11. To uprawnienie na poziomie podpisu jest przypisywane przez interfejs systemowy, co oznacza, że tylko proces interfejsu systemowego może wiązać się z implementacjami QuickAccessWalletService. Pamiętaj, że aplikacje ładowane z zewnętrznych źródeł mogą żądać tego uprawnienia i uzyskać pełny dostęp do danych QuickAccessWalletService na urządzeniach z Androidem 10 lub starszym. Aby temu zapobiec, zalecamy sprawdzenie wersji kompilacji w onCreate i włączenie usługi tylko na urządzeniach z Androidem 11 lub nowszym. Oprócz uprawnień niezbędnych do świadczenia usług płatności z użyciem emulacji karty hosta nie są wymagane żadne inne uprawnienia aplikacji.

Jeśli domyślna aplikacja do płatności NFC nie obsługuje eksportowania danych QuickAccessWalletService, interfejs Portfela Szybkiego Dostępu nie jest wyświetlany.

Ustawienia w Androidzie 12

Aby włączyć lub wyłączyć Portfel Szybkiego Dostępu na ekranie blokady, użytkownicy mogą użyć przełącznika Pokaż portfel w sekcji Ustawienia > Wyświetlacz > Ekran blokady. Aby wyłączyć portfel w panelu, użytkownicy muszą ręcznie go edytować w panelu szybkich ustawień.

Przełącz, aby włączyć lub wyłączyć portfel na ekranie blokady

Rysunek 5. Wyświetl przełącznik portfela na stronie ekranu blokady w Ustawieniach.

Ustawienia w Androidzie 11

Użytkownicy mogą wyłączyć funkcję Szybki dostęp do portfela w aplikacji Ustawienia. Strona ustawień znajduje się w sekcji Ustawienia > System > Gesty > Karty i bilety.

strona ustawień, na której można włączyć lub wyłączyć funkcję Szybki dostęp do Portfela;
Rysunek 6. strona Ustawienia, na której można włączyć lub wyłączyć funkcję Szybki dostęp do Portfela;

Dostosowywanie

Dodawanie widoku Portfela Szybkiego Dostępu do innej lokalizacji w interfejsie systemu

Interfejs użytkownika Szybki dostęp do Portfela został utworzony jako wtyczka systemowa. Chociaż implementacja AOSP korzysta z GlobalActionsDialog (wyświetlana po długim naciśnięciu przycisku zasilania), możesz użyć innej czynności, o ile nie naruszy to umowy określonej przez interfejs wtyczki.

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);
  }
}

Interfejs Portfela Szybki dostęp implementuje GlobalActionsPanelPluginPanelViewController. GlobalActionsDialog pobiera instancję wtyczki Portfela za pomocą: com.android.systemui.Dependency:

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

Po sprawdzeniu, czy wtyczka jest niepustą wartością, oraz czy zwracana przez funkcję onPanelShown wartość PanelViewController jest niepustą wartością, dialog dołącza parametr View przekazany przez funkcję getPanelContent do własnej zmiennej View i zapewnia odpowiednie funkcje wywoływane z powodu zdarzeń systemowych.

// 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();

Aby usunąć Portfel Szybki dostęp z menu zasilania, pomiń element QuickAccessWallet w kompilacji systemu. Aby usunąć portfel Szybki dostęp z menu zasilania, ale dodać go do innego widoku interfejsu użytkownika, dodaj ustawienie docelowe kompilacji i usuń odwołania do GlobalActionsPanelPluginGlobalActionsImpl.

Ustawianie konfiguracji domyślnych

Android 12

W Androidzie 12 lub nowszym Szybki dostęp do Portfela jest zawsze widoczny w panelu Szybkie ustawienia. Widoczność portfela Szybki dostęp na ekranie blokady zależy od tego ustawienia zabezpieczeń:LOCKSCREEN_SHOW_WALLET. To ustawienie określa, czy ikona Szybkiego dostępu do portfela ma być widoczna w prawym dolnym rogu ekranu blokady. Domyślnie to ustawienie ma wartość true, ale użytkownik może je wyłączyć w sekcji Ustawienia > Wyświetlacz > Ekran blokady > Pokaż portfel.

Android 11

W Androidzie 11 widoczność Portfela Szybkiego dostępu zależy od 2 ustawień zabezpieczeń: GLOBAL_ACTIONS_PANEL_ENABLEDGLOBAL_ACTIONS_PANEL_AVAILABLE. Ustawienie AVAILABLE określa, czy funkcję można włączać i wyłączać w Ustawieniach. To ustawienie jest skonfigurowane jako true przez WalletPluginService. Jeśli QuickAccessWallet nie jest uwzględniona w kompilacji, ustawienie pozostaje na poziomie false. Ustawienie ENABLED jest domyślnie ustawione na true w tym samym miejscu, ale użytkownik może je wyłączyć w Ustawieniach. Aby zmienić działanie domyślne, zmień wartość WalletPluginService#enableFeatureInSettings.

Weryfikacja

Aby zweryfikować implementację Portfela Szybkiego Dostępu, uruchom testy CTS i testy ręczne. Zmiany w wtyczce powinny też obejmować zawarte w niej testy Robolectric.

Testy CTS

Uruchom testy CTS dostępne pod adresem cts/tests/quickaccesswallet.

Testy ręczne na Androidzie 12

Testowanie podstawowych funkcji Portfela Quick Access wymaga terminala do płatności NFC (prawdziwego lub fałszywego) oraz aplikacji do płatności NFC, która implementuje QuickAccessWalletService (aplikację Portfel). Funkcje podstawowe, które należy przetestować, to: dostępność, stan zerowy, wybór karty i zachowanie ekranu blokady.

Dostępność

  • Jeśli domyślna aplikacja do płatności NFC nie obsługuje tej funkcji, Portfel Szybkiego Dostępu nie będzie dostępny ani w szybkich ustawieniach, ani na ekranie blokady.
  • Jeśli domyślna aplikacja do płatności NFC obsługuje tę funkcję, portfel Szybki dostęp jest dostępny w panelu Szybkie ustawienia.
  • Jeśli domyślna aplikacja do płatności NFC obsługuje tę funkcję, a ustawienie LOCKSCREEN_SHOW_WALLET ma wartość true, Portfel Szybki dostęp jest dostępny na ekranie blokady.
  • Jeśli domyślna aplikacja do płatności NFC obsługuje tę funkcję i ustawienie LOCKSCREEN_SHOW_WALLET jest false, Portfel Szybkiego Dostępu nie jest dostępny na ekranie blokady.

Stan zero

  • Jeśli zasada QuickAccessWalletService jest włączona i wyeksportowana, ale nie zawiera żadnych kart, klocka w sekcji Cień wygląda tak, jak na przykładzie na rysunku 7. Kliknięcie kafelka powoduje otwarcie domyślnej aplikacji do płatności NFC.

    Przykład kafelka w panelu pokazującym domyślną aplikację do płatności NFC

    Rysunek 7. Przykład kafelka w obszarze powiadomień pokazujący domyślną aplikację do płatności NFC

  • Kliknięcie pustego stanu (jak na rysunku 8) powoduje otwarcie domyślnej aplikacji do płatności NFC. Ten pusty stan jest wyświetlany tylko wtedy, gdy użytkownik ma w portfelu jedną kartę, usuwa ją ze strony z szczegółami karty i wraca do widoku portfela.

  • Na ekranie blokady wyświetla się ikona portfela.

Widok pustego stanu w Portfelu Szybki dostęp

Rysunek 8. Widok pustego stanu w interfejsie Portfela w sekcji Szybki dostęp.

stan inny niż 0.

  • Jeśli aplikacja Portfel udostępnia co najmniej 1 kartę, kafelek w kolorze będzie wyglądał tak, jak na rysunku 9.

    Przykład kafelka w cieniach, gdy aplikacja Portfel zawiera co najmniej 1 kartę

    Rysunek 9. Przykład kafelka w panelu, gdy aplikacja Portfel ma co najmniej 1 kartę

  • Po kliknięciu kafelka wyświetla się karuzela kart.

  • Na ekranie blokady widoczny jest przycisk, który otwiera Portfel Szybkiego Dostępu.

    Interfejs Portfela Szybki dostęp z wyświetloną kartą

    Rysunek 10. Interfejs Portfela Szybki dostęp z wyświetloną kartą

  • Jeśli wyświetlona karta reprezentuje formę płatności NFC, przyłożenie telefonu do terminala płatniczego NFC spowoduje użycie tej formy płatności, a widok portfela zostanie zamknięty.

  • Kliknięcie wyświetlonej karty powoduje otwarcie szczegółowych informacji o tej aktywności.

  • Jeśli QuickAccessWalletService udostępnia wiele kart, użytkownik może przełączać się między nimi.

  • Menu zawiera 1 pozycję: otwórz ustawienia ekranu blokady, aby użytkownik mógł zmienić opcję Pokaż portfel.

Testy stanu zamka

  • Jeśli telefon jest zablokowany, portfel jest widoczny w panelu szybkich ustawień wraz z opisem Dodaj kartę, jeśli w domyślnej aplikacji do płatności nie ma karty, lub odblokuj, aby użyć, jeśli w domyślnej aplikacji do płatności są karty.
  • Jeśli telefon jest zablokowany, widoczność portfela na ekranie blokady jest kontrolowana przez ustawienie Secure.LOCKSCREEN_SHOW_WALLET, które jest kontrolowane w Ustawieniach.
  • Jeśli telefon jest zablokowany, LOCKSCREEN_SHOW_WALLET jest false, a w domyślnej aplikacji do płatności NFC nie ma żadnej karty, portfel nie jest wyświetlany na ekranie blokady.
  • Jeśli telefon jest zablokowany, LOCKSCREEN_SHOW_WALLET jest true, a w domyślnej aplikacji do płatności NFC nie ma żadnej karty, portfel nie jest wyświetlany na ekranie blokady.
  • Jeśli telefon jest zablokowany, LOCKSCREEN_SHOW_WALLET jest true, a karty są dostępne w domyślnej aplikacji do płatności NFC, portfel jest wyświetlany na ekranie blokady.
  • Odblokowanie telefonu, gdy portfel jest wyświetlany na ekranie blokady, powoduje ponowne zażądanie kart, co może skutkować wyświetleniem innej zawartości karty.

Testy ułatwień dostępu

  • Użytkownicy TalkBack mogą poruszać się po widoku portfela, przesuwając palcem w lewo i prawo oraz słuchając opisów treści na kartach.
  • Przesuwanie palcem w lewo i w prawo przy włączonym Talkback powoduje kolejno wybieranie kolejnych kart. Użytkownicy TalkBack mogą wybrać formę płatności NFC i z niej korzystać w terminalu płatniczym NFC.

Testy ręczne na Androidzie 11

Testowanie podstawowych funkcji Portfela Quick Access wymaga terminala do płatności NFC (prawdziwego lub fałszywego) oraz aplikacji do płatności NFC, która implementuje QuickAccessWalletService (aplikację Portfel). Funkcje podstawowe, które należy przetestować, to dostępność, stan zerowy, wybór karty i zachowanie ekranu blokady.

Dostępność

  • Jeśli ustawienie GLOBAL_ACTIONS_PANEL_ENABLED ma wartość true, a domyślna aplikacja do płatności NFC obsługuje tę funkcję, Portfel Szybki dostęp jest dostępny.
  • Jeśli ustawienie GLOBAL_ACTIONS_PANEL_ENABLED to false, a domyślna aplikacja do płatności NFC obsługuje tę funkcję, Portfel Szybki dostęp nie jest dostępny.
  • Jeśli ustawienie GLOBAL_ACTIONS_PANEL_ENABLED ma wartość true, a domyślna aplikacja do płatności NFC nie obsługuje tej funkcji, Portfel Szybkiego Dostępu jest niedostępny.
  • Jeśli ustawienie GLOBAL_ACTIONS_PANEL_ENABLED ma wartość false, a domyślna aplikacja do płatności NFC nie obsługuje tej funkcji, Portfel Szybkiego Dostępu jest niedostępny.

Stan zero

  • Jeśli zasada QuickAccessWalletService jest włączona i wyeksportowana, ale nie zawiera żadnych kart, interfejs Portfela w szybkim dostępie wyświetla pusty stan.
  • Kliknięcie pustego stanu powoduje otwarcie aplikacji Portfel.

    Widok pustego stanu w interfejsie Portfela w sekcji Szybki dostęp
    Rysunek 11. Widok pustego stanu w interfejsie Portfela w sekcji Szybki dostęp.

stan inny niż 0.

  • Jeśli aplikacja Portfel udostępnia co najmniej 1 kartę, będą one wyświetlane w interfejsie Portfela w szybkim dostępie.

    Interfejs Portfela Szybki dostęp z wyświetloną kartą
    Rysunek 12. Interfejs Portfela Szybki dostęp z wyświetloną kartą.
  • Jeśli wyświetlona karta reprezentuje formę płatności NFC, przyłożenie telefonu do terminala płatniczego NFC spowoduje użycie tej formy płatności, a widok portfela zostanie zamknięty.

  • Kliknięcie wyświetlonej karty powoduje zamknięcie widoku portfela i otwarcie szczegółowej aktywności tej karty.

  • Jeśli QuickAccessWalletService udostępnia wiele kart, użytkownik może przełączać się między nimi.

  • Menu przepełnienia zawiera 2 pozycje: jedną, która otwiera aplikację Portfel, a drugą, która otwiera w Ustawieniach ekran Pokaż karty i karty dostępu.

Testy stanu zamka

  • Jeśli telefon jest zablokowany, widoczność portfela jest kontrolowana przez ustawienie Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT, którym można zarządzać w Ustawieniach.
  • Jeśli telefon jest zablokowany, a POWER_MENU_LOCK_SHOW_CONTENT ma wartość false, portfel nie jest wyświetlany.
  • Jeśli telefon jest zablokowany, a POWER_MENU_LOCK_SHOW_CONTENT jest true, wyświetla się portfel.
  • Odblokowanie telefonu, gdy na ekranie blokady wyświetlany jest portfel, powoduje ponowne wysłanie żądania dotyczącego kart, co może skutkować wyświetleniem innej zawartości karty.

Testy ułatwień dostępu

  • Użytkownicy TalkBack mogą poruszać się po widoku portfela, przesuwając palcem w lewo i prawo oraz słuchając opisów treści na kartach.
  • Przesuwanie palcem w lewo i w prawo przy włączonej funkcji TalkBack powoduje kolejno wybieranie kolejnych kart. Użytkownicy TalkBack mogą wybrać formę płatności NFC i z niej korzystać w terminalu płatniczym NFC.