Home | History | Annotate | Download | only in android
      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 
     13 namespace gfx {
     14 
     15 // Facilitates access to device information typically only
     16 // available using the Android SDK, including Display properties.
     17 class SharedDeviceDisplayInfo {
     18  public:
     19   static SharedDeviceDisplayInfo* GetInstance();
     20 
     21   // See documentation in DeviceDisplayInfo.java
     22   int GetDisplayHeight();
     23   int GetDisplayWidth();
     24   int GetPhysicalDisplayHeight();
     25   int GetPhysicalDisplayWidth();
     26   int GetBitsPerPixel();
     27   int GetBitsPerComponent();
     28   double GetDIPScale();
     29   int GetSmallestDIPWidth();
     30   int GetRotationDegrees();
     31 
     32   // Registers methods with JNI and returns true if succeeded.
     33   static bool RegisterSharedDeviceDisplayInfo(JNIEnv* env);
     34 
     35   void InvokeUpdate(JNIEnv* env,
     36                     jobject jobj,
     37                     jint display_height,
     38                     jint display_width,
     39                     jint physical_display_height,
     40                     jint physical_display_width,
     41                     jint bits_per_pixel,
     42                     jint bits_per_component,
     43                     jdouble dip_scale,
     44                     jint smallest_dip_width,
     45                     jint rotation_degrees);
     46  private:
     47   friend struct DefaultSingletonTraits<SharedDeviceDisplayInfo>;
     48 
     49   SharedDeviceDisplayInfo();
     50   ~SharedDeviceDisplayInfo();
     51   void UpdateDisplayInfo(JNIEnv* env,
     52                          jobject jobj,
     53                          jint display_height,
     54                          jint display_width,
     55                          jint physical_display_height,
     56                          jint physical_display_width,
     57                          jint bits_per_pixel,
     58                          jint bits_per_component,
     59                          jdouble dip_scale,
     60                          jint smallest_dip_width,
     61                          jint rotation_degrees);
     62 
     63   base::Lock lock_;
     64   base::android::ScopedJavaGlobalRef<jobject> j_device_info_;
     65 
     66   int display_height_;
     67   int display_width_;
     68   int physical_display_height_;
     69   int physical_display_width_;
     70   int bits_per_pixel_;
     71   int bits_per_component_;
     72   double dip_scale_;
     73   int smallest_dip_width_;
     74   int rotation_degrees_;
     75 
     76   DISALLOW_COPY_AND_ASSIGN(SharedDeviceDisplayInfo);
     77 };
     78 
     79 }  // namespace gfx
     80 
     81 #endif // UI_GFX_ANDROID_SHARED_DEVICE_DISPLAY_INFO_H_
     82