ভাঁজযোগ্য ডিভাইসের ক্ষেত্রে, ডিভাইসের ভৌত অবস্থার সাথে স্ক্রিন ঘূর্ণন আচরণকে অভিযোজিত করে ব্যবহারকারীর অভিজ্ঞতা অপ্টিমাইজ করা যেতে পারে। উদাহরণস্বরূপ, আপনি ট্যাবলেটের মতো ভঙ্গিতে ডিভাইসটি খোলার সময় স্ক্রিনটি স্বয়ংক্রিয়ভাবে ঘোরানোর জন্য সেট করতে পারেন, কিন্তু যখন ডিভাইসটি ভাঁজ করা হয় তখন পোর্ট্রেটে লক করা থাকে।
অ্যান্ড্রয়েড ১৩ থেকে শুরু করে, অ্যান্ড্রয়েড ডিভাইসের অবস্থার উপর ভিত্তি করে স্বয়ংক্রিয়-ঘূর্ণন সেটিংস কাস্টমাইজ করার ক্ষমতা রাখে, যেমন ভাঁজ করা, খোলা বা অর্ধেক ভাঁজ করা (টেবিলটপ মোড)।

চিত্র ১: ব্যবহারকারীর দেখা ডিভাইস-অবস্থা-ভিত্তিক স্বয়ংক্রিয়-ঘূর্ণন সেটিংস।
ডিভাইসের অবস্থা ভিত্তিক স্বয়ংক্রিয় ঘোরানোর সেটিং সক্ষম করুন
ডিভাইস-স্টেট-ভিত্তিক অটো-রোটেশন সক্ষম এবং কনফিগার করতে, ফ্রেমওয়ার্কের config.xml ফাইলের জন্য একটি ডিভাইস ওভারলে তৈরি করুন, নিম্নরূপ:
আপনার ডিভাইসের ওভারলে
config.xmlএconfig_perDeviceStateRotationLockDefaultsইন্টিজার অ্যারে পপুলেট করে বিভিন্ন ডিভাইসের ভঙ্গির জন্য ডিফল্ট অটো-রোটেট আচরণ কনফিগার করুন:<!-- In your device overlay, for example, device/generic/goldfish/phone/overlay/frameworks/base/core/res/res/values/config.xml --> <resources> <!-- Map of device posture to rotation lock setting. Each entry must be in the format "key:value", or "key:value:fallback_key" for example: "0:1" or "2:0:1". The keys are one of Settings.Secure.DeviceStateRotationLockKey, and the values are one of Settings.Secure.DeviceStateRotationLockSetting. --> <integer-array name="config_perDeviceStateRotationLockDefaults"> <item>0:1</item> <!-- CLOSED -> LOCKED --> <item>1:0:2</item> <!-- HALF_OPENED -> IGNORED and fallback to device posture OPENED --> <item>2:2</item> <!-- OPENED -> UNLOCKED --> <item>3:0:0</item> <!-- REAR_DISPLAY -> IGNORED and fallback to device posture CLOSED --> </integer-array> </resources>fallback-keyহল অন্য ডিভাইসের ভঙ্গির একটি রেফারেন্স এবং আপনাকে অবশ্যই নির্দিষ্ট করতে হবে কখন একটি ভঙ্গির মানSettings.Secure.DEVICE_STATE_ROTATION_LOCK_IGNOREDহবে। যখন একটি ভঙ্গি এইভাবে কনফিগার করা হয়, তখন এর স্বয়ংক্রিয়-ঘূর্ণন পছন্দ পেতে বা সেট করার জন্য যেকোনো অনুরোধ ফলব্যাক ভঙ্গিতে পুনঃনির্দেশিত হয়।উদাহরণস্বরূপ, যদি
HALF_OPENEDভঙ্গিটিOPENEDভঙ্গিতে ফিরে আসে:-
HALF_OPENEDএর জন্য স্বয়ংক্রিয়-ঘূর্ণন সেটিংটি পড়লেOPENEDএর বর্তমান সেটিংটি ফেরত আসে। - ডিভাইসটি
HALF_OPENEDথাকা অবস্থায় একটি নতুন স্বয়ংক্রিয়-ঘোরানো পছন্দ লেখাOPENEDভঙ্গির পছন্দ আপডেট করে।
-
প্রতিটি ব্যবহারকারী-সেটেবল ডিভাইসের ভঙ্গির জন্য বর্ণনা কনফিগার করুন। আপনার ডিভাইসের সেটিংস অ্যাপ ওভারলেতে
config_settableAutoRotationDeviceStatesDescriptionsস্ট্রিং অ্যারেটি পূরণ করুন:<!-- In your device's Settings app overlay --> <resources> <!-- The settings/preference description for each settable device posture defined in the array "config_perDeviceStateRotationLockDefaults". The item in position "i" describes the auto-rotation setting for the device posture also in position "i" in the array "config_perDeviceStateRotationLockDefaults". --> <string-array name="config_settableAutoRotationDeviceStatesDescriptions"> <item>Auto-rotate when folded</item> <item>@null</item> <!-- No description for state in position 1 (it is not settable by the user) --> <item>Auto-rotate when unfolded</item> </string-array> </resources>অসঙ্গত আচরণ রোধ করতে, সেটিংস প্রদানকারীদের কাছে সরাসরি লেখার পরিবর্তে, আপনাকে প্রোগ্রাম্যাটিকভাবে এই সেটিংস পরিবর্তন করতে সঠিক API ব্যবহার করতে হবে:
বর্তমান ঘূর্ণন লকের অবস্থা পরিবর্তন করতে (
ACCELEROMETER_ROTATIONপরিবর্তন করে):- SystemUI অথবা লঞ্চার থেকে,
RotationPolicy#setRotationLock(...)ব্যবহার করুন। - উইন্ডো ম্যানেজার থেকে,
DisplayRotation#freezeRotation()অথবাthawRotation()ব্যবহার করুন।
- SystemUI অথবা লঞ্চার থেকে,
একটি নির্দিষ্ট ডিভাইসের অবস্থার জন্য ঘূর্ণন লক পছন্দ পরিবর্তন করতে (
DEVICE_STATE_ROTATION_LOCKপরিবর্তন করে):-
RotationPolicyঅথবাDeviceStateAutoRotateSettingManagerথেকেrequestDeviceStateAutoRotateSettingChange(...)ব্যবহার করুন।
-
বাস্তবায়নের বিশদ বিবরণ
একটি ভাঁজযোগ্য ডিভাইসের জন্য স্বয়ংক্রিয়-ঘূর্ণন আচরণ নিয়ন্ত্রণকারী সেটিংস এবং মূল কী ক্লাসগুলি নিম্নলিখিত বিভাগগুলিতে বর্ণনা করা হয়েছে।
সেটিংস
স্বয়ংক্রিয়-ঘূর্ণন পরিচালনা করতে সিস্টেমটি নিম্নলিখিত দুটি সেটিংস ব্যবহার করে:
Settings.System.ACCELEROMETER_ROTATION: এটি প্রাথমিক অটো-রোটেট সেটিং। একটি ভাঁজযোগ্য ডিভাইসের জন্য, এর মান প্রতিফলিত করে যে ডিভাইসের বর্তমান ডিভাইসের অবস্থানের জন্য অটো-রোটেট সক্ষম কিনা।Settings.Secure.DEVICE_STATE_ROTATION_LOCK: এই সেটিংটি প্রতিটি ডিভাইসের ভঙ্গির জন্য ব্যবহারকারীর স্বয়ংক্রিয়-ঘোরানো পছন্দ সংরক্ষণ করে (উদাহরণস্বরূপ, ভাঁজ করা বা খোলা)। এটি ডিভাইসের ভঙ্গি পরিবর্তন হলে সিস্টেমকে সঠিক পছন্দ প্রয়োগ করতে দেয়।সেটিংটি একটি কোলন-সীমাবদ্ধ স্ট্রিং হিসাবে সংরক্ষণ করা হয়। প্রতিটি জোড়া মান একটি ডিভাইসের অবস্থান এবং এর সাথে সম্পর্কিত ঘূর্ণন সেটিং প্রতিনিধিত্ব করে। ফর্ম্যাটটি হল:
<device_posture_0>:<rotation_value_0>:<device_posture_1>:<rotation_value_1>...ঘূর্ণনের মানগুলি হল:
-
0: উপেক্ষা করা হয়েছে (ফলব্যাক ভঙ্গির জন্য সেটিং ব্যবহার করা হয়েছে) -
1: লক করা আছে (অটো-রোটেট বন্ধ আছে) -
2: আনলক করা হয়েছে (স্বয়ংক্রিয়-ঘোরানো চালু আছে)
উদাহরণস্বরূপ,
"0:2:2:1"স্ট্রিংটির অর্থ হল:- ভাঁজ করা অবস্থায় (ভঙ্গি
0) স্বয়ংক্রিয়-ঘোরানো আনলক করা হয় (2)। - উন্মোচিত অবস্থার জন্য (ভঙ্গি
2), অটো-রোটেট লক করা আছে (1)।
-
মূল ক্লাস
ডিভাইস-স্টেট-ভিত্তিক অটো-রোটেট সেটিংস পরিচালনার যুক্তি নিম্নলিখিত ক্লাসগুলি দ্বারা পরিচালিত হয়:
DeviceStateAutoRotateSettingManagerImpl:DEVICE_STATE_ROTATION_LOCKসেটিং পরিচালনা করে। এটি সেটিং আপডেট করার, এর মান পুনরুদ্ধার করার এবং পরিবর্তনের জন্য শ্রোতাদের নিবন্ধনের পদ্ধতি প্রদান করে।DeviceStateAutoRotateSettingController(উইন্ডো ম্যানেজার) :ACCELEROMETER_ROTATIONএবংDEVICE_STATE_ROTATION_LOCKসিঙ্ক্রোনাইজ করে। যখন ডিভাইসের ভঙ্গি পরিবর্তন হয়, তখন এটি ব্যবহারকারীর নতুন অবস্থার পছন্দের উপর ভিত্তি করেACCELEROMETER_ROTATIONআপডেট করে। এটি নিশ্চিত করে যেACCELEROMETER_ROTATIONএ করা যেকোনো পরিবর্তন বর্তমান ডিভাইসের ভঙ্গির জন্যDEVICE_STATE_ROTATION_LOCKএ সংরক্ষিত হয়েছে এবং একইভাবে বর্তমান ভঙ্গির জন্যDEVICE_STATE_ROTATION_LOCKএ করা পরিবর্তনগুলিACCELEROMETER_ROTATIONএ প্রতিফলিত হয়েছে।DeviceStateAutoRotateSettingController(সেটিংস অ্যাপ) : ডিভাইসের অবস্থা-ভিত্তিক স্বয়ংক্রিয়-ঘূর্ণন সেটিংস পৃষ্ঠায় UI নিয়ন্ত্রণ করুন।PostureDeviceStateConverter: জেনেরিক ডিভাইস-স্টেট শনাক্তকারী এবং এই বৈশিষ্ট্য দ্বারা ব্যবহৃত ডিভাইস-পোশ্চার শনাক্তকারীর মধ্যে রূপান্তর করে।
বৈধতা
যেহেতু এই বৈশিষ্ট্যটির আচরণ OEM এর কনফিগারেশনের উপর অত্যন্ত নির্ভরশীল, তাই এর জন্য কোনও নির্দিষ্ট CTS পরীক্ষা নেই। আপনার কনফিগার করা বিভিন্ন ভৌত অবস্থার মধ্যে ডিভাইসটি রূপান্তরিত হলে স্বয়ংক্রিয়-ঘূর্ণন সেটিংস প্রত্যাশিতভাবে পরিবর্তিত হয় কিনা তা যাচাই করার জন্য আপনাকে ম্যানুয়াল পরীক্ষা করতে হবে।