کیف پول دسترسی سریع

ویژگی Quick Access Wallet که از اندروید 11 در دسترس است، به کاربر این امکان را می‌دهد تا مستقیماً از منوی پاور به کارت‌های پرداخت و پاس‌های مربوطه دسترسی داشته باشد. موارد استفاده اصلی شامل انتخاب روش پرداخت مناسب قبل از انجام تراکنش در ترمینال NFC و دسترسی سریع به پروازها و سایر مجوزها برای رویدادهای آینده است.

در Android 12 یا بالاتر، ویژگی Quick Access Wallet از سایه همانطور که در شکل 1 و شکل 2 نشان داده شده است در دسترس است.

قابلیت دسترسی سریع کیف پول در سایه
شکل 1. قابلیت دسترسی سریع کیف پول (دستگاه قفل شده است).
قابلیت دسترسی سریع کیف پول در سایه
شکل 2. قابلیت دسترسی سریع کیف پول (دستگاه باز شده است).

در اندروید 11، این ویژگی از منوی پاور همانطور که در شکل 3 نشان داده شده است در دسترس است.

قابلیت دسترسی سریع کیف پول در منوی پاور
شکل 3. قابلیت دسترسی سریع کیف پول در منوی پاور.

الزامات

برای استفاده از قابلیت دسترسی سریع کیف پول، دستگاه شما باید NFC داشته باشد. این ویژگی به QuickAccessWalletService برنامه پیش‌فرض پرداخت NFC متصل می‌شود، به این معنی که دستگاه باید از شبیه‌سازی کارت مبتنی بر میزبان NFC (HCE) نیز پشتیبانی کند.

نمای کلی ویژگی

کیف پول دسترسی سریع دارای دو بخش است: رابط کاربری کیف پول دسترسی سریع و ارائه دهنده کارت کیف پول دسترسی سریع.

در Android 12 یا بالاتر، واسط Wallet در رابط کاربری سیستم اجرا می‌شود و در frameworks/base/packages/SystemUI/src/com/android/systemui/wallet قرار دارد. در Android 11، رابط کاربری Wallet که در 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 را ببینید.

رابط کاربری Quick Access Wallet را در اندروید 11 فعال کنید

برای پیکربندی کیف پول دسترسی سریع برای در دسترس بودن از منوی پاور اندروید 11، هدف QuickAccessWallet را در ساخت وارد کنید و با افزودن خط پررنگ در نمونه کد زیر به overlay/frameworks/base/packages/SystemUI/res/values/config.xml افزونه 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. نمونه ای از توالی تماس زمانی که کیف پول دسترسی سریع مشاهده می شود.

