Wallet สำหรับการเข้าถึงด่วน

ฟีเจอร์ Quick Access Wallet ที่พร้อมให้ใช้งานใน Android 11 จะช่วยให้ผู้ใช้เข้าถึงบัตรสำหรับชำระเงินและบัตรที่เกี่ยวข้องได้โดยตรงจากเมนูเปิด/ปิด กรณีการใช้งานหลักๆ ได้แก่ การเลือกวิธีการชำระเงินที่เหมาะสมก่อนทำธุรกรรมที่เครื่องชำระเงิน NFC และเข้าถึงเที่ยวบินและบัตรอื่นๆ สำหรับกิจกรรมที่กําลังจะจัดขึ้นอย่างรวดเร็ว

ใน Android 12 ขึ้นไป ฟีเจอร์กระเป๋าสตางค์การเข้าถึงด่วนจะพร้อมใช้งานจากแผงควบคุมที่แสดงในรูปภาพ 1 และรูปภาพ 2

ฟีเจอร์ Wallet สำหรับการเข้าถึงด่วนในหน้าต่าง
ภาพที่ 1 ฟีเจอร์การเข้าถึงด่วนสำหรับ Wallet (อุปกรณ์ล็อกอยู่)
ฟีเจอร์การเข้าถึงด่วนสำหรับ Wallet ในหน้าต่างแจ้งเตือน
รูปที่ 2 ฟีเจอร์การเข้าถึงด่วนสำหรับ Wallet (อุปกรณ์ปลดล็อกอยู่)

ใน Android 11 ฟีเจอร์นี้จะพร้อมใช้งานจากเมนูพลังงานดังที่แสดงในรูปภาพ 3

ฟีเจอร์การเข้าถึงด่วนสำหรับ Wallet ในเมนูเปิด/ปิด
รูปที่ 3 ฟีเจอร์การเข้าถึงด่วนสำหรับ Wallet ในเมนูการปิด/เปิด

ข้อกำหนด

อุปกรณ์ของคุณต้องมี NFC จึงจะใช้ฟีเจอร์การเข้าถึง Wallet ด่วนได้ ฟีเจอร์นี้จะเชื่อมโยงกับ QuickAccessWalletService ของแอปการชำระเงิน NFC เริ่มต้น ซึ่งหมายความว่าอุปกรณ์ต้องรองรับ NFCการจําลองบัตรบนอุปกรณ์ (HCE) ด้วย

ภาพรวมของฟีเจอร์

Wallet การเข้าถึงด่วนประกอบด้วย 2 ส่วน ได้แก่ UI สำหรับการเข้าถึงด่วน Wallet และผู้ให้บริการบัตร Wallet สำหรับการเข้าถึงด่วน

ใน Android 12 ขึ้นไป UI ของ Wallet จะทำงานใน System UI และอยู่ใน frameworks/base/packages/SystemUI/src/com/android/systemui/wallet ใน Android 11 คุณต้องติดตั้งและเพิ่ม UI ของ Wallet ซึ่งอยู่ใน platform/packages/apps/QuickAccessWallet ลงในรายการที่อนุญาต

ผู้ให้บริการบัตรใน Quick Access Wallet เป็นแอปการชำระเงิน NFC เริ่มต้น ผู้ใช้สามารถติดตั้งแอปการชำระเงิน NFC หลายแอปพร้อมกันได้ แต่มีเพียงแอปการชำระเงิน NFC เริ่มต้นเท่านั้นที่จะแสดงบัตรในเมนูพลังงานได้ คุณสามารถระบุได้ว่าจะให้แอปการชำระเงิน NFC แอปใดตั้งเป็นค่าเริ่มต้น ในขั้นต้น แต่ผู้ใช้สามารถเลือกแอปอื่นได้ในการตั้งค่า หากติดตั้งแอปการชำระเงิน NFC ไว้เพียงแอปเดียว แอปนั้นจะเป็นแอปเริ่มต้นโดยอัตโนมัติ (ดูCardEmulationManager)

การใช้งาน

