From 43585944e9be56fa9760fd2311dcf98cd9105308 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Mon, 20 Jun 2016 14:14:20 +0200 Subject: [PATCH 01/16] Update submodule + add codec downloader to ui --- src/org/linphone/SettingsFragment.java | 10 +++++++++- src/org/linphone/assistant/WelcomeFragment.java | 13 +++++++++++-- submodules/cmake-builder | 2 +- submodules/linphone | 2 +- 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index b82ae71e1..033bf4cb4 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -24,7 +24,6 @@ import java.util.List; import org.linphone.core.LinphoneAddress; import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.AdaptiveRateAlgorithm; import org.linphone.core.LinphoneCore.EcCalibratorStatus; import org.linphone.core.LinphoneCore.MediaEncryption; import org.linphone.core.LinphoneCoreException; @@ -34,9 +33,11 @@ import org.linphone.core.PayloadType; import org.linphone.mediastream.Log; import org.linphone.mediastream.Version; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; +import org.linphone.tools.CodecDownloader; import org.linphone.ui.LedPreference; import org.linphone.ui.PreferencesListFragment; +import android.content.Context; import android.os.Bundle; import android.os.Handler; import android.preference.CheckBoxPreference; @@ -539,6 +540,7 @@ public class SettingsFragment extends PreferencesListFragment { } private void initVideoSettings() { + final Context ctxt = LinphoneManager.getInstance().getContext(); initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_key))); initializePreferredVideoFpsPreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_fps_key))); EditTextPreference bandwidth = (EditTextPreference) findPreference(getString(R.string.pref_bandwidth_limit_key)); @@ -577,6 +579,12 @@ public class SettingsFragment extends PreferencesListFragment { public boolean onPreferenceChange(Preference preference, Object newValue) { boolean enable = (Boolean) newValue; try { + if (Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") && pt.getMime().equals("H264")) { + if (enable && !CodecDownloader.codecExist(ctxt)) { + CodecDownloader download = new CodecDownloader(ctxt); + download.askPopUp("Do you want to download h264 codec?","No","Yes"); + } + } LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable); } catch (LinphoneCoreException e) { Log.e(e); diff --git a/src/org/linphone/assistant/WelcomeFragment.java b/src/org/linphone/assistant/WelcomeFragment.java index a03401a03..8a2aaa629 100644 --- a/src/org/linphone/assistant/WelcomeFragment.java +++ b/src/org/linphone/assistant/WelcomeFragment.java @@ -17,7 +17,10 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +import org.linphone.LinphonePreferences; import org.linphone.R; +import org.linphone.mediastream.Version; +import org.linphone.tools.CodecDownloader; import android.app.Fragment; import android.os.Bundle; @@ -37,10 +40,16 @@ public class WelcomeFragment extends Fragment implements OnClickListener { public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_welcome, container, false); - + + if (LinphonePreferences.instance().isFirstLaunch() && Version.getCpuAbis().contains("armeabi-v7a") + && !Version.getCpuAbis().contains("x86") && !CodecDownloader.codecExist(getContext())) { + CodecDownloader download = new CodecDownloader(getContext()); + download.askPopUp("Do you want to download h264 codec?","No","Yes"); + } + createAccount = (Button) view.findViewById(R.id.create_account); createAccount.setOnClickListener(this); - + logLinphoneAccount = (Button) view.findViewById(R.id.login_linphone); if (getResources().getBoolean(R.bool.hide_linphone_accounts_wizard)) { logLinphoneAccount.setVisibility(View.GONE); diff --git a/submodules/cmake-builder b/submodules/cmake-builder index a4d728381..4e6e419e0 160000 --- a/submodules/cmake-builder +++ b/submodules/cmake-builder @@ -1 +1 @@ -Subproject commit a4d728381cf3eabb8ed4114807cea6628b675ab5 +Subproject commit 4e6e419e08721cefdc5d30067b2794710f74e1e6 diff --git a/submodules/linphone b/submodules/linphone index d8158669f..76074d2bc 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit d8158669f356262a93034645f2bb14829127bba4 +Subproject commit 76074d2bc028b09fa1853486c75d2dd2c4c3bbaa From 3f6e93a37d274aea9a86b9fdc50fb0cf101c823f Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Tue, 21 Jun 2016 13:38:49 +0200 Subject: [PATCH 02/16] Update linphone + override CodecDownloader to app --- src/org/linphone/LinphoneManager.java | 125 ++++++++++++++++++ src/org/linphone/SettingsFragment.java | 12 +- .../linphone/assistant/WelcomeFragment.java | 6 +- submodules/linphone | 2 +- 4 files changed, 135 insertions(+), 10 deletions(-) diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index f94fe313e..c9db5b3d7 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -56,6 +56,7 @@ import org.linphone.core.LinphoneCore.RegistrationState; import org.linphone.core.LinphoneCore.RemoteProvisioningState; import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.LinphoneCoreFactoryImpl; import org.linphone.core.LinphoneCoreListener; import org.linphone.core.LinphoneEvent; import org.linphone.core.LinphoneFriend; @@ -73,13 +74,17 @@ import org.linphone.mediastream.Version; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera; import org.linphone.mediastream.video.capture.hwconf.Hacks; +import org.linphone.tools.CodecDownloader; import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.Activity; +import android.app.AlertDialog; +import android.app.ProgressDialog; import android.content.BroadcastReceiver; import android.content.ContentResolver; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.PackageManager.NameNotFoundException; @@ -101,6 +106,7 @@ import android.os.Handler; import android.os.PowerManager; import android.os.PowerManager.WakeLock; import android.os.Vibrator; +import android.preference.CheckBoxPreference; import android.provider.MediaStore; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; @@ -135,6 +141,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private Resources mR; private LinphonePreferences mPrefs; private LinphoneCore mLc; + private CodecDownloader mCodecDownloader; private String lastLcStatusMessage; private String basePath; private static boolean sExited; @@ -182,6 +189,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mConnectivityManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE); mR = c.getResources(); mPendingChatFileMessage = new ArrayList(); + initCodecDownloader(); } private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; @@ -212,6 +220,123 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mLc.enableSpeaker(speakerOn); } + private void initCodecDownloader() { + mCodecDownloader = new CodecDownloader() { + Context ctxt = mServiceContext; + ProgressDialog progress; + CheckBoxPreference box; + + @Override + public void listenerDownloadStarting() { + if (mServiceContext == null) return; + mHandler.post(new Runnable() { + @Override + public void run() { + progress = new ProgressDialog(ctxt); + progress.setCanceledOnTouchOutside(false); + progress.setCancelable(false); + progress.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); + } + }); + } + + @Override + public void listenerUpdateMsg(final int now, final int max) { + if (progress == null) return; + mHandler.post(new Runnable() { + @Override + public void run() { + progress.setMessage("Downloading OpenH264"); + progress.setMax(max); + progress.setProgress(now); + progress.show(); + } + }); + } + + @Override + public void listenerDownloadEnding() { + if (progress == null) return; + mHandler.post(new Runnable() { + @Override + public void run() { + progress.dismiss(); + LinphoneCoreFactoryImpl.loadOptionalLibraryWithPath(ctxt.getFilesDir()+"/" + CodecDownloader.getNameLib()); + LinphoneManager.getLc().reloadMsPlugins(null); + AlertDialog.Builder builder = new AlertDialog.Builder(ctxt); + builder.setMessage(CodecDownloader.getLicenseMessage() + " downloaded"); + builder.setCancelable(false); + builder.setNeutralButton("Ok", null); + builder.show(); + if (box != null) box.setSummary(CodecDownloader.getLicenseMessage()); + } + }); + } + + @Override + public void listenerDownloadFailed(final String error) { + if (progress == null) return; + mHandler.post(new Runnable() { + @Override + public void run() { + if (progress != null) progress.dismiss(); + AlertDialog.Builder builder = new AlertDialog.Builder(ctxt); + builder.setMessage(error); + builder.show(); + } + }); + } + + @Override + public void startDownload(Context context, Object obj) { + box = (CheckBoxPreference)obj; + ctxt = context; + this.setFileDirection(ctxt.getFilesDir().toString()); + askPopUp(); + } + + + public void askPopUp() { + AlertDialog.Builder builder = new AlertDialog.Builder(ctxt); + builder.setCancelable(false); + AlertDialog.Builder show = builder.setMessage("Do you want to download " + + CodecDownloader.getLicenseMessage()).setPositiveButton("Yes", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) + mCodecDownloader.downloadCodec(); + } + }); + builder.setNegativeButton("No", new DialogInterface.OnClickListener(){ + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_NEGATIVE){ + // Disable H264 + PayloadType h264 = null; + for (PayloadType pt : mLc.getVideoCodecs()) { + if (pt.getMime().equals("H264")) h264 = pt; + } + + if (h264 == null) return; + + if (LinphonePreferences.instance().isFirstLaunch()) { + try { + mLc.enablePayloadType(h264, false); + } catch (LinphoneCoreException e) { + e.printStackTrace(); + } + } + } + } + }).show(); + } + }; + } + + public CodecDownloader getCodecDownloader(){ + return mCodecDownloader; + } + public void routeAudioToSpeaker() { routeAudioToSpeakerHelper(true); } diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index 033bf4cb4..1a7313764 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -557,7 +557,7 @@ public class SettingsFragment extends PreferencesListFragment { LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); for (final PayloadType pt : lc.getVideoCodecs()) { - CheckBoxPreference codec = new CheckBoxPreference(getActivity()); + final CheckBoxPreference codec = new CheckBoxPreference(getActivity()); codec.setTitle(pt.getMime()); if (!pt.getMime().equals("VP8")) { @@ -572,6 +572,8 @@ public class SettingsFragment extends PreferencesListFragment { } } } + if (pt.getMime().equals("H264") && CodecDownloader.codecExist(ctxt)) + codec.setSummary(CodecDownloader.getLicenseMessage()); codec.setChecked(lc.isPayloadTypeEnabled(pt)); codec.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @@ -579,11 +581,9 @@ public class SettingsFragment extends PreferencesListFragment { public boolean onPreferenceChange(Preference preference, Object newValue) { boolean enable = (Boolean) newValue; try { - if (Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") && pt.getMime().equals("H264")) { - if (enable && !CodecDownloader.codecExist(ctxt)) { - CodecDownloader download = new CodecDownloader(ctxt); - download.askPopUp("Do you want to download h264 codec?","No","Yes"); - } + if (enable && Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") + && pt.getMime().equals("H264") && !CodecDownloader.codecExist(ctxt)) { + LinphoneManager.getInstance().getCodecDownloader().startDownload(ctxt, codec); } LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable); } catch (LinphoneCoreException e) { diff --git a/src/org/linphone/assistant/WelcomeFragment.java b/src/org/linphone/assistant/WelcomeFragment.java index 8a2aaa629..113df104d 100644 --- a/src/org/linphone/assistant/WelcomeFragment.java +++ b/src/org/linphone/assistant/WelcomeFragment.java @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; import org.linphone.mediastream.Version; @@ -42,9 +43,8 @@ public class WelcomeFragment extends Fragment implements OnClickListener { View view = inflater.inflate(R.layout.assistant_welcome, container, false); if (LinphonePreferences.instance().isFirstLaunch() && Version.getCpuAbis().contains("armeabi-v7a") - && !Version.getCpuAbis().contains("x86") && !CodecDownloader.codecExist(getContext())) { - CodecDownloader download = new CodecDownloader(getContext()); - download.askPopUp("Do you want to download h264 codec?","No","Yes"); + && !Version.getCpuAbis().contains("x86") && !CodecDownloader.codecExist(getContext())) { + LinphoneManager.getInstance().getCodecDownloader().startDownload(getContext(), null); } createAccount = (Button) view.findViewById(R.id.create_account); diff --git a/submodules/linphone b/submodules/linphone index 76074d2bc..031a83953 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 76074d2bc028b09fa1853486c75d2dd2c4c3bbaa +Subproject commit 031a83953bfa302e3035b5b8d99491578ad0e258 From ff0ad63b01bcdd80b606adcf81700535906d642d Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Tue, 21 Jun 2016 14:32:12 +0200 Subject: [PATCH 03/16] Update linphone --- src/org/linphone/LinphoneManager.java | 1 - src/org/linphone/SettingsFragment.java | 4 ++-- src/org/linphone/assistant/WelcomeFragment.java | 3 ++- submodules/linphone | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index c9db5b3d7..7b4c93429 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -291,7 +291,6 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag public void startDownload(Context context, Object obj) { box = (CheckBoxPreference)obj; ctxt = context; - this.setFileDirection(ctxt.getFilesDir().toString()); askPopUp(); } diff --git a/src/org/linphone/SettingsFragment.java b/src/org/linphone/SettingsFragment.java index 1a7313764..aa05344c6 100644 --- a/src/org/linphone/SettingsFragment.java +++ b/src/org/linphone/SettingsFragment.java @@ -572,7 +572,7 @@ public class SettingsFragment extends PreferencesListFragment { } } } - if (pt.getMime().equals("H264") && CodecDownloader.codecExist(ctxt)) + if (pt.getMime().equals("H264") && CodecDownloader.codecExist()) codec.setSummary(CodecDownloader.getLicenseMessage()); codec.setChecked(lc.isPayloadTypeEnabled(pt)); @@ -582,7 +582,7 @@ public class SettingsFragment extends PreferencesListFragment { boolean enable = (Boolean) newValue; try { if (enable && Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") - && pt.getMime().equals("H264") && !CodecDownloader.codecExist(ctxt)) { + && pt.getMime().equals("H264") && !CodecDownloader.codecExist()) { LinphoneManager.getInstance().getCodecDownloader().startDownload(ctxt, codec); } LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable); diff --git a/src/org/linphone/assistant/WelcomeFragment.java b/src/org/linphone/assistant/WelcomeFragment.java index 113df104d..680f7b424 100644 --- a/src/org/linphone/assistant/WelcomeFragment.java +++ b/src/org/linphone/assistant/WelcomeFragment.java @@ -42,8 +42,9 @@ public class WelcomeFragment extends Fragment implements OnClickListener { Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_welcome, container, false); + LinphoneManager.getInstance().getCodecDownloader().setFileDirection(getContext().getFilesDir().toString()); if (LinphonePreferences.instance().isFirstLaunch() && Version.getCpuAbis().contains("armeabi-v7a") - && !Version.getCpuAbis().contains("x86") && !CodecDownloader.codecExist(getContext())) { + && !Version.getCpuAbis().contains("x86") && !CodecDownloader.codecExist()) { LinphoneManager.getInstance().getCodecDownloader().startDownload(getContext(), null); } diff --git a/submodules/linphone b/submodules/linphone index 031a83953..c4d988bba 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 031a83953bfa302e3035b5b8d99491578ad0e258 +Subproject commit c4d988bba2eeac1cb5253d3210a831cbe10120c0 From 6bd92c40b7b36e2d2f3840bc28beb51e6a97f13b Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Thu, 23 Jun 2016 15:12:24 +0200 Subject: [PATCH 04/16] Add new assistant fragment for Codec Downloader + update linphone --- res/layout/assistant_codec_downloader.xml | 105 +++++++++++++ res/values/strings.xml | 3 + src/org/linphone/LinphoneManager.java | 118 ++++++-------- src/org/linphone/SettingsFragment.java | 9 +- .../linphone/assistant/AssistantActivity.java | 27 +++- .../assistant/AssistantFragmentsEnum.java | 3 +- .../assistant/CodecDownloaderFragment.java | 146 ++++++++++++++++++ .../linphone/assistant/WelcomeFragment.java | 10 -- submodules/linphone | 2 +- 9 files changed, 335 insertions(+), 88 deletions(-) create mode 100644 res/layout/assistant_codec_downloader.xml create mode 100644 src/org/linphone/assistant/CodecDownloaderFragment.java diff --git a/res/layout/assistant_codec_downloader.xml b/res/layout/assistant_codec_downloader.xml new file mode 100644 index 000000000..61aaf6981 --- /dev/null +++ b/res/layout/assistant_codec_downloader.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + +