দ্রুত অ্যাক্সেস ওয়ালেট

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

অ্যান্ড্রয়েড ১২ বা তার পরবর্তী সংস্করণে, চিত্র ১ এবং চিত্র ২-এ দেখানো শেড থেকে কুইক অ্যাক্সেস ওয়ালেট ফিচারটি পাওয়া যায়।

ছায়ায় কুইক অ্যাক্সেস ওয়ালেট বৈশিষ্ট্য
চিত্র ১. কুইক অ্যাক্সেস ওয়ালেট ফিচার (ডিভাইস লক করা)।
ছায়ায় কুইক অ্যাক্সেস ওয়ালেট বৈশিষ্ট্য
চিত্র ২. কুইক অ্যাক্সেস ওয়ালেট ফিচার (ডিভাইস আনলক করা অবস্থায়)।

অ্যান্ড্রয়েড ১১-এ, চিত্র ৩-এ দেখানো অনুযায়ী ফিচারটি পাওয়ার মেনু থেকে পাওয়া যায়।

পাওয়ার মেনুতে কুইক অ্যাক্সেস ওয়ালেট বৈশিষ্ট্য
চিত্র ৩. পাওয়ার মেনুতে কুইক অ্যাক্সেস ওয়ালেট ফিচার।

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

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

বৈশিষ্ট্যের সংক্ষিপ্ত বিবরণ

কুইক অ্যাক্সেস ওয়ালেটের দুটি অংশ রয়েছে: কুইক অ্যাক্সেস ওয়ালেট ইউআই (UI) এবং কুইক অ্যাক্সেস ওয়ালেট কার্ড প্রোভাইডার।

অ্যান্ড্রয়েড ১২ বা তার পরবর্তী সংস্করণগুলিতে, ওয়ালেট ইউআই সিস্টেম ইউআই-এর মধ্যে চলে এবং এটি frameworks/base/packages/SystemUI/src/com/android/systemui/wallet অবস্থিত। অ্যান্ড্রয়েড ১১-এ, ওয়ালেট ইউআই, যা platform/packages/apps/QuickAccessWallet ফোল্ডারে অবস্থিত, সেটি অবশ্যই ইনস্টল এবং হোয়াইটলিস্টে অন্তর্ভুক্ত করতে হবে।

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

বাস্তবায়ন

কুইক অ্যাক্সেস ওয়ালেট 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 ফাইলটিতে অন্তর্ভুক্ত রয়েছে:

<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 পরীক্ষাটি দেখুন।

অ্যান্ড্রয়েড ১১-এ কুইক অ্যাক্সেস ওয়ালেট UI সক্রিয় করুন

অ্যান্ড্রয়েড ১১-এ পাওয়ার মেনু থেকে কুইক অ্যাক্সেস ওয়ালেট ব্যবহার করার জন্য, বিল্ডে 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 পেমেন্ট অ্যাপ নির্দিষ্ট করুন।

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

QuickAccessWalletService বাস্তবায়নের বিবরণ

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

কুইক অ্যাক্সেস ওয়ালেট ক্রম ডায়াগ্রাম

কুইক অ্যাক্সেস ওয়ালেট দেখার সময়কার উদাহরণ কল ক্রম
চিত্র ৪। কুইক অ্যাক্সেস ওয়ালেট দেখার সময়কার কল ক্রমের উদাহরণ।

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

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

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

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

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

    • ব্যবহারকারী যখনই একটি নতুন কার্ড নির্বাচন করেন, তখন onWalletCardSelected কল করা হয়।
    • বর্তমানে নির্বাচিত কার্ড পরিবর্তিত না হলেও onWalletCardSelected কল করা হতে পারে।
  6. যখন ব্যবহারকারী কুইক অ্যাক্সেস ওয়ালেটটি বাতিল করেন, তখন সিস্টেম UI, onWalletDismissed কল করার মাধ্যমে QuickAccessWalletService অবহিত করে।

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

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

অ্যান্ড্রয়েড ১২-এর সেটিংস

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

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

চিত্র ৫। সেটিংস-এর লক স্ক্রিন পৃষ্ঠায় ওয়ালেট দেখানোর টগল।

অ্যান্ড্রয়েড ১১-এর সেটিংস

ব্যবহারকারীরা সেটিংস অ্যাপ থেকে কুইক অ্যাক্সেস ওয়ালেট ফিচারটি বন্ধ করতে পারেন। সেটিংস পেজটি সেটিংস > সিস্টেম > জেসচার > কার্ড ও পাস- এ পাওয়া যাবে।

কুইক অ্যাক্সেস ওয়ালেট ফিচারটি চালু বা বন্ধ করার জন্য সেটিংস পৃষ্ঠা।
চিত্র ৬। কুইক অ্যাক্সেস ওয়ালেট ফিচারটি চালু বা বন্ধ করার সেটিংস পৃষ্ঠা।

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

সিস্টেম UI-তে কুইক অ্যাক্সেস ওয়ালেট ভিউ অন্য কোনো স্থানে যোগ করুন

কুইক অ্যাক্সেস ওয়ালেট 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);
  }
}

কুইক অ্যাক্সেস ওয়ালেট 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();

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

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

অ্যান্ড্রয়েড ১২

অ্যান্ড্রয়েড ১২ বা তার পরবর্তী সংস্করণে, কুইক অ্যাক্সেস ওয়ালেটটি কুইক সেটিংস শেডে সর্বদা দৃশ্যমান থাকে। লক স্ক্রিনে কুইক অ্যাক্সেস ওয়ালেটের দৃশ্যমানতা নিম্নলিখিত সুরক্ষিত সেটিং দ্বারা নিয়ন্ত্রিত হয়: LOCKSCREEN_SHOW_WALLET । এই সেটিংটি নিয়ন্ত্রণ করে যে কুইক অ্যাক্সেস ওয়ালেট আইকনটি লক স্ক্রিনের নীচে ডানদিকে দেখানো হবে কি না। এই সেটিংটি ডিফল্টরূপে ' true সেট করা থাকে, কিন্তু ব্যবহারকারী সেটিংস > ডিসপ্লে > লক স্ক্রিন > ওয়ালেট দেখান ( Settings > Display > Lock screen > Show wallet) থেকে এটি বন্ধ করতে পারেন।

অ্যান্ড্রয়েড ১১

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

বৈধতা

আপনার কুইক অ্যাক্সেস ওয়ালেটের বাস্তবায়ন যাচাই করতে, CTS এবং ম্যানুয়াল টেস্ট চালান। প্লাগইনের পরিবর্তনগুলো অন্তর্ভুক্ত রোবোইলেকট্রিক টেস্টগুলোকেও পরীক্ষা করবে।

CTS পরীক্ষা

cts/tests/quickaccesswallet এ অবস্থিত CTS টেস্টগুলো চালান।

অ্যান্ড্রয়েড ১২ এর জন্য ম্যানুয়াল পরীক্ষা

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

প্রাপ্যতা

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

শূন্য অবস্থা

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

    ছায়ায় থাকা উদাহরণ টাইলটিতে ডিফল্ট এনএফসি পেমেন্ট অ্যাপ দেখানো হচ্ছে।

    চিত্র ৭। ছায়াযুক্ত একটি টাইলের নমুনা যেখানে ডিফল্ট এনএফসি পেমেন্ট অ্যাপটি দেখানো হচ্ছে।

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

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

কুইক অ্যাক্সেস ওয়ালেটে খালি অবস্থার দৃশ্য

চিত্র ৮. কুইক অ্যাক্সেস ওয়ালেট UI-তে খালি অবস্থার দৃশ্য।

অশূন্য অবস্থা

  • যদি ওয়ালেট অ্যাপটি এক বা একাধিক কার্ড প্রদান করে, তাহলে চিত্র ৯-এ দেখানো অনুযায়ী ছায়াযুক্ত টাইলটি প্রদর্শিত হয়।

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

    চিত্র ৯। ওয়ালেট অ্যাপে এক বা একাধিক কার্ড থাকলে শেডে থাকা টাইলের উদাহরণ।

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

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

    কার্ড প্রদর্শিত সহ কুইক অ্যাক্সেস ওয়ালেট UI

    চিত্র ১০। কার্ড প্রদর্শিত অবস্থায় কুইক অ্যাক্সেস ওয়ালেট UI।

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

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

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

  • ওভারফ্লো মেনুতে একটিই এন্ট্রি রয়েছে: লক স্ক্রিন সেটিংস খুলুন, যাতে ব্যবহারকারী ' Show wallet' অপশনটি পরিবর্তন করতে পারেন।

লক অবস্থা পরীক্ষা

  • ফোনটি লক করা থাকলে, কুইক সেটিংস শেডে ওয়ালেটটি দেখা যায় এবং সেখানে লেখা থাকে, ‘ডিফল্ট পেমেন্ট অ্যাপে কোনো কার্ড না থাকলে একটি কার্ড যোগ করুন’ , অথবা ‘ডিফল্ট পেমেন্ট অ্যাপে কার্ড থাকলে ব্যবহারের জন্য আনলক করুন ’।
  • ফোন লক করা থাকলে, লক স্ক্রিনে ওয়ালেট দেখা যাবে কি না, তা সেটিংস-এ থাকা Secure.LOCKSCREEN_SHOW_WALLET সেটিং দ্বারা নিয়ন্ত্রিত হয়।
  • যদি ফোনটি লক করা থাকে, LOCKSCREEN_SHOW_WALLET false হয় এবং ডিফল্ট NFC পেমেন্ট অ্যাপে কোনো কার্ড না থাকে, তাহলে ওয়ালেটটি লক স্ক্রিনে দেখানো হয় না।
  • যদি ফোনটি লক করা থাকে, LOCKSCREEN_SHOW_WALLET true হয় এবং ডিফল্ট NFC পেমেন্ট অ্যাপে কোনো কার্ড না থাকে, তাহলে ওয়ালেটটি লক স্ক্রিনে দেখানো হয় না।
  • যদি ফোনটি লক করা থাকে, LOCKSCREEN_SHOW_WALLET true হয় এবং ডিফল্ট 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 সক্রিয় এবং এক্সপোর্ট করা থাকে কিন্তু কোনো কার্ড প্রদান না করে, তাহলে Quick Access Wallet UI-তে খালি অবস্থার ভিউ প্রদর্শিত হয়।
  • খালি স্টেট ভিউতে ক্লিক করলে ওয়ালেট অ্যাপটি খুলে যায়।

    কুইক অ্যাক্সেস ওয়ালেট UI-তে খালি অবস্থার দৃশ্য
    চিত্র ১১। কুইক অ্যাক্সেস ওয়ালেট UI-তে খালি অবস্থার দৃশ্য।

অশূন্য অবস্থা

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

    কার্ড প্রদর্শিত সহ কুইক অ্যাক্সেস ওয়ালেট UI
    চিত্র ১২। কার্ড প্রদর্শিত অবস্থায় কুইক অ্যাক্সেস ওয়ালেট UI।
  • প্রদর্শিত কার্ডটি যদি কোনো NFC পেমেন্ট পদ্ধতির প্রতিনিধিত্ব করে, তবে ফোনটিকে একটি NFC পেমেন্ট টার্মিনালের কাছে ধরলে সেই পেমেন্ট পদ্ধতিটি ব্যবহৃত হবে এবং ওয়ালেট ভিউটি অদৃশ্য হয়ে যাবে।

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

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

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

লক অবস্থা পরীক্ষা

  • ফোনটি লক করা থাকলে, ওয়ালেট দেখার সুবিধা Settings.Secure.POWER_MENU_LOCK_SHOW_CONTENT সেটিং দ্বারা নিয়ন্ত্রিত হয়, যা Settings থেকে নিয়ন্ত্রণ করা যায়।
  • যদি ফোনটি লক করা থাকে এবং POWER_MENU_LOCK_SHOW_CONTENT false হয়, তাহলে ওয়ালেটটি প্রদর্শিত হয় না।
  • যদি ফোনটি লক করা থাকে এবং POWER_MENU_LOCK_SHOW_CONTENT true হয়, তাহলে ওয়ালেটটি প্রদর্শিত হয়।
  • লক স্ক্রিনে ওয়ালেট প্রদর্শিত থাকা অবস্থায় ফোন আনলক করলে কার্ডগুলো পুনরায় কোয়েরি করা হয়, যার ফলে কার্ডের বিষয়বস্তু ভিন্ন হতে পারে।

প্রবেশযোগ্যতা পরীক্ষা

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