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/
এ ডিক্লেয়ারেশন রাখে, এগুলিকে আবেদন প্রক্রিয়ার জন্য উপলব্ধ করে। জেটপ্যাক উইন্ডো ম্যানেজার লাইব্রেরি ব্যবহার করার সময় সাধারণত মডিউলগুলি লোড করা হয় এবং রানটাইমে অ্যাপ্লিকেশন প্রক্রিয়ার অংশ হিসাবে কার্যকর করা হয়, যা এটির ক্রিয়াকলাপকে ক্লায়েন্ট-সাইড ফ্রেমওয়ার্ক কোডের মতো করে, যেমনটি নিম্নলিখিত চিত্রে দেখানো হয়েছে:
androidx.window.extensions
মডিউল হল সক্রিয় বিকাশের অধীনে বর্তমান এক্সটেনশন মডিউল। androidx.window.sidecar
মডিউল হল একটি লিগ্যাসি মডিউল যা Jetpack WindowManager-এর প্রথমতম সংস্করণগুলির সাথে সামঞ্জস্যের জন্য অন্তর্ভুক্ত, কিন্তু সাইডকারটি আর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না।
নিম্নলিখিত চিত্রটি androidx.window.extensions
বা androidx.window.sidecar
ব্যবহার নির্ধারণের জন্য যুক্তি দেখায়।
এক্সটেনশন মডিউল
এক্সটেনশনগুলি ভাঁজযোগ্য বড় স্ক্রীন ডিভাইস এবং বাহ্যিক ডিসপ্লেতে উইন্ডো করা সমর্থন করে এমন ডিভাইসগুলির জন্য উইন্ডো করার বৈশিষ্ট্যগুলি প্রদান করে। বৈশিষ্ট্য ক্ষেত্র অন্তর্ভুক্ত:
যদি ডিভাইস হার্ডওয়্যার সংশ্লিষ্ট বৈশিষ্ট্যগুলিকে সমর্থন না করে তবে এক্সটেনশনের OEM বাস্তবায়নগুলি WindowExtensions
ইন্টারফেসে পদ্ধতিগুলির ডিফল্ট বা স্টাব বাস্তবায়ন সহ নাল উপাদান বা উপাদানগুলি প্রদান করতে পারে, যদি না বৈশিষ্ট্যটি বিশেষভাবে সামঞ্জস্যপূর্ণ সংজ্ঞা নথি (CDD) 7.1.1.1- এ অনুরোধ করা হয়। .
এক্সটেনশন এবং Jetpack APIs
WindowManager এক্সটেনশন মডিউল পাবলিক প্ল্যাটফর্ম API ছাড়াও নিজস্ব API পৃষ্ঠ প্রদান করে। এক্সটেনশন মডিউলটি একটি নন-ডেভেলপার-মুখী androidx.window.extensions
Jetpack লাইব্রেরিতে সর্বজনীনভাবে তৈরি করা হয়েছে, যাতে Jetpack WindowManager ( androidx.window
) কম্পাইলের সময় এটির সাথে লিঙ্ক করতে পারে। এক্সটেনশন API পৃষ্ঠ সাধারণত নিম্ন-স্তরের API প্রদান করে।
এক্সটেনশনগুলি যে APIগুলি প্রদান করে তা শুধুমাত্র Jetpack WindowManager লাইব্রেরি দ্বারা ব্যবহার করা হয়৷ এক্সটেনশন এপিআইগুলিকে সরাসরি অ্যাপ্লিকেশন বিকাশকারীরা কল করার জন্য নয়৷ সঠিক কার্যকারিতা নিশ্চিত করার জন্য গ্রেডল বিল্ড ফাইলে একটি অ্যাপ্লিকেশনের জন্য এক্সটেনশন লাইব্রেরিটি নির্ভরতা হিসাবে যোগ করা উচিত নয়। সরাসরি একটি অ্যাপ্লিকেশনে এক্সটেনশন লাইব্রেরি প্রাক-কম্পাইল করা এড়িয়ে চলুন; পরিবর্তে, পূর্ব-সংকলিত এবং রানটাইম-প্রদত্ত এক্সটেনশন ক্লাসের মিশ্রণ লোড করার ক্ষেত্রে প্রতিরোধ করতে রানটাইম লোডিংয়ের উপর নির্ভর করুন।
Jetpack WindowManager ( androidx.window
) একটি অ্যাপ্লিকেশন নির্ভরতা হিসাবে যোগ করার জন্য বোঝানো হয়েছে এবং উইন্ডো ম্যানেজার এক্সটেনশন বৈশিষ্ট্যগুলি সহ সর্বজনীন বিকাশকারী-মুখী API প্রদান করে। WindowManager লাইব্রেরি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন প্রক্রিয়ার মধ্যে এক্সটেনশনগুলি লোড করে এবং নিম্ন-স্তরের এক্সটেনশন APIগুলিকে উচ্চ-স্তরের বিমূর্ততা এবং আরও ফোকাসড ইন্টারফেসে মোড়ানো হয়। WindowManager Jetpack API গুলি আধুনিক অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেভেলপমেন্টের মানগুলি অনুসরণ করে এবং অন্যান্য AndroidX লাইব্রেরিগুলি ব্যবহার করে এমন কোডবেসের সাথে ভালভাবে একীভূত করে সুবিধাজনক আন্তঃকার্যযোগ্যতা প্রদানের উদ্দেশ্যে।
এক্সটেনশন সংস্করণ এবং আপডেট
এক্সটেনশন মডিউলটি অ্যান্ড্রয়েড প্ল্যাটফর্মের বার্ষিক বা ত্রৈমাসিক আপডেটের সাথে আপডেট করা যেতে পারে। ত্রৈমাসিক আপডেটগুলি অ্যান্ড্রয়েড প্ল্যাটফর্ম API আপডেটগুলির মধ্যে এক্সটেনশন API স্তর বৃদ্ধি করতে সক্ষম করে, দ্রুত পুনরাবৃত্তির অনুমতি দেয় এবং হার্ডওয়্যার লঞ্চের কাছাকাছি নতুন বৈশিষ্ট্যগুলিতে অফিসিয়াল API অ্যাক্সেস যোগ করার সুযোগ দিয়ে OEM-কে প্রদান করে।
নিম্নলিখিত সারণীতে বিভিন্ন Android রিলিজের জন্য androidx.window.extensions
API সংস্করণের তালিকা রয়েছে।
অ্যান্ড্রয়েড প্ল্যাটফর্ম সংস্করণ | WindowManager এক্সটেনশন API স্তর | androidx.window.extensions API সংস্করণ |
---|---|---|
অ্যান্ড্রয়েড 15 | 6 | 1.5.0 (শীঘ্রই আসছে) |
Android 14 QPR3 | 5 | 1.4.0 (শীঘ্রই আসছে) |
Android 14 QPR1 | 4 | 1.3.0 |
অ্যান্ড্রয়েড 14 | 3 | 1.2.0 |
অ্যান্ড্রয়েড 13 QPR3 | 2 | 1.1.0 |
অ্যান্ড্রয়েড 13 | 1 | 1.0.0 |
Android 12L | 1 | 1.0.0 |
বিদ্যমান স্থিতিশীল API পৃষ্ঠে (ডান কলাম) যোগ করার সময় এক্সটেনশন API স্তর (সেন্টার কলাম) বৃদ্ধি করা হয়।
পিছনে এবং এগিয়ে সামঞ্জস্য
Jetpack WindowManager ঘন ঘন API স্তরের আপডেট, দ্রুত API বিবর্তন, এবং পশ্চাদমুখী সামঞ্জস্য নিয়ে কাজ করার জটিলতা পরিচালনা করে। যখন লাইব্রেরি কোডটি অ্যাপ্লিকেশন প্রক্রিয়াতে কার্যকর করা হয়, তখন লাইব্রেরি ঘোষিত এক্সটেনশন API স্তর পরীক্ষা করে এবং ঘোষিত স্তর অনুযায়ী বৈশিষ্ট্যগুলিতে অ্যাক্সেস প্রদান করে।
রানটাইমে ক্র্যাশ হওয়া থেকে একটি অ্যাপ্লিকেশনকে রক্ষা করার জন্য, WindowManager ঘোষিত এক্সটেনশন API স্তর অনুসারে উপলব্ধ এক্সটেনশন APIগুলির একটি রানটাইম জাভা প্রতিফলন পরীক্ষা করে। যদি কোনো মিল না থাকে, তাহলে WindowManager এক্সটেনশনের ব্যবহার (আংশিক বা সম্পূর্ণভাবে) অক্ষম করতে পারে এবং সংশ্লিষ্ট বৈশিষ্ট্যগুলিকে অ্যাপ্লিকেশানে উপলব্ধ না বলে রিপোর্ট করতে পারে।
WindowManager এক্সটেনশনগুলি একটি system_ext
মডিউল হিসাবে প্রয়োগ করা হয় যা ব্যক্তিগত প্ল্যাটফর্ম API ব্যবহার করে WindowManager কোর, DeviceStateManager
, এবং এক্সটেনশন বৈশিষ্ট্যগুলি বাস্তবায়নে অন্যান্য সিস্টেম পরিষেবাগুলিতে কল করতে।
সংশ্লিষ্ট ত্রৈমাসিক বা বার্ষিক Android প্ল্যাটফর্ম রিলিজের পূর্বে এক্সটেনশনের প্রাক-রিলিজ সংস্করণগুলির সাথে সামঞ্জস্য বজায় রাখা যাবে না যার সাথে সংস্করণগুলি চূড়ান্ত করা হয়েছে৷ এক্সটেনশন API-এর সম্পূর্ণ ইতিহাস রিলিজ শাখা window:extensions:extensions
এপিআই টেক্সট ফাইল ।
এক্সটেনশনের নতুন সংস্করণগুলিকে ফরওয়ার্ড সামঞ্জস্য বজায় রাখার জন্য অ্যাপ্লিকেশনগুলিতে সংকলিত WindowManager-এর পুরানো সংস্করণগুলির সাথে কাজ চালিয়ে যেতে হবে। এটি নিশ্চিত করতে, এক্সটেনশন API-এর যেকোনো নতুন সংস্করণ শুধুমাত্র নতুন API যোগ করে এবং পুরানোগুলিকে সরিয়ে দেয় না। ফলস্বরূপ, পুরানো WindowManager সংস্করণ সহ অ্যাপ্লিকেশনগুলি পুরানো এক্সটেনশন APIগুলি ব্যবহার করা চালিয়ে যেতে পারে যা অ্যাপগুলির বিরুদ্ধে সংকলিত হয়েছিল৷
CTS যাচাইকরণ নিশ্চিত করে যে ডিভাইসে এক্সটেনশন API-এর যেকোন ঘোষিত সংস্করণের জন্য, এর জন্য সমস্ত API এবং পূর্ববর্তী সংস্করণগুলি বর্তমান এবং কার্যকরী।
কর্মক্ষমতা
এক্সটেনশন মডিউলটি Android 14 (API লেভেল 34) থেকে শুরু করে ডিফল্টরূপে নন-বুটক্লাসপাথ সিস্টেম ক্লাস লোডারগুলিতে ক্যাশে করা হয়, তাই অ্যাপ স্টার্টআপে মডিউলটিকে মেমরিতে লোড করার কারণে কোনও কার্যক্ষমতার প্রভাব নেই। যখন ক্লায়েন্ট এবং সার্ভারের মধ্যে অতিরিক্ত আইপিসি কলগুলি সঞ্চালিত হয় তখন পৃথক মডিউল বৈশিষ্ট্যগুলি ব্যবহার করে অ্যাপগুলির কর্মক্ষমতা বৈশিষ্ট্যের উপর সামান্য প্রভাব থাকতে পারে।
মডিউল
অ্যাক্টিভিটি এমবেডিং
অ্যাক্টিভিটি এম্বেডিং কম্পোনেন্ট বৈশিষ্ট্যের একটি সেট প্রদান করে যা অ্যাপ্লিকেশনগুলিকে প্যারেন্ট অ্যাপ্লিকেশনের সীমানার মধ্যে কার্যকলাপ উইন্ডো উপস্থাপনা সংগঠিত করতে সক্ষম করে। এর মধ্যে রয়েছে একটি মাল্টি-পেন লেআউটে একসাথে দুটি ক্রিয়াকলাপ পাশাপাশি দেখানো, লিগ্যাসি অ্যাপ্লিকেশনের জন্য বড় স্ক্রীন অপ্টিমাইজেশানের সুবিধা।
sw600 dp
এর সমান বা বড় আকারের বিল্ট-ইন ডিসপ্লে আছে এমন সমস্ত ডিভাইসে অ্যাক্টিভিটি এমবেডিং কম্পোনেন্ট অবশ্যই পাওয়া যাবে। বাহ্যিক ডিসপ্লে সংযোগ সমর্থন করে এমন ডিভাইসগুলিতেও অ্যাক্টিভিটি এমবেডিং সক্ষম করা আবশ্যক, কারণ রানটাইমে বহিরাগত ডিসপ্লে সংযুক্ত থাকলে অ্যাপ্লিকেশনটি বড় আকারে দেখানো হতে পারে।
ডিভাইস কনফিগারেশন
এক্সটেনশন মডিউল ডিস্ট্রিবিউশন বিভাগে বর্ণিত এক্সটেনশন মডিউল সক্রিয় করা ছাড়া কোনো নির্দিষ্ট ডিভাইস কনফিগারেশনের প্রয়োজন নেই। মাল্টি-উইন্ডো মোড সমর্থন করে এমন সমস্ত ডিভাইসে এক্সটেনশানগুলি সক্ষম করা বোধগম্য। ভবিষ্যতের অ্যান্ড্রয়েড সংস্করণগুলি সাধারণ হ্যান্ডহেল্ড এবং বড় স্ক্রীন ডিভাইস কনফিগারেশনগুলিতে প্রয়োজনীয় এক্সটেনশনগুলি তৈরি করতে পারে৷
উইন্ডো লেআউট তথ্য
উইন্ডো লেআউট তথ্য উপাদানটি একটি ভাঁজযোগ্য ডিভাইসে কব্জাটির অবস্থান এবং অবস্থা সনাক্ত করে যখন কবজা একটি অ্যাপ্লিকেশন উইন্ডো অতিক্রম করে। উইন্ডো লেআউট তথ্য অ্যাপ্লিকেশনগুলিকে প্রতিক্রিয়া জানাতে এবং ফোল্ডেবলগুলিতে ট্যাবলেটপ মোডে অপ্টিমাইজ করা লেআউটগুলি দেখাতে সক্ষম করে৷ ব্যবহারের বিবরণের জন্য আপনার অ্যাপকে ভাঁজ সচেতন করুন দেখুন।
ভাঁজ করা যায় এমন অ্যান্ড্রয়েড ডিভাইস যাতে একটি কব্জা রয়েছে যা পৃথক বা অবিচ্ছিন্ন ডিসপ্লে প্যানেল অঞ্চলগুলিকে সংযুক্ত করে সেগুলিকে অবশ্যই কব্জা সম্পর্কে তথ্য WindowLayoutComponent
এর মাধ্যমে অ্যাপ্লিকেশনগুলিতে উপলব্ধ করতে হবে৷
কব্জা অবস্থান এবং সীমাগুলি API-এ পাস করা একটি Context
দ্বারা চিহ্নিত অ্যাপ্লিকেশন উইন্ডোর সাথে সম্পর্কিত হতে হবে। যদি অ্যাপ্লিকেশান উইন্ডো বাউন্ডগুলি কব্জা সীমার সাথে ছেদ না করে তবে কবজা DisplayFeature
অবশ্যই রিপোর্ট করা উচিত নয়৷ যখন তাদের অবস্থান নির্ভরযোগ্যভাবে রিপোর্ট করা নাও হতে পারে তখন প্রদর্শন বৈশিষ্ট্যগুলি সম্পর্কে রিপোর্ট না করাও গ্রহণযোগ্য, যেমন যখন একটি অ্যাপ্লিকেশন উইন্ডো অবাধে বহু-উইন্ডো মোড বা সামঞ্জস্যপূর্ণ লেটারবক্সিং মোডে ব্যবহারকারী দ্বারা সরানো যায়।
ভাঁজ বৈশিষ্ট্যগুলির জন্য, স্টেট আপডেটগুলি অবশ্যই রিপোর্ট করা উচিত যখন স্থিতিশীল অবস্থার মধ্যে কব্জা অবস্থান পরিবর্তন হয়। একটি ফ্ল্যাট ডিসপ্লে অবস্থায় ডিফল্টরূপে, APIকে অবশ্যই FoldingFeature.State.FLAT
রিপোর্ট করতে হবে। যদি ডিভাইসের হার্ডওয়্যারটিকে একটি স্থিতিশীল অবস্থায় অর্ধ-ভাঁজ মোডে রেখে দেওয়া যায়, তাহলে APIকে অবশ্যই FoldingFeature.State.HALF_OPENED
রিপোর্ট করতে হবে। এপিআইতে কোনো বন্ধ অবস্থা নেই, যেহেতু এই ধরনের ক্ষেত্রে অ্যাপ্লিকেশন উইন্ডোটি দৃশ্যমান হবে না বা কব্জা সীমা অতিক্রম করবে না।
ডিভাইস কনফিগারেশন
ভাঁজ বৈশিষ্ট্য বাস্তবায়ন সমর্থন করতে, 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>]
type
fold
বা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 দেখাতে একটি অ্যাপ্লিকেশন সক্ষম করে। যে ডিভাইসগুলিতে অ্যান্ড্রয়েড-সামঞ্জস্যপূর্ণ (অ্যান্ড্রয়েড CDD দ্বারা আকার, ঘনত্ব এবং উপলব্ধ নেভিগেশন সুবিধাগুলির মতো বৈশিষ্ট্যগুলির পরিপ্রেক্ষিতে সংজ্ঞায়িত করা হয়েছে) কভার ডিসপ্লে রয়েছে যা পিছনের ডিভাইসের ক্যামেরাগুলির সাথে সারিবদ্ধ করে পিছনের ডিসপ্লে মোডে অ্যাক্সেস সরবরাহ করতে হবে।
অ্যান্ড্রয়েড 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 গুলিকে অবশ্যই তাদের বাস্তবায়ন যাচাই করতে হবে। জেটপ্যাক উইন্ডো ম্যানেজার ব্যবহার করে CTS পরীক্ষা এবং পরীক্ষাগুলি পরীক্ষা বাস্তবায়নের জন্য OEM-এর কাছে উপলব্ধ।
CTS পরীক্ষা
CTS পরীক্ষা চালানোর জন্য, CTS পরীক্ষা চালান দেখুন। জেটপ্যাক উইন্ডো ম্যানেজার সম্পর্কিত CTS পরীক্ষাগুলি cts/tests/framework/base/windowmanager/jetpack/
এর অধীনে। পরীক্ষার মডিউলটির নাম হল CtsWindowManagerJetpackTestCases
।
উইন্ডো ম্যানেজার পরীক্ষা
Jetpack WindowManager পরীক্ষা ডাউনলোড করতে, Android Jetpack নির্দেশাবলী অনুসরণ করুন। পরীক্ষাগুলি উইন্ডো লাইব্রেরিতে window:window
মডিউল: window/window/src/androidTest/
।
কমান্ড লাইন থেকে window:window
মডিউলের জন্য ডিভাইস পরীক্ষা চালানোর জন্য, নিম্নলিখিতগুলি করুন:
- ডেভেলপার বিকল্প এবং USB ডিবাগিং সক্ষম আছে এমন একটি ডিভাইস প্লাগ ইন করুন৷
- কম্পিউটারকে ডিভাইসটি ডিবাগ করার অনুমতি দিন।
- androidx সংগ্রহস্থলের রুট ডিরেক্টরিতে একটি শেল খুলুন।
-
framework/support
ডিরেক্টরি পরিবর্তন করুন। - নিম্নলিখিত কমান্ডটি চালান:
./gradlew window:window:connectedAndroidTest
। - ফলাফল বিশ্লেষণ করুন।
অ্যান্ড্রয়েড স্টুডিও থেকে পরীক্ষা চালানোর জন্য, নিম্নলিখিতগুলি করুন:
- অ্যান্ড্রয়েড স্টুডিও খুলুন।
- ডেভেলপার বিকল্প এবং USB ডিবাগিং সক্ষম আছে এমন একটি ডিভাইস প্লাগ ইন করুন৷
- কম্পিউটারকে ডিভাইসটি ডিবাগ করার অনুমতি দিন।
- উইন্ডো মডিউলের উইন্ডো লাইব্রেরির মধ্যে একটি পরীক্ষা নেভিগেট করুন।
- একটি পরীক্ষা ক্লাস খুলুন এবং সম্পাদকের ডানদিকে সবুজ তীর ব্যবহার করে চালান।
বিকল্পভাবে, আপনি একটি পরীক্ষা পদ্ধতি, একটি পরীক্ষা ক্লাস, বা একটি মডিউলে সমস্ত পরীক্ষা চালানোর জন্য Android স্টুডিওতে একটি কনফিগারেশন তৈরি করতে পারেন।
শেলের আউটপুট দেখে ম্যানুয়ালি ফলাফল বিশ্লেষণ করা যেতে পারে। ডিভাইসটি নির্দিষ্ট অনুমান পূরণ না করলে কিছু পরীক্ষা বাদ দেওয়া হয়। ফলাফলগুলি একটি আদর্শ অবস্থানে সংরক্ষিত হয় এবং বিশ্লেষকরা ফলাফলের স্বয়ংক্রিয় বিশ্লেষণের জন্য একটি স্ক্রিপ্ট লিখতে পারেন।
,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/
এ ডিক্লেয়ারেশন রাখে, এগুলিকে আবেদন প্রক্রিয়ার জন্য উপলব্ধ করে। জেটপ্যাক উইন্ডো ম্যানেজার লাইব্রেরি ব্যবহার করার সময় সাধারণত মডিউলগুলি লোড করা হয় এবং রানটাইমে অ্যাপ্লিকেশন প্রক্রিয়ার অংশ হিসাবে কার্যকর করা হয়, যা এটির ক্রিয়াকলাপকে ক্লায়েন্ট-সাইড ফ্রেমওয়ার্ক কোডের মতো করে, যেমনটি নিম্নলিখিত চিত্রে দেখানো হয়েছে:
androidx.window.extensions
মডিউল হল সক্রিয় বিকাশের অধীনে বর্তমান এক্সটেনশন মডিউল। androidx.window.sidecar
মডিউল হল একটি লিগ্যাসি মডিউল যা Jetpack WindowManager-এর প্রথমতম সংস্করণগুলির সাথে সামঞ্জস্যের জন্য অন্তর্ভুক্ত, কিন্তু সাইডকারটি আর সক্রিয়ভাবে রক্ষণাবেক্ষণ করা হয় না।
নিম্নলিখিত চিত্রটি androidx.window.extensions
বা androidx.window.sidecar
ব্যবহার নির্ধারণের জন্য যুক্তি দেখায়।
এক্সটেনশন মডিউল
এক্সটেনশনগুলি ভাঁজযোগ্য বড় স্ক্রীন ডিভাইস এবং বাহ্যিক ডিসপ্লেতে উইন্ডো করা সমর্থন করে এমন ডিভাইসগুলির জন্য উইন্ডো করার বৈশিষ্ট্যগুলি প্রদান করে। বৈশিষ্ট্য ক্ষেত্র অন্তর্ভুক্ত:
যদি ডিভাইস হার্ডওয়্যার সংশ্লিষ্ট বৈশিষ্ট্যগুলিকে সমর্থন না করে তবে এক্সটেনশনের OEM বাস্তবায়নগুলি WindowExtensions
ইন্টারফেসে পদ্ধতিগুলির ডিফল্ট বা স্টাব বাস্তবায়ন সহ নাল উপাদান বা উপাদানগুলি প্রদান করতে পারে, যদি না বৈশিষ্ট্যটি বিশেষভাবে সামঞ্জস্যপূর্ণ সংজ্ঞা নথি (CDD) 7.1.1.1- এ অনুরোধ করা হয়। .
এক্সটেনশন এবং Jetpack APIs
WindowManager এক্সটেনশন মডিউল পাবলিক প্ল্যাটফর্ম API ছাড়াও নিজস্ব API পৃষ্ঠ প্রদান করে। এক্সটেনশন মডিউলটি একটি নন-ডেভেলপার-মুখী androidx.window.extensions
Jetpack লাইব্রেরিতে সর্বজনীনভাবে তৈরি করা হয়েছে, যাতে Jetpack WindowManager ( androidx.window
) কম্পাইলের সময় এটির সাথে লিঙ্ক করতে পারে। এক্সটেনশন API পৃষ্ঠ সাধারণত নিম্ন-স্তরের API প্রদান করে।
এক্সটেনশনগুলি যে APIগুলি প্রদান করে তা শুধুমাত্র Jetpack WindowManager লাইব্রেরি দ্বারা ব্যবহার করা হয়৷ এক্সটেনশন এপিআইগুলিকে সরাসরি অ্যাপ্লিকেশন বিকাশকারীরা কল করার জন্য নয়৷ সঠিক কার্যকারিতা নিশ্চিত করার জন্য গ্রেডল বিল্ড ফাইলে একটি অ্যাপ্লিকেশনের জন্য এক্সটেনশন লাইব্রেরিটি নির্ভরতা হিসাবে যোগ করা উচিত নয়। সরাসরি একটি অ্যাপ্লিকেশনে এক্সটেনশন লাইব্রেরি প্রাক-কম্পাইল করা এড়িয়ে চলুন; পরিবর্তে, পূর্ব-সংকলিত এবং রানটাইম-প্রদত্ত এক্সটেনশন ক্লাসের মিশ্রণ লোড করার ক্ষেত্রে প্রতিরোধ করতে রানটাইম লোডিংয়ের উপর নির্ভর করুন।
Jetpack WindowManager ( androidx.window
) একটি অ্যাপ্লিকেশন নির্ভরতা হিসাবে যোগ করার জন্য বোঝানো হয়েছে এবং উইন্ডো ম্যানেজার এক্সটেনশন বৈশিষ্ট্যগুলি সহ সর্বজনীন বিকাশকারী-মুখী API প্রদান করে। WindowManager লাইব্রেরি স্বয়ংক্রিয়ভাবে অ্যাপ্লিকেশন প্রক্রিয়ার মধ্যে এক্সটেনশনগুলি লোড করে এবং নিম্ন-স্তরের এক্সটেনশন APIগুলিকে উচ্চ-স্তরের বিমূর্ততা এবং আরও ফোকাসড ইন্টারফেসে মোড়ানো হয়। WindowManager Jetpack API গুলি আধুনিক অ্যান্ড্রয়েড অ্যাপ্লিকেশন ডেভেলপমেন্টের মানগুলি অনুসরণ করে এবং অন্যান্য AndroidX লাইব্রেরিগুলি ব্যবহার করে এমন কোডবেসের সাথে ভালভাবে একীভূত করে সুবিধাজনক আন্তঃকার্যযোগ্যতা প্রদানের উদ্দেশ্যে।
এক্সটেনশন সংস্করণ এবং আপডেট
এক্সটেনশন মডিউলটি অ্যান্ড্রয়েড প্ল্যাটফর্মের বার্ষিক বা ত্রৈমাসিক আপডেটের সাথে আপডেট করা যেতে পারে। ত্রৈমাসিক আপডেটগুলি অ্যান্ড্রয়েড প্ল্যাটফর্ম API আপডেটগুলির মধ্যে এক্সটেনশন API স্তর বৃদ্ধি করতে সক্ষম করে, দ্রুত পুনরাবৃত্তির অনুমতি দেয় এবং হার্ডওয়্যার লঞ্চের কাছাকাছি নতুন বৈশিষ্ট্যগুলিতে অফিসিয়াল API অ্যাক্সেস যোগ করার সুযোগ দিয়ে OEM-কে প্রদান করে।
নিম্নলিখিত সারণীতে বিভিন্ন Android রিলিজের জন্য androidx.window.extensions
API সংস্করণের তালিকা রয়েছে।
অ্যান্ড্রয়েড প্ল্যাটফর্ম সংস্করণ | WindowManager এক্সটেনশন API স্তর | androidx.window.extensions API সংস্করণ |
---|---|---|
অ্যান্ড্রয়েড 15 | 6 | 1.5.0 (শীঘ্রই আসছে) |
Android 14 QPR3 | 5 | 1.4.0 (শীঘ্রই আসছে) |
Android 14 QPR1 | 4 | 1.3.0 |
অ্যান্ড্রয়েড 14 | 3 | 1.2.0 |
অ্যান্ড্রয়েড 13 QPR3 | 2 | 1.1.0 |
অ্যান্ড্রয়েড 13 | 1 | 1.0.0 |
Android 12L | 1 | 1.0.0 |
বিদ্যমান স্থিতিশীল API পৃষ্ঠে (ডান কলাম) যোগ করার সময় এক্সটেনশন API স্তর (সেন্টার কলাম) বৃদ্ধি করা হয়।
পিছনে এবং এগিয়ে সামঞ্জস্য
Jetpack WindowManager ঘন ঘন API স্তরের আপডেট, দ্রুত API বিবর্তন, এবং পশ্চাদমুখী সামঞ্জস্য নিয়ে কাজ করার জটিলতা পরিচালনা করে। যখন লাইব্রেরি কোডটি অ্যাপ্লিকেশন প্রক্রিয়াতে কার্যকর করা হয়, তখন লাইব্রেরি ঘোষিত এক্সটেনশন API স্তর পরীক্ষা করে এবং ঘোষিত স্তর অনুযায়ী বৈশিষ্ট্যগুলিতে অ্যাক্সেস প্রদান করে।
রানটাইমে ক্র্যাশ হওয়া থেকে একটি অ্যাপ্লিকেশনকে রক্ষা করার জন্য, WindowManager ঘোষিত এক্সটেনশন API স্তর অনুসারে উপলব্ধ এক্সটেনশন APIগুলির একটি রানটাইম জাভা প্রতিফলন পরীক্ষা করে। যদি কোনো মিল না থাকে, তাহলে WindowManager এক্সটেনশনের ব্যবহার (আংশিক বা সম্পূর্ণভাবে) অক্ষম করতে পারে এবং সংশ্লিষ্ট বৈশিষ্ট্যগুলিকে অ্যাপ্লিকেশানে উপলব্ধ না বলে রিপোর্ট করতে পারে।
WindowManager এক্সটেনশনগুলি একটি system_ext
মডিউল হিসাবে প্রয়োগ করা হয় যা ব্যক্তিগত প্ল্যাটফর্ম API ব্যবহার করে WindowManager কোর, DeviceStateManager
, এবং এক্সটেনশন বৈশিষ্ট্যগুলি বাস্তবায়নে অন্যান্য সিস্টেম পরিষেবাগুলিতে কল করতে।
সংশ্লিষ্ট ত্রৈমাসিক বা বার্ষিক Android প্ল্যাটফর্ম রিলিজের পূর্বে এক্সটেনশনের প্রাক-রিলিজ সংস্করণগুলির সাথে সামঞ্জস্য বজায় রাখা যাবে না যার সাথে সংস্করণগুলি চূড়ান্ত করা হয়েছে৷ এক্সটেনশন API-এর সম্পূর্ণ ইতিহাস রিলিজ শাখা window:extensions:extensions
এপিআই টেক্সট ফাইল ।
এক্সটেনশনের নতুন সংস্করণগুলিকে ফরওয়ার্ড সামঞ্জস্য বজায় রাখার জন্য অ্যাপ্লিকেশনগুলিতে সংকলিত WindowManager-এর পুরানো সংস্করণগুলির সাথে কাজ চালিয়ে যেতে হবে। এটি নিশ্চিত করতে, এক্সটেনশন API-এর যেকোনো নতুন সংস্করণ শুধুমাত্র নতুন API যোগ করে এবং পুরানোগুলিকে সরিয়ে দেয় না। ফলস্বরূপ, পুরানো WindowManager সংস্করণ সহ অ্যাপ্লিকেশনগুলি পুরানো এক্সটেনশন APIগুলি ব্যবহার করা চালিয়ে যেতে পারে যা অ্যাপগুলির বিরুদ্ধে সংকলিত হয়েছিল৷
CTS যাচাইকরণ নিশ্চিত করে যে ডিভাইসে এক্সটেনশন API-এর যেকোন ঘোষিত সংস্করণের জন্য, এর জন্য সমস্ত API এবং পূর্ববর্তী সংস্করণগুলি বর্তমান এবং কার্যকরী।
কর্মক্ষমতা
এক্সটেনশন মডিউলটি Android 14 (API লেভেল 34) থেকে শুরু করে ডিফল্টরূপে নন-বুটক্লাসপাথ সিস্টেম ক্লাস লোডারগুলিতে ক্যাশে করা হয়, তাই অ্যাপ স্টার্টআপে মডিউলটিকে মেমরিতে লোড করার কারণে কোনও কার্যক্ষমতার প্রভাব নেই। যখন ক্লায়েন্ট এবং সার্ভারের মধ্যে অতিরিক্ত আইপিসি কলগুলি সঞ্চালিত হয় তখন পৃথক মডিউল বৈশিষ্ট্যগুলি ব্যবহার করে অ্যাপগুলির কর্মক্ষমতা বৈশিষ্ট্যের উপর সামান্য প্রভাব থাকতে পারে।
মডিউল
অ্যাক্টিভিটি এমবেডিং
অ্যাক্টিভিটি এম্বেডিং কম্পোনেন্ট বৈশিষ্ট্যের একটি সেট প্রদান করে যা অ্যাপ্লিকেশনগুলিকে প্যারেন্ট অ্যাপ্লিকেশনের সীমানার মধ্যে কার্যকলাপ উইন্ডো উপস্থাপনা সংগঠিত করতে সক্ষম করে। এর মধ্যে রয়েছে একটি মাল্টি-পেন লেআউটে একসাথে দুটি ক্রিয়াকলাপ পাশাপাশি দেখানো, লিগ্যাসি অ্যাপ্লিকেশনের জন্য বড় স্ক্রীন অপ্টিমাইজেশানের সুবিধা।
sw600 dp
এর সমান বা বড় আকারের বিল্ট-ইন ডিসপ্লে আছে এমন সমস্ত ডিভাইসে অ্যাক্টিভিটি এমবেডিং কম্পোনেন্ট অবশ্যই পাওয়া যাবে। বাহ্যিক ডিসপ্লে সংযোগ সমর্থন করে এমন ডিভাইসগুলিতেও অ্যাক্টিভিটি এমবেডিং সক্ষম করা আবশ্যক, কারণ রানটাইমে বহিরাগত ডিসপ্লে সংযুক্ত থাকলে অ্যাপ্লিকেশনটি বড় আকারে দেখানো হতে পারে।
ডিভাইস কনফিগারেশন
এক্সটেনশন মডিউল ডিস্ট্রিবিউশন বিভাগে বর্ণিত এক্সটেনশন মডিউল সক্রিয় করা ছাড়া কোনো নির্দিষ্ট ডিভাইস কনফিগারেশনের প্রয়োজন নেই। মাল্টি-উইন্ডো মোড সমর্থন করে এমন সমস্ত ডিভাইসে এক্সটেনশানগুলি সক্ষম করা বোধগম্য। ভবিষ্যতের অ্যান্ড্রয়েড সংস্করণগুলি সাধারণ হ্যান্ডহেল্ড এবং বড় স্ক্রীন ডিভাইস কনফিগারেশনগুলিতে প্রয়োজনীয় এক্সটেনশনগুলি তৈরি করতে পারে৷
উইন্ডো লেআউট তথ্য
উইন্ডো লেআউট তথ্য উপাদানটি একটি ভাঁজযোগ্য ডিভাইসে কব্জাটির অবস্থান এবং অবস্থা সনাক্ত করে যখন কবজা একটি অ্যাপ্লিকেশন উইন্ডো অতিক্রম করে। উইন্ডো লেআউট তথ্য অ্যাপ্লিকেশনগুলিকে প্রতিক্রিয়া জানাতে এবং ফোল্ডেবলগুলিতে ট্যাবলেটপ মোডে অপ্টিমাইজ করা লেআউটগুলি দেখাতে সক্ষম করে৷ ব্যবহারের বিবরণের জন্য আপনার অ্যাপকে ভাঁজ সচেতন করুন দেখুন।
ভাঁজ করা যায় এমন অ্যান্ড্রয়েড ডিভাইস যাতে একটি কব্জা রয়েছে যা পৃথক বা অবিচ্ছিন্ন ডিসপ্লে প্যানেল অঞ্চলগুলিকে সংযুক্ত করে সেগুলিকে অবশ্যই কব্জা সম্পর্কে তথ্য WindowLayoutComponent
এর মাধ্যমে অ্যাপ্লিকেশনগুলিতে উপলব্ধ করতে হবে৷
কব্জা অবস্থান এবং সীমাগুলি API-এ পাস করা একটি Context
দ্বারা চিহ্নিত অ্যাপ্লিকেশন উইন্ডোর সাথে সম্পর্কিত হতে হবে। যদি অ্যাপ্লিকেশান উইন্ডো বাউন্ডগুলি কব্জা সীমার সাথে ছেদ না করে তবে কবজা DisplayFeature
অবশ্যই রিপোর্ট করা উচিত নয়৷ যখন তাদের অবস্থান নির্ভরযোগ্যভাবে রিপোর্ট করা নাও হতে পারে তখন প্রদর্শন বৈশিষ্ট্যগুলি সম্পর্কে রিপোর্ট না করাও গ্রহণযোগ্য, যেমন যখন একটি অ্যাপ্লিকেশন উইন্ডো অবাধে বহু-উইন্ডো মোড বা সামঞ্জস্যপূর্ণ লেটারবক্সিং মোডে ব্যবহারকারী দ্বারা সরানো যায়।
ভাঁজ বৈশিষ্ট্যগুলির জন্য, স্টেট আপডেটগুলি অবশ্যই রিপোর্ট করা উচিত যখন স্থিতিশীল অবস্থার মধ্যে কব্জা অবস্থান পরিবর্তন হয়। একটি ফ্ল্যাট ডিসপ্লে অবস্থায় ডিফল্টরূপে, APIকে অবশ্যই FoldingFeature.State.FLAT
রিপোর্ট করতে হবে। যদি ডিভাইসের হার্ডওয়্যারটিকে একটি স্থিতিশীল অবস্থায় অর্ধ-ভাঁজ মোডে রেখে দেওয়া যায়, তাহলে APIকে অবশ্যই FoldingFeature.State.HALF_OPENED
রিপোর্ট করতে হবে। এপিআইতে কোনো বন্ধ অবস্থা নেই, যেহেতু এই ধরনের ক্ষেত্রে অ্যাপ্লিকেশন উইন্ডোটি দৃশ্যমান হবে না বা কব্জা সীমা অতিক্রম করবে না।
ডিভাইস কনফিগারেশন
ভাঁজ বৈশিষ্ট্য বাস্তবায়ন সমর্থন করতে, 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>]
type
fold
বা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 দেখাতে একটি অ্যাপ্লিকেশন সক্ষম করে। যে ডিভাইসগুলিতে অ্যান্ড্রয়েড-সামঞ্জস্যপূর্ণ (অ্যান্ড্রয়েড CDD দ্বারা আকার, ঘনত্ব এবং উপলব্ধ নেভিগেশন সুবিধাগুলির মতো বৈশিষ্ট্যগুলির পরিপ্রেক্ষিতে সংজ্ঞায়িত করা হয়েছে) কভার ডিসপ্লে রয়েছে যা পিছনের ডিভাইসের ক্যামেরাগুলির সাথে সারিবদ্ধ করে পিছনের ডিসপ্লে মোডে অ্যাক্সেস সরবরাহ করতে হবে।
অ্যান্ড্রয়েড 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 গুলিকে অবশ্যই তাদের বাস্তবায়ন যাচাই করতে হবে। জেটপ্যাক উইন্ডো ম্যানেজার ব্যবহার করে CTS পরীক্ষা এবং পরীক্ষাগুলি পরীক্ষা বাস্তবায়নের জন্য OEM-এর কাছে উপলব্ধ।
CTS পরীক্ষা
CTS পরীক্ষা চালানোর জন্য, CTS পরীক্ষা চালান দেখুন। জেটপ্যাক উইন্ডো ম্যানেজার সম্পর্কিত CTS পরীক্ষাগুলি cts/tests/framework/base/windowmanager/jetpack/
এর অধীনে। পরীক্ষার মডিউলটির নাম হল CtsWindowManagerJetpackTestCases
।
উইন্ডো ম্যানেজার পরীক্ষা
Jetpack WindowManager পরীক্ষা ডাউনলোড করতে, Android Jetpack নির্দেশাবলী অনুসরণ করুন। পরীক্ষাগুলি উইন্ডো লাইব্রেরিতে window:window
মডিউল: window/window/src/androidTest/
।
কমান্ড লাইন থেকে window:window
মডিউলের জন্য ডিভাইস পরীক্ষা চালানোর জন্য, নিম্নলিখিতগুলি করুন:
- ডেভেলপার বিকল্প এবং USB ডিবাগিং সক্ষম আছে এমন একটি ডিভাইস প্লাগ ইন করুন৷
- কম্পিউটারকে ডিভাইসটি ডিবাগ করার অনুমতি দিন।
- androidx সংগ্রহস্থলের রুট ডিরেক্টরিতে একটি শেল খুলুন।
-
framework/support
ডিরেক্টরি পরিবর্তন করুন। - নিম্নলিখিত কমান্ডটি চালান:
./gradlew window:window:connectedAndroidTest
। - ফলাফল বিশ্লেষণ করুন।
অ্যান্ড্রয়েড স্টুডিও থেকে পরীক্ষা চালানোর জন্য, নিম্নলিখিতগুলি করুন:
- অ্যান্ড্রয়েড স্টুডিও খুলুন।
- ডেভেলপার বিকল্প এবং USB ডিবাগিং সক্ষম আছে এমন একটি ডিভাইস প্লাগ ইন করুন৷
- কম্পিউটারকে ডিভাইসটি ডিবাগ করার অনুমতি দিন।
- উইন্ডো মডিউলের উইন্ডো লাইব্রেরির মধ্যে একটি পরীক্ষা নেভিগেট করুন।
- একটি পরীক্ষা ক্লাস খুলুন এবং সম্পাদকের ডানদিকে সবুজ তীর ব্যবহার করে চালান।
বিকল্পভাবে, আপনি একটি পরীক্ষা পদ্ধতি, একটি পরীক্ষা ক্লাস, বা একটি মডিউলে সমস্ত পরীক্ষা চালানোর জন্য Android স্টুডিওতে একটি কনফিগারেশন তৈরি করতে পারেন।
শেলের আউটপুট দেখে ম্যানুয়ালি ফলাফল বিশ্লেষণ করা যেতে পারে। ডিভাইসটি নির্দিষ্ট অনুমান পূরণ না করলে কিছু পরীক্ষা বাদ দেওয়া হয়। ফলাফলগুলি একটি আদর্শ অবস্থানে সংরক্ষিত হয় এবং বিশ্লেষকরা ফলাফলের স্বয়ংক্রিয় বিশ্লেষণের জন্য একটি স্ক্রিপ্ট লিখতে পারেন।