mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-18 03:48:08 +00:00
206 lines
7.2 KiB
Java
206 lines
7.2 KiB
Java
package org.linphone.assistant;
|
|
|
|
/*
|
|
CodecDownloaderFragment.java
|
|
Copyright (C) 2017 Belledonne Communications, Grenoble, France
|
|
|
|
This program is free software; you can redistribute it and/or
|
|
modify it under the terms of the GNU General Public License
|
|
as published by the Free Software Foundation; either version 2
|
|
of the License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
import org.linphone.LinphoneManager;
|
|
import org.linphone.R;
|
|
import org.linphone.core.CoreException;
|
|
import org.linphone.core.tools.OpenH264DownloadHelperListener;
|
|
import org.linphone.core.PayloadType;
|
|
import org.linphone.core.tools.OpenH264DownloadHelper;
|
|
|
|
import android.app.Fragment;
|
|
import android.os.Build;
|
|
import android.os.Bundle;
|
|
import android.os.Handler;
|
|
import android.view.LayoutInflater;
|
|
import android.view.View;
|
|
import android.view.ViewGroup;
|
|
import android.widget.Button;
|
|
import android.widget.ProgressBar;
|
|
import android.widget.TextView;
|
|
|
|
public class CodecDownloaderFragment extends Fragment {
|
|
private Handler mHandler = new Handler();
|
|
private TextView question;
|
|
private TextView downloading;
|
|
private TextView downloaded;
|
|
private Button yes;
|
|
private Button no;
|
|
private Button ok;
|
|
private ProgressBar bar;
|
|
private TextView downloadingInfo;
|
|
|
|
@Override
|
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
|
Bundle savedInstanceState) {
|
|
final View view = inflater.inflate(R.layout.assistant_codec_downloader, container, false);
|
|
|
|
question = (TextView) view.findViewById(R.id.question);
|
|
downloading = (TextView) view.findViewById(R.id.downloading);
|
|
downloaded = (TextView) view.findViewById(R.id.downloaded);
|
|
yes = (Button) view.findViewById(R.id.answerYes);
|
|
no = (Button) view.findViewById(R.id.answerNo);
|
|
ok = (Button) view.findViewById(R.id.answerOk);
|
|
bar = (ProgressBar) view.findViewById(R.id.progressBar);
|
|
downloadingInfo = (TextView) view.findViewById(R.id.downloadingInfo);
|
|
|
|
final OpenH264DownloadHelper codecDownloader = LinphoneManager.getInstance().getOpenH264DownloadHelper();
|
|
final OpenH264DownloadHelperListener codecListener = new OpenH264DownloadHelperListener() {
|
|
|
|
@Override
|
|
public void OnProgress(final int current, final int max) {
|
|
mHandler.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (current <= max) {
|
|
hideAllItems();
|
|
downloadingInfo.setText(current + " / " + max);
|
|
downloadingInfo.setVisibility(View.VISIBLE);
|
|
downloading.setVisibility(View.VISIBLE);
|
|
bar.setMax(max);
|
|
bar.setProgress(current);
|
|
bar.setVisibility(View.VISIBLE);
|
|
} else {
|
|
hideAllItems();
|
|
downloaded.setVisibility(View.VISIBLE);
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {
|
|
enabledH264(true);
|
|
LinphoneManager.getLc().reloadMsPlugins(AssistantActivity.instance().getApplicationInfo().nativeLibraryDir);
|
|
AssistantActivity.instance().endDownloadCodec();
|
|
} else {
|
|
// We need to restart due to bad android linker
|
|
AssistantActivity.instance().restartApplication();
|
|
}
|
|
}
|
|
}
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public void OnError(final String error) {
|
|
mHandler.post(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
hideAllItems();
|
|
downloaded.setText("Sorry an error has occurred.");
|
|
downloaded.setVisibility(View.VISIBLE);
|
|
ok.setVisibility(View.VISIBLE);
|
|
enabledH264(false);
|
|
AssistantActivity.instance().endDownloadCodec();
|
|
}
|
|
});
|
|
}
|
|
};
|
|
|
|
codecDownloader.setOpenH264HelperListener(codecListener);
|
|
|
|
yes.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
hideAllItems();
|
|
bar.setVisibility(View.VISIBLE);
|
|
codecDownloader.downloadCodec();
|
|
}
|
|
});
|
|
|
|
no.setOnClickListener(new View.OnClickListener() {
|
|
@Override
|
|
public void onClick(View v) {
|
|
enabledH264(false);
|
|
AssistantActivity.instance().endDownloadCodec();
|
|
}
|
|
});
|
|
hideAllItems();
|
|
|
|
if (savedInstanceState != null) {
|
|
if (savedInstanceState.containsKey("question"))
|
|
question.setVisibility((Integer) savedInstanceState.getSerializable("question"));
|
|
else
|
|
question.setVisibility(View.VISIBLE);
|
|
|
|
if (savedInstanceState.containsKey("yes"))
|
|
yes.setVisibility((Integer) savedInstanceState.getSerializable("yes"));
|
|
else
|
|
yes.setVisibility(View.VISIBLE);
|
|
|
|
if (savedInstanceState.containsKey("no"))
|
|
no.setVisibility((Integer) savedInstanceState.getSerializable("no"));
|
|
else
|
|
no.setVisibility(View.VISIBLE);
|
|
|
|
if (savedInstanceState.containsKey("downloading"))
|
|
downloading.setVisibility((Integer) savedInstanceState.getSerializable("downloading"));
|
|
|
|
if (savedInstanceState.containsKey("downloaded"))
|
|
downloaded.setVisibility((Integer) savedInstanceState.getSerializable("downloaded"));
|
|
|
|
if (savedInstanceState.containsKey("bar"))
|
|
bar.setVisibility((Integer) savedInstanceState.getSerializable("bar"));
|
|
|
|
if (savedInstanceState.containsKey("downloadingInfo"))
|
|
downloadingInfo.setVisibility((Integer) savedInstanceState.getSerializable("downloadingInfo"));
|
|
|
|
if (savedInstanceState.containsKey("ok"))
|
|
ok.setVisibility((Integer) savedInstanceState.getSerializable("ok"));
|
|
} else {
|
|
yes.setVisibility(View.VISIBLE);
|
|
question.setVisibility(View.VISIBLE);
|
|
no.setVisibility(View.VISIBLE);
|
|
}
|
|
|
|
return view;
|
|
}
|
|
|
|
@Override
|
|
public void onSaveInstanceState(Bundle outState) {
|
|
if (question != null) outState.putSerializable("question", question.getVisibility());
|
|
if (downloading != null) outState.putSerializable("downloading", downloading.getVisibility());
|
|
if (downloaded != null) outState.putSerializable("downloaded", downloaded.getVisibility());
|
|
if (yes != null) outState.putSerializable("yes", yes.getVisibility());
|
|
if (no != null) outState.putSerializable("no", no.getVisibility());
|
|
if (ok != null) outState.putSerializable("ok", ok.getVisibility());
|
|
if (bar != null) outState.putSerializable("bar", bar.getVisibility());
|
|
if (downloadingInfo != null) outState.putSerializable("downloadingInfo", downloadingInfo.getVisibility());
|
|
super.onSaveInstanceState(outState);
|
|
}
|
|
|
|
private void hideAllItems() {
|
|
if (question != null) question.setVisibility(View.INVISIBLE);
|
|
if (downloading != null) downloading.setVisibility(View.INVISIBLE);
|
|
if (downloaded != null) downloaded.setVisibility(View.INVISIBLE);
|
|
if (yes != null) yes.setVisibility(View.INVISIBLE);
|
|
if (no != null) no.setVisibility(View.INVISIBLE);
|
|
if (ok != null) ok.setVisibility(View.INVISIBLE);
|
|
if (bar != null) bar.setVisibility(View.INVISIBLE);
|
|
if (downloadingInfo != null) downloadingInfo.setVisibility(View.INVISIBLE);
|
|
}
|
|
|
|
private void enabledH264(boolean enable) {
|
|
PayloadType h264 = null;
|
|
for (PayloadType pt : LinphoneManager.getLc().getVideoPayloadTypes()) {
|
|
if (pt.getMimeType().equals("H264")) h264 = pt;
|
|
}
|
|
|
|
if (h264 != null) {
|
|
h264.enable(enable);
|
|
}
|
|
}
|
|
}
|