Wallet truy cập nhanh

Tính năng Truy cập nhanh vào Wallet (có trên Android 11) cho phép người dùng truy cập vào thẻ thanh toán và các thẻ liên quan ngay từ trình đơn nguồn. Các trường hợp sử dụng chính bao gồm việc chọn phương thức thanh toán phù hợp trước khi thực hiện giao dịch tại thiết bị đầu cuối NFC và nhanh chóng truy cập vào chuyến bay và các thẻ khác cho các sự kiện sắp tới.

Trên Android 12 trở lên, tính năng Truy cập nhanh vào Wallet có trong bảng thông báo như minh hoạ trong Hình 1 và Hình 2.

Tính năng Truy cập nhanh vào Wallet trong ngăn thông báo
Hình 1. Tính năng Truy cập nhanh vào Wallet (thiết bị bị khoá).
Tính năng Truy cập nhanh vào Wallet trong ngăn thông báo
Hình 2. Tính năng Truy cập nhanh vào Wallet (thiết bị được mở khoá).

Trên Android 11, tính năng này có trong trình đơn nguồn như minh hoạ trong Hình 3.

Tính năng Truy cập nhanh vào Wallet trong trình đơn nguồn
Hình 3. Tính năng Truy cập nhanh vào Wallet trong trình đơn nguồn. menu.

Yêu cầu

Thiết bị của bạn phải có NFC để sử dụng tính năng Truy cập nhanh vào Wallet. Tính năng này liên kết với QuickAccessWalletService của ứng dụng thanh toán NFC mặc định. Điều này có nghĩa là thiết bị cũng phải hỗ trợ tính năng giả lập thẻ dựa trên máy chủ NFC (HCE).

Tổng quan về tính năng

Tính năng Truy cập nhanh vào Wallet có 2 phần: Giao diện người dùng Truy cập nhanh vào Wallet và nhà cung cấp thẻ Truy cập nhanh vào Wallet.

Trên Android 12 trở lên, giao diện người dùng Wallet chạy trong Giao diện người dùng hệ thống và nằm trong frameworks/base/packages/SystemUI/src/com/android/systemui/wallet. Trên Android 11, giao diện người dùng Wallet nằm trong platform/packages/apps/QuickAccessWallet, phải được cài đặt và đưa vào danh sách cho phép.

Nhà cung cấp thẻ Truy cập nhanh vào Ví là ứng dụng thanh toán qua NFC mặc định. Người dùng có thể cài đặt nhiều ứng dụng thanh toán qua NFC cùng lúc, nhưng chỉ ứng dụng thanh toán qua NFC mặc định mới có thể hiện thẻ trên trình đơn nguồn. Bạn có thể chỉ định ứng dụng thanh toán NFC nào được đặt làm mặc định ban đầu, nhưng người dùng có thể chọn một ứng dụng khác trong phần Cài đặt. Nếu chỉ cài đặt một ứng dụng thanh toán qua NFC, thì ứng dụng đó sẽ tự động trở thành ứng dụng mặc định (xem CardEmulationManager).

Triển khai

Để cung cấp thẻ cho giao diện người dùng Truy cập nhanh vào Wallet, các ứng dụng thanh toán qua NFC phải triển khai QuickAccessWalletService. Các ứng dụng thanh toán phải có một mục trong tệp kê khai quảng cáo dịch vụ.

Để đảm bảo rằng chỉ Giao diện người dùng hệ thống mới có thể liên kết với QuickAccessWalletService, ứng dụng thanh toán qua NFC phải yêu cầu quyền android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE. Việc yêu cầu quyền này đảm bảo rằng chỉ Giao diện người dùng hệ thống mới có thể liên kết với 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>

Thông tin bổ sung về ví được đưa vào tệp XML được liên kết:

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

Tiếp theo, ứng dụng thanh toán phải triển khai 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
    }
}

Nếu HostApduService bắt đầu xử lý một giao dịch bằng NFC và do đó, bắt đầu một Hoạt động để hiển thị tiến trình và kết quả của giao dịch thanh toán, thì ứng dụng này cũng nên cố gắng tham chiếu đến QuickAccessWalletService được liên kết và gọi QuickAccessWalletService#sendEvent với loại sự kiện là TYPE_NFC_PAYMENT_STARTED. Điều này khiến giao diện người dùng Truy cập nhanh vào Wallet bị đóng, nhờ đó người dùng có thể xem hoạt động thanh toán mà không bị cản trở.

Để biết thêm tài liệu về cách triển khai QuickAccessWalletService, hãy xem QuickAccessWalletService và bài kiểm thử CTS TestQuickAccessWalletService.

Bật giao diện người dùng Truy cập nhanh vào Wallet trên Android 11

Để định cấu hình tính năng Truy cập nhanh vào Wallet có trong trình đơn nguồn trên Android 11, hãy đưa QuickAccessWallet mục tiêu vào bản dựng và bật trình bổ trợ globalactions.wallet bằng cách thêm dòng in đậm trong mã mẫu bên dưới vào tệp 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>

Chỉ định ứng dụng Thanh toán qua NFC mặc định trong tệp cấu hình cài đặt bằng cách sử dụng def_nfc_payment_component.

Ứng dụng thanh toán NFC mặc định phải hiển thị QuickAccessWalletService để cung cấp thẻ cho tính năng Truy cập nhanh vào Wallet. Nếu ứng dụng thanh toán qua NFC mặc định không xuất dịch vụ này, thì giao diện người dùng ví sẽ bị ẩn.

Thông tin chi tiết về cách triển khai QuickAccessWalletService

QuickAccessWalletService có 3 phương thức trừu tượng phải được triển khai: onWalletCardsRequested, onWalletCardSelectedonWalletDismissed. Sơ đồ trình tự bên dưới minh hoạ trình tự lệnh gọi khi tính năng Truy cập nhanh vào Wallet được xem ngay trước khi thanh toán bằng NFC.

Sơ đồ trình tự Truy cập nhanh vào Wallet

Ví dụ về trình tự gọi khi xem Ví Truy cập nhanh
Hình 4. Trình tự lệnh gọi mẫu khi tính năng Truy cập nhanh vào Wallet được xem.

Không phải tất cả các chế độ xem của tính năng Truy cập nhanh vào Wallet đều được theo sau bởi một giao dịch Thanh toán qua NFC, nhưng Hình 4 ở trên minh hoạ tất cả các chức năng của QuickAccessWalletService. Trong ví dụ này, nhà cung cấp thẻ Truy cập nhanh vào Wallet triển khai các phần tử được vạch ra bằng màu xanh dương. Giả sử rằng thẻ thanh toán được lưu trữ trên thiết bị trong một cơ sở dữ liệu và được truy cập thông qua một giao diện có tên là PaymentCardManager. Giả sử thêm rằng một hoạt động có tên là PaymentActivity hiển thị kết quả của một giao dịch thanh toán NFC. Quy trình diễn ra như sau:

  1. Người dùng thực hiện một cử chỉ để hiển thị tính năng Truy cập nhanh vào Wallet.
  2. Giao diện người dùng Truy cập nhanh vào Wallet (một phần của Giao diện người dùng hệ thống) kiểm tra trình quản lý gói để xem ứng dụng thanh toán qua NFC mặc định có xuất QuickAccessWalletService hay không.

    • Nếu dịch vụ không được xuất, thì tính năng Truy cập nhanh vào Wallet sẽ không hiển thị.
  3. Giao diện người dùng Truy cập nhanh vào Wallet liên kết với QuickAccessWalletService và gọi onWalletCardsRequested. Phương thức này lấy một đối tượng yêu cầu chứa dữ liệu về số lượng và kích thước của các thẻ có thể được cung cấp và một lệnh gọi lại. Lệnh gọi lại có thể được gọi từ một luồng trong nền.

  4. QuickAccessWalletService tính toán các thẻ mà ứng dụng muốn hiển thị, sau đó gọi phương thức onSuccess trên lệnh gọi lại được cung cấp. Bạn nên để dịch vụ thực hiện các thao tác này trên một luồng trong nền.

  5. Ngay sau khi các thẻ được hiển thị, Giao diện người dùng hệ thống sẽ thông báo cho QuickAccessWalletService rằng thẻ đầu tiên đã được chọn bằng cách gọi onWalletCardSelected.

    • onWalletCardSelected được gọi mỗi khi người dùng chọn một thẻ mới.
    • onWalletCardSelected có thể được gọi ngay cả khi thẻ được chọn hiện tại không thay đổi.
  6. Khi người dùng đóng tính năng Truy cập nhanh vào Wallet, Giao diện người dùng hệ thống sẽ thông báo cho QuickAccessWalletService bằng cách gọi onWalletDismissed.

Trong ví dụ trên, người dùng đưa điện thoại vào phạm vi của thiết bị đầu cuối thanh toán NFC trong khi ví đang hiển thị. `HostApduService` là một thành phần chính của việc xử lý các giao dịch thanh toán NFC . Bạn phải triển khai thành phần này để xử lý APDU do trình đọc NFC cung cấp (để biết thêm thông tin, hãy xem bài viết Giả lập thẻ dựa trên máy chủ).HostApduService Giả sử rằng ứng dụng thanh toán bắt đầu một hoạt động để hiển thị tiến trình và kết quả của hoạt động tương tác với thiết bị đầu cuối NFC. Tuy nhiên, giao diện người dùng Truy cập nhanh vào Wallet được hiển thị ở trên cùng của cửa sổ ứng dụng, nghĩa là hoạt động thanh toán bị che khuất bởi giao diện người dùng Truy cập nhanh vào Wallet. Để khắc phục điều này, ứng dụng phải thông báo cho Giao diện người dùng hệ thống rằng giao diện người dùng Truy cập nhanh vào Wallet phải bị đóng. Ứng dụng có thể thực hiện việc này bằng cách tham chiếu đến QuickAccessWalletService được liên kết và gọi sendWalletServiceEvent với loại sự kiện TYPE_NFC_PAYMENT_STARTED.

Mẫu triển khai 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();
    });
  }
}

Để biết thêm thông tin chi tiết về QuickAccessWalletService, hãy xem QuickAccessWalletService Tài liệu tham khảo API.

Quyền

Mục trong tệp kê khai cho QuickAccessWalletService phải yêu cầu quyền android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE được giới thiệu trong Android 11. Đây là quyền ở cấp chữ ký do Giao diện người dùng hệ thống nắm giữ. Điều này có nghĩa là chỉ quá trình Giao diện người dùng hệ thống mới có thể liên kết với các cách triển khai QuickAccessWalletService. Xin lưu ý rằng các ứng dụng được tải riêng có thể yêu cầu quyền này và có toàn quyền truy cập vào dữ liệu QuickAccessWalletService trên các thiết bị chạy Android 10 trở xuống. Để ngăn chặn điều này, bạn nên để dịch vụ kiểm tra phiên bản bản dựng trong onCreate và chỉ bật dịch vụ trên các thiết bị chạy Android 11 trở lên. Bạn không cần quyền cho ứng dụng nào khác ngoài những quyền cần thiết để cung cấp dịch vụ thanh toán giả lập thẻ dựa trên máy chủ.

Nếu ứng dụng thanh toán qua NFC mặc định không triển khai hoặc xuất QuickAccessWalletService, thì giao diện người dùng Truy cập nhanh vào Wallet sẽ không hiển thị.

Cài đặt trên Android 12

Để bật hoặc tắt tính năng Truy cập nhanh vào Wallet trên màn hình khoá, người dùng có thể sử dụng nút bật/tắt Hiện ví trong phần Cài đặt > Màn hình > Màn hình khoá. Để tắt ví trong bảng thông báo, người dùng phải chỉnh sửa ví theo cách thủ công trong bảng thông báo cài đặt nhanh.

Nhấp vào nút bật/tắt để bật hoặc tắt ví trên màn hình khoá

Hình 5. Nút bật/tắt Hiện ví trong trang Màn hình khoá trong phần Cài đặt.

Cài đặt trên Android 11

Người dùng có thể tắt tính năng Truy cập nhanh vào Wallet trong ứng dụng Cài đặt. Trang cài đặt này nằm trong phần Cài đặt > Hệ thống > Cử chỉ > Thẻ và vé.

Trang cài đặt để bật hoặc tắt tính năng Truy cập nhanh vào Wallet
Hình 6. Trang cài đặt để bật hoặc tắt tính năng Truy cập nhanh vào Wallet.

Tuỳ chỉnh

Thêm chế độ xem Truy cập nhanh vào Wallet vào một vị trí khác trong Giao diện người dùng hệ thống

Giao diện người dùng Truy cập nhanh vào Wallet được xây dựng dưới dạng một trình bổ trợ hệ thống. Mặc dù cách triển khai AOSP sử dụng trình bổ trợ này trong GlobalActionsDialog (hiển thị khi nhấn giữ nút nguồn), nhưng bạn có thể chuyển tính năng này sang một cử chỉ khác miễn là bạn duy trì hợp đồng được chỉ định bởi giao diện trình bổ trợ.

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

Giao diện người dùng Truy cập nhanh vào Wallet triển khai GlobalActionsPanelPluginPanelViewController. GlobalActionsDialog tạo một thực thể của trình bổ trợ ví bằng cách sử dụng com.android.systemui.Dependency:

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

Sau khi kiểm tra để đảm bảo rằng trình bổ trợ không phải là giá trị null và PanelViewController do onPanelShown trả về không phải là giá trị null, hộp thoại sẽ đính kèm View do bởi getPanelContent cung cấp vào View của chính nó và cung cấp các lệnh gọi lại thích hợp cho các sự kiện hệ thống.

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

Để xoá tính năng Truy cập nhanh vào Wallet khỏi trình đơn nguồn, hãy bỏ qua mục tiêu QuickAccessWallet khỏi bản dựng hệ thống. Để xoá tính năng Truy cập nhanh vào Wallet khỏi trình đơn nguồn nhưng thêm tính năng này vào một chế độ xem khác do Giao diện người dùng hệ thống cung cấp, hãy đưa mục tiêu bản dựng vào và xoá các tham chiếu đến GlobalActionsPanelPlugin khỏi GlobalActionsImpl.

Đặt cấu hình mặc định

Android 12

Trên Android 12 trở lên, tính năng Truy cập nhanh vào Wallet luôn hiển thị trong bảng thông báo cài đặt nhanh. Chế độ hiển thị của tính năng Truy cập nhanh vào Wallet trên màn hình khoá được kiểm soát bởi chế độ cài đặt bảo mật sau: LOCKSCREEN_SHOW_WALLET. Chế độ cài đặt này kiểm soát việc biểu tượng Truy cập nhanh vào Wallet có hiển thị ở dưới cùng bên phải màn hình khoá hay không. Chế độ cài đặt này được đặt thành true theo mặc định, nhưng người dùng có thể tắt trong phần Cài đặt > Màn hình > Màn hình khoá > Hiện ví.

Android 11

Trên Android 11, chế độ hiển thị của tính năng Truy cập nhanh vào Wallet được kiểm soát bởi 2 chế độ cài đặt bảo mật: GLOBAL_ACTIONS_PANEL_ENABLEDGLOBAL_ACTIONS_PANEL_AVAILABLE. Chế độ cài đặt AVAILABLE kiểm soát việc có thể bật và tắt tính năng này trong phần Cài đặt hay không. Chế độ cài đặt này được WalletPluginService đặt thành true. Nếu QuickAccessWallet không được đưa vào bản dựng, thì chế độ cài đặt sẽ vẫn là false. Chế độ cài đặt ENABLED được đặt thành true theo mặc định ở cùng một vị trí, nhưng người dùng có thể tắt trong phần Cài đặt. Để thay đổi hành vi mặc định, hãy sửa đổi WalletPluginService#enableFeatureInSettings.

Xác nhận kết quả

Để xác thực việc triển khai tính năng Truy cập nhanh vào Wallet, hãy chạy các bài kiểm thử CTS và kiểm thử thủ công. Các thay đổi đối với trình bổ trợ cũng phải thực hiện các bài kiểm thử robolectric được đưa vào .

Bài kiểm thử CTS

Chạy các bài kiểm thử CTS nằm trong cts/tests/quickaccesswallet.

Bài kiểm thử thủ công cho Android 12

Việc kiểm thử các tính năng cốt lõi của tính năng Truy cập nhanh vào Wallet yêu cầu phải có thiết bị đầu cuối thanh toán qua NFC (thật hoặc giả) và một ứng dụng thanh toán qua NFC triển khai QuickAccessWalletService (ứng dụng ví). Các tính năng cốt lõi phải được kiểm thử bao gồm: phạm vi cung cấp, trạng thái trống, lựa chọn thẻ và hành vi trên màn hình khoá.

Phạm vi cung cấp

  • Nếu ứng dụng thanh toán NFC mặc định không hỗ trợ tính năng này, thì bạn sẽ không thể truy cập vào tính năng Truy cập nhanh vào Wallet trong phần cài đặt nhanh cũng như trên màn hình khoá.
  • Nếu ứng dụng thanh toán qua NFC mặc định hỗ trợ tính năng này, thì bạn có thể truy cập vào tính năng Truy cập nhanh vào Wallet trong bảng thông báo Cài đặt nhanh.
  • Nếu ứng dụng thanh toán NFC mặc định hỗ trợ tính năng này và nếu chế độ cài đặt LOCKSCREEN_SHOW_WALLETtrue, thì bạn có thể truy cập vào tính năng Truy cập nhanh vào Wallet trên màn hình khoá.
  • Nếu ứng dụng thanh toán NFC mặc định hỗ trợ tính năng này và nếu chế độ cài đặt LOCKSCREEN_SHOW_WALLETfalse, thì bạn sẽ không thể truy cập vào tính năng Truy cập nhanh vào Wallet trên màn hình khoá.

Trạng thái trống

  • Nếu QuickAccessWalletService được bật và xuất nhưng không cung cấp thẻ nào, thì ô trong Bảng thông báo sẽ xuất hiện như trong ví dụ ở Hình 7. Khi nhấp vào ô này, ứng dụng thanh toán qua NFC mặc định sẽ mở ra.

    Ví dụ về ô trong ngăn kéo cho thấy ứng dụng thanh toán qua NFC mặc định

    Hình 7. Ô mẫu trong bảng thông báo hiển thị ứng dụng thanh toán qua NFC mặc định.

  • Khi nhấp vào chế độ xem trạng thái trống như trong Hình 8, ứng dụng thanh toán qua NFC mặc định sẽ mở ra. Chế độ xem trạng thái trống này chỉ xuất hiện khi người dùng còn một thẻ trong ví, xoá thẻ đó khỏi trang chi tiết thẻ rồi quay lại chế độ xem ví.

  • Màn hình khoá hiển thị biểu tượng ví.

Chế độ xem trạng thái trống trong Wallet truy cập nhanh

Hình 8. Chế độ xem trạng thái trống trong giao diện người dùng Truy cập nhanh vào Wallet.

Trạng thái không trống

  • Nếu ứng dụng ví cung cấp một hoặc nhiều thẻ, thì ô trong bảng thông báo sẽ xuất hiện như trong Hình 9.

    Ví dụ về ô trong bóng râm khi ứng dụng ví có một hoặc nhiều thẻ

    Hình 9. Ô mẫu trong bảng thông báo khi ứng dụng ví có một hoặc nhiều thẻ.

  • Khi nhấp vào ô này, một băng chuyền thẻ sẽ xuất hiện.

  • Màn hình khoá hiển thị một nút mở tính năng Truy cập nhanh vào Wallet.

    Giao diện người dùng Quick Access Wallet (Ví truy cập nhanh) có thẻ xuất hiện

    Hình 10. Giao diện người dùng Truy cập nhanh vào Wallet có hiển thị một thẻ.

  • Nếu thẻ được hiển thị đại diện cho một phương thức Thanh toán qua NFC, thì việc giữ điện thoại đến gần thiết bị thanh toán NFC sẽ dẫn đến việc phương thức thanh toán đó được sử dụng và chế độ xem ví bị đóng.

  • Khi nhấp vào một thẻ được hiển thị, hoạt động chi tiết cho thẻ đó sẽ mở ra.

  • Nếu QuickAccessWalletService cung cấp nhiều thẻ, thì người dùng có thể vuốt giữa các thẻ.

  • Trình đơn mục bổ sung chứa một mục: mở phần cài đặt màn hình khoá để người dùng có thể thay đổi tuỳ chọn Hiện ví.

Bài kiểm thử trạng thái khoá

  • Nếu điện thoại bị khoá, ví sẽ hiển thị trên bảng thông báo cài đặt nhanh, kèm theo nội dung mô tả Thêm thẻ nếu không có thẻ nào trong ứng dụng thanh toán mặc định hoặc mở khoá để sử dụng nếu có thẻ trong ứng dụng thanh toán mặc định.
  • Nếu điện thoại bị khoá, chế độ hiển thị ví trên màn hình khoá sẽ được kiểm soát bởi chế độ cài đặt Secure.LOCKSCREEN_SHOW_WALLET trong phần Cài đặt.
  • Nếu điện thoại bị khoá, LOCKSCREEN_SHOW_WALLETfalse và không có thẻ nào trong ứng dụng thanh toán NFC mặc định, thì ví sẽ không hiển thị trên màn hình khoá.
  • Nếu điện thoại bị khoá, LOCKSCREEN_SHOW_WALLETtrue và không có thẻ nào trong ứng dụng thanh toán NFC mặc định, thì ví sẽ không hiển thị trên màn hình khoá.
  • Nếu điện thoại bị khoá, LOCKSCREEN_SHOW_WALLETtrue và có thẻ trong ứng dụng thanh toán NFC mặc định, thì ví sẽ hiển thị trên màn hình khoá.
  • Việc mở khoá điện thoại trong khi ví đang hiển thị trên màn hình khoá sẽ dẫn đến việc các thẻ được yêu cầu lại, điều này có thể dẫn đến nội dung thẻ khác.

Bài kiểm thử khả năng hỗ trợ tiếp cận

  • Người dùng TalkBack có thể di chuyển trong chế độ xem ví bằng cách vuốt sang trái và phải cũng như bằng cách nghe nội dung mô tả của các thẻ.
  • Khi bật TalkBack, việc vuốt sang trái và phải sẽ chọn từng thẻ theo lượt. Người dùng TalkBack có thể chọn và sử dụng phương thức thanh toán qua NFC tại thiết bị thanh toán qua NFC.

Bài kiểm thử thủ công cho Android 11

Việc kiểm thử các tính năng cốt lõi của tính năng Truy cập nhanh vào Wallet yêu cầu phải có thiết bị đầu cuối thanh toán qua NFC (thật hoặc giả) và một ứng dụng thanh toán qua NFC triển khai QuickAccessWalletService (ứng dụng ví). Các tính năng cốt lõi phải được kiểm thử bao gồm phạm vi cung cấp, trạng thái trống, lựa chọn thẻ và hành vi trên màn hình khoá.

