Jetpack WindowManager লাইব্রেরিটি অ্যাপ্লিকেশন ডেভেলপারদের নতুন ডিভাইস ফর্ম ফ্যাক্টর এবং মাল্টি-উইন্ডো পরিবেশ সমর্থন করতে সক্ষম করে।
উইন্ডো ম্যানেজার এক্সটেনশনস (এক্সটেনশনস) হলো একটি ঐচ্ছিক অ্যান্ড্রয়েড প্ল্যাটফর্ম মডিউল যা জেটপ্যাক উইন্ডো ম্যানেজারের বিভিন্ন বৈশিষ্ট্য সক্ষম করে। মডিউলটি AOSP-তে frameworks/base/libs/WindowManager/Jetpack এ প্রয়োগ করা হয়েছে এবং যেসব ডিভাইস উইন্ডো ম্যানেজারের বৈশিষ্ট্যগুলো সমর্থন করে, সেগুলোতে এটি আগে থেকেই অন্তর্ভুক্ত থাকে।
এক্সটেনশন মডিউল বিতরণ
ডিভাইসের মেকফাইলে এক্সটেনশন সক্রিয় করা থাকলে, এক্সটেনশনগুলো কম্পাইল করে একটি .jar লাইব্রেরি তৈরি করা হয় এবং ডিভাইসের system_ext পার্টিশনে রাখা হয়।
কোনো ডিভাইসে এক্সটেনশন সক্রিয় করতে, প্রোডাক্ট ডিভাইসের মেকফাইলে নিম্নলিখিতটি যোগ করুন:
$(call inherit-product, $(SRC_TARGET_DIR)/product/window_extensions.mk)
এটি ডিভাইসে androidx.window.extensions এবং androidx.window.sidecar প্যাকেজগুলোকে সক্রিয় করে এবং persist.wm.extensions.enabled প্রপার্টিটি সেট করে। মেকফাইলে এই প্যাকেজগুলো অন্তর্ভুক্ত করলে 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- এ ফিচারটির জন্য বিশেষভাবে অনুরোধ করা হয়ে থাকে।
এক্সটেনশন এবং জেটপ্যাক এপিআই
উইন্ডো ম্যানেজার এক্সটেনশনস মডিউলটি পাবলিক প্ল্যাটফর্ম এপিআই-এর পাশাপাশি নিজস্ব এপিআই সারফেস প্রদান করে। এক্সটেনশনস মডিউলটি androidx.window.extensions নামক একটি নন-ডেভেলপার-ফেসিং জেটপ্যাক লাইব্রেরিতে সর্বজনীনভাবে তৈরি করা হয়, যাতে জেটপ্যাক উইন্ডো ম্যানেজার ( androidx.window ) কম্পাইল করার সময় এর সাথে লিঙ্ক করতে পারে। এক্সটেনশনস এপিআই সারফেস সাধারণত নিম্ন-স্তরের এপিআই সরবরাহ করে থাকে।
এক্সটেনশনগুলো যে এপিআই (API) প্রদান করে, তা শুধুমাত্র জেটপ্যাক উইন্ডোম্যানেজার (Jetpack WindowManager) লাইব্রেরি দ্বারা ব্যবহারের জন্য তৈরি। অ্যাপ্লিকেশন ডেভেলপারদের দ্বারা এক্সটেনশন এপিআইগুলো সরাসরি কল করার জন্য নয়। সঠিক কার্যকারিতা নিশ্চিত করার জন্য, গ্রেডল (Gradle) বিল্ড ফাইলে কোনো অ্যাপ্লিকেশনের জন্য এক্সটেনশন লাইব্রেরিকে ডিপেন্ডেন্সি হিসেবে যোগ করা উচিত নয়। কোনো অ্যাপ্লিকেশনে সরাসরি এক্সটেনশন লাইব্রেরি প্রি-কম্পাইল করা থেকে বিরত থাকুন; এর পরিবর্তে, প্রি-কম্পাইল করা এবং রানটাইমে সরবরাহ করা এক্সটেনশন ক্লাসগুলোর মিশ্রণ লোড হওয়ার পরিস্থিতি এড়াতে রানটাইম লোডিংয়ের উপর নির্ভর করুন।
Jetpack WindowManager ( androidx.window ) একটি অ্যাপ্লিকেশন ডিপেন্ডেন্সি হিসেবে যুক্ত করার জন্য তৈরি করা হয়েছে এবং এটি WindowManager এক্সটেনশন ফিচারসহ পাবলিক ডেভেলপার-ফেসিং এপিআইগুলো প্রদান করে। WindowManager লাইব্রেরিটি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন প্রসেসে এক্সটেনশনগুলো লোড করে এবং নিম্ন-স্তরের এক্সটেনশন এপিআইগুলোকে উচ্চ-স্তরের অ্যাবস্ট্রাকশন ও আরও সুনির্দিষ্ট ইন্টারফেসে মোড়কজাত করে। WindowManager Jetpack এপিআইগুলো আধুনিক অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেভেলপমেন্টের মান অনুসরণ করে এবং অন্যান্য AndroidX লাইব্রেরি ব্যবহারকারী কোডবেসগুলোর সাথে ভালোভাবে ইন্টিগ্রেট করার মাধ্যমে সুবিধাজনক ইন্টারঅপারেবিলিটি প্রদানের জন্য তৈরি।
এক্সটেনশন সংস্করণ এবং আপডেট
এক্সটেনশন মডিউলটি অ্যান্ড্রয়েড প্ল্যাটফর্মের বার্ষিক বা ত্রৈমাসিক আপডেটের সাথে আপডেট করা যেতে পারে। ত্রৈমাসিক আপডেটগুলো অ্যান্ড্রয়েড প্ল্যাটফর্ম এপিআই আপডেটের মধ্যবর্তী সময়ে এক্সটেনশন এপিআই-এর স্তর বৃদ্ধি করতে সক্ষম করে, যা দ্রুততর পুনরাবৃত্তির সুযোগ দেয় এবং হার্ডওয়্যার লঞ্চের কাছাকাছি সময়ে OEM-দের নতুন ফিচারগুলোতে অফিশিয়াল এপিআই অ্যাক্সেস যোগ করার সুযোগ করে দেয়।
নিচের সারণিতে বিভিন্ন অ্যান্ড্রয়েড রিলিজের জন্য androidx.window.extensions API ভার্সনগুলো তালিকাভুক্ত করা হলো।
| অ্যান্ড্রয়েড প্ল্যাটফর্ম সংস্করণ | উইন্ডোম্যানেজার এক্সটেনশন এপিআই স্তর | androidx.window.extensions API সংস্করণ |
|---|---|---|
| অ্যান্ড্রয়েড ১৫ | ৬ | ১.৫.০ (শীঘ্রই আসছে) |
| অ্যান্ড্রয়েড ১৪ কিউপিআর৩ | ৫ | ১.৪.০ (শীঘ্রই আসছে) |
| অ্যান্ড্রয়েড ১৪ কিউপিআর১ | ৪ | ১.৩.০ |
| অ্যান্ড্রয়েড ১৪ | ৩ | ১.২.০ |
| অ্যান্ড্রয়েড ১৩ কিউপিআর৩ | ২ | ১.১.০ |
| অ্যান্ড্রয়েড ১৩ | ১ | ১.০.০ |
| অ্যান্ড্রয়েড ১২এল | ১ | ১.০.০ |
বিদ্যমান স্থিতিশীল এপিআই সারফেসে (ডান কলাম) যখনই কোনো নতুন সংযোজন করা হয়, এক্সটেনশন এপিআই লেভেল (মাঝের কলাম) বৃদ্ধি পায়।
পশ্চাৎ এবং সম্মুখ সামঞ্জস্যতা
Jetpack WindowManager ঘন ঘন API লেভেল আপডেট, দ্রুত API বিবর্তন এবং ব্যাকওয়ার্ড কম্প্যাটিবিলিটির মতো জটিলতাগুলো সামাল দেয়। অ্যাপ্লিকেশন প্রসেসে যখন লাইব্রেরির কোড এক্সিকিউট করা হয়, তখন লাইব্রেরিটি ঘোষিত এক্সটেনশনস API লেভেল যাচাই করে এবং সেই ঘোষিত লেভেল অনুযায়ী ফিচারগুলোতে অ্যাক্সেস প্রদান করে।
রানটাইমে অ্যাপ্লিকেশন ক্র্যাশ হওয়া থেকে রক্ষা করার জন্য, WindowManager ঘোষিত এক্সটেনশনস এপিআই লেভেল অনুযায়ী উপলব্ধ এক্সটেনশনস এপিআইগুলোর একটি রানটাইম জাভা রিফ্লেকশন চেকও করে থাকে। যদি কোনো অমিল পাওয়া যায়, তাহলে WindowManager এক্সটেনশনগুলোর ব্যবহার (আংশিকভাবে বা সম্পূর্ণভাবে) নিষ্ক্রিয় করে দিতে পারে এবং সংশ্লিষ্ট ফিচারগুলোকে অ্যাপ্লিকেশনটির জন্য অনুপলব্ধ হিসেবে রিপোর্ট করতে পারে।
WindowManager এক্সটেনশনগুলো একটি system_ext মডিউল হিসেবে বাস্তবায়িত হয়, যা এক্সটেনশন ফিচারগুলোর বাস্তবায়নের জন্য প্রাইভেট প্ল্যাটফর্ম API ব্যবহার করে WindowManager কোর, DeviceStateManager এবং অন্যান্য সিস্টেম সার্ভিসগুলোকে কল করে।
সংশ্লিষ্ট ত্রৈমাসিক বা বার্ষিক অ্যান্ড্রয়েড প্ল্যাটফর্ম রিলিজের আগে এক্সটেনশনগুলির প্রি-রিলিজ সংস্করণগুলির সাথে সামঞ্জস্যতা বজায় নাও থাকতে পারে, যার মাধ্যমে সংস্করণগুলি চূড়ান্ত করা হয়। এক্সটেনশন এপিআই-এর সম্পূর্ণ ইতিহাস রিলিজ ব্রাঞ্চ window:extensions:extensions API টেক্সট ফাইলগুলিতে পাওয়া যাবে।
ফরোয়ার্ড কম্প্যাটিবিলিটি বজায় রাখার জন্য, এক্সটেনশন-এর নতুন সংস্করণগুলোকে অবশ্যই অ্যাপ্লিকেশনে কম্পাইল করা উইন্ডোম্যানেজার-এর পুরোনো সংস্করণগুলোর সাথে কাজ চালিয়ে যেতে হবে। এটি নিশ্চিত করার জন্য, এক্সটেনশন এপিআই-এর যেকোনো নতুন সংস্করণ শুধুমাত্র নতুন এপিআই যোগ করে এবং পুরোনো এপিআইগুলো সরিয়ে দেয় না। ফলে, উইন্ডোম্যানেজার-এর পুরোনো সংস্করণযুক্ত অ্যাপ্লিকেশনগুলো সেই পুরোনো এক্সটেনশন এপিআইগুলো ব্যবহার করা চালিয়ে যেতে পারে, যেগুলোর ওপর ভিত্তি করে অ্যাপগুলো কম্পাইল করা হয়েছিল।
CTS যাচাইকরণ নিশ্চিত করে যে ডিভাইসে এক্সটেনশন এপিআই-এর যেকোনো ঘোষিত সংস্করণের জন্য, সেই সংস্করণ এবং তার পূর্ববর্তী সংস্করণগুলোর সমস্ত এপিআই উপস্থিত ও কার্যকর রয়েছে।
কর্মক্ষমতা
অ্যান্ড্রয়েড ১৪ (এপিআই লেভেল ৩৪) থেকে এক্সটেনশনস মডিউলটি ডিফল্টরূপে নন-বুটক্লাসপ্যাথ সিস্টেম ক্লাস লোডারগুলিতে ক্যাশ করা থাকে, তাই অ্যাপ চালু হওয়ার সময় মডিউলটি মেমরিতে লোড হওয়ার কারণে পারফরম্যান্সে কোনো প্রভাব পড়ে না। ক্লায়েন্ট এবং সার্ভারের মধ্যে অতিরিক্ত আইপিসি কল সম্পাদিত হলে, মডিউলের স্বতন্ত্র ফিচারগুলো ব্যবহার করা অ্যাপের পারফরম্যান্স বৈশিষ্ট্যের উপর সামান্য প্রভাব ফেলতে পারে।
মডিউল
কার্যকলাপ এম্বেডিং
অ্যাক্টিভিটি এমবেডিং কম্পোনেন্ট অ্যাপ্লিকেশনগুলোকে বড় স্ক্রিনের ডিভাইস এবং এক্সটার্নাল ডিসপ্লের জন্য তাদের UI অপ্টিমাইজ করতে সক্ষম করে। অ্যাক্টিভিটি এমবেডিং একটি মাল্টিপেন লেআউটে দুটি অ্যাক্টিভিটিকে পাশাপাশি উপস্থাপন করতে সাহায্য করে, যা লিগ্যাসি অ্যাপ্লিকেশনগুলোর জন্য অ্যাডাপ্টিভ অ্যাপ ডেভেলপমেন্টকে সহজতর করে।
যেসব ডিভাইসে sw600dp সমান বা তার চেয়ে বড় বিল্ট-ইন ডিসপ্লে আছে, সেসব ডিভাইসে অ্যাক্টিভিটি এমবেডিং কম্পোনেন্টটি অবশ্যই উপলব্ধ থাকতে হবে। যেসব ডিভাইস এক্সটার্নাল ডিসপ্লে সংযোগ সমর্থন করে, সেগুলিতেও অ্যাক্টিভিটি এমবেডিং সক্রিয় করতে হবে, কারণ রানটাইমে এক্সটার্নাল ডিসপ্লে সংযুক্ত করা হলে অ্যাপ্লিকেশনটি আরও বড় আকারে প্রদর্শিত হতে পারে।
ডিভাইস কনফিগারেশন
এক্সটেনশন মডিউল ডিস্ট্রিবিউশন বিভাগে বর্ণিত পদ্ধতি অনুযায়ী এক্সটেনশন মডিউলটি সক্রিয় করা ছাড়া অন্য কোনো নির্দিষ্ট ডিভাইস কনফিগারেশনের প্রয়োজন নেই। যেসব ডিভাইস মাল্টি-উইন্ডো মোড সমর্থন করে, সেগুলোতে এক্সটেনশন সক্রিয় করাই যুক্তিযুক্ত। অ্যান্ড্রয়েডের ভবিষ্যৎ সংস্করণগুলোতে সাধারণ হ্যান্ডহেল্ড এবং বড় স্ক্রিনের ডিভাইস কনফিগারেশনগুলোতে এক্সটেনশন বাধ্যতামূলক করা হতে পারে।
জানালার বিন্যাসের তথ্য
যখন কোনো ফোল্ডেবল ডিভাইসের হিঞ্জ কোনো অ্যাপ্লিকেশন উইন্ডো অতিক্রম করে, তখন উইন্ডো লেআউট ইনফরমেশন কম্পোনেন্টটি হিঞ্জটির অবস্থান ও অবস্থা শনাক্ত করে। উইন্ডো লেআউট ইনফরমেশন অ্যাপ্লিকেশনগুলোকে ফোল্ডেবল ডিভাইসের টেবিলটপ মোডে অপ্টিমাইজড লেআউটের সাথে সাড়া দিতে ও তা প্রদর্শন করতে সক্ষম করে। ব্যবহারের বিস্তারিত জানতে ‘আপনার অ্যাপকে ফোল্ড-অ্যাওয়্যার করুন’ দেখুন।
যেসব ফোল্ডেবল অ্যান্ড্রয়েড ডিভাইসে আলাদা বা অবিচ্ছিন্ন ডিসপ্লে প্যানেলের অংশগুলোকে সংযুক্ত করার জন্য একটি হিঞ্জ থাকে, সেগুলোকে অবশ্যই WindowLayoutComponent মাধ্যমে অ্যাপ্লিকেশনগুলোর কাছে হিঞ্জ সম্পর্কিত তথ্য উপলব্ধ করতে হবে।
এপিআই-তে পাঠানো একটি 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: অ্যান্ড্রয়েড ১৪-এ, এটি এমন একটি মান যা এমুলেটেড স্টেটগুলোর জন্য ব্যবহার করা যেতে পারে, যেখানে হিঞ্জ স্টেটটি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 দেখানোর সুযোগ দেয়, যার ফলে সেলফি ও ভিডিওর জন্য ডিভাইসের মূল ক্যামেরা ব্যবহার করা যায়। যেসব ডিভাইসের কভার ডিসপ্লে অ্যান্ড্রয়েড-উপযোগী (আকার, ঘনত্ব এবং উপলব্ধ নেভিগেশন সুবিধার মতো বৈশিষ্ট্যের ভিত্তিতে অ্যান্ড্রয়েড সিডিডি দ্বারা সংজ্ঞায়িত) এবং যা ডিভাইসের পেছনের ক্যামেরাগুলোর সাথে সামঞ্জস্যপূর্ণ, সেগুলিতে অবশ্যই রিয়ার ডিসপ্লে মোডে অ্যাক্সেসের সুবিধা থাকতে হবে।
অ্যান্ড্রয়েড ১৪-এ, ডুয়াল ডিসপ্লে মোড ফোল্ডেবল ডিভাইসের ভেতরের ডিসপ্লেতে চলা অ্যাপ্লিকেশনগুলোকে অন্য ব্যবহারকারীদের দিকে থাকা কভার ডিসপ্লেতে অতিরিক্ত কন্টেন্ট দেখানোর সুযোগ দেয়; উদাহরণস্বরূপ, কভার ডিসপ্লেটি যার ছবি তোলা হচ্ছে বা রেকর্ড করা হচ্ছে, তাকে ক্যামেরার প্রিভিউ দেখাতে পারে।
ডিভাইস কনফিগারেশন
ফোল্ডিং বৈশিষ্ট্যটির বাস্তবায়ন সমর্থন করার জন্য, 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এ এটি যোগ করুন।
-
অ্যান্ড্রয়েড ১৪-এ, যেসব ডিভাইস ডুয়াল (একযোগে) ডিসপ্লে মোড সমর্থন করে, সেগুলোর ক্ষেত্রে:
-
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 টেস্টগুলো চালানোর জন্য, "Run CTS tests" দেখুন। Jetpack WindowManager সম্পর্কিত CTS টেস্টগুলো cts/tests/framework/base/windowmanager/jetpack/ অধীনে রয়েছে। টেস্ট মডিউলের নাম হলো CtsWindowManagerJetpackTestCases ।
উইন্ডোম্যানেজার পরীক্ষা
Jetpack WindowManager টেস্টগুলো ডাউনলোড করতে, Android Jetpack Instructions অনুসরণ করুন। টেস্টগুলো window লাইব্রেরির window:window মডিউলের অধীনে অবস্থিত: window/window/src/androidTest/ ।
কমান্ড লাইন থেকে window:window মডিউলের ডিভাইস টেস্টগুলো চালানোর জন্য, নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
- এমন একটি ডিভাইস প্লাগ ইন করুন যেটিতে ডেভেলপার অপশন এবং ইউএসবি ডিবাগিং সক্রিয় করা আছে।
- কম্পিউটারকে ডিভাইসটি ডিবাগ করার অনুমতি দিন।
- androidx রিপোজিটরির রুট ডিরেক্টরিতে একটি শেল খুলুন।
-
framework/supportডিরেক্টরিতে পরিবর্তন করুন। - নিম্নলিখিত কমান্ডটি চালান:
./gradlew window:window:connectedAndroidTest. - ফলাফলগুলো বিশ্লেষণ করুন।
অ্যান্ড্রয়েড স্টুডিও থেকে টেস্টগুলো চালানোর জন্য, নিম্নলিখিত পদক্ষেপগুলো অনুসরণ করুন:
- অ্যান্ড্রয়েড স্টুডিও খুলুন।
- এমন একটি ডিভাইস প্লাগ ইন করুন যেটিতে ডেভেলপার অপশন এবং ইউএসবি ডিবাগিং সক্রিয় করা আছে।
- কম্পিউটারকে ডিভাইসটি ডিবাগ করার অনুমতি দিন।
- উইন্ডো মডিউলের উইন্ডো লাইব্রেরির মধ্যে একটি টেস্টে যান।
- একটি টেস্ট ক্লাস খুলুন এবং এডিটরের ডানদিকে থাকা সবুজ তীরচিহ্নগুলো ব্যবহার করে সেটি চালান।
বিকল্পভাবে, আপনি অ্যান্ড্রয়েড স্টুডিওতে একটি টেস্ট মেথড, একটি টেস্ট ক্লাস, বা একটি মডিউলের সমস্ত টেস্ট চালানোর জন্য একটি কনফিগারেশন তৈরি করতে পারেন।
শেলের আউটপুট দেখে ফলাফল ম্যানুয়ালি বিশ্লেষণ করা যায়। ডিভাইসটি নির্দিষ্ট কিছু শর্ত পূরণ না করলে কিছু পরীক্ষা বাদ দেওয়া হয়। ফলাফল একটি নির্দিষ্ট স্থানে সংরক্ষিত হয় এবং বিশ্লেষকরা ফলাফল বিশ্লেষণ স্বয়ংক্রিয় করার জন্য একটি স্ক্রিপ্ট লিখতে পারেন।