Skip to content

Commit f1f933b

Browse files
committed
Moved JsCallbackHandler to its own file
- Added a JsCallbackListener interface for callbacks from the handler to the editor fragment - Updated ZSSEditor.callback to send the full callback path
1 parent 5da8d79 commit f1f933b

File tree

4 files changed

+72
-27
lines changed

4 files changed

+72
-27
lines changed

WordPressEditor/src/main/java/org/wordpress/android/editor/EditorFragment.java

Lines changed: 19 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import android.view.View;
1010
import android.view.ViewGroup;
1111
import android.webkit.ConsoleMessage;
12-
import android.webkit.JavascriptInterface;
1312
import android.webkit.JsResult;
1413
import android.webkit.WebChromeClient;
1514
import android.webkit.WebSettings;
@@ -29,7 +28,7 @@
2928
import java.io.InputStream;
3029
import java.io.InputStreamReader;
3130

32-
public class EditorFragment extends EditorFragmentAbstract implements View.OnClickListener {
31+
public class EditorFragment extends EditorFragmentAbstract implements View.OnClickListener, JsCallbackListener {
3332
private static final String ARG_PARAM_TITLE = "param_title";
3433
private static final String ARG_PARAM_CONTENT = "param_content";
3534

@@ -89,6 +88,7 @@ public void onReceivedError(WebView view, int errorCode, String description, Str
8988
}
9089
});
9190
mWebView.setWebChromeClient(new WebChromeClient() {
91+
@Override
9292
public boolean onConsoleMessage(ConsoleMessage cm) {
9393
AppLog.d(T.EDITOR, cm.message() + " -- From line " + cm.lineNumber() + " of " + cm.sourceId());
9494
return true;
@@ -99,16 +99,11 @@ public boolean onJsAlert(WebView view, String url, String message, JsResult resu
9999
AppLog.d(T.EDITOR, message);
100100
return true;
101101
}
102-
103-
@Override
104-
public void onConsoleMessage(String message, int lineNumber, String sourceId) {
105-
AppLog.d(T.EDITOR, message + " -- from line " + lineNumber + " of " + sourceId);
106-
}
107102
});
108103

109104
String htmlEditor = getHtmlFromFile("android-editor.html");
110105

111-
mWebView.addJavascriptInterface(new JsCallbackHandler(), JS_CALLBACK_HANDLER);
106+
mWebView.addJavascriptInterface(new JsCallbackHandler(this), JS_CALLBACK_HANDLER);
112107

113108
mWebView.loadDataWithBaseURL("file:///android_asset/", htmlEditor, "text/html", "utf-8", "");
114109

@@ -187,24 +182,22 @@ public Spanned getSpannedContent() {
187182
return null;
188183
}
189184

190-
class JsCallbackHandler {
191-
@JavascriptInterface
192-
public void executeCallback(final String callbackId) {
193-
if (callbackId.equals("callback-dom-loaded")) {
194-
// Run on UI thread
195-
mWebView.post(new Runnable() {
196-
public void run() {
197-
String title = "I'm editing a post!";
198-
String contentHtml = getHtmlFromFile("example-content.html");
199-
200-
// Load example content into editor
201-
mWebView.loadUrl("javascript:ZSSEditor.getField('zss_field_title').setHTML('" +
202-
Utils.escapeHtml(title) + "');");
203-
mWebView.loadUrl("javascript:ZSSEditor.getField('zss_field_content').setHTML('" +
204-
Utils.escapeHtml(contentHtml) + "');");
205-
}
206-
});
185+
private void execJavaScriptFromString(String javaScript) {
186+
mWebView.loadUrl("javascript:" + javaScript);
187+
}
188+
189+
public void onDomLoaded() {
190+
mWebView.post(new Runnable() {
191+
public void run() {
192+
String title = "I'm editing a post!";
193+
String contentHtml = getHtmlFromFile("example-content.html");
194+
195+
// Load example content into editor
196+
execJavaScriptFromString("ZSSEditor.getField('zss_field_title').setHTML('" +
197+
Utils.escapeHtml(title) + "');");
198+
execJavaScriptFromString("ZSSEditor.getField('zss_field_content').setHTML('" +
199+
Utils.escapeHtml(contentHtml) + "');");
207200
}
208-
}
201+
});
209202
}
210203
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.wordpress.android.editor;
2+
3+
import android.webkit.JavascriptInterface;
4+
5+
import org.wordpress.android.util.AppLog;
6+
7+
public class JsCallbackHandler {
8+
private static final String CALLBACK_LOG = "callback-log";
9+
10+
private static final String CALLBACK_DOM_LOADED = "callback-dom-loaded";
11+
12+
private static final String CALLBACK_SELECTION_STYLE = "callback-selection-style";
13+
private static final String CALLBACK_SELECTION_CHANGED = "callback-selection-changed";
14+
15+
private static final String CALLBACK_FOCUS_IN = "callback-focus-in";
16+
private static final String CALLBACK_FOCUS_OUT = "callback-focus-out";
17+
18+
private static final String CALLBACK_IMAGE_REPLACED = "callback-image-replaced";
19+
private static final String CALLBACK_IMAGE_TAP = "callback-image-tap";
20+
private static final String CALLBACK_INPUT = "callback-input";
21+
private static final String CALLBACK_LINK_TAP = "callback-link-tap";
22+
23+
private static final String CALLBACK_NEW_FIELD = "callback-new-field";
24+
25+
private final JsCallbackListener mJsCallbackListener;
26+
27+
public JsCallbackHandler(EditorFragmentAbstract editorFragmentAbstract) {
28+
mJsCallbackListener = (JsCallbackListener) editorFragmentAbstract;
29+
}
30+
31+
@JavascriptInterface
32+
public void executeCallback(String callbackId, String params) {
33+
switch (callbackId) {
34+
case CALLBACK_DOM_LOADED:
35+
mJsCallbackListener.onDomLoaded();
36+
break;
37+
case CALLBACK_LOG:
38+
// Strip 'msg=' from beginning of string
39+
AppLog.d(AppLog.T.EDITOR, callbackId + ": " + params.substring(4));
40+
break;
41+
default:
42+
AppLog.d(AppLog.T.EDITOR, "unhandled callback: " + callbackId + ":" + params);
43+
}
44+
}
45+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package org.wordpress.android.editor;
2+
3+
public interface JsCallbackListener {
4+
void onDomLoaded();
5+
}

libs/editor-common/assets/ZSSRichTextEditor.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ ZSSEditor.callback = function(callbackScheme, callbackPath) {
199199
if (isUsingiOS) {
200200
ZSSEditor.callbackThroughIFrame(url);
201201
} else if (isUsingAndroid) {
202-
nativeCallbackHandler.executeCallback(callbackScheme);
202+
nativeCallbackHandler.executeCallback(callbackScheme, callbackPath);
203203
} else {
204204
console.log(url);
205205
}
@@ -1877,6 +1877,8 @@ ZSSField.prototype.callback = function(callbackScheme, callbackPath) {
18771877

18781878
if (isUsingiOS) {
18791879
ZSSEditor.callbackThroughIFrame(url);
1880+
} else if (isUsingAndroid) {
1881+
nativeCallbackHandler.executeCallback(callbackScheme, callbackPath);
18801882
} else {
18811883
console.log(url);
18821884
}

0 commit comments

Comments
 (0)