From e0ea1bc98b94b836b89e54c09645a023d56d0898 Mon Sep 17 00:00:00 2001 From: Brieuc Viel Date: Tue, 28 Mar 2017 14:01:08 +0200 Subject: [PATCH] [HangOn] Handset intent implementation + submodule linphone updated --- AndroidManifest.xml | 37 ++++--- build.gradle | 3 +- gradle/wrapper/gradle-wrapper.properties | 4 +- liblinphone_tester/build.gradle | 2 +- src/org/linphone/CallActivity.java | 66 ++++++------ src/org/linphone/CallIncomingActivity.java | 25 ++--- src/org/linphone/ChatFragment.java | 1 - src/org/linphone/LinphoneManager.java | 116 ++++++++++++--------- submodules/linphone | 2 +- 9 files changed, 143 insertions(+), 113 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8bc78f313..e4f8946bd 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -1,6 +1,6 @@ - @@ -10,8 +10,9 @@ android:targetSdkVersion="23"/> - - + + + @@ -133,7 +134,6 @@ - + + + + + + - - + + + + --> - - + @@ -318,4 +327,4 @@ - + \ No newline at end of file diff --git a/build.gradle b/build.gradle index 3dd7bdc00..9591c313c 100644 --- a/build.gradle +++ b/build.gradle @@ -18,7 +18,7 @@ buildscript { mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:2.2.2' if (googleFile.exists()) { classpath 'com.google.gms:google-services:3.0.0' } @@ -106,6 +106,7 @@ android { debug.setRoot('build-types/debug') release.setRoot('build-types/release') } + buildToolsVersion '25.0.2' } ///////////// Task ///////////// diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 39d1a4c89..b274b346d 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Fri Feb 24 09:27:36 CET 2017 +#Wed Mar 22 15:25:45 CET 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-3.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip diff --git a/liblinphone_tester/build.gradle b/liblinphone_tester/build.gradle index 4f786ec02..b54ca8cbb 100644 --- a/liblinphone_tester/build.gradle +++ b/liblinphone_tester/build.gradle @@ -18,7 +18,7 @@ buildscript { mavenLocal() } dependencies { - classpath 'com.android.tools.build:gradle:2.3.0' + classpath 'com.android.tools.build:gradle:2.2.2' if (googleFile.exists()) { classpath 'com.google.gms:google-services:3.0.0' } diff --git a/src/org/linphone/CallActivity.java b/src/org/linphone/CallActivity.java index 6876d9256..2a42ccfe7 100644 --- a/src/org/linphone/CallActivity.java +++ b/src/org/linphone/CallActivity.java @@ -17,32 +17,6 @@ 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 java.text.DecimalFormat; -import java.util.Arrays; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; -import java.util.HashMap; - -import org.linphone.core.CallDirection; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCallStats; -import org.linphone.core.LinphoneCallStats.LinphoneAddressFamily; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphonePlayer; -import org.linphone.core.PayloadType; -import org.linphone.mediastream.Log; -import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; -import org.linphone.ui.Numpad; -import org.linphone.mediastream.Factory; - import android.Manifest; import android.app.Activity; import android.app.Dialog; @@ -86,6 +60,30 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; +import org.linphone.core.LinphoneAddress; +import org.linphone.core.LinphoneCall; +import org.linphone.core.LinphoneCall.State; +import org.linphone.core.LinphoneCallParams; +import org.linphone.core.LinphoneCallStats; +import org.linphone.core.LinphoneCallStats.LinphoneAddressFamily; +import org.linphone.core.LinphoneChatMessage; +import org.linphone.core.LinphoneChatRoom; +import org.linphone.core.LinphoneCore; +import org.linphone.core.LinphoneCoreException; +import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.LinphonePlayer; +import org.linphone.core.PayloadType; +import org.linphone.mediastream.Log; +import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; +import org.linphone.ui.Numpad; + +import java.text.DecimalFormat; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + /** * @author Sylvain Berfini */ @@ -273,7 +271,6 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList enableAndRefreshInCallActions(); } } - if (savedInstanceState != null) { // Fragment already created, no need to create it again (else it will generate a memory leak with duplicated fragments) isSpeakerEnabled = savedInstanceState.getBoolean("Speaker"); @@ -403,11 +400,6 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList contactPicture = (ImageView) findViewById(R.id.contact_picture); avatar_layout = (RelativeLayout) findViewById(R.id.avatar_layout); - /*if(isTablet()){ - speaker.setEnabled(false); - } - speaker.setEnabled(false);*/ - //Options addCall = (ImageView) findViewById(R.id.add_call); addCall.setOnClickListener(this); @@ -534,7 +526,11 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList displayMissedChats(); } - private void refreshInCallActions() { + protected void setSpeakerEnabled(boolean enabled){ + isSpeakerEnabled = enabled; + } + + protected void refreshInCallActions() { if (!LinphonePreferences.instance().isVideoEnabled() || isConferenceRunning) { enabledVideoButton(false); } else { @@ -921,7 +917,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } } - private void toggleSpeaker() { + protected void toggleSpeaker() { isSpeakerEnabled = !isSpeakerEnabled; if (isSpeakerEnabled) { LinphoneManager.getInstance().routeAudioToSpeaker(); @@ -1200,6 +1196,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList @Override protected void onResume() { + instance = this; super.onResume(); @@ -1207,6 +1204,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList if (lc != null) { lc.addListener(mListener); } + isSpeakerEnabled = LinphoneManager.getLc().isSpeakerEnabled(); refreshIncallUi(); handleViewIntent(); diff --git a/src/org/linphone/CallIncomingActivity.java b/src/org/linphone/CallIncomingActivity.java index b428de7e2..814220633 100644 --- a/src/org/linphone/CallIncomingActivity.java +++ b/src/org/linphone/CallIncomingActivity.java @@ -18,18 +18,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.linphone; -import java.util.ArrayList; -import java.util.List; - -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.mediastream.Log; -import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; - import android.Manifest; import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; @@ -44,6 +32,18 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; +import org.linphone.core.LinphoneAddress; +import org.linphone.core.LinphoneCall; +import org.linphone.core.LinphoneCall.State; +import org.linphone.core.LinphoneCallParams; +import org.linphone.core.LinphoneCore; +import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.mediastream.Log; +import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; + +import java.util.ArrayList; +import java.util.List; + public class CallIncomingActivity extends LinphoneGenericActivity implements LinphoneSliderTriggered { private static CallIncomingActivity instance; @@ -179,6 +179,7 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin finish(); } if (state == State.StreamsRunning) { + Log.e("CallIncommingActivity - onCreate - State.StreamsRunning - speaker = "+LinphoneManager.getLc().isSpeakerEnabled()); // The following should not be needed except some devices need it (e.g. Galaxy S). LinphoneManager.getLc().enableSpeaker(LinphoneManager.getLc().isSpeakerEnabled()); } diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index c21ff7ece..8b098257b 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -1634,7 +1634,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC //LinphoneChatMessage Listener @Override public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, State state) { - Log.e(" =======>>>>>>> onLinphoneChatMessageStateChanged - state = "+state.toString()); redrawMessageList(); } diff --git a/src/org/linphone/LinphoneManager.java b/src/org/linphone/LinphoneManager.java index 72184a5bd..0035739b2 100644 --- a/src/org/linphone/LinphoneManager.java +++ b/src/org/linphone/LinphoneManager.java @@ -18,23 +18,35 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.linphone; -import static android.media.AudioManager.MODE_RINGTONE; -import static android.media.AudioManager.STREAM_RING; -import static android.media.AudioManager.STREAM_VOICE_CALL; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.net.InetAddress; -import java.nio.ByteBuffer; -import java.sql.Timestamp; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Timer; -import java.util.TimerTask; +import android.annotation.SuppressLint; +import android.annotation.TargetApi; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.ProgressDialog; +import android.content.BroadcastReceiver; +import android.content.ContentResolver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.Resources; +import android.media.AudioManager; +import android.media.MediaPlayer; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.net.Uri; +import android.os.Build; +import android.os.Handler; +import android.os.PowerManager; +import android.os.PowerManager.WakeLock; +import android.os.Vibrator; +import android.preference.CheckBoxPreference; +import android.provider.Settings; +import android.provider.Settings.SettingNotFoundException; +import android.telephony.TelephonyManager; +import android.view.View; +import android.widget.Button; +import android.widget.Toast; import org.linphone.assistant.AssistantActivity; import org.linphone.core.CallDirection; @@ -79,35 +91,23 @@ import org.linphone.mediastream.video.capture.hwconf.Hacks; import org.linphone.tools.H264Helper; import org.linphone.tools.OpenH264DownloadHelper; -import android.annotation.SuppressLint; -import android.annotation.TargetApi; -import android.app.AlertDialog; -import android.app.Dialog; -import android.app.ProgressDialog; -import android.content.BroadcastReceiver; -import android.content.ContentResolver; -import android.content.Context; -import android.content.Intent; -import android.content.IntentFilter; -import android.content.pm.PackageManager.NameNotFoundException; -import android.content.res.Resources; -import android.media.AudioManager; -import android.media.MediaPlayer; -import android.net.ConnectivityManager; -import android.net.NetworkInfo; -import android.net.Uri; -import android.os.Build; -import android.os.Handler; -import android.os.PowerManager; -import android.os.PowerManager.WakeLock; -import android.os.Vibrator; -import android.preference.CheckBoxPreference; -import android.provider.Settings; -import android.provider.Settings.SettingNotFoundException; -import android.telephony.TelephonyManager; -import android.view.View; -import android.widget.Button; -import android.widget.Toast; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.InetAddress; +import java.nio.ByteBuffer; +import java.sql.Timestamp; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Timer; +import java.util.TimerTask; + +import static android.media.AudioManager.MODE_RINGTONE; +import static android.media.AudioManager.STREAM_RING; +import static android.media.AudioManager.STREAM_VOICE_CALL; /** * @@ -145,8 +145,10 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private ConnectivityManager mConnectivityManager; private BroadcastReceiver mKeepAliveReceiver; private BroadcastReceiver mDozeReceiver; + private BroadcastReceiver mHookReceiver; private IntentFilter mKeepAliveIntentFilter; private IntentFilter mDozeIntentFilter; + private IntentFilter mHookIntentFilter; private Handler mHandler = new Handler(); private WakeLock mIncallWakeLock; private LinphoneAccountCreator accountCreator; @@ -822,6 +824,12 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mServiceContext.registerReceiver(mDozeReceiver, mDozeIntentFilter); } + mHookIntentFilter = new IntentFilter("com.base.module.phone.HOOKEVENT"); + mHookIntentFilter.setPriority(999); + mHookReceiver = new HookReceiver(); + mServiceContext.registerReceiver(mHookReceiver, mHookIntentFilter); + + updateNetworkReachability(); resetCameraFromPreferences(); @@ -831,6 +839,20 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag accountCreator.setListener(this); } + protected void setHandsetMode(Boolean on){ + if(mLc.isInComingInvitePending() && on){ + try { + mLc.acceptCall(mLc.getCurrentCall()); + LinphoneActivity.instance().startIncallActivity(mLc.getCurrentCall()); + }catch(LinphoneCoreException e){} + }else if(on && CallActivity.isInstanciated()){ + CallActivity.instance().setSpeakerEnabled(true); + CallActivity.instance().refreshInCallActions(); + }else if (!on){ + LinphoneManager.getInstance().terminateCall(); + } + } + private void copyAssetsFromPackage() throws IOException { copyIfNotExist(R.raw.notes_of_the_optimistic, mRingSoundFile); copyIfNotExist(R.raw.ringback, mRingbackSoundFile); @@ -1192,7 +1214,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } - if (state == State.IncomingReceived && LinphonePreferences.instance().isAutoAnswerEnabled()) { + if (state == State.IncomingReceived && (LinphonePreferences.instance().isAutoAnswerEnabled())) { try { mLc.acceptCall(call); } catch (LinphoneCoreException e) { diff --git a/submodules/linphone b/submodules/linphone index c1434a3f7..91c0fc4a1 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit c1434a3f7c029fb69f557fca2b5fa1682786da5f +Subproject commit 91c0fc4a174ba25fb5335f5abfb3e07aec086168