diff options
author | Siqi Liu <me@siqi.fr> | 2015-04-13 16:22:49 +0200 |
---|---|---|
committer | Siqi Liu <me@siqi.fr> | 2015-04-13 16:22:49 +0200 |
commit | cc54da22377feef44e1aa48a92d9b4c86eda7577 (patch) | |
tree | 0a9406b68b1d1cf496e4730acf5ac6c6982b6811 /android | |
parent | b3f42066e705c0bb313a4e36f0fb617fc1818c0d (diff) |
java part handles received statechange callback
Diffstat (limited to 'android')
5 files changed, 109 insertions, 3 deletions
diff --git a/android/Bootstrap/src/org/libreoffice/kit/Document.java b/android/Bootstrap/src/org/libreoffice/kit/Document.java index 5d97656879cf..6c0ee547ba4a 100644 --- a/android/Bootstrap/src/org/libreoffice/kit/Document.java +++ b/android/Bootstrap/src/org/libreoffice/kit/Document.java @@ -31,6 +31,15 @@ public class Document { public static final int MOUSE_BUTTON_UP = 1; public static final int MOUSE_MOVE = 2; + + /** + * State change types + */ + public static final int BOLD = 0; + public static final int ITALIC = 1; + public static final int UNDERLINE = 2; + public static final int STRIKEOUT = 3; + /** * Callback message types */ @@ -42,6 +51,7 @@ public class Document { public static final int CALLBACK_CURSOR_VISIBLE = 5; public static final int CALLBACK_GRAPHIC_SELECTION = 6; public static final int CALLBACK_HYPERLINK_CLICKED = 7; + public static final int CALLBACK_STATE_CHANGED = 8; /** * Set text selection types diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java index 0c6710396677..385fab5123ba 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/InvalidationHandler.java @@ -68,11 +68,24 @@ public class InvalidationHandler implements Document.MessageCallback { if (!payload.startsWith("http://") && !payload.startsWith("https://")) { payload = "http://" + payload; } - Intent urlIntent = new Intent(Intent.ACTION_VIEW); urlIntent.setData(Uri.parse(payload)); LibreOfficeMainActivity.mAppContext.startActivity(urlIntent); break; + case Document.CALLBACK_STATE_CHANGED: + Log.d("Document.CALLBACK_STATE_CHANGED: " + payload); + String[] parts = payload.split(":"); + boolean pressed = Boolean.parseBoolean(parts[1]); + if (parts[0].equals("Bold")) { + LOKitShell.getToolbarController().onToggleStateChanged(Document.BOLD, pressed); + } else if (parts[0].equals("Italic")) { + LOKitShell.getToolbarController().onToggleStateChanged(Document.ITALIC, pressed); + } else if (parts[0].equals("Underline")) { + LOKitShell.getToolbarController().onToggleStateChanged(Document.UNDERLINE, pressed); + } else if (parts[0].equals("Strikeout")) { + LOKitShell.getToolbarController().onToggleStateChanged(Document.STRIKEOUT, pressed); + } + break; } } diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java index 61ec01453a1a..1a8c97012d2a 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/LibreOfficeMainActivity.java @@ -19,6 +19,7 @@ import android.widget.ListView; import android.widget.Toast; import org.libreoffice.overlay.DocumentOverlay; + import org.mozilla.gecko.ZoomConstraints; import org.mozilla.gecko.gfx.GeckoLayerClient; import org.mozilla.gecko.gfx.LayerView; @@ -69,6 +70,7 @@ public class LibreOfficeMainActivity extends ActionBarActivity { public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); + mToolbarController.setOptionMenu(menu); return super.onCreateOptionsMenu(menu); } @@ -141,7 +143,7 @@ public class LibreOfficeMainActivity extends ActionBarActivity { Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); - mToolbarController = new ToolbarController(getSupportActionBar(), toolbar); + mToolbarController = new ToolbarController(this, getSupportActionBar(), toolbar); toolbar.setNavigationOnClickListener(new View.OnClickListener() { @Override @@ -176,6 +178,8 @@ public class LibreOfficeMainActivity extends ActionBarActivity { // create TextCursorLayer mDocumentOverlay = new DocumentOverlay(mAppContext, layerView); + + } private boolean copyFileToTemp() { diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/ToolbarController.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/ToolbarController.java index 358617f208aa..34eff3fc3d9c 100644 --- a/android/experimental/LOAndroid3/src/java/org/libreoffice/ToolbarController.java +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/ToolbarController.java @@ -8,22 +8,77 @@ */ package org.libreoffice; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; import android.support.v7.app.ActionBar; import android.support.v7.widget.Toolbar; +import android.util.Log; +import android.view.Menu; +import android.view.MenuItem; + +import org.libreoffice.canvas.ImageUtils; +import org.libreoffice.kit.Document; /** * Controls the changes to the toolbar. */ public class ToolbarController { + private static final String LOGTAG = ToolbarController.class.getSimpleName(); private final Toolbar mToolbar; private final ActionBar mActionBar; + private Menu mOptionsMenu; + private Context mContext; - public ToolbarController(ActionBar actionBar, Toolbar toolbar) { + public ToolbarController(Context context, ActionBar actionBar, Toolbar toolbar) { mToolbar = toolbar; mActionBar = actionBar; + mContext = context; switchToViewMode(); } + public void onToggleStateChanged(int type, boolean pressed) { + MenuItem menuItem = null; + Bitmap icon = null; + switch (type) { + case Document.BOLD: + menuItem = mOptionsMenu.findItem(R.id.action_bold); + icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.action_bold); + break; + case Document.ITALIC: + menuItem = mOptionsMenu.findItem(R.id.action_italic); + icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.action_italic); + break; + case Document.UNDERLINE: + menuItem = mOptionsMenu.findItem(R.id.action_underline); + icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.action_underline); + break; + case Document.STRIKEOUT: + menuItem = mOptionsMenu.findItem(R.id.action_strikeout); + icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.action_strikeout); + break; + default: + Log.e(LOGTAG, "Uncaptured state change type: " + type); + return; + } + + if (menuItem == null) { + Log.e(LOGTAG, "MenuItem not found."); + return; + } + + if (pressed) { + icon = ImageUtils.bitmapToPressed(icon); + } + + menuItem.setIcon(new BitmapDrawable(mContext.getResources(), icon)); + } + + public void setOptionMenu(Menu menu) { + mOptionsMenu = menu; + } + /** * Change the toolbar to edit mode. */ diff --git a/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/ImageUtils.java b/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/ImageUtils.java new file mode 100644 index 000000000000..fd62444c41be --- /dev/null +++ b/android/experimental/LOAndroid3/src/java/org/libreoffice/canvas/ImageUtils.java @@ -0,0 +1,24 @@ +package org.libreoffice.canvas; + +import android.graphics.Bitmap; +import android.graphics.Color; + +public class ImageUtils { + /** + * Convert transparent pixels to gray ones. + */ + public static Bitmap bitmapToPressed(Bitmap input) { + Bitmap op = Bitmap.createBitmap(input.getWidth(), input.getHeight(), input.getConfig()); + for(int i=0; i<op.getWidth(); i++){ + for(int j=0; j<op.getHeight(); j++){ + int p = input.getPixel(i, j); + // assign gray color if the pixel in input is transparent. + int newColor = Color.alpha(p) == 0 ? Color.argb(255, 200, 200, 200) : p; + op.setPixel(i, j, newColor); + } + } + + return op; + } +} +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |