ویژگی Quick Access Wallet که از اندروید 11 در دسترس است، به کاربر این امکان را میدهد تا مستقیماً از منوی پاور به کارتهای پرداخت و پاسهای مربوطه دسترسی داشته باشد. موارد استفاده اصلی شامل انتخاب روش پرداخت مناسب قبل از انجام تراکنش در ترمینال NFC و دسترسی سریع به پروازها و سایر مجوزها برای رویدادهای آینده است.
در Android 12 یا بالاتر، ویژگی Quick Access Wallet از سایه همانطور که در شکل 1 و شکل 2 نشان داده شده است در دسترس است.
در اندروید 11، این ویژگی از منوی پاور همانطور که در شکل 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 مشاهده می شود.
همه نماهای کیف پول دسترسی سریع با پرداخت NFC دنبال نمی شوند، اما شکل 4 بالا همه قابلیت های QuickAccessWalletService
را نشان می دهد. در این مثال، ارائهدهنده کارت کیف پول Quick Access عناصر مشخص شده با رنگ آبی را پیادهسازی میکند. فرض بر این است که کارت های پرداخت در دستگاه در یک پایگاه داده ذخیره می شوند و از طریق رابطی به نام PaymentCardManager
قابل دسترسی هستند. همچنین فرض بر این است که فعالیتی به نام PaymentActivity
نتیجه یک پرداخت NFC را نمایش می دهد. جریان به صورت زیر پیش می رود:
- کاربر حرکتی را برای نمایش کیف پول دسترسی سریع انجام می دهد.
رابط کاربری Quick Access Wallet (بخشی از System UI) مدیر بسته را بررسی می کند تا ببیند آیا برنامه پرداخت پیش فرض NFC
QuickAccessWalletService
را صادر می کند یا خیر.- اگر سرویس صادر نشود، کیف پول دسترسی سریع نمایش داده نمی شود.
رابط کاربری QuickAccess Wallet به
QuickAccessWalletService
متصل می شود وonWalletCardsRequested
فرا می خواند. این روش یک شی درخواست شامل دادههایی در مورد تعداد و اندازه کارتهایی که میتوان ارائه کرد و یک تماس پاسخ میگیرد. تماس برگشتی را می توان از یک رشته پس زمینه فراخوانی کرد.QuickAccessWalletService
کارت هایی را که می خواهد نشان دهد محاسبه می کند، سپس روشonSuccess
را در پاسخ به تماس ارائه شده فراخوانی می کند. توصیه می شود که سرویس این اقدامات را در یک رشته پس زمینه انجام دهد.به محض نمایش کارتها، رابط کاربری سیستم به
QuickAccessWalletService
اطلاع میدهد که اولین کارت با فراخوانیonWalletCardSelected
انتخاب شده است.- هر بار که کاربر کارت جدیدی را انتخاب می کند،
onWalletCardSelected
فراخوانی می شود. -
onWalletCardSelected
ممکن است فراخوانی شود حتی اگر کارت انتخابی فعلی تغییر نکرده باشد.
- هر بار که کاربر کارت جدیدی را انتخاب می کند،
هنگامی که کاربر کیف پول دسترسی سریع را رد می کند، رابط کاربری سیستم
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
کاربران می توانند قابلیت دسترسی سریع کیف پول را از برنامه تنظیمات خاموش کنند. صفحه تنظیمات در تنظیمات > سیستم > حرکات > کارتها و مجوزها یافت میشود.
سفارشی سازی
نمای کیف پول دسترسی سریع را به مکان دیگری در رابط کاربری سیستم اضافه کنید
رابط کاربری 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 باز می شود.شکل 7. نمونه کاشی در سایه که برنامه پرداخت پیشفرض NFC را نشان میدهد.
با کلیک بر روی نمای حالت خالی همانطور که در شکل 8 نشان داده شده است، برنامه پرداخت پیش فرض NFC باز می شود. این نمای حالت خالی تنها زمانی نمایش داده می شود که کاربر یک کارت در کیف پول باقی مانده باشد، کارت را از صفحه جزئیات کارت حذف کند و سپس به نمای کیف پول بازگردد.
صفحه قفل نماد کیف پول را نشان می دهد.
شکل 8. نمای حالت خالی در رابط کاربری کیف پول دسترسی سریع.
حالت غیر صفر
اگر برنامه کیف پول یک یا چند کارت ارائه دهد، کاشی در سایه همانطور که در شکل 9 نشان داده شده است ظاهر می شود.
شکل 9. نمونه کاشی در سایه زمانی که برنامه کیف پول یک یا چند کارت دارد.
با کلیک بر روی کاشی یک چرخ فلک کارتی نشان داده می شود.
صفحه قفل دکمه ای را نشان می دهد که کیف پول دسترسی سریع را باز می کند.
شکل 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 نمای حالت خالی را نمایش می دهد. با کلیک بر روی نمای حالت خالی، برنامه کیف پول باز می شود.
حالت غیر صفر
اگر برنامه کیف پول یک یا چند کارت ارائه دهد، کارتها در رابط کاربری کیف پول دسترسی سریع نمایش داده میشوند.
اگر کارت نمایش داده شده نشان دهنده یک روش پرداخت 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 نشان داده شده است در دسترس است.
در اندروید 11، این ویژگی از منوی پاور همانطور که در شکل 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 مشاهده می شود.
همه نماهای کیف پول دسترسی سریع با پرداخت NFC دنبال نمی شوند، اما شکل 4 بالا همه قابلیت های QuickAccessWalletService
را نشان می دهد. در این مثال، ارائهدهنده کارت کیف پول Quick Access عناصر مشخص شده با رنگ آبی را پیادهسازی میکند. فرض بر این است که کارت های پرداخت در دستگاه در یک پایگاه داده ذخیره می شوند و از طریق رابطی به نام PaymentCardManager
قابل دسترسی هستند. همچنین فرض بر این است که فعالیتی به نام PaymentActivity
نتیجه یک پرداخت NFC را نمایش می دهد. جریان به صورت زیر پیش می رود:
- کاربر حرکتی را برای نمایش کیف پول دسترسی سریع انجام می دهد.
رابط کاربری Quick Access Wallet (بخشی از System UI) مدیر بسته را بررسی می کند تا ببیند آیا برنامه پرداخت پیش فرض NFC
QuickAccessWalletService
را صادر می کند یا خیر.- اگر سرویس صادر نشود، کیف پول دسترسی سریع نمایش داده نمی شود.
رابط کاربری QuickAccess Wallet به
QuickAccessWalletService
متصل می شود وonWalletCardsRequested
فرا می خواند. این روش یک شی درخواست شامل دادههایی در مورد تعداد و اندازه کارتهایی که میتوان ارائه کرد و یک تماس پاسخ میگیرد. تماس برگشتی را می توان از یک رشته پس زمینه فراخوانی کرد.QuickAccessWalletService
کارت هایی را که می خواهد نشان دهد محاسبه می کند، سپس روشonSuccess
را در پاسخ به تماس ارائه شده فراخوانی می کند. توصیه می شود که سرویس این اقدامات را در یک رشته پس زمینه انجام دهد.به محض نمایش کارتها، رابط کاربری سیستم به
QuickAccessWalletService
اطلاع میدهد که اولین کارت با فراخوانیonWalletCardSelected
انتخاب شده است.- هر بار که کاربر کارت جدیدی را انتخاب می کند،
onWalletCardSelected
فراخوانی می شود. -
onWalletCardSelected
ممکن است فراخوانی شود حتی اگر کارت انتخابی فعلی تغییر نکرده باشد.
- هر بار که کاربر کارت جدیدی را انتخاب می کند،
هنگامی که کاربر کیف پول دسترسی سریع را رد می کند، رابط کاربری سیستم
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
کاربران می توانند قابلیت دسترسی سریع کیف پول را از برنامه تنظیمات خاموش کنند. صفحه تنظیمات در تنظیمات > سیستم > حرکات > کارتها و مجوزها یافت میشود.
سفارشی سازی
نمای کیف پول دسترسی سریع را به مکان دیگری در رابط کاربری سیستم اضافه کنید
رابط کاربری 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 باز می شود.شکل 7. نمونه کاشی در سایه که برنامه پرداخت پیشفرض NFC را نشان میدهد.
با کلیک بر روی نمای حالت خالی همانطور که در شکل 8 نشان داده شده است، برنامه پرداخت پیش فرض NFC باز می شود. این نمای حالت خالی تنها زمانی نمایش داده می شود که کاربر یک کارت در کیف پول باقی مانده باشد، کارت را از صفحه جزئیات کارت حذف کند و سپس به نمای کیف پول بازگردد.
صفحه قفل نماد کیف پول را نشان می دهد.
شکل 8. نمای حالت خالی در رابط کاربری کیف پول دسترسی سریع.
حالت غیر صفر
اگر برنامه کیف پول یک یا چند کارت ارائه دهد، کاشی در سایه همانطور که در شکل 9 نشان داده شده است ظاهر می شود.
شکل 9. نمونه کاشی در سایه زمانی که برنامه کیف پول یک یا چند کارت دارد.
با کلیک بر روی کاشی یک چرخ فلک کارتی نشان داده می شود.
صفحه قفل دکمه ای را نشان می دهد که کیف پول دسترسی سریع را باز می کند.
شکل 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 کیف پول دسترسی سریع نمایش داده می شوند.
اگر کارت نمایش داده شده یک روش پرداخت 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 انتخاب و استفاده کنند.