محفظة الوصول السريع

تتيح ميزة Quick Access Wallet، المتوفرة في Android 11، للمستخدم الوصول إلى بطاقات الدفع والتصاريح ذات الصلة مباشرة من قائمة الطاقة. تتضمن حالات الاستخدام الرئيسية تحديد طريقة الدفع المناسبة قبل إجراء معاملة في محطة NFC والوصول بسرعة إلى الرحلات الجوية والتصاريح الأخرى للأحداث القادمة.

في Android 12 أو الإصدارات الأحدث، تتوفر ميزة Quick Access Wallet من الظل كما هو موضح في الشكل 1 والشكل 2.

ميزة محفظة الوصول السريع في الظل
الشكل 1. ميزة محفظة الوصول السريع (الجهاز مقفل).
ميزة محفظة الوصول السريع في الظل
الشكل 2. ميزة محفظة الوصول السريع (الجهاز مفتوح).

في Android 11، تتوفر الميزة من قائمة الطاقة كما هو موضح في الشكل 3.

ميزة محفظة الوصول السريع في قائمة الطاقة
الشكل 3. ميزة محفظة الوصول السريع في قائمة الطاقة.

متطلبات

يجب أن يكون جهازك مزودًا بتقنية NFC لاستخدام ميزة محفظة الوصول السريع. ترتبط هذه الميزة بـ QuickAccessWalletService لتطبيق دفع NFC الافتراضي، مما يعني أن الجهاز يجب أن يدعم أيضًا محاكاة البطاقة المستندة إلى مضيف NFC (HCE) .

نظرة عامة على الميزات

هناك جزأين لمحفظة الوصول السريع: واجهة مستخدم محفظة الوصول السريع وموفر بطاقة محفظة الوصول السريع.

في نظام التشغيل Android 12 أو الإصدارات الأحدث، تعمل واجهة مستخدم Wallet في System UI وتقع في frameworks/base/packages/SystemUI/src/com/android/systemui/wallet . في Android 11، يجب تثبيت واجهة مستخدم Wallet، الموجودة في platform/packages/apps/QuickAccessWallet ، وإدراجها في القائمة البيضاء.

يعد موفر بطاقة Quick Access Wallet هو تطبيق الدفع الافتراضي عبر NFC. يمكن للمستخدمين تثبيت العديد من تطبيقات الدفع NFC في وقت واحد، ولكن تطبيق الدفع NFC الافتراضي فقط يمكنه عرض البطاقات في قائمة الطاقة. يمكنك تحديد تطبيق دفع NFC الذي تم تعيينه كتطبيق افتراضي في البداية، ولكن يمكن للمستخدمين تحديد تطبيق مختلف في الإعدادات. إذا تم تثبيت تطبيق دفع NFC واحد فقط، فسيصبح التطبيق الافتراضي تلقائيًا (راجع CardEmulationManager ).

تطبيق

لتوفير بطاقات لواجهة مستخدم Quick Access Wallet، يجب أن تقوم تطبيقات الدفع NFC بتنفيذ QuickAccessWalletService . يجب أن تتضمن تطبيقات الدفع إدخالاً واضحًا يعلن عن الخدمة.

للتأكد من أن واجهة مستخدم النظام فقط هي التي يمكنها الارتباط بـ QuickAccessWalletService ، يجب أن يتطلب تطبيق الدفع NFC إذن android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE . ويضمن طلب هذا الإذن أن واجهة مستخدم النظام فقط هي التي يمكنها الارتباط بـ 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 . يؤدي هذا إلى استبعاد واجهة مستخدم محفظة الوصول السريع، مما يسمح للمستخدم برؤية نشاط الدفع دون عائق.

للحصول على وثائق إضافية حول تنفيذ QuickAccessWalletService ، راجع QuickAccessWalletService واختبار TestQuickAccessWalletService CTS.

تمكين واجهة مستخدم محفظة الوصول السريع في 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 لتوفير البطاقات لمحفظة الوصول السريع. إذا لم يقم تطبيق الدفع NFC الافتراضي بتصدير هذه الخدمة، فستكون واجهة مستخدم المحفظة مخفية.

تفاصيل تنفيذ QuickAccessWalletService

يحتوي QuickAccessWalletService على ثلاث طرق مجردة يجب تنفيذها: onWalletCardsRequested و onWalletCardSelected و onWalletDismissed . يوضح مخطط التسلسل أدناه تسلسل المكالمة عند عرض محفظة الوصول السريع مباشرة قبل دفعة NFC.

مخطط تسلسل محفظة الوصول السريع

مثال لتسلسل المكالمات عند عرض محفظة الوصول السريع
الشكل 4. مثال لتسلسل المكالمات عند عرض محفظة الوصول السريع.

لا تتبع جميع طرق عرض Quick Access Wallet دفعة عبر NFC، ولكن الشكل 4 أعلاه يوضح جميع إمكانيات QuickAccessWalletService . في هذا المثال، يقوم موفر بطاقة Quick Access Wallet بتنفيذ العناصر الموضحة باللون الأزرق. من المفترض أن يتم تخزين بطاقات الدفع على الجهاز في قاعدة بيانات ويمكن الوصول إليها من خلال واجهة تسمى PaymentCardManager . من المفترض أيضًا أن يعرض نشاط يسمى PaymentActivity نتيجة دفع NFC. يستمر التدفق على النحو التالي:

  1. يقوم المستخدم بإجراء إيماءة لإظهار محفظة الوصول السريع.
  2. تتحقق واجهة مستخدم Quick Access Wallet (جزء من System UI) من مدير الحزم لمعرفة ما إذا كان تطبيق دفع NFC الافتراضي يقوم بتصدير QuickAccessWalletService .

    • إذا لم يتم تصدير الخدمة، فلن يتم عرض محفظة الوصول السريع.
  3. ترتبط واجهة مستخدم محفظة الوصول السريع بـ QuickAccessWalletService وتستدعي onWalletCardsRequested . تأخذ هذه الطريقة كائن طلب يحتوي على بيانات حول عدد وحجم البطاقات التي يمكن توفيرها ورد الاتصال. يمكن استدعاء رد الاتصال من سلسلة محادثات في الخلفية.

  4. يحسب QuickAccessWalletService البطاقات التي يريد إظهارها، ثم يستدعي التابع onSuccess في رد الاتصال المقدم. من المستحسن أن تقوم الخدمة بتنفيذ هذه الإجراءات على سلسلة محادثات في الخلفية.

  5. بمجرد عرض البطاقات، تقوم واجهة مستخدم النظام بإعلام QuickAccessWalletService بأنه تم تحديد البطاقة الأولى عن طريق استدعاء onWalletCardSelected .

    • يتم استدعاء onWalletCardSelected في كل مرة يقوم فيها المستخدم بتحديد بطاقة جديدة.
    • قد يتم استدعاء onWalletCardSelected حتى إذا لم تتغير البطاقة المحددة حاليًا.
  6. عندما يرفض المستخدم محفظة الوصول السريع، تقوم واجهة مستخدم النظام بإعلام QuickAccessWalletService عن طريق استدعاء onWalletDismissed .

في المثال أعلاه، يقوم المستخدم بإحضار الهاتف إلى نطاق محطة الدفع NFC أثناء عرض المحفظة. يعد HostApduService مكونًا رئيسيًا للتعامل مع مدفوعات NFC، والذي يجب تنفيذه لمعالجة وحدات APDU التي يوفرها قارئ NFC (لمزيد من المعلومات، راجع مضاهاة البطاقة المستندة إلى المضيف ). من المفترض أن يبدأ تطبيق الدفع نشاطًا لعرض التقدم ونتيجة التفاعل مع محطة NFC. ومع ذلك، يتم عرض واجهة مستخدم محفظة الوصول السريع أعلى نافذة التطبيق، مما يعني أن نشاط الدفع محجوب بواسطة واجهة مستخدم محفظة الوصول السريع. لتصحيح ذلك، يجب على التطبيق إخطار واجهة مستخدم النظام بوجوب تجاهل واجهة مستخدم محفظة الوصول السريع. ويمكنه القيام بذلك عن طريق الحصول على مرجع إلى 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 ، راجع مرجع واجهة برمجة تطبيقات QuickAccessWalletService .

