وضعیت‌های خیمه‌ای و گُوه‌ای

در دستگاه‌های تاشو کتاب‌سبک، می‌توانید پشتیبانی از حالت‌های خیمه‌ای و گُوه‌ای را فعال کنید.

حالت‌های «خیمه» و «گوه» به شما امکان می‌دهند وقتی دستگاه کمی باز است، از صفحه‌نمایش خارجی استفاده کنید، همان‌طور که در شکل زیر نشان داده شده است:

حالت‌های تاشو خیمه‌ای و گُوه‌ای

شکل ۱. حالت‌های تاشو چادر و گوه.

در حالت خیمه‌ای، دستگاه تا حدی باز است و از هر دو نیمه برای پشتیبانی از خود مانند یک خیمه استفاده می‌کند. در حالت گُوه‌ای، دستگاه روی نیمه راست خود که روی سطح صافی قرار دارد، تکیه می‌کند.

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