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

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

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

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

في الإصدار 11 من نظام التشغيل Android، تتوفّر الميزة من قائمة الطاقة كما هو موضّح في الشكل 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).

التنفيذ

لتوفير البطاقات في واجهة مستخدم "محفظة Google" للوصول السريع، يجب أن تُطبِّق تطبيقات الدفع المزوّدة باتصال 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. ومع ذلك، يتم عرض واجهة مستخدم "محفظة Google" في "الوصول السريع" أعلى نافذة التطبيق، ما يعني أنّ واجهة مستخدم "محفظة Google" في "الوصول السريع" تحجب نشاط الدفع. لحلّ هذه المشكلة، يجب أن يُعلم التطبيق واجهة مستخدم النظام بأنّه يجب إغلاق واجهة مستخدم "محفظة الوصول السريع". ويمكن أن يفعل ذلك من خلال الحصول على إشارة إلى العنصر المقيّد 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 أو الإصدارات الأحدث، تظهر "محفظة الوصول السريع" دائمًا في نافذة "الإعدادات السريعة". إنّ ظهور "محفظة Google" في ميزة "الوصول السريع" على شاشة القفل يعتمد على الإعداد الآمن التالي: 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 وتصديره ولكنّه لا يقدّم أي بطاقات، سيظهر المربّع في Shade كما هو موضّح في المثال بالشكل 7. يؤدي النقر على مربّع التطبيق إلى فتح تطبيق الدفع التلقائي عبر تقنية NFC.

    مثال على مربّع في النافذة المنسدلة يعرض تطبيق الدفع التلقائي عبر تقنية NFC

    الشكل 7: مثال على مربّع في النافذة المنسدلة يعرض تطبيق الدفع التلقائي عبر NFC

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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