الأذونات

يجب أن يتطلب إدخال البيان لـ QuickAccessWalletService إذن android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE المقدم في Android 11. وهذا إذن على مستوى التوقيع تحتفظ به واجهة مستخدم النظام، مما يعني أن عملية واجهة مستخدم النظام فقط هي التي يمكنها الارتباط بتطبيقات QuickAccessWalletService . انتبه إلى أن التطبيقات المحملة على الجانب يمكنها المطالبة بهذا الإذن والحصول على حق الوصول الكامل إلى بيانات QuickAccessWalletService على الأجهزة التي تعمل بنظام Android 10 أو أقل. لمنع ذلك، يوصى بأن تتحقق الخدمة من إصدار الإصدار في onCreate وتمكين الخدمة فقط على الأجهزة التي تعمل بنظام Android 11 والإصدارات الأحدث. لا توجد أذونات تطبيقات أخرى مطلوبة بخلاف تلك الضرورية لتوفير خدمات الدفع لمحاكاة البطاقة المضيفة.

إذا لم يقم تطبيق دفع NFC الافتراضي بتنفيذ أو تصدير QuickAccessWalletService ، فلن يتم عرض واجهة مستخدم Quick Access Wallet.

الإعدادات في أندرويد 12

لتمكين محفظة الوصول السريع أو تعطيلها من شاشة القفل، يمكن للمستخدمين استخدام مفتاح تبديل إظهار المحفظة في الإعدادات > العرض > شاشة القفل . لتعطيل المحفظة في الظل، يجب على المستخدمين تحريرها يدويًا في ظل الإعدادات السريعة.

قم بالتبديل لتمكين أو تعطيل المحفظة من شاشة القفل

الشكل 5. أظهر تبديل المحفظة في صفحة شاشة القفل في الإعدادات.

الإعدادات في أندرويد 11

يمكن للمستخدمين إيقاف تشغيل ميزة Quick Access Wallet من تطبيق الإعدادات. يمكنك العثور على صفحة الإعدادات في الإعدادات > النظام > الإيماءات > البطاقات والتصاريح .

صفحة الإعدادات لتمكين أو تعطيل ميزة محفظة الوصول السريع
الشكل 6. صفحة الإعدادات لتمكين أو تعطيل ميزة محفظة الوصول السريع.

التخصيص

إضافة عرض محفظة الوصول السريع إلى موقع آخر في واجهة مستخدم النظام

تم إنشاء واجهة مستخدم Quick Access 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);
  }
}

تطبق واجهة مستخدم محفظة الوصول السريع GlobalActionsPanelPlugin و PanelViewController . يحصل GlobalActionsDialog على مثيل للمكون الإضافي للمحفظة باستخدام com.android.systemui.Dependency :

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

بعد التحقق من أن المكون الإضافي غير فارغ وأن PanelViewController الذي تم إرجاعه بواسطة onPanelShown غير فارغ، يقوم مربع الحوار بإرفاق 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();

لإزالة Quick Access Wallet من قائمة الطاقة، قم بحذف هدف QuickAccessWallet من إنشاء النظام. لإزالة Quick Access Wallet من قائمة الطاقة مع إضافتها إلى طريقة عرض مختلفة مقدمة لواجهة مستخدم النظام، قم بتضمين هدف الإنشاء وإزالة المراجع إلى GlobalActionsPanelPlugin من GlobalActionsImpl .

ضبط التكوينات الافتراضية

أندرويد 12

في نظام التشغيل Android 12 أو الإصدارات الأحدث، تكون محفظة الوصول السريع مرئية دائمًا في ظل الإعدادات السريعة. يتم تحديد رؤية محفظة الوصول السريع في شاشة القفل من خلال الإعداد الآمن التالي: LOCKSCREEN_SHOW_WALLET . يتحكم هذا الإعداد في ما إذا كانت أيقونة Quick Access Wallet ستظهر في الجزء السفلي الأيمن من شاشة القفل. يتم تعيين هذا الإعداد على true افتراضيًا، ولكن يمكن للمستخدم إيقاف تشغيله في الإعدادات > العرض > شاشة القفل > إظهار المحفظة .

