diff options
author | 2014-06-09 23:25:02 +0900 | |
---|---|---|
committer | 2014-06-10 09:15:59 +0900 | |
commit | 874a600dc805b6ab9fe92fccddfe4765b8d29a35 (patch) | |
tree | a5b706a54924add509dcbb4c54881122b23a9d26 | |
parent | d022df49bd083b3de68463295d04bbcaadb479a6 (diff) | |
download | latinime-874a600dc805b6ab9fe92fccddfe4765b8d29a35.tar.gz latinime-874a600dc805b6ab9fe92fccddfe4765b8d29a35.tar.xz latinime-874a600dc805b6ab9fe92fccddfe4765b8d29a35.zip |
Add audio and haptic feedback for Emoji and Suggestions
Bug: 15378862
Change-Id: Ia14929bd9eb63ad5735cae0ad98ad0e2ad301128
8 files changed, 79 insertions, 37 deletions
diff --git a/java/res/layout/emoji_keyboard_tab_icon.xml b/java/res/layout/emoji_keyboard_tab_icon.xml index 13bb41ca2..15f9c3a3e 100644 --- a/java/res/layout/emoji_keyboard_tab_icon.xml +++ b/java/res/layout/emoji_keyboard_tab_icon.xml @@ -19,6 +19,8 @@ --> <!-- Note: contentDescription will be added programatically in {@link EmojiPalettesView}. --> +<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="0dip" android:layout_weight="1.0" @@ -26,4 +28,6 @@ android:gravity="center" android:scaleType="center" android:contentDescription="@null" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> diff --git a/java/res/layout/emoji_palettes_view.xml b/java/res/layout/emoji_palettes_view.xml index 06a937bff..9ff090aad 100644 --- a/java/res/layout/emoji_palettes_view.xml +++ b/java/res/layout/emoji_palettes_view.xml @@ -62,11 +62,15 @@ android:layout_height="match_parent" android:background="@drawable/suggestions_strip_divider" /> <!-- TODO: Implement KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <ImageButton android:id="@+id/emoji_keyboard_delete" android:layout_width="0dip" android:layout_weight="12.5" android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" android:contentDescription="@string/spoken_description_delete" /> </LinearLayout> <android.support.v4.view.ViewPager @@ -85,18 +89,26 @@ android:layout_weight="1" > <!-- TODO: Implement a KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <TextView android:id="@+id/emoji_keyboard_alphabet_left" android:layout_width="0dip" android:layout_weight="0.15" android:gravity="center" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> <!-- TODO: Implement KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <RelativeLayout android:id="@+id/emoji_keyboard_space" android:layout_width="0dip" android:layout_weight="0.70" android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" android:contentDescription="@string/spoken_description_space"> <!-- WORKAROUND: Show the spacebar icon as a bacground of this View. --> <View @@ -108,11 +120,15 @@ android:layout_centerInParent="true" /> </RelativeLayout> <!-- TODO: Implement KeyView and replace this. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <TextView android:id="@+id/emoji_keyboard_alphabet_right" android:layout_width="0dip" android:layout_weight="0.15" android:gravity="center" - android:layout_height="match_parent" /> + android:layout_height="match_parent" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> </LinearLayout> </com.android.inputmethod.keyboard.emoji.EmojiPalettesView> diff --git a/java/res/layout/suggestion_divider.xml b/java/res/layout/suggestion_divider.xml index be97eae5a..563599d82 100644 --- a/java/res/layout/suggestion_divider.xml +++ b/java/res/layout/suggestion_divider.xml @@ -18,13 +18,17 @@ */ --> +<!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <ImageView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="match_parent" + android:padding="0dp" + android:gravity="center" android:src="@drawable/suggestions_strip_divider" + android:contentDescription="@null" android:clickable="false" android:longClickable="false" - android:contentDescription="@null" - android:padding="0dp" - android:gravity="center" /> + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> diff --git a/java/res/layout/suggestions_strip.xml b/java/res/layout/suggestions_strip.xml index 3d2f07f7b..489477990 100644 --- a/java/res/layout/suggestions_strip.xml +++ b/java/res/layout/suggestions_strip.xml @@ -20,13 +20,19 @@ <merge xmlns:android="http://schemas.android.com/apk/res/android"> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <LinearLayout android:id="@+id/suggestions_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" - android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" /> + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" /> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <LinearLayout android:id="@+id/add_to_dictionary_strip" android:orientation="horizontal" @@ -34,7 +40,8 @@ android:layout_height="match_parent" android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" - android:visibility="invisible"> + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false"> <TextView android:id="@+id/word_to_save" android:layout_width="match_parent" @@ -49,13 +56,17 @@ android:textAlignment="viewStart" style="?attr/suggestionWordStyle" /> </LinearLayout> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <LinearLayout android:id="@+id/important_notice_strip" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_marginLeft="@dimen/config_suggestions_strip_horizontal_margin" - android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin"> + android:layout_marginRight="@dimen/config_suggestions_strip_horizontal_margin" + android:hapticFeedbackEnabled="false" + android:soundEffectsEnabled="false" > <TextView android:id="@+id/important_notice_title" android:layout_width="match_parent" diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml index df26fb3b4..02a93ca82 100644 --- a/java/res/values/themes-common.xml +++ b/java/res/values/themes-common.xml @@ -124,9 +124,10 @@ <item name="android:paddingTop">0dp</item> <item name="android:paddingRight">@dimen/config_suggestion_text_horizontal_padding</item> <item name="android:paddingBottom">0dp</item> - <!-- Provide a haptic feedback by ourselves based on the keyboard settings. - We just need to ignore the system's haptic feedback settings. --> + <!-- Provide audio and haptic feedback by ourselves based on the keyboard settings. + We just need to ignore the system's audio and haptic feedback settings. --> <item name="android:hapticFeedbackEnabled">false</item> + <item name="android:soundEffectsEnabled">false</item> <item name="android:focusable">false</item> <item name="android:clickable">false</item> <item name="android:singleLine">true</item> diff --git a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java index abed5208b..e37cd2369 100644 --- a/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java +++ b/java/src/com/android/inputmethod/keyboard/emoji/EmojiPalettesView.java @@ -46,6 +46,7 @@ import com.android.inputmethod.keyboard.KeyboardView; import com.android.inputmethod.keyboard.internal.KeyDrawParams; import com.android.inputmethod.keyboard.internal.KeyVisualAttributes; import com.android.inputmethod.keyboard.internal.KeyboardIconsSet; +import com.android.inputmethod.latin.AudioAndHapticFeedbackManager; import com.android.inputmethod.latin.Constants; import com.android.inputmethod.latin.R; import com.android.inputmethod.latin.SubtypeSwitcher; @@ -240,6 +241,8 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange @Override public void onTabChanged(final String tabId) { + AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback( + Constants.CODE_UNSPECIFIED, this); final int categoryId = mEmojiCategory.getCategoryId(tabId); setCurrentCategoryId(categoryId, false /* force */); updateEmojiCategoryPageIdView(); diff --git a/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java b/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java index 54bc29559..eb8b34ccd 100644 --- a/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java +++ b/java/src/com/android/inputmethod/latin/AudioAndHapticFeedbackManager.java @@ -16,14 +16,14 @@ package com.android.inputmethod.latin; -import com.android.inputmethod.latin.settings.SettingsValues; - import android.content.Context; import android.media.AudioManager; import android.os.Vibrator; import android.view.HapticFeedbackConstants; import android.view.View; +import com.android.inputmethod.latin.settings.SettingsValues; + /** * This class gathers audio feedback and haptic feedback functions. * @@ -86,40 +86,41 @@ public final class AudioAndHapticFeedbackManager { if (mAudioManager == null) { return; } - if (mSoundOn) { - final int sound; - switch (code) { - case Constants.CODE_DELETE: - sound = AudioManager.FX_KEYPRESS_DELETE; - break; - case Constants.CODE_ENTER: - sound = AudioManager.FX_KEYPRESS_RETURN; - break; - case Constants.CODE_SPACE: - sound = AudioManager.FX_KEYPRESS_SPACEBAR; - break; - default: - sound = AudioManager.FX_KEYPRESS_STANDARD; - break; - } - mAudioManager.playSoundEffect(sound, mSettingsValues.mKeypressSoundVolume); + if (!mSoundOn) { + return; + } + final int sound; + switch (code) { + case Constants.CODE_DELETE: + sound = AudioManager.FX_KEYPRESS_DELETE; + break; + case Constants.CODE_ENTER: + sound = AudioManager.FX_KEYPRESS_RETURN; + break; + case Constants.CODE_SPACE: + sound = AudioManager.FX_KEYPRESS_SPACEBAR; + break; + default: + sound = AudioManager.FX_KEYPRESS_STANDARD; + break; } + mAudioManager.playSoundEffect(sound, mSettingsValues.mKeypressSoundVolume); } public void performHapticFeedback(final View viewToPerformHapticFeedbackOn) { if (!mSettingsValues.mVibrateOn) { return; } - if (mSettingsValues.mKeypressVibrationDuration < 0) { - // Go ahead with the system default - if (viewToPerformHapticFeedbackOn != null) { - viewToPerformHapticFeedbackOn.performHapticFeedback( - HapticFeedbackConstants.KEYBOARD_TAP, - HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); - } + if (mSettingsValues.mKeypressVibrationDuration >= 0) { + vibrate(mSettingsValues.mKeypressVibrationDuration); return; } - vibrate(mSettingsValues.mKeypressVibrationDuration); + // Go ahead with the system default + if (viewToPerformHapticFeedbackOn != null) { + viewToPerformHapticFeedbackOn.performHapticFeedback( + HapticFeedbackConstants.KEYBOARD_TAP, + HapticFeedbackConstants.FLAG_IGNORE_GLOBAL_SETTING); + } } public void onSettingsChanged(final SettingsValues settingsValues) { diff --git a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java index 8ce863578..3be933ff7 100644 --- a/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java +++ b/java/src/com/android/inputmethod/latin/suggestions/SuggestionStripView.java @@ -428,6 +428,8 @@ public final class SuggestionStripView extends RelativeLayout implements OnClick @Override public void onClick(final View view) { + AudioAndHapticFeedbackManager.getInstance().performHapticAndAudioFeedback( + Constants.CODE_UNSPECIFIED, this); if (view == mImportantNoticeStrip) { mListener.showImportantNoticeContents(); return; |