همه نماهای کیف پول دسترسی سریع با پرداخت NFC دنبال نمی شوند، اما شکل 4 بالا همه قابلیت های QuickAccessWalletService را نشان می دهد. در این مثال، ارائه‌دهنده کارت کیف پول Quick Access عناصر مشخص شده با رنگ آبی را پیاده‌سازی می‌کند. فرض بر این است که کارت های پرداخت در دستگاه در یک پایگاه داده ذخیره می شوند و از طریق رابطی به نام PaymentCardManager قابل دسترسی هستند. همچنین فرض بر این است که فعالیتی به نام PaymentActivity نتیجه یک پرداخت NFC را نمایش می دهد. جریان به صورت زیر پیش می رود:

  1. کاربر حرکتی را برای نمایش کیف پول دسترسی سریع انجام می دهد.
  2. رابط کاربری Quick Access Wallet (بخشی از System UI) مدیر بسته را بررسی می کند تا ببیند آیا برنامه پرداخت پیش فرض NFC QuickAccessWalletService را صادر می کند یا خیر.

    • اگر سرویس صادر نشود، کیف پول دسترسی سریع نمایش داده نمی شود.
  3. رابط کاربری QuickAccess Wallet به QuickAccessWalletService متصل می شود و onWalletCardsRequested فرا می خواند. این روش یک شی درخواست شامل داده‌هایی در مورد تعداد و اندازه کارت‌هایی که می‌توان ارائه کرد و یک تماس پاسخ می‌گیرد. تماس برگشتی را می توان از یک رشته پس زمینه فراخوانی کرد.

  4. QuickAccessWalletService کارت هایی را که می خواهد نشان دهد محاسبه می کند، سپس روش onSuccess را در پاسخ به تماس ارائه شده فراخوانی می کند. توصیه می شود که سرویس این اقدامات را در یک رشته پس زمینه انجام دهد.

  5. به محض نمایش کارت‌ها، رابط کاربری سیستم به QuickAccessWalletService اطلاع می‌دهد که اولین کارت با فراخوانی onWalletCardSelected انتخاب شده است.

    • هر بار که کاربر کارت جدیدی را انتخاب می کند، onWalletCardSelected فراخوانی می شود.
    • onWalletCardSelected ممکن است فراخوانی شود حتی اگر کارت انتخابی فعلی تغییر نکرده باشد.
  6. هنگامی که کاربر کیف پول دسترسی سریع را رد می کند، رابط کاربری سیستم QuickAccessWalletService با فراخوانی onWalletDismissed مطلع می کند.

در مثال بالا، کاربر هنگام نمایش کیف پول، گوشی را در محدوده یک پایانه پرداخت NFC قرار می دهد. یکی از مؤلفه‌های کلیدی مدیریت پرداخت‌های NFC، HostApduService است که باید برای پردازش APDU‌های ارائه‌شده توسط خواننده NFC اجرا شود (برای اطلاعات بیشتر، شبیه‌سازی کارت مبتنی بر میزبان را ببینید). فرض بر این است که برنامه پرداخت فعالیتی را برای نمایش پیشرفت و نتیجه تعامل با ترمینال NFC آغاز می کند. با این حال، Quick Access Wallet UI در بالای پنجره برنامه نمایش داده می شود، به این معنی که فعالیت پرداخت توسط Quick Access Wallet UI پنهان می شود. برای اصلاح این مشکل، برنامه باید به سیستم UI اطلاع دهد که رابط کاربری کیف پول دسترسی سریع باید رد شود. می‌تواند این کار را با دریافت یک مرجع به 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 API مراجعه کنید.

مجوزها

ورودی مانیفست برای QuickAccessWalletService باید به مجوز android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE که در Android 11 معرفی شده است نیاز داشته باشد. این یک مجوز در سطح امضا است که توسط System UI نگهداری می شود، به این معنی که فقط فرآیند System UI می تواند به اجرای QuickAccessWalletService متصل شود. توجه داشته باشید که برنامه‌های بارگذاری‌شده جانبی می‌توانند این مجوز را دریافت کنند و به داده‌های QuickAccessWalletService در دستگاه‌های دارای Android 10 یا پایین‌تر دسترسی کامل داشته باشند. برای جلوگیری از این امر، توصیه می‌شود این سرویس نسخه ساخت را در onCreate بررسی کرده و این سرویس را فقط در دستگاه‌های دارای اندروید 11 و بالاتر فعال کنید. هیچ مجوز برنامه دیگری فراتر از مجوزهای لازم برای ارائه خدمات پرداخت شبیه سازی کارت میزبان مورد نیاز نیست.

اگر برنامه پرداخت پیش‌فرض NFC QuickAccessWalletService اجرا یا صادر نکند، رابط کاربری Quick Access Wallet نمایش داده نمی‌شود.

تنظیمات در اندروید 12

برای فعال یا غیرفعال کردن کیف پول دسترسی سریع از صفحه قفل، کاربران می توانند از دکمه نمایش کیف پول در تنظیمات > نمایشگر > صفحه قفل استفاده کنند. برای غیرفعال کردن کیف پول در سایه، کاربران باید به صورت دستی آن را در سایه تنظیمات سریع ویرایش کنند.