หากต้องการระบุบัตรใน UI ของ Wallet การเข้าถึงด่วน แอปการชำระเงิน NFC ต้องใช้ QuickAccessWalletService แอปการชำระเงินต้องมีรายการไฟล์ Manifest ที่โฆษณาบริการ

แอปการชำระเงิน NFC ต้องมีสิทธิ์ android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE เพื่อให้มั่นใจว่ามีเพียง UI ของระบบเท่านั้นที่ลิงก์กับ QuickAccessWalletService ได้ การต้องมีสิทธิ์นี้ช่วยให้มั่นใจได้ว่า เฉพาะ UI ของระบบเท่านั้นที่จะเชื่อมโยงกับ 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 ด้วยเหตุนี้ ระบบจึงปิด UI ของ Wallet การเข้าถึงด่วน ซึ่งทำให้ผู้ใช้มองเห็นกิจกรรมการชำระเงินได้อย่างชัดเจน

ดูเอกสารประกอบเพิ่มเติมเกี่ยวกับการติดตั้งใช้งาน QuickAccessWalletService ได้ที่ QuickAccessWalletService และข้อสอบ TestQuickAccessWalletService CTS

เปิดใช้ UI การเข้าถึงด่วนสำหรับ Wallet ใน Android 11

หากต้องการกำหนดค่ากระเป๋าสตางค์การเข้าถึงด่วนให้พร้อมใช้งานจากเมนูพลังงานใน Android 11 ให้รวมเป้าหมาย QuickAccessWallet ไว้ในบิลด์และเปิดใช้ปลั๊กอิน globalactions.wallet โดยเพิ่มบรรทัดที่เป็นตัวหนาในตัวอย่างโค้ดด้านล่างลงในไฟล์ overlay/frameworks/base/packages/SystemUI/res/values/config.xml

<resources>
    ...
    <!-- SystemUI Plugins that can be loaded on user builds. -->
    <string-array name="config_pluginWhitelist" translatable="false">
        <item>com.android.systemui</item>
        <item>com.android.systemui.plugin.globalactions.wallet</item>
    </string-array>
</resources>

ระบุแอปการชำระเงิน NFC เริ่มต้นในไฟล์การกำหนดค่าการตั้งค่าโดยใช้ def_nfc_payment_component

แอปการชำระเงิน NFC เริ่มต้นต้องแสดง QuickAccessWalletService เพื่อส่งบัตรไปยัง Quick Access Wallet หากแอปการชำระเงิน NFC เริ่มต้นไม่ได้ส่งออกบริการนี้ UI ของกระเป๋าสตางค์จะซ่อนอยู่

รายละเอียดการใช้งาน QuickAccessWalletService

QuickAccessWalletService มีเมธอดนามธรรม 3 รายการที่ต้องนำมาใช้ ได้แก่ onWalletCardsRequested, onWalletCardSelected และ onWalletDismissed แผนภาพลำดับด้านล่างแสดงลำดับการเรียกใช้เมื่อดู Wallet การเข้าถึงด่วนก่อนการชำระเงิน NFC

แผนภาพลำดับการเข้าถึง Wallet ด่วน

ตัวอย่างลําดับการเรียกใช้เมื่อดู Wallet การเข้าถึงด่วน
รูปที่ 4 ตัวอย่างลำดับการโทรเมื่อมีการดู Wallet สำหรับการเข้าถึงด่วน

มุมมองของ Quick Access Wallet บางมุมมองอาจไม่ได้ตามมาด้วยการชำระเงินผ่าน NFC แต่รูปที่ 4 ด้านบนแสดงความสามารถทั้งหมดของ QuickAccessWalletService ในตัวอย่างนี้ ผู้ให้บริการบัตร Quick Access Wallet ใช้องค์ประกอบที่ขีดเส้นขอบด้วยสีน้ำเงิน ระบบจะถือว่าบัตรสําหรับชําระเงินจัดเก็บอยู่ในอุปกรณ์ในฐานข้อมูลและเข้าถึงผ่านอินเทอร์เฟซชื่อ PaymentCardManager และสมมติเพิ่มเติมว่ากิจกรรมที่ชื่อ PaymentActivity แสดงผลลัพธ์ของการชำระเงินผ่าน NFC โดยมีขั้นตอนดังนี้

  1. ผู้ใช้ทำท่าทางสัมผัสเพื่อเปิด Wallet สำหรับการเข้าถึงด่วน
  2. UI ของกระเป๋าเงินการเข้าถึงด่วน (เป็นส่วนหนึ่งของ UI ของระบบ) จะตรวจสอบเครื่องมือจัดการแพ็กเกจเพื่อดูว่าแอปการชำระเงิน NFC เริ่มต้นส่งออกQuickAccessWalletServiceหรือไม่

    • หากไม่ได้ส่งออกบริการดังกล่าว กระเป๋าสตางค์การเข้าถึงด่วนจะไม่แสดง
  3. UI การเข้าถึงด่วนของ Wallet จะเชื่อมโยงกับ QuickAccessWalletService และเรียกใช้ onWalletCardsRequested เมธอดนี้ใช้ออบเจ็กต์คำขอซึ่งมีข้อมูลเกี่ยวกับจำนวนและขนาดของการ์ดที่แสดงได้ รวมถึงการเรียกกลับ สามารถเรียก Callback จากชุดข้อความที่อยู่เบื้องหลังได้

  4. QuickAccessWalletService จะคํานวณการ์ดที่ต้องการแสดง แล้วเรียกใช้เมธอด onSuccess ในคอลแบ็กที่ระบุ เราขอแนะนําให้บริการดําเนินการเหล่านี้ในเธรดเบื้องหลัง

  5. ทันทีที่การ์ดแสดงขึ้น UI ของระบบจะแจ้งให้ QuickAccessWalletService ทราบว่าได้เลือกการ์ดใบแรกแล้วโดยการเรียกใช้ onWalletCardSelected

    • ระบบจะเรียกใช้ onWalletCardSelected ทุกครั้งที่ผู้ใช้เลือกบัตรใหม่
    • ระบบอาจเรียกใช้ onWalletCardSelected แม้ว่าการ์ดที่เลือกอยู่ในปัจจุบันจะไม่มีการทําการเปลี่ยนแปลงก็ตาม
  6. เมื่อผู้ใช้ปิด Wallet การเข้าถึงด่วน UI ของระบบจะแจ้งเตือน QuickAccessWalletService โดยเรียก onWalletDismissed

ในตัวอย่างข้างต้น ผู้ใช้นำโทรศัพท์เข้าไปอยู่ในระยะสัญญาณของเครื่องชำระเงิน NFC ขณะที่กำลังแสดง Wallet องค์ประกอบหลักของการจัดการการชำระเงิน NFC คือ HostApduService ซึ่งต้องติดตั้งใช้งานเพื่อประมวลผล APDU ที่เครื่องอ่าน NFC ระบุ (ดูข้อมูลเพิ่มเติมได้ที่การจําลองบัตรที่อิงตามโฮสต์) ระบบจะถือว่าแอปการชำระเงินเริ่มกิจกรรมเพื่อแสดงความคืบหน้าและผลลัพธ์ของการโต้ตอบกับเครื่องอ่าน NFC อย่างไรก็ตาม UI ของ Wallet การเข้าถึงด่วนจะแสดงที่ด้านบนของหน้าต่างแอป ซึ่งหมายความว่า UI ของ Wallet การเข้าถึงด่วนจะบดบังกิจกรรมการชำระเงิน หากต้องการแก้ไขข้อผิดพลาดนี้ แอปต้องแจ้งให้ UI ของระบบทราบว่าควรปิด UI ของ Wallet การเข้าถึงด่วน ซึ่งทำได้โดยขอการอ้างอิงไปยัง QuickAccessWalletService ที่เชื่อมโยงและเรียกใช้ sendWalletServiceEvent ด้วยประเภทเหตุการณ์ TYPE_NFC_PAYMENT_STARTED

การใช้งานตัวอย่างของ QuickAccessWalletService

/** Sample implementation of {@link QuickAccessWalletService} */
@RequiresApi(VERSION_CODES.R)
public class MyQuickAccessWalletService extends QuickAccessWalletService {

  private static final String TAG = "QAWalletSvc";
  private ExecutorService executor;
  private PaymentCardManager paymentCardManager;

  @Override
  public void onCreate() {
    super.onCreate();
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      Log.w(TAG, "Should not run on pre-R devices");
      stopSelf();
      return;
    }
    executor = Executors.newSingleThreadExecutor();
    paymentCardManager = new PaymentCardManager();
  }

  @Override
  public void onDestroy() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.shutdownNow();
  }

  @Override
  public void onWalletCardsRequested(
      @NonNull GetWalletCardsRequest request, @NonNull GetWalletCardsCallback callback) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.submit(
        () -> {
          List<PaymentCard> paymentCards = paymentCardManager.getCards();
          int maxCards = Math.min(paymentCards.size(), request.getMaxCards());
          List<WalletCard> walletCards = new ArrayList<>(maxCards);
          int selectedIndex = 0;
          int cardWidthPx = request.getCardWidthPx();
          int cardHeightPx = request.getCardHeightPx();
          for (int index = 0; index < maxCards; index++) {
            PaymentCard paymentCard = paymentCards.get(index);
            WalletCard walletCard =
                new WalletCard.Builder(
                        paymentCard.getCardId(),
                        paymentCard.getCardImage(cardWidthPx, cardHeightPx),
                        paymentCard.getContentDescription(),
                        paymentCard.getPendingIntent())
                    .build();
            walletCards.add(walletCard);
            if (paymentCard.isSelected()) {
              selectedIndex = index;
            }
          }
          GetWalletCardsResponse response =
              new GetWalletCardsResponse(walletCards, selectedIndex);
          callback.onSuccess(response);
        });
  }

  @Override
  public void onWalletCardSelected(@NonNull SelectWalletCardRequest request) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.submit(
        () -> paymentCardManager.selectCardById(request.getCardId()));
  }

  @Override
  public void onWalletDismissed() {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R) {
      return;
    }
    executor.submit(() -> {
      paymentCardManager.removeCardOverrides();
    });
  }
}

ดูรายละเอียดเพิ่มเติมเกี่ยวกับ QuickAccessWalletService ได้ที่เอกสารอ้างอิง API ของ QuickAccessWalletService

สิทธิ์

รายการไฟล์ Manifest สำหรับ QuickAccessWalletService ต้องใช้สิทธิ์ android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE ที่เปิดตัวใน Android 11 สิทธิ์นี้เป็นสิทธิ์ระดับลายเซ็นที่ UI ของระบบมี ซึ่งหมายความว่ามีเพียงกระบวนการ UI ของระบบเท่านั้นที่จะเชื่อมโยงกับการใช้งาน QuickAccessWalletService ได้ โปรดทราบว่าแอปที่โหลดจากแหล่งที่ไม่รู้จักจะอ้างสิทธิ์สิทธิ์นี้และเข้าถึงข้อมูล QuickAccessWalletService อย่างเต็มรูปแบบในอุปกรณ์ที่ใช้ Android 10 หรือต่ำกว่าได้ เพื่อป้องกันปัญหานี้ เราขอแนะนำให้บริการตรวจสอบเวอร์ชันบิลด์ใน onCreate และเปิดใช้บริการในอุปกรณ์ที่ใช้ Android 11 ขึ้นไปเท่านั้น ไม่จำเป็นต้องขอสิทธิ์อื่นๆ ของแอปนอกเหนือจากสิทธิ์ที่จำเป็นในการให้บริการการชำระเงินผ่านระบบการจําลองบัตรของโฮสต์

หากแอปการชำระเงิน NFC เริ่มต้นไม่ได้ติดตั้งใช้งานหรือส่งออกQuickAccessWalletService ระบบจะไม่แสดง UI ของ Wallet แบบเข้าถึงด่วน

การตั้งค่าใน Android 12

หากต้องการเปิดหรือปิดใช้ Wallet เข้าถึงด่วนจากหน้าจอล็อก ผู้ใช้สามารถใช้ปุ่มสลับแสดง Wallet ในการตั้งค่า > การแสดงผล > หน้าจอล็อก หากต้องการปิดใช้ Wallet ในแผงการตั้งค่าด่วน ผู้ใช้ต้องแก้ไขด้วยตนเองในแผงการตั้งค่าด่วน

