Программное изменение разрешения основного дисплея
Я пытаюсь изменить разрешение основного дисплея на Android 8.1. Я получаю событие от ядра (на основе EDID), которое сообщает мне, что мне нужно изменить режим.
Затем я в основном делаю:
sp<IBinder> display(SurfaceComposerClient::getBuiltInDisplay(ISurfaceComposer::eDisplayIdMain));
status_t res = SurfaceComposerClient::setActiveConfig(display, new_mode);
Это правильно обновляет Surfaceflinger, половину дисплея и ядро, но windowmanager /display не меняет разрешение, пока я не запустил:
wm size 1920x1080
wm density 240
Но wm вызывает эти функции, которые кажутся слишком резкими, а также сохраняет размер / плотность в постоянных настройках:
public void setForcedDisplaySize(int displayId, int width, int height);
public void setForcedDisplayDensityForUser(int displayId, int density, int userId);
Я смотрел код в windowmanager /display, но не нашел API, который я должен использовать для этого.
Есть ли способ уведомить windowmanager /display об изменении Surfaceflinger или пропущенном мной API, который я могу использовать?
Я ошибаюсь? Есть ли правильный способ изменить разрешение / режим основного дисплея, которого я не нашел?