การเข้าถึงด่วนสำหรับ 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) ด้วย

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

Quick Access Wallet มี 2 ส่วน ได้แก่ UI ของ Quick Access Wallet และ ผู้ให้บริการบัตร Quick Access Wallet

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

ผู้ให้บริการบัตรใน 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>

ข้อมูลเพิ่มเติมเกี่ยวกับ Wallet จะรวมอยู่ในไฟล์ 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 และเริ่มกิจกรรมเพื่อแสดงความคืบหน้าและผลลัพธ์ของการชำระเงิน HostApduService ควรพยายามรับการอ้างอิงไปยัง QuickAccessWalletService ที่เชื่อมโยงและเรียก QuickAccessWalletService#sendEvent ด้วยประเภทเหตุการณ์ TYPE_NFC_PAYMENT_STARTED ซึ่งจะทำให้ระบบปิด UI ของ Wallet ในการเข้าถึงด่วน จึงช่วยให้ผู้ใช้เห็นกิจกรรมการชำระเงินได้อย่างชัดเจน

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

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

หากต้องการกำหนดค่า Quick Access Wallet ให้พร้อมใช้งานจากเมนูเปิด/ปิด ใน 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 เพื่อแสดงบัตรใน Wallet สำหรับการเข้าถึงด่วน หากแอปการชำระเงิน NFC เริ่มต้น ไม่ได้ส่งออกบริการนี้ ระบบจะซ่อน UI ของ Wallet

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

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

แผนภาพลำดับการทำงานของ Quick Access Wallet

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

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

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

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

  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 ในแถบเฉดสี ผู้ใช้ต้องแก้ไขด้วยตนเองในแถบการตั้งค่าด่วน

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

รูปที่ 5 แสดงปุ่มเปิด/ปิดกระเป๋าสตางค์ในหน้าจอล็อกในการตั้งค่า

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

ผู้ใช้ปิดฟีเจอร์กระเป๋าเงินสำหรับการเข้าถึงด่วนได้จากแอปการตั้งค่า โดยหน้าการตั้งค่าจะอยู่ในการตั้งค่า > ระบบ > ท่าทางสัมผัส > บัตร

หน้าการตั้งค่าเพื่อเปิดหรือปิดใช้ฟีเจอร์ Wallet สำหรับการเข้าถึงด่วน
รูปที่ 6 หน้าการตั้งค่าเพื่อเปิดหรือปิดใช้ฟีเจอร์ Quick Access 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 จะจำกัดด้วยการตั้งค่าที่ปลอดภัย 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) ฟีเจอร์หลักที่ต้องทดสอบ ได้แก่ ความพร้อมใช้งาน สถานะเริ่มต้น การเลือกบัตร และลักษณะการทำงานของหน้าจอล็อก

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

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

สถานะว่างเปล่า

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

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

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

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

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

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

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

สถานะที่ไม่ใช่ศูนย์

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

สถานะว่างเปล่า

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

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

สถานะที่ไม่ใช่ศูนย์

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

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

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

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

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

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

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

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

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