blob: 495dc7e9a9cdebb03d19a1c6d595253ba337059d [file] [log] [blame]
Avi Drissman3e1a26c2022-09-15 20:26:031// Copyright 2016 The Chromium Authors
timavfe53c2c62016-11-23 02:35:462// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef UI_ANDROID_DISPLAY_ANDROID_MANAGER_H_
6#define UI_ANDROID_DISPLAY_ANDROID_MANAGER_H_
7
8#include <jni.h>
9
Nick Diego Yamane7b59df542024-06-10 21:24:5410#include <optional>
renkens3c8e4642024-12-11 16:49:1811#include <string>
Nick Diego Yamane7b59df542024-06-10 21:24:5412
timavfe53c2c62016-11-23 02:35:4613#include "base/android/jni_android.h"
renkens3c8e4642024-12-11 16:49:1814#include "base/android/scoped_java_ref.h"
15#include "ui/android/ui_android_export.h"
timavfe53c2c62016-11-23 02:35:4616#include "ui/display/screen_base.h"
renkens3c8e4642024-12-11 16:49:1817#include "ui/gfx/geometry/rect.h"
Bo Liu71ca79c2019-02-26 18:01:2418#include "ui/gfx/geometry/size.h"
timavfe53c2c62016-11-23 02:35:4619
20namespace ui {
21
renkens3c8e4642024-12-11 16:49:1822class DisplayAndroidManagerTest;
Bo Liu71ca79c2019-02-26 18:01:2423class WindowAndroid;
24
renkens3c8e4642024-12-11 16:49:1825class UI_ANDROID_EXPORT DisplayAndroidManager : public display::ScreenBase {
timavfe53c2c62016-11-23 02:35:4626 public:
Peter Boströmc8c12352021-09-21 23:37:1527 DisplayAndroidManager(const DisplayAndroidManager&) = delete;
28 DisplayAndroidManager& operator=(const DisplayAndroidManager&) = delete;
29
renkens3c8e4642024-12-11 16:49:1830 ~DisplayAndroidManager() override = default;
timavfe53c2c62016-11-23 02:35:4631
32 // Screen interface.
33
jinsukkim2dd85f32017-03-17 01:54:2834 display::Display GetDisplayNearestWindow(
35 gfx::NativeWindow window) const override;
36 display::Display GetDisplayNearestView(gfx::NativeView view) const override;
timavfe53c2c62016-11-23 02:35:4637 display::Display GetDisplayNearestPoint(
38 const gfx::Point& point) const override;
39 display::Display GetDisplayMatching(
40 const gfx::Rect& match_rect) const override;
Nick Diego Yamane7b59df542024-06-10 21:24:5441 std::optional<float> GetPreferredScaleFactorForView(
42 gfx::NativeView view) const override;
timavfe53c2c62016-11-23 02:35:4643
44 // Methods called from Java.
45
46 void UpdateDisplay(JNIEnv* env,
renkens3c8e4642024-12-11 16:49:1847 const base::android::JavaParamRef<jobject>& jObject,
timavfe53c2c62016-11-23 02:35:4648 jint sdkDisplayId,
renkens3c8e4642024-12-11 16:49:1849 const base::android::JavaRef<jstring>& label,
50 const base::android::JavaRef<jintArray>& jBounds,
51 const base::android::JavaRef<jintArray>& jInsets,
timavfe53c2c62016-11-23 02:35:4652 jfloat dipScale,
53 jint rotationDegrees,
54 jint bitsPerPixel,
Christopher Cameronbc1ae6d2017-07-18 05:20:4655 jint bitsPerComponent,
Bo Liu55dc9d6b2023-04-20 12:22:0156 jboolean isWideColorGamut,
Christopher Cameron50ca5c72023-09-26 15:44:4257 jboolean isHdr,
renkens3c8e4642024-12-11 16:49:1858 jfloat hdrMaxLuminanceRatio,
59 jboolean isInternal);
timavfe53c2c62016-11-23 02:35:4660 void RemoveDisplay(JNIEnv* env,
renkens3c8e4642024-12-11 16:49:1861 const base::android::JavaParamRef<jobject>& jObject,
timavfe53c2c62016-11-23 02:35:4662 jint sdkDisplayId);
63 void SetPrimaryDisplayId(JNIEnv* env,
renkens3c8e4642024-12-11 16:49:1864 const base::android::JavaParamRef<jobject>& jObject,
timavfe53c2c62016-11-23 02:35:4665 jint sdkDisplayId);
66
67 private:
Bo Liu71ca79c2019-02-26 18:01:2468 friend class WindowAndroid;
renkens3c8e4642024-12-11 16:49:1869 friend class DisplayAndroidManagerTest;
70
Eric Karld6cd75b2019-03-14 22:01:3671 friend void SetScreenAndroid(bool use_display_wide_color_gamut);
renkens3c8e4642024-12-11 16:49:1872
Eric Karld6cd75b2019-03-14 22:01:3673 explicit DisplayAndroidManager(bool use_display_wide_color_gamut);
timavfe53c2c62016-11-23 02:35:4674
Bo Liu71ca79c2019-02-26 18:01:2475 static void DoUpdateDisplay(display::Display* display,
renkens3c8e4642024-12-11 16:49:1876 const std::string& label,
77 const gfx::Rect& bounds,
78 const gfx::Rect& work_area,
79 const gfx::Size& size_in_pixels,
80 float dip_scale,
81 int rotation_degrees,
82 int bits_per_pixel,
83 int bits_per_component,
84 bool is_wide_color_gamut,
85 bool is_hdr,
86 jfloat hdr_max_luminance_ratio);
Bo Liu71ca79c2019-02-26 18:01:2487
Eric Karld6cd75b2019-03-14 22:01:3688 const bool use_display_wide_color_gamut_;
timavfe53c2c62016-11-23 02:35:4689 int primary_display_id_ = 0;
timavfe53c2c62016-11-23 02:35:4690};
91
92} // namespace ui
93
94#endif // UI_ANDROID_DISPLAY_ANDROID_MANAGER_H_