দ্রুত Wallet অ্যাক্সেস করা

Android 11 থেকে উপলভ্য 'দ্রুত অ্যাক্সেস Wallet' ফিচার ব্যবহারকারীকে পাওয়ার মেনু থেকে সরাসরি পেমেন্ট কার্ড ও প্রাসঙ্গিক পাস অ্যাক্সেস করতে দেয়। NFC টার্মিনালে ট্রানজ্যাকশন করার আগে উপযুক্ত পেমেন্ট পদ্ধতি বেছে নেওয়া এবং আসন্ন ইভেন্টের জন্য ফ্লাইট ও অন্যান্য পাস দ্রুত অ্যাক্সেস করা হল এর প্রধান ব্যবহার।

Android 12 বা তার পরবর্তী যেকোনও ভার্সনে, 'দ্রুত অ্যাক্সেস Wallet' ফিচারটি ফিগার ১ ও ফিগার ২-এ দেখানো শেড থেকে উপলভ্য।

শেডে 'দ্রুত অ্যাক্সেস Wallet' ফিচার
ছবি ১. দ্রুত অ্যাক্সেস Wallet ফিচার (ডিভাইস লক করা)।
শেডে 'দ্রুত অ্যাক্সেস Wallet' ফিচার
ছবি ২. দ্রুত অ্যাক্সেস Wallet ফিচার (ডিভাইস আনলক করা)।

Android 11-এ, ফিচারটি পাওয়ার মেনু থেকে উপলভ্য, যেমনটি ছবি ৩-এ দেখানো হয়েছে।

পাওয়ার মেনুতে 'দ্রুত Wallet অ্যাক্সেস' ফিচার
ছবি ৩. পাওয়ার মেনুতে দ্রুত অ্যাক্সেস Wallet ফিচার।

প্রয়োজনীয়তা

দ্রুত অ্যাক্সেস করা যায় এমন Wallet ফিচার ব্যবহার করতে হলে আপনার ডিভাইসে NFC থাকতে হবে। এই ফিচারটি ডিফল্ট NFC পেমেন্ট অ্যাপের QuickAccessWalletService-এর সাথে বাইন্ড করে, যার অর্থ হল ডিভাইসটিকে অবশ্যই NFC হোস্ট-বেসড কার্ড ইমুলেশন (HCE)-এর সাথে কাজ করতে হবে।

ফিচার সম্পর্কে এক নজরে

দ্রুত অ্যাক্সেস করা যায় এমন Wallet-এর দুটি অংশ আছে: দ্রুত অ্যাক্সেস করা যায় এমন Wallet UI এবং দ্রুত অ্যাক্সেস করা যায় এমন Wallet কার্ড প্রদানকারী।

Android 12 বা এর পরের যেকোনও ভার্সনে, Wallet UI, System UI-তে রান করে এবং frameworks/base/packages/SystemUI/src/com/android/systemui/wallet-এ থাকে। Android 11-এ, Wallet UI, যা platform/packages/apps/QuickAccessWallet-এ অবস্থিত, সেটি ইনস্টল ও হোয়াইটলিস্ট করতে হবে।

কুইক অ্যাক্সেস ওয়ালেট কার্ড প্রদানকারী হল ডিফল্ট NFC পেমেন্ট অ্যাপ। ব্যবহারকারীরা একসাথে একাধিক NFC পেমেন্ট অ্যাপ ইনস্টল করতে পারেন, তবে শুধুমাত্র ডিফল্ট NFC পেমেন্ট অ্যাপ পাওয়ার মেনুতে কার্ড দেখাতে পারে। কোন NFC পেমেন্ট অ্যাপ প্রাথমিকভাবে ডিফল্ট হিসেবে সেট করা আছে তা আপনি নির্দিষ্ট করতে পারবেন, তবে ব্যবহারকারীরা সেটিংস থেকে অন্য অ্যাপ বেছে নিতে পারবেন। শুধুমাত্র একটি NFC পেমেন্ট অ্যাপ ইনস্টল করা থাকলে, সেটি অটোমেটিক ডিফল্ট হয়ে যায় (CardEmulationManager দেখুন)।

প্রয়োগ

