Ví truy cập nhanh

Tính năng Ví truy cập nhanh (có trên Android 11) cho phép người dùng truy cập vào thẻ thanh toán cũng như các thẻ và vé có liên quan ngay trong trình đơn nguồn. Các trường hợp sử dụng chính bao gồm 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ị thanh toán không tiếp xúc (NFC) và nhanh chóng truy cập vào thông tin chuyến bay và các thẻ và vé khác cho các sự kiện sắp tới.

Trong Android 12 trở lên, bạn có thể sử dụng tính năng Ví truy cập nhanh trong ngăn 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ị đã mở khoá).

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

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

Yêu cầu

Thiết bị của bạn phải có NFC để sử dụng tính năng Wallet truy cập nhanh. 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, nghĩa là thiết bị cũng phải hỗ trợ tính năng mô phỏng thẻ dựa trên máy chủ (HCE) NFC.

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

Ví truy cập nhanh có hai phần: giao diện người dùng của Ví truy cập nhanh và nhà cung cấp thẻ của Ví truy cập nhanh.

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. Trong Android 11, bạn phải cài đặt và đưa giao diện người dùng Wallet (nằm trong platform/packages/apps/QuickAccessWallet) vào danh sách cho phép.

Nhà cung cấp thẻ Truy cập nhanh Wallet là ứng dụng thanh toán mặc định qua NFC. Người dùng có thể cài đặt đồng thời nhiều ứng dụng thanh toán NFC, nhưng chỉ ứng dụng thanh toán NFC mặc định mới có thể hiển thị 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 NFC, ứ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 Quick Access Wallet (Quyền truy cập nhanh vào Wallet), các ứng dụng thanh toán NFC phải triển khai QuickAccessWalletService. Ứng dụng thanh toán phải có mục nhập tệp kê khai quảng cáo dịch vụ.

Để đảm bảo 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 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>

Tệp XML được liên kết chứa thông tin bổ sung về ví:

<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 NFC và do đó, bắt đầu một hoạt động để hiển thị tiến trình và kết quả của khoản thanh toán, thì HostApduService cũng sẽ cố gắng tham chiếu đến QuickAccessWalletService đã liên kết và gọi QuickAccessWalletService#sendEvent với loại sự kiện là TYPE_NFC_PAYMENT_STARTED. Thao tác này sẽ đóng giao diện người dùng của Ví truy cập nhanh, nhờ đó người dùng có thể xem hoạt động thanh toán mà không bị che khuất.

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

Bật giao diện người dùng Quick Access Wallet (Truy cập nhanh vào Wallet) trong Android 11

Để định cấu hình Wallet truy cập nhanh có sẵn trên trình đơn nguồn trong Android 11, hãy đưa mục tiêu QuickAccessWallet 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 NFC mặc định trong tệp cấu hình cài đặt bằ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 Ví Truy cập nhanh. Nếu ứng dụng thanh toán NFC mặc định không xuất dịch vụ này, giao diện người dùng của ví sẽ bị ẩn.

Chi tiết 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ự dưới đây minh hoạ trình tự cuộc gọi khi người dùng xem Ví truy cập nhanh ngay trước khi thanh toán qua NFC.

Sơ đồ trình tự của tính năng Truy cập nhanh vào Wallet

Ví dụ về trình tự lệnh gọi khi xem Wallet trong phần Truy cập nhanh
Hình 4. Ví dụ về trình tự lệnh gọi khi xem Wallet Truy cập nhanh.

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

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

    • Nếu bạn không xuất dịch vụ, thì Ví truy cập nhanh sẽ không hiển thị.
  3. Giao diện người dùng của Wallet Truy cập nhanh 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 thẻ có thể được cung cấp và một lệnh gọi lại. Bạn có thể gọi lệnh gọi lạ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 trong lệnh gọi lại được cung cấp. Bạn nên thực hiện các thao tác này trên luồng ở chế độ nền.

  5. Ngay khi các thẻ 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ẻ đang được chọn không thay đổi.
  6. Khi người dùng đóng Wallet truy cập nhanh, 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ị thanh toán NFC trong khi ví đang hiển thị. Một thành phần chính trong việc xử lý các khoản thanh toán qua NFC là HostApduService. Bạn phải triển khai thành phần này để xử lý các APDU do đầu đọc NFC cung cấp (để biết thêm thông tin, hãy xem phần Tính năng mô phỏng thẻ dựa trên máy chủ). Giả định 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ị thanh toán NFC. Tuy nhiên, giao diện người dùng Wallet truy cập nhanh hiển thị ở đầu cửa sổ ứng dụng, tức là hoạt động thanh toán bị giao diện người dùng Wallet truy cập nhanh che khuất. Để khắc phục vấn đề này, ứng dụng phải thông báo cho Giao diện người dùng hệ thống rằng cần đóng giao diện người dùng của Ví Truy cập nhanh. Bạn có thể thực hiện việc này bằng cách tham chiếu đến QuickAccessWalletService đã liên kết và gọi sendWalletServiceEvent bằng loại sự kiện TYPE_NFC_PAYMENT_STARTED.

