From d94ad5823b7da7f115e997d12828314e290981f6 Mon Sep 17 00:00:00 2001 From: liyuqian Date: Tue, 7 Jun 2016 14:22:37 -0700 Subject: Implement Raster Backend on Android Viewer App BUG=skia: GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=2041193004 Review-Url: https://codereview.chromium.org/2041193004 --- .../src/main/java/org/skia/viewer/StateAdapter.java | 17 +++++++++++++++++ .../src/main/java/org/skia/viewer/ViewerActivity.java | 8 +++----- 2 files changed, 20 insertions(+), 5 deletions(-) (limited to 'platform_tools') diff --git a/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/StateAdapter.java b/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/StateAdapter.java index d546c7bb3e..5ee68efc3c 100644 --- a/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/StateAdapter.java +++ b/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/StateAdapter.java @@ -1,6 +1,7 @@ package org.skia.viewer; import android.view.LayoutInflater; +import android.view.SurfaceView; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; @@ -30,6 +31,7 @@ public class StateAdapter extends BaseAdapter implements AdapterView.OnItemSelec static final String NAME = "name"; static final String VALUE = "value"; static final String OPTIONS = "options"; + private static final String BACKEND_STATE_NAME = "Backend"; ViewerActivity mViewerActivity; LinearLayout mLayout; @@ -146,6 +148,21 @@ public class StateAdapter extends BaseAdapter implements AdapterView.OnItemSelec stateItem.setTag(null); // Reset the tag to let updateDrawer update this item view. mViewerActivity.onStateChanged(stateName, stateValue); } + + // Due to the current Android limitation, we're required to recreate the SurfaceView for + // switching to/from the Raster backend. + // (Although we can switch between GPU backend without recreating the SurfaceView.) + final Object oldValue = stateItem.getTag(R.integer.value_tag_key); + if (stateName.equals(BACKEND_STATE_NAME) + && oldValue != null && !stateValue.equals(oldValue)) { + LinearLayout mainLayout = (LinearLayout) mViewerActivity.findViewById(R.id.mainLayout); + mainLayout.removeAllViews(); + SurfaceView surfaceView = new SurfaceView(mViewerActivity); + surfaceView.setId(R.id.surfaceView); + surfaceView.getHolder().addCallback(mViewerActivity); + surfaceView.setOnTouchListener(mViewerActivity); + mainLayout.addView(surfaceView); + } } @Override diff --git a/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerActivity.java b/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerActivity.java index ce5bb0deda..0291f5e291 100644 --- a/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerActivity.java +++ b/platform_tools/android/apps/viewer/src/main/java/org/skia/viewer/ViewerActivity.java @@ -32,7 +32,6 @@ public class ViewerActivity private ListView mDrawerList; private StateAdapter mStateAdapter; - private SurfaceView mView; private ViewerApplication mApplication; private native void onSurfaceCreated(long handle, Surface surface); @@ -74,10 +73,9 @@ public class ViewerActivity super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - mView = (SurfaceView) findViewById(R.id.surfaceView); - mView.getHolder().addCallback(this); - - mView.setOnTouchListener(this); + SurfaceView surfaceView = (SurfaceView) findViewById(R.id.surfaceView); + surfaceView.getHolder().addCallback(this); + surfaceView.setOnTouchListener(this); mDrawerLayout = (DrawerLayout) findViewById(R.id.drawerLayout); mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, -- cgit v1.2.3