Support resize in Android Viewer App

Previously, we took out resize because Vulkan didn't support it in
Android. Now Android nyc-dev builds >= 2937079 and nyc-release builds >=
NRD66 supports it so we add it back.

BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2050613003

Review-Url: https://codereview.chromium.org/2050613003
diff --git a/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerApplication.java b/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerApplication.java
index ee1695a..5849724 100644
--- a/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerApplication.java
+++ b/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerApplication.java
@@ -57,6 +57,9 @@
 
     public void setTitle(String title) {
         mTitle = title; // Similar to mStateJsonStr, we have to store this.
+        if (mTitle.startsWith("Viewer: ")) { // Quick hack to shorten the title
+            mTitle = mTitle.replaceFirst("Viewer: ", "");
+        }
         if (mViewerActivity != null) {
             mViewerActivity.runOnUiThread(new Runnable() {
                 @Override
diff --git a/tools/viewer/Viewer.cpp b/tools/viewer/Viewer.cpp
index 7015dad..4996735 100644
--- a/tools/viewer/Viewer.cpp
+++ b/tools/viewer/Viewer.cpp
@@ -53,7 +53,11 @@
                "If a bench does not match any list entry,\n"
                "it is skipped unless some list entry starts with ~");
 DEFINE_string(skps, "skps", "Directory to read skps from.");
+#ifdef SK_BUILD_FOR_ANDROID
+DEFINE_bool(vulkan, false, "Run with Vulkan.");
+#else
 DEFINE_bool(vulkan, true, "Run with Vulkan.");
+#endif
 
 const char *kBackendTypeStrings[sk_app::Window::kBackendTypeCount] = {
     " [OpenGL]",
diff --git a/tools/viewer/sk_app/android/GLWindowContext_android.cpp b/tools/viewer/sk_app/android/GLWindowContext_android.cpp
index a98b555..0b33633 100644
--- a/tools/viewer/sk_app/android/GLWindowContext_android.cpp
+++ b/tools/viewer/sk_app/android/GLWindowContext_android.cpp
@@ -43,11 +43,17 @@
 }
 
 void GLWindowContext_android::onInitializeContext(void* platformData, const DisplayParams& params) {
-    ContextPlatformData_android* androidPlatformData = 
-            reinterpret_cast<ContextPlatformData_android*>(platformData);
+    if (platformData != nullptr) {
+        ContextPlatformData_android* androidPlatformData =
+                reinterpret_cast<ContextPlatformData_android*>(platformData);
+        fNativeWindow = androidPlatformData->fNativeWindow;
+    } else {
+        SkASSERT(fNativeWindow);
+    }
 
-    fWidth = ANativeWindow_getWidth(androidPlatformData->fNativeWindow);
-    fHeight = ANativeWindow_getHeight(androidPlatformData->fNativeWindow);
+
+    fWidth = ANativeWindow_getWidth(fNativeWindow);
+    fHeight = ANativeWindow_getHeight(fNativeWindow);
 
     fDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
 
@@ -81,7 +87,7 @@
     SkASSERT(EGL_NO_CONTEXT != fEGLContext);
 
     fSurface = eglCreateWindowSurface(
-            fDisplay, surfaceConfig, androidPlatformData->fNativeWindow, nullptr);
+            fDisplay, surfaceConfig, fNativeWindow, nullptr);
     SkASSERT(EGL_NO_SURFACE != fSurface);
 
     SkAssertResult(eglMakeCurrent(fDisplay, fSurface, fSurface, fEGLContext));
diff --git a/tools/viewer/sk_app/android/GLWindowContext_android.h b/tools/viewer/sk_app/android/GLWindowContext_android.h
index 85e65be..5f4c031 100644
--- a/tools/viewer/sk_app/android/GLWindowContext_android.h
+++ b/tools/viewer/sk_app/android/GLWindowContext_android.h
@@ -13,6 +13,8 @@
 
 #include <EGL/egl.h>
 
+struct ANativeWindow;
+
 namespace sk_app {
 
 class GLWindowContext_android : public GLWindowContext {
@@ -32,6 +34,9 @@
     EGLDisplay fDisplay;
     EGLContext fEGLContext;
     EGLSurface fSurface;
+
+    // For setDisplayParams and resize which call onInitializeContext with null platformData
+    ANativeWindow* fNativeWindow = nullptr;
 };
 
 
diff --git a/tools/viewer/sk_app/android/RasterWindowContext_android.cpp b/tools/viewer/sk_app/android/RasterWindowContext_android.cpp
index 306f291..3ba5646 100644
--- a/tools/viewer/sk_app/android/RasterWindowContext_android.cpp
+++ b/tools/viewer/sk_app/android/RasterWindowContext_android.cpp
@@ -32,8 +32,12 @@
     fNativeWindow = androidPlatformData->fNativeWindow;
     fWidth = ANativeWindow_getWidth(fNativeWindow);
     fHeight = ANativeWindow_getHeight(fNativeWindow);
+    this->setBuffersGeometry();
+}
+
+void RasterWindowContext_android::setBuffersGeometry() {
     int32_t format;
-    switch(params.fColorType) {
+    switch(fDisplayParams.fColorType) {
         case kRGBA_8888_SkColorType:
             format = WINDOW_FORMAT_RGBA_8888;
             break;
@@ -46,6 +50,17 @@
     ANativeWindow_setBuffersGeometry(fNativeWindow, fWidth, fHeight, format);
 }
 
+void RasterWindowContext_android::setDisplayParams(const DisplayParams& params) {
+    fDisplayParams = params;
+    this->setBuffersGeometry();
+}
+
+void RasterWindowContext_android::resize(uint32_t w, uint32_t h) {
+    fWidth = w;
+    fHeight = h;
+    this->setBuffersGeometry();
+}
+
 sk_sp<SkSurface> RasterWindowContext_android::getBackbufferSurface() {
     if (nullptr == fBackbufferSurface) {
         ANativeWindow_lock(fNativeWindow, &fBuffer, &fBounds);
diff --git a/tools/viewer/sk_app/android/RasterWindowContext_android.h b/tools/viewer/sk_app/android/RasterWindowContext_android.h
index 913b06c..7bb24ba 100644
--- a/tools/viewer/sk_app/android/RasterWindowContext_android.h
+++ b/tools/viewer/sk_app/android/RasterWindowContext_android.h
@@ -23,15 +23,12 @@
     void swapBuffers() override;
 
     bool isValid() override { return SkToBool(fNativeWindow); }
-    void resize(uint32_t w, uint32_t h) override {
-        SkDEBUGFAIL("Resize is currently unsupported.");
-    }
-    void setDisplayParams(const DisplayParams& params) override {
-        SkDEBUGFAIL("setDisplayParams is currently unsupported.");
-    }
+    void resize(uint32_t w, uint32_t h) override;
+    void setDisplayParams(const DisplayParams& params) override;
 
 private:
     RasterWindowContext_android(void* platformData, const DisplayParams& params);
+    void setBuffersGeometry();
     sk_sp<SkSurface> fBackbufferSurface = nullptr;
     ANativeWindow* fNativeWindow = nullptr;
     ANativeWindow_Buffer fBuffer;
diff --git a/tools/viewer/sk_app/android/surface_glue_android.cpp b/tools/viewer/sk_app/android/surface_glue_android.cpp
index 895b0bc..0c1ab0c 100644
--- a/tools/viewer/sk_app/android/surface_glue_android.cpp
+++ b/tools/viewer/sk_app/android/surface_glue_android.cpp
@@ -124,6 +124,7 @@
                 skiaAndroidApp->fNativeWindow = message.fNativeWindow;
                 window_android->initDisplay(skiaAndroidApp->fNativeWindow);
             }
+            window_android->onResize(width, height);
             window_android->setContentRect(0, 0, width, height);
             window_android->paintIfNeeded();
             break;