สลับเพื่อเปิดหรือปิดใช้ Wallet จากหน้าจอล็อก

รูปที่ 5 แสดงปุ่มสลับ Wallet ในหน้าหน้าจอล็อกในการตั้งค่า

การตั้งค่าใน Android 11

ผู้ใช้สามารถปิดฟีเจอร์ Quick Access Wallet ได้จากแอปการตั้งค่า หน้าการตั้งค่าอยู่ใน การตั้งค่า > ระบบ > ท่าทางสัมผัส > บัตรและบัตรผ่าน

หน้าการตั้งค่าเพื่อเปิดหรือปิดใช้ฟีเจอร์ Wallet การเข้าถึงด่วน
รูปที่ 6 หน้าการตั้งค่าเพื่อเปิดหรือปิดใช้ฟีเจอร์การเข้าถึง Wallet ด่วน

การปรับแต่ง

เพิ่มมุมมองการเข้าถึงด่วนของ Wallet ไปยังตำแหน่งอื่นใน UI ของระบบ

UI ของ Wallet สำหรับการเข้าถึงด่วนสร้างขึ้นเป็นปลั๊กอินของระบบ แม้ว่าการใช้งาน 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);
  }
}

UI การเข้าถึงด่วนของ Wallet ใช้ GlobalActionsPanelPlugin และ PanelViewController GlobalActionsDialog รับอินสแตนซ์ของปลั๊กอิน Wallet โดยใช้ 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();

หากต้องการนำ Wallet การเข้าถึงด่วนออกจากเมนูพลังงาน ให้ละเว้นเป้าหมาย QuickAccessWallet ออกจากบิลด์ระบบ หากต้องการนำ Wallet เข้าถึงด่วนออกจากเมนูพลังงาน แต่เพิ่มลงในมุมมองอื่นที่ UI ของระบบมีให้ ให้ระบุเป้าหมายการสร้างและนำการอ้างอิง GlobalActionsPanelPlugin ออกจาก GlobalActionsImpl

ตั้งค่าเริ่มต้น

Android 12

ใน Android 12 ขึ้นไป Wallet การเข้าถึงด่วนจะแสดงอยู่ในหน้าต่างการตั้งค่าด่วนเสมอ ระดับการเข้าถึง Wallet เข้าถึงด่วนในหน้าจอล็อกจะกำหนดโดยการตั้งค่าที่ปลอดภัยต่อไปนี้ LOCKSCREEN_SHOW_WALLET การตั้งค่านี้จะควบคุมว่าจะแสดงไอคอนกระเป๋าสตางค์การเข้าถึงด่วนที่ด้านล่างขวาของหน้าจอล็อกหรือไม่ การตั้งค่านี้จะเป็น true โดยค่าเริ่มต้น แต่ผู้ใช้ปิดใช้ได้ในการตั้งค่า > การแสดงผล > หน้าจอล็อก > แสดง Wallet

Android 11

ใน Android 11 ระดับการเข้าถึง Wallet ของ Quick Access จะถูกจำกัดด้วยการตั้งค่าความปลอดภัย 2 รายการ ได้แก่ GLOBAL_ACTIONS_PANEL_ENABLED และ GLOBAL_ACTIONS_PANEL_AVAILABLE การตั้งค่า AVAILABLE จะควบคุมว่าจะเปิดหรือปิดฟีเจอร์ได้ในการตั้งค่าหรือไม่ การตั้งค่านี้มีค่าเป็น true โดย WalletPluginService หาก QuickAccessWallet ไม่ได้รวมอยู่ในบิลด์ การตั้งค่าจะยังคงอยู่ false การตั้งค่า ENABLED จะตั้งค่าเป็น true โดยค่าเริ่มต้นในที่เดียวกัน แต่ผู้ใช้ปิดได้ในการตั้งค่า หากต้องการเปลี่ยนลักษณะการทำงานเริ่มต้น ให้แก้ไข WalletPluginService#enableFeatureInSettings

การตรวจสอบความถูกต้อง

