وضعيّة الخيمة ووضعيّة الإسفين

على الأجهزة القابلة للطي التي تشبه الكتب، يمكنك تفعيل التوافق مع وضعَي الخيمة والوتد.

يتيح لك وضعا "الخيمة" و"الوتد" استخدام الشاشة الخارجية عندما يكون الجهاز مفتوحًا قليلاً، كما هو موضّح في الشكل التالي:

وضعيتا الخيمة والوتد القابلتان للطي

الشكل 1. وضعي الخيمة والوتد القابلَين للطي

في وضع "الخيمة"، يكون الجهاز مفتوحًا جزئيًا، ويتم استخدام كلا النصفين لدعمه مثل الخيمة. في وضع "الحامل"، يتم إسناد الجهاز على النصف الأيمن منه، ويكون النصف الأيسر مسطحًا على السطح.

يتيح الإصدار 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",
        ],
    }
    

    بعد ذلك، لإضافة هذه المكتبة إلى خادم النظام، عدِّل ملف makefile الخاص بالجهاز عن طريق إضافة الأسطر التالية:

    # 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>