update for android R

Change-Id: I8e7d60aa34739bf0365a62f95cd1fcf04576f132
diff --git a/src/AndroidDesktop.cpp b/src/AndroidDesktop.cpp
index 90f1699..253eefe 100644
--- a/src/AndroidDesktop.cpp
+++ b/src/AndroidDesktop.cpp
@@ -168,9 +168,21 @@
         ALOGE("Failed to get display characteristics\n");
         return err;
     }
-    //ALOGV("updateDisplayInfo: [%d:%d]", mDisplayInfo.w, mDisplayInfo.h);
+    
+    err = SurfaceComposerClient::getActiveDisplayConfig(displayToken, &mDisplayConfig);
+    if (err != NO_ERROR) {
+        ALOGE("Failed to get display configuration\n");
+        return err;
+    }
+    ALOGV("updateDisplayInfo: [%d:%d]", mDisplayConfig.resolution.width, mDisplayConfig.resolution.height);
 
-    mPixels->setDisplayInfo(&mDisplayInfo);
+    err = SurfaceComposerClient::getDisplayState(displayToken, &mDisplayState);
+    if (err != NO_ERROR) {
+        ALOGE("Failed to get current display status");
+        return err;
+    }
+
+    mPixels->setDisplayInfo(&mDisplayConfig, &mDisplayState);
 
     return NO_ERROR;
 }
@@ -187,7 +199,8 @@
           mDisplayRect.getHeight(), width, height);
 
     mVirtualDisplay.clear();
-    mVirtualDisplay = new VirtualDisplay(&mDisplayInfo, mPixels->width(), mPixels->height(), this);
+    mVirtualDisplay = new VirtualDisplay(&mDisplayConfig,  &mDisplayState,
+                                         mPixels->width(), mPixels->height(), this);
 
     mDisplayRect = mVirtualDisplay->getDisplayRect();
 
diff --git a/src/AndroidDesktop.h b/src/AndroidDesktop.h
index 1ceecc2..993f466 100644
--- a/src/AndroidDesktop.h
+++ b/src/AndroidDesktop.h
@@ -11,6 +11,8 @@
 #include <gui/CpuConsumer.h>
 
 #include <ui/DisplayInfo.h>
+#include <ui/DisplayConfig.h>
+#include <ui/DisplayState.h>
 
 #include <rfb/PixelBuffer.h>
 #include <rfb/SDesktop.h>
@@ -79,6 +81,8 @@
 
     // Primary display
     DisplayInfo mDisplayInfo;
+    DisplayConfig mDisplayConfig = {};
+    ui::DisplayState mDisplayState = {};
 
     // Virtual input device
     sp<InputDevice> mInputDevice;
diff --git a/src/AndroidPixelBuffer.cpp b/src/AndroidPixelBuffer.cpp
index 8af6c39..b6ab0cb 100644
--- a/src/AndroidPixelBuffer.cpp
+++ b/src/AndroidPixelBuffer.cpp
@@ -37,8 +37,8 @@
     mListener = nullptr;
 }
 
-bool AndroidPixelBuffer::isDisplayRotated(uint8_t orientation) {
-    return orientation != DISPLAY_ORIENTATION_0 && orientation != DISPLAY_ORIENTATION_180;
+bool AndroidPixelBuffer::isDisplayRotated(ui::Rotation orientation) {
+    return orientation != ui::ROTATION_0 && orientation != ui::ROTATION_180;
 }
 
 void AndroidPixelBuffer::setBufferRotation(bool rotated) {
@@ -98,12 +98,12 @@
     }
 }
 
-void AndroidPixelBuffer::setDisplayInfo(DisplayInfo* info) {
-    bool rotated = isDisplayRotated(info->orientation);
+void AndroidPixelBuffer::setDisplayInfo(DisplayConfig* config, ui::DisplayState* state) {
+    bool rotated = isDisplayRotated(state->orientation);
     setBufferRotation(rotated);
 
-    uint32_t w = rotated ? info->h : info->w;
-    uint32_t h = rotated ? info->w : info->h;
+    uint32_t w = rotated ? config->resolution.height : config->resolution.width;
+    uint32_t h = rotated ? config->resolution.width : config->resolution.height;
 
     if (w != mSourceWidth || h != mSourceHeight) {
         ALOGV("Display dimensions changed: old=(%dx%d) new=(%dx%d)", mSourceWidth, mSourceHeight, w,
diff --git a/src/AndroidPixelBuffer.h b/src/AndroidPixelBuffer.h
index 44e7dbd..174665f 100644
--- a/src/AndroidPixelBuffer.h
+++ b/src/AndroidPixelBuffer.h
@@ -21,7 +21,9 @@
 #include <utils/Mutex.h>
 #include <utils/RefBase.h>
 
+#include <ui/DisplayConfig.h>
 #include <ui/DisplayInfo.h>
+#include <ui/DisplayState.h>
 #include <ui/Rect.h>
 
 #include <rfb/PixelBuffer.h>
@@ -35,7 +37,7 @@
   public:
     AndroidPixelBuffer();
 
-    virtual void setDisplayInfo(DisplayInfo* info);
+    virtual void setDisplayInfo(DisplayConfig* config, ui::DisplayState* state);
 
     virtual void setWindowSize(uint32_t width, uint32_t height);
 
@@ -61,7 +63,7 @@
     void reset();
 
   private:
-    static bool isDisplayRotated(uint8_t orientation);
+    static bool isDisplayRotated(ui::Rotation orientation);
 
     virtual void setBufferRotation(bool rotated);
 
diff --git a/src/VirtualDisplay.cpp b/src/VirtualDisplay.cpp
index 1854a55..1f616d1 100644
--- a/src/VirtualDisplay.cpp
+++ b/src/VirtualDisplay.cpp
@@ -22,20 +22,21 @@
 #include <gui/CpuConsumer.h>
 #include <gui/IGraphicBufferConsumer.h>
 #include <gui/SurfaceComposerClient.h>
-
+#include <input/DisplayViewport.h>
 #include "VirtualDisplay.h"
 
 using namespace vncflinger;
 
-VirtualDisplay::VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t height,
+VirtualDisplay::VirtualDisplay(DisplayConfig* config, ui::DisplayState* state,
+                               uint32_t width, uint32_t height,
                                sp<CpuConsumer::FrameAvailableListener> listener) {
     mWidth = width;
     mHeight = height;
 
-    if (info->orientation == DISPLAY_ORIENTATION_0 || info->orientation == DISPLAY_ORIENTATION_180) {
-        mSourceRect = Rect(info->w, info->h);
+    if (state->orientation == ui::ROTATION_0 || state->orientation == ui::ROTATION_180) {
+        mSourceRect = Rect(config->resolution.width, config->resolution.height);
     } else {
-        mSourceRect = Rect(info->h, info->w);
+        mSourceRect = Rect(config->resolution.height, config->resolution.width);
     }
 
     Rect displayRect = getDisplayRect();
@@ -54,7 +55,7 @@
 
     SurfaceComposerClient::Transaction t;
     t.setDisplaySurface(mDisplayToken, mProducer);
-    t.setDisplayProjection(mDisplayToken, 0, mSourceRect, displayRect);
+    t.setDisplayProjection(mDisplayToken, state->orientation, mSourceRect, displayRect);
     t.setDisplayLayerStack(mDisplayToken, 0);  // default stack
     t.apply();
 
diff --git a/src/VirtualDisplay.h b/src/VirtualDisplay.h
index 02a85c7..cd2356e 100644
--- a/src/VirtualDisplay.h
+++ b/src/VirtualDisplay.h
@@ -23,7 +23,9 @@
 #include <gui/CpuConsumer.h>
 #include <gui/IGraphicBufferProducer.h>
 
+#include <ui/DisplayConfig.h>
 #include <ui/DisplayInfo.h>
+#include <ui/DisplayState.h>
 #include <ui/Rect.h>
 
 using namespace android;
@@ -32,7 +34,8 @@
 
 class VirtualDisplay : public RefBase {
   public:
-    VirtualDisplay(DisplayInfo* info, uint32_t width, uint32_t height,
+    VirtualDisplay(DisplayConfig *config, ui::DisplayState* state,
+                   uint32_t width, uint32_t height,
                    sp<CpuConsumer::FrameAvailableListener> listener);
 
     virtual ~VirtualDisplay();