Adds Android click sound to Touchables

Summary:
Android apps play a touch sound on press, as long as you have "Touch sounds" enabled in the settings. As and Android user, when building my app using React Native, one of the first things I noticed was that there were not any touch sounds. This is missing from React Native and there have been multiple PRs to have this implemented, but no success.

This PR iterates over [#6825](https://github.com/facebook/react-native/pull/6825) and [#11136](https://github.com/facebook/react-native/pull/11136)

This PR keeps it simple by only implementing the enhancement for Android, as iOS apps typically do not use touch sounds, and follows the users' system settings for whether or not the sound is played.

I have manually tested this on multiple devices and emulators with zero problems

[ANDROID] [ENHANCEMENT] [UIManagerModule.java]- Adds Android click sound to touchables

[ANDROID] [ENHANCEMENT] [Touchable] - Adds Android click sound to touchables
Closes https://github.com/facebook/react-native/pull/17183

Differential Revision: D7560327

Pulled By: hramos

fbshipit-source-id: ce1094c437541bc677c7d64b0dba343dd9574422
This commit is contained in:
Andrew Kriger 2018-04-09 16:57:54 -07:00 committed by Facebook Github Bot
parent 0934c1778f
commit 722f88ca90
2 changed files with 18 additions and 1 deletions

View File

@ -741,6 +741,9 @@ const TouchableMixin = {
this._startHighlight(e);
this._endHighlight(e);
}
if (Platform.OS === 'android') {
this._playTouchSound();
}
this.touchableHandlePress(e);
}
}
@ -749,6 +752,10 @@ const TouchableMixin = {
this.touchableDelayTimeout = null;
},
_playTouchSound: function() {
UIManager.playTouchSound();
},
_startHighlight: function(e) {
this._savePressInLocation(e);
this.touchableHandleActivePressIn && this.touchableHandleActivePressIn(e);

View File

@ -12,6 +12,8 @@ import static com.facebook.react.bridge.ReactMarkerConstants.CREATE_UI_MANAGER_M
import android.content.ComponentCallbacks2;
import android.content.res.Configuration;
import android.content.Context;
import android.media.AudioManager;
import com.facebook.common.logging.FLog;
import com.facebook.debug.holder.PrinterHolder;
import com.facebook.debug.tags.ReactDebugOverlayTags;
@ -585,6 +587,14 @@ public class UIManagerModule extends ReactContextBaseJavaModule implements
mUIImplementation.dispatchViewManagerCommand(reactTag, commandId, commandArgs);
}
@ReactMethod
public void playTouchSound() {
AudioManager audioManager = (AudioManager) getReactApplicationContext().getSystemService(Context.AUDIO_SERVICE);
if (audioManager != null) {
audioManager.playSoundEffect(AudioManager.FX_KEY_CLICK);
}
}
/**
* Show a PopupMenu.
*