برای فعال یا غیرفعال کردن کیف پول از صفحه قفل، آن را تغییر دهید

شکل 5. جابجایی کیف پول را در صفحه صفحه قفل در تنظیمات نشان دهید.

تنظیمات در اندروید 11

کاربران می توانند قابلیت دسترسی سریع کیف پول را از برنامه تنظیمات خاموش کنند. صفحه تنظیمات در تنظیمات > سیستم > حرکات > کارت‌ها و مجوزها یافت می‌شود.

صفحه تنظیمات برای فعال یا غیرفعال کردن قابلیت دسترسی سریع کیف پول
شکل 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);
  }
}

رابط کاربری Quick Access Wallet 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 از منوی پاور اما اضافه کردن آن به نمای دیگری که از System UI ارائه شده است، هدف ساخت را اضافه کنید و ارجاعات به GlobalActionsPanelPlugin را از GlobalActionsImpl حذف کنید.

تنظیمات پیش فرض را تنظیم کنید

اندروید 12

در اندروید 12 یا بالاتر، کیف پول دسترسی سریع همیشه در سایه تنظیمات سریع قابل مشاهده است. قابلیت مشاهده کیف پول دسترسی سریع در صفحه قفل با تنظیمات ایمن زیر محدود می شود: LOCKSCREEN_SHOW_WALLET . این تنظیم کنترل می کند که آیا نماد کیف پول دسترسی سریع در سمت راست پایین صفحه قفل نشان داده شود یا خیر. این تنظیم به طور پیش‌فرض روی true تنظیم شده است، اما کاربر می‌تواند آن را در تنظیمات > نمایشگر > صفحه قفل > نمایش کیف پول غیرفعال کند.

اندروید 11

در Android 11، قابلیت مشاهده کیف پول دسترسی سریع توسط دو تنظیمات امن محدود می‌شود: GLOBAL_ACTIONS_PANEL_ENABLED و GLOBAL_ACTIONS_PANEL_AVAILABLE . تنظیم AVAILABLE کنترل می کند که آیا می توان این ویژگی را در تنظیمات روشن یا خاموش کرد. این تنظیم توسط WalletPluginService روی true تنظیم شده است. اگر QuickAccessWallet در ساخت گنجانده نشده باشد، تنظیم false باقی می‌ماند. تنظیم ENABLED به طور پیش‌فرض در همان مکان روی true تنظیم شده است، اما کاربر می‌تواند آن را در تنظیمات خاموش کند. برای تغییر رفتار پیش‌فرض، WalletPluginService#enableFeatureInSettings تغییر دهید.

اعتبار سنجی

برای تأیید اعتبار اجرای کیف پول دسترسی سریع، تست‌های CTS و دستی را اجرا کنید. تغییرات در افزونه باید آزمایش‌های روبولکتریک ارائه شده را نیز انجام دهد.

تست های CTS

تست های CTS واقع در cts/tests/quickaccesswallet را اجرا کنید.

تست های دستی برای اندروید 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 باز می شود. این نمای حالت خالی تنها زمانی نمایش داده می شود که کاربر یک کارت در کیف پول باقی مانده باشد، کارت را از صفحه جزئیات کارت حذف کند و سپس به نمای کیف پول بازگردد.

  • صفحه قفل نماد کیف پول را نشان می دهد.

نمای حالت خالی در کیف پول دسترسی سریع

شکل 8. نمای حالت خالی در رابط کاربری کیف پول دسترسی سریع.