'দ্রুত অ্যাক্সেস' Wallet UI-তে কার্ড প্রদান করতে, NFC পেমেন্ট অ্যাপগুলিকে অবশ্যই QuickAccessWalletService প্রয়োগ করতে হবে। পেমেন্ট অ্যাপে অবশ্যই পরিষেবার বিজ্ঞাপন সহ একটি ম্যানিফেস্ট এন্ট্রি থাকতে হবে।

শুধুমাত্র সিস্টেম UI যাতে QuickAccessWalletService-এর সাথে বাইন্ড করতে পারে তা নিশ্চিত করতে, NFC পেমেন্ট অ্যাপের জন্য android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE অনুমতি প্রয়োজন। এই অনুমতি প্রয়োজন হওয়ার অর্থ হল শুধুমাত্র সিস্টেম UI-ই 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 ফাইলে Wallet সম্পর্কে অতিরিক্ত তথ্য অন্তর্ভুক্ত করা আছে:

<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-এর রেফারেন্স পাওয়ার চেষ্টা করতে হবে এবং TYPE_NFC_PAYMENT_STARTED ইভেন্ট টাইপ সহ QuickAccessWalletService#sendEvent-কে কল করতে হবে। এর ফলে, 'দ্রুত অ্যাক্সেস ওয়ালেট' UI বন্ধ হয়ে যায়, যার ফলে ব্যবহারকারী পেমেন্ট অ্যাক্টিভিটি বাধাহীনভাবে দেখতে পান।

QuickAccessWalletService প্রয়োগ করার ব্যাপারে অতিরিক্ত ডকুমেন্টেশনের জন্য, দেখুন QuickAccessWalletService এবং TestQuickAccessWalletService CTS টেস্ট।

Android 11-এ 'দ্রুত অ্যাক্সেস' Wallet UI চালু করা

Android 11-এ পাওয়ার মেনু থেকে কুইক অ্যাক্সেস ওয়ালেট উপলভ্য করার জন্য কনফিগার করতে, বিল্ডে QuickAccessWallet টার্গেট অন্তর্ভুক্ত করুন এবং overlay/frameworks/base/packages/SystemUI/res/values/config.xml ফাইলে নিচে দেওয়া কোড স্যাম্পেলে বোল্ড করা লাইন যোগ করে globalactions.wallet প্লাগ-ইন চালু করুন।

<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>

def_nfc_payment_component ব্যবহার করে সেটিংস কনফিগারেশন ফাইলে ডিফল্ট NFC পেমেন্ট অ্যাপ নির্দিষ্ট করুন।

দ্রুত অ্যাক্সেস ওয়ালেটে কার্ড প্রদান করতে, ডিফল্ট NFC পেমেন্ট অ্যাপকে অবশ্যই QuickAccessWalletService এক্সপোজ করতে হবে। ডিফল্ট NFC পেমেন্ট অ্যাপ এই পরিষেবা এক্সপোর্ট না করলে, Wallet UI লুকানো থাকে।

QuickAccessWalletService প্রয়োগ করা সংক্রান্ত বিবরণ

QuickAccessWalletService-এ তিনটি অ্যাবস্ট্রাক্ট পদ্ধতি আছে যেগুলি অবশ্যই প্রয়োগ করতে হবে: onWalletCardsRequested, onWalletCardSelected এবং onWalletDismissed। NFC পেমেন্টের ঠিক আগে কুইক অ্যাক্সেস ওয়ালেট দেখা হলে, কল সিকোয়েন্স কেমন হয় তা নিচের সিকোয়েন্স ডায়াগ্রামে দেখানো হয়েছে।

দ্রুত অ্যাক্সেস Wallet সিকোয়েন্স ডায়াগ্রাম

দ্রুত অ্যাক্সেস করা যায় এমন Wallet দেখার সময় কল সিকোয়েন্সের উদাহরণ
ছবি ৪. 'দ্রুত অ্যাক্সেস Wallet' দেখা হলে কল সিকোয়েন্সের উদাহরণ।

