From f2c6bf325e1759cbdfbbb57fd17e9ba7af14df23 Mon Sep 17 00:00:00 2001 From: Erwan Croze Date: Fri, 1 Jul 2016 10:52:20 +0200 Subject: [PATCH] Save informations on rotation for download assistant --- .../linphone/assistant/AssistantActivity.java | 14 +- .../assistant/CodecDownloaderFragment.java | 129 +++++++++++++----- 2 files changed, 105 insertions(+), 38 deletions(-) diff --git a/src/org/linphone/assistant/AssistantActivity.java b/src/org/linphone/assistant/AssistantActivity.java index fb72b6173..505cc2fd6 100644 --- a/src/org/linphone/assistant/AssistantActivity.java +++ b/src/org/linphone/assistant/AssistantActivity.java @@ -74,6 +74,7 @@ private static AssistantActivity instance; private ProgressDialog progress; private Dialog dialog; private boolean remoteProvisioningInProgress; + private boolean echoCancellerAlreadyDone; private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 201; protected void onCreate(Bundle savedInstanceState) { @@ -94,6 +95,11 @@ private static AssistantActivity instance; currentFragment = (AssistantFragmentsEnum) savedInstanceState.getSerializable("CurrentFragment"); } } + if (savedInstanceState != null && savedInstanceState.containsKey("echoCanceller")) { + echoCancellerAlreadyDone = savedInstanceState.getBoolean("echoCanceller"); + } else { + echoCancellerAlreadyDone = false; + } mPrefs = LinphonePreferences.instance(); //if(mPrefs.isFirstLaunch()) { status.enableSideMenu(false); @@ -154,6 +160,7 @@ private static AssistantActivity instance; @Override protected void onSaveInstanceState(Bundle outState) { outState.putSerializable("CurrentFragment", currentFragment); + outState.putBoolean("echoCanceller", echoCancellerAlreadyDone); super.onSaveInstanceState(outState); } @@ -179,6 +186,10 @@ private static AssistantActivity instance; transaction.commitAllowingStateLoss(); } + public AssistantFragmentsEnum getCurrentFragment() { + return currentFragment; + } + @Override public void onClick(View v) { int id = v.getId(); @@ -253,13 +264,14 @@ private static AssistantActivity instance; private boolean launchEchoCancellerCalibration(boolean sendEcCalibrationResult) { if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED) { boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration(); - if (needsEchoCalibration && mPrefs.isFirstLaunch()) { + if (needsEchoCalibration && mPrefs.isFirstLaunch() && !echoCancellerAlreadyDone) { EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment(); fragment.enableEcCalibrationResultSending(sendEcCalibrationResult); changeFragment(fragment); currentFragment = AssistantFragmentsEnum.ECHO_CANCELLER_CALIBRATION; back.setVisibility(View.VISIBLE); cancel.setEnabled(false); + echoCancellerAlreadyDone = true; return true; } } else { diff --git a/src/org/linphone/assistant/CodecDownloaderFragment.java b/src/org/linphone/assistant/CodecDownloaderFragment.java index a14dfde53..cb9d1d551 100644 --- a/src/org/linphone/assistant/CodecDownloaderFragment.java +++ b/src/org/linphone/assistant/CodecDownloaderFragment.java @@ -29,6 +29,7 @@ import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; +import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; import org.linphone.R; import org.linphone.core.LinphoneCoreFactory; @@ -41,23 +42,31 @@ import org.linphone.tools.OpenH264DownloadHelper; * @author Erwan CROZE */ public class CodecDownloaderFragment extends Fragment { - private Handler mHandler = new Handler(); + 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); - final TextView question = (TextView) view.findViewById(R.id.question); - final TextView downloading = (TextView) view.findViewById(R.id.downloading); - final TextView downloaded = (TextView) view.findViewById(R.id.downloaded); - final Button yes = (Button) view.findViewById(R.id.answerYes); - final Button no = (Button) view.findViewById(R.id.answerNo); - final Button ok = (Button) view.findViewById(R.id.answerOk); - final ProgressBar bar = (ProgressBar) view.findViewById(R.id.progressBar); - final TextView downloadingInfo = (TextView) view.findViewById(R.id.downloadingInfo); + 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 = LinphoneCoreFactory.instance().createOpenH264DownloadHelper(); + final OpenH264DownloadHelper codecDownloader = LinphoneManager.getInstance().getOpenH264DownloadHelper(); final OpenH264DownloadHelperListener codecListener = new OpenH264DownloadHelperListener() { @Override @@ -66,16 +75,16 @@ public class CodecDownloaderFragment extends Fragment { @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 { - downloadingInfo.setVisibility(View.INVISIBLE); - bar.setVisibility(View.INVISIBLE); + hideAllItems(); LinphoneManager.getLc().reloadMsPlugins(null); - downloading.setVisibility(View.INVISIBLE); downloaded.setVisibility(View.VISIBLE); enabledH264(true); AssistantActivity.instance().endDownloadCodec(); @@ -85,16 +94,11 @@ public class CodecDownloaderFragment extends Fragment { } @Override - public void OnError (final String error){ + public void OnError(final String error) { mHandler.post(new Runnable() { @Override public void run() { - question.setVisibility(View.INVISIBLE); - downloading.setVisibility(View.INVISIBLE); - yes.setVisibility(View.INVISIBLE); - no.setVisibility(View.INVISIBLE); - bar.setVisibility(View.INVISIBLE); - downloadingInfo.setVisibility(View.INVISIBLE); + hideAllItems(); downloaded.setText("Sorry an error has occurred."); downloaded.setVisibility(View.VISIBLE); ok.setVisibility(View.VISIBLE); @@ -106,25 +110,15 @@ public class CodecDownloaderFragment extends Fragment { }; codecDownloader.setOpenH264HelperListener(codecListener); - downloading.setVisibility(View.INVISIBLE); - downloaded.setVisibility(View.INVISIBLE); - bar.setVisibility(View.INVISIBLE); - downloadingInfo.setVisibility(View.INVISIBLE); - ok.setVisibility(View.INVISIBLE); yes.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - question.setVisibility(View.INVISIBLE); - yes.setVisibility(View.INVISIBLE); - no.setVisibility(View.INVISIBLE); - downloading.setVisibility(View.VISIBLE); - ok.setVisibility(View.INVISIBLE); - bar.setVisibility(View.VISIBLE); - downloadingInfo.setVisibility(View.INVISIBLE); - codecDownloader.downloadCodec(); - } - }); + @Override + public void onClick(View v) { + hideAllItems(); + bar.setVisibility(View.VISIBLE); + codecDownloader.downloadCodec(); + } + }); no.setOnClickListener(new View.OnClickListener() { @Override @@ -133,10 +127,71 @@ public class CodecDownloaderFragment extends Fragment { 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().getVideoCodecs()) {