shared_device_display_info.h revision 1e9bf3e0803691d0a228da41fc608347b6db4340
1// Copyright 2013 The Chromium Authors. All rights reserved.
2// 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_GFX_ANDROID_SHARED_DEVICE_DISPLAY_INFO_H_
6#define UI_GFX_ANDROID_SHARED_DEVICE_DISPLAY_INFO_H_
7
8#include "base/android/scoped_java_ref.h"
9#include "base/basictypes.h"
10#include "base/memory/singleton.h"
11#include "base/synchronization/lock.h"
12
13namespace gfx {
14
15// Facilitates access to device information typically only
16// available using the Android SDK, including Display properties.
17class SharedDeviceDisplayInfo {
18 public:
19  static SharedDeviceDisplayInfo* GetInstance();
20
21  int GetDisplayHeight();
22  int GetDisplayWidth();
23  int GetBitsPerPixel();
24  int GetBitsPerComponent();
25  double GetDIPScale();
26  int GetSmallestDIPWidth();
27
28  // Registers methods with JNI and returns true if succeeded.
29  static bool RegisterSharedDeviceDisplayInfo(JNIEnv* env);
30
31  void InvokeUpdate(JNIEnv* env,
32                    jobject jobj,
33                    jint display_height,
34                    jint display_width,
35                    jint bits_per_pixel,
36                    jint bits_per_component,
37                    jdouble dip_scale,
38                    jint smallest_dip_width);
39 private:
40  friend struct DefaultSingletonTraits<SharedDeviceDisplayInfo>;
41
42  SharedDeviceDisplayInfo();
43  ~SharedDeviceDisplayInfo();
44  void UpdateDisplayInfo(JNIEnv* env,
45                         jobject jobj,
46                         jint display_height,
47                         jint display_width,
48                         jint bits_per_pixel,
49                         jint bits_per_component,
50                         jdouble dip_scale,
51                         jint smallest_dip_width);
52
53  base::Lock lock_;
54  base::android::ScopedJavaGlobalRef<jobject> j_device_info_;
55
56  int display_height_;
57  int display_width_;
58  int bits_per_pixel_;
59  int bits_per_component_;
60  double dip_scale_;
61  int smallest_dip_width_;
62
63  DISALLOW_COPY_AND_ASSIGN(SharedDeviceDisplayInfo);
64};
65
66}  // namespace gfx
67
68#endif // UI_GFX_ANDROID_SHARED_DEVICE_DISPLAY_INFO_H_
69