Phạm vi cung cấp

  • Nếu chế độ cài đặt GLOBAL_ACTIONS_PANEL_ENABLEDtrue và ứng dụng thanh toán qua NFC mặc định hỗ trợ tính năng này, thì bạn có thể truy cập vào tính năng Truy cập nhanh vào Wallet.
  • Nếu chế độ cài đặt GLOBAL_ACTIONS_PANEL_ENABLEDfalse và ứng dụng thanh toán NFC mặc định hỗ trợ tính năng này, thì bạn không thể truy cập vào tính năng Truy cập nhanh vào Wallet.
  • Nếu chế độ cài đặt GLOBAL_ACTIONS_PANEL_ENABLEDtrue và ứng dụng Thanh toán qua NFC mặc định không hỗ trợ tính năng này, thì bạn không thể truy cập vào tính năng Truy cập nhanh vào Wallet.
  • Nếu chế độ cài đặt GLOBAL_ACTIONS_PANEL_ENABLEDfalse và ứng dụng Thanh toán qua NFC mặc định không hỗ trợ tính năng này, thì bạn không thể truy cập vào tính năng Truy cập nhanh vào Wallet.

Trạng thái trống

  • Nếu QuickAccessWalletService được bật và xuất nhưng không cung cấp thẻ nào, thì giao diện người dùng Truy cập nhanh vào Wallet sẽ hiển thị chế độ xem trạng thái trống.
  • Khi nhấp vào chế độ xem trạng thái trống, ứng dụng ví sẽ mở ra.

    Chế độ xem trạng thái trống trong giao diện người dùng của tính năng Truy cập nhanh vào Wallet
    Hình 11. Chế độ xem trạng thái trống trong giao diện người dùng Truy cập nhanh vào Wallet.

Trạng thái không trống

  • Nếu ứng dụng ví cung cấp một hoặc nhiều thẻ, thì các thẻ đó sẽ hiển thị trong giao diện người dùng Truy cập nhanh vào Wallet.

    Giao diện người dùng Quick Access Wallet (Ví truy cập nhanh) có thẻ xuất hiện
    Hình 12. Giao diện người dùng Truy cập nhanh vào Wallet có hiển thị một thẻ được hiển thị.
  • Nếu thẻ được hiển thị đại diện cho một phương thức Thanh toán qua NFC, thì việc giữ điện thoại đến gần thiết bị thanh toán NFC sẽ dẫn đến việc phương thức thanh toán đó được sử dụng và chế độ xem ví bị đóng.

  • Khi nhấp vào một thẻ được hiển thị, chế độ xem ví sẽ bị đóng và hoạt động chi tiết cho thẻ đó sẽ mở ra.

  • Nếu QuickAccessWalletService cung cấp nhiều thẻ, thì người dùng có thể vuốt giữa các thẻ.

  • Trình đơn mục bổ sung chứa 2 mục: một mục mở ứng dụng ví và một mục mở màn hình Hiện thẻ và vé trong phần Cài đặt.

Bài kiểm thử trạng thái khoá

  • Nếu điện thoại bị khoá, chế độ hiển thị ví sẽ được kiểm soát bởi chế độ cài đặt Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT trong phần Cài đặt.
  • Nếu điện thoại bị khoá và POWER_MENU_LOCK_SHOW_CONTENTfalse, thì ví sẽ không hiển thị.
  • Nếu điện thoại bị khoá và POWER_MENU_LOCK_SHOW_CONTENTtrue, thì ví sẽ hiển thị.
  • Việc mở khoá điện thoại trong khi ví đang hiển thị trên màn hình khoá sẽ dẫn đến việc các thẻ được yêu cầu lại, điều này có thể dẫn đến nội dung thẻ khác.

Bài kiểm thử khả năng hỗ trợ tiếp cận

  • Người dùng TalkBack có thể di chuyển trong chế độ xem ví bằng cách vuốt sang trái và phải cũng như bằng cách nghe nội dung mô tả của các thẻ.
  • Khi bật TalkBack, việc vuốt sang trái và phải sẽ chọn từng thẻ theo lượt. Người dùng TalkBack có thể chọn và sử dụng phương thức thanh toán qua NFC tại thiết bị thanh toán NFC.