أندرويد 11

في Android 11، يتم تقييد رؤية محفظة الوصول السريع من خلال إعدادين آمنين: GLOBAL_ACTIONS_PANEL_ENABLED و GLOBAL_ACTIONS_PANEL_AVAILABLE . يتحكم الإعداد AVAILABLE في إمكانية تشغيل الميزة وإيقاف تشغيلها في الإعدادات. تم ضبط هذا الإعداد على true بواسطة WalletPluginService . إذا لم يتم تضمين QuickAccessWallet في الإصدار، فسيظل الإعداد false . يتم تعيين الإعداد ENABLED على true افتراضيًا في نفس المكان، ولكن يمكن للمستخدم إيقاف تشغيله في الإعدادات. لتغيير السلوك الافتراضي، قم بتعديل WalletPluginService#enableFeatureInSettings .

تصديق

للتحقق من صحة تنفيذك لمحفظة الوصول السريع، قم بتشغيل CTS والاختبارات اليدوية. يجب أن تخضع التغييرات التي يتم إجراؤها على البرنامج المساعد أيضًا للاختبارات الكهربائية الآلية المضمنة.

اختبارات سي تي إس

قم بتشغيل اختبارات CTS الموجودة في cts/tests/quickaccesswallet .

الاختبارات اليدوية لنظام Android 12

يتطلب اختبار الميزات الأساسية لمحفظة الوصول السريع وجود محطة دفع NFC (حقيقية أو مزيفة) وتطبيق دفع NFC الذي ينفذ QuickAccessWalletService (تطبيق المحفظة). تتضمن الميزات الأساسية التي يجب اختبارها ما يلي: التوفر، والحالة الصفرية، واختيار البطاقة، وسلوك شاشة القفل.

التوفر

  • إذا كان تطبيق الدفع NFC الافتراضي لا يدعم هذه الميزة، فلن يمكن الوصول إلى محفظة الوصول السريع سواء في الإعدادات السريعة أو في شاشة القفل.
  • إذا كان تطبيق الدفع NFC الافتراضي يدعم هذه الميزة، فيمكن الوصول إلى محفظة الوصول السريع في ظل الإعدادات السريعة.
  • إذا كان تطبيق الدفع NFC الافتراضي يدعم هذه الميزة وإذا كان إعداد LOCKSCREEN_SHOW_WALLET true ، فيمكن الوصول إلى محفظة الوصول السريع على شاشة القفل.
  • إذا كان تطبيق دفع NFC الافتراضي يدعم هذه الميزة وإذا كان إعداد LOCKSCREEN_SHOW_WALLET false ، فلن يمكن الوصول إلى محفظة الوصول السريع على شاشة القفل.

حالة الصفر

  • إذا تم تمكين QuickAccessWalletService وتصديره ولكنه لا يوفر أي بطاقات، فسيظهر المربع الموجود في الظل كما هو موضح في المثال في الشكل 7. يؤدي النقر فوق المربع إلى فتح تطبيق دفع NFC الافتراضي.

    مثال على المربع الموجود في الظل والذي يعرض تطبيق الدفع عبر NFC الافتراضي

    الشكل 7. مثال على المربع الموجود في الظل والذي يعرض تطبيق دفع NFC الافتراضي.

  • يؤدي النقر فوق عرض الحالة الفارغة كما هو موضح في الشكل 8 إلى فتح تطبيق دفع NFC الافتراضي. يتم عرض عرض الحالة الفارغة هذا فقط عندما يكون لدى المستخدم بطاقة واحدة متبقية في المحفظة، ويزيل البطاقة من صفحة تفاصيل البطاقة، ثم يعود إلى عرض المحفظة.

  • تعرض شاشة القفل رمز المحفظة.

عرض الحالة الفارغة في محفظة الوصول السريع

الشكل 8. عرض الحالة الفارغة في واجهة مستخدم محفظة الوصول السريع.

حالة غير الصفر

  • إذا كان تطبيق المحفظة يوفر بطاقة واحدة أو أكثر، فسيظهر المربع الموجود في الظل كما هو موضح في الشكل 9.

    مثال على البلاط في الظل عندما يحتوي تطبيق المحفظة على بطاقة واحدة أو أكثر

    الشكل 9. مثال على البلاط في الظل عندما يحتوي تطبيق المحفظة على بطاقة واحدة أو أكثر.

  • يؤدي النقر فوق المربع إلى ظهور دائري للبطاقة.

  • تعرض شاشة القفل زرًا يفتح محفظة الوصول السريع.

    واجهة المستخدم لمحفظة الوصول السريع مع بطاقة معروضة

    الشكل 10. واجهة المستخدم لمحفظة الوصول السريع مع البطاقة المعروضة.

  • إذا كانت البطاقة المعروضة تمثل طريقة دفع NFC، فإن حمل الهاتف أمام محطة دفع NFC يؤدي إلى استخدام طريقة الدفع هذه ورفض عرض المحفظة.

  • يؤدي النقر على البطاقة المعروضة إلى فتح النشاط التفصيلي لتلك البطاقة.

  • إذا تم توفير بطاقات متعددة بواسطة QuickAccessWalletService ، فسيكون المستخدم قادرًا على التمرير بين البطاقات.

  • تحتوي القائمة الكاملة على إدخال واحد: فتح إعدادات شاشة القفل حتى يتمكن المستخدم من تغيير خيار إظهار المحفظة .

اختبارات حالة القفل

  • إذا كان الهاتف مقفلاً، فستكون المحفظة مرئية في ظل الإعدادات السريعة، مع وصف لإضافة بطاقة في حالة عدم وجود بطاقة في تطبيق الدفع الافتراضي، أو فتحها للاستخدام في حالة وجود بطاقات في تطبيق الدفع الافتراضي.
  • إذا كان الهاتف مقفلاً، فسيتم التحكم في رؤية المحفظة على شاشة القفل من خلال الإعداد Secure.LOCKSCREEN_SHOW_WALLET ، والذي يتم التحكم فيه في الإعدادات.
  • إذا كان الهاتف مقفلاً، وكانت LOCKSCREEN_SHOW_WALLET false ، ولا توجد بطاقة في تطبيق الدفع الافتراضي عبر NFC، فلن يتم عرض المحفظة على شاشة القفل.
  • إذا كان الهاتف مقفلاً، وكان LOCKSCREEN_SHOW_WALLET true ، ولا توجد بطاقة في تطبيق الدفع NFC الافتراضي، فلن يتم عرض المحفظة على شاشة القفل.
  • إذا كان الهاتف مقفلاً، وكان LOCKSCREEN_SHOW_WALLET true ، وكانت البطاقات موجودة في تطبيق الدفع NFC الافتراضي، فسيتم عرض المحفظة على شاشة القفل.
  • يؤدي فتح قفل الهاتف أثناء عرض المحفظة على شاشة القفل إلى إعادة الاستعلام عن البطاقات، مما قد يؤدي إلى اختلاف محتوى البطاقة.

اختبارات إمكانية الوصول

  • يمكن لمستخدمي Talkback التنقل في عرض المحفظة عن طريق التمرير لليسار واليمين والاستماع إلى أوصاف محتوى البطاقات.
  • يؤدي التمرير سريعًا لليسار واليمين مع تمكين Talkback إلى تحديد كل بطاقة على حدة. يمكن لمستخدمي Talkback تحديد طريقة دفع NFC واستخدامها في محطة دفع NFC.

الاختبارات اليدوية لنظام Android 11

يتطلب اختبار الميزات الأساسية لمحفظة الوصول السريع وجود محطة دفع NFC (حقيقية أو مزيفة) وتطبيق دفع NFC الذي ينفذ QuickAccessWalletService (تطبيق المحفظة). تشمل الميزات الأساسية التي يجب اختبارها التوفر والحالة الصفرية واختيار البطاقة وسلوك شاشة القفل.

