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

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

في نظام التشغيل Android 12 أو الإصدارات الأحدث، تتوفّر ميزة "محفظة الوصول السريع" من خلال القائمة المنسدلة كما هو موضّح في الشكل 1 والشكل 2.

ميزة "الوصول السريع" في "محفظة Google"
الشكل 1. ميزة "الوصول السريع إلى المحفظة" (عندما يكون الجهاز مقفلاً)
ميزة "الوصول السريع إلى المحفظة" في مركز الإشعارات
الشكل 2. ميزة "الوصول السريع إلى المحفظة" (عندما يكون الجهاز غير مقفل)

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

ميزة "الوصول السريع إلى المحفظة" في قائمة زر التشغيل
الشكل 3. ميزة "الوصول السريع إلى المحفظة" في قائمة "وضع الطاقة الذكي"

المتطلبات

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

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

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

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

مقدّم بطاقة "محفظة الوصول السريع" هو تطبيق الدفع التلقائي عبر تقنية NFC. يمكن للمستخدمين تثبيت عدة تطبيقات دفع عبر تقنية NFC في الوقت نفسه، ولكن لا يمكن إلا لتطبيق الدفع التلقائي عبر تقنية NFC عرض البطاقات في قائمة الطاقة. يمكنك تحديد تطبيق الدفع الذي يستخدم تقنية NFC والذي سيتم ضبطه على أنّه التلقائي في البداية، ولكن يمكن للمستخدمين اختيار تطبيق مختلف في "الإعدادات". إذا تم تثبيت تطبيق دفع واحد فقط عبر NFC، يصبح هو التطبيق التلقائي تلقائيًا (راجِع CardEmulationManager).

التنفيذ

لتوفير البطاقات في واجهة مستخدم "محفظة الوصول السريع"، يجب أن تُطبِّق تطبيقات الدفع عبر تكنولوجيا 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 مباشرةً.

مخطّط تسلسل الوصول السريع إلى &quot;محفظة Google&quot;

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

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

  1. ينفِّذ المستخدم إيماءة لعرض "محفظة الوصول السريع".
  2. إنّ واجهة مستخدم "محفظة الوصول السريع" (جزء من واجهة مستخدم النظام) تتحقّق من مدير الحِزم لمعرفة ما إذا كان تطبيق الدفع عبر NFC التلقائي يصدِّر البيانات QuickAccessWalletService.

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

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

  5. بعد عرض البطاقات، يُرسِل واجهة مستخدم النظام إشعارًا إلى QuickAccessWalletService بأنّه تم اختيار البطاقة الأولى من خلال الاتصال ببرمجة onWalletCardSelected.

    • يتمّ استدعاء onWalletCardSelected في كلّ مرّة يختار فيها المستخدِم بطاقة جديدة.
    • قد يتمّ استدعاء onWalletCardSelected حتى إذا لم يتمّ تغيير البطاقة التي تم اختيارها حاليًا.
  6. عندما يرفض المستخدم "محفظة Google" للوصول السريع، يُرسِل واجهة مستخدم النظام إشعارًا إلى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، لن يتم عرض واجهة مستخدم "محفظة Google" للوصول السريع.

الإعدادات في Android 12

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

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

الشكل 5: عرض زر الإيقاف/التفعيل الخاص بالمحفظة في صفحة "شاشة القفل" ضمن "الإعدادات"

الإعدادات في Android 11

يمكن للمستخدمين إيقاف ميزة "محفظة الوصول السريع" من تطبيق "الإعدادات". يمكن الوصول إلى صفحة الإعدادات من خلال الإعدادات > النظام > الإيماءات > البطاقات والتذاكر.

صفحة الإعدادات لتفعيل ميزة &quot;الوصول السريع&quot; في &quot;محفظة Google&quot; أو إيقافها
الشكل 6. صفحة الإعدادات لتفعيل ميزة الوصول السريع إلى "محفظة Google" أو إيقافها

التخصيص

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

تم تصميم واجهة مستخدم الوصول السريع إلى المحفظة كأحد مكوّنات النظام الإضافية. على الرغم من أنّ تنفيذ 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();

لإزالة "محفظة الوصول السريع" من قائمة زر التشغيل، احذف هدف QuickAccessWallet من إصدار النظام. لإزالة "محفظة" ميزة "الوصول السريع" من قائمة "وضع الطاقة" ولكن إضافتها إلى عرض مختلف يوفّره واجهة مستخدم النظام، أدرِج هدف الإنشاء وأزِل الإشارات إلى GlobalActionsPanelPlugin من GlobalActionsImpl.

ضبط الإعدادات التلقائية

Android 12

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

Android 11

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

التحقُّق

للتحقّق من صحة تنفيذ "محفظة الوصول السريع"، عليك إجراء اختبارات CTS والاختبارات اليدوية. يجب أن تُجري التغييرات على المكوّن الإضافي أيضًا اختبارات Robolectric المضمّنة.

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

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

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

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

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

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

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

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

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

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

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

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

  • إذا كانت البطاقة المعروضة تمثّل طريقة دفع 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 يتيح هذه الميزة، يمكن الوصول إلى "محفظة الوصول السريع".
  • إذا كان الخيار GLOBAL_ACTIONS_PANEL_ENABLED مضبوطًا على false وكان تطبيق الدفع المتوافق تلقائيًا عبر تقنية NFC يتيح الميزة، لا يمكن الوصول إلى "محفظة الوصول السريع".
  • إذا كان إعداد GLOBAL_ACTIONS_PANEL_ENABLED هو true ولم يكن تطبيق الدفع التلقائي عبر تقنية NFC متوافقًا مع الميزة، لن يكون بإمكانكالوصول إلى "محفظة الوصول السريع".
  • إذا كان إعداد GLOBAL_ACTIONS_PANEL_ENABLED هو false ولم يكن تطبيق الدفع التلقائي عبر تقنية NFC متوافقًا مع الميزة، لن يكون بإمكانكالوصول إلى "محفظة الوصول السريع".

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

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

    عرض الحالة الفارغة في واجهة مستخدم &quot;الوصول السريع إلى المحفظة&quot;
    الشكل 11. عرض الحالة الفارغة في واجهة مستخدم ميزة "الوصول السريع" في "محفظة Google"

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

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

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

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

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

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

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

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

اختبارات تسهيل الاستخدام

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