Triển khai mẫu 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 Tài liệu tham khảo API QuickAccessWalletService.

Quyền

Mục 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 giữ, nghĩa là chỉ quy trình giao diện người dùng hệ thống mới có thể liên kết với các phương thức triển khai của QuickAccessWalletService. Xin lưu ý rằng các ứng dụng tải không qua cửa hàng có thể xác nhận 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, dịch vụ nên 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. Không yêu cầu quyền nào khác cho ứng dụng ngoài những quyền cần thiết để cung cấp dịch vụ thanh toán bằng tính năng mô phỏng thẻ lưu trữ.

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

Chế độ cài đặt trong Android 12

Để bật hoặc tắt Ví truy cập nhanh 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 > Hiển thị > Màn hình khoá. Để vô hiệu hoá ví trong ngăn điều hướng, người dùng phải chỉnh sửa ví theo cách thủ công trong ngăn cài đặt nhanh.

Dùng nút bật/tắt để bật hoặc tắt Wallet trên màn hình khoá

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

Cài đặt trong Android 11

Người dùng có thể tắt tính năng Ví truy cập nhanh trong ứng dụng Cài đặt. Trang cài đặt 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 Wallet truy cập nhanh
Hình 6. Trang Cài đặt để bật hoặc tắt tính năng Wallet truy cập nhanh.

Tuỳ chỉnh

Thêm chế độ xem Wallet truy cập nhanh 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 của Wallet truy cập nhanh được tạo dưới dạng trình bổ trợ hệ thống. Mặc dù việc triển khai AOSP sử dụng tính năng này trong GlobalActionsDialog (hiển thị khi nhấn và giữ nút nguồn), nhưng bạn có thể di 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 do giao diện trình bổ trợ chỉ định.

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 của tính năng Truy cập nhanh vào Wallet triển khai GlobalActionsPanelPluginPanelViewController. GlobalActionsDialog nhận thực thể của trình bổ trợ Wallet 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 rỗng và PanelViewController do onPanelShown trả về không rỗng, hộp thoại sẽ đính kèm View do getPanelContent cung cấp vào View của chính trình bổ trợ 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á Quick Access Wallet (Wallet truy cập nhanh) 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á Ví truy cập nhanh khỏi trình đơn nguồn nhưng thêm ví vào một thành phần hiển thị khác do Giao diện người dùng hệ thống cung cấp, hãy thêm mục tiêu bản dựng và xoá các tệp tham chiếu đến GlobalActionsPanelPlugin từ GlobalActionsImpl.

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

Android 12

Trên Android 12 trở lên, Ví truy cập nhanh luôn xuất hiện trong ngăn cài đặt nhanh. Chế độ hiển thị của Ví truy cập nhanh trên màn hình khoá được kiểm soát bằng 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 Ví truy cập nhanh có xuất hiện ở 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

Trong Android 11, chế độ hiển thị Ví truy cập nhanh được kiểm soát bằng hai 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 đặt thành true bởi WalletPluginService. Nếu QuickAccessWallet không có trong 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 chế độ cài đặt này 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 Quick Access Wallet, hãy chạy CTS và kiểm thử thủ công. Các thay đổi đối với trình bổ trợ cũng nên thực hiện các kiểm thử điện tâm đồ đi kèm.

Kiểm thử CTS

Chạy các chương trình kiểm thử CTS tại cts/tests/quickaccesswallet.

Kiểm thử thủ công cho Android 12

Để kiểm thử các tính năng cốt lõi của Quick Access Wallet, bạn cần có một thiết bị thanh toán NFC (thực hoặc giả) và một ứng dụng thanh toán 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: tình trạng hoạt động, trạng thái rỗng, lựa chọn thẻ và hành vi của 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 Ví Truy cập nhanh trong cả phần cài đặt nhanh lẫ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, thì bạn có thể truy cập vào Ví truy cập nhanh trong ngăn 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 Wallet truy cập nhanh 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 Wallet truy cập nhanh trên màn hình khoá.