التوفر

  • إذا كان الإعداد GLOBAL_ACTIONS_PANEL_ENABLED true وكان تطبيق الدفع NFC الافتراضي يدعم هذه الميزة، فيمكن الوصول إلى Quick Access Wallet.
  • إذا كان إعداد GLOBAL_ACTIONS_PANEL_ENABLED false وكان تطبيق الدفع NFC الافتراضي يدعم هذه الميزة، فلن يمكن الوصول إلى Quick Access Wallet.
  • إذا كان الإعداد GLOBAL_ACTIONS_PANEL_ENABLED true وكان تطبيق الدفع NFC الافتراضي لا يدعم هذه الميزة، فلن يكون من الممكن الوصول إلى محفظة الوصول السريع.
  • إذا كان إعداد GLOBAL_ACTIONS_PANEL_ENABLED false وكان تطبيق الدفع NFC الافتراضي لا يدعم هذه الميزة، فلن يكون من الممكن الوصول إلى محفظة الوصول السريع.

حالة الصفر

  • إذا تم تمكين QuickAccessWalletService وتصديره ولكنه لا يوفر أي بطاقات، فستعرض واجهة مستخدم Quick Access Wallet عرض الحالة الفارغة.
  • يؤدي النقر فوق عرض الحالة الفارغة إلى فتح تطبيق المحفظة.

    عرض الحالة الفارغة في واجهة مستخدم محفظة الوصول السريع
    الشكل 11. عرض الحالة الفارغة في واجهة مستخدم محفظة الوصول السريع.

حالة غير الصفر

  • إذا كان تطبيق المحفظة يوفر بطاقة واحدة أو أكثر، فسيتم عرض البطاقات في واجهة مستخدم Quick Access Wallet.

    واجهة المستخدم لمحفظة الوصول السريع مع بطاقة معروضة
    الشكل 12. واجهة المستخدم لمحفظة الوصول السريع مع البطاقة المعروضة.
  • إذا كانت البطاقة المعروضة تمثل طريقة دفع NFC، فإن حمل الهاتف أمام محطة دفع NFC يؤدي إلى استخدام طريقة الدفع هذه ورفض عرض المحفظة.

  • يؤدي النقر فوق البطاقة المعروضة إلى رفض عرض المحفظة وفتح النشاط التفصيلي لتلك البطاقة.

  • إذا تم توفير بطاقات متعددة بواسطة QuickAccessWalletService ، فسيكون المستخدم قادرًا على التمرير بين البطاقات.

  • تحتوي القائمة الكاملة على إدخالين: أحدهما يفتح تطبيق المحفظة والآخر يفتح شاشة عرض البطاقات والتصاريح في الإعدادات.

اختبارات حالة القفل

  • إذا كان الهاتف مقفلاً، فسيتم التحكم في رؤية المحفظة من خلال الإعداد Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT ، والذي يمكن التحكم فيه من خلال الإعدادات.
  • إذا كان الهاتف مقفلاً وكان POWER_MENU_LOCK_SHOW_CONTENT false ، فلن يتم عرض المحفظة.
  • إذا كان الهاتف مقفلاً وكان POWER_MENU_LOCK_SHOW_CONTENT true ، فسيتم عرض المحفظة.
  • يؤدي فتح قفل الهاتف أثناء عرض المحفظة على شاشة القفل إلى إعادة الاستعلام عن البطاقات، مما قد يؤدي إلى اختلاف محتوى البطاقة.

اختبارات إمكانية الوصول

  • يمكن لمستخدمي TalkBack التنقل في عرض المحفظة عن طريق التمرير لليسار واليمين والاستماع إلى أوصاف المحتوى الخاصة بالبطاقات.
  • يؤدي التمرير السريع لليسار واليمين مع تمكين TalkBack إلى تحديد كل بطاقة على حدة. يمكن لمستخدمي TalkBack تحديد طريقة دفع NFC واستخدامها في محطة دفع NFC.