11package org .wordpress .android .editor ;
22
33import android .annotation .SuppressLint ;
4- import android .content . res . AssetManager ;
4+ import android .app . Activity ;
55import android .os .Build ;
66import android .os .Bundle ;
7+ import android .support .annotation .NonNull ;
78import android .text .Spanned ;
89import android .view .LayoutInflater ;
910import android .view .View ;
1011import android .view .ViewGroup ;
1112import android .webkit .ConsoleMessage ;
12- import android .webkit .JavascriptInterface ;
1313import android .webkit .JsResult ;
1414import android .webkit .WebChromeClient ;
1515import android .webkit .WebSettings ;
1616import android .webkit .WebView ;
1717import android .webkit .WebViewClient ;
18+ import android .widget .ToggleButton ;
1819
1920import com .android .volley .toolbox .ImageLoader ;
2021
2324import org .wordpress .android .util .helpers .MediaFile ;
2425import org .wordpress .android .util .helpers .MediaGallery ;
2526
26- import java .io .BufferedReader ;
27- import java .io .IOException ;
28- import java .io .InputStream ;
29- import java .io .InputStreamReader ;
27+ import java .util .HashMap ;
28+ import java .util .Map ;
3029
31- public class EditorFragment extends EditorFragmentAbstract {
30+ public class EditorFragment extends EditorFragmentAbstract implements View .OnClickListener ,
31+ OnJsEditorStateChangedListener {
3232 private static final String ARG_PARAM_TITLE = "param_title" ;
3333 private static final String ARG_PARAM_CONTENT = "param_content" ;
3434
3535 private static final String JS_CALLBACK_HANDLER = "nativeCallbackHandler" ;
3636
37+ private static final String TAG_FORMAT_BAR_BUTTON_BOLD = "bold" ;
38+
3739 private String mParamTitle ;
3840 private String mParamContent ;
39- private WebView mWebView ;
41+
42+ private Activity mActivity ;
43+ private EditorWebView mWebView ;
44+
45+ private final Map <String , ToggleButton > mTagToggleButtonMap = new HashMap <>();
4046
4147 public static EditorFragment newInstance (String title , String content ) {
4248 EditorFragment fragment = new EditorFragment ();
@@ -53,18 +59,23 @@ public EditorFragment() {
5359 @ Override
5460 public void onCreate (Bundle savedInstanceState ) {
5561 super .onCreate (savedInstanceState );
62+ mActivity = getActivity ();
5663 if (getArguments () != null ) {
5764 mParamTitle = getArguments ().getString (ARG_PARAM_TITLE );
5865 mParamContent = getArguments ().getString (ARG_PARAM_CONTENT );
5966 }
6067 }
6168
6269 @ Override
63- public View onCreateView (LayoutInflater inflater , ViewGroup container ,
64- Bundle savedInstanceState ) {
70+ public View onCreateView (LayoutInflater inflater , ViewGroup container , Bundle savedInstanceState ) {
6571 View view = inflater .inflate (R .layout .fragment_editor , container , false );
66- mWebView = (WebView ) view .findViewById (R .id .webview );
72+ mWebView = (EditorWebView ) view .findViewById (R .id .webview );
6773 initWebView ();
74+
75+ ToggleButton boldButton = (ToggleButton ) view .findViewById (R .id .bold );
76+ boldButton .setOnClickListener (this );
77+ mTagToggleButtonMap .put (TAG_FORMAT_BAR_BUTTON_BOLD , boldButton );
78+
6879 return view ;
6980 }
7081
@@ -84,7 +95,8 @@ public void onReceivedError(WebView view, int errorCode, String description, Str
8495 }
8596 });
8697 mWebView .setWebChromeClient (new WebChromeClient () {
87- public boolean onConsoleMessage (ConsoleMessage cm ) {
98+ @ Override
99+ public boolean onConsoleMessage (@ NonNull ConsoleMessage cm ) {
88100 AppLog .d (T .EDITOR , cm .message () + " -- From line " + cm .lineNumber () + " of " + cm .sourceId ());
89101 return true ;
90102 }
@@ -94,46 +106,22 @@ public boolean onJsAlert(WebView view, String url, String message, JsResult resu
94106 AppLog .d (T .EDITOR , message );
95107 return true ;
96108 }
97-
98- @ Override
99- public void onConsoleMessage (String message , int lineNumber , String sourceId ) {
100- AppLog .d (T .EDITOR , message + " -- from line " + lineNumber + " of " + sourceId );
101- }
102109 });
103110
104- String htmlEditor = getHtmlFromFile ("android-editor.html" );
111+ String htmlEditor = Utils . getHtmlFromFile (mActivity , "android-editor.html" );
105112
106- mWebView .addJavascriptInterface (new JsCallbackHandler ( ), JS_CALLBACK_HANDLER );
113+ mWebView .addJavascriptInterface (new JsCallbackReceiver ( this ), JS_CALLBACK_HANDLER );
107114
108115 mWebView .loadDataWithBaseURL ("file:///android_asset/" , htmlEditor , "text/html" , "utf-8" , "" );
109116
110117 enableWebDebugging (true );
111118 }
112119
113- private String getStringFromAsset (String filename ) throws IOException {
114- if (!isAdded ()) {
115- return null ;
116- }
117- AssetManager assetManager = getActivity ().getAssets ();
118- InputStream in = assetManager .open (filename );
119- InputStreamReader is = new InputStreamReader (in );
120- StringBuilder sb = new StringBuilder ();
121- BufferedReader br = new BufferedReader (is );
122- String read = br .readLine ();
123- while (read != null ) {
124- sb .append (read );
125- sb .append ('\n' );
126- read = br .readLine ();
127- }
128- return sb .toString ();
129- }
130-
131- private String getHtmlFromFile (String filename ) {
132- try {
133- return getStringFromAsset (filename );
134- } catch (IOException e ) {
135- AppLog .e (T .EDITOR , e .getMessage ());
136- return null ;
120+ @ Override
121+ public void onClick (View v ) {
122+ int id = v .getId ();
123+ if (id == R .id .bold ) {
124+ mWebView .execJavaScriptFromString ("ZSSEditor.setBold();" );
137125 }
138126 }
139127
@@ -182,24 +170,34 @@ public Spanned getSpannedContent() {
182170 return null ;
183171 }
184172
185- class JsCallbackHandler {
186- @ JavascriptInterface
187- public void executeCallback (final String callbackId ) {
188- if (callbackId .equals ("callback-dom-loaded" )) {
189- // Run on UI thread
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- mWebView .loadUrl ("javascript:ZSSEditor.getField('zss_field_title').setHTML('" +
197- Utils .escapeHtml (title ) + "');" );
198- mWebView .loadUrl ("javascript:ZSSEditor.getField('zss_field_content').setHTML('" +
199- Utils .escapeHtml (contentHtml ) + "');" );
173+ public void onDomLoaded () {
174+ mWebView .post (new Runnable () {
175+ public void run () {
176+ String title = "I'm editing a post!" ;
177+ String contentHtml = Utils .getHtmlFromFile (mActivity , "example-content.html" );
178+
179+ mWebView .execJavaScriptFromString ("ZSSEditor.getField('zss_field_content').setMultiline('true');" );
180+
181+ // Load example content into editor
182+ mWebView .execJavaScriptFromString ("ZSSEditor.getField('zss_field_title').setHTML('" +
183+ Utils .escapeHtml (title ) + "');" );
184+ mWebView .execJavaScriptFromString ("ZSSEditor.getField('zss_field_content').setHTML('" +
185+ Utils .escapeHtml (contentHtml ) + "');" );
186+ }
187+ });
188+ }
189+
190+ public void onSelectionStyleChanged (final Map <String , Boolean > changeMap ) {
191+ mWebView .post (new Runnable () {
192+ public void run () {
193+ for (Map .Entry <String , Boolean > entry : changeMap .entrySet ()) {
194+ // Handle toggling format bar style buttons
195+ ToggleButton button = mTagToggleButtonMap .get (entry .getKey ());
196+ if (button != null ) {
197+ button .setChecked (entry .getValue ());
200198 }
201- });
199+ }
202200 }
203- }
201+ });
204202 }
205203}
0 commit comments