mirror of
https://github.com/overte-org/overte.git
synced 2025-07-19 16:29:21 +02:00
Add android settings screen. Add AEC setting
This commit is contained in:
parent
03f51352aa
commit
2d2a4804f7
13 changed files with 220 additions and 2 deletions
|
@ -9,6 +9,7 @@
|
||||||
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
|
||||||
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||||
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
|
<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"/>
|
||||||
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>
|
<uses-feature android:name="android.hardware.sensor.gyroscope" android:required="true"/>
|
||||||
|
|
||||||
|
@ -75,6 +76,15 @@
|
||||||
android:enabled="true"
|
android:enabled="true"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:process=":breakpad_uploader"/>
|
android:process=":breakpad_uploader"/>
|
||||||
|
|
||||||
|
<receiver
|
||||||
|
android:name=".receiver.HeadsetStateReceiver"
|
||||||
|
android:enabled="true"
|
||||||
|
android:exported="true">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.intent.action.HEADSET_PLUG" />
|
||||||
|
</intent-filter>
|
||||||
|
</receiver>
|
||||||
</application>
|
</application>
|
||||||
|
|
||||||
<uses-feature android:name="android.software.vr.mode" android:required="true"/>
|
<uses-feature android:name="android.software.vr.mode" android:required="true"/>
|
||||||
|
|
|
@ -355,5 +355,51 @@ JNIEXPORT void Java_io_highfidelity_hifiinterface_WebViewActivity_nativeProcessU
|
||||||
AndroidHelper::instance().processURL(QString::fromUtf8(nativeString));
|
AndroidHelper::instance().processURL(QString::fromUtf8(nativeString));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL
|
||||||
|
Java_io_highfidelity_hifiinterface_fragment_SettingsFragment_updateHifiSetting(JNIEnv *env,
|
||||||
|
jobject instance,
|
||||||
|
jstring group_,
|
||||||
|
jstring key_,
|
||||||
|
jboolean value_) {
|
||||||
|
const char *c_group = env->GetStringUTFChars(group_, 0);
|
||||||
|
const char *c_key = env->GetStringUTFChars(key_, 0);
|
||||||
|
|
||||||
|
const QString group = QString::fromUtf8(c_group);
|
||||||
|
const QString key = QString::fromUtf8(c_key);
|
||||||
|
|
||||||
|
env->ReleaseStringUTFChars(group_, c_group);
|
||||||
|
env->ReleaseStringUTFChars(key_, c_key);
|
||||||
|
|
||||||
|
bool value = value_;
|
||||||
|
|
||||||
|
Setting::Handle<bool> setting { QStringList() << group << key , !value };
|
||||||
|
setting.set(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT jboolean JNICALL
|
||||||
|
Java_io_highfidelity_hifiinterface_fragment_SettingsFragment_getHifiSettingBoolean(JNIEnv *env,
|
||||||
|
jobject instance,
|
||||||
|
jstring group_,
|
||||||
|
jstring key_,
|
||||||
|
jboolean defaultValue) {
|
||||||
|
const char *c_group = env->GetStringUTFChars(group_, 0);
|
||||||
|
const char *c_key = env->GetStringUTFChars(key_, 0);
|
||||||
|
|
||||||
|
const QString group = QString::fromUtf8(c_group);
|
||||||
|
const QString key = QString::fromUtf8(c_key);
|
||||||
|
|
||||||
|
env->ReleaseStringUTFChars(group_, c_group);
|
||||||
|
env->ReleaseStringUTFChars(key_, c_key);
|
||||||
|
|
||||||
|
Setting::Handle<bool> setting { QStringList() << group << key , defaultValue};
|
||||||
|
return setting.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
JNIEXPORT void JNICALL
|
||||||
|
Java_io_highfidelity_hifiinterface_receiver_HeadsetStateReceiver_notifyHeadsetOn(JNIEnv *env,
|
||||||
|
jobject instance,
|
||||||
|
jboolean pluggedIn) {
|
||||||
|
AndroidHelper::instance().notifyHeadsetOn(pluggedIn);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,6 +13,7 @@ package io.highfidelity.hifiinterface;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
@ -40,6 +41,7 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import io.highfidelity.hifiinterface.fragment.WebViewFragment;
|
import io.highfidelity.hifiinterface.fragment.WebViewFragment;
|
||||||
|
import io.highfidelity.hifiinterface.receiver.HeadsetStateReceiver;
|
||||||
|
|
||||||
/*import com.google.vr.cardboard.DisplaySynchronizer;
|
/*import com.google.vr.cardboard.DisplaySynchronizer;
|
||||||
import com.google.vr.cardboard.DisplayUtils;
|
import com.google.vr.cardboard.DisplayUtils;
|
||||||
|
@ -55,6 +57,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
|
||||||
private static final int NORMAL_DPI = 160;
|
private static final int NORMAL_DPI = 160;
|
||||||
|
|
||||||
private Vibrator mVibrator;
|
private Vibrator mVibrator;
|
||||||
|
private HeadsetStateReceiver headsetStateReceiver;
|
||||||
|
|
||||||
//public static native void handleHifiURL(String hifiURLString);
|
//public static native void handleHifiURL(String hifiURLString);
|
||||||
private native long nativeOnCreate(InterfaceActivity instance, AssetManager assetManager);
|
private native long nativeOnCreate(InterfaceActivity instance, AssetManager assetManager);
|
||||||
|
@ -151,6 +154,8 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
|
||||||
layoutParams.resolveLayoutDirection(View.LAYOUT_DIRECTION_RTL);
|
layoutParams.resolveLayoutDirection(View.LAYOUT_DIRECTION_RTL);
|
||||||
qtLayout.addView(webSlidingDrawer, layoutParams);
|
qtLayout.addView(webSlidingDrawer, layoutParams);
|
||||||
webSlidingDrawer.setVisibility(View.GONE);
|
webSlidingDrawer.setVisibility(View.GONE);
|
||||||
|
|
||||||
|
headsetStateReceiver = new HeadsetStateReceiver();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -161,6 +166,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
|
||||||
} else {
|
} else {
|
||||||
nativeEnterBackground();
|
nativeEnterBackground();
|
||||||
}
|
}
|
||||||
|
unregisterReceiver(headsetStateReceiver);
|
||||||
//gvrApi.pauseTracking();
|
//gvrApi.pauseTracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -183,6 +189,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
|
||||||
nativeEnterForeground();
|
nativeEnterForeground();
|
||||||
surfacesWorkaround();
|
surfacesWorkaround();
|
||||||
keepInterfaceRunning = false;
|
keepInterfaceRunning = false;
|
||||||
|
registerReceiver(headsetStateReceiver, new IntentFilter(Intent.ACTION_HEADSET_PLUG));
|
||||||
//gvrApi.resumeTracking();
|
//gvrApi.resumeTracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,6 +33,7 @@ import io.highfidelity.hifiinterface.fragment.FriendsFragment;
|
||||||
import io.highfidelity.hifiinterface.fragment.HomeFragment;
|
import io.highfidelity.hifiinterface.fragment.HomeFragment;
|
||||||
import io.highfidelity.hifiinterface.fragment.LoginFragment;
|
import io.highfidelity.hifiinterface.fragment.LoginFragment;
|
||||||
import io.highfidelity.hifiinterface.fragment.PolicyFragment;
|
import io.highfidelity.hifiinterface.fragment.PolicyFragment;
|
||||||
|
import io.highfidelity.hifiinterface.fragment.SettingsFragment;
|
||||||
import io.highfidelity.hifiinterface.task.DownloadProfileImageTask;
|
import io.highfidelity.hifiinterface.task.DownloadProfileImageTask;
|
||||||
|
|
||||||
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,
|
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener,
|
||||||
|
@ -80,6 +81,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
|
|
||||||
mPeopleMenuItem = mNavigationView.getMenu().findItem(R.id.action_people);
|
mPeopleMenuItem = mNavigationView.getMenu().findItem(R.id.action_people);
|
||||||
|
|
||||||
|
updateDebugMenu(mNavigationView.getMenu());
|
||||||
|
|
||||||
Toolbar toolbar = findViewById(R.id.toolbar);
|
Toolbar toolbar = findViewById(R.id.toolbar);
|
||||||
toolbar.setTitleTextAppearance(this, R.style.HomeActionBarTitleStyle);
|
toolbar.setTitleTextAppearance(this, R.style.HomeActionBarTitleStyle);
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
|
@ -108,6 +111,16 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void updateDebugMenu(Menu menu) {
|
||||||
|
if (BuildConfig.DEBUG) {
|
||||||
|
for (int i=0; i < menu.size(); i++) {
|
||||||
|
if (menu.getItem(i).getItemId() == R.id.action_debug_settings) {
|
||||||
|
menu.getItem(i).setVisible(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void loadFragment(String fragment) {
|
private void loadFragment(String fragment) {
|
||||||
switch (fragment) {
|
switch (fragment) {
|
||||||
case "Login":
|
case "Login":
|
||||||
|
@ -151,6 +164,13 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
loadFragment(fragment, getString(R.string.people), getString(R.string.tagFragmentPeople), true);
|
loadFragment(fragment, getString(R.string.people), getString(R.string.tagFragmentPeople), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void loadSettingsFragment() {
|
||||||
|
SettingsFragment fragment = SettingsFragment.newInstance();
|
||||||
|
|
||||||
|
loadFragment(fragment, getString(R.string.settings), getString(R.string.tagSettings), true);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private void loadFragment(Fragment fragment, String title, String tag, boolean addToBackStack) {
|
private void loadFragment(Fragment fragment, String title, String tag, boolean addToBackStack) {
|
||||||
FragmentManager fragmentManager = getFragmentManager();
|
FragmentManager fragmentManager = getFragmentManager();
|
||||||
|
|
||||||
|
@ -241,6 +261,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
|
||||||
case R.id.action_people:
|
case R.id.action_people:
|
||||||
loadPeopleFragment();
|
loadPeopleFragment();
|
||||||
return true;
|
return true;
|
||||||
|
case R.id.action_debug_settings:
|
||||||
|
loadSettingsFragment();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,63 @@
|
||||||
|
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.support.annotation.Nullable;
|
||||||
|
|
||||||
|
import io.highfidelity.hifiinterface.R;
|
||||||
|
|
||||||
|
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
public native void updateHifiSetting(String group, String key, boolean value);
|
||||||
|
public native boolean getHifiSettingBoolean(String group, String key, boolean defaultValue);
|
||||||
|
|
||||||
|
private final String HIFI_SETTINGS_ANDROID_GROUP = "Android";
|
||||||
|
private final String HIFI_SETTINGS_AEC_KEY = "aec";
|
||||||
|
private final String PREFERENCE_KEY_AEC = "aec";
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
addPreferencesFromResource(R.xml.settings);
|
||||||
|
|
||||||
|
if (!AcousticEchoCanceler.isAvailable()) {
|
||||||
|
getPreferenceScreen().getPreferenceManager().findPreference("aec").setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
getPreferenceScreen().getSharedPreferences().edit().putBoolean(PREFERENCE_KEY_AEC,
|
||||||
|
getHifiSettingBoolean(HIFI_SETTINGS_ANDROID_GROUP, HIFI_SETTINGS_AEC_KEY, false));
|
||||||
|
}
|
||||||
|
|
||||||
|
public static SettingsFragment newInstance() {
|
||||||
|
SettingsFragment fragment = new SettingsFragment();
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
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));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,20 @@
|
||||||
|
package io.highfidelity.hifiinterface.receiver;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.media.AudioManager;
|
||||||
|
import android.util.Log;
|
||||||
|
|
||||||
|
public class HeadsetStateReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
|
private native void notifyHeadsetOn(boolean pluggedIn);
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
||||||
|
|
||||||
|
Log.d("[HEADSET] " , "BR - Wired headset on:" + audioManager.isWiredHeadsetOn());
|
||||||
|
notifyHeadsetOn(audioManager.isWiredHeadsetOn());
|
||||||
|
}
|
||||||
|
}
|
|
@ -9,4 +9,9 @@
|
||||||
android:id="@+id/action_people"
|
android:id="@+id/action_people"
|
||||||
android:title="@string/people"
|
android:title="@string/people"
|
||||||
/>
|
/>
|
||||||
|
<item
|
||||||
|
android:id="@+id/action_debug_settings"
|
||||||
|
android:title="@string/settings"
|
||||||
|
android:visible="false"
|
||||||
|
/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|
|
@ -29,4 +29,9 @@
|
||||||
<string name="tagFragmentLogin">tagFragmentLogin</string>
|
<string name="tagFragmentLogin">tagFragmentLogin</string>
|
||||||
<string name="tagFragmentPolicy">tagFragmentPolicy</string>
|
<string name="tagFragmentPolicy">tagFragmentPolicy</string>
|
||||||
<string name="tagFragmentPeople">tagFragmentPeople</string>
|
<string name="tagFragmentPeople">tagFragmentPeople</string>
|
||||||
|
<string name="tagSettings">tagSettings</string>
|
||||||
|
<string name="settings">Settings</string>
|
||||||
|
<string name="AEC">AEC</string>
|
||||||
|
<string name="acoustic_echo_cancellation">Acoustic Echo Cancellation</string>
|
||||||
|
<string name="settings_developer">Developer</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
11
android/app/src/main/res/xml/settings.xml
Normal file
11
android/app/src/main/res/xml/settings.xml
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<PreferenceCategory
|
||||||
|
android:title="@string/settings_developer"
|
||||||
|
android:key="pref_key_developer">
|
||||||
|
<SwitchPreference
|
||||||
|
android:key="aec"
|
||||||
|
android:title="@string/AEC"
|
||||||
|
android:summary="@string/acoustic_echo_cancellation" />
|
||||||
|
</PreferenceCategory>
|
||||||
|
</PreferenceScreen>
|
|
@ -10,6 +10,7 @@
|
||||||
//
|
//
|
||||||
#include "AndroidHelper.h"
|
#include "AndroidHelper.h"
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
#include <AudioClient.h>
|
||||||
#include "Application.h"
|
#include "Application.h"
|
||||||
|
|
||||||
#if defined(qApp)
|
#if defined(qApp)
|
||||||
|
@ -18,6 +19,7 @@
|
||||||
#define qApp (static_cast<Application*>(QCoreApplication::instance()))
|
#define qApp (static_cast<Application*>(QCoreApplication::instance()))
|
||||||
|
|
||||||
AndroidHelper::AndroidHelper() {
|
AndroidHelper::AndroidHelper() {
|
||||||
|
qRegisterMetaType<QAudio::Mode>("QAudio::Mode");
|
||||||
}
|
}
|
||||||
|
|
||||||
AndroidHelper::~AndroidHelper() {
|
AndroidHelper::~AndroidHelper() {
|
||||||
|
@ -56,3 +58,18 @@ void AndroidHelper::processURL(const QString &url) {
|
||||||
qApp->acceptURL(url);
|
qApp->acceptURL(url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AndroidHelper::notifyHeadsetOn(bool pluggedIn) {
|
||||||
|
#if defined (Q_OS_ANDROID)
|
||||||
|
auto audioClient = DependencyManager::get<AudioClient>();
|
||||||
|
if (audioClient) {
|
||||||
|
QAudioDeviceInfo activeDev = audioClient->getActiveAudioDevice(QAudio::AudioInput);
|
||||||
|
Setting::Handle<bool> enableAEC(QStringList() << ANDROID_SETTINGS_GROUP << SETTING_AEC_KEY, false);
|
||||||
|
if ((pluggedIn || !enableAEC.get()) && !activeDev.isNull() && activeDev.deviceName() != VOICE_RECOGNITION) {
|
||||||
|
QMetaObject::invokeMethod(audioClient.get(), "switchAudioDevice", Q_ARG(QAudio::Mode, QAudio::AudioInput), Q_ARG(QString, VOICE_RECOGNITION));
|
||||||
|
} else if ( (!pluggedIn && enableAEC.get()) && !activeDev.isNull() && activeDev.deviceName() != VOICE_COMMUNICATION) {
|
||||||
|
QMetaObject::invokeMethod(audioClient.get(), "switchAudioDevice", Q_ARG(QAudio::Mode, QAudio::AudioInput), Q_ARG(QString, VOICE_COMMUNICATION));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ public:
|
||||||
|
|
||||||
void performHapticFeedback(int duration);
|
void performHapticFeedback(int duration);
|
||||||
void processURL(const QString &url);
|
void processURL(const QString &url);
|
||||||
|
void notifyHeadsetOn(bool pluggedIn);
|
||||||
|
|
||||||
AndroidHelper(AndroidHelper const&) = delete;
|
AndroidHelper(AndroidHelper const&) = delete;
|
||||||
void operator=(AndroidHelper const&) = delete;
|
void operator=(AndroidHelper const&) = delete;
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
#include "AudioHelpers.h"
|
#include "AudioHelpers.h"
|
||||||
|
|
||||||
#if defined(Q_OS_ANDROID)
|
#if defined(Q_OS_ANDROID)
|
||||||
#define VOICE_RECOGNITION "voicerecognition"
|
|
||||||
#include <QtAndroidExtras/QAndroidJniObject>
|
#include <QtAndroidExtras/QAndroidJniObject>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -451,9 +450,12 @@ QAudioDeviceInfo defaultAudioDeviceForMode(QAudio::Mode mode) {
|
||||||
|
|
||||||
#if defined (Q_OS_ANDROID)
|
#if defined (Q_OS_ANDROID)
|
||||||
if (mode == QAudio::AudioInput) {
|
if (mode == QAudio::AudioInput) {
|
||||||
|
Setting::Handle<bool> enableAEC(QStringList() << ANDROID_SETTINGS_GROUP << SETTING_AEC_KEY, false);
|
||||||
|
bool aecEnabled = enableAEC.get();
|
||||||
auto inputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
auto inputDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
||||||
for (auto inputDevice : inputDevices) {
|
for (auto inputDevice : inputDevices) {
|
||||||
if (inputDevice.deviceName() == VOICE_RECOGNITION) {
|
if ((aecEnabled && inputDevice.deviceName() == VOICE_COMMUNICATION) ||
|
||||||
|
(!aecEnabled && inputDevice.deviceName() == VOICE_RECOGNITION)) {
|
||||||
return inputDevice;
|
return inputDevice;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -64,6 +64,14 @@
|
||||||
#pragma warning( pop )
|
#pragma warning( pop )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined (Q_OS_ANDROID)
|
||||||
|
#define VOICE_RECOGNITION "voicerecognition"
|
||||||
|
#define VOICE_COMMUNICATION "voicecommunication"
|
||||||
|
|
||||||
|
#define ANDROID_SETTINGS_GROUP "Android"
|
||||||
|
#define SETTING_AEC_KEY "aec"
|
||||||
|
#endif
|
||||||
|
|
||||||
class QAudioInput;
|
class QAudioInput;
|
||||||
class QAudioOutput;
|
class QAudioOutput;
|
||||||
class QIODevice;
|
class QIODevice;
|
||||||
|
|
Loading…
Reference in a new issue