From 37b43c398d25fdcb2328d5ebf36c811c4418bdd6 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 9 Oct 2013 12:31:16 +0200 Subject: [PATCH] Hide settings depending on capabilites and/or app configuration --- src/org/linphone/SettingsFragment.java | 136 +++++++++++++++++++++++-- submodules/linphone | 2 +- 2 files changed, 131 insertions(+), 7 deletions(-) diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index 92f87b22c..3cf38ca02 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -7,13 +7,19 @@ import org.linphone.LinphoneManager.EcCalibrationListener; import org.linphone.core.LinphoneCore; import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.MediaEncryption; +import org.linphone.mediastream.Log; +import org.linphone.mediastream.Version; +import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; +import org.linphone.mediastream.video.capture.hwconf.Hacks; import org.linphone.ui.PreferencesListFragment; import android.os.Bundle; import android.preference.CheckBoxPreference; import android.preference.ListPreference; import android.preference.Preference; +import android.preference.PreferenceScreen; import android.preference.Preference.OnPreferenceClickListener; +import android.preference.PreferenceCategory; public class SettingsFragment extends PreferencesListFragment implements EcCalibrationListener { public SettingsFragment() { @@ -26,8 +32,8 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib // Init the settings page interface initSettings(); - hideSettings(); setListeners(); + hideSettings(); } // Inits the values or the listener on some settings @@ -49,13 +55,135 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib // Disable sip port choice if port is random findPreference(getString(R.string.pref_sip_port_key)).setEnabled(!((CheckBoxPreference)findPreference(getString(R.string.pref_transport_use_random_ports_key))).isChecked()); + + if (getResources().getBoolean(R.bool.disable_all_patented_codecs_for_markets)) { + Preference prefH264 = findPreference(getString(R.string.pref_video_codec_h264_key)); + prefH264.setEnabled(false); + prefH264.setSummary(R.string.pref_video_codec_h264_unavailable); + + Preference prefMPEG4 = findPreference(getString(R.string.pref_video_codec_mpeg4_key)); + prefMPEG4.setEnabled(false); + prefMPEG4.setSummary(R.string.pref_video_codec_mpeg4_unavailable); + } else { + if (!Version.hasFastCpuWithAsmOptim()) + { + // Android without neon doesn't support H264 + Log.w("CPU does not have asm optimisations available, disabling H264"); + findPreference(getString(R.string.pref_video_codec_h264_key)).setEnabled(false); + findPreference(getString(R.string.pref_video_codec_h264_key)).setDefaultValue(false); + } + } + } + + private void setListeners() { + } // Read the values set in resources and hides the settings accordingly private void hideSettings() { if (!getResources().getBoolean(R.bool.display_about_in_settings)) { - findPreference(getString(R.string.menu_about_key)).setLayoutResource(R.layout.hidden); + hidePreference(R.string.menu_about_key); } + + if (getResources().getBoolean(R.bool.hide_accounts)) { + emptyAndHidePreference(R.string.pref_sipaccounts_key); + } + + if (getResources().getBoolean(R.bool.hide_wizard)) { + hidePreference(R.string.setup_key); + } + + if (getResources().getBoolean(R.bool.disable_animations)) { + uncheckAndHidePreference(R.string.pref_animation_enable_key); + } + + if (!getResources().getBoolean(R.bool.enable_linphone_friends)) { + emptyAndHidePreference(R.string.pref_linphone_friend_key); + } + + if (getResources().getBoolean(R.bool.disable_chat)) { + findPreference(getString(R.string.pref_image_sharing_server_key)).setLayoutResource(R.layout.hidden); + } + + if (!getResources().getBoolean(R.bool.enable_push_id)) { + hidePreference(R.string.pref_push_notification_key); + } + + if (!Version.isVideoCapable()) { + uncheckAndHidePreference(R.string.pref_video_enable_key); + } else { + if (!AndroidCameraConfiguration.hasFrontCamera()) { + uncheckAndHidePreference(R.string.pref_video_use_front_camera_key); + } + } + + if (Hacks.hasBuiltInEchoCanceller()) { + uncheckAndHidePreference(R.string.pref_echo_cancellation_key); + hidePreference(R.string.pref_echo_canceller_calibration_key); + } + + if (!LinphoneManager.getLc().isTunnelAvailable()) { + emptyAndHidePreference(R.string.pref_tunnel_key); + } + + if (getResources().getBoolean(R.bool.hide_camera_settings)) { + emptyAndHidePreference(R.string.pref_video_key); + hidePreference(R.string.pref_video_enable_key); + } + + if (getResources().getBoolean(R.bool.disable_every_log)) { + uncheckAndHidePreference(R.string.pref_debug_key); + } + + if (!LinphoneManager.getLc().upnpAvailable()) { + uncheckAndHidePreference(R.string.pref_upnp_enable_key); + } + } + + private void uncheckAndHidePreference(int preferenceKey) { + Preference preference = findPreference(getString(preferenceKey)); + if (!(preference instanceof CheckBoxPreference)) + return; + + CheckBoxPreference checkBoxPreference = (CheckBoxPreference) preference; + checkBoxPreference.setChecked(false); + hidePreference(checkBoxPreference); + } + + private void emptyAndHidePreference(int preferenceKey) { + Preference preference = findPreference(getString(preferenceKey)); + if (preference instanceof PreferenceCategory) + emptyAndHidePreferenceCategory(preferenceKey); + else if (preference instanceof PreferenceScreen) + emptyAndHidePreferenceScreen(preferenceKey); + } + + private void emptyAndHidePreferenceCategory(int preferenceKey) { + Preference preference = findPreference(getString(preferenceKey)); + if (!(preference instanceof PreferenceCategory)) + return; + + PreferenceCategory preferenceCategory = (PreferenceCategory) preference; + preferenceCategory.removeAll(); + hidePreference(preferenceCategory); + } + + private void emptyAndHidePreferenceScreen(int preferenceKey) { + Preference preference = findPreference(getString(preferenceKey)); + if (!(preference instanceof PreferenceScreen)) + return; + + PreferenceScreen preferenceScreen = (PreferenceScreen) preference; + preferenceScreen.removeAll(); + hidePreference(preferenceScreen); + } + + private void hidePreference(int preferenceKey) { + hidePreference(findPreference(getString(preferenceKey))); + } + + private void hidePreference(Preference preference) { + preference.setLayoutResource(R.layout.hidden); } private void initMediaEncryptionPreference(ListPreference pref) { @@ -115,10 +243,6 @@ public class SettingsFragment extends PreferencesListFragment implements EcCalib pref.setEntryValues(contents); } - private void setListeners() { - - } - @Override public void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs) { diff --git a/submodules/linphone b/submodules/linphone index 13442d397..863770beb 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 13442d397b8a8e5c8c95bb525fa0491d0ad1599b +Subproject commit 863770bebb7193963df5af36d30c968bb053d50e