หากต้องการตรวจสอบการใช้งาน Quick Access Wallet ให้เรียกใช้ CTS และการทดสอบด้วยตนเอง การเปลี่ยนแปลงปลั๊กอินควรใช้การทดสอบ Robolectric ที่รวมมาด้วย

การทดสอบ CTS

เรียกใช้การทดสอบ CTS ที่ cts/tests/quickaccesswallet

การทดสอบด้วยตนเองสำหรับ Android 12

การทดสอบฟีเจอร์หลักของ Quick Access Wallet ต้องใช้เครื่องรับชำระเงิน NFC (จริงหรือจำลอง) และแอปการชำระเงิน NFC ที่ใช้ QuickAccessWalletService (แอป Wallet) ฟีเจอร์หลักที่ต้องทดสอบ ได้แก่ ความพร้อมใช้งาน สถานะ Zero State การเลือกการ์ด และลักษณะการทํางานของหน้าจอล็อก

ความพร้อมใช้งาน

  • หากแอปการชำระเงิน NFC เริ่มต้นไม่รองรับฟีเจอร์นี้ คุณจะเข้าถึง Wallet Wallet แบบรวดเร็วในการตั้งค่าด่วนหรือหน้าจอล็อกไม่ได้
  • หากแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้ คุณจะเข้าถึงกระเป๋าเงินการเข้าถึงด่วนได้ในหน้าต่างการตั้งค่าด่วน
  • หากแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้และการตั้งค่า LOCKSCREEN_SHOW_WALLET เป็น true คุณจะเข้าถึง Google Wallet เพื่อการเข้าถึงด่วนได้ในหน้าจอล็อก
  • หากแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้และการตั้งค่าLOCKSCREEN_SHOW_WALLETเป็นfalse คุณจะเข้าถึง Quick Access Wallet บนหน้าจอล็อกไม่ได้

สถานะศูนย์

  • หากเปิดใช้และส่งออก QuickAccessWalletService แต่ไม่ระบุการ์ดใดๆ ไทล์ใน Shade จะปรากฏดังที่แสดงในตัวอย่างในรูปที่ 7 การคลิกการ์ดจะเปิดแอปการชำระเงิน NFC เริ่มต้น

    ตัวอย่างการ์ดในหน้าต่างที่แสดงแอปการชำระเงิน NFC เริ่มต้น

    รูปที่ 7 ตัวอย่างการ์ดในหน้าต่างที่แสดงแอปการชำระเงิน NFC เริ่มต้น

  • การคลิกที่มุมมองสถานะว่างดังที่แสดงในรูปที่ 8 จะเปิดแอปการชำระเงิน NFC เริ่มต้น มุมมองสถานะว่างนี้จะแสดงเฉพาะเมื่อผู้ใช้มีบัตรเหลืออยู่ใน Wallet 1 ใบ นำบัตรออกจากหน้ารายละเอียดบัตร แล้วกลับไปที่มุมมอง Wallet

  • หน้าจอล็อกจะแสดงไอคอน Wallet

มุมมองสถานะว่างเปล่าใน Wallet การเข้าถึงด่วน

รูปที่ 8 มุมมองสถานะว่างใน UI การเข้าถึงด่วนของ Wallet

สถานะไม่ใช่ 0

  • หากแอป Wallet มีบัตรอย่างน้อย 1 ใบ ไทล์ในเฉดสีจะปรากฏดังที่แสดงในรูปที่ 9

    ตัวอย่างการ์ดในโหมดมืดเมื่อแอป Wallet มีบัตรอย่างน้อย 1 ใบ

    รูปที่ 9 ตัวอย่างการ์ดในเงาเมื่อแอป Wallet มีบัตรอย่างน้อย 1 ใบ

  • การคลิกการ์ดจะแสดงภาพสไลด์การ์ด

  • หน้าจอล็อกจะแสดงปุ่มที่เปิด Wallet การเข้าถึงด่วน

    UI การเข้าถึงด่วนของ Wallet ที่มีการแสดงบัตร

    รูปที่ 10 UI การเข้าถึงด่วนของ Wallet ที่มีการแสดงบัตร

  • หากบัตรที่แสดงแสดงถึงวิธีการชำระเงิน NFC การถือโทรศัพท์ไว้ใกล้เครื่องชำระเงิน NFC จะส่งผลให้มีการใช้วิธีการชำระเงินนั้นและมุมมอง Wallet จะปิดลง

  • การคลิกการ์ดที่แสดงจะเปิดกิจกรรมโดยละเอียดของการ์ดนั้น

  • หาก QuickAccessWalletService มีบัตรหลายใบ ผู้ใช้จะปัดดูบัตรต่างๆ ได้

  • เมนูรายการเพิ่มเติมมีรายการเดียว ได้แก่ เปิดการตั้งค่าหน้าจอล็อกเพื่อให้ผู้ใช้เปลี่ยนตัวเลือกแสดง Wallet ได้

การทดสอบสถานะล็อก

  • หากโทรศัพท์ล็อกอยู่ คุณจะเห็น Wallet ในแผงการตั้งค่าด่วนพร้อมคำอธิบายว่าเพิ่มบัตรหากไม่มีบัตรในแอปการชำระเงินเริ่มต้น หรือปลดล็อกเพื่อใช้งานหากมีแอปการชำระเงินเริ่มต้น
  • หากโทรศัพท์ล็อกอยู่ ระดับการมองเห็น Wallet ในหน้าจอล็อกจะควบคุมโดยการตั้งค่า Secure.LOCKSCREEN_SHOW_WALLET ซึ่งควบคุมได้ในการตั้งค่า
  • หากโทรศัพท์ล็อกอยู่ LOCKSCREEN_SHOW_WALLET คือ false และไม่มีบัตรอยู่ในแอปการชำระเงิน NFC เริ่มต้น กระเป๋าเงินจะไม่แสดงบนหน้าจอล็อก
  • หากโทรศัพท์ล็อกอยู่ LOCKSCREEN_SHOW_WALLET เป็น true และไม่มีบัตรในแอปการชำระเงิน NFC เริ่มต้น กระเป๋าเงินจะไม่แสดงในหน้าจอล็อก
  • หากโทรศัพท์ล็อกอยู่ LOCKSCREEN_SHOW_WALLET เป็น true และมีบัตรในแอปการชำระเงิน NFC เริ่มต้น กระเป๋าเงินจะแสดงในหน้าจอล็อก
  • การปลดล็อกโทรศัพท์ขณะที่แสดง Wallet บนหน้าจอล็อกจะทำให้ระบบขอการ์ดอีกครั้ง ซึ่งอาจส่งผลให้เนื้อหาของการ์ดแตกต่างกัน

การทดสอบการช่วยเหลือพิเศษ

  • ผู้ใช้ Talkback ไปยังส่วนต่างๆ ของมุมมอง Wallet ได้โดยการปัดซ้ายและขวา รวมถึงฟังคำอธิบายเนื้อหาของการ์ด
  • การปัดไปทางซ้ายและขวาโดยเปิดใช้ Talkback จะเลือกการ์ดแต่ละใบทีละใบ ผู้ใช้ Talkback จะเลือกและใช้วิธีการชำระเงิน NFC ได้ที่เครื่องชำระเงิน NFC

การทดสอบด้วยตนเองสำหรับ Android 11

การทดสอบฟีเจอร์หลักของ Quick Access Wallet ต้องใช้เครื่องรับชำระเงิน NFC (จริงหรือจำลอง) และแอปการชำระเงิน NFC ที่ใช้ QuickAccessWalletService (แอป Wallet) ฟีเจอร์หลักที่ต้องทดสอบ ได้แก่ ความพร้อมใช้งาน สถานะ Zero State การเลือกการ์ด และลักษณะการทํางานของหน้าจอล็อก

ความพร้อมใช้งาน

  • หากการตั้งค่า GLOBAL_ACTIONS_PANEL_ENABLED เป็น true และแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้ คุณจะเข้าถึง Wallet การเข้าถึงด่วนได้
  • หากการตั้งค่า GLOBAL_ACTIONS_PANEL_ENABLED เป็น false และแอปการชำระเงิน NFC เริ่มต้นรองรับฟีเจอร์นี้ คุณจะเข้าถึงกระเป๋าสตางค์การเข้าถึงด่วนไม่ได้
  • หากการตั้งค่า GLOBAL_ACTIONS_PANEL_ENABLED เป็น true และแอปการชำระเงิน NFC เริ่มต้นไม่รองรับฟีเจอร์นี้ ระบบจะไม่เข้าถึง Wallet สำหรับการเข้าถึงด่วน
  • หากการตั้งค่า GLOBAL_ACTIONS_PANEL_ENABLED เป็น false และแอปการชำระเงิน NFC เริ่มต้นไม่รองรับฟีเจอร์นี้ คุณจะเข้าถึงกระเป๋าสตางค์การเข้าถึงด่วนไม่ได้

สถานะศูนย์

  • หากเปิดใช้และส่งออก QuickAccessWalletService แต่ไม่ระบุบัตรใดๆ UI การเข้าถึงด่วนของ Wallet จะแสดงมุมมองสถานะว่าง
  • การคลิกมุมมองสถานะว่างจะเปิดแอป Wallet

    มุมมองสถานะว่างใน UI การเข้าถึงด่วนของ Wallet
    รูปที่ 11 มุมมองสถานะว่างใน UI การเข้าถึงด่วนของ Wallet

สถานะที่ไม่เป็น 0

  • หากแอป Wallet มีบัตรอย่างน้อย 1 ใบ การ์ดจะแสดงใน UI ของ Wallet การเข้าถึงด่วน

    UI การเข้าถึงด่วนของ Wallet ที่มีการแสดงบัตร
    รูปที่ 12 UI การเข้าถึงด่วนของ Wallet ที่มีการแสดงบัตร
  • หากการ์ดที่แสดงเป็นวิธีการชำระเงิน NFC การถือโทรศัพท์ไว้ใกล้กับเครื่องชำระเงินแบบ NFC จะทำให้ระบบใช้วิธีการชำระเงินนั้นและปิดมุมมองกระเป๋าสตางค์

  • การคลิกการ์ดที่แสดงอยู่จะปิดมุมมอง Wallet และเปิดกิจกรรมโดยละเอียดของบัตรนั้น

  • หาก QuickAccessWalletService ส่งบัตรให้มาหลายใบ ผู้ใช้จะปัดระหว่างบัตรต่างๆ ได้

  • เมนูรายการเพิ่มเติมมี 2 รายการ ได้แก่ รายการที่เปิดแอป Wallet และรายการที่เปิดหน้าจอแสดงบัตรและบัตรผ่านในการตั้งค่า

การทดสอบสถานะล็อก

  • หากโทรศัพท์ล็อกอยู่ ระดับการเข้าถึง Wallet จะควบคุมโดยการตั้งค่า Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT ซึ่งควบคุมได้ในการตั้งค่า
  • หากโทรศัพท์ล็อกอยู่และ POWER_MENU_LOCK_SHOW_CONTENT เป็น false กระเป๋าสตางค์จะไม่แสดง
  • หากโทรศัพท์ล็อกอยู่และ POWER_MENU_LOCK_SHOW_CONTENT เป็น true กระเป๋าสตางค์จะแสดงขึ้น
  • การปลดล็อกโทรศัพท์ขณะที่ Wallet แสดงอยู่บนหน้าจอล็อกจะส่งผลให้ระบบค้นหาบัตรอีกครั้ง ซึ่งอาจส่งผลให้เนื้อหาของบัตรแตกต่างกัน

การทดสอบการช่วยเหลือพิเศษ

  • ผู้ใช้ TalkBack ไปยังส่วนต่างๆ ของมุมมอง Wallet ได้โดยการปัดไปทางซ้ายและขวา รวมถึงฟังคำอธิบายเนื้อหาของการ์ด
  • การปัดไปทางซ้ายและขวาโดยเปิดใช้ TalkBack จะเป็นการเลือกการ์ดแต่ละใบตามลำดับ ผู้ใช้ TalkBack สามารถเลือกและใช้วิธีการชำระเงินด้วย NFC ที่เครื่องชำระเงิน NFC ได้