Use SDK network manager
This commit is contained in:
parent
908edbaab5
commit
548128ea48
5 changed files with 1 additions and 223 deletions
|
@ -232,11 +232,6 @@
|
||||||
android:resource="@xml/authenticator" />
|
android:resource="@xml/authenticator" />
|
||||||
</service>
|
</service>
|
||||||
|
|
||||||
<receiver android:name=".receivers.NetworkManager">
|
|
||||||
<intent-filter>
|
|
||||||
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
|
|
||||||
</intent-filter>
|
|
||||||
</receiver>
|
|
||||||
<receiver
|
<receiver
|
||||||
android:name=".receivers.BluetoothManager"
|
android:name=".receivers.BluetoothManager"
|
||||||
android:enabled="false"/>
|
android:enabled="false"/>
|
||||||
|
|
|
@ -41,7 +41,6 @@ import android.hardware.SensorManager;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.media.MediaPlayer;
|
import android.media.MediaPlayer;
|
||||||
import android.net.ConnectivityManager;
|
import android.net.ConnectivityManager;
|
||||||
import android.net.Network;
|
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -124,10 +123,8 @@ import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
||||||
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera;
|
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera;
|
||||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||||
import org.linphone.receivers.BluetoothManager;
|
import org.linphone.receivers.BluetoothManager;
|
||||||
import org.linphone.receivers.DozeReceiver;
|
|
||||||
import org.linphone.receivers.HookReceiver;
|
import org.linphone.receivers.HookReceiver;
|
||||||
import org.linphone.receivers.KeepAliveReceiver;
|
import org.linphone.receivers.KeepAliveReceiver;
|
||||||
import org.linphone.receivers.NetworkManager;
|
|
||||||
import org.linphone.receivers.OutgoingCallReceiver;
|
import org.linphone.receivers.OutgoingCallReceiver;
|
||||||
import org.linphone.settings.LinphonePreferences;
|
import org.linphone.settings.LinphonePreferences;
|
||||||
import org.linphone.utils.FileUtils;
|
import org.linphone.utils.FileUtils;
|
||||||
|
@ -179,20 +176,15 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
private final String mBasePath;
|
private final String mBasePath;
|
||||||
private boolean mAudioFocused;
|
private boolean mAudioFocused;
|
||||||
private boolean mEchoTesterIsRunning;
|
private boolean mEchoTesterIsRunning;
|
||||||
private boolean mDozeModeEnabled;
|
|
||||||
private boolean mCallGsmON;
|
private boolean mCallGsmON;
|
||||||
private int mLastNetworkType = -1;
|
|
||||||
private final ConnectivityManager mConnectivityManager;
|
private final ConnectivityManager mConnectivityManager;
|
||||||
private BroadcastReceiver mKeepAliveReceiver;
|
private BroadcastReceiver mKeepAliveReceiver;
|
||||||
private BroadcastReceiver mDozeReceiver;
|
|
||||||
private BroadcastReceiver mHookReceiver;
|
private BroadcastReceiver mHookReceiver;
|
||||||
private BroadcastReceiver mCallReceiver;
|
private BroadcastReceiver mCallReceiver;
|
||||||
private BroadcastReceiver mNetworkReceiver;
|
private BroadcastReceiver mNetworkReceiver;
|
||||||
private IntentFilter mKeepAliveIntentFilter;
|
private IntentFilter mKeepAliveIntentFilter;
|
||||||
private IntentFilter mDozeIntentFilter;
|
|
||||||
private IntentFilter mHookIntentFilter;
|
private IntentFilter mHookIntentFilter;
|
||||||
private IntentFilter mCallIntentFilter;
|
private IntentFilter mCallIntentFilter;
|
||||||
private IntentFilter mNetworkIntentFilter;
|
|
||||||
private final Handler mHandler = new Handler();
|
private final Handler mHandler = new Handler();
|
||||||
private WakeLock mProximityWakelock;
|
private WakeLock mProximityWakelock;
|
||||||
private AccountCreator mAccountCreator;
|
private AccountCreator mAccountCreator;
|
||||||
|
@ -699,11 +691,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e("[Manager] unregister receiver exception: " + e);
|
Log.e("[Manager] unregister receiver exception: " + e);
|
||||||
}
|
}
|
||||||
try {
|
|
||||||
dozeManager(false);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e("[Manager] unregister receiver exception: " + e);
|
|
||||||
}
|
|
||||||
mCore = null;
|
mCore = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -846,30 +833,11 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,
|
PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK,
|
||||||
mServiceContext.getPackageName() + ";manager_proximity_sensor");
|
mServiceContext.getPackageName() + ";manager_proximity_sensor");
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
||||||
mDozeIntentFilter = new IntentFilter();
|
|
||||||
mDozeIntentFilter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED);
|
|
||||||
mDozeReceiver = new DozeReceiver();
|
|
||||||
mDozeModeEnabled =
|
|
||||||
((PowerManager) mServiceContext.getSystemService(Context.POWER_SERVICE))
|
|
||||||
.isDeviceIdleMode();
|
|
||||||
mServiceContext.registerReceiver(mDozeReceiver, mDozeIntentFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
mHookIntentFilter = new IntentFilter("com.base.module.phone.HOOKEVENT");
|
mHookIntentFilter = new IntentFilter("com.base.module.phone.HOOKEVENT");
|
||||||
mHookIntentFilter.setPriority(999);
|
mHookIntentFilter.setPriority(999);
|
||||||
mHookReceiver = new HookReceiver();
|
mHookReceiver = new HookReceiver();
|
||||||
mServiceContext.registerReceiver(mHookReceiver, mHookIntentFilter);
|
mServiceContext.registerReceiver(mHookReceiver, mHookIntentFilter);
|
||||||
|
|
||||||
// Since Android N we need to register the network manager
|
|
||||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
|
|
||||||
mNetworkReceiver = new NetworkManager();
|
|
||||||
mNetworkIntentFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
|
|
||||||
mServiceContext.registerReceiver(mNetworkReceiver, mNetworkIntentFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
updateNetworkReachability();
|
|
||||||
|
|
||||||
resetCameraFromPreferences();
|
resetCameraFromPreferences();
|
||||||
|
|
||||||
mAccountCreator =
|
mAccountCreator =
|
||||||
|
@ -927,65 +895,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
lInputStream.close();
|
lInputStream.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateNetworkReachability() {
|
|
||||||
if (mConnectivityManager == null) return;
|
|
||||||
|
|
||||||
boolean connected;
|
|
||||||
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
|
|
||||||
connected = networkInfo != null && networkInfo.isConnected();
|
|
||||||
|
|
||||||
if (networkInfo == null && Version.sdkAboveOrEqual(Version.API21_LOLLIPOP_50)) {
|
|
||||||
for (Network network : mConnectivityManager.getAllNetworks()) {
|
|
||||||
if (network != null) {
|
|
||||||
networkInfo = mConnectivityManager.getNetworkInfo(network);
|
|
||||||
if (networkInfo != null && networkInfo.isConnected()) {
|
|
||||||
connected = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (networkInfo == null || !connected) {
|
|
||||||
Log.i("[Manager] No connectivity: setting network unreachable");
|
|
||||||
mCore.setNetworkReachable(false);
|
|
||||||
} else if (mDozeModeEnabled) {
|
|
||||||
Log.i("[Manager] Doze Mode enabled: shutting down network");
|
|
||||||
mCore.setNetworkReachable(false);
|
|
||||||
} else if (connected) {
|
|
||||||
manageTunnelServer(networkInfo);
|
|
||||||
|
|
||||||
boolean wifiOnly = LinphonePreferences.instance().isWifiOnlyEnabled();
|
|
||||||
if (wifiOnly) {
|
|
||||||
if (networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
|
|
||||||
mCore.setNetworkReachable(true);
|
|
||||||
} else {
|
|
||||||
Log.i("[Manager] Wifi-only mode, setting network not reachable");
|
|
||||||
mCore.setNetworkReachable(false);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
int curtype = networkInfo.getType();
|
|
||||||
|
|
||||||
if (curtype != mLastNetworkType) {
|
|
||||||
// if kind of network has changed, we need to notify network_reachable(false) to
|
|
||||||
// make sure all current connections are destroyed.
|
|
||||||
// they will be re-created during setNetworkReachable(true).
|
|
||||||
Log.i("[Manager] Connectivity has changed.");
|
|
||||||
mCore.setNetworkReachable(false);
|
|
||||||
}
|
|
||||||
mCore.setNetworkReachable(true);
|
|
||||||
mLastNetworkType = curtype;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mCore.isNetworkReachable()) {
|
|
||||||
// When network isn't available, push informations might not be set. This should fix the
|
|
||||||
// issue.
|
|
||||||
LinphonePreferences prefs = LinphonePreferences.instance();
|
|
||||||
prefs.setPushNotificationEnabled(prefs.isPushNotificationEnabled());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void destroyLinphoneCore() {
|
private void destroyLinphoneCore() {
|
||||||
if (LinphonePreferences.instance() != null) {
|
if (LinphonePreferences.instance() != null) {
|
||||||
// We set network reachable at false before destroy LC to not send register with expires
|
// We set network reachable at false before destroy LC to not send register with expires
|
||||||
|
@ -998,24 +907,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
mCore = null;
|
mCore = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void dozeManager(boolean enable) {
|
|
||||||
if (enable) {
|
|
||||||
Log.i("[Manager][Doze Mode]: register");
|
|
||||||
mServiceContext.registerReceiver(mDozeReceiver, mDozeIntentFilter);
|
|
||||||
mDozeModeEnabled = true;
|
|
||||||
} else {
|
|
||||||
Log.i("[Manager][Doze Mode]: unregister");
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
||||||
try {
|
|
||||||
mServiceContext.unregisterReceiver(mDozeReceiver);
|
|
||||||
} catch (IllegalArgumentException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
mDozeModeEnabled = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void enableProximitySensing(boolean enable) {
|
public void enableProximitySensing(boolean enable) {
|
||||||
if (enable) {
|
if (enable) {
|
||||||
if (!mProximitySensingEnabled) {
|
if (!mProximitySensingEnabled) {
|
||||||
|
@ -1060,18 +951,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
return mRessources.getString(key);
|
return mRessources.getString(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Simple implementation as Android way seems very complicate:
|
|
||||||
For example: with wifi and mobile actives; when pulling mobile down:
|
|
||||||
I/Linphone( 8397): WIFI connected: setting network reachable
|
|
||||||
I/Linphone( 8397): new state [RegistrationProgress]
|
|
||||||
I/Linphone( 8397): mobile disconnected: setting network unreachable
|
|
||||||
I/Linphone( 8397): Managing tunnel
|
|
||||||
I/Linphone( 8397): WIFI connected: setting network reachable
|
|
||||||
*/
|
|
||||||
public void connectivityChanged() {
|
|
||||||
updateNetworkReachability();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onNewSubscriptionRequested(Core lc, Friend lf, String url) {}
|
public void onNewSubscriptionRequested(Core lc, Friend lf, String url) {}
|
||||||
|
|
||||||
public void onNotifyPresenceReceived(Core lc, Friend lf) {}
|
public void onNotifyPresenceReceived(Core lc, Friend lf) {}
|
||||||
|
@ -1703,10 +1582,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDozeModeEnabled(boolean b) {
|
|
||||||
mDozeModeEnabled = b;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getmDynamicConfigFile() {
|
public String getmDynamicConfigFile() {
|
||||||
return mDynamicConfigFile;
|
return mDynamicConfigFile;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,56 +0,0 @@
|
||||||
package org.linphone.receivers;
|
|
||||||
|
|
||||||
/*
|
|
||||||
DozeReceiver.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 android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.PowerManager;
|
|
||||||
import org.linphone.LinphoneManager;
|
|
||||||
import org.linphone.LinphoneService;
|
|
||||||
import org.linphone.R;
|
|
||||||
import org.linphone.core.Core;
|
|
||||||
import org.linphone.core.tools.Log;
|
|
||||||
import org.linphone.settings.LinphonePreferences;
|
|
||||||
import org.linphone.utils.LinphoneUtils;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Purpose of this receiver is to disable keep alives when device is on idle
|
|
||||||
* */
|
|
||||||
public class DozeReceiver extends android.content.BroadcastReceiver {
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
PowerManager pm;
|
|
||||||
if (!LinphoneService.isReady()) return;
|
|
||||||
|
|
||||||
boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled();
|
|
||||||
LinphoneUtils.configureLoggingService(isDebugEnabled, context.getString(R.string.app_name));
|
|
||||||
Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
if (lc == null) return;
|
|
||||||
|
|
||||||
pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
||||||
boolean dozeM = pm.isDeviceIdleMode();
|
|
||||||
Log.i("[DozeReceiver] Idle Mode: " + dozeM);
|
|
||||||
LinphoneManager.getInstance().setDozeModeEnabled(dozeM);
|
|
||||||
LinphoneManager.getInstance().updateNetworkReachability();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,36 +0,0 @@
|
||||||
package org.linphone.receivers;
|
|
||||||
|
|
||||||
/*
|
|
||||||
ContactPickerActivity.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 android.content.BroadcastReceiver;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import org.linphone.LinphoneManager;
|
|
||||||
|
|
||||||
/** Intercept network state changes and update linphone core through LinphoneManager. */
|
|
||||||
public class NetworkManager extends BroadcastReceiver {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onReceive(Context context, Intent intent) {
|
|
||||||
if (LinphoneManager.isInstanciated()) {
|
|
||||||
LinphoneManager.getInstance().connectivityChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -12,7 +12,7 @@ force_ice_disablement=0
|
||||||
[sip]
|
[sip]
|
||||||
guess_hostname=1
|
guess_hostname=1
|
||||||
register_only_when_network_is_up=1
|
register_only_when_network_is_up=1
|
||||||
auto_net_state_mon=0
|
auto_net_state_mon=1
|
||||||
auto_answer_replacing_calls=1
|
auto_answer_replacing_calls=1
|
||||||
ping_with_options=0
|
ping_with_options=0
|
||||||
rls_uri=
|
rls_uri=
|
||||||
|
|
Loading…
Reference in a new issue