حالت غیر صفر

  • اگر برنامه کیف پول یک یا چند کارت ارائه دهد، کاشی در سایه همانطور که در شکل 9 نشان داده شده است ظاهر می شود.

    نمونه کاشی در سایه زمانی که برنامه کیف پول یک یا چند کارت دارد

    شکل 9. نمونه کاشی در سایه زمانی که برنامه کیف پول یک یا چند کارت دارد.

  • با کلیک بر روی کاشی یک چرخ فلک کارتی نشان داده می شود.

  • صفحه قفل دکمه ای را نشان می دهد که کیف پول دسترسی سریع را باز می کند.

    رابط کاربری Quick Access Wallet با نمایش کارت

    شکل 10. رابط کاربری کیف پول دسترسی سریع با یک کارت نمایش داده شده است.

  • اگر کارت نمایش داده شده نشان دهنده یک روش پرداخت NFC باشد، نگه داشتن تلفن روی پایانه پرداخت NFC منجر به استفاده از آن روش پرداخت می شود و نمای کیف پول حذف می شود.

  • با کلیک بر روی کارت نمایش داده شده، فعالیت دقیق آن کارت باز می شود.

  • اگر چندین کارت توسط QuickAccessWalletService ارائه شده باشد، کاربر می‌تواند بین کارت‌ها سوایپ کند.

  • منوی سرریز شامل یک ورودی است: تنظیمات صفحه قفل را باز کنید تا کاربر بتواند گزینه Show wallet را تغییر دهد.

تست های حالت قفل

  • اگر تلفن قفل باشد، کیف پول در قسمت تنظیمات سریع قابل مشاهده است، در صورتی که کارتی در برنامه پرداخت پیش‌فرض وجود ندارد، توضیحی درباره افزودن کارت ، یا باز کردن قفل در صورت وجود کارت در برنامه پرداخت پیش‌فرض وجود دارد.
  • اگر تلفن قفل است، دید کیف پول در صفحه قفل با تنظیم Secure.LOCKSCREEN_SHOW_WALLET که در تنظیمات کنترل می‌شود، کنترل می‌شود.
  • اگر تلفن قفل است، LOCKSCREEN_SHOW_WALLET false است، و هیچ کارتی در برنامه پرداخت پیش‌فرض NFC وجود ندارد، کیف پول روی صفحه قفل نمایش داده نمی‌شود.
  • اگر تلفن قفل است، LOCKSCREEN_SHOW_WALLET true است و هیچ کارتی در برنامه پرداخت پیش‌فرض NFC وجود ندارد، کیف پول روی صفحه قفل نمایش داده نمی‌شود.
  • اگر تلفن قفل است، LOCKSCREEN_SHOW_WALLET true است و کارت‌ها در برنامه پرداخت پیش‌فرض NFC وجود دارند، کیف پول روی صفحه قفل نمایش داده می‌شود.
  • باز کردن قفل تلفن در حالی که کیف پول در صفحه قفل نمایش داده می شود، منجر به درخواست کارت می شود که ممکن است محتوای کارت متفاوت باشد.

تست های دسترسی

  • کاربران Talkback می‌توانند با کشیدن انگشت به چپ و راست و با گوش دادن به توضیحات محتوای کارت‌ها، نمای کیف پول را مرور کنند.
  • کشیدن انگشت به چپ و راست با فعال کردن Talkback هر کارت را به نوبه خود انتخاب می کند. کاربران Talkback می توانند یک روش پرداخت NFC را در پایانه پرداخت NFC انتخاب و استفاده کنند.

تست های دستی برای اندروید 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 فعال و صادر شده باشد اما هیچ کارتی ارائه ندهد، رابط کاربری QuickAccess 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 انتخاب و استفاده کنند.
،

ویژگی Quick Access Wallet که از اندروید 11 در دسترس است، به کاربر این امکان را می‌دهد تا مستقیماً از منوی پاور به کارت‌های پرداخت و پاس‌های مربوطه دسترسی داشته باشد. موارد استفاده اصلی شامل انتخاب روش پرداخت مناسب قبل از انجام تراکنش در ترمینال NFC و دسترسی سریع به پروازها و سایر مجوزها برای رویدادهای آینده است.

در Android 12 یا بالاتر، ویژگی Quick Access Wallet از سایه همانطور که در شکل 1 و شکل 2 نشان داده شده است در دسترس است.

قابلیت دسترسی سریع کیف پول در سایه
شکل 1. قابلیت دسترسی سریع کیف پول (دستگاه قفل شده است).
قابلیت دسترسی سریع کیف پول در سایه
شکل 2. قابلیت دسترسی سریع کیف پول (دستگاه باز شده است).

در اندروید 11، این ویژگی از منوی پاور همانطور که در شکل 3 نشان داده شده است در دسترس است.

قابلیت دسترسی سریع کیف پول در منوی پاور
شکل 3. قابلیت دسترسی سریع کیف پول در منوی پاور.

الزامات

برای استفاده از قابلیت دسترسی سریع کیف پول، دستگاه شما باید NFC داشته باشد. این ویژگی به QuickAccessWalletService برنامه پیش‌فرض پرداخت NFC متصل می‌شود، به این معنی که دستگاه باید از شبیه‌سازی کارت مبتنی بر میزبان NFC (HCE) نیز پشتیبانی کند.

نمای کلی ویژگی

کیف پول دسترسی سریع دارای دو بخش است: رابط کاربری کیف پول دسترسی سریع و ارائه دهنده کارت کیف پول دسترسی سریع.

در Android 12 یا بالاتر، واسط Wallet در رابط کاربری سیستم اجرا می‌شود و در frameworks/base/packages/SystemUI/src/com/android/systemui/wallet قرار دارد. در Android 11، رابط کاربری Wallet که در 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 را ببینید.

رابط کاربری Quick Access Wallet را در اندروید 11 فعال کنید

برای پیکربندی کیف پول دسترسی سریع برای در دسترس بودن از منوی پاور اندروید 11، هدف QuickAccessWallet را در ساخت وارد کنید و با افزودن خط پررنگ در نمونه کد زیر به overlay/frameworks/base/packages/SystemUI/res/values/config.xml افزونه 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. نمونه ای از توالی تماس زمانی که کیف پول دسترسی سریع مشاهده می شود.

همه نماهای کیف پول دسترسی سریع با پرداخت NFC دنبال نمی شوند، اما شکل 4 بالا همه قابلیت های QuickAccessWalletService را نشان می دهد. در این مثال، ارائه‌دهنده کارت کیف پول Quick Access عناصر مشخص شده با رنگ آبی را پیاده‌سازی می‌کند. فرض بر این است که کارت های پرداخت در دستگاه در یک پایگاه داده ذخیره می شوند و از طریق رابطی به نام PaymentCardManager قابل دسترسی هستند. همچنین فرض بر این است که فعالیتی به نام PaymentActivity نتیجه یک پرداخت NFC را نمایش می دهد. جریان به صورت زیر پیش می رود:

  1. کاربر حرکتی را برای نمایش کیف پول دسترسی سریع انجام می دهد.
  2. رابط کاربری Quick Access Wallet (بخشی از System UI) مدیر بسته را بررسی می کند تا ببیند آیا برنامه پرداخت پیش فرض NFC QuickAccessWalletService را صادر می کند یا خیر.

    • اگر سرویس صادر نشود، کیف پول دسترسی سریع نمایش داده نمی شود.
  3. رابط کاربری QuickAccess Wallet به QuickAccessWalletService متصل می شود و onWalletCardsRequested فرا می خواند. این روش یک شی درخواست شامل داده‌هایی در مورد تعداد و اندازه کارت‌هایی که می‌توان ارائه کرد و یک تماس پاسخ می‌گیرد. تماس برگشتی را می توان از یک رشته پس زمینه فراخوانی کرد.

  4. QuickAccessWalletService کارت هایی را که می خواهد نشان دهد محاسبه می کند، سپس روش onSuccess را در پاسخ به تماس ارائه شده فراخوانی می کند. توصیه می شود که سرویس این اقدامات را در یک رشته پس زمینه انجام دهد.

  5. به محض نمایش کارت‌ها، رابط کاربری سیستم به QuickAccessWalletService اطلاع می‌دهد که اولین کارت با فراخوانی onWalletCardSelected انتخاب شده است.

    • هر بار که کاربر کارت جدیدی را انتخاب می کند، onWalletCardSelected فراخوانی می شود.
    • onWalletCardSelected ممکن است فراخوانی شود حتی اگر کارت انتخابی فعلی تغییر نکرده باشد.
  6. هنگامی که کاربر کیف پول دسترسی سریع را رد می کند، رابط کاربری سیستم QuickAccessWalletService با فراخوانی onWalletDismissed مطلع می کند.

