टेंट और वेज पोज़

किताब की तरह फ़ोल्ड किए जा सकने वाले डिवाइसों पर, टेंट और वेज मोड के लिए सहायता चालू की जा सकती है.

टेंट और वेज मोड में, डिवाइस को थोड़ा खुला होने पर आउटर स्क्रीन का इस्तेमाल किया जा सकता है. जैसा कि इस इमेज में दिखाया गया है:

टेंट और वेज फ़ोल्ड करने की सुविधा

पहली इमेज. टेंट और वेज फ़ोल्ड करने की मुद्राएं.

टेंट मोड में, डिवाइस को आधा खोला जाता है. इसके दोनों हिस्सों का इस्तेमाल करके, इसे टेंट की तरह खड़ा किया जाता है. वेड्ज मोड में, डिवाइस को उसके दाईं ओर के आधे हिस्से पर टिकाया जाता है. यह हिस्सा, किसी सतह पर सपाट रखा जाता है.

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.xml फ़ाइल में, config_deviceSpecificDeviceStatePolicyProvider को अपने सेवा देने वाले व्यक्ति या कंपनी के क्लास के नाम से अपडेट करें. उदाहरण के लिए:

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