android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java | 17 android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java | 13 android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java | 5 android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java | 62 - android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java | 5 android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java | 85 ++ android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java | 349 +++++----- 7 files changed, 282 insertions(+), 254 deletions(-)
New commits: commit b5c0ecc7c4821df800b69aad0e14f2fddac2be96 Author: Siqi Liu <m...@siqi.fr> Date: Thu Mar 5 14:26:03 2015 +0100 add getPartsCount() to TileProvider Change-Id: I8f1f61110d06333bc1140caf13d9e96e669fc231 diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java index c37fdff..6550cc2 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LOKitTileProvider.java @@ -10,6 +10,7 @@ import org.libreoffice.kit.DirectBufferAllocator; import org.libreoffice.kit.Document; import org.libreoffice.kit.LibreOfficeKit; import org.libreoffice.kit.Office; +import org.libreoffice.R; //import org.mozilla.gecko.TextSelection; //import org.mozilla.gecko.TextSelectionHandle; @@ -19,6 +20,7 @@ import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.IntSize; import org.mozilla.gecko.gfx.LayerView; + import java.nio.ByteBuffer; /** @@ -144,19 +146,22 @@ public class LOKitTileProvider implements TileProvider, Document.MessageCallback } @Override + public int getPartsCount() { + return mDocument.getParts(); + } + + @Override public void onSwipeLeft() { - Log.d(LOGTAG, "onSwipeLeft received"); - if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION - && getCurrentPartNumber() < mDocument.getParts()-1) { + if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION && + getCurrentPartNumber() < getPartsCount()-1) { LOKitShell.sendChangePartEvent(getCurrentPartNumber()+1); } } @Override public void onSwipeRight() { - Log.d(LOGTAG, "onSwipeRight received"); - if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION - && getCurrentPartNumber() > 0) { + if (mDocument.getDocumentType() == Document.DOCTYPE_PRESENTATION && + getCurrentPartNumber() > 0) { LOKitShell.sendChangePartEvent(getCurrentPartNumber()-1); } } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java index cb86ef0..c3cb586 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/MockTileProvider.java @@ -114,6 +114,11 @@ public class MockTileProvider implements TileProvider { } @Override + public int getPartsCount() { + return 0; + } + + @Override public void onSwipeLeft() { } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java index 15a66dd..d7bcc7f 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/TileProvider.java @@ -43,6 +43,11 @@ public interface TileProvider { */ int getCurrentPartNumber(); + /** + * Get the total number of parts. + */ + int getPartsCount(); + Bitmap thumbnail(int size); /** commit da4367b2bd50f12a12b371a95bbeb4251234fb46 Author: Siqi Liu <m...@siqi.fr> Date: Thu Mar 5 13:58:15 2015 +0100 tdf#89174:disable swipe gesture when zoomed in. Change-Id: I0c3a565a3ae276fb60bf99ec32941715f1556127 diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java index 176faa5..0f231b0 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java @@ -9,15 +9,19 @@ import android.view.View.OnTouchListener; import android.util.Log; import org.libreoffice.LOKitShell; +import org.mozilla.gecko.gfx.GeckoLayerClient; +import org.mozilla.gecko.gfx.ImmutableViewportMetrics; public class OnSlideSwipeListener implements OnTouchListener { private static String LOGTAG = OnSlideSwipeListener.class.getName(); private final GestureDetector mGestureDetector; + private GeckoLayerClient mLayerClient; - public OnSlideSwipeListener(Context ctx){ + public OnSlideSwipeListener(Context ctx, GeckoLayerClient client){ mGestureDetector = new GestureDetector(ctx, new GestureListener()); + mLayerClient = client; } private final class GestureListener extends SimpleOnGestureListener { @@ -32,6 +36,16 @@ public class OnSlideSwipeListener implements OnTouchListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velX, float velY) { + // Check if the page is already zoomed-in. + // Disable swiping gesture if that's the case. + ImmutableViewportMetrics viewportMetrics = mLayerClient.getViewportMetrics(); + if (viewportMetrics.viewportRectLeft > viewportMetrics.pageRectLeft || + viewportMetrics.viewportRectRight < viewportMetrics.pageRectRight) { + return false; + } + + // Otherwise, the page is smaller than viewport, perform swipe + // gesture. try { float diffY = e2.getY() - e1.getY(); float diffX = e2.getX() - e1.getX(); diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java index 7a5ff64..c5b24fd 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java @@ -112,7 +112,7 @@ public class LayerView extends FrameLayout { createGLThread(); - setOnTouchListener(new OnSlideSwipeListener(getContext())); + setOnTouchListener(new OnSlideSwipeListener(getContext(), mLayerClient)); } public void show() { commit d39e82008e671ec745230c18000d775d297caf4a Author: Siqi Liu <m...@siqi.fr> Date: Thu Mar 5 13:25:05 2015 +0100 refactor swipegesture to be handled by layerview Change-Id: Id094ffa7972df0477ad26b2fc579fe010e745550 diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java index d19d483..13225c3 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java @@ -145,19 +145,6 @@ public class LibreOfficeMainActivity extends LOAbout { LayerView layerView = (LayerView) findViewById(R.id.layer_view); mLayerClient.setView(layerView); layerView.setInputConnectionHandler(new LOKitInputConnectionHandler()); - layerView.setOnTouchListener(new OnSlideSwipeListener(this) { - @Override - public void onSwipeRight() { - Log.d(LOGTAG, "onSwipeRight"); - LOKitShell.sendSwipeRightEvent(); - } - - @Override - public void onSwipeLeft() { - Log.d(LOGTAG, "onSwipeLeft"); - LOKitShell.sendSwipeLeftEvent(); - } - }); mLayerClient.notifyReady(); } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java similarity index 85% rename from android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java rename to android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java index b1ee37e..176faa5 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/OnSlideSwipeListener.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/OnSlideSwipeListener.java @@ -1,4 +1,4 @@ -package org.libreoffice; +package org.mozilla.gecko; import android.content.Context; import android.view.GestureDetector; @@ -6,8 +6,13 @@ import android.view.GestureDetector.SimpleOnGestureListener; import android.view.MotionEvent; import android.view.View; import android.view.View.OnTouchListener; +import android.util.Log; + +import org.libreoffice.LOKitShell; + public class OnSlideSwipeListener implements OnTouchListener { + private static String LOGTAG = OnSlideSwipeListener.class.getName(); private final GestureDetector mGestureDetector; @@ -48,9 +53,13 @@ public class OnSlideSwipeListener implements OnTouchListener { } public void onSwipeRight() { + Log.d(LOGTAG, "onSwipeRight"); + LOKitShell.sendSwipeRightEvent(); } public void onSwipeLeft() { + Log.d(LOGTAG, "onSwipeLeft"); + LOKitShell.sendSwipeLeftEvent(); } @Override diff --git a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java index 3f0fb78..7a5ff64 100644 --- a/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java +++ b/android/experimental/LOAndroid3/src/java/org/mozilla/gecko/gfx/LayerView.java @@ -28,6 +28,7 @@ import android.widget.FrameLayout; import org.libreoffice.LibreOfficeMainActivity; import org.libreoffice.R; import org.mozilla.gecko.OnInterceptTouchListener; +import org.mozilla.gecko.OnSlideSwipeListener; /** * A view rendered by the layer compositor. @@ -110,347 +111,349 @@ public class LayerView extends FrameLayout { setFocusableInTouchMode(true); createGLThread(); + + setOnTouchListener(new OnSlideSwipeListener(getContext())); } public void show() { - // Fix this if TextureView support is turned back on above - mSurfaceView.setVisibility(View.VISIBLE); + // Fix this if TextureView support is turned back on above + mSurfaceView.setVisibility(View.VISIBLE); } public void hide() { - // Fix this if TextureView support is turned back on above - mSurfaceView.setVisibility(View.INVISIBLE); + // Fix this if TextureView support is turned back on above + mSurfaceView.setVisibility(View.INVISIBLE); } public void destroy() { - if (mLayerClient != null) { - mLayerClient.destroy(); - } - if (mRenderer != null) { - mRenderer.destroy(); - } + if (mLayerClient != null) { + mLayerClient.destroy(); + } + if (mRenderer != null) { + mRenderer.destroy(); + } } public void setTouchIntercepter(final OnInterceptTouchListener touchIntercepter) { - // this gets run on the gecko thread, but for thread safety we want the assignment - // on the UI thread. - post(new Runnable() { - public void run() { - mTouchIntercepter = touchIntercepter; - } - }); + // this gets run on the gecko thread, but for thread safety we want the assignment + // on the UI thread. + post(new Runnable() { + public void run() { + mTouchIntercepter = touchIntercepter; + } + }); } public void setInputConnectionHandler(InputConnectionHandler inputConnectionHandler) { - mInputConnectionHandler = inputConnectionHandler; + mInputConnectionHandler = inputConnectionHandler; } @Override public boolean onTouchEvent(MotionEvent event) { - if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { - requestFocus(); - } + if (event.getActionMasked() == MotionEvent.ACTION_DOWN) { + requestFocus(); + } - if (mTouchIntercepter != null && mTouchIntercepter.onInterceptTouchEvent(this, event)) { - return true; - } - if (mPanZoomController != null && mPanZoomController.onTouchEvent(event)) { - return true; - } - if (mTouchIntercepter != null && mTouchIntercepter.onTouch(this, event)) { - return true; - } - return false; + if (mTouchIntercepter != null && mTouchIntercepter.onInterceptTouchEvent(this, event)) { + return true; + } + if (mPanZoomController != null && mPanZoomController.onTouchEvent(event)) { + return true; + } + if (mTouchIntercepter != null && mTouchIntercepter.onTouch(this, event)) { + return true; + } + return false; } @Override public boolean onHoverEvent(MotionEvent event) { - if (mTouchIntercepter != null && mTouchIntercepter.onTouch(this, event)) { - return true; - } - return false; + if (mTouchIntercepter != null && mTouchIntercepter.onTouch(this, event)) { + return true; + } + return false; } @Override public boolean onGenericMotionEvent(MotionEvent event) { - if (mPanZoomController != null && mPanZoomController.onMotionEvent(event)) { - return true; - } - return false; + if (mPanZoomController != null && mPanZoomController.onMotionEvent(event)) { + return true; + } + return false; } public GeckoLayerClient getLayerClient() { return mLayerClient; } public PanZoomController getPanZoomController() { return mPanZoomController; } public void setViewportSize(IntSize size) { - mLayerClient.setViewportSize(new FloatSize(size)); + mLayerClient.setViewportSize(new FloatSize(size)); } public ImmutableViewportMetrics getViewportMetrics() { - return mLayerClient.getViewportMetrics(); + return mLayerClient.getViewportMetrics(); } @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { - if (mInputConnectionHandler != null) - return mInputConnectionHandler.onCreateInputConnection(outAttrs); - return null; + if (mInputConnectionHandler != null) + return mInputConnectionHandler.onCreateInputConnection(outAttrs); + return null; } @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { - if (mInputConnectionHandler != null) - return mInputConnectionHandler.onKeyPreIme(keyCode, event); - return false; + if (mInputConnectionHandler != null) + return mInputConnectionHandler.onKeyPreIme(keyCode, event); + return false; } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if (mInputConnectionHandler != null) - return mInputConnectionHandler.onKeyDown(keyCode, event); - return false; + if (mInputConnectionHandler != null) + return mInputConnectionHandler.onKeyDown(keyCode, event); + return false; } @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { - if (mInputConnectionHandler != null) - return mInputConnectionHandler.onKeyLongPress(keyCode, event); - return false; + if (mInputConnectionHandler != null) + return mInputConnectionHandler.onKeyLongPress(keyCode, event); + return false; } @Override public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { - if (mInputConnectionHandler != null) - return mInputConnectionHandler.onKeyMultiple(keyCode, repeatCount, event); - return false; + if (mInputConnectionHandler != null) + return mInputConnectionHandler.onKeyMultiple(keyCode, repeatCount, event); + return false; } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { - if (mInputConnectionHandler != null) - return mInputConnectionHandler.onKeyUp(keyCode, event); - return false; + if (mInputConnectionHandler != null) + return mInputConnectionHandler.onKeyUp(keyCode, event); + return false; } public boolean isIMEEnabled() { - /*if (mInputConnectionHandler != null) { - return mInputConnectionHandler.isIMEEnabled(); - }*/ - return false; + /*if (mInputConnectionHandler != null) { + return mInputConnectionHandler.isIMEEnabled(); + }*/ + return false; } public void requestRender() { - if (mListener != null) { - mListener.renderRequested(); - } + if (mListener != null) { + mListener.renderRequested(); + } } public void addLayer(Layer layer) { - mRenderer.addLayer(layer); + mRenderer.addLayer(layer); } public void removeLayer(Layer layer) { - mRenderer.removeLayer(layer); + mRenderer.removeLayer(layer); } public int getMaxTextureSize() { - return mRenderer.getMaxTextureSize(); + return mRenderer.getMaxTextureSize(); } public void setLayerRenderer(LayerRenderer renderer) { - mRenderer = renderer; + mRenderer = renderer; } public LayerRenderer getLayerRenderer() { - return mRenderer; + return mRenderer; } /* paintState must be a PAINT_xxx constant. The state will only be changed * if paintState represents a state that occurs after the current state. */ public void setPaintState(int paintState) { - if (paintState > mPaintState) { - Log.d(LOGTAG, "LayerView paint state set to " + paintState); - mPaintState = paintState; - } + if (paintState > mPaintState) { + Log.d(LOGTAG, "LayerView paint state set to " + paintState); + mPaintState = paintState; + } } public int getPaintState() { - return mPaintState; + return mPaintState; } public LayerRenderer getRenderer() { - return mRenderer; + return mRenderer; } public void setListener(Listener listener) { - mListener = listener; + mListener = listener; } Listener getListener() { - return mListener; + return mListener; } public GLController getGLController() { - return mGLController; + return mGLController; } public Bitmap getDrawable(String name) { - Context context = getContext(); - Resources resources = context.getResources(); - String packageName = resources.getResourcePackageName(R.id.dummy_id_for_package_name_resolution); - int resourceID = resources.getIdentifier(name, "drawable", packageName); - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inScaled = false; - return BitmapFactory.decodeResource(context.getResources(), resourceID, options); + Context context = getContext(); + Resources resources = context.getResources(); + String packageName = resources.getResourcePackageName(R.id.dummy_id_for_package_name_resolution); + int resourceID = resources.getIdentifier(name, "drawable", packageName); + BitmapFactory.Options options = new BitmapFactory.Options(); + options.inScaled = false; + return BitmapFactory.decodeResource(context.getResources(), resourceID, options); } Bitmap getBackgroundPattern() { - return getDrawable("background"); + return getDrawable("background"); } Bitmap getShadowPattern() { - return getDrawable("shadow"); + return getDrawable("shadow"); } private void onSizeChanged(int width, int height) { - mGLController.surfaceChanged(width, height); + mGLController.surfaceChanged(width, height); - mLayerClient.setViewportSize(new FloatSize(width, height)); + mLayerClient.setViewportSize(new FloatSize(width, height)); - if (mListener != null) { - mListener.surfaceChanged(width, height); - } + if (mListener != null) { + mListener.surfaceChanged(width, height); + } } private void onDestroyed() { - mGLController.surfaceDestroyed(); + mGLController.surfaceDestroyed(); - if (mListener != null) { - mListener.compositionPauseRequested(); - } + if (mListener != null) { + mListener.compositionPauseRequested(); + } } public Object getNativeWindow() { - if (mSurfaceView != null) - return mSurfaceView.getHolder(); + if (mSurfaceView != null) + return mSurfaceView.getHolder(); - return mTextureView.getSurfaceTexture(); + return mTextureView.getSurfaceTexture(); } /** This function is invoked by Gecko (compositor thread) via JNI; be careful when modifying signature. */ public static GLController registerCxxCompositor() { - try { - LayerView layerView = LibreOfficeMainActivity.mAppContext.getLayerClient().getView(); - layerView.mListener.compositorCreated(); - return layerView.getGLController(); - } catch (Exception e) { - Log.e(LOGTAG, "Error registering compositor!", e); - return null; - } + try { + LayerView layerView = LibreOfficeMainActivity.mAppContext.getLayerClient().getView(); + layerView.mListener.compositorCreated(); + return layerView.getGLController(); + } catch (Exception e) { + Log.e(LOGTAG, "Error registering compositor!", e); + return null; + } } public interface Listener { - void compositorCreated(); - void renderRequested(); - void compositionPauseRequested(); - void compositionResumeRequested(int width, int height); - void surfaceChanged(int width, int height); + void compositorCreated(); + void renderRequested(); + void compositionPauseRequested(); + void compositionResumeRequested(int width, int height); + void surfaceChanged(int width, int height); } private class SurfaceListener implements SurfaceHolder.Callback { - public void surfaceChanged(SurfaceHolder holder, int format, int width, - int height) { - onSizeChanged(width, height); - } + public void surfaceChanged(SurfaceHolder holder, int format, int width, + int height) { + onSizeChanged(width, height); + } - public void surfaceCreated(SurfaceHolder holder) { - if (mRenderControllerThread != null) { - mRenderControllerThread.surfaceCreated(); + public void surfaceCreated(SurfaceHolder holder) { + if (mRenderControllerThread != null) { + mRenderControllerThread.surfaceCreated(); + } } - } - public void surfaceDestroyed(SurfaceHolder holder) { - onDestroyed(); - } + public void surfaceDestroyed(SurfaceHolder holder) { + onDestroyed(); + } } @Override protected void onLayout(boolean changed, int left, int top, int right, int bottom) { - super.onLayout(changed, left, top, right, bottom); - if (changed) { - setViewportSize(new IntSize(right - left, bottom - top)); - } + super.onLayout(changed, left, top, right, bottom); + if (changed) { + setViewportSize(new IntSize(right - left, bottom - top)); + } } private class SurfaceTextureListener implements TextureView.SurfaceTextureListener { - public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { - // We don't do this for surfaceCreated above because it is always followed by a surfaceChanged, - // but that is not the case here. - if (mRenderControllerThread != null) { - mRenderControllerThread.surfaceCreated(); + public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) { + // We don't do this for surfaceCreated above because it is always followed by a surfaceChanged, + // but that is not the case here. + if (mRenderControllerThread != null) { + mRenderControllerThread.surfaceCreated(); + } + onSizeChanged(width, height); } - onSizeChanged(width, height); - } - public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { - onDestroyed(); - return true; // allow Android to call release() on the SurfaceTexture, we are done drawing to it - } + public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) { + onDestroyed(); + return true; // allow Android to call release() on the SurfaceTexture, we are done drawing to it + } - public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { - onSizeChanged(width, height); - } + public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) { + onSizeChanged(width, height); + } - public void onSurfaceTextureUpdated(SurfaceTexture surface) { - } + public void onSurfaceTextureUpdated(SurfaceTexture surface) { + } } private RenderControllerThread mRenderControllerThread; public synchronized void createGLThread() { - if (mRenderControllerThread != null) { - throw new LayerViewException ("createGLThread() called with a GL thread already in place!"); - } + if (mRenderControllerThread != null) { + throw new LayerViewException ("createGLThread() called with a GL thread already in place!"); + } - Log.e(LOGTAG, "### Creating GL thread!"); - mRenderControllerThread = new RenderControllerThread(mGLController); - mRenderControllerThread.start(); - setListener(mRenderControllerThread); - notifyAll(); + Log.e(LOGTAG, "### Creating GL thread!"); + mRenderControllerThread = new RenderControllerThread(mGLController); + mRenderControllerThread.start(); + setListener(mRenderControllerThread); + notifyAll(); } public synchronized Thread destroyGLThread() { - // Wait for the GL thread to be started. - Log.e(LOGTAG, "### Waiting for GL thread to be created..."); - while (mRenderControllerThread == null) { - try { - wait(); - } catch (InterruptedException e) { - throw new RuntimeException(e); + // Wait for the GL thread to be started. + Log.e(LOGTAG, "### Waiting for GL thread to be created..."); + while (mRenderControllerThread == null) { + try { + wait(); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } } - } - Log.e(LOGTAG, "### Destroying GL thread!"); - Thread thread = mRenderControllerThread; - mRenderControllerThread.shutdown(); - setListener(null); - mRenderControllerThread = null; - return thread; + Log.e(LOGTAG, "### Destroying GL thread!"); + Thread thread = mRenderControllerThread; + mRenderControllerThread.shutdown(); + setListener(null); + mRenderControllerThread = null; + return thread; } public static class LayerViewException extends RuntimeException { - public static final long serialVersionUID = 1L; + public static final long serialVersionUID = 1L; - LayerViewException(String e) { - super(e); - } + LayerViewException(String e) { + super(e); + } } public void setFullScreen(boolean fullScreen) { - mFullScreen = fullScreen; + mFullScreen = fullScreen; } public boolean isFullScreen() { - return mFullScreen; + return mFullScreen; } } _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits