From 87468bcf5d6a9f4991d2708b5bced6b11355586a Mon Sep 17 00:00:00 2001 From: Samuel Chang Date: Tue, 5 Jun 2018 18:30:24 +1200 Subject: [PATCH 1/2] ATM-2419 Remove Android Volume Change listener to resolve startup volume bug. --- .../ninty/system/setting/SystemSetting.java | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/android/src/main/java/com/ninty/system/setting/SystemSetting.java b/android/src/main/java/com/ninty/system/setting/SystemSetting.java index 4c85c19..12cbb20 100644 --- a/android/src/main/java/com/ninty/system/setting/SystemSetting.java +++ b/android/src/main/java/com/ninty/system/setting/SystemSetting.java @@ -64,26 +64,26 @@ public SystemSetting(ReactApplicationContext reactContext) { } private void listenVolume(final ReactApplicationContext reactContext) { - volumeBR = new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) { - WritableMap para = Arguments.createMap(); - para.putDouble("value", getNormalizationVolume(VOL_MUSIC)); - para.putDouble(VOL_VOICE_CALL, getNormalizationVolume(VOL_VOICE_CALL)); - para.putDouble(VOL_SYSTEM, getNormalizationVolume(VOL_SYSTEM)); - para.putDouble(VOL_RING, getNormalizationVolume(VOL_RING)); - para.putDouble(VOL_MUSIC, getNormalizationVolume(VOL_MUSIC)); - para.putDouble(VOL_ALARM, getNormalizationVolume(VOL_ALARM)); - para.putDouble(VOL_NOTIFICATION, getNormalizationVolume(VOL_NOTIFICATION)); - reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - .emit("EventVolume", para); - } - } - }; - filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); - - reactContext.registerReceiver(volumeBR, filter); + // volumeBR = new BroadcastReceiver() { + // @Override + // public void onReceive(Context context, Intent intent) { + // if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) { + // WritableMap para = Arguments.createMap(); + // para.putDouble("value", getNormalizationVolume(VOL_MUSIC)); + // para.putDouble(VOL_VOICE_CALL, getNormalizationVolume(VOL_VOICE_CALL)); + // para.putDouble(VOL_SYSTEM, getNormalizationVolume(VOL_SYSTEM)); + // para.putDouble(VOL_RING, getNormalizationVolume(VOL_RING)); + // para.putDouble(VOL_MUSIC, getNormalizationVolume(VOL_MUSIC)); + // para.putDouble(VOL_ALARM, getNormalizationVolume(VOL_ALARM)); + // para.putDouble(VOL_NOTIFICATION, getNormalizationVolume(VOL_NOTIFICATION)); + // reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) + // .emit("EventVolume", para); + // } + // } + // }; + // filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); + + // reactContext.registerReceiver(volumeBR, filter); } private void listenWifiState() { From 984daa3c390fc3e7f6e341cd94c7bffacacbf244 Mon Sep 17 00:00:00 2001 From: Samuel Chang Date: Wed, 6 Jun 2018 09:42:54 +1200 Subject: [PATCH 2/2] Add error handling for volume as it can be interacted before JSModule is ready. --- .../ninty/system/setting/SystemSetting.java | 45 ++++++++++--------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/android/src/main/java/com/ninty/system/setting/SystemSetting.java b/android/src/main/java/com/ninty/system/setting/SystemSetting.java index 12cbb20..a6b1e4b 100644 --- a/android/src/main/java/com/ninty/system/setting/SystemSetting.java +++ b/android/src/main/java/com/ninty/system/setting/SystemSetting.java @@ -64,26 +64,31 @@ public SystemSetting(ReactApplicationContext reactContext) { } private void listenVolume(final ReactApplicationContext reactContext) { - // volumeBR = new BroadcastReceiver() { - // @Override - // public void onReceive(Context context, Intent intent) { - // if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) { - // WritableMap para = Arguments.createMap(); - // para.putDouble("value", getNormalizationVolume(VOL_MUSIC)); - // para.putDouble(VOL_VOICE_CALL, getNormalizationVolume(VOL_VOICE_CALL)); - // para.putDouble(VOL_SYSTEM, getNormalizationVolume(VOL_SYSTEM)); - // para.putDouble(VOL_RING, getNormalizationVolume(VOL_RING)); - // para.putDouble(VOL_MUSIC, getNormalizationVolume(VOL_MUSIC)); - // para.putDouble(VOL_ALARM, getNormalizationVolume(VOL_ALARM)); - // para.putDouble(VOL_NOTIFICATION, getNormalizationVolume(VOL_NOTIFICATION)); - // reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) - // .emit("EventVolume", para); - // } - // } - // }; - // filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); - - // reactContext.registerReceiver(volumeBR, filter); + volumeBR = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals("android.media.VOLUME_CHANGED_ACTION")) { + WritableMap para = Arguments.createMap(); + para.putDouble("value", getNormalizationVolume(VOL_MUSIC)); + para.putDouble(VOL_VOICE_CALL, getNormalizationVolume(VOL_VOICE_CALL)); + para.putDouble(VOL_SYSTEM, getNormalizationVolume(VOL_SYSTEM)); + para.putDouble(VOL_RING, getNormalizationVolume(VOL_RING)); + para.putDouble(VOL_MUSIC, getNormalizationVolume(VOL_MUSIC)); + para.putDouble(VOL_ALARM, getNormalizationVolume(VOL_ALARM)); + para.putDouble(VOL_NOTIFICATION, getNormalizationVolume(VOL_NOTIFICATION)); + try { + reactContext.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) + .emit("EventVolume", para); + } catch (RuntimeException e) { + // Possible to interact with volume before JS bundle execution is finished. + // This is here to avoid app crashing. + } + } + } + }; + filter = new IntentFilter("android.media.VOLUME_CHANGED_ACTION"); + + reactContext.registerReceiver(volumeBR, filter); } private void listenWifiState() {