From 5a8a5bbc55612098b07bb182b84aeb5513785ad4 Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Mon, 22 Oct 2018 18:18:16 -0300 Subject: [PATCH 1/3] Set AEC enabled by default --- .../fragment/SettingsFragment.java | 20 +++++++++++-------- android/app/src/main/res/xml/settings.xml | 3 ++- libraries/audio-client/src/AudioClient.cpp | 4 ++-- libraries/audio-client/src/AudioClient.h | 1 + 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/SettingsFragment.java b/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/SettingsFragment.java index cc23665e72..58b6638531 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/SettingsFragment.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/SettingsFragment.java @@ -3,8 +3,8 @@ package io.highfidelity.hifiinterface.fragment; import android.content.SharedPreferences; import android.media.audiofx.AcousticEchoCanceler; import android.os.Bundle; -import android.preference.Preference; import android.preference.PreferenceFragment; +import android.preference.PreferenceManager; import android.support.annotation.Nullable; import io.highfidelity.hifiinterface.R; @@ -18,17 +18,23 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer private final String HIFI_SETTINGS_AEC_KEY = "aec"; private final String PREFERENCE_KEY_AEC = "aec"; + private final boolean DEFAULT_AEC_ENABLED = true; + @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); + boolean aecAvailable = AcousticEchoCanceler.isAvailable(); + PreferenceManager.setDefaultValues(getContext(), R.xml.settings, false); - if (!AcousticEchoCanceler.isAvailable()) { - getPreferenceScreen().getPreferenceManager().findPreference("aec").setEnabled(false); + if (!aecAvailable) { + findPreference(PREFERENCE_KEY_AEC).setEnabled(false); + updateHifiSetting(HIFI_SETTINGS_ANDROID_GROUP, HIFI_SETTINGS_AEC_KEY, false); } getPreferenceScreen().getSharedPreferences().edit().putBoolean(PREFERENCE_KEY_AEC, - getHifiSettingBoolean(HIFI_SETTINGS_ANDROID_GROUP, HIFI_SETTINGS_AEC_KEY, false)); + aecAvailable && getHifiSettingBoolean(HIFI_SETTINGS_ANDROID_GROUP, HIFI_SETTINGS_AEC_KEY, DEFAULT_AEC_ENABLED)).commit(); + } public static SettingsFragment newInstance() { @@ -46,15 +52,13 @@ public class SettingsFragment extends PreferenceFragment implements SharedPrefer public void onPause() { super.onPause(); getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this); - } @Override public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { - Preference pref = findPreference(key); switch (key) { - case "aec": - updateHifiSetting(HIFI_SETTINGS_ANDROID_GROUP, HIFI_SETTINGS_AEC_KEY, sharedPreferences.getBoolean(key, false)); + case PREFERENCE_KEY_AEC: + updateHifiSetting(HIFI_SETTINGS_ANDROID_GROUP, HIFI_SETTINGS_AEC_KEY, sharedPreferences.getBoolean(key, DEFAULT_AEC_ENABLED)); break; default: break; diff --git a/android/app/src/main/res/xml/settings.xml b/android/app/src/main/res/xml/settings.xml index 5ec47b1aff..934d34ba73 100644 --- a/android/app/src/main/res/xml/settings.xml +++ b/android/app/src/main/res/xml/settings.xml @@ -6,6 +6,7 @@ + android:summary="@string/acoustic_echo_cancellation" + android:defaultValue="true" /> \ No newline at end of file diff --git a/libraries/audio-client/src/AudioClient.cpp b/libraries/audio-client/src/AudioClient.cpp index d00bc29054..abe8f628f7 100644 --- a/libraries/audio-client/src/AudioClient.cpp +++ b/libraries/audio-client/src/AudioClient.cpp @@ -465,7 +465,7 @@ QAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) { #if defined (Q_OS_ANDROID) if (mode == QAudio::AudioInput) { - Setting::Handle enableAEC(SETTING_AEC_KEY, false); + Setting::Handle enableAEC(SETTING_AEC_KEY, DEFAULT_AEC_ENABLED); bool aecEnabled = enableAEC.get(); auto audioClient = DependencyManager::get(); bool headsetOn = audioClient? audioClient->isHeadsetPluggedIn() : false; @@ -1673,7 +1673,7 @@ void AudioClient::setHeadsetPluggedIn(bool pluggedIn) { QThread::msleep(200); } - Setting::Handle enableAEC(SETTING_AEC_KEY, false); + Setting::Handle enableAEC(SETTING_AEC_KEY, DEFAULT_AEC_ENABLED); bool aecEnabled = enableAEC.get(); if ((pluggedIn || !aecEnabled) && _inputDeviceInfo.deviceName() != VOICE_RECOGNITION) { diff --git a/libraries/audio-client/src/AudioClient.h b/libraries/audio-client/src/AudioClient.h index 5e7f1fb8a0..057f477777 100644 --- a/libraries/audio-client/src/AudioClient.h +++ b/libraries/audio-client/src/AudioClient.h @@ -69,6 +69,7 @@ #define VOICE_COMMUNICATION "voicecommunication" #define SETTING_AEC_KEY "Android/aec" +#define DEFAULT_AEC_ENABLED true #endif class QAudioInput; From db45aced6e0f932d853c1813989a03e5c769986e Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Mon, 5 Nov 2018 16:53:03 -0300 Subject: [PATCH 2/3] Mute when entering a domain --- android/app/CMakeLists.txt | 2 +- android/app/src/main/cpp/native.cpp | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/android/app/CMakeLists.txt b/android/app/CMakeLists.txt index 9930a9e152..0138b45146 100644 --- a/android/app/CMakeLists.txt +++ b/android/app/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET_NAME native-lib) setup_hifi_library() -link_hifi_libraries(shared task networking gl gpu qml image fbx render-utils physics entities octree ${PLATFORM_GL_BACKEND}) +link_hifi_libraries(shared task networking gl gpu qml image fbx render-utils physics entities octree audio-client ${PLATFORM_GL_BACKEND}) target_opengl() target_bullet() diff --git a/android/app/src/main/cpp/native.cpp b/android/app/src/main/cpp/native.cpp index c7bca428e9..2f05a54fd5 100644 --- a/android/app/src/main/cpp/native.cpp +++ b/android/app/src/main/cpp/native.cpp @@ -21,6 +21,7 @@ #include #include "AndroidHelper.h" +#include "../../../../../libraries/audio-client/src/AudioClient.h" #include #include @@ -210,11 +211,15 @@ JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeOnDest JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeGotoUrl(JNIEnv* env, jobject obj, jstring url) { QAndroidJniObject jniUrl("java/lang/String", "(Ljava/lang/String;)V", url); DependencyManager::get()->loadSettings(jniUrl.toString()); + auto audioClient = DependencyManager::get(); + audioClient->setMuted(true, true); } JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeGoToUser(JNIEnv* env, jobject obj, jstring username) { QAndroidJniObject jniUsername("java/lang/String", "(Ljava/lang/String;)V", username); DependencyManager::get()->goToUser(jniUsername.toString(), false); + auto audioClient = DependencyManager::get(); + audioClient->setMuted(true, true); } JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeOnPause(JNIEnv* env, jobject obj) { From 611881e0024a10638aadd8c78555f4ba2800a697 Mon Sep 17 00:00:00 2001 From: Gabriel Calero Date: Mon, 5 Nov 2018 18:35:57 -0300 Subject: [PATCH 3/3] Mute when entering a domain --- android/app/CMakeLists.txt | 2 +- android/app/src/main/cpp/native.cpp | 7 ++----- interface/src/AndroidHelper.cpp | 8 ++++++++ interface/src/AndroidHelper.h | 1 + 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/android/app/CMakeLists.txt b/android/app/CMakeLists.txt index 0138b45146..9930a9e152 100644 --- a/android/app/CMakeLists.txt +++ b/android/app/CMakeLists.txt @@ -1,6 +1,6 @@ set(TARGET_NAME native-lib) setup_hifi_library() -link_hifi_libraries(shared task networking gl gpu qml image fbx render-utils physics entities octree audio-client ${PLATFORM_GL_BACKEND}) +link_hifi_libraries(shared task networking gl gpu qml image fbx render-utils physics entities octree ${PLATFORM_GL_BACKEND}) target_opengl() target_bullet() diff --git a/android/app/src/main/cpp/native.cpp b/android/app/src/main/cpp/native.cpp index 2f05a54fd5..760fdcb0b5 100644 --- a/android/app/src/main/cpp/native.cpp +++ b/android/app/src/main/cpp/native.cpp @@ -21,7 +21,6 @@ #include #include "AndroidHelper.h" -#include "../../../../../libraries/audio-client/src/AudioClient.h" #include #include @@ -211,15 +210,13 @@ JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeOnDest JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeGotoUrl(JNIEnv* env, jobject obj, jstring url) { QAndroidJniObject jniUrl("java/lang/String", "(Ljava/lang/String;)V", url); DependencyManager::get()->loadSettings(jniUrl.toString()); - auto audioClient = DependencyManager::get(); - audioClient->setMuted(true, true); + AndroidHelper::instance().muteMic(); } JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeGoToUser(JNIEnv* env, jobject obj, jstring username) { QAndroidJniObject jniUsername("java/lang/String", "(Ljava/lang/String;)V", username); DependencyManager::get()->goToUser(jniUsername.toString(), false); - auto audioClient = DependencyManager::get(); - audioClient->setMuted(true, true); + AndroidHelper::instance().muteMic(); } JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeOnPause(JNIEnv* env, jobject obj) { diff --git a/interface/src/AndroidHelper.cpp b/interface/src/AndroidHelper.cpp index ae6aa34cc9..708859c00a 100644 --- a/interface/src/AndroidHelper.cpp +++ b/interface/src/AndroidHelper.cpp @@ -73,6 +73,14 @@ void AndroidHelper::notifyHeadsetOn(bool pluggedIn) { #endif } +void AndroidHelper::muteMic() { + auto audioClient = DependencyManager::get(); + if (audioClient) { + QMetaObject::invokeMethod(audioClient.data(), "setMuted", Q_ARG(bool, true), Q_ARG(bool, true)); + } +} + + void AndroidHelper::signup(QString email, QString username, QString password) { JSONCallbackParameters callbackParams; callbackParams.callbackReceiver = this; diff --git a/interface/src/AndroidHelper.h b/interface/src/AndroidHelper.h index f1917deca0..f0aaa84214 100644 --- a/interface/src/AndroidHelper.h +++ b/interface/src/AndroidHelper.h @@ -35,6 +35,7 @@ public: void performHapticFeedback(int duration); void processURL(const QString &url); void notifyHeadsetOn(bool pluggedIn); + void muteMic(); AndroidHelper(AndroidHelper const&) = delete; void operator=(AndroidHelper const&) = delete;