summaryrefslogtreecommitdiffstats
path: root/android
diff options
context:
space:
mode:
authorXimeng Zu <uznomis@yahoo.com>2017-06-18 16:37:13 -0500
committerTomaž Vajngerl <quikee@gmail.com>2017-07-23 23:00:48 +0200
commit02f3c4848ab52358bfee56c570a19a3a071574f2 (patch)
tree7614b82abc304cea2b4d59de52147a5b53d37219 /android
parentuitest: wait twice as long for blocking actions (diff)
downloadcore-02f3c4848ab52358bfee56c570a19a3a071574f2.tar.gz
core-02f3c4848ab52358bfee56c570a19a3a071574f2.zip
Calc UI on Android Viewer
Adding Calc UI. Two blank views are added as row and column headers. CommonCanvasElement is used to draw header cells on the views. [WIP] Change-Id: I37eaa82805045ab650fd127e54c8421c61a4ea27 Reviewed-on: https://gerrit.libreoffice.org/38936 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Tomaž Vajngerl <quikee@gmail.com> Tested-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'android')
-rw-r--r--android/source/res/layout/activity_main.xml51
-rw-r--r--android/source/res/values/dimens.xml2
-rw-r--r--android/source/src/java/org/libreoffice/LOEvent.java1
-rw-r--r--android/source/src/java/org/libreoffice/LOKitThread.java27
-rw-r--r--android/source/src/java/org/libreoffice/LOKitTileProvider.java30
-rwxr-xr-xandroid/source/src/java/org/libreoffice/LibreOfficeMainActivity.java18
-rw-r--r--android/source/src/java/org/libreoffice/canvas/CalcHeaderCell.java48
-rw-r--r--android/source/src/java/org/libreoffice/overlay/CalcHeadersController.java98
-rw-r--r--android/source/src/java/org/libreoffice/overlay/CalcHeadersView.java95
-rw-r--r--android/source/src/java/org/libreoffice/overlay/DocumentOverlay.java7
-rw-r--r--android/source/src/java/org/libreoffice/overlay/DocumentOverlayView.java8
-rw-r--r--android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java3
12 files changed, 369 insertions, 19 deletions
diff --git a/android/source/res/layout/activity_main.xml b/android/source/res/layout/activity_main.xml
index bfa575b57f36..fb5ba1ef7d32 100644
--- a/android/source/res/layout/activity_main.xml
+++ b/android/source/res/layout/activity_main.xml
@@ -36,22 +36,53 @@
</android.support.design.widget.AppBarLayout>
<RelativeLayout
- android:id="@+id/gecko_layout"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical">
+ android:layout_height="match_parent">
- <org.mozilla.gecko.gfx.LayerView
- android:id="@+id/layer_view"
+ <View
+ android:id="@+id/calc_header_top_left"
+ android:layout_width="@dimen/calc_header_width"
+ android:layout_height="@dimen/calc_header_height"
+ android:visibility="gone"/>
+
+ <org.libreoffice.overlay.CalcHeadersView
+ android:id="@+id/calc_header_column"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/calc_header_height"
+ android:layout_toRightOf="@+id/calc_header_top_left"
+ android:layout_toEndOf="@+id/calc_header_top_left"
+ android:visibility="gone"/>
+
+ <org.libreoffice.overlay.CalcHeadersView
+ android:id="@+id/calc_header_row"
+ android:layout_width="@dimen/calc_header_width"
+ android:layout_height="match_parent"
+ android:layout_below="@+id/calc_header_top_left"
+ android:visibility="gone"/>
+
+ <RelativeLayout
+ android:id="@+id/gecko_layout"
android:layout_width="match_parent"
- android:layout_height="match_parent"/>
+ android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:layout_toRightOf="@+id/calc_header_row"
+ android:layout_toEndOf="@+id/calc_header_row"
+ android:layout_below="@+id/calc_header_column">
+
+ <org.mozilla.gecko.gfx.LayerView
+ android:id="@+id/layer_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"/>
- <org.libreoffice.overlay.DocumentOverlayView
- android:id="@+id/text_cursor_view"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"/>
+ <org.libreoffice.overlay.DocumentOverlayView
+ android:id="@+id/text_cursor_view"
+ android:layout_width="fill_parent"
+ android:layout_height="fill_parent"/>
+
+ </RelativeLayout>
</RelativeLayout>
+
</LinearLayout>
<include layout="@layout/toolbar_bottom"/>
diff --git a/android/source/res/values/dimens.xml b/android/source/res/values/dimens.xml
index 3de476c0cc42..8a153790ac69 100644
--- a/android/source/res/values/dimens.xml
+++ b/android/source/res/values/dimens.xml
@@ -9,4 +9,6 @@
<dimen name="list_item_margin">8dp</dimen>
<dimen name="file_icon_width">32dp</dimen>
<dimen name="toolbar_height">256dp</dimen>
+ <dimen name="calc_header_width">48dp</dimen>
+ <dimen name="calc_header_height">24dp</dimen>
</resources>
diff --git a/android/source/src/java/org/libreoffice/LOEvent.java b/android/source/src/java/org/libreoffice/LOEvent.java
index 14980dca0ec4..7846f7331bbd 100644
--- a/android/source/src/java/org/libreoffice/LOEvent.java
+++ b/android/source/src/java/org/libreoffice/LOEvent.java
@@ -38,6 +38,7 @@ public class LOEvent implements Comparable<LOEvent> {
public static final int SAVE_AS = 17;
public static final int UPDATE_PART_PAGE_RECT = 18;
public static final int UPDATE_ZOOM_CONSTRAINTS = 19;
+ public static final int UPDATE_CALC_HEADERS = 20;
public final int mType;
public int mPriority = 0;
diff --git a/android/source/src/java/org/libreoffice/LOKitThread.java b/android/source/src/java/org/libreoffice/LOKitThread.java
index dac8cc43109c..9ab54c20a1f8 100644
--- a/android/source/src/java/org/libreoffice/LOKitThread.java
+++ b/android/source/src/java/org/libreoffice/LOKitThread.java
@@ -156,6 +156,9 @@ class LOKitThread extends Thread {
mLayerClient.clearAndResetlayers();
redraw();
updatePartPageRectangles();
+ if (mTileProvider.isSpreadsheet()) {
+ updateCalcHeaders();
+ }
}
/**
@@ -170,11 +173,15 @@ class LOKitThread extends Thread {
private void updateZoomConstraints() {
mLayerClient = mContext.getLayerClient();
-
- // Set min zoom to the page width so that you cannot zoom below page width
- // applies to all types of document; in the future spreadsheets may be singled out
- float minZoom = mLayerClient.getViewportMetrics().getWidth()/mTileProvider.getPageWidth();
- mLayerClient.setZoomConstraints(new ZoomConstraints(true, 0.0f, minZoom, 0.0f));
+ if (mTileProvider.isSpreadsheet()) {
+ // Calc has a fixed zoom at 1x and doesn't allow zooming for now
+ mLayerClient.setZoomConstraints(new ZoomConstraints(false, 1f, 0f, 0f));
+ } else {
+ // Set min zoom to the page width so that you cannot zoom below page width
+ // applies to all types of document; in the future spreadsheets may be singled out
+ float minZoom = mLayerClient.getViewportMetrics().getWidth()/mTileProvider.getPageWidth();
+ mLayerClient.setZoomConstraints(new ZoomConstraints(true, 1f, minZoom, 0f));
+ }
}
@@ -343,9 +350,19 @@ class LOKitThread extends Thread {
case LOEvent.UPDATE_ZOOM_CONSTRAINTS:
updateZoomConstraints();
break;
+ case LOEvent.UPDATE_CALC_HEADERS:
+ updateCalcHeaders();
+ break;
+
}
}
+ private void updateCalcHeaders() {
+ LOKitTileProvider tileProvider = (LOKitTileProvider)mTileProvider;
+ String values = tileProvider.getCalcHeaders();
+ mContext.getCalcHeadersController().setHeaders(values);
+ }
+
/**
* Request a change of the handle position.
*/
diff --git a/android/source/src/java/org/libreoffice/LOKitTileProvider.java b/android/source/src/java/org/libreoffice/LOKitTileProvider.java
index 6fb8a9b80671..3278265dfa3f 100644
--- a/android/source/src/java/org/libreoffice/LOKitTileProvider.java
+++ b/android/source/src/java/org/libreoffice/LOKitTileProvider.java
@@ -28,6 +28,7 @@ import java.nio.ByteBuffer;
*/
class LOKitTileProvider implements TileProvider {
private static final String LOGTAG = LOKitTileProvider.class.getSimpleName();
+ private static final float DPI_1X_ZOOM = 96f; // for use in Calc at fixed zoom 1x
private static int TILE_SIZE = 256;
private final float mTileWidth;
private final float mTileHeight;
@@ -53,9 +54,6 @@ class LOKitTileProvider implements TileProvider {
LOKitTileProvider(LibreOfficeMainActivity context, Document.MessageCallback messageCallback, String input) {
mContext = context;
mMessageCallback = messageCallback;
- mDPI = LOKitShell.getDpi(mContext);
- mTileWidth = pixelToTwip(TILE_SIZE, mDPI);
- mTileHeight = pixelToTwip(TILE_SIZE, mDPI);
LibreOfficeKit.putenv("SAL_LOG=+WARN+INFO");
LibreOfficeKit.init(mContext);
@@ -80,6 +78,15 @@ class LOKitTileProvider implements TileProvider {
Log.i(LOGTAG, "====> mDocument = " + mDocument);
+ if(isSpreadsheet()) {
+ mDPI = DPI_1X_ZOOM; // Calc has a fixed zoom at 1x
+ } else {
+ mDPI = LOKitShell.getDpi(mContext);
+ }
+
+ mTileWidth = pixelToTwip(TILE_SIZE, mDPI);
+ mTileHeight = pixelToTwip(TILE_SIZE, mDPI);
+
if (mDocument != null)
mDocument.initializeForRendering();
@@ -124,6 +131,11 @@ class LOKitTileProvider implements TileProvider {
mContext.getToolbarController().disableMenuItem(R.id.action_parts, true);
}
+ // Enable headers for Calc documents
+ if (mDocument.getDocumentType() == Document.DOCTYPE_SPREADSHEET) {
+ mContext.initializeCalcHeaders();
+ }
+
mDocument.setPart(0);
setupDocumentFonts();
@@ -230,6 +242,18 @@ class LOKitTileProvider implements TileProvider {
}
/**
+ * Fetch Calc header information.
+ */
+ public String getCalcHeaders() {
+ long nX = 0;
+ long nY = 0;
+ long nWidth = mDocument.getDocumentWidth();
+ long nHeight = mDocument.getDocumentHeight();
+ return mDocument.getCommandValues(".uno:ViewRowColumnHeaders?x=" + nX + "&y=" + nY
+ + "&width=" + nWidth + "&height=" + nHeight);
+ }
+
+ /**
* @see TileProvider#onSwipeLeft()
*/
@Override
diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
index 8aeb1f5ff816..95c90de9b69a 100755
--- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -33,6 +33,7 @@ import android.widget.ListView;
import android.widget.TabHost;
import android.widget.Toast;
+import org.libreoffice.overlay.CalcHeadersController;
import org.libreoffice.overlay.DocumentOverlay;
import org.libreoffice.storage.DocumentProviderFactory;
import org.libreoffice.storage.IFile;
@@ -91,6 +92,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
private ToolbarController mToolbarController;
private FontController mFontController;
private SearchController mSearchController;
+ private CalcHeadersController mCalcHeadersController;
public GeckoLayerClient getLayerClient() {
return mLayerClient;
@@ -645,6 +647,10 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
return mDocumentOverlay;
}
+ public CalcHeadersController getCalcHeadersController() {
+ return mCalcHeadersController;
+ }
+
public ToolbarController getToolbarController() {
return mToolbarController;
}
@@ -685,6 +691,18 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
}
}
+ public void initializeCalcHeaders() {
+ mCalcHeadersController = new CalcHeadersController(this, mLayerClient.getView());
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ findViewById(R.id.calc_header_top_left).setVisibility(View.VISIBLE);
+ findViewById(R.id.calc_header_row).setVisibility(View.VISIBLE);
+ findViewById(R.id.calc_header_column).setVisibility(View.VISIBLE);
+ }
+ });
+ }
+
private class DocumentPartClickListener implements android.widget.AdapterView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
diff --git a/android/source/src/java/org/libreoffice/canvas/CalcHeaderCell.java b/android/source/src/java/org/libreoffice/canvas/CalcHeaderCell.java
new file mode 100644
index 000000000000..dc46f047c10c
--- /dev/null
+++ b/android/source/src/java/org/libreoffice/canvas/CalcHeaderCell.java
@@ -0,0 +1,48 @@
+package org.libreoffice.canvas;
+
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Paint.Style;
+import android.graphics.RectF;
+import android.text.TextPaint;
+
+public class CalcHeaderCell extends CommonCanvasElement {
+ private TextPaint mTextPaint = new TextPaint();
+ private Paint mBgPaint = new Paint();
+ private RectF mBounds;
+ private String mText;
+
+ public CalcHeaderCell(float left, float top, float width, float height, String text) {
+ mBounds = new RectF(left, top, left + width, top + height);
+ mBgPaint.setStyle(Style.STROKE);
+ mBgPaint.setColor(Color.GRAY);
+ mBgPaint.setAlpha(100); // hard coded for now
+ mTextPaint.setColor(Color.GRAY);
+ mTextPaint.setTextSize(24f); // hard coded for now
+ mText = text;
+ }
+
+ /**
+ * Implement hit test here
+ *
+ * @param x - x coordinate of the
+ * @param y - y coordinate of the
+ */
+ @Override
+ public boolean onHitTest(float x, float y) {
+ return false;
+ }
+
+ /**
+ * Called inside draw if the element is visible. Override this method to
+ * draw the element on the canvas.
+ *
+ * @param canvas - the canvas
+ */
+ @Override
+ public void onDraw(Canvas canvas) {
+ canvas.drawRect(mBounds, mBgPaint);
+ canvas.drawText(mText, mBounds.left, mBounds.bottom, mTextPaint);
+ }
+} \ No newline at end of file
diff --git a/android/source/src/java/org/libreoffice/overlay/CalcHeadersController.java b/android/source/src/java/org/libreoffice/overlay/CalcHeadersController.java
new file mode 100644
index 000000000000..80cb0e5791d8
--- /dev/null
+++ b/android/source/src/java/org/libreoffice/overlay/CalcHeadersController.java
@@ -0,0 +1,98 @@
+package org.libreoffice.overlay;
+
+import android.util.Log;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+import org.libreoffice.LOEvent;
+import org.libreoffice.LOKitShell;
+import org.libreoffice.LibreOfficeMainActivity;
+import org.libreoffice.R;
+import org.mozilla.gecko.gfx.LayerView;
+
+import java.util.ArrayList;
+
+public class CalcHeadersController {
+ private static final String LOGTAG = CalcHeadersController.class.getSimpleName();
+ private static final float DPI_1X_ZOOM = 96f; // Calc uses a fixed zoom a 1x which is 96 dpi
+
+ private final CalcHeadersView mCalcRowHeadersView;
+ private final CalcHeadersView mCalcColumnHeadersView;
+
+ private LibreOfficeMainActivity mContext;
+
+ public CalcHeadersController(LibreOfficeMainActivity context, LayerView layerView) {
+ mContext = context;
+ mContext.getDocumentOverlay().setCalcHeadersController(this);
+ mCalcRowHeadersView = (CalcHeadersView) context.findViewById(R.id.calc_header_row);
+ mCalcColumnHeadersView = (CalcHeadersView) context.findViewById(R.id.calc_header_column);
+ if (mCalcColumnHeadersView == null || mCalcRowHeadersView == null) {
+ Log.e(LOGTAG, "Failed to initialize Calc headers - View is null");
+ } else {
+ mCalcRowHeadersView.initialize(layerView, true);
+ mCalcColumnHeadersView.initialize(layerView, false);
+ }
+ LOKitShell.sendEvent(new LOEvent(LOEvent.UPDATE_CALC_HEADERS));
+ }
+
+ public void setHeaders(String headers) {
+ HeaderInfo parsedHeaders = parseHeaderInfo(headers);
+ if (parsedHeaders != null) {
+ mCalcRowHeadersView.setHeaders(parsedHeaders.rowLabels, parsedHeaders.rowDimens);
+ mCalcColumnHeadersView.setHeaders(parsedHeaders.columnLabels, parsedHeaders.columnDimens);
+ showHeaders();
+ } else {
+ Log.e(LOGTAG, "Parse header info JSON failed.");
+ }
+ }
+
+ public void showHeaders() {
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ mCalcColumnHeadersView.invalidate();
+ mCalcRowHeadersView.invalidate();
+ }
+ });
+ }
+
+ private HeaderInfo parseHeaderInfo(String headers) {
+ HeaderInfo headerInfo = new HeaderInfo();
+ try {
+ JSONObject collectiveResult = new JSONObject(headers);
+ JSONArray rowResult = collectiveResult.getJSONArray("rows");
+ for (int i = 0; i < rowResult.length(); i++) {
+ headerInfo.rowLabels.add(rowResult.getJSONObject(i).getString("text"));
+ headerInfo.rowDimens.add(twipToPixel(rowResult.getJSONObject(i).getLong("size"), DPI_1X_ZOOM));
+ }
+ JSONArray columnResult = collectiveResult.getJSONArray("columns");
+ for (int i = 0; i < columnResult.length(); i++) {
+ headerInfo.columnLabels.add(columnResult.getJSONObject(i).getString("text"));
+ headerInfo.columnDimens.add(twipToPixel(columnResult.getJSONObject(i).getLong("size"), DPI_1X_ZOOM));
+ }
+ return headerInfo;
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+
+ private float twipToPixel(float input, float dpi) {
+ return input / 1440.0f * dpi;
+ }
+
+ private class HeaderInfo {
+ ArrayList<String> rowLabels;
+ ArrayList<Float> rowDimens;
+ ArrayList<String> columnLabels;
+ ArrayList<Float> columnDimens;
+
+ private HeaderInfo() {
+ rowLabels = new ArrayList<String>();
+ rowDimens = new ArrayList<Float>();
+ columnDimens = new ArrayList<Float>();
+ columnLabels = new ArrayList<String>();
+ }
+ }
+}
diff --git a/android/source/src/java/org/libreoffice/overlay/CalcHeadersView.java b/android/source/src/java/org/libreoffice/overlay/CalcHeadersView.java
new file mode 100644
index 000000000000..d15941470bd7
--- /dev/null
+++ b/android/source/src/java/org/libreoffice/overlay/CalcHeadersView.java
@@ -0,0 +1,95 @@
+package org.libreoffice.overlay;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.PointF;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+
+import org.libreoffice.canvas.CalcHeaderCell;
+import org.mozilla.gecko.gfx.ImmutableViewportMetrics;
+import org.mozilla.gecko.gfx.LayerView;
+
+import java.util.ArrayList;
+
+public class CalcHeadersView extends View implements View.OnTouchListener {
+
+ private boolean mInitialized;
+ private LayerView mLayerView;
+ private boolean mIsRow; // true if this is for row headers, false for column
+ private ArrayList<String> mLabels;
+ private ArrayList<Float> mDimens;
+
+ public CalcHeadersView(Context context) {
+ super(context);
+ }
+
+ public CalcHeadersView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public CalcHeadersView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public void initialize(LayerView layerView, boolean isRow) {
+ if (!mInitialized) {
+ setOnTouchListener(this);
+ mLayerView = layerView;
+ mIsRow = isRow;
+
+ mInitialized = true;
+ }
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ super.onDraw(canvas);
+ if (mInitialized && mDimens != null && mLabels != null) {
+ updateHeaders(canvas);
+ }
+ }
+
+ private void updateHeaders(Canvas canvas) {
+ ImmutableViewportMetrics metrics = mLayerView.getViewportMetrics();
+ float zoom = metrics.getZoomFactor();
+ PointF origin = metrics.getOrigin();
+ boolean inRangeOfVisibleHeaders = false; // a helper variable for skipping unnecessary onDraw()'s
+ float top,bottom,left,right;
+ for (int i = 1; i < mLabels.size(); i++) {
+ if (mIsRow) {
+ top = -origin.y + zoom*mDimens.get(i-1);
+ bottom = -origin.y + zoom*mDimens.get(i);
+ if (top <= getHeight() && bottom >= 0) {
+ inRangeOfVisibleHeaders = true;
+ new CalcHeaderCell(0f, top, getWidth(), bottom - top, mLabels.get(i)).onDraw(canvas);
+ } else {
+ if (inRangeOfVisibleHeaders) {
+ break;
+ }
+ }
+ } else {
+ left = -origin.x + zoom*mDimens.get(i-1);
+ right = -origin.x + zoom*mDimens.get(i);
+ if (left <= getWidth() && right >= 0) {
+ new CalcHeaderCell(left, 0f, right - left, getHeight(), mLabels.get(i)).onDraw(canvas);
+ } else {
+ if (inRangeOfVisibleHeaders) {
+ break;
+ }
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return false;
+ }
+
+ public void setHeaders(ArrayList<String> labels, ArrayList<Float> dimens) {
+ mLabels = labels;
+ mDimens = dimens;
+ }
+}
diff --git a/android/source/src/java/org/libreoffice/overlay/DocumentOverlay.java b/android/source/src/java/org/libreoffice/overlay/DocumentOverlay.java
index d9d2b372b714..4809921012bc 100644
--- a/android/source/src/java/org/libreoffice/overlay/DocumentOverlay.java
+++ b/android/source/src/java/org/libreoffice/overlay/DocumentOverlay.java
@@ -8,11 +8,11 @@
*/
package org.libreoffice.overlay;
-import org.libreoffice.LibreOfficeMainActivity;
import android.graphics.RectF;
import android.util.Log;
import org.libreoffice.LOKitShell;
+import org.libreoffice.LibreOfficeMainActivity;
import org.libreoffice.R;
import org.libreoffice.canvas.SelectionHandle;
import org.mozilla.gecko.gfx.Layer;
@@ -237,6 +237,11 @@ public class DocumentOverlay {
public RectF getCurrentCursorPosition() {
return mDocumentOverlayView.getCurrentCursorPosition();
}
+
+ public void setCalcHeadersController(CalcHeadersController calcHeadersController) {
+ mDocumentOverlayView.setCalcHeadersController(calcHeadersController);
+ }
+
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/source/src/java/org/libreoffice/overlay/DocumentOverlayView.java b/android/source/src/java/org/libreoffice/overlay/DocumentOverlayView.java
index 6afd71309d1d..7d5ab1972d39 100644
--- a/android/source/src/java/org/libreoffice/overlay/DocumentOverlayView.java
+++ b/android/source/src/java/org/libreoffice/overlay/DocumentOverlayView.java
@@ -67,6 +67,7 @@ public class DocumentOverlayView extends View implements View.OnTouchListener {
private PageNumberRect mPageNumberRect;
private boolean mPageNumberAvailable = false;
private int previousIndex = 0; // previous page number, used to compare with the current
+ private CalcHeadersController mCalcHeadersController;
public DocumentOverlayView(Context context) {
super(context);
@@ -217,6 +218,9 @@ public class DocumentOverlayView extends View implements View.OnTouchListener {
mGraphicSelection.draw(canvas);
+ if (mCalcHeadersController != null) {
+ mCalcHeadersController.showHeaders();
+ }
}
/**
@@ -450,6 +454,10 @@ public class DocumentOverlayView extends View implements View.OnTouchListener {
public RectF getCurrentCursorPosition() {
return mCursor.mPosition;
}
+
+ public void setCalcHeadersController(CalcHeadersController calcHeadersController) {
+ mCalcHeadersController = calcHeadersController;
+ }
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java b/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
index b834fa0798d5..d3568216c159 100644
--- a/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
+++ b/android/source/src/java/org/mozilla/gecko/gfx/JavaPanZoomController.java
@@ -984,6 +984,9 @@ class JavaPanZoomController
@Override
public boolean onDoubleTap(MotionEvent motionEvent) {
+ if (!mTarget.getZoomConstraints().getAllowDoubleTapZoom()) {
+ return true;
+ }
// Double tap zooms in or out depending on the current zoom factor
PointF pointOfTap = getMotionInDocumentCoordinates(motionEvent);
ImmutableViewportMetrics metrics = getMetrics();