দ্রুত অ্যাক্সেস Wallet-এর সব ভিউতে NFC পেমেন্ট করা হয় না, তবে উপরের ৪ নম্বর ছবিতে QuickAccessWalletService-এর সব ক্ষমতা দেখানো হয়েছে। এই উদাহরণে, 'দ্রুত অ্যাক্সেস' Wallet কার্ডের প্রোভাইডার নীল রঙে দেখানো এলিমেন্টগুলি প্রয়োগ করে। এটি ধরে নেওয়া হয় যে পেমেন্ট কার্ড ডিভাইসে একটি ডেটাবেসে সেভ করা থাকে এবং PaymentCardManager নামের একটি ইন্টারফেসের মাধ্যমে অ্যাক্সেস করা হয়। এটিও ধরে নেওয়া হয় যে PaymentActivity নামের একটি অ্যাক্টিভিটি NFC পেমেন্টের ফলাফল দেখায়। ফ্লো এইভাবে এগোয়:

  1. দ্রুত অ্যাক্সেস করা যায় এমন Wallet খুলতে ব্যবহারকারী জেসচার করেন।
  2. কুইক অ্যাক্সেস ওয়ালেট UI (সিস্টেম UI-এর অংশ) প্যাকেজ ম্যানেজার চেক করে দেখে যে ডিফল্ট NFC পেমেন্ট অ্যাপ QuickAccessWalletService এক্সপোর্ট করে কিনা।

    • পরিষেবা এক্সপোর্ট করা না হলে, 'দ্রুত অ্যাক্সেস Wallet' দেখানো হয় না।
  3. দ্রুত অ্যাক্সেস Wallet UI, QuickAccessWalletService-এর সাথে বাইন্ড করে এবং onWalletCardsRequested কল করে। এই পদ্ধতিতে, প্রদান করা যেতে পারে এমন কার্ডের সংখ্যা ও সাইজ সংক্রান্ত ডেটা এবং একটি কলব্যাক সহ একটি অনুরোধ অবজেক্ট নেওয়া হয়। ব্যাকগ্রাউন্ড থ্রেড থেকে কলব্যাক কল করা যেতে পারে।

  4. QuickAccessWalletService যেসব কার্ড দেখাতে চায় সেগুলি কম্পিউট করে, তারপর প্রদত্ত কলব্যাকে onSuccess মেথড কল করে। পরিষেবাটি ব্যাকগ্রাউন্ড থ্রেডে এইসব অ্যাকশন পারফর্ম করলে ভাল হয়।

  5. কার্ডগুলি দেখানো হওয়ার সাথে সাথেই, System UI বিজ্ঞপ্তি দিয়ে QuickAccessWalletService জানায় যে প্রথম কার্ডটি বেছে নেওয়া হয়েছে এবং এটি onWalletCardSelected কল করে।

    • ব্যবহারকারী যখনই নতুন কার্ড বেছে নেন, তখনই onWalletCardSelected কল করা হয়।
    • onWalletCardSelected কল করা হতে পারে, এমনকি বর্তমানে বেছে নেওয়া কার্ড পরিবর্তন না হলেও।
  6. ব্যবহারকারী 'দ্রুত অ্যাক্সেস Wallet' বাতিল করলে, System UI QuickAccessWalletService কল করে বিজ্ঞপ্তি দেয় onWalletDismissed।

উপরের উদাহরণে, ওয়ালেট দেখানো হচ্ছে এমন সময় ব্যবহারকারী ফোনটিকে NFC পেমেন্ট টার্মিনালের রেঞ্জে নিয়ে আসছেন। NFC পেমেন্ট ম্যানেজ করার একটি মূল উপাদান হল HostApduService, যা অবশ্যই NFC রিডার দ্বারা প্রদত্ত APDU প্রসেস করার জন্য প্রয়োগ করতে হবে (আরও তথ্যের জন্য, হোস্ট-ভিত্তিক কার্ড এমুলেশন দেখুন)। এটি ধরে নেওয়া হয় যে পেমেন্ট অ্যাপটি NFC টার্মিনালের সাথে ইন্টার‍্যাকশনের প্রোগ্রেস এবং ফলাফল দেখানোর জন্য একটি অ্যাক্টিভিটি শুরু করে। তবে, অ্যাপ উইন্ডোর উপরে 'দ্রুত অ্যাক্সেস' Wallet UI দেখানো হয়, এর অর্থ হল যে 'দ্রুত অ্যাক্সেস' Wallet UI-এর মাধ্যমে পেমেন্ট অ্যাক্টিভিটি অস্পষ্ট হয়ে যায়। এটি ঠিক করতে, অ্যাপকে অবশ্যই সিস্টেম UI-কে জানাতে হবে যে কুইক অ্যাক্সেস Wallet UI বাতিল করা উচিত। এটি বাউন্ড QuickAccessWalletService-এর রেফারেন্স পেয়ে এবং ইভেন্ট টাইপ TYPE_NFC_PAYMENT_STARTED সহ sendWalletServiceEvent কল করে এটি করতে পারে।

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 11-এ চালু করা android.permission.BIND_QUICK_ACCESS_WALLET_SERVICE অনুমতি থাকতে হবে। এটি সিস্টেম UI-এর কাছে থাকা একটি স্বাক্ষর-লেভেল অনুমতি, যার অর্থ হল শুধুমাত্র সিস্টেম UI প্রসেস QuickAccessWalletService-এর ইমপ্লিমেন্টেশনের সাথে বাইন্ড করতে পারে। মনে রাখবেন যে সাইড-লোড করা অ্যাপ এই অনুমতির দাবি করতে পারে এবং Android 10 বা তার আগের ভার্সন চলছে এমন ডিভাইসে QuickAccessWalletService ডেটার সম্পূর্ণ অ্যাক্সেস পেতে পারে। এটি আটকাতে, পরিষেবা onCreate-এ বিল্ড ভার্সন চেক করে এবং Android 11 ও তার পরবর্তী যেকোনও ভার্সনে চলে এমন ডিভাইসে পরিষেবা চালু করে বলে সাজেস্ট করা হয়। হোস্ট কার্ড ইমুলেশন পেমেন্ট পরিষেবা প্রদান করার জন্য প্রয়োজনীয় অনুমতি ছাড়া অন্য কোনও অ্যাপকে দেওয়া অনুমতি প্রয়োজন নেই।

ডিফল্ট NFC পেমেন্ট অ্যাপ যদি QuickAccessWalletService ইমপ্লিমেন্ট বা এক্সপোর্ট না করে, তাহলে কুইক অ্যাক্সেস Wallet UI দেখা যায় না।

Android 12-এ সেটিংস

লক স্ক্রিন থেকে 'দ্রুত অ্যাক্সেস ওয়ালেট' চালু বা বন্ধ করতে, ব্যবহারকারী সেটিংস > ডিসপ্লে > লক স্ক্রিন বিকল্পে গিয়ে ওয়ালেট দেখুন টগল ব্যবহার করতে পারবেন। শেডে ওয়ালেট বন্ধ করতে, ব্যবহারকারীকে অবশ্যই দ্রুত সেটিংস শেডে এটি ম্যানুয়ালি এডিট করতে হবে।

লক স্ক্রিন থেকে ওয়ালেট চালু বা বন্ধ করতে টগল করুন

ছবি ৫. সেটিংসের লক স্ক্রিন পৃষ্ঠায় Wallet টগল দেখান।

Android 11-এ সেটিংস

ব্যবহারকারী সেটিংস অ্যাপ থেকে 'দ্রুত অ্যাক্সেস' ওয়ালেট ফিচার বন্ধ করতে পারবেন। সেটিংস পৃষ্ঠাটি এখানে পাওয়া যায়: সেটিংস > সিস্টেম > জেসচার > কার্ড ও পাস।

দ্রুত অ্যাক্সেস Wallet ফিচার চালু বা বন্ধ করার জন্য সেটিংস পৃষ্ঠা
ছবি ৬. দ্রুত অ্যাক্সেস Wallet ফিচার চালু বা বন্ধ করতে সেটিংস পৃষ্ঠা।

কাস্টমাইজেশন

সিস্টেম UI-এর অন্য লোকেশনে 'দ্রুত অ্যাক্সেস Wallet' ভিউ যোগ করুন

দ্রুত অ্যাক্সেস Wallet UI একটি সিস্টেম প্লাগ-ইন হিসেবে তৈরি করা হয়েছে। যদিও 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);
  }
}

দ্রুত অ্যাক্সেস Wallet UI GlobalActionsPanelPlugin ও PanelViewController প্রয়োগ করে। GlobalActionsDialog com.android.systemui.Dependency ব্যবহার করে ওয়ালেট প্লাগ-ইনের একটি ইনস্ট্যান্স পায়:

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

প্লাগ-ইনটি নন-নাল এবং onPanelShown-এর মাধ্যমে রিটার্ন করা PanelViewController নন-নাল কিনা তা চেক করার পরে, ডায়ালগটি getPanelContent-এর মাধ্যমে প্রদান করা View তার নিজস্ব 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();

