ভারসাম্যহীন ব্যবহারকারীদের জন্য ডিভাইস আচরণ কাস্টমাইজ করুন

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

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

উদাহরণ এবং উৎস

ডিফল্ট ক্যারিয়ার অ্যাপটি platform/frameworks/base/packages/CarrierDefaultApp/ .

বাস্তবায়ন

ডিফল্ট ক্যারিয়ার অ্যাপটি এমনভাবে কনফিগার করা হয়েছে যাতে কোনো কনফিগারেশন ছাড়া ক্যারিয়ারগুলো আরও ভালো অভিজ্ঞতা পায়। ক্যারিয়ারগুলো এই ডিফল্ট আচরণ ব্যবহার করতে পারে। তারা ক্যারিয়ার কনফিগারেশন XML ফাইলে সিগন্যাল-অ্যাকশন ম্যাপিং যোগ করে ডিফল্ট আচরণটি ওভাররাইডও করতে পারে। তারা চাইলে ডিফল্ট অ্যাপটি ব্যবহার না করে, তার পরিবর্তে তাদের নিজস্ব স্বতন্ত্র ক্যারিয়ার অ্যাপের মাধ্যমে UICC প্রিভিলেজ ব্যবহার করার সিদ্ধান্তও নিতে পারে।

বাস্তবায়ন পরিচিতি

সংকেত

অ্যান্ড্রয়েড ফ্রেমওয়ার্ক নিম্নলিখিত প্যারামিটারযুক্ত সিগন্যালগুলিতে অ্যাকশন কনফিগার করা সমর্থন করে:

  • TelephonyIntents.ACTION_CARRIER_SIGNAL_REDIRECTED
  • TelephonyIntents.ACTION_CARRIER_SIGNAL_REQUEST_NETWORK_FAILED

এই সিগন্যালগুলো frameworks/base/telephony/java/com/android/internal/telephony/TelephonyIntents.java তে অবস্থিত।

সমর্থিত পদক্ষেপ

ডিফল্ট ক্যারিয়ার অ্যাপটি একগুচ্ছ সমর্থিত অ্যাকশন নির্ধারণ করে, যেগুলোকে সমর্থিত সিগন্যালের সাথে ম্যাপ করা যায়। এগুলো CarrierActionUtils.java ফাইলে সংজ্ঞায়িত করা আছে:

    public static final int CARRIER_ACTION_ENABLE_METERED_APNS               = 0;
    public static final int CARRIER_ACTION_DISABLE_METERED_APNS              = 1;
    public static final int CARRIER_ACTION_DISABLE_RADIO                     = 2;
    public static final int CARRIER_ACTION_ENABLE_RADIO                      = 3;
    public static final int CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION          = 4;
    public static final int CARRIER_ACTION_SHOW_NO_DATA_SERVICE_NOTIFICATION = 5;
    public static final int CARRIER_ACTION_CANCEL_ALL_NOTIFICATIONS          = 6;

দ্রষ্টব্য: যদি কোনো ক্যারিয়ার তাদের নিজস্ব স্বতন্ত্র অ্যাপ তৈরি করে, তাহলে তারা এই বিভাগে উল্লিখিত সংকেতগুলো ছাড়াও অন্যান্য সংকেতের জন্য সমর্থন যোগ করতে পারে। তারা তাদের নিজস্ব অ্যাকশনগুলোও সংজ্ঞায়িত এবং কনফিগার করতে পারে।

ডিফল্ট সংকেত-ক্রিয়া ম্যাপিং

এই প্রক্রিয়া অনুসরণ করে ডিফল্ট অ্যাকশনগুলো কনফিগার করুন:

  1. সমর্থিত সংকেতগুলোর জন্য একটি কী নির্ধারণ করুন।

    ডিফল্ট সিগন্যাল থেকে অ্যাকশন ম্যাপিংগুলো CarrierConfigManager.java তে সংজ্ঞায়িত করা আছে। প্রতিটি সমর্থিত সিগন্যালের একটি কী (key) রয়েছে:

    public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY = "carrier_default_actions_on_redirection_string_array";
    public static final String KEY_CARRIER_DEFAULT_ACTIONS_ON_DCFAILURE_STRING_ARRAY =
    "carrier_default_actions_on_dcfailure_string_array";
  2. সিগন্যাল কী-গুলোর সাথে ডিফল্ট অ্যাকশনগুলো যুক্ত করুন।

    ডিফল্ট অ্যাকশন আইডিগুলো সিগন্যাল কীগুলোর সাথে যুক্ত থাকে:

    sDefaults.putStringArray(KEY_CARRIER_DEFAULT_ACTIONS_ON_REDIRECTION_STRING_ARRAY,                new String[]{
                    "1, 4"
                    //1: CARRIER_ACTION_SHOW_PORTAL_NOTIFICATION
                    // 4: CARRIER_ACTION_DISABLE_METERED_APNS
             });
    

    টেলিফোনি কাঠামো এই ক্রিয়াগুলোকে সংশ্লিষ্ট সংকেতের সাথে সংযুক্ত করে।

ডিফল্ট ক্রিয়াগুলি ওভাররাইড করুন

আপনি ক্যারিয়ার কনফিগ XML ফাইলে সমর্থিত সিগন্যালগুলির জন্য কাস্টম অ্যাকশন নির্ধারণ করতে পারেন, এর জন্য আপনাকে সিগন্যাল কী-গুলির (যা CarrierConfigManager.java তে সংজ্ঞায়িত) সাথে অ্যাকশন আইডি যুক্ত করতে হবে। উদাহরণস্বরূপ, নিম্নলিখিত ম্যাপিংটি মিটারড APN নিষ্ক্রিয় করে এবং রিডাইরেকশনের সময় একটি পোর্টাল নোটিফিকেশন দেখায়:

<string-array name="carrier_default_actions_on_redirection_string_array" num="2">
            <item value="1" />
            <item value="4" />
</string-array>

টেলিফোনি ফ্রেমওয়ার্ক এই কনফিগারেশনগুলো লোড করে এবং ডিফল্ট অ্যাকশনগুলোকে ওভাররাইড করে।

বৈধতা

এই ফিচারের জন্য কোনো CTS, CTS Verifier, বা GTS টেস্ট নেই।

ফিচারটি যাচাই করতে এই ম্যানুয়াল ভ্যালিডেশন টেস্টগুলো ব্যবহার করুন:

  1. টেলিকম কোম্পানির ডিভাইসের সিগন্যাল ভারসাম্যহীনতার বিজ্ঞপ্তিটি যাচাই করুন।
  2. ভারসাম্যহীন অবস্থায় এবং ওয়াই-ফাই বন্ধ থাকাকালীন ট্র্যাফিক রিডাইরেক্ট থ্রটলিং যাচাই করুন।
  3. ভারসাম্যহীন অবস্থায় নেটওয়ার্ক ট্র্যাফিক হ্রাস করা হয়েছে কিনা এবং নোটিফিকেশন UI প্রদর্শিত হচ্ছে কিনা তা যাচাই করুন।
  4. ব্যালেন্স না থাকা অবস্থায় ভয়েস কল/VoLTE ফাংশন যাচাই করুন।
  5. ব্যালেন্স না থাকলে ভিডিও কলিং ব্লক করা আছে কিনা তা যাচাই করুন।
  6. ওয়াই-ফাই চালু থাকা অবস্থায় যাচাই করুন যে ব্যবহারকারী ওয়েব ব্রাউজিং চালিয়ে যেতে পারছেন এবং ভারসাম্যহীন অবস্থায় ব্রাউজিং ট্র্যাফিক নেটওয়ার্ক ট্র্যাফিক চালু করছে না।
  7. ভারসাম্যহীন অবস্থায় ওয়াই-ফাই, ডাব্লিউএফসি এবং ব্লুটুথ ফাংশনগুলো যাচাই করুন।
  8. ওয়াই-ফাই বন্ধ করুন। আউট-অফ-ব্যালেন্স নোটিফিকেশন UI যাচাই করুন এবং নিশ্চিত করুন যে সাধারণ ব্রাউজিং ট্র্যাফিক টেলকো রেজিস্ট্রেশন ওয়েবসাইটে রিডাইরেক্ট হচ্ছে না। যাচাই করুন যে নোটিফিকেশন UI-এর লিঙ্কে ক্লিক করলে ব্রাউজারটি টেলকো রেজিস্ট্রেশন ওয়েবসাইটে নিয়ে যায়।
  9. যাচাই করুন যে এয়ারপ্লেন মোড চালু বা বন্ধ করলে ট্র্যাফিক থ্রটলিং অবস্থা রিসেট হয় না।
  10. যাচাই করুন যে, চালু থাকা সিম বদলালে নেটওয়ার্ক ট্র্যাফিকের অবস্থা রিসেট হয় কি না।
  11. যাচাই করুন যে ব্যালেন্স-বিহীন সিমটি পুনরায় প্রবেশ করালে ট্র্যাফিক রিডাইরেকশন আবার শুরু হয় এবং নেটওয়ার্ক ট্র্যাফিক থ্রটলিং পুনরায় চালু হয়।
  12. যাচাই করুন যে ফোনটি রিবুট করলে রিডাইরেকশন পুনরায় সক্রিয় হয় এবং ট্র্যাফিক থ্রটল ও নোটিফিকেশন UI ফিরে আসে।
  13. 'ক্যাপটিভপোর্টাল' নোটিফিকেশনটিতে ট্যাপ করুন। ব্যবহারকারীকে ক্রেডিট যোগ করার অনুমতি দিতে একটি সীমাবদ্ধ নেটওয়ার্ক সংযোগ স্থাপিত হয়েছে কিনা তা যাচাই করুন।
  14. যাচাই করুন যে সিম ব্যালেন্স রিফিল বা পুনরায় সক্রিয় করার ফলে সেলুলার নেটওয়ার্ক ট্র্যাফিক পুনরুদ্ধার হয় এবং টেলকো লিঙ্ক ও ব্যালেন্স না থাকার বিজ্ঞপ্তিটি চলে যায়।
  15. ডেটা পরিষেবা পুনরুদ্ধারের পর যৌক্তিকতা যাচাই।

ডিফল্ট অ্যাপটিতে ইউনিট টেস্টের কয়েকটি উদাহরণ এবং সেগুলো চালানোর জন্য একটি স্ক্রিপ্ট দেওয়া আছে (দেখুন tests/runtest.sh )। যখন আপনি কোনো কাস্টমাইজড সংস্করণ বা আচরণ প্রয়োগ করবেন, তখন সেই কাস্টমাইজেশনগুলোকে ডেডিকেটেড ইউনিট টেস্টে প্রতিফলিত করা উচিত।