Jetpack WindowManager লাইব্রেরি অ্যাপ ডেভেলপারদের নতুন ডিভাইস ফর্ম ফ্যাক্টর এবং মাল্টি-উইন্ডো এনভায়রনমেন্টে কাজ করতে সাহায্য করে।
WindowManager এক্সটেনশন (Extensions) হল একটি অপ্ট-ইন Android প্ল্যাটফর্ম মডিউল যা
বিভিন্ন ধরনের Jetpack WindowManager ফিচার চালু করে। মডিউলটি AOSP-তে
frameworks/base/libs/WindowManager/Jetpack
ইমপ্লিমেন্ট করা হয়েছে
এবং WindowManager ফিচার কাজ করে এমন ডিভাইসে পাঠানো হয়েছে।
এক্সটেনশন মডিউল ডিস্ট্রিবিউশন
ডিভাইস মেকফাইলে এক্সটেনশন চালু করা থাকলে, এক্সটেনশনগুলি JAR লাইব্রেরিতে কম্পাইল করা হয় এবং ডিভাইসের system_ext
পার্টিশনে রাখা হয়।
কোনও ডিভাইসে এক্সটেনশন চালু করতে, প্রোডাক্ট ডিভাইসে নিম্নলিখিতগুলি যোগ করুন makefile:
$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
এটি ডিভাইসে androidx.window.extensions এবং androidx.window.sidecar
প্যাকেজ চালু করে এবং persist.wm.extensions.enabled প্রপার্টি সেট করে।
makefile-এ এইসব প্যাকেজ অন্তর্ভুক্ত করলে, etc/permissions/-এও ডিক্লারেশন যোগ করা হয়,
যার ফলে অ্যাপ প্রসেসের জন্য সেগুলি উপলভ্য হয়। সাধারণত
মডিউলগুলি রানটাইমে অ্যাপ প্রসেসের অংশ হিসেবে লোড এবং এক্সিকিউট করা হয়
যখন Jetpack WindowManager লাইব্রেরি দ্বারা ব্যবহার করা হয়, যা এর
অপারেশনকে ক্লায়েন্ট-সাইড ফ্রেমওয়ার্ক কোডের মতো করে তোলে, যেমনটি নিম্নলিখিত
চিত্রে দেখানো হয়েছে:
ছবি ১. অ্যাপ প্রসেসে এক্সটেনশন লোড করা হয়েছে।
androidx.window.extensions মডিউল হল বর্তমানে অ্যাক্টিভ ডেভেলপমেন্টের অধীনে থাকা
এক্সটেনশন মডিউল। androidx.window.sidecar মডিউল হল একটি লিগ্যাসি মডিউল
যা Jetpack WindowManager-এর সবচেয়ে পুরনো ভার্সনের সাথে মানানসই হওয়ার জন্য অন্তর্ভুক্ত করা হয়েছে,
কিন্তু সাইডকার আর অ্যাক্টিভভাবে রক্ষণাবেক্ষণ করা হয় না।
নিচের ছবিতে
androidx.window.extensions বা androidx.window.sidecar ব্যবহারের সিদ্ধান্ত নেওয়ার লজিক দেখানো হয়েছে।
ছবি ২. androidx.window.extensions বা androidx.window.sidecar অ্যাক্সেস করার জন্য সিদ্ধান্ত ট্রি।
এক্সটেনশন মডিউল
এক্সটেনশন, ফোল্ড করা যায় এমন বড় স্ক্রিন ডিভাইস এবং এক্সটার্নাল ডিসপ্লেতে উইন্ডোয়িং কাজ করে এমন ডিভাইসের জন্য উইন্ডোয়িং ফিচার প্রদান করে। ফিচার করা জায়গার মধ্যে এগুলি অন্তর্ভুক্ত:
ডিভাইস হার্ডওয়্যার সংশ্লিষ্ট ফিচার সাপোর্ট না করলে, এক্সটেনশনের OEM ইমপ্লিমেন্টেশন
WindowExtensions ইন্টারফেসে মেথডের ডিফল্ট বা স্টাব ইমপ্লিমেন্টেশন সহ
নাল কম্পোনেন্ট বা কম্পোনেন্ট প্রদান করতে পারে,
যদি না ফিচারটি বিশেষভাবে কম্প্যাটিবিলিটি ডেফিনিশন
ডকুমেন্ট (CDD) 7.1.1.1-এ অনুরোধ করা হয়।
এক্সটেনশন ও Jetpack API
WindowManager Extensions মডিউলটি পাবলিক প্ল্যাটফর্ম API ছাড়াও
নিজস্ব API সারফেস প্রদান করে। Extensions মডিউলটি সর্বজনীনভাবে একটি
নন-ডেভেলপার–ফেসিং androidx.window.extensions
Jetpack লাইব্রেরিতে ডেভেলপ করা হয়েছে, যাতে Jetpack WindowManager (androidx.window)
কম্পাইল করার সময় এর সাথে লিঙ্ক করতে পারে। Extensions API সারফেস সাধারণত
লোয়ার-লেভেল API প্রদান করে।
এক্সটেনশন প্রদান করে এমন API শুধুমাত্র Jetpack WindowManager লাইব্রেরির মাধ্যমে ব্যবহার করার জন্য তৈরি করা হয়েছে। এক্সটেনশন API সরাসরি অ্যাপ ডেভেলপারদের কল করার জন্য তৈরি করা হয়নি। সঠিক কার্যকারিতা নিশ্চিত করতে, Gradle বিল্ড ফাইলে কোনও অ্যাপের জন্য এক্সটেনশন লাইব্রেরি ডিপেন্ডেন্সি হিসেবে যোগ করা যাবে না। সরাসরি কোনও অ্যাপে এক্সটেনশন লাইব্রেরি প্রি-কম্পাইল করা এড়িয়ে চলুন; এর পরিবর্তে, প্রি-কম্পাইল করা এবং রানটাইম-প্রদান করা এক্সটেনশন ক্লাসের মিক্স লোড করার সম্ভাবনা এড়াতে রানটাইম লোডিংয়ের উপর নির্ভর করুন।
Jetpack WindowManager (androidx.window) অ্যাপ
ডিপেন্ডেন্সি হিসেবে যোগ করার জন্য তৈরি করা হয়েছে এবং এটি WindowManager এক্সটেনশন ফিচারের
জন্য পাবলিক ডেভেলপার-ফেসিং API সহ অন্যান্য API প্রদান করে। WindowManager লাইব্রেরি অটোমেটিক
অ্যাপ প্রসেসে এক্সটেনশন লোড করে এবং লোয়ার-লেভেল
এক্সটেনশন API-কে হায়ার-লেভেল অ্যাবস্ট্রাকশন ও আরও ফোকাসড
ইন্টারফেসে র্যাপ করে। WindowManager Jetpack API আধুনিক Android অ্যাপ ডেভেলপমেন্টের স্ট্যান্ডার্ড অনুসরণ করে এবং অন্যান্য AndroidX লাইব্রেরি ব্যবহার করে এমন কোডবেসের সাথে ভালোভাবে ইন্টিগ্রেট করার মাধ্যমে সুবিধাজনক ইন্টারঅপারেবিলিটি প্রদান করার জন্য তৈরি করা হয়েছে।
এক্সটেনশনের ভার্সন ও আপডেট
Android প্ল্যাটফর্মের সাথে এক্সটেনশন মডিউল বছরে বা কোয়ার্টারলি আপডেট করা যেতে পারে। কোয়ার্টারলি আপডেট, Android প্ল্যাটফর্ম API আপডেটের মধ্যে Extensions API লেভেলকে বাড়াতে সাহায্য করে, এর ফলে দ্রুত ইটারেশন করা যায় এবং হার্ডওয়্যার লঞ্চের কাছাকাছি সময়ে নতুন ফিচারে অফিসিয়াল API অ্যাক্সেস যোগ করার সুযোগ OEM-কে প্রদান করে।
নিম্নলিখিত সারণীতে বিভিন্ন Android রিলিজের জন্য
androidx.window.extensions API ভার্সন তালিকাভুক্ত করা হয়েছে।
| Android প্ল্যাটফর্ম ভার্সন | WindowManager Extensions API লেভেল | androidx.window.extensions API ভার্সন |
|---|---|---|
| Android 15 | 6 | 1.5.0 (শীঘ্রই আসছে) |
| Android 14 QPR3 | 5 | 1.4.0 (শীঘ্রই আসছে) |
| Android 14 QPR1 | 4 | 1.3.0 |
| Android 14 | 3 | 1.2.0 |
| Android 13 QPR3 | 2 | 1.1.0 |
| Android 13 | 1 | 1.0.0 |
| Android 12L | 1 | 1.0.0 |
আগে থেকে থাকা স্টেবল API সারফেসে (ডানদিকের কলাম) কিছু যোগ করা হলে, প্রতিবার Extensions API লেভেল (মাঝের কলাম) বাড়ানো হয়।
পুরনো ও নতুন ভার্সনের সাথে মানানসই
Jetpack WindowManager ঘন ঘন API লেভেল আপডেট, দ্রুত API বিবর্তন এবং ব্যাকওয়ার্ড কম্প্যাটিবিলিটি সংক্রান্ত জটিলতা ম্যানেজ করে। অ্যাপ প্রসেসে লাইব্রেরি কোড রান করা হলে, লাইব্রেরি ঘোষিত Extensions API লেভেল চেক করে এবং ঘোষিত লেভেল অনুযায়ী ফিচারে অ্যাক্সেস প্রদান করে।
রানটাইমে কোনও অ্যাপ ক্র্যাশ হওয়া থেকে রক্ষা করতে, WindowManager ঘোষিত এক্সটেনশন API লেভেল অনুযায়ী উপলভ্য এক্সটেনশন API-এর রানটাইম জাভা রিফ্লেকশন চেকও করে। কোনও অমিল থাকলে, WindowManager এক্সটেনশন (আংশিক বা সম্পূর্ণ) ব্যবহার করা বন্ধ করে দিতে পারে এবং প্রাসঙ্গিক ফিচার অ্যাপে উপলভ্য নেই বলে রিপোর্ট করতে পারে।
WindowManager এক্সটেনশনগুলি system_ext মডিউল হিসেবে প্রয়োগ করা হয় যা
WindowManager কোরে কল করার জন্য প্রাইভেট প্ল্যাটফর্ম API ব্যবহার করে,
DeviceStateManager,
এবং এক্সটেনশন ফিচারের প্রয়োগে অন্যান্য সিস্টেম পরিষেবা।
এক্সটেনশনের প্রি-রিলিজ ভার্সনের সাথে মানানসই নাও হতে পারে
যে ভার্সনগুলি সংশ্লিষ্ট ত্রৈমাসিক বা বার্ষিক Android প্ল্যাটফর্ম রিলিজের আগে চূড়ান্ত করা হয়। এক্সটেনশন API-এর সম্পূর্ণ ইতিহাস রিলিজ ব্রাঞ্চে
পাওয়া যাবে window:extensions:extensions API টেক্সট
ফাইল।
ফরওয়ার্ড কম্প্যাটিবিলিটি বজায় রাখতে, এক্সটেনশনের নতুন ভার্সনগুলিকে অবশ্যই অ্যাপে কম্পাইল করা WindowManager-এর আগের ভার্সনের সাথে কাজ করা চালিয়ে যেতে হবে। এটি নিশ্চিত করতে, Extensions API-এর যেকোনও নতুন ভার্সন শুধুমাত্র নতুন API যোগ করে এবং পুরনো API সরিয়ে দেয় না। এর ফলে, যেসব অ্যাপের WindowManager ভার্সন কম, সেগুলি সেইসব পুরনো এক্সটেনশন API ব্যবহার করা চালিয়ে যেতে পারবে যেগুলির সাথে অ্যাপগুলি কম্পাইল করা হয়েছিল।
CTS যাচাইকরণ নিশ্চিত করে যে ডিভাইসে Extensions API-এর যেকোনও ঘোষিত ভার্সনের জন্য, সেই এবং আগের ভার্সনের সব API উপস্থিত এবং কার্যকরী আছে।
পারফর্ম্যান্স
Android 14 (API লেভেল 34) থেকে শুরু করে, এক্সটেনশন মডিউলটি ডিফল্ট হিসেবে নন-বুটক্লাসপাথ সিস্টেম ক্লাস লোডারে ক্যাশে করা হয়, তাই অ্যাপ স্টার্ট-আপে মডিউলটি মেমরিতে লোড করার কারণে পারফর্ম্যান্সের উপর কোনও প্রভাব পড়ে না। ক্লায়েন্ট ও সার্ভারের মধ্যে অতিরিক্ত IPC কল করা হলে, আলাদা আলাদা মডিউল ফিচার ব্যবহার করার ফলে অ্যাপের পারফর্ম্যান্সের বৈশিষ্ট্যের উপর সামান্য প্রভাব পড়তে পারে।
মডিউল
অ্যাক্টিভিটি এম্বেড করা
অ্যাক্টিভিটি এম্বেডিং কম্পোনেন্ট, বড় স্ক্রিন ডিভাইস ও এক্সটার্নাল ডিসপ্লের জন্য অ্যাপের UI অপ্টিমাইজ করতে সাহায্য করে। অ্যাক্টিভিটি এম্বেডিংয়ের মাধ্যমে মাল্টিপেন লেআউটে দুটি অ্যাক্টিভিটি পাশাপাশি দেখানো যায়, এর ফলে লেগ্যাসি অ্যাপের জন্য অ্যাডাপ্টিভ অ্যাপ ডেভেলপমেন্ট সহজ হয়।
sw600dp-এর সমান বা তার চেয়ে বড় বিল্ট-ইন ডিসপ্লে আছে এমন সব ডিভাইসে অ্যাক্টিভিটি এম্বেডিং কম্পোনেন্ট থাকতে হবে।
এছাড়াও, এক্সটার্নাল ডিসপ্লে কানেকশন সাপোর্ট করে এমন ডিভাইসে অ্যাক্টিভিটি এম্বেডিং
চালু করতে হবে, কারণ রানটাইমে এক্সটার্নাল ডিসপ্লে কানেক্ট করা থাকলে
অ্যাপটি আরও বড় সাইজে দেখানো হতে পারে।
ডিভাইস কনফিগারেশন
এক্সটেনশন মডিউল ডিস্ট্রিবিউশন বিভাগে বর্ণিত এক্সটেনশন মডিউল চালু করা ছাড়া অন্য কোনও নির্দিষ্ট ডিভাইস কনফিগারেশনের প্রয়োজন নেই। মাল্টি-উইন্ডো মোড কাজ করে এমন সব ডিভাইসে এক্সটেনশন চালু করলে ভাল হয়। Android-এর পরবর্তী ভার্সনগুলিতে সাধারণ হ্যান্ডহেল্ড ও বড় স্ক্রিন ডিভাইসের কনফিগারেশনে এক্সটেনশন প্রয়োজন হতে পারে।
উইন্ডো লেআউট সংক্রান্ত তথ্য
উইন্ডো লেআউট সংক্রান্ত তথ্য কম্পোনেন্ট, ফোল্ড করা যায় এমন ডিভাইসে হিঞ্জ কোনও অ্যাপ উইন্ডো অতিক্রম করলে, হিঞ্জের পজিশন ও স্টেট শনাক্ত করে। উইন্ডো লেআউট সংক্রান্ত তথ্য অ্যাপকে ফোল্ডেবল ডিভাইসে টেবিলটপ মোডে অপ্টিমাইজ করা লেআউট দেখাতে ও তার সাথে মানানসই হতে সাহায্য করে। ব্যবহারের বিবরণ জানতে, আপনার অ্যাপকে ফোল্ড-অ্যাওয়ার করুন লিঙ্কে যান।
যেসব ফোল্ডেবল Android ডিভাইসে হিঞ্জ থাকে যা আলাদা বা
ধারাবাহিক ডিসপ্লে প্যানেল এরিয়াকে কানেক্ট করে, সেগুলিকে অবশ্যই হিঞ্জ সম্পর্কে তথ্য
WindowLayoutComponent-এর মাধ্যমে অ্যাপের জন্য উপলভ্য করতে হবে।
API-তে পাস করা Context-এর মাধ্যমে শনাক্ত করা অ্যাপ
উইন্ডোর সাপেক্ষে হিঞ্জ পজিশন ও বাউন্ড রিপোর্ট করতে হবে। অ্যাপ উইন্ডোর
বাউন্ড যদি হিঞ্জের বাউন্ডের সাথে ইন্টারসেক্ট না করে, তাহলে হিঞ্জ সম্পর্কে DisplayFeature
রিপোর্ট করা যাবে না। এছাড়াও, ডিসপ্লে ফিচারের পজিশন নির্ভরযোগ্যভাবে রিপোর্ট করা না গেলে, যেমন, মাল্টি-উইন্ডো মোড বা
কম্প্যাটিবিলিটি লেটারবক্সিং মোডে
অ্যাপ উইন্ডো ব্যবহারকারী ফ্রিলি মুভ করতে পারলে, ডিসপ্লে ফিচার রিপোর্ট না করলেও চলে।
ফোল্ডিং ফিচারের জন্য,
স্টেট আপডেট অবশ্যই রিপোর্ট করতে হবে যখন হিঞ্জের পজিশন স্টেবল স্টেটের মধ্যে
পরিবর্তিত হয়। ডিফল্ট হিসেবে, ফ্ল্যাট ডিসপ্লে স্টেটে API-কে অবশ্যই
FoldingFeature.State.FLAT রিপোর্ট করতে হবে।
ডিভাইস হার্ডওয়্যার যদি স্থিতিশীল অবস্থায় হাফ-ফোল্ডেড মোডে রাখা যায়, তাহলে
API-কে অবশ্যই FoldingFeature.State.HALF_OPENED রিপোর্ট করতে হবে।
API-তে কোনও ক্লোজড স্টেট নেই, কারণ এই ধরনের ক্ষেত্রে অ্যাপ উইন্ডো
হয় দেখা যাবে না বা হিঞ্জ বাউন্ডারি অতিক্রম করবে না।
ডিভাইস কনফিগারেশন
ফোল্ডিং ফিচার প্রয়োগ করার জন্য, OEM-কে অবশ্যই নিম্নলিখিত কাজগুলি করতে হবে:
DeviceStateManagerService-এর দ্বারা ব্যবহৃত হওয়ার জন্যdevice_state_configuration.xml-এ ডিভাইস স্টেট কনফিগার করুন। রেফারেন্সের জন্যDeviceStateProviderImpl.javaদেখুন।DeviceStateProviderবাDeviceStatePolicyএর ডিফল্ট প্রয়োগ ডিভাইসের জন্য উপযুক্ত না হলে, কাস্টম প্রয়োগ ব্যবহার করা যেতে পারে।এক্সটেনশন মডিউল ডিস্ট্রিবিউশন বিভাগে যেভাবে বর্ণনা করা হয়েছে সেইভাবে এক্সটেনশন মডিউল চালু করুন।
com.android.internal.R.string.config_display_featuresস্ট্রিং রিসোর্সে ডিসপ্লে ফিচারের লোকেশন উল্লেখ করুন (সাধারণত ডিভাইসের ওভারলেতেframeworks/base/core/res/res/values/config.xml-এ)।স্ট্রিংয়ের প্রত্যাশিত ফর্ম্যাট হল:
<type>-[<left>,<top>,<right>,<bottom>]typefoldবাhingeহতে পারে।left,top,rightএবংbottom-এর মান হল স্বাভাবিক ডিসপ্লে ওরিয়েন্টেশনে ডিসপ্লে কোঅর্ডিনেট স্পেসে পূর্ণসংখ্যা পিক্সেল কোঅর্ডিনেট। কনফিগারেশন স্ট্রিংয়ে সেমিকোলন দিয়ে আলাদা করা একাধিক ডিসপ্লে ফিচার থাকতে পারে।যেমন:
<!-- Jetpack WindowManager display features --> <string name="config_display_features" translatable="false">fold-[1000,0,1000,2000]</string>DeviceStateManager-এ ব্যবহৃত ইন্টার্নাল ডিভাইস স্টেট শনাক্তকারী এবংcom.android.internal.R.array.config_device_state_postures-এ ডেভেলপারদের পাঠানো পাবলিক স্টেট কনস্ট্যান্টের মধ্যে ম্যাপিং নির্ধারণ করুন।প্রতিটি এন্ট্রির প্রত্যাশিত ফর্ম্যাট হল:
<device_specific_state_identifier>:<Jetpack WindowManager state identifier>যেসব স্টেট শনাক্তকারী কাজ করে সেগুলি হল:
COMMON_STATE_NO_FOLDING_FEATURES = 1: এই স্টেটে রিপোর্ট করার মতো কোনও ফোল্ডিং ফিচার নেই। যেমন, এটি ভিতরের দিকে মূল স্ক্রিন সহ সাধারণ ইন-ফোল্ডিং ডিভাইসের বন্ধ অবস্থা হতে পারে।COMMON_STATE_HALF_OPENED = 2: ফোল্ডিং ফিচারটি অর্ধেক খোলা আছে।COMMON_STATE_FLAT = 3: ফোল্ডিং ফিচার ফ্ল্যাট। যেমন, এটি ভিতরের দিকে প্রধান স্ক্রিন সহ সাধারণ ইন-ফোল্ডিং ডিভাইসের খোলা অবস্থা হতে পারে।COMMON_STATE_USE_BASE_STATE = 1000: Android 14-এ, এমন একটি ভ্যালু যা এমুলেটেড স্টেটের জন্য ব্যবহার করা যেতে পারে যেখানে বেস স্টেট ব্যবহার করে হিঞ্জ স্টেট পাওয়া যায়, যেমনCommonFoldingFeature.java-এ সংজ্ঞায়িত করা হয়েছে।
আরও তথ্যের জন্য
DeviceStateManager.DeviceStateCallback#onBaseStateChanged(int)দেখুন।যেমন:
<!-- Map of System DeviceState supplied by DeviceStateManager to WindowManager posture.--> <string-array name="config_device_state_postures" translatable="false"> <item>0:1</item> <!-- CLOSED : COMMON_STATE_NO_FOLDING_FEATURES --> <item>1:2</item> <!-- HALF_OPENED : COMMON_STATE_HALF_OPENED --> <item>2:3</item> <!-- OPENED : COMMON_STATE_FLAT --> <item>3:1</item> <!-- REAR_DISPLAY : COMMON_STATE_NO_FOLDING_FEATURES --> <item>4:1000</item> <!-- CONCURRENT : COMMON_STATE_USE_BASE_STATE --> </string-array>
জানলার ক্ষেত্রফল
উইন্ডো এরিয়া কম্পোনেন্ট এমন কিছু ফিচার প্রদান করে যা অ্যাপকে কিছু ফোল্ড করা যায় এমন এবং মাল্টি-ডিসপ্লে ডিভাইসে অতিরিক্ত ডিসপ্লে এবং ডিসপ্লে এরিয়া অ্যাক্সেস করতে দেয়।
ফোল্ড করা যায় এমন ডিভাইসের কভার ডিসপ্লেতে ক্যামেরা প্রিভিউ UI দেখানোর জন্য রিয়ার ডিসপ্লে মোড কোনও অ্যাপকে অনুমতি দেয়, যাতে সেলফি ও ভিডিওর জন্য মূল ডিভাইসের ক্যামেরা ব্যবহার করা যায়। যেসব ডিভাইসে Android-এর সাথে মানানসই (সাইজ, ডেনসিটি ও উপলভ্য নেভিগেশন অ্যাফর্ডেন্সের মতো অ্যাট্রিবিউট সংক্রান্ত Android CDD-তে যেভাবে সংজ্ঞায়িত করা হয়েছে) কভার ডিসপ্লে আছে এবং যা ডিভাইসের পিছনের ক্যামেরার সাথে অ্যালাইন করে, সেগুলিতে অবশ্যই পিছনের ডিসপ্লে মোডের অ্যাক্সেস দিতে হবে।
Android 14-এ, ডুয়াল ডিসপ্লে মোড, ফোল্ড করা যায় এমন ডিভাইসের ভিতরের ডিসপ্লেতে চলমান অ্যাপকে, অন্য ব্যবহারকারীর দিকে মুখ করে থাকা কভার ডিসপ্লেতে অতিরিক্ত কন্টেন্ট দেখাতে দেয়; যেমন, কভার ডিসপ্লেতে ফটো বা ভিডিও রেকর্ড করা হচ্ছে এমন ব্যক্তিকে ক্যামেরা প্রিভিউ দেখানো যেতে পারে।
ডিভাইস কনফিগারেশন
ফোল্ডিং ফিচার প্রয়োগ করার জন্য, OEM-কে অবশ্যই নিম্নলিখিত কাজগুলি করতে হবে:
DeviceStateManagerService-এর দ্বারা ব্যবহৃত হওয়ার জন্যdevice_state_configuration.xml-এ ডিভাইস স্টেট কনফিগার করুন। আরও তথ্যের জন্যDeviceStateProviderImpl.javaদেখুন।DeviceStateProviderবাDeviceStatePolicy-এর ডিফল্ট প্রয়োগ ডিভাইসের জন্য উপযুক্ত না হলে, কাস্টম প্রয়োগ ব্যবহার করা যেতে পারে।যেসব ফোল্ডেবল ডিভাইস ওপেন বা ফ্ল্যাট মোড সাপোর্ট করে, সেগুলির জন্য
com.android.internal.R.array.config_openDeviceStates-এ সংশ্লিষ্ট স্টেট আইডেন্টিফায়ার উল্লেখ করুন।ফোল্ড করা যায় এমন ডিভাইসের ক্ষেত্রে, ফোল্ড করা অবস্থায় কাজ করে এমন ডিভাইসের জন্য
com.android.internal.R.array.config_foldedDeviceStates-এ স্টেট শনাক্তকারীগুলির তালিকা দিন।ইন-ফোল্ডিং ডিভাইসের ক্ষেত্রে, যেগুলি হাফ-ফোল্ডেড স্টেট (ল্যাপটপের মতো হিঞ্জ অর্ধেক খোলা থাকে) সাপোর্ট করে, সেগুলির জন্য সংশ্লিষ্ট স্টেটগুলি
com.android.internal.R.array.config_halfFoldedDeviceStates-এ তালিকাভুক্ত করুন।যেসব ডিভাইসে পিছনের ডিসপ্লে মোড কাজ করে:
DeviceStateManager-এর জন্যcom.android.internal.R.array.config_rearDisplayDeviceStates-এ সংশ্লিষ্ট রাজ্যগুলির তালিকা তৈরি করুন।-
com.android.internal.R.string.config_rearDisplayPhysicalAddress-এ রিয়ার ডিসপ্লের ফিজিক্যাল ডিসপ্লে অ্যাড্রেস উল্লেখ করুন। - এক্সটেনশন
com.android.internal.R.integer.config_deviceStateRearDisplayব্যবহার করার জন্য স্টেট আইডেন্টিফায়ার নির্দিষ্ট করুন। - অ্যাপের জন্য উপলভ্য করতে
com.android.internal.R.array.config_deviceStatesAvailableForAppRequestsস্টেট শনাক্তকারী যোগ করুন।
Android 14-এ, যেসব ডিভাইসে ডুয়াল (কনকারেন্ট) ডিসপ্লে মোড কাজ করে:
com.android.internal.R.bool.config_supportsConcurrentInternalDisplays-কেtrue-এ সেট করুন।com.android.internal.R.config_deviceStateConcurrentRearDisplay-এ রিয়ার ডিসপ্লের ফিজিক্যাল ডিসপ্লে অ্যাড্রেস উল্লেখ করুন।- এক্সটেনশন ব্যবহার করার জন্য
com.android.internal.R.integer.config_deviceStateConcurrentRearDisplayস্টেট আইডেন্টিফায়ার নির্দিষ্ট করুন, যদি আইডেন্টিফায়ারটি অ্যাপের জন্য উপলভ্য করার কথা থাকে। - অ্যাপের জন্য উপলভ্য করতে
com.android.internal.R.array.config_deviceStatesAvailableForAppRequestsস্টেট শনাক্তকারী যোগ করুন।
যাচাইকরণ
সাধারণ পরিস্থিতিতে প্রত্যাশিত আচরণ নিশ্চিত করতে OEM-কে অবশ্যই তাদের প্রয়োগ যাচাই করতে হবে। OEM-এর জন্য CTS টেস্ট এবং Jetpack WindowManager ব্যবহার করে টেস্ট উপলভ্য আছে যাতে তারা ইমপ্লিমেন্টেশন টেস্ট করতে পারে।
CTS টেস্ট
CTS টেস্ট রান করতে, CTS টেস্ট রান করুন দেখুন। Jetpack WindowManager সম্পর্কিত CTS
টেস্ট cts/tests/framework/base/windowmanager/jetpack/-এর
অধীনে রয়েছে।
টেস্ট মডিউলের নাম হল CtsWindowManagerJetpackTestCases।
WindowManager পরীক্ষা
Jetpack WindowManager টেস্ট ডাউনলোড করতে, Android Jetpack নির্দেশাবলী অনুসরণ করুন
window:window মডিউলের অধীনে উইন্ডো লাইব্রেরিতে পরীক্ষাগুলি রয়েছে:
window/window/src/androidTest/.
কমান্ড লাইন থেকে window:window মডিউলের জন্য ডিভাইস টেস্ট রান করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:
- ডেভেলপার বিকল্প ও USB ডিবাগিং চালু আছে এমন একটি ডিভাইস প্লাগ-ইন করুন।
- কম্পিউটারকে ডিভাইস ডিবাগ করার অনুমতি দিন।
- androidx রিপোজিটরির রুট ডিরেক্টরিতে শেল খুলুন।
- ডিরেক্টরি পরিবর্তন করে
framework/supportকরুন। ./gradlew window:window:connectedAndroidTestকমান্ড রান করান।- ফলাফল বিশ্লেষণ করুন।
Android Studio থেকে টেস্ট রান করাতে, নিম্নলিখিত কাজগুলি করুন:
- Android Studio খুলুন।
- এমন একটি ডিভাইস প্লাগ-ইন করুন যাতে ডেভেলপার বিকল্প এবং USB ডিবাগিং চালু করা আছে।
- কম্পিউটারকে ডিভাইস ডিবাগ করার অনুমতি দিন।
- উইন্ডো মডিউলের উইন্ডো লাইব্রেরির মধ্যে কোনও টেস্টে নেভিগেট করুন।
- টেস্ট ক্লাস খুলুন এবং এডিটরের ডানদিকে থাকা সবুজ তীরচিহ্ন ব্যবহার করে রান করুন।
এছাড়াও, আপনি Android Studio-তে একটি কনফিগারেশন তৈরি করতে পারেন যাতে কোনও টেস্ট মেথড, টেস্ট ক্লাস বা মডিউলের সব টেস্ট চালানো যায়।
শেলের আউটপুট দেখে ফলাফল ম্যানুয়ালি বিশ্লেষণ করা যেতে পারে। ডিভাইস নির্দিষ্ট কিছু শর্ত পূরণ না করলে, কিছু পরীক্ষা এড়িয়ে যাওয়া হয়। ফলাফল একটি স্ট্যান্ডার্ড লোকেশনে সেভ করা হয় এবং ফলাফল বিশ্লেষণ অটোমেট করার জন্য বিশ্লেষকরা স্ক্রিপ্ট লিখতে পারেন।