summaryrefslogtreecommitdiffstats
path: root/android/source/src/java
diff options
context:
space:
mode:
authorXimeng Zu <uznomis@yahoo.com>2017-04-24 22:30:17 -0500
committerTomaž Vajngerl <quikee@gmail.com>2018-07-15 12:47:11 +0200
commit7c2d92ab63834f124c32ea49178974432159d980 (patch)
treeca68375de704b535c79db357d88735bea000941c /android/source/src/java
parentaccessibility : move ensureIsAlive outside of implGetText and implGetLocale (diff)
downloadcore-7c2d92ab63834f124c32ea49178974432159d980.tar.gz
core-7c2d92ab63834f124c32ea49178974432159d980.zip
Developer Mode
Added an settings option to enable Developer Mode, in which you can send UNO commands from the Viewer. You can also add properties to the command. Change-Id: I76cbb55771cdd5cea89da65ddf67e48e12745b41 Reviewed-on: https://gerrit.libreoffice.org/37045 Tested-by: Jenkins Reviewed-by: Tomaž Vajngerl <quikee@gmail.com>
Diffstat (limited to 'android/source/src/java')
-rw-r--r--android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java73
-rw-r--r--android/source/src/java/org/libreoffice/ToolbarController.java12
-rw-r--r--android/source/src/java/org/libreoffice/UNOCommandsController.java85
3 files changed, 157 insertions, 13 deletions
diff --git a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
index e65d6c31e51a..e6fbf26c20f3 100644
--- a/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
+++ b/android/source/src/java/org/libreoffice/LibreOfficeMainActivity.java
@@ -62,6 +62,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
private static final String DEFAULT_DOC_PATH = "/assets/example.odt";
private static final String ENABLE_EXPERIMENTAL_PREFS_KEY = "ENABLE_EXPERIMENTAL";
private static final String ASSETS_EXTRACTED_PREFS_KEY = "ASSETS_EXTRACTED";
+ private static final String ENABLE_DEVELOPER_PREFS_KEY = "ENABLE_DEVELOPER";
//TODO "public static" is a temporary workaround
public static LOKitThread loKitThread;
@@ -69,6 +70,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
private GeckoLayerClient mLayerClient;
private static boolean mIsExperimentalMode;
+ private static boolean mIsDeveloperMode;
private int providerId;
private URI documentUri;
@@ -93,6 +95,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
private ToolbarController mToolbarController;
private FontController mFontController;
private SearchController mSearchController;
+ private UNOCommandsController mUNOCommandsController;
private CalcHeadersController mCalcHeadersController;
private boolean mIsSpreadsheet;
private LOKitTileProvider mTileProvider;
@@ -108,6 +111,10 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
return mIsExperimentalMode;
}
+ public static boolean isDeveloperMode() {
+ return mIsDeveloperMode;
+ }
+
public boolean usesTemporaryFile() {
return mTempFile != null;
}
@@ -116,6 +123,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
private boolean isFormattingToolbarOpen = false;
private boolean isSearchToolbarOpen = false;
private static boolean isDocumentChanged = false;
+ private boolean isUNOCommandsToolbarOpen = false;
public boolean isNewDocument = false;
private long lastModified = 0;
@@ -127,12 +135,8 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
SettingsListenerModel.getInstance().setListener(this);
SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
mIsExperimentalMode = sPrefs.getBoolean(ENABLE_EXPERIMENTAL_PREFS_KEY, false);
+ updatePreferences();
- if (sPrefs.getInt(ASSETS_EXTRACTED_PREFS_KEY, 0) != BuildConfig.VERSION_CODE) {
- if(copyFromAssets(getAssets(), "unpack", getApplicationInfo().dataDir)) {
- sPrefs.edit().putInt(ASSETS_EXTRACTED_PREFS_KEY, BuildConfig.VERSION_CODE).apply();
- }
- }
setContentView(R.layout.activity_main);
toolbarTop = findViewById(R.id.toolbar);
@@ -149,6 +153,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
mFontController = new FontController(this);
mSearchController = new SearchController(this);
+ mUNOCommandsController = new UNOCommandsController(this);
loKitThread = new LOKitThread(this);
loKitThread.start();
@@ -255,6 +260,17 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
toolbarBackColorPickerBottomSheetBehavior.setHideable(true);
}
+ private void updatePreferences() {
+ SharedPreferences sPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+ mIsExperimentalMode = sPrefs.getBoolean(ENABLE_EXPERIMENTAL_PREFS_KEY, false);
+ mIsDeveloperMode = sPrefs.getBoolean(ENABLE_DEVELOPER_PREFS_KEY, false);
+ if (sPrefs.getInt(ASSETS_EXTRACTED_PREFS_KEY, 0) != BuildConfig.VERSION_CODE) {
+ if(copyFromAssets(getAssets(), "unpack", getApplicationInfo().dataDir)) {
+ sPrefs.edit().putInt(ASSETS_EXTRACTED_PREFS_KEY, BuildConfig.VERSION_CODE).apply();
+ }
+ }
+ }
+
// Loads a new Document
private void loadNewDocument(String newFilePath, String newDocumentType) {
mInputFile = new File(newFilePath);
@@ -375,9 +391,11 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
super.onResume();
Log.i(LOGTAG, "onResume..");
// check for config change
- boolean bEnableExperimental = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).getBoolean(ENABLE_EXPERIMENTAL_PREFS_KEY, false);
- if (bEnableExperimental != mIsExperimentalMode) {
- mIsExperimentalMode = bEnableExperimental;
+ updatePreferences();
+ if (mToolbarController.getEditModeStatus() && isExperimentalMode()) {
+ mToolbarController.switchToEditMode();
+ } else {
+ mToolbarController.switchToViewMode();
}
}
@@ -510,6 +528,7 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
isKeyboardOpen=true;
isSearchToolbarOpen=false;
isFormattingToolbarOpen=false;
+ isUNOCommandsToolbarOpen=false;
hideBottomToolbar();
}
@@ -565,8 +584,10 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
toolbarColorPickerBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
toolbarBackColorPickerBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
findViewById(R.id.search_toolbar).setVisibility(View.GONE);
+ findViewById(R.id.UNO_commands_toolbar).setVisibility(View.GONE);
isFormattingToolbarOpen=false;
isSearchToolbarOpen=false;
+ isUNOCommandsToolbarOpen=false;
}
});
}
@@ -576,14 +597,17 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
@Override
public void run() {
if (isFormattingToolbarOpen) {
- hideBottomToolbar();
+ hideFormattingToolbar();
} else {
showBottomToolbar();
findViewById(R.id.search_toolbar).setVisibility(View.GONE);
findViewById(R.id.formatting_toolbar).setVisibility(View.VISIBLE);
+ findViewById(R.id.search_toolbar).setVisibility(View.GONE);
+ findViewById(R.id.UNO_commands_toolbar).setVisibility(View.GONE);
hideSoftKeyboardDirect();
isSearchToolbarOpen=false;
isFormattingToolbarOpen=true;
+ isUNOCommandsToolbarOpen=false;
}
}
@@ -611,9 +635,11 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
toolbarColorPickerBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
toolbarBackColorPickerBottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
findViewById(R.id.search_toolbar).setVisibility(View.VISIBLE);
+ findViewById(R.id.UNO_commands_toolbar).setVisibility(View.GONE);
hideSoftKeyboardDirect();
isFormattingToolbarOpen=false;
isSearchToolbarOpen=true;
+ isUNOCommandsToolbarOpen=false;
}
}
});
@@ -628,6 +654,35 @@ public class LibreOfficeMainActivity extends AppCompatActivity implements Settin
});
}
+ public void showUNOCommandsToolbar() {
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ if(isUNOCommandsToolbarOpen){
+ hideUNOCommandsToolbar();
+ }else{
+ showBottomToolbar();
+ findViewById(R.id.formatting_toolbar).setVisibility(View.GONE);
+ findViewById(R.id.search_toolbar).setVisibility(View.GONE);
+ findViewById(R.id.UNO_commands_toolbar).setVisibility(View.VISIBLE);
+ hideSoftKeyboardDirect();
+ isFormattingToolbarOpen=false;
+ isSearchToolbarOpen=false;
+ isUNOCommandsToolbarOpen=true;
+ }
+ }
+ });
+ }
+
+ public void hideUNOCommandsToolbar() {
+ LOKitShell.getMainHandler().post(new Runnable() {
+ @Override
+ public void run() {
+ hideBottomToolbar();
+ }
+ });
+ }
+
public void showProgressSpinner() {
findViewById(R.id.loadingPanel).setVisibility(View.VISIBLE);
}
diff --git a/android/source/src/java/org/libreoffice/ToolbarController.java b/android/source/src/java/org/libreoffice/ToolbarController.java
index 21e3e5ca7be2..146be9fdfd7c 100644
--- a/android/source/src/java/org/libreoffice/ToolbarController.java
+++ b/android/source/src/java/org/libreoffice/ToolbarController.java
@@ -72,12 +72,16 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
void switchToEditMode() {
if (!LOKitShell.isEditingEnabled())
return;
-
// Ensure the change is done on UI thread
LOKitShell.getMainHandler().post(new Runnable() {
@Override
public void run() {
mMainMenu.setGroupVisible(R.id.group_edit_actions, true);
+ if (!LibreOfficeMainActivity.isDeveloperMode() && mMainMenu.findItem(R.id.action_UNO_commands) != null) {
+ mMainMenu.findItem(R.id.action_UNO_commands).setVisible(false);
+ } else {
+ mMainMenu.findItem(R.id.action_UNO_commands).setVisible(true);
+ }
mToolbarTop.setNavigationIcon(R.drawable.ic_check);
mToolbarTop.setLogo(null);
setEditModeOn(true);
@@ -131,9 +135,6 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
* Change the toolbar to view mode.
*/
void switchToViewMode() {
- if (!LOKitShell.isEditingEnabled())
- return;
-
// Ensure the change is done on UI thread
LOKitShell.getMainHandler().post(new Runnable() {
@Override
@@ -211,6 +212,9 @@ public class ToolbarController implements Toolbar.OnMenuItemClickListener {
LOKitShell.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));
mContext.setDocumentChanged(true);
return true;
+ case R.id.action_UNO_commands:
+ mContext.showUNOCommandsToolbar();
+ return true;
}
return false;
}
diff --git a/android/source/src/java/org/libreoffice/UNOCommandsController.java b/android/source/src/java/org/libreoffice/UNOCommandsController.java
new file mode 100644
index 000000000000..e61d3266ac1c
--- /dev/null
+++ b/android/source/src/java/org/libreoffice/UNOCommandsController.java
@@ -0,0 +1,85 @@
+/*
+ * This file is part of the LibreOffice project.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/.
+ */
+package org.libreoffice;
+
+import android.content.DialogInterface;
+import android.support.v7.app.AlertDialog;
+import android.text.method.ScrollingMovementMethod;
+import android.view.View;
+import android.widget.EditText;
+import android.widget.Scroller;
+import android.widget.TextView;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import static org.libreoffice.SearchController.addProperty;
+
+class UNOCommandsController implements View.OnClickListener {
+ private LibreOfficeMainActivity mActivity;
+ private JSONObject mRootJSON = new JSONObject();
+
+
+ UNOCommandsController(LibreOfficeMainActivity activity) {
+ mActivity = activity;
+
+ activity.findViewById(R.id.button_send_UNO_commands).setOnClickListener(this);
+ activity.findViewById(R.id.button_send_UNO_commands_clear).setOnClickListener(this);
+ activity.findViewById(R.id.button_send_UNO_commands_show).setOnClickListener(this);
+ activity.findViewById(R.id.button_add_property).setOnClickListener(this);
+ }
+
+ @Override
+ public void onClick(View view) {
+ if (view.getId() == R.id.button_send_UNO_commands) {
+ String cmdText = ((EditText) mActivity.findViewById(R.id.UNO_commands_string)).getText().toString();
+ LOKitShell.sendEvent(new LOEvent(LOEvent.UNO_COMMAND, ".uno:" + cmdText, mRootJSON.toString()));
+ } else if (view.getId() == R.id.button_add_property) {
+ String parentValue = ((EditText) mActivity.findViewById(R.id.UNO_commands_string_parent_value)).getText().toString();
+ String type = ((EditText) mActivity.findViewById(R.id.UNO_commands_string_type)).getText().toString();
+ String value = ((EditText) mActivity.findViewById(R.id.UNO_commands_string_value)).getText().toString();
+ try {
+ addProperty(mRootJSON, parentValue, type, value);
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ showCommandDialog();
+ } else if (view.getId() == R.id.button_send_UNO_commands_clear) {
+ mRootJSON = new JSONObject();
+ ((EditText) mActivity.findViewById(R.id.UNO_commands_string_parent_value)).setText("");
+ ((EditText) mActivity.findViewById(R.id.UNO_commands_string_type)).setText("");
+ ((EditText) mActivity.findViewById(R.id.UNO_commands_string_value)).setText("");
+ showCommandDialog();
+ } else if (view.getId() == R.id.button_send_UNO_commands_show) {
+ showCommandDialog();
+ }
+ }
+
+ private void showCommandDialog() {
+ try {
+ AlertDialog dialog = new AlertDialog.Builder(mActivity)
+ .setTitle("Current UNO command")
+ .setMessage(mRootJSON.toString(2))
+ .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int which) {
+ dialog.dismiss();
+ }
+ })
+ .setIcon(android.R.drawable.ic_dialog_info)
+ .show();
+ TextView textView = (TextView) dialog.findViewById(android.R.id.message);
+ if (textView != null) {
+ textView.setScroller(new Scroller(mActivity));
+ textView.setVerticalScrollBarEnabled(true);
+ textView.setMovementMethod(new ScrollingMovementMethod());
+ }
+ } catch (JSONException e) {
+ e.printStackTrace();
+ }
+ }
+} \ No newline at end of file