টেন্ড ও ওয়েজ পোজ

বইয়ের মতো ফোল্ড করা যায় এমন ডিভাইসে, আপনি টেন্ট ও ওয়েজ মোডের জন্য সহায়তা চালু করতে পারবেন।

ডিভাইসটি সামান্য খোলা থাকলে, টেন্ট ও ওয়েজ মোড আপনাকে বাইরের স্ক্রিন ব্যবহার করতে দেয়, যেমনটি নিম্নলিখিত ছবিতে দেখানো হয়েছে:

তাঁবু ও ওয়েজ ফোল্ড করা যায় এমন পজিশন

ছবি ১. তাঁবু ও ওয়েজ ফোল্ড করা যায় এমন পোজিশন।

টেন্ট মোডে, ডিভাইসটি আংশিকভাবে খোলা থাকে, দুটি অংশই টেন্টের মতো নিজেকে সাপোর্ট করার জন্য ব্যবহার করা হয়। ওয়েজ মোডে, ডিভাইসটি তার ডানদিকের অর্ধেকের উপর ভর দিয়ে রাখা থাকে, যা কোনও সারফেসের উপর সমতলভাবে থাকে।

Android 16 এবং তার পরবর্তী ভার্সন, আপনার ডিভাইস স্টেট নীতি হিসেবে BookStyleDeviceStatePolicy ব্যবহার করে এই আচরণকে সমর্থন করে। এই নীতিটি বইয়ের মতো দুটি স্ক্রিন সহ ফোল্ডেবল ডিভাইসে কাজ করে, যেখানে ডিভাইসটি ফোল্ড করা হলে হিঞ্জটি ডিভাইসের বাঁদিকে থাকে।

এই নীতি নির্দিষ্ট কিছু পরিস্থিতিতে আনফোল্ড করার সময় আউটার স্ক্রিনকে বেশিক্ষণ চালু রাখে, যেমন:

  • ডিভাইসের ডানদিকের অর্ধেক অংশটি বেশিরভাগই ফ্ল্যাট, এটি ইঙ্গিত করে যে ডিভাইসটি সম্ভবত ওয়েজ মোডে আছে।
  • ডিভাইসের ওরিয়েন্টেশন রিভার্স ল্যান্ডস্কেপ, যা ইঙ্গিত করে যে এটি সম্ভবত টেন্ট মোডে আছে।
  • স্ক্রিন ওরিয়েন্টেশন ল্যান্ডস্কেপ বা রিভার্স ল্যান্ডস্কেপ।
  • একটি অ্যাপ স্ক্রিন ওয়েক লক (স্ক্রিন টাইমআউট প্রতিরোধ করা) ধরে রেখেছে।

এই নীতিতে তাঁবু বা ওয়েজ পজিশনের জন্য আলাদা ডিভাইস স্টেট যোগ করা হয়নি; এটি এই নির্দিষ্ট পরিস্থিতিতে হিঞ্জ অ্যাঙ্গেলের বিস্তৃত রেঞ্জের জন্য বন্ধ থাকা স্টেট বজায় রাখে।

এইসব হিউরিস্টিক সম্পূর্ণভাবে সাপোর্ট করার জন্য ডিভাইসের এগুলি প্রয়োজন:

  • ডিভাইসের দুটি অংশের মধ্যে কোণ সম্পর্কে হিঞ্জ অ্যাঙ্গেল সেন্সর রিপোর্ট করছে
  • ডিভাইসের প্রতিটি (বাঁদিক ও ডানদিক) অংশে অ্যাক্সিলোমিটার সেন্সর

টেন্ট বা ওয়েজ মোড কনফিগার করা

আপনার ডিভাইসে টেন্ট ও ওয়েজ মোড সাপোর্ট চালু করতে এইসব ধাপ অনুসরণ করুন:

  1. 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);
        }
    }
    
  2. সিস্টেম সার্ভারের ক্লাসপাথে নীতি প্রদানকারীকে যোগ করুন। আগের ধাপে তৈরি করা ডিভাইস স্টেট পলিসি প্রোভাইডার ক্লাস দিয়ে লাইব্রেরি তৈরি করে শুরু করুন।

    নিচের উদাহরণে 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
    
  3. config_deviceSpecificDeviceStatePolicyProvider আপডেট করে আপনার প্রদানকারীর ক্লাস নাম config.xml ফাইলে লিখুন, যেমন:

    <string translatable="false" name="config_deviceSpecificDeviceStatePolicyProvider">com.example.MyDevicePolicyProvider</string>