From aa5efc67f79f48e0c1fdc9b7aa95acfe17051164 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 18 Apr 2019 12:52:29 +0200 Subject: [PATCH 01/13] Fixed call transfer button no shown, instead call add button is visible --- .../java/org/linphone/LinphoneActivity.java | 15 ++++++- .../linphone/fragments/DialerFragment.java | 40 ++----------------- 2 files changed, 17 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneActivity.java b/app/src/main/java/org/linphone/LinphoneActivity.java index edd3ceaed..7b983d2ad 100644 --- a/app/src/main/java/org/linphone/LinphoneActivity.java +++ b/app/src/main/java/org/linphone/LinphoneActivity.java @@ -412,7 +412,6 @@ public class LinphoneActivity extends LinphoneGenericActivity if (lc != null) { lc.removeListener(mListener); } - mCallTransfer = false; mIsOnBackground = true; super.onPause(); @@ -534,6 +533,7 @@ public class LinphoneActivity extends LinphoneGenericActivity }*/ Bundle extras = intent.getExtras(); + mCallTransfer = false; if (extras != null) { if (extras.getBoolean("GoToChat", false)) { String localSipUri = extras.getString("LocalSipUri"); @@ -566,6 +566,12 @@ public class LinphoneActivity extends LinphoneGenericActivity goToDialerFragment(); } else if (extras.getBoolean("Transfer", false)) { intent.putExtra("DoNotGoToCallActivity", true); + mCallTransfer = true; + if (LinphoneManager.getLc().getCallsNb() > 0) { + initInCallMenuLayout(); + } else { + resetClassicMenuLayoutAndGoBackToCallIfStillRunning(); + } } else if (extras.getBoolean("AddCall", false)) { intent.putExtra("DoNotGoToCallActivity", true); } else if (intent.getStringExtra("msgShared") != null) { @@ -1382,7 +1388,12 @@ public class LinphoneActivity extends LinphoneGenericActivity AddressType address = new AddressText(this, null); address.setText(number); address.setDisplayedName(name); - LinphoneManager.getInstance().newOutgoingCall(address); + if (!mCallTransfer) { + LinphoneManager.getInstance().newOutgoingCall(address); + } else { + addressWaitingToBeCalled = number; + displayDialer(); + } } public void startIncallActivity() { diff --git a/app/src/main/java/org/linphone/fragments/DialerFragment.java b/app/src/main/java/org/linphone/fragments/DialerFragment.java index 2dd72a331..2cc0d3587 100644 --- a/app/src/main/java/org/linphone/fragments/DialerFragment.java +++ b/app/src/main/java/org/linphone/fragments/DialerFragment.java @@ -20,9 +20,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import android.app.Fragment; -import android.content.Intent; import android.content.res.Configuration; -import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; @@ -32,11 +30,8 @@ import android.widget.ImageView; import android.widget.LinearLayout; import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; -import org.linphone.LinphoneService; import org.linphone.R; -import org.linphone.contacts.ContactsManager; import org.linphone.core.Core; -import org.linphone.core.tools.Log; import org.linphone.views.AddressAware; import org.linphone.views.AddressText; import org.linphone.views.CallButton; @@ -178,8 +173,9 @@ public class DialerFragment extends Fragment { String addressWaitingToBeCalled = LinphoneActivity.instance().addressWaitingToBeCalled; if (addressWaitingToBeCalled != null) { mAddress.setText(addressWaitingToBeCalled); - if (getResources() - .getBoolean(R.bool.automatically_start_intercepted_outgoing_gsm_call)) { + if (!LinphoneActivity.instance().isCallTransfer() + && getResources() + .getBoolean(R.bool.automatically_start_intercepted_outgoing_gsm_call)) { newOutgoingCall(addressWaitingToBeCalled); } LinphoneActivity.instance().addressWaitingToBeCalled = null; @@ -208,6 +204,7 @@ public class DialerFragment extends Fragment { mAddContact.setImageResource(R.drawable.call_back); mAddContact.setOnClickListener(mCancelListener); } else { + mCall.resetClickListener(); if (LinphoneManager.getLc().getVideoActivationPolicy().getAutomaticallyInitiate()) { mCall.setImageResource(R.drawable.call_video_start); } else { @@ -235,33 +232,4 @@ public class DialerFragment extends Fragment { displayTextInAddressBar(numberOrSipAddress); LinphoneManager.getInstance().newOutgoingCall(mAddress); } - - public void newOutgoingCall(Intent intent) { - if (intent != null && intent.getData() != null) { - String scheme = intent.getData().getScheme(); - if (scheme.startsWith("imto")) { - mAddress.setText("sip:" + intent.getData().getLastPathSegment()); - } else if (scheme.startsWith("call") || scheme.startsWith("sip")) { - mAddress.setText(intent.getData().getSchemeSpecificPart()); - } else { - Uri contactUri = intent.getData(); - String address = - ContactsManager.getInstance() - .getAddressOrNumberForAndroidContact( - LinphoneService.instance().getContentResolver(), - contactUri); - if (address != null) { - mAddress.setText(address); - } else { - Log.e("Unknown scheme: ", scheme); - mAddress.setText(intent.getData().getSchemeSpecificPart()); - } - } - - mAddress.clearDisplayedName(); - intent.setData(null); - - LinphoneManager.getInstance().newOutgoingCall(mAddress); - } - } } From d14c4609b3f7ac1c0ce7cba4762a865ae25ee314 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 18 Apr 2019 13:18:40 +0200 Subject: [PATCH 02/13] Fixed crash when using the video dialog while in call --- app/src/main/java/org/linphone/call/CallActivity.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/linphone/call/CallActivity.java b/app/src/main/java/org/linphone/call/CallActivity.java index da23aeaff..e89005e6f 100644 --- a/app/src/main/java/org/linphone/call/CallActivity.java +++ b/app/src/main/java/org/linphone/call/CallActivity.java @@ -1251,7 +1251,7 @@ public class CallActivity extends LinphoneGenericActivity : "denied")); if (camera == PackageManager.PERMISSION_GRANTED) { - CallActivity.instance().acceptCallUpdate(true); + acceptCallUpdate(true); } else { checkAndRequestPermission( Manifest.permission.CAMERA, PERMISSIONS_REQUEST_CAMERA); @@ -1266,9 +1266,7 @@ public class CallActivity extends LinphoneGenericActivity new OnClickListener() { @Override public void onClick(View view) { - if (CallActivity.isInstanciated()) { - CallActivity.instance().acceptCallUpdate(false); - } + acceptCallUpdate(false); mIsVideoAsk = false; mDialog.dismiss(); mDialog = null; From 112bbcf8997a8bc145a2326eb8b201407a949fa8 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 18 Apr 2019 13:40:56 +0200 Subject: [PATCH 03/13] Workarounded account creation issue on tablets, proper fix will come with assistant rework --- .../CreateAccountActivationFragment.java | 5 ++++- .../assistant/CreateAccountFragment.java | 13 ++++++------- .../assistant_account_creation.xml | 18 +++++++++--------- 3 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/org/linphone/assistant/CreateAccountActivationFragment.java b/app/src/main/java/org/linphone/assistant/CreateAccountActivationFragment.java index dc15184a9..c58cca092 100644 --- a/app/src/main/java/org/linphone/assistant/CreateAccountActivationFragment.java +++ b/app/src/main/java/org/linphone/assistant/CreateAccountActivationFragment.java @@ -31,6 +31,7 @@ import org.linphone.LinphoneManager; import org.linphone.R; import org.linphone.core.AccountCreator; import org.linphone.core.AccountCreatorListener; +import org.linphone.core.tools.Log; import org.linphone.settings.LinphonePreferences; public class CreateAccountActivationFragment extends Fragment @@ -57,6 +58,7 @@ public class CreateAccountActivationFragment extends Fragment mAccountCreator.setUsername(mUsername); mAccountCreator.setPassword(mPassword); + mAccountCreator.setDomain(getString(R.string.default_domain)); mEmail = view.findViewById(R.id.send_email); mEmail.setText(getArguments().getString("Email")); @@ -71,7 +73,7 @@ public class CreateAccountActivationFragment extends Fragment int id = v.getId(); if (id == R.id.assistant_check) { mCheckAccount.setEnabled(false); - mAccountCreator.isAccountActivated(); + AccountCreator.Status status = mAccountCreator.isAccountActivated(); } } @@ -111,6 +113,7 @@ public class CreateAccountActivationFragment extends Fragment AssistantActivity.instance().linphoneLogIn(accountCreator); AssistantActivity.instance().isAccountVerified(); } else { + Log.w("Unexpected error " + status.name()); Toast.makeText( getActivity(), getString(R.string.wizard_server_unavailable), diff --git a/app/src/main/java/org/linphone/assistant/CreateAccountFragment.java b/app/src/main/java/org/linphone/assistant/CreateAccountFragment.java index 37ac55e16..213adc89c 100644 --- a/app/src/main/java/org/linphone/assistant/CreateAccountFragment.java +++ b/app/src/main/java/org/linphone/assistant/CreateAccountFragment.java @@ -135,7 +135,8 @@ public class CreateAccountFragment extends Fragment mSkip = view.findViewById(R.id.assistant_skip); // Phone number - if (getResources().getBoolean(R.bool.use_phone_number_validation)) { + if (!getResources().getBoolean(R.bool.isTablet) + && getResources().getBoolean(R.bool.use_phone_number_validation)) { getActivity().getApplicationContext(); // Automatically get the country code from the phone TelephonyManager tm = @@ -179,12 +180,10 @@ public class CreateAccountFragment extends Fragment } addPhoneNumberHandler(mPhoneNumberEdit); addPhoneNumberHandler(mDialCode); - } - - // Password & email address - if (getResources().getBoolean(R.bool.isTablet) - || !getResources().getBoolean(R.bool.use_phone_number_validation)) { - mUseEmail.setVisibility(View.VISIBLE); + } else { + if (!getResources().getBoolean(R.bool.isTablet)) { + mUseEmail.setVisibility(View.VISIBLE); + } mUseEmail.setOnCheckedChangeListener(this); if (getResources().getBoolean(R.bool.pre_fill_email_in_assistant)) { diff --git a/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml b/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml index 7504a14b4..514e3d450 100644 --- a/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml +++ b/app/src/main/res/layout-sw533dp-land/assistant_account_creation.xml @@ -46,7 +46,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:orientation="vertical" - android:visibility="visible"> + android:visibility="gone"> + android:visibility="visible"> + android:visibility="visible"> + android:visibility="visible"> + android:visibility="visible"> + android:visibility="gone" /> + android:visibility="gone" /> From 6df4f6f7bda68afeba5a86b82942025620cf593d Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 18 Apr 2019 17:01:40 +0200 Subject: [PATCH 04/13] Do not show correspondent asked for video dialog while in call if video disabled globally + fixed crash --- app/src/main/java/org/linphone/call/CallActivity.java | 3 ++- .../java/org/linphone/settings/AccountSettingsFragment.java | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/org/linphone/call/CallActivity.java b/app/src/main/java/org/linphone/call/CallActivity.java index e89005e6f..fc0812e8a 100644 --- a/app/src/main/java/org/linphone/call/CallActivity.java +++ b/app/src/main/java/org/linphone/call/CallActivity.java @@ -240,10 +240,11 @@ public class CallActivity extends LinphoneGenericActivity mStatus.refreshStatusItems(call); } } else if (state == State.UpdatedByRemote) { - // If the correspondent proposes mVideo while audio call + // If the correspondent proposes video while audio call boolean videoEnabled = LinphonePreferences.instance().isVideoEnabled(); if (!videoEnabled) { acceptCallUpdate(false); + return; } boolean remoteVideo = call.getRemoteParams().videoEnabled(); diff --git a/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java b/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java index f89373c81..3a36a9fd8 100644 --- a/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java +++ b/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java @@ -259,6 +259,10 @@ public class AccountSettingsFragment extends Fragment { new SettingListenerBase() { @Override public void onTextValueChanged(String newValue) { + if (newValue.isEmpty()) { + return; + } + if (mAuthInfo != null) { mAuthInfo.setDomain(newValue); } else { From cd4f824521684997b400d626564db1c530aac2bc Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 23 Apr 2019 08:33:26 +0200 Subject: [PATCH 05/13] Version bumped --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f6ba9432e..4a6b3c4b5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 28 - versionCode 4120 + versionCode 4121 versionName "4.1" applicationId getPackageName() multiDexEnabled true From f6115014d8eece49f76ec4f4bbb0203fe8b10a46 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 23 Apr 2019 10:07:31 +0200 Subject: [PATCH 06/13] Fixed wifi only --- .../main/java/org/linphone/settings/LinphonePreferences.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/linphone/settings/LinphonePreferences.java b/app/src/main/java/org/linphone/settings/LinphonePreferences.java index 402a134ed..8e55c87ee 100644 --- a/app/src/main/java/org/linphone/settings/LinphonePreferences.java +++ b/app/src/main/java/org/linphone/settings/LinphonePreferences.java @@ -437,12 +437,12 @@ public class LinphonePreferences { // End of call settings public boolean isWifiOnlyEnabled() { - return getConfig().getBool("app", "wifi_only", false); + return getLc().wifiOnlyEnabled(); } // Network settings public void setWifiOnlyEnabled(Boolean enable) { - getConfig().setBool("app", "wifi_only", enable); + getLc().enableWifiOnly(enable); } public void useRandomPort(boolean enabled) { From d1820168dd6b91cceac17efab87e59bdcff65f9a Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 23 Apr 2019 10:35:12 +0200 Subject: [PATCH 07/13] Prevent app from making too many connections to wizard.php script for phone number link purposes --- .../java/org/linphone/LinphoneManager.java | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 75fe5b326..03698933e 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -1471,15 +1471,30 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou } public void isAccountWithAlias() { + if (!LinphonePreferences.instance().isLinkPopupEnabled()) return; + if (LinphoneManager.getLc().getDefaultProxyConfig() != null) { + long now = new Timestamp(new Date().getTime()).getTime(); - if (mAccountCreator != null && LinphonePreferences.instance().getLinkPopupTime() == null - || Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) < now) { + if (LinphonePreferences.instance().getLinkPopupTime() != null + && Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) >= now) + return; + + long future = + new Timestamp( + LinphoneActivity.instance() + .getResources() + .getInteger(R.integer.popup_time_interval)) + .getTime(); + long newDate = now + future; + + if (mAccountCreator != null) { mAccountCreator.setUsername( LinphonePreferences.instance() .getAccountUsername( LinphonePreferences.instance().getDefaultAccountIndex())); mAccountCreator.isAccountExist(); + LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate)); } } else { LinphonePreferences.instance().setLinkPopupTime(null); @@ -1489,20 +1504,6 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou private void askLinkWithPhoneNumber() { if (!LinphonePreferences.instance().isLinkPopupEnabled()) return; - long now = new Timestamp(new Date().getTime()).getTime(); - if (LinphonePreferences.instance().getLinkPopupTime() != null - && Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) >= now) return; - - long future = - new Timestamp( - LinphoneActivity.instance() - .getResources() - .getInteger(R.integer.popup_time_interval)) - .getTime(); - long newDate = now + future; - - LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate)); - final Dialog dialog = LinphoneActivity.instance() .displayDialog( From f35380958dd20fe4bdae4e396d5709b7ffad3972 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 23 Apr 2019 15:27:02 +0200 Subject: [PATCH 08/13] Added missing dialog when SAS is denied in chat room security process call --- .../java/org/linphone/LinphoneManager.java | 81 +++++++++++-------- .../linphone/chat/ChatMessagesFragment.java | 5 ++ .../org/linphone/chat/DevicesFragment.java | 5 ++ .../linphone/fragments/StatusFragment.java | 1 + .../org/linphone/utils/LinphoneUtils.java | 70 ++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 6 files changed, 128 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 03698933e..60510b113 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -193,6 +193,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou private MediaPlayer mRingerPlayer; private final Vibrator mVibrator; private boolean mIsRinging; + private boolean mHasLastCallSasBeenRejected; private LinphoneManager(Context c) { mUnreadChatsPerRoom = new HashMap(); @@ -220,6 +221,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou mSensorManager = (SensorManager) c.getSystemService(Context.SENSOR_SERVICE); mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); mRessources = c.getResources(); + mHasLastCallSasBeenRejected = false; File f = new File(mUserCertsPath); if (!f.exists()) { @@ -493,13 +495,42 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou newOutgoingCall(to, address.getDisplayedName()); } - public void newOutgoingCall(String to, String displayName) { - // if (mCore.inCall()) { - // listenerDispatcher.tryingNewOutgoingCallButAlreadyInCall(); - // return; - // } + public void newOutgoingCall(Address to) { if (to == null) return; + ProxyConfig lpc = mCore.getDefaultProxyConfig(); + if (mRessources.getBoolean(R.bool.forbid_self_call) + && lpc != null + && to.weakEqual(lpc.getIdentityAddress())) { + return; + } + + boolean isLowBandwidthConnection = + !LinphoneUtils.isHighBandwidthConnection( + LinphoneService.instance().getApplicationContext()); + + if (mCore.isNetworkReachable()) { + if (Version.isVideoCapable()) { + boolean prefVideoEnable = mPrefs.isVideoEnabled(); + boolean prefInitiateWithVideo = mPrefs.shouldInitiateVideoCall(); + CallManager.getInstance() + .inviteAddress( + to, + prefVideoEnable && prefInitiateWithVideo, + isLowBandwidthConnection); + } else { + CallManager.getInstance().inviteAddress(to, false, isLowBandwidthConnection); + } + } else if (LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance() + .displayCustomToast( + getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); + } else { + Log.e("[Manager] Error: " + getString(R.string.error_network_unreachable)); + } + } + + public void newOutgoingCall(String to, String displayName) { // If to is only a username, try to find the contact to get an alias if existing if (!to.startsWith("sip:") || !to.contains("@")) { LinphoneContact contact = ContactsManager.getInstance().findContactFromPhoneNumber(to); @@ -518,37 +549,9 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou return; } - ProxyConfig lpc = mCore.getDefaultProxyConfig(); - if (mRessources.getBoolean(R.bool.forbid_self_call) - && lpc != null - && lAddress.weakEqual(lpc.getIdentityAddress())) { - return; - } - lAddress.setDisplayName(displayName); + if (displayName != null) lAddress.setDisplayName(displayName); - boolean isLowBandwidthConnection = - !LinphoneUtils.isHighBandwidthConnection( - LinphoneService.instance().getApplicationContext()); - - if (mCore.isNetworkReachable()) { - if (Version.isVideoCapable()) { - boolean prefVideoEnable = mPrefs.isVideoEnabled(); - boolean prefInitiateWithVideo = mPrefs.shouldInitiateVideoCall(); - CallManager.getInstance() - .inviteAddress( - lAddress, - prefVideoEnable && prefInitiateWithVideo, - isLowBandwidthConnection); - } else { - CallManager.getInstance().inviteAddress(lAddress, false, isLowBandwidthConnection); - } - } else if (LinphoneActivity.isInstanciated()) { - LinphoneActivity.instance() - .displayCustomToast( - getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); - } else { - Log.e("[Manager] Error: " + getString(R.string.error_network_unreachable)); - } + newOutgoingCall(lAddress); } private void resetCameraFromPreferences() { @@ -1867,4 +1870,12 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou void setDisplayedName(String s); } + + public boolean hasLastCallSasBeenRejected() { + return mHasLastCallSasBeenRejected; + } + + public void lastCallSasRejected(boolean rejected) { + mHasLastCallSasBeenRejected = rejected; + } } diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java index 0c34c6a93..ea81d0150 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java @@ -376,6 +376,11 @@ public class ChatMessagesFragment extends Fragment displayChatRoomHeader(); displayChatRoomHistory(); LinphoneManager.getInstance().setCurrentChatRoomAddress(mRemoteSipAddress); + + if (LinphoneManager.getInstance().hasLastCallSasBeenRejected()) { + LinphoneManager.getInstance().lastCallSasRejected(false); + LinphoneUtils.showTrustDeniedDialog(getActivity()); + } } public void changeDisplayedChat(String localSipUri, String remoteSipUri) { diff --git a/app/src/main/java/org/linphone/chat/DevicesFragment.java b/app/src/main/java/org/linphone/chat/DevicesFragment.java index d48950b2f..6f99c875b 100644 --- a/app/src/main/java/org/linphone/chat/DevicesFragment.java +++ b/app/src/main/java/org/linphone/chat/DevicesFragment.java @@ -145,6 +145,11 @@ public class DevicesFragment extends Fragment { } initValues(); + + if (LinphoneManager.getInstance().hasLastCallSasBeenRejected()) { + LinphoneManager.getInstance().lastCallSasRejected(false); + LinphoneUtils.showTrustDeniedDialog(getActivity()); + } } private void initChatRoom() { diff --git a/app/src/main/java/org/linphone/fragments/StatusFragment.java b/app/src/main/java/org/linphone/fragments/StatusFragment.java index e80ddc749..a22cb413b 100644 --- a/app/src/main/java/org/linphone/fragments/StatusFragment.java +++ b/app/src/main/java/org/linphone/fragments/StatusFragment.java @@ -483,6 +483,7 @@ public class StatusFragment extends Fragment { @Override public void onClick(View view) { if (call != null) { + LinphoneManager.getInstance().lastCallSasRejected(true); call.setAuthenticationTokenVerified(false); if (mEncryption != null) { mEncryption.setImageResource(R.drawable.security_ko); diff --git a/app/src/main/java/org/linphone/utils/LinphoneUtils.java b/app/src/main/java/org/linphone/utils/LinphoneUtils.java index 70d4fe5cd..7fac670e6 100644 --- a/app/src/main/java/org/linphone/utils/LinphoneUtils.java +++ b/app/src/main/java/org/linphone/utils/LinphoneUtils.java @@ -21,8 +21,11 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import android.app.Activity; import android.app.AlertDialog; +import android.app.Dialog; import android.content.Context; import android.content.Intent; +import android.graphics.drawable.ColorDrawable; +import android.graphics.drawable.Drawable; import android.net.ConnectivityManager; import android.net.NetworkInfo; import android.os.Handler; @@ -32,9 +35,14 @@ import android.text.Html; import android.text.Spanned; import android.view.KeyEvent; import android.view.View; +import android.view.Window; +import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.Button; import android.widget.EditText; +import android.widget.ImageView; import android.widget.TextView; +import androidx.core.content.ContextCompat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; @@ -49,6 +57,7 @@ import org.linphone.core.AccountCreator; import org.linphone.core.Address; import org.linphone.core.Call; import org.linphone.core.Call.State; +import org.linphone.core.CallLog; import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoomCapabilities; import org.linphone.core.Core; @@ -502,4 +511,65 @@ public final class LinphoneUtils { } return newRooms; } + + public static void showTrustDeniedDialog(Context context) { + final Dialog dialog = new Dialog(context); + dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + Drawable d = new ColorDrawable(ContextCompat.getColor(context, R.color.dark_grey_color)); + d.setAlpha(200); + dialog.setContentView(R.layout.dialog); + dialog.getWindow() + .setLayout( + WindowManager.LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.MATCH_PARENT); + dialog.getWindow().setBackgroundDrawable(d); + + TextView title = dialog.findViewById(R.id.dialog_title); + title.setVisibility(View.GONE); + + TextView message = dialog.findViewById(R.id.dialog_message); + message.setVisibility(View.VISIBLE); + message.setText(context.getString(R.string.trust_denied)); + + ImageView icon = dialog.findViewById(R.id.dialog_icon); + icon.setVisibility(View.VISIBLE); + icon.setImageResource(R.drawable.security_alert_indicator); + + Button delete = dialog.findViewById(R.id.dialog_delete_button); + delete.setVisibility(View.GONE); + Button cancel = dialog.findViewById(R.id.dialog_cancel_button); + cancel.setVisibility(View.VISIBLE); + Button call = dialog.findViewById(R.id.dialog_ok_button); + call.setVisibility(View.VISIBLE); + call.setText(R.string.call); + + cancel.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + dialog.dismiss(); + } + }); + + call.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View view) { + CallLog[] logs = + LinphoneManager.getLcIfManagerNotDestroyedOrNull().getCallLogs(); + CallLog lastLog = logs[0]; + Address addressToCall = + lastLog.getDir() == Call.Dir.Incoming + ? lastLog.getFromAddress() + : lastLog.getToAddress(); + LinphoneManager.getInstance() + .newOutgoingCall(addressToCall.asString(), null); + dialog.dismiss(); + } + }); + dialog.show(); + } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 73274c74e..7c725b8c1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -250,6 +250,7 @@ Unexpected event %i for %s Download Select a conversation or create a new one + Trust has been denied. Make a call to start the authentication process again. Connected From aa608f2e726f8bbdb0e98d8ea297891237bfa99e Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 24 Apr 2019 09:38:41 +0200 Subject: [PATCH 09/13] Fixed username / password edition in account settings --- .../org/linphone/settings/AccountSettingsFragment.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java b/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java index 3a36a9fd8..2a00614f6 100644 --- a/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java +++ b/app/src/main/java/org/linphone/settings/AccountSettingsFragment.java @@ -203,6 +203,10 @@ public class AccountSettingsFragment extends Fragment { new SettingListenerBase() { @Override public void onTextValueChanged(String newValue) { + if (newValue.isEmpty()) { + return; + } + if (mAuthInfo != null) { mAuthInfo.setUsername(newValue); } else { @@ -229,6 +233,7 @@ public class AccountSettingsFragment extends Fragment { public void onTextValueChanged(String newValue) { if (mAuthInfo != null) { mAuthInfo.setUserid(newValue); + Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (core != null) { core.refreshRegisters(); @@ -244,9 +249,12 @@ public class AccountSettingsFragment extends Fragment { @Override public void onTextValueChanged(String newValue) { if (mAuthInfo != null) { + mAuthInfo.setHa1(null); mAuthInfo.setPassword(newValue); + Core core = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (core != null) { + core.addAuthInfo(mAuthInfo); core.refreshRegisters(); } } else { @@ -605,6 +613,7 @@ public class AccountSettingsFragment extends Fragment { if (mProxyConfig != null) { Address identityAddress = mProxyConfig.getIdentityAddress(); mAuthInfo = mProxyConfig.findAuthInfo(); + NatPolicy natPolicy = mProxyConfig.getNatPolicy(); if (natPolicy == null) { natPolicy = core.createNatPolicy(); From cf791822424bd4d6f797a84f1cf52a2c8a0723bd Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 26 Apr 2019 10:08:01 +0200 Subject: [PATCH 10/13] Updated translations & SDK --- app/build.gradle | 14 +----- app/src/main/res/values-de/strings.xml | 1 + app/src/main/res/values-fr/strings.xml | 3 +- app/src/main/res/values-it/strings.xml | 69 ++++++++++++++++++++++++++ app/src/main/res/values-ru/strings.xml | 3 ++ 5 files changed, 77 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4a6b3c4b5..1ee9cec51 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 28 - versionCode 4121 + versionCode 4122 versionName "4.1" applicationId getPackageName() multiDexEnabled true @@ -158,17 +158,7 @@ dependencies { implementation 'com.google.android:flexbox:1.1.0' implementation 'com.github.bumptech.glide:glide:4.9.0' - if (isLocalAarAvailable()) { - if (isLocalReleaseAarAvailable()) { - //debug AAR is a lot bigger than release one, and APK install time will be much longer so use release one for day-to-day development - implementation project(path: ":linphone-sdk-android", configuration: 'release') - } else { - releaseImplementation project(path: ":linphone-sdk-android", configuration: 'release') - debugImplementation project(path: ":linphone-sdk-android", configuration: 'debug') - } - } else { - implementation "org.linphone:linphone-sdk-android:4.1-366-g1b22291" - } + implementation "org.linphone:linphone-sdk-android:4.1-369-ge4ad24e" } if (firebaseEnabled()) { apply plugin: 'com.google.gms.google-services' diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 7e35e22cc..8b4bffdd4 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -424,6 +424,7 @@ Dienstbenachrichtigung aktivieren Beim Einschalten starten Auflegen bei eingehendem Anruf (in Sekunden) + Gerätename Fernbereitstellung Android-App-Einstellungen Android-Benachrichtigungseinstellungen diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index f7b674d73..05c328513 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -29,7 +29,7 @@ Nom d\'affichage Mot de passe Confirmation du mot de passe - Domain + Domaine URL Email Voulez-vous supprimer votre sélection ? @@ -241,6 +241,7 @@ Disponible gratuitement ici : %s Evénement inattendu %i pour %s Télécharger Sélectionnez une conversation ou créez-en une nouvelle + La confiance a été retirée. Faites un appel pour relancer la procédure d’authentification. Connecté Déconnecté diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 668705283..3e8cac610 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -6,15 +6,26 @@ Linphone Linphone Avvio + %sè connesso + %s non è riuscito a connettersi Linphone Android %s Linphone Core %s + Linphone SDK %s + Leggi le nostre regole della privacy contatti linphone + Rispondi + Risposta inviata: %s + Interrompi + Rispondi + Segna come già letto Nome utente ID utente (facoltativo) Numero di telefono + Codice di conferma + Prefisso internazionale Nome visualizzato Password Conferma password @@ -48,6 +59,9 @@ Si Collega il tuo account È disponibile un aggiornamento + Non mostrarlo più + Sei sicuro di eliminare questi contatti?\nSaranno eliminati anche dal tuo telefono! + Log indirizzi copiati negli appunti the libre SIP client @@ -78,6 +92,7 @@ Usa l\'account SIP Recupera la configurazione remota Recupera ed applica + Codice QR Login Calibrazione del cancellatore dell\'eco in corso Inserisci il tuo login @@ -145,6 +160,7 @@ Vuoi cancellare il registro delle chiamate selezionato? Oggi Ieri + Chiamate Nessun contatto nella tua rubrica. Nessun contatto SIP nella tua rubrica. @@ -154,10 +170,16 @@ Nome Cognome Organizzazione + Invito + Ciao, chiamami con Linphone! Puoi scaricarlo gratuitamente a %s + Scegli un contatto o creane uno nuovo Nessuna conversazione Vuoi eliminare la conversazione selezionata? Vuoi eliminare il messaggio selezionato? + L\'interlocutore sta scrivendo... + %s sta scrivendo... + %s stanno scrivendo... Piccolo Medio Grande @@ -167,6 +189,7 @@ Seleziona la fonte Immagine salvata Errore, immagine non salvata + Attendere prego... Si è verificato un errore durante il trasferimento del file Questo messaggio non è cifrato Hai ricevuto un messaggio crittografato che non sei in grado di decodificare da %s\nDevi chiamare il tuo corrispondente per scambiare le tue chiavi ZRTP se vuoi decodificare i messaggi futuri che riceverai. @@ -200,17 +223,33 @@ Ora sei amministratore Non sei più amministratore Creazione della chat room fallita + Vuoi veramente lasciare questa conversazione? Lascia + Vuoi eliminare e lasciare le conversazioni selezionate? Stato della consegna Dispositivi di %s Dispositivi di conversazione Aggiungi ai contatti + I messaggi sono criptati in conversazioni sicure. È possibile aumentare il livello di sicurezza di una conversazione autentificando i partecipanti. Per farlo, chiama il contatto e segui il processo di autenticazione. + Chiave di identità LIME cambiata per %s + Attacco del tipo man-in-the-middle per %s + %sha fatto diminuire il livello di sicurezza + %sha superato il numero max partecipanti + Evento inaspettato %iper %s + Scarica + Scegli una conversazione o creane una nuova + Connesso + Non connesso + Registrazione in corso + Connessione difettosa messaggi non letti + Uscita Assistente Impostazioni + Registrazioni Informazioni Esci @@ -220,6 +259,9 @@ Nessuna chiamata attiva Il chiamante ha messo in pausa la chiamata Si è verificato un errore durante l\'accettazione della chiamata + Leggi: + Conferma che il tuo interlocutore dice: + Sicurezza della conversazione SAS Conferma il precedente codice SAS con il tuo corrispondente Sconosciuto @@ -242,7 +284,10 @@ Decoder: Filtro di visualizzazione: Chiamata + Vuoi cancellare il registro delle chiamate selezionate? + Nessuna registrazione + Vuoi eliminare le registrazioni selezionate? Invia log Cancella log @@ -250,6 +295,8 @@ Chiamata audio in corso Chiamata in pausa Chiamata video in corso + Chiamata in arrivo + Chiamata effettuata avviato %i messaggi non letti Chiamata persa @@ -270,6 +317,7 @@ Non autorizzato Errore di rete Scaricamento fallito. Controlla la connessione di rete o riprova più tardi. + Impossibile scaricare o applicare il profilo di provisioning remoto... Provisioning remoto Vuoi cambiare l\'URI di provisioning? @@ -336,6 +384,8 @@ non riuscito Controllo adattivo della velocità Limite bitrate del codec + Amplificazione microfono (in db) + Amplificazione ascolto (in db) Codec Video @@ -354,6 +404,7 @@ Chiamata Usa la suoneria del dispositivo + Vibrazione per chiamata in arrivo Rispondere automaticamente alle chiamate in arrivo Tempo di risposta automatica (in millisecondi) Invia DTMF in-band (RFC2833) @@ -361,6 +412,7 @@ Timeout della chiamata (in secondi) URI della segreteria telefonica Utilizza Linphone come app telefono predefinita + Accetta early-media Chat Server di condivisione @@ -370,6 +422,11 @@ Obbligatorio Preferito LIME richiede la cifratura ZRTP.\nAttivando LIME si attiva automaticamente la cifratura multimediale ZRTP. + Regole per scaricamento di file in arrivo + Grandezza max (in byte) + Mai + Sempre + Se minore della grandezza massima Rete Usa solo Wi-Fi @@ -389,17 +446,23 @@ Cifratura multimediale Abilita le notifiche push Consenti IPv6 + Impostazioni per protezione batteria + La app deve\'essere abilitata per ricevere notifiche push Avanzate + Modalità scura Debug Debug Utilizza il Java logger Iscrizione ad una lista di amici Modalità Background + Mostra una notifica per tenere la app aperta Abilita animazioni Abilita notifica di servizio Parti dell\'avvio Riaggancio delle chiamate in entrata (in secondi) + Nome dispositivo + I cambiamenti entrano in vigore alla prossima accensione Provisioning remoto Impostazioni dell\'app Android Impostazioni di notifica Android @@ -413,10 +476,15 @@ Usa la modifica delle API di instradamento Utilizza le modifiche audio per Galaxy S + Rilevato risparmio energetico + Sembra che il tuo dispositivo abbia il risparmio energetico. Se desideri ricevere chiamate e notifiche push mentre la app è chiusa devi abilitare tale funzione. Impostazioni Dopo Debug + Abilita registri attività + Disabilita registri attività + Invia registro attività Indietro Tastierino @@ -493,4 +561,5 @@ Notifiche di messaggi istantanei Linphone Oggetto della chat room di gruppo Informazioni sulla chat room di gruppo + Registra chiamata diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 5aee5cfeb..0a453cd80 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -239,6 +239,7 @@ Неожиданное событие %i для %s Скачать Выберите беседу или создайте новую + В доверии было отказано. Сделайте вызов, чтобы начать процесс аутентификации снова. Соединено Не соединено @@ -461,6 +462,8 @@ Включить сервисное уведомление Запуск во время загрузки Отклонение входящего вызова (в секундах) + Имя устройства + Изменения применятся при следующем запуске Удалённое конфигурирование Параметры приложения в Android Параметры уведомлений в Android From 00126a95d0a822e0ee7e55377b189f1106aa6431 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 2 May 2019 10:08:52 +0200 Subject: [PATCH 11/13] Version bumped --- app/build.gradle | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 1ee9cec51..1b73b79c6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 28 - versionCode 4122 + versionCode 4123 versionName "4.1" applicationId getPackageName() multiDexEnabled true @@ -158,7 +158,17 @@ dependencies { implementation 'com.google.android:flexbox:1.1.0' implementation 'com.github.bumptech.glide:glide:4.9.0' - implementation "org.linphone:linphone-sdk-android:4.1-369-ge4ad24e" + if (isLocalAarAvailable()) { + if (isLocalReleaseAarAvailable()) { + //debug AAR is a lot bigger than release one, and APK install time will be much longer so use release one for day-to-day development + implementation project(path: ":linphone-sdk-android", configuration: 'release') + } else { + releaseImplementation project(path: ":linphone-sdk-android", configuration: 'release') + debugImplementation project(path: ":linphone-sdk-android", configuration: 'debug') + } + } else { + implementation "org.linphone:linphone-sdk-android:4.1-366-g1b22291" + } } if (firebaseEnabled()) { apply plugin: 'com.google.gms.google-services' From a6dbda0dffec18d803691699534106ec82caaca8 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 2 May 2019 10:13:31 +0200 Subject: [PATCH 12/13] Updated translations --- app/src/main/res/values-it/strings.xml | 1 + app/src/main/res/values-uk/strings.xml | 34 ++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 3e8cac610..67d899747 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -239,6 +239,7 @@ Evento inaspettato %iper %s Scarica Scegli una conversazione o creane una nuova + Il trust è stato negato. Effettua una chiamata per avviare nuovamente la procedura di autenticazione. Connesso Non connesso diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2685b4b25..a67b94d56 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -6,10 +6,13 @@ Linphone Linphone Завантажується + %s з\'єднано + %s з\'єднатися не вийшло Linphone Android %s Linphone ядро %s Linphone SDK %s + Відвідайте нашу політику конфіденційності контакти linphone Відповідь @@ -21,6 +24,8 @@ Ім\'я користувача Ідентифікатор користувача (необов\'язково) Номер телефону + Код підтвердження + Префікс міжнародного номеру телефону Показуване ім\'я Пароль Схвалення паролю @@ -56,6 +61,7 @@ Доступне оновлення Не показувати знову Ви впевнені, що волієте вилучити ці контакти?\nВони також будуть вилучені з вашого телефону! + URL-адресу журналів скопійовано до буферу обміну це безкоштовний SIP-клієнт @@ -154,6 +160,7 @@ Ви справді бажаєте вилучити обраний журнал викликів? Сьогодні Вчора + Виклики В адресній книзі немає контактів. В адресній книзі немає SIP контактів. @@ -164,10 +171,15 @@ Прізвище Організація Запросити + Вітаю! Приєднуйтеся до мене в Linphone! Ви можете завантажити його безкоштовно звідси: %s + Оберіть контакт або створіть новий Немає розмов Ви справді бажаєте вилучити обрану розмову? Ви справді бажаєте вилучити обране повідомлення? + Співрозмовник пише... + %s пише… + %s пишуть… Маленький Середній Великий @@ -177,6 +189,7 @@ Вибрати джерело Зображення збережено Помилка, зображення не збережено + Будь ласка зачекайте... При передачі файлу трапилася помилка Це повідомлення не зашифровано Від %sотримано зашифроване повідомлення, яке ви не можете розшифрувати.\nВи маєте зателефонувати своєму співрозмовнику для обміну ключами ZRTP. Це необхідно для розшифрування майбутніх повідомлень, які ви отримаєте. @@ -225,9 +238,16 @@ Щонайбільша кількість учасників перебільшена %s Несподівана подія %i для %s Стягнути + Оберіть бесіду або створіть нову + У довірі було відмовлено. Зробіть виклик, аби почати процес автентифікації знову. + З\'єднано + Не з\'єднано + Виконується з\'єднання + З\'єднання не відбулося непрочитаних повідомлень + Вийти Асистент Налаштування Записи @@ -265,6 +285,7 @@ Декодер Відображуваний фільтр: Виклик + Ви справді волієте вилучити обрані журнали викликів? Немає записів Ви бажаєте вилучити обрані записи? @@ -275,6 +296,8 @@ Встановлено авдіоз\'єднання Виклик на павзі Встановлено відеоз\'єднання + Вхідний виклик + Вихідний виклик почато %i непрочитаних повідомлень Пропущений виклик @@ -295,6 +318,7 @@ Не авторизований Помилка мережі Завантаження не вдалося. Перевірте мережеве з\'єднання або повторіть спробу пізніше. + Не вдалося завантажити або застосувати профіль віддаленої конфігурації... Віддалене конфігурування Ви бажаєте змінити URI конфігурування? @@ -361,6 +385,8 @@ не вдалося Адаптивний контроль швидкости Гранична межа кодеку + Підсилення мікрофону (в дБ) + Підсилення відтворення (в дБ) Кодеки Відео @@ -387,6 +413,7 @@ Час очікування виклику (у секундах) URI голосової пошти Використовувати Linphone у якости типового застосунку для дзвінків. + Приймати ранній потік Чат Сервер обміну @@ -424,15 +451,19 @@ Цей застосунок має бути увімкнений для отримання push-сповіщень Додатково + Темний режим Зневадження Зневадження Використовувати Java-реєстратор Підписка Тловий режим + Показувати сповіщення, аби зберегти застосунок робочим Увімкнути анімацію Увімкнути сервісне сповіщення Запуск під час завантаження Відхилення вхідного виклику (у секундах) + Ім\'я пристрою + Зміни буде застосовано при наступному запуску Віддалене конфігурування Параметри додатку в Android Параметри сповіщень в Android @@ -452,6 +483,9 @@ Пізніше Зневадження + Увімкнути журнали + Вимкнути журнали + Відправити журнали Назад Номеронабирач From 6fe6d516cb191d5942ab112e7551f8b79b0a12aa Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 3 May 2019 11:29:04 +0200 Subject: [PATCH 13/13] 4.1 release --- CHANGELOG.md | 2 +- app/build.gradle | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 38ff6b601..e51604cf2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,7 +10,7 @@ Group changes to describe their impact on the project, as follows: Fixed for any bug fixes. Security to invite users to upgrade in case of vulnerabilities. -## [4.1.0] - 2019-xx-xx +## [4.1.0] - 2019-05-03 ### Added - End-to-end encryption for instant messaging, for both one-to-one and group conversations. diff --git a/app/build.gradle b/app/build.gradle index 1b73b79c6..362fa7292 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ android { defaultConfig { minSdkVersion 21 targetSdkVersion 28 - versionCode 4123 + versionCode 4124 versionName "4.1" applicationId getPackageName() multiDexEnabled true @@ -167,7 +167,7 @@ dependencies { debugImplementation project(path: ":linphone-sdk-android", configuration: 'debug') } } else { - implementation "org.linphone:linphone-sdk-android:4.1-366-g1b22291" + implementation "org.linphone:linphone-sdk-android:4.2" } } if (firebaseEnabled()) {