در مثال بالا، کاربر هنگام نمایش کیف پول، گوشی را در محدوده یک پایانه پرداخت NFC قرار می دهد. یکی از مؤلفه‌های کلیدی مدیریت پرداخت‌های NFC، HostApduService است که باید برای پردازش APDU‌های ارائه‌شده توسط خواننده NFC اجرا شود (برای اطلاعات بیشتر، شبیه‌سازی کارت مبتنی بر میزبان را ببینید). فرض بر این است که برنامه پرداخت فعالیتی را برای نمایش پیشرفت و نتیجه تعامل با ترمینال NFC آغاز می کند. با این حال، Quick Access Wallet UI در بالای پنجره برنامه نمایش داده می شود، به این معنی که فعالیت پرداخت توسط Quick Access Wallet UI پنهان می شود. برای اصلاح این مشکل، برنامه باید به سیستم UI اطلاع دهد که رابط کاربری کیف پول دسترسی سریع باید رد شود. می‌تواند این کار را با دریافت یک مرجع به 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 API مراجعه کنید.

مجوزها

ورودی مانیفست برای QuickAccessWalletService باید به مجوز android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE که در Android 11 معرفی شده است نیاز داشته باشد. این یک مجوز در سطح امضا است که توسط System UI نگهداری می شود، به این معنی که فقط فرآیند System UI می تواند به اجرای QuickAccessWalletService متصل شود. توجه داشته باشید که برنامه‌های بارگذاری‌شده جانبی می‌توانند این مجوز را دریافت کنند و به داده‌های QuickAccessWalletService در دستگاه‌های دارای Android 10 یا پایین‌تر دسترسی کامل داشته باشند. برای جلوگیری از این امر، توصیه می‌شود این سرویس نسخه ساخت را در onCreate بررسی کرده و این سرویس را فقط در دستگاه‌های دارای اندروید 11 و بالاتر فعال کنید. هیچ مجوز برنامه دیگری فراتر از مجوزهای لازم برای ارائه خدمات پرداخت شبیه سازی کارت میزبان مورد نیاز نیست.

اگر برنامه پرداخت پیش‌فرض NFC QuickAccessWalletService اجرا یا صادر نکند، رابط کاربری Quick Access Wallet نمایش داده نمی‌شود.

تنظیمات در اندروید 12

برای فعال یا غیرفعال کردن کیف پول دسترسی سریع از صفحه قفل، کاربران می توانند از دکمه نمایش کیف پول در تنظیمات > نمایشگر > صفحه قفل استفاده کنند. برای غیرفعال کردن کیف پول در سایه، کاربران باید به صورت دستی آن را در سایه تنظیمات سریع ویرایش کنند.

برای فعال یا غیرفعال کردن کیف پول از صفحه قفل، آن را تغییر دهید

شکل 5. جابجایی کیف پول را در صفحه صفحه قفل در تنظیمات نشان دهید.

تنظیمات در اندروید 11

کاربران می توانند قابلیت دسترسی سریع کیف پول را از برنامه تنظیمات خاموش کنند. صفحه تنظیمات در تنظیمات > سیستم > حرکات > کارت‌ها و مجوزها یافت می‌شود.

صفحه تنظیمات برای فعال یا غیرفعال کردن قابلیت دسترسی سریع کیف پول
شکل 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);
  }
}

رابط کاربری Quick Access Wallet 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 از منوی پاور اما اضافه کردن آن به نمای دیگری که از System UI ارائه شده است، هدف ساخت را اضافه کنید و ارجاعات به GlobalActionsPanelPlugin را از GlobalActionsImpl حذف کنید.

تنظیمات پیش فرض را تنظیم کنید

اندروید 12

در اندروید 12 یا بالاتر، کیف پول دسترسی سریع همیشه در سایه تنظیمات سریع قابل مشاهده است. قابلیت مشاهده کیف پول دسترسی سریع در صفحه قفل با تنظیمات ایمن زیر محدود می شود: LOCKSCREEN_SHOW_WALLET . این تنظیم کنترل می کند که آیا نماد کیف پول دسترسی سریع در سمت راست پایین صفحه قفل نشان داده شود یا خیر. این تنظیم به طور پیش‌فرض روی true تنظیم شده است، اما کاربر می‌تواند آن را در تنظیمات > نمایشگر > صفحه قفل > نمایش کیف پول غیرفعال کند.

اندروید 11

در Android 11، قابلیت مشاهده کیف پول دسترسی سریع توسط دو تنظیمات امن محدود می‌شود: GLOBAL_ACTIONS_PANEL_ENABLED و GLOBAL_ACTIONS_PANEL_AVAILABLE . تنظیم AVAILABLE کنترل می کند که آیا می توان این ویژگی را در تنظیمات روشن یا خاموش کرد. این تنظیم توسط WalletPluginService روی true تنظیم شده است. اگر QuickAccessWallet در ساخت گنجانده نشده باشد، تنظیم false باقی می‌ماند. تنظیم ENABLED به طور پیش‌فرض در همان مکان روی true تنظیم شده است، اما کاربر می‌تواند آن را در تنظیمات خاموش کند. برای تغییر رفتار پیش‌فرض، WalletPluginService#enableFeatureInSettings تغییر دهید.

اعتبار سنجی

برای تأیید اعتبار اجرای کیف پول دسترسی سریع، تست‌های CTS و دستی را اجرا کنید. تغییرات در افزونه باید آزمایش‌های روبولکتریک ارائه شده را نیز انجام دهد.

تست های CTS

تست های CTS واقع در cts/tests/quickaccesswallet را اجرا کنید.

تست های دستی برای اندروید 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 باز می شود. این نمای حالت خالی تنها زمانی نمایش داده می شود که کاربر یک کارت در کیف پول باقی مانده باشد، کارت را از صفحه جزئیات کارت حذف کند و سپس به نمای کیف پول بازگردد.

  • صفحه قفل نماد کیف پول را نشان می دهد.

نمای حالت خالی در کیف پول دسترسی سریع

شکل 8. نمای حالت خالی در رابط کاربری کیف پول دسترسی سریع.

حالت غیر صفر

  • اگر برنامه کیف پول یک یا چند کارت ارائه دهد، کاشی در سایه همانطور که در شکل 9 نشان داده شده است ظاهر می شود.

    نمونه کاشی در سایه زمانی که برنامه کیف پول یک یا چند کارت دارد

    شکل 9. نمونه کاشی در سایه زمانی که برنامه کیف پول یک یا چند کارت دارد.

  • با کلیک بر روی کاشی یک چرخ فلک کارتی نشان داده می شود.

  • صفحه قفل دکمه ای را نشان می دهد که کیف پول دسترسی سریع را باز می کند.

    رابط کاربری Quick Access Wallet با نمایش کارت

    شکل 10. رابط کاربری کیف پول دسترسی سریع با یک کارت نمایش داده شده است.

  • اگر کارت نمایش داده شده نشان دهنده یک روش پرداخت NFC باشد، نگه داشتن تلفن روی پایانه پرداخت NFC منجر به استفاده از آن روش پرداخت می شود و نمای کیف پول حذف می شود.

  • با کلیک بر روی کارت نمایش داده شده، فعالیت دقیق آن کارت باز می شود.

  • اگر چندین کارت توسط QuickAccessWalletService ارائه شده باشد، کاربر می‌تواند بین کارت‌ها سوایپ کند.

  • منوی سرریز شامل یک ورودی است: تنظیمات صفحه قفل را باز کنید تا کاربر بتواند گزینه Show wallet را تغییر دهد.

تست های حالت قفل

  • اگر تلفن قفل شده باشد ، کیف پول در سایه تنظیمات سریع قابل مشاهده است ، در صورت عدم وجود کارت در برنامه پرداخت پیش فرض ، یا در صورت وجود کارت در برنامه پرداخت پیش فرض وجود ندارد .
  • اگر تلفن قفل شده باشد ، دید کیف پول در صفحه قفل توسط تنظیم 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 فعال و صادر شده باشد اما هیچ کارتی ارائه نمی دهد ، UI کیف پول دسترسی سریع نمای حالت خالی را نشان می دهد.
  • با کلیک بر روی نمای حالت خالی ، برنامه کیف پول باز می شود.

    نمای حالت خالی در UI کیف پول دسترسی سریع
    شکل 11. نمای حالت خالی در UI کیف پول دسترسی سریع.

حالت غیر صفر

  • اگر برنامه کیف پول یک یا چند کارت را فراهم کند ، کارت ها در UI کیف پول دسترسی سریع نمایش داده می شوند.

    UI کیف پول دسترسی سریع با کارت نمایش داده شده
    شکل 12. UI کیف پول دسترسی سریع با کارت نمایش داده شده.
  • اگر کارت نمایش داده شده یک روش پرداخت NFC را نشان دهد ، نگه داشتن تلفن در یک ترمینال پرداخت NFC منجر به استفاده از روش پرداخت و نمای کیف پول می شود.

  • با کلیک بر روی کارت نمایش داده شده ، نمای کیف پول را رد می کند و فعالیت دقیق آن کارت را باز می کند.

  • اگر چندین کارت توسط QuickAccessWalletService ارائه شود ، کاربر قادر به کشیدن بین کارت ها است.

  • منوی Overflow شامل دو مدخل است: یکی که برنامه کیف پول را باز می کند و دیگری که صفحه نمایش کارت را باز می کند و صفحه را در تنظیمات باز می کند .

تست های حالت قفل

  • اگر تلفن قفل شده باشد ، دید کیف پول توسط Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT کنترل می شود. secure.power_menu_lock_show_content ، که می تواند در تنظیمات کنترل شود.
  • اگر تلفن قفل شده باشد و POWER_MENU_LOCK_SHOW_CONTENT false باشد ، کیف پول نمایش داده نمی شود.
  • اگر تلفن قفل شده باشد و POWER_MENU_LOCK_SHOW_CONTENT true باشد ، کیف پول نمایش داده می شود.
  • باز کردن قفل تلفن در حالی که کیف پول در صفحه قفل نمایش داده می شود منجر به بازگرداندن کارت ها می شود ، که ممکن است منجر به محتوای کارت های مختلف شود.

تست های دسترسی

  • کاربران Talkback می توانند با گوش دادن به چپ و راست و با گوش دادن به توضیحات محتوا کارتها ، از نمای کیف پول حرکت کنند.
  • کشیدن چپ و راست با TalkBack فعال هر کارت را به نوبه خود انتخاب می کند. کاربران TalkBack می توانند یک روش پرداخت NFC را در یک ترمینال پرداخت NFC انتخاب و استفاده کنند.