বই-শৈলী ভাঁজযোগ্য ডিভাইসে, আপনি তাঁবু এবং ওয়েজ মোডগুলির জন্য সমর্থন সক্ষম করতে পারেন।
তাঁবু এবং ওয়েজ মোডগুলি আপনাকে বাইরের স্ক্রীন ব্যবহার করতে দেয় যখন ডিভাইসটি সামান্য খোলা থাকে, যেমনটি নিম্নলিখিত চিত্রে দেখানো হয়েছে:
চিত্র 1. তাঁবু এবং কীলক ভাঁজযোগ্য ভঙ্গি।
তাঁবু মোডে, ডিভাইসটি আংশিকভাবে খোলা থাকে, উভয় অর্ধেক ব্যবহার করে তাঁবুর মতো নিজেকে সমর্থন করে। ওয়েজ মোডে, ডিভাইসটি তার ডান অর্ধেকের উপরে প্রপড করা হয়, যা একটি পৃষ্ঠের উপর সমতল থাকে।
Android 16 এবং উচ্চতর আপনার ডিভাইস স্টেট নীতি হিসাবে BookStyleDeviceStatePolicy
ব্যবহার করে এই আচরণকে সমর্থন করে। এই নীতিটি একটি বইয়ের শৈলীতে দুটি স্ক্রীন সহ একটি ভাঁজযোগ্য ডিভাইসে কাজ করে, ভাঁজ করার সময় ডিভাইসের বাম দিকে কব্জাটি থাকে৷
এই নীতিটি নির্দিষ্ট অবস্থার মধ্যে উন্মোচন করার সময় বাইরের স্ক্রীনকে আরও বেশি সময় ধরে রাখে, উদাহরণস্বরূপ:
- ডিভাইসটির ডান অর্ধেকটি বেশিরভাগ সমতল, যা নির্দেশ করে যে ডিভাইসটি সম্ভবত ওয়েজ মোডে রয়েছে।
- ডিভাইসের অভিযোজন হল বিপরীত ল্যান্ডস্কেপ, যা ইঙ্গিত করে যে এটি সম্ভবত তাঁবু মোডে আছে।
- পর্দার অভিযোজন হল ল্যান্ডস্কেপ বা বিপরীত ল্যান্ডস্কেপ।
- একটি স্ক্রিন ওয়েকলক ধারণ করে একটি অ্যাপ রয়েছে (স্ক্রিন টাইমআউট প্রতিরোধ করে)।
নীতিটি তাঁবু বা কীলক ভঙ্গির জন্য একটি পৃথক ডিভাইস অবস্থা চালু করে না; এটি এই নির্দিষ্ট অবস্থার অধীনে কব্জা কোণের বিস্তৃত পরিসরের জন্য বন্ধ অবস্থায় রাখে।
এই হিউরিস্টিকগুলিকে সম্পূর্ণরূপে সমর্থন করার জন্য, ডিভাইসটির প্রয়োজন:
- কবজা কোণ সেন্সর ডিভাইসের দুটি অর্ধেক মধ্যে কোণ রিপোর্টিং
- ডিভাইসের প্রতিটি (বাম এবং ডান) অর্ধাংশে অ্যাক্সিলোমিটার সেন্সর
তাঁবু বা কীলক মোড কনফিগার করুন
আপনার ডিভাইসে তাঁবু এবং ওয়েজ মোড সমর্থন সক্ষম করতে এই পদক্ষেপগুলি অনুসরণ করুন:
DeviceStatePolicy.Provider
এর একটি বাস্তবায়ন তৈরি করুন যাBookStyleDeviceStatePolicy
এর একটি উদাহরণ প্রদান করে। দৃষ্টান্তটি অবশ্যইBookStyleDeviceStatePolicy
কনস্ট্রাক্টরকে সেন্সর অবজেক্টের মতো সমস্ত প্রয়োজনীয় নির্ভরতা প্রদান করতে হবে।নিম্নলিখিত উদাহরণ একটি বাস্তবায়ন দেখায়:
package com.example; public class MyDevicePolicyProvider implements DeviceStatePolicy.Provider { @Override public DeviceStatePolicy instantiate(@NonNull Context context) { final SensorManager sensorManager = context.getSystemService(SensorManager.class); final Sensor hingeAngleSensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE, /* wakeUp= */ true); final List<Sensor> sensors = sensorManager.getSensorList(Sensor.TYPE_ALL); final Sensor hallSensor = CollectionUtils.find(sensors, (sensor) -> Objects.equals(sensor.getStringType(), "com.example.hall_effect")); final Sensor rightAccelerometerSensor = CollectionUtils.find(sensors, (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 0")); final Sensor leftAccelerometerSensor = CollectionUtils.find(sensors, (sensor) -> Objects.equals(sensor.getName(), "Accelerometer 1")); // You can pass a non-null value here to disable tent/wedge mode logic, // so the displays switch will always happen at the fixed hinge angle. // This might be useful, for example, when in a retail demo mode where // the hinge angle range of the device is limited. final Integer closeAngleDegrees = null; return new BookStyleDeviceStatePolicy(new FeatureFlagsImpl(), context, hingeAngleSensor, hallSensor, leftAccelerometerSensor, rightAccelerometerSensor, closeAngleDegrees); } }
সিস্টেম সার্ভারের ক্লাসপাথে নীতি প্রদানকারী যোগ করুন। আপনি আগের ধাপে যে ডিভাইস স্টেট পলিসি প্রোভাইডার ক্লাস তৈরি করেছেন তার সাথে একটি লাইব্রেরি তৈরি করে শুরু করুন।
নিম্নলিখিত উদাহরণটি একটি Soong
Android.bp
ব্লুপ্রিন্ট কনফিগারেশন দেখায়:java_library { name: "my-device-services", installable: true, system_ext_specific: true, srcs: [ "src/**/*.java" ], libs: [ "services", ], }
তারপর, সিস্টেম সার্ভারে এই লাইব্রেরি যোগ করতে, নিম্নলিখিত লাইন যোগ করে ডিভাইসের মেকফাইল পরিবর্তন করুন:
# Add system service libraries (they contain device-specific policies) PRODUCT_SYSTEM_SERVER_JARS += \ my-device-services PRODUCT_PACKAGES += \ my-device-services
config_deviceSpecificDeviceStatePolicyProvider
config.xml
ফাইলে আপনার প্রদানকারীর শ্রেণীর নামের সাথে আপডেট করুন, উদাহরণস্বরূপ:<string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>