From c71ff501e7a3f093dea39c927da5861d87bfff58 Mon Sep 17 00:00:00 2001 From: Emmanuel Engelhart Date: Sat, 13 Jun 2015 15:11:08 +0200 Subject: [PATCH] New: TTS for selected text (by Mat from Google Zurich) --- res/drawable-xxxhdpi/action_voice.png | Bin 0 -> 11991 bytes res/menu/menu_webview_action.xml | 26 +++++++++++++ .../kiwixmobile/KiwixMobileActivity.java | 35 ++++++++++++++++++ .../kiwix/kiwixmobile/KiwixTextToSpeech.java | 6 +++ 4 files changed, 67 insertions(+) create mode 100644 res/drawable-xxxhdpi/action_voice.png create mode 100644 res/menu/menu_webview_action.xml diff --git a/res/drawable-xxxhdpi/action_voice.png b/res/drawable-xxxhdpi/action_voice.png new file mode 100644 index 0000000000000000000000000000000000000000..6768c9a862757ac3cb036fbbfa275d6331f418f7 GIT binary patch literal 11991 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 + + + + + + diff --git a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java index 320a08e34..4d07890fc 100644 --- a/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java +++ b/src/org/kiwix/kiwixmobile/KiwixMobileActivity.java @@ -43,6 +43,7 @@ import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.util.Log; +import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.Menu; @@ -154,6 +155,40 @@ public class KiwixMobileActivity extends AppCompatActivity private AnimatedProgressBar mProgressBar; + // Initialized when onActionModeStarted is triggered. + private ActionMode mActionMode = null; + + @Override + public void onActionModeStarted(ActionMode mode) { + if (mActionMode == null) { + mActionMode = mode; + Menu menu = mode.getMenu(); + // Inflate custom menu icon. + getMenuInflater().inflate(R.menu.menu_webview_action, menu); + } + super.onActionModeStarted(mode); + } + + @Override + public void onActionModeFinished(ActionMode mode) { + mActionMode = null; + super.onActionModeFinished(mode); + } + + public void onContextMenuClicked(MenuItem item) { + switch (item.getItemId()) { + case R.id.menu_speak_text: + Log.i(TAG_KIWIX, "Speaking selection."); + tts.readSelection(); + break; + default: + Log.e(TAG_KIWIX, "Unexpected context menu click."); + break; + } + if (mActionMode != null) { + mActionMode.finish(); + } + } @Override public void onCreate(Bundle savedInstanceState) { diff --git a/src/org/kiwix/kiwixmobile/KiwixTextToSpeech.java b/src/org/kiwix/kiwixmobile/KiwixTextToSpeech.java index d29719abf..00bd181fd 100644 --- a/src/org/kiwix/kiwixmobile/KiwixTextToSpeech.java +++ b/src/org/kiwix/kiwixmobile/KiwixTextToSpeech.java @@ -84,6 +84,12 @@ public class KiwixTextToSpeech { }); } + /** + * Reads the currently selected text in the WebView. + */ + public void readSelection() { + webView.loadUrl("javascript:tts.speakAloud(window.getSelection().toString());", null); + } /** * Starts speaking the WebView content aloud (or stops it if TTS is speaking now).