package com.quickblox.sample.groupchatwebrtc.utils;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.util.Log;
import com.quickblox.sample.groupchatwebrtc.R;
import com.quickblox.videochat.webrtc.QBRTCConfig;
import com.quickblox.videochat.webrtc.QBRTCMediaConfig;
import java.util.List;
/**
* QuickBlox team
*/
public class SettingsUtil {
private static final String TAG = SettingsUtil.class.getSimpleName();
private static void setSettingsForMultiCall(List<Integer> users) {
if (users.size() <= 4) {
setDefaultVideoQuality();
} else {
//set to minimum settings
QBRTCMediaConfig.setVideoWidth(QBRTCMediaConfig.VideoQuality.QBGA_VIDEO.width);
QBRTCMediaConfig.setVideoHeight(QBRTCMediaConfig.VideoQuality.QBGA_VIDEO.height);
QBRTCMediaConfig.setVideoHWAcceleration(false);
QBRTCMediaConfig.setVideoCodec(null);
}
}
public static void setSettingsStrategy(List<Integer> users, SharedPreferences sharedPref, Context context) {
setCommonSettings(sharedPref, context);
if (users.size() == 1) {
setSettingsFromPreferences(sharedPref, context);
} else {
setSettingsForMultiCall(users);
}
}
private static void setCommonSettings(SharedPreferences sharedPref, Context context) {
String audioCodecDescription = getPreferenceString(sharedPref, context, R.string.pref_audiocodec_key,
R.string.pref_audiocodec_def);
QBRTCMediaConfig.AudioCodec audioCodec = QBRTCMediaConfig.AudioCodec.ISAC.getDescription()
.equals(audioCodecDescription) ?
QBRTCMediaConfig.AudioCodec.ISAC : QBRTCMediaConfig.AudioCodec.OPUS;
Log.e(TAG, "audioCodec =: " + audioCodec.getDescription());
QBRTCMediaConfig.setAudioCodec(audioCodec);
Log.v(TAG, "audioCodec = " + QBRTCMediaConfig.getAudioCodec());
// Check Disable built-in AEC flag.
boolean disableBuiltInAEC = getPreferenceBoolean(sharedPref, context,
R.string.pref_disable_built_in_aec_key,
R.string.pref_disable_built_in_aec_default);
QBRTCMediaConfig.setUseBuildInAEC(!disableBuiltInAEC);
Log.v(TAG, "setUseBuildInAEC = " + QBRTCMediaConfig.isUseBuildInAEC());
// Check Disable Audio Processing flag.
boolean noAudioProcessing = getPreferenceBoolean(sharedPref, context,
R.string.pref_noaudioprocessing_key,
R.string.pref_noaudioprocessing_default);
QBRTCMediaConfig.setAudioProcessingEnabled(!noAudioProcessing);
Log.v(TAG, "isAudioProcessingEnabled = " + QBRTCMediaConfig.isAudioProcessingEnabled());
// Check OpenSL ES enabled flag.
boolean useOpenSLES = getPreferenceBoolean(sharedPref, context,
R.string.pref_opensles_key,
R.string.pref_opensles_default);
QBRTCMediaConfig.setUseOpenSLES(useOpenSLES);
Log.v(TAG, "isUseOpenSLES = " + QBRTCMediaConfig.isUseOpenSLES());
}
private static void setSettingsFromPreferences(SharedPreferences sharedPref, Context context) {
// Check HW codec flag.
boolean hwCodec = sharedPref.getBoolean(context.getString(R.string.pref_hwcodec_key),
Boolean.valueOf(context.getString(R.string.pref_hwcodec_default)));
QBRTCMediaConfig.setVideoHWAcceleration(hwCodec);
// Get video resolution from settings.
int resolutionItem = Integer.parseInt(sharedPref.getString(context.getString(R.string.pref_resolution_key),
"0"));
Log.e(TAG, "resolutionItem =: " + resolutionItem);
setVideoQuality(resolutionItem);
Log.v(TAG, "resolution = " + QBRTCMediaConfig.getVideoHeight() + "x" + QBRTCMediaConfig.getVideoWidth());
// Get start bitrate.
int startBitrate = getPreferenceInt(sharedPref, context,
R.string.pref_startbitratevalue_key,
R.string.pref_startbitratevalue_default);
Log.e(TAG, "videoStartBitrate =: " + startBitrate);
QBRTCMediaConfig.setVideoStartBitrate(startBitrate);
Log.v(TAG, "videoStartBitrate = " + QBRTCMediaConfig.getVideoStartBitrate());
int videoCodecItem = Integer.parseInt(getPreferenceString(sharedPref, context, R.string.pref_videocodec_key, "0"));
for (QBRTCMediaConfig.VideoCodec codec : QBRTCMediaConfig.VideoCodec.values()) {
if (codec.ordinal() == videoCodecItem) {
Log.e(TAG, "videoCodecItem =: " + codec.getDescription());
QBRTCMediaConfig.setVideoCodec(codec);
Log.v(TAG, "videoCodecItem = " + QBRTCMediaConfig.getVideoCodec());
break;
}
}
// Get camera fps from settings.
int cameraFps = getPreferenceInt(sharedPref, context, R.string.pref_frame_rate_key, R.string.pref_frame_rate_default);
Log.e(TAG, "cameraFps = " + cameraFps);
QBRTCMediaConfig.setVideoFps(cameraFps);
Log.v(TAG, "cameraFps = " + QBRTCMediaConfig.getVideoFps());
}
public static void configRTCTimers(Context context) {
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(context);
long answerTimeInterval = getPreferenceInt(sharedPref, context,
R.string.pref_answer_time_interval_key,
R.string.pref_answer_time_interval_default_value);
QBRTCConfig.setAnswerTimeInterval(answerTimeInterval);
Log.e(TAG, "answerTimeInterval = " + answerTimeInterval);
int disconnectTimeInterval = getPreferenceInt(sharedPref, context,
R.string.pref_disconnect_time_interval_key,
R.string.pref_disconnect_time_interval_default_value);
QBRTCConfig.setDisconnectTime(disconnectTimeInterval);
Log.e(TAG, "disconnectTimeInterval = " + disconnectTimeInterval);
long dialingTimeInterval = getPreferenceInt(sharedPref, context,
R.string.pref_dialing_time_interval_key,
R.string.pref_dialing_time_interval_default_value);
QBRTCConfig.setDialingTimeInterval(dialingTimeInterval);
Log.e(TAG, "dialingTimeInterval = " + dialingTimeInterval);
}
private static void setVideoQuality(int resolutionItem) {
if (resolutionItem != -1) {
setVideoFromLibraryPreferences(resolutionItem);
} else {
setDefaultVideoQuality();
}
}
private static void setDefaultVideoQuality() {
QBRTCMediaConfig.setVideoWidth(QBRTCMediaConfig.VideoQuality.VGA_VIDEO.width);
QBRTCMediaConfig.setVideoHeight(QBRTCMediaConfig.VideoQuality.VGA_VIDEO.height);
}
private static void setVideoFromLibraryPreferences(int resolutionItem) {
for (QBRTCMediaConfig.VideoQuality quality : QBRTCMediaConfig.VideoQuality.values()) {
if (quality.ordinal() == resolutionItem) {
Log.e(TAG, "resolution =: " + quality.height + ":" + quality.width);
QBRTCMediaConfig.setVideoHeight(quality.height);
QBRTCMediaConfig.setVideoWidth(quality.width);
}
}
}
private static String getPreferenceString(SharedPreferences sharedPref, Context context, int strResKey, int strResDefValue) {
return sharedPref.getString(context.getString(strResKey), context.getString(strResDefValue));
}
private static String getPreferenceString(SharedPreferences sharedPref, Context context, int strResKey, String strResDefValue) {
return sharedPref.getString(context.getString(strResKey), strResDefValue);
}
public static int getPreferenceInt(SharedPreferences sharedPref, Context context, int strResKey, int strResDefValue) {
return sharedPref.getInt(context.getString(strResKey), Integer.valueOf(context.getString(strResDefValue)));
}
private static boolean getPreferenceBoolean(SharedPreferences sharedPref, Context context, int StrRes, int strResDefValue) {
return sharedPref.getBoolean(context.getString(StrRes), Boolean.valueOf(context.getString(strResDefValue)));
}
}