From 548128ea480f401f570161144d73f59288e7afd7 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 21 Feb 2019 08:19:57 +0100 Subject: [PATCH] Use SDK network manager --- app/src/main/AndroidManifest.xml | 5 - .../java/org/linphone/LinphoneManager.java | 125 ------------------ .../org/linphone/receivers/DozeReceiver.java | 56 -------- .../linphone/receivers/NetworkManager.java | 36 ----- app/src/main/res/raw/linphonerc_factory | 2 +- 5 files changed, 1 insertion(+), 223 deletions(-) delete mode 100644 app/src/main/java/org/linphone/receivers/DozeReceiver.java delete mode 100644 app/src/main/java/org/linphone/receivers/NetworkManager.java diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 62607fc2d..949e6c1cf 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -232,11 +232,6 @@ android:resource="@xml/authenticator" /> - - - - - diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 2ea38cb77..cce9bf3a2 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -41,7 +41,6 @@ import android.hardware.SensorManager; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.ConnectivityManager; -import android.net.Network; import android.net.NetworkInfo; import android.net.Uri; 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.Hacks; import org.linphone.receivers.BluetoothManager; -import org.linphone.receivers.DozeReceiver; import org.linphone.receivers.HookReceiver; import org.linphone.receivers.KeepAliveReceiver; -import org.linphone.receivers.NetworkManager; import org.linphone.receivers.OutgoingCallReceiver; import org.linphone.settings.LinphonePreferences; import org.linphone.utils.FileUtils; @@ -179,20 +176,15 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou private final String mBasePath; private boolean mAudioFocused; private boolean mEchoTesterIsRunning; - private boolean mDozeModeEnabled; private boolean mCallGsmON; - private int mLastNetworkType = -1; private final ConnectivityManager mConnectivityManager; private BroadcastReceiver mKeepAliveReceiver; - private BroadcastReceiver mDozeReceiver; private BroadcastReceiver mHookReceiver; private BroadcastReceiver mCallReceiver; private BroadcastReceiver mNetworkReceiver; private IntentFilter mKeepAliveIntentFilter; - private IntentFilter mDozeIntentFilter; private IntentFilter mHookIntentFilter; private IntentFilter mCallIntentFilter; - private IntentFilter mNetworkIntentFilter; private final Handler mHandler = new Handler(); private WakeLock mProximityWakelock; private AccountCreator mAccountCreator; @@ -699,11 +691,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou } catch (Exception e) { Log.e("[Manager] unregister receiver exception: " + e); } - try { - dozeManager(false); - } catch (Exception e) { - Log.e("[Manager] unregister receiver exception: " + e); - } mCore = null; } } @@ -846,30 +833,11 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, 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.setPriority(999); mHookReceiver = new HookReceiver(); 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(); mAccountCreator = @@ -927,65 +895,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou 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() { if (LinphonePreferences.instance() != null) { // 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; } - 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) { if (enable) { if (!mProximitySensingEnabled) { @@ -1060,18 +951,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou 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 onNotifyPresenceReceived(Core lc, Friend lf) {} @@ -1703,10 +1582,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou dialog.show(); } - public void setDozeModeEnabled(boolean b) { - mDozeModeEnabled = b; - } - public String getmDynamicConfigFile() { return mDynamicConfigFile; } diff --git a/app/src/main/java/org/linphone/receivers/DozeReceiver.java b/app/src/main/java/org/linphone/receivers/DozeReceiver.java deleted file mode 100644 index 5109e999c..000000000 --- a/app/src/main/java/org/linphone/receivers/DozeReceiver.java +++ /dev/null @@ -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(); - } - } -} diff --git a/app/src/main/java/org/linphone/receivers/NetworkManager.java b/app/src/main/java/org/linphone/receivers/NetworkManager.java deleted file mode 100644 index 5d802a89b..000000000 --- a/app/src/main/java/org/linphone/receivers/NetworkManager.java +++ /dev/null @@ -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(); - } - } -} diff --git a/app/src/main/res/raw/linphonerc_factory b/app/src/main/res/raw/linphonerc_factory index 7040801dc..f3e20d5fd 100644 --- a/app/src/main/res/raw/linphonerc_factory +++ b/app/src/main/res/raw/linphonerc_factory @@ -12,7 +12,7 @@ force_ice_disablement=0 [sip] guess_hostname=1 register_only_when_network_is_up=1 -auto_net_state_mon=0 +auto_net_state_mon=1 auto_answer_replacing_calls=1 ping_with_options=0 rls_uri=