পাওয়ার মেনু থেকে 'দ্রুত অ্যাক্সেস Wallet' সরাতে, সিস্টেম বিল্ড থেকে QuickAccessWallet টার্গেট বাদ দিন। পাওয়ার মেনু থেকে 'দ্রুত অ্যাক্সেস' ওয়ালেট সরিয়ে দিতে, কিন্তু অন্য কোনও সিস্টেম UI-তে দেওয়া ভিউতে এটি যোগ করতে, বিল্ড টার্গেট যোগ করুন এবং GlobalActionsPanelPlugin থেকে GlobalActionsImpl-এর রেফারেন্স সরিয়ে দিন।

ডিফল্ট কনফিগারেশন সেট করা

Android 12

Android 12 বা এর পরবর্তী যেকোনও ভার্সনে, দ্রুত অ্যাক্সেস Wallet দ্রুত সেটিংস শেডে সবসময় দেখা যায়। লক স্ক্রিনে 'দ্রুত অ্যাক্সেস' ওয়ালেটের দৃশ্যমানতা নিম্নলিখিত সুরক্ষিত সেটিংস দ্বারা নিয়ন্ত্রিত হয়: LOCKSCREEN_SHOW_WALLET. এই সেটিং কন্ট্রোল করে যে লক স্ক্রিনের নিচে ডানদিকে 'দ্রুত অ্যাক্সেস' Wallet আইকন দেখানো হবে কিনা। এই সেটিং ডিফল্ট হিসেবে true সেট করা থাকে, তবে ব্যবহারকারী সেটিংস > ডিসপ্লে > লক স্ক্রিন > ওয়ালেট দেখুন বিকল্পে গিয়ে এটি বন্ধ করতে পারেন।

Android 11

Android 11-এ, 'দ্রুত অ্যাক্সেস' ওয়ালেটের দৃশ্যমানতা দুটি সুরক্ষিত সেটিংস দ্বারা নিয়ন্ত্রিত হয়: GLOBAL_ACTIONS_PANEL_ENABLED এবং GLOBAL_ACTIONS_PANEL_AVAILABLE। AVAILABLE সেটিং কন্ট্রোল করে যে ফিচারটি সেটিংস থেকে চালু ও বন্ধ করা যাবে কিনা। এই সেটিং WalletPluginService-এর মাধ্যমে true হিসেবে সেট করা হয়। QuickAccessWallet বিল্ডে অন্তর্ভুক্ত না থাকলে, সেটিং false থাকে। একই জায়গায় ENABLED সেটিং ডিফল্ট হিসেবে true সেট করা থাকে, তবে ব্যবহারকারী সেটিংস থেকে এটি বন্ধ করে দিতে পারেন। ডিফল্ট আচরণ পরিবর্তন করতে, WalletPluginService#enableFeatureInSettings পরিবর্তন করুন।

যাচাইকরণ

দ্রুত অ্যাক্সেস ওয়ালেট প্রয়োগ করা হয়েছে কিনা তা যাচাই করতে, CTS ও ম্যানুয়াল টেস্ট চালান। এছাড়াও, প্লাগ-ইনে করা পরিবর্তনগুলি অন্তর্ভুক্ত রোবোইলেকট্রিক পরীক্ষা প্রয়োগ করা উচিত।

CTS পরীক্ষা

cts/tests/quickaccesswallet-এ থাকা CTS টেস্ট রান করুন।

Android 12-এর জন্য ম্যানুয়াল পরীক্ষা

কুইক অ্যাক্সেস ওয়ালেটের মূল ফিচার পরীক্ষা করার জন্য একটি NFC পেমেন্ট টার্মিনাল (আসল বা নকল) এবং একটি NFC পেমেন্ট অ্যাপ প্রয়োজন যা QuickAccessWalletService (ওয়ালেট অ্যাপ) প্রয়োগ করে। যেসব মূল ফিচার অবশ্যই পরীক্ষা করে দেখতে হবে সেগুলির মধ্যে রয়েছে: উপলভ্যতা, শূন্য অবস্থা, কার্ড বেছে নেওয়া এবং লক স্ক্রিন আচরণ।

উপলভ্যতা

  • ডিফল্ট NFC পেমেন্ট অ্যাপে ফিচারটি কাজ না করলে, 'দ্রুত অ্যাক্সেস ওয়ালেট' ফিচারটি 'দ্রুত সেটিংস' বা লক স্ক্রিন, কোনও জায়গাতেই অ্যাক্সেস করা যাবে না।
  • ডিফল্ট NFC পেমেন্ট অ্যাপে এই ফিচার কাজ করলে, দ্রুত অ্যাক্সেস ওয়ালেট, দ্রুত সেটিংস শেডে অ্যাক্সেস করা যাবে।
  • ডিফল্ট NFC পেমেন্ট অ্যাপে ফিচারটি কাজ করলে এবং LOCKSCREEN_SHOW_WALLET সেটিং true হলে, লক স্ক্রিনে কুইক অ্যাক্সেস ওয়ালেট অ্যাক্সেস করা যায়।
  • ডিফল্ট NFC পেমেন্ট অ্যাপে ফিচার কাজ করলে এবং LOCKSCREEN_SHOW_WALLET সেটিং false হিসেবে সেট করা থাকলে, লক স্ক্রিনে দ্রুত অ্যাক্সেস Wallet অ্যাক্সেস করা যাবে না।

জিরো স্টেট

  • QuickAccessWalletService চালু ও এক্সপোর্ট করা থাকলে কিন্তু কোনও কার্ড প্রদান না করলে, শেডে টাইলটি চিত্র ৭-এর উদাহরণে দেখানো ছবির মতো দেখায়। টাইলে ক্লিক করলে ডিফল্ট NFC পেমেন্ট অ্যাপ খুলে যায়।

    শেডে থাকা ডিফল্ট NFC পেমেন্ট অ্যাপের উদাহরণ

    ছবি ৭. শেডে থাকা ডিফল্ট NFC পেমেন্ট অ্যাপের উদাহরণ।

  • ৮ নম্বর ছবিতে দেখানো খালি ভিউতে ক্লিক করলে ডিফল্ট NFC পেমেন্ট অ্যাপ খুলে যায়। এই খালি ভিউ তখনই দেখানো হয় যখন ব্যবহারকারীর Wallet-এ একটি কার্ড অবশিষ্ট থাকে, কার্ডের বিবরণ পৃষ্ঠা থেকে কার্ডটি সরিয়ে দেওয়া হয় এবং তারপর Wallet ভিউতে ফিরে যান।

  • লক স্ক্রিনে Wallet আইকন দেখা যায়।

দ্রুত অ্যাক্সেস Wallet-এ খালি অবস্থার ভিউ

ছবি ৮. দ্রুত অ্যাক্সেস করা যায় এমন Wallet UI-তে খালি অবস্থার ভিউ।

নন-জিরো স্টেট

  • Wallet অ্যাপ যদি এক বা একাধিক কার্ড প্রদান করে, তাহলে শেডে থাকা টাইল ৯ নম্বর ছবিতে দেখানো হয়েছে।

    Wallet অ্যাপে এক বা একাধিক কার্ড থাকলে শেডে থাকা টাইল

    ছবি ৯. ওয়ালেট অ্যাপে এক বা একাধিক কার্ড থাকলে, শেডে উদাহরণস্বরূপ টাইল।

  • টাইলটিতে ক্লিক করলে একটি কার্ড ক্যারোজেল দেখা যায়।

  • লক স্ক্রিনে একটি বোতাম দেখা যায় যা কুইক অ্যাক্সেস Wallet খোলে।

    কার্ড দেখানো সহ 'দ্রুত অ্যাক্সেস' Wallet UI

    ছবি ১০. কার্ড সহ দ্রুত অ্যাক্সেস Wallet UI দেখানো হয়েছে।

  • দেখানো কার্ডটি NFC পেমেন্ট পদ্ধতি হলে, NFC পেমেন্ট টার্মিনালে ফোনটি ধরে রাখলে সেই পেমেন্ট পদ্ধতি ব্যবহার করা হয় এবং Wallet ভিউ বন্ধ হয়ে যায়।

  • দেখানো কার্ডে ক্লিক করলে সেই কার্ডের বিস্তারিত অ্যাক্টিভিটি খুলে যায়।

  • QuickAccessWalletService-এর মাধ্যমে একাধিক কার্ড প্রদান করা হলে, ব্যবহারকারী কার্ডগুলির মধ্যে সোয়াইপ করতে পারবেন।

  • ওভারফ্লো মেনুতে একটি এন্ট্রি থাকে: লক স্ক্রিন সেটিংস খুলুন যাতে ব্যবহারকারী ওয়ালেট দেখুন বিকল্প পরিবর্তন করতে পারেন।

লক স্টেট পরীক্ষা

  • ফোন লক করা থাকলে, ডিফল্ট পেমেন্ট অ্যাপে কোনও কার্ড না থাকলে, কুইক সেটিংস শেডে কার্ড যোগ করুন বিবরণ সহ Wallet দেখা যাবে অথবা ডিফল্ট পেমেন্ট অ্যাপে কার্ড থাকলে, ব্যবহার করতে আনলক করুন বিবরণ সহ Wallet দেখা যাবে।
  • ফোন লক করা থাকলে, লক স্ক্রিনে Wallet-এর দৃশ্যমানতা Secure.LOCKSCREEN_SHOW_WALLET সেটিং দ্বারা নিয়ন্ত্রিত হয়, যা সেটিংস থেকে নিয়ন্ত্রণ করা হয়।
  • ফোন লক করা থাকলে, LOCKSCREEN_SHOW_WALLET false এবং ডিফল্ট NFC পেমেন্ট অ্যাপে কোনও কার্ড না থাকলে, লক স্ক্রিনে ওয়ালেট দেখানো হয় না।
  • ফোন লক করা থাকলে, LOCKSCREEN_SHOW_WALLET হল true এবং ডিফল্ট NFC পেমেন্ট অ্যাপে কোনও কার্ড না থাকলে, লক স্ক্রিনে Wallet দেখানো হয় না।
  • ফোন লক করা থাকলে, LOCKSCREEN_SHOW_WALLET হল true এবং ডিফল্ট NFC পেমেন্ট অ্যাপে কার্ড থাকলে, লক স্ক্রিনে ওয়ালেট দেখানো হয়।
  • লক স্ক্রিনে ওয়ালেট দেখানো হচ্ছে এমন অবস্থায় ফোন আনলক করলে, কার্ডের জন্য আবার কোয়েরি করা হয়, যার ফলে কার্ডের কন্টেন্ট আলাদা হতে পারে।

অ্যাক্সেসিবিলিটি টেস্ট

  • Talkback ব্যবহারকারীরা বাঁদিকে ও ডানদিকে সোয়াইপ করে এবং কার্ডের কন্টেন্টের বিবরণ শুনে ওয়ালেট ভিউ নেভিগেট করতে পারবেন।
  • টকব্যাক চালু করা থাকলে, বাঁদিকে ও ডানদিকে সোয়াইপ করলে প্রতিটি কার্ড একে একে বেছে নেওয়া হয়। Talkback ব্যবহারকারীরা NFC পেমেন্ট টার্মিনালে NFC পেমেন্ট পদ্ধতি বেছে নিতে ও ব্যবহার করতে পারবেন।

Android 11-এর জন্য ম্যানুয়াল পরীক্ষা

দ্রুত অ্যাক্সেস Wallet-এর মূল ফিচার পরীক্ষা করার জন্য NFC পেমেন্ট টার্মিনাল (আসল বা নকল) এবং NFC পেমেন্ট অ্যাপ প্রয়োজন যা QuickAccessWalletService (Wallet অ্যাপ) প্রয়োগ করে। যেসব মূল ফিচার অবশ্যই পরীক্ষা করতে হবে তার মধ্যে রয়েছে উপলভ্যতা, জিরো স্টেট, কার্ড বেছে নেওয়া এবং লক স্ক্রিনের আচরণ।

উপলভ্যতা

  • GLOBAL_ACTIONS_PANEL_ENABLED সেটিং true থাকলে এবং ডিফল্ট NFC পেমেন্ট অ্যাপে ফিচার কাজ করলে, 'দ্রুত অ্যাক্সেস' ওয়ালেট অ্যাক্সেস করা যাবে।
  • GLOBAL_ACTIONS_PANEL_ENABLED সেটিং false হিসেবে সেট করা থাকলে এবং ডিফল্ট NFC পেমেন্ট অ্যাপে ফিচার কাজ করলে, 'দ্রুত অ্যাক্সেস' ওয়ালেট অ্যাক্সেস করা যাবে না ।
  • GLOBAL_ACTIONS_PANEL_ENABLED সেটিং true করা থাকলে এবং ডিফল্ট NFC পেমেন্ট অ্যাপ এই ফিচার সাপোর্ট না করলে, 'দ্রুত অ্যাক্সেস Wallet' অ্যাক্সেস করা যাবে না।
  • GLOBAL_ACTIONS_PANEL_ENABLED সেটিং false করা থাকলে এবং ডিফল্ট NFC পেমেন্ট অ্যাপ এই ফিচার সাপোর্ট না করলে, 'দ্রুত অ্যাক্সেস Wallet' অ্যাক্সেস করা যাবে না।

জিরো স্টেট

  • QuickAccessWalletService চালু ও এক্সপোর্ট করা থাকলে কিন্তু কোনও কার্ড না দিলে, 'দ্রুত অ্যাক্সেস Wallet' UI খালি স্টেট ভিউ দেখায়।
  • খালি স্টেট ভিউতে ক্লিক করলে Wallet অ্যাপ খুলে যায়।

    'দ্রুত অ্যাক্সেস Wallet' UI-তে খালি অবস্থার ভিউ
    ছবি ১১. দ্রুত অ্যাক্সেস Wallet UI-তে খালি অবস্থার ভিউ।

নন-জিরো স্টেট

  • ওয়ালেট অ্যাপ একটি বা একাধিক কার্ড প্রদান করলে, কার্ডগুলি 'দ্রুত অ্যাক্সেস' ওয়ালেট UI-তে দেখানো হয়।

    কার্ড দেখানো সহ 'দ্রুত অ্যাক্সেস' Wallet UI
    ছবি ১২. কার্ড সহ Wallet UI-এর দ্রুত অ্যাক্সেস ডিসপ্লে করা হয়।
  • দেখানো কার্ডটি যদি NFC পেমেন্ট পদ্ধতি হয়, তাহলে ফোনটি NFC পেমেন্ট টার্মিনালে ধরলে সেই পেমেন্ট পদ্ধতি ব্যবহার করা হয় এবং Wallet ভিউ বন্ধ হয়ে যায়।

  • দেখানো কার্ডে ক্লিক করলে, Wallet ভিউ বন্ধ হয়ে যায় এবং সেই কার্ডের বিস্তারিত অ্যাক্টিভিটি খুলে যায়।

  • QuickAccessWalletService-এর মাধ্যমে একাধিক কার্ড প্রদান করা হলে, ব্যবহারকারী কার্ডগুলির মধ্যে সোয়াইপ করতে পারবেন।

  • ওভারফ্লো মেনুতে দুটি এন্ট্রি থাকে: একটি Wallet অ্যাপ খোলে এবং অন্যটি সেটিংসের মধ্যে কার্ড ও পাস দেখুন স্ক্রিন খোলে।

লক স্টেট টেস্ট

  • ফোন লক করা থাকলে, ওয়ালেটের দৃশ্যমানতা Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT সেটিংয়ের মাধ্যমে নিয়ন্ত্রণ করা হয়, যা সেটিংস থেকে নিয়ন্ত্রণ করা যায়।
  • ফোন লক করা থাকলে এবং POWER_MENU_LOCK_SHOW_CONTENT false থাকলে, Wallet দেখা যায় না।
  • ফোন লক করা থাকলে এবং POWER_MENU_LOCK_SHOW_CONTENT true থাকলে, Wallet দেখানো হয়।
  • লক স্ক্রিনে Wallet দেখানো হচ্ছে এমন অবস্থায় ফোন আনলক করলে, কার্ডের জন্য আবার কোয়েরি করা হয়, যার ফলে কার্ডের কন্টেন্ট আলাদা হতে পারে।

অ্যাক্সেসিবিলিটি টেস্ট

  • টকব্যাক ব্যবহারকারীরা বাঁদিকে ও ডানদিকে সোয়াইপ করে ওয়ালেট ভিউ নেভিগেট করতে পারবেন এবং কার্ডের কন্টেন্টের বিবরণ শুনে নিতে পারবেন।
  • টকব্যাক চালু থাকা অবস্থায় বাঁদিকে ও ডানদিকে সোয়াইপ করলে, প্রতিটি কার্ড এক এক করে বেছে নেওয়া হয়। NFC পেমেন্ট টার্মিনালে TalkBack ব্যবহারকারীরা NFC পেমেন্ট পদ্ধতি বেছে নিতে ও ব্যবহার করতে পারবেন।