Trạng thái 0

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

    Thẻ thông tin mẫu trong ngăn thông báo hiển thị ứng dụng thanh toán NFC mặc định

    Hình 7. Thẻ thông tin mẫu trong ngăn thông báo hiển thị ứng dụng thanh toán 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 NFC mặc định sẽ mở ra. Chế độ xem trạng thái trống này chỉ hiển thị khi người dùng còn một thẻ trong ví, xoá thẻ khỏi trang chi tiết thẻ, sau đó 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 Wallet Truy cập nhanh.

Trạng thái khác 0

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

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

    Hình 9. Ví dụ về thẻ thông tin trong nền khi ứng dụng ví có một hoặc nhiều thẻ.

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

  • Màn hình khoá sẽ hiển thị một nút để mở Wallet truy cập nhanh.

    Giao diện người dùng của Wallet Truy cập nhanh hiển thị một thẻ

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

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

  • Khi bạn nhấp vào một thẻ xuất hiện, hoạt động chi tiết trên thẻ đó sẽ mở ra.

  • Nếu QuickAccessWalletService cung cấp nhiều 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 thị ví.

Kiểm thử trạng thái khoá

  • Nếu điện thoại bị khoá, ví sẽ xuất hiện trên ngăn cài đặt nhanh, với nội dung mô tả là 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 đang khoá, chế độ hiển thị ví trên màn hình khoá sẽ được kiểm soát bằng chế độ cài đặt Secure.LOCKSCREEN_SHOW_WALLET. Chế độ cài đặt này được kiểm soát trong phần Cài đặt.
  • Nếu điện thoại đang khoá, LOCKSCREEN_SHOW_WALLETfalse và không có thẻ nào tồn tại 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 đang khoá, LOCKSCREEN_SHOW_WALLETtrue và không có thẻ nào tồn tại 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 đang khoá, LOCKSCREEN_SHOW_WALLETtrue và thẻ có 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 truy xuất lại thẻ. Điều này có thể dẫn đến nội dung thẻ khác.

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ư nghe nội dung mô tả của các thẻ.
  • Khi bật TalkBack, thao tác vuốt sang trái và phải sẽ lần lượt chọn từng thẻ. Người dùng TalkBack có thể chọn và sử dụng phương thức thanh toán NFC tại thiết bị thanh toán NFC.

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

Để kiểm thử các tính năng cốt lõi của Quick Access Wallet, bạn cần có một thiết bị thanh toán NFC (thực hoặc giả) và một ứng dụng thanh toán 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 tình trạng hoạt động, trạng thái rỗng, lựa chọn thẻ và hành vi của 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 NFC mặc định hỗ trợ tính năng này, thì bạn có thể truy cập vào Wallet truy cập nhanh.
  • 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 truy cập được vào Wallet truy cập nhanh.
  • Nếu chế độ cài đặt GLOBAL_ACTIONS_PANEL_ENABLEDtrue và ứ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 truy cập được vào Ví truy cập nhanh.
  • Nếu chế độ cài đặt GLOBAL_ACTIONS_PANEL_ENABLEDfalse và ứ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 truy cập được vào Ví truy cập nhanh.

Trạng thái 0

  • 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 Wallet Truy cập nhanh sẽ hiển thị chế độ xem trạng thái trống.
  • Khi bạn 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 Wallet Truy cập nhanh
    Hình 11. Chế độ xem trạng thái trống trong giao diện người dùng Wallet Truy cập nhanh.

Trạng thái khác 0

  • 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 của Wallet Truy cập nhanh.

    Giao diện người dùng của tính năng Truy cập nhanh vào Wallet với một thẻ hiển thị
    Hình 12. Giao diện người dùng của tính năng Truy cập nhanh vào Wallet với một thẻ được hiển thị.
  • Nếu thẻ hiển thị đại diện cho một phương thức thanh toán NFC, thì việc đưa điện thoại đến gần thiết bị thanh toán NFC sẽ dẫn đến việc sử dụng phương thức thanh toán đó và chế độ xem ví sẽ bị đóng.

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

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

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

Kiểm thử trạng thái khoá

  • Nếu điện thoại đang khoá, chế độ hiển thị của ví sẽ do chế độ cài đặt Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT kiểm soát. Bạn có thể kiểm soát chế độ cài đặt này 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ẽ xuất hiện.
  • 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 truy vấn lại, điều này có thể dẫn đến nội dung thẻ khác.

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à sang phải, cũng như nghe phần mô tả nội dung trên các thẻ.
  • Khi TalkBack đang bật, thao tác vuốt sang trái và phải sẽ lần lượt chọn từng thẻ. Người dùng TalkBack có thể chọn và sử dụng phương thức thanh toán NFC tại thiết bị thanh toán NFC.