টেলিফোনি টাইম জোন শনাক্তকরণ

Android 11 বা তার আগের যেকোনও ভার্সনে চলা ডিভাইসের ক্ষেত্রে, Android ওপেন সোর্স প্রজেক্টে (AOSP) অটোমেটিক টাইম জোন শনাক্তকরণ টেলিফোনি সাবসিস্টেম থেকে পাওয়া সিগন্যালের উপর নির্ভর করে। টেলিফোনি সাবসিস্টেমের উপর নির্ভর করার কারণে, Android 11 বা তার আগের যেকোনও ভার্সনে অটোমেটিক টাইম জোন শনাক্তকরণ টেলিফোনি ডিভাইসের মধ্যে সীমাবদ্ধ।

টেলিফোনি টাইম জোন শনাক্তকরণ উপলভ্য থাকলে, এটি মোবাইল কান্ট্রি কোড (MCC) এবং নেটওয়ার্ক আইডেন্টিটি ও টাইম জোন (NITZ) সিগন্যাল ব্যবহার করে কাজ করে।

যেমন, বেলজিয়ামে কোনও ডিভাইস শুধুমাত্র আশেপাশের সেল টাওয়ার থেকে পাওয়া MCC-এর ভিত্তিতে টাইম জোন শনাক্ত করতে পারে। এটি সম্ভব কারণ বেলজিয়ামে একটিই টাইম জোন ব্যবহার করা হয়।

কোনও দেশে একাধিক টাইম জোন থাকলে, টাইম জোন শনাক্ত করার জন্য শুধু MCC যথেষ্ট নয়। এইসব দেশের ক্ষেত্রে, সঠিক টাইম জোন শনাক্ত করতে ডিভাইস NITZ সিগন্যালও ব্যবহার করে। এটি বিশ্বের অনেক জায়গায় ভাল কাজ করে তবে এর জন্য NITZ সিগন্যাল উপলভ্য এবং সঠিক হতে হবে এবং এটি তাই পরিষেবা প্রদানকারীর উপর নির্ভর করে।

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

টেলিফোনি টাইম জোন শনাক্তকরণের সীমাবদ্ধতা

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

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

উদাহরণ হিসেবে, ডেনভার ও ফিনিক্সের জন্য ঋতু অনুযায়ী ডিভাইসের আচরণ নিচের সারণীতে দেখানো হয়েছে:

লোকেশন ও ঋতু MCC বা NITZ থেকে পাওয়া তথ্য শনাক্ত করা টাইম জোন ও আচরণ
ডেনভার, কলোরাডো
শীতকালীন
সময়: ১ জানুয়ারি ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-৭, ডেলাইট সেভিং নেই
দুটি জোন আইডি ম্যাচ করেছে:
  • আমেরিকা/ডেনভার
  • America/Phoenix

ডিভাইস সঠিকভাবে আমেরিকা/ডেনভারে সেট করা আছে।
ফিনিক্স, অ্যারিজোনা
শীতকাল
সময়: ১ জানুয়ারি ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-৭, ডেলাইট সেভিং নেই
দুটি জোন আইডি ম্যাচ করেছে:
  • আমেরিকা/ডেনভার
  • আমেরিকা/ফিনিক্স

ডিভাইস ভুলভাবে America/Denver-এ সেট করা আছে।
ডেনভার, কলোরাডো
গ্রীষ্মকাল
সময়: ১ জুলাই ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-6, ডেলাইট সেভিং
একটি জোন আইডি ম্যাচ করে:
  • America/Denver

ডিভাইস সঠিকভাবে America/Denver-এ সেট করা আছে।
ফিনিক্স, অ্যারিজোনা
গ্রীষ্মকাল
সময়: ১ জুলাই ২০২১ ১২:০০:০০
দেশ: মার্কিন যুক্তরাষ্ট্র
অফসেট: UTC-৭, ডেলাইট সেভিং নেই
একটি জোন আইডি ম্যাচ করেছে:
  • আমেরিকা/ফিনিক্স

ডিভাইস সঠিকভাবে America/Phoenix-এ সেট করা আছে।

টেবিলে দেওয়া উদাহরণ থেকে দেখা যায় যে শীতকালে, ডেনভার বা অ্যারিজোনার Android ডিভাইসকে দু'টি মিলে যাওয়া টাইম জোন আইডির মধ্যে একটি বেছে নিতে হবে, যা কিছু ডিভাইসের জন্য ভুল হতে পারে কিন্তু তা সত্ত্বেও আপাতদৃষ্টিতে সঠিক লোকাল টাইম দেখাবে। ডিভাইসের ঘড়ি, ক্যালেন্ডার ও অন্যান্য অ্যাপে প্রত্যাশিত স্থানীয় সময় দেখানো হয়, এমনকি টাইম জোন আইডি ভুল থাকলেও, কারণ শীতকালে দুটি টাইম জোন আইডি একই স্থানীয় সময় গণনা করে।

তবে, বসন্তকালে যখন ডেনভারে ডেলাইট সেভিং টাইম পালন করা হয় এবং ফিনিক্সে করা হয় না, তখন কিছু ডিভাইস সাময়িকভাবে ভুল স্থানীয় সময় দেখাতে পারে, যদি সেগুলি ব্যবহারকারীর লোকেশনের জন্য ভুল টাইম জোন আইডিতে সেট করা থাকে। ডিভাইস নতুন NITZ সিগন্যাল (বিশেষত, এমন একটি সিগন্যাল যাতে "UTC-7, কোনও ডেলাইট সেভিং নেই" অফসেট সংক্রান্ত তথ্য থাকে) পাওয়ার সাথে সাথেই এটি ঠিক হয়ে যায়, তবে এতে কিছু সময় লাগতে পারে এবং এটি পরিষেবা প্রদানকারীর উপর নির্ভর করে।

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

ডিবাগ ও টেস্ট করা

নিম্নলিখিত বিভাগে টেলিফোনি টাইম জোন শনাক্তকরণ ফিচার ডিবাগ ও পরীক্ষা করার জন্য শেল কমান্ডের বিবরণ দেওয়া আছে।

টেস্ট এনভায়রনমেন্ট সেট-আপ

টেলিফোনি টাইম জোন শনাক্তকরণ আচরণ চেক করার জন্য পরীক্ষকরা সাধারণত একটি টেস্ট বা সিমুলেটেড টেলিফোনি সেল সহ টেস্ট এনভায়রনমেন্ট ব্যবহার করেন। টেস্ট সেল ব্যবহার করে বিভিন্ন MCC সহ নেটওয়ার্ক সিমুলেট করা এবং ডিভাইসে NITZ সিগন্যাল পাঠানো এবং তারপরে সেগুলির প্রভাব মনিটর করা যায়।

ডিভাইসকে টাইম জোন শনাক্ত করতে হলে, NITZ সিগন্যাল সংক্রান্ত তথ্যকে সঠিক হতে হবে, MCC-র সাথে সামঞ্জস্যপূর্ণ হতে হবে এবং IANA TZDB-র ডিভাইসের কপি (টাইম জোন সংক্রান্ত নিয়ম)-এর সাথে মিলতে হবে। NITZ সিগন্যাল MCC-এর সাথে সামঞ্জস্যপূর্ণ না হলে, টেলিফোনি অ্যালগরিদম অনিশ্চিত হয়ে পড়ে।

যেমন, টেস্ট সেলের ব্যবহার করা MCC যদি মার্কিন যুক্তরাষ্ট্রের হয়, তাহলে NITZ সিগন্যালে অবশ্যই UTC, অফসেট এবং ডেলাইট সেভিং সংক্রান্ত তথ্য থাকতে হবে যা মার্কিন যুক্তরাষ্ট্রের কোনও জায়গার জন্য সঠিক।

com.android.phone পরিষেবার সাথে ইন্টার‍্যাক্ট করা

ডিভাইস সঠিক টেলিফোনি টাইম জোন সংক্রান্ত সাজেশন পাচ্ছে কিনা তা যাচাই করতে, এগুলি ব্যবহার করুন:

adb shell dumpsys activity service \
    com.android.phone/com.android.phone.TelephonyDebugService

এটি টেলিফোনি সংক্রান্ত তথ্য ডাম্প করে, যা Android বাগ রিপোর্টেও পাওয়া যেতে পারে। একাধিক সিম কার্ড আছে এমন ডিভাইসে, প্রতিটি সিম রেডিওর জন্য তথ্য থাকে।

টাইম জোন লগ থেকে সেইসব সাজেশন দেখা যায় যেগুলি টেলিফোনি প্রসেস time_zone_detector-এ পাঠিয়েছে এবং সাজেশন পাঠানোর কারণও দেখা যায়।

TimeServiceHelperImpl:
          SystemClock.elapsedRealtime()=11864061
          System.currentTimeMillis()=1620652067178
          Time Logs:
...

Time zone Logs:
    18602 / 2021-05-10T09:50:21.718Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='null', mMatchType=0, mQuality=0,
    mDebugInfo=[getTimeZoneSuggestion: nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    countryIsoCode=null, Detection
    reason=handleNitzReceived(TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}})]}
    18831 / 2021-05-10T09:50:21.948Z - Suggesting time zone update:
    TelephonyTimeZoneSuggestion{mSlotIndex=0, mZoneId='Europe/London', mMatchType=3, mQuality=1,
    mDebugInfo=[findTimeZoneFromCountryAndNitz: countryIsoCode=gb,
    nitzSignal=TimestampedValue{mReferenceTimeMillis=14098,
    mValue=NitzData{mOriginalString=21/05/10,09:50:18+04,01, mZoneOffset=3600000,
    mDstOffset=3600000, mCurrentTimeMillis=1620640218000, mEmulatorHostTimeZone=null}},
    findTimeZoneFromCountryAndNitz: lookupResult=OffsetResult{mTimeZone(ID)=Europe/London,
    mIsOnlyMatch=true}, Detection reason=handleCountryDetected("gb")]}