Merge branch 'release/4.1'
This commit is contained in:
commit
3b66218d63
21 changed files with 313 additions and 117 deletions
|
@ -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.
|
||||
|
|
|
@ -72,7 +72,7 @@ android {
|
|||
defaultConfig {
|
||||
minSdkVersion 21
|
||||
targetSdkVersion 28
|
||||
versionCode 4120
|
||||
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()) {
|
||||
|
|
|
@ -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);
|
||||
if (!mCallTransfer) {
|
||||
LinphoneManager.getInstance().newOutgoingCall(address);
|
||||
} else {
|
||||
addressWaitingToBeCalled = number;
|
||||
displayDialer();
|
||||
}
|
||||
}
|
||||
|
||||
public void startIncallActivity() {
|
||||
|
|
|
@ -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() {
|
||||
|
@ -1471,27 +1474,14 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
}
|
||||
|
||||
public void isAccountWithAlias() {
|
||||
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) {
|
||||
mAccountCreator.setUsername(
|
||||
LinphonePreferences.instance()
|
||||
.getAccountUsername(
|
||||
LinphonePreferences.instance().getDefaultAccountIndex()));
|
||||
mAccountCreator.isAccountExist();
|
||||
}
|
||||
} else {
|
||||
LinphonePreferences.instance().setLinkPopupTime(null);
|
||||
}
|
||||
}
|
||||
|
||||
private void askLinkWithPhoneNumber() {
|
||||
if (!LinphonePreferences.instance().isLinkPopupEnabled()) return;
|
||||
|
||||
if (LinphoneManager.getLc().getDefaultProxyConfig() != null) {
|
||||
|
||||
long now = new Timestamp(new Date().getTime()).getTime();
|
||||
if (LinphonePreferences.instance().getLinkPopupTime() != null
|
||||
&& Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) >= now) return;
|
||||
&& Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) >= now)
|
||||
return;
|
||||
|
||||
long future =
|
||||
new Timestamp(
|
||||
|
@ -1501,7 +1491,21 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
.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);
|
||||
}
|
||||
}
|
||||
|
||||
private void askLinkWithPhoneNumber() {
|
||||
if (!LinphonePreferences.instance().isLinkPopupEnabled()) return;
|
||||
|
||||
final Dialog dialog =
|
||||
LinphoneActivity.instance()
|
||||
|
@ -1866,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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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),
|
||||
|
|
|
@ -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)) {
|
||||
} else {
|
||||
if (!getResources().getBoolean(R.bool.isTablet)) {
|
||||
mUseEmail.setVisibility(View.VISIBLE);
|
||||
}
|
||||
mUseEmail.setOnCheckedChangeListener(this);
|
||||
|
||||
if (getResources().getBoolean(R.bool.pre_fill_email_in_assistant)) {
|
||||
|
|
|
@ -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();
|
||||
|
@ -1251,7 +1252,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 +1267,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;
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -145,6 +145,11 @@ public class DevicesFragment extends Fragment {
|
|||
}
|
||||
|
||||
initValues();
|
||||
|
||||
if (LinphoneManager.getInstance().hasLastCallSasBeenRejected()) {
|
||||
LinphoneManager.getInstance().lastCallSasRejected(false);
|
||||
LinphoneUtils.showTrustDeniedDialog(getActivity());
|
||||
}
|
||||
}
|
||||
|
||||
private void initChatRoom() {
|
||||
|
|
|
@ -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,7 +173,8 @@ public class DialerFragment extends Fragment {
|
|||
String addressWaitingToBeCalled = LinphoneActivity.instance().addressWaitingToBeCalled;
|
||||
if (addressWaitingToBeCalled != null) {
|
||||
mAddress.setText(addressWaitingToBeCalled);
|
||||
if (getResources()
|
||||
if (!LinphoneActivity.instance().isCallTransfer()
|
||||
&& getResources()
|
||||
.getBoolean(R.bool.automatically_start_intercepted_outgoing_gsm_call)) {
|
||||
newOutgoingCall(addressWaitingToBeCalled);
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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 {
|
||||
|
@ -259,6 +267,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 {
|
||||
|
@ -601,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();
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
android:layout_height="wrap_content"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:visibility="visible">
|
||||
android:visibility="gone">
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
|
@ -162,7 +162,7 @@
|
|||
android:layout_column="0"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
android:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/username_label"
|
||||
|
@ -201,7 +201,7 @@
|
|||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="30dp"
|
||||
android:visibility="gone">
|
||||
android:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/password_label"
|
||||
|
@ -249,7 +249,7 @@
|
|||
android:layout_column="0"
|
||||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:visibility="gone">
|
||||
android:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/email_label"
|
||||
|
@ -291,7 +291,7 @@
|
|||
android:layout_weight="1"
|
||||
android:orientation="vertical"
|
||||
android:paddingLeft="30dp"
|
||||
android:visibility="gone">
|
||||
android:visibility="visible">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/confirm_password_label"
|
||||
|
@ -338,12 +338,12 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_column="1"
|
||||
android:checked="false"
|
||||
android:checked="true"
|
||||
android:paddingLeft="5dp"
|
||||
android:button="@drawable/checkbox"
|
||||
android:textColor="?attr/primaryTextColor"
|
||||
android:text="@string/use_username_instead_or_phone_number"
|
||||
android:visibility="visible" />
|
||||
android:visibility="gone" />
|
||||
</TableRow>
|
||||
|
||||
<TableRow
|
||||
|
@ -357,12 +357,12 @@
|
|||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_column="1"
|
||||
android:checked="false"
|
||||
android:checked="true"
|
||||
android:paddingLeft="5dp"
|
||||
android:button="@drawable/checkbox"
|
||||
android:textColor="?attr/primaryTextColor"
|
||||
android:text="@string/use_email_for_validation"
|
||||
android:visibility="visible" />
|
||||
android:visibility="gone" />
|
||||
|
||||
</TableRow>
|
||||
|
||||
|
|
|
@ -424,6 +424,7 @@
|
|||
<string name="pref_service_notification">Dienstbenachrichtigung aktivieren</string>
|
||||
<string name="pref_autostart">Beim Einschalten starten</string>
|
||||
<string name="pref_incoming_call_timeout_title">Auflegen bei eingehendem Anruf (in Sekunden)</string>
|
||||
<string name="pref_device_name">Gerätename</string>
|
||||
<string name="pref_remote_provisioning_title">Fernbereitstellung</string>
|
||||
<string name="pref_android_app_settings_title">Android-App-Einstellungen</string>
|
||||
<string name="pref_android_app_notif_settings_title">Android-Benachrichtigungseinstellungen</string>
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
<string name="display_name">Nom d\'affichage</string>
|
||||
<string name="password">Mot de passe</string>
|
||||
<string name="confirm_password">Confirmation du mot de passe</string>
|
||||
<string name="domain">Domain</string>
|
||||
<string name="domain">Domaine</string>
|
||||
<string name="remote_provisioning_url">URL</string>
|
||||
<string name="email">Email</string>
|
||||
<string name="delete_text">Voulez-vous supprimer votre sélection ?</string>
|
||||
|
@ -241,6 +241,7 @@ Disponible gratuitement ici : %s</string>
|
|||
<string name="unexpected_event">Evénement inattendu %i pour %s</string>
|
||||
<string name="download_file">Télécharger</string>
|
||||
<string name="toast_choose_chat_room_for_sharing">Sélectionnez une conversation ou créez-en une nouvelle</string>
|
||||
<string name="trust_denied">La confiance a été retirée. Faites un appel pour relancer la procédure d’authentification.</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">Connecté</string>
|
||||
<string name="status_not_connected">Déconnecté</string>
|
||||
|
|
|
@ -6,15 +6,26 @@
|
|||
<string name="addressbook_label">Linphone</string>
|
||||
<string name="notification_title">Linphone</string>
|
||||
<string name="wait_dialog_text">Avvio</string>
|
||||
<string name="notification_registered">%sè connesso</string>
|
||||
<string name="notification_register_failure">%s non è riuscito a connettersi</string>
|
||||
<string name="tunnel_host"></string>
|
||||
<string name="about_version">Linphone Android %s</string>
|
||||
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||
<string name="about_liblinphone_sdk_version">Linphone SDK %s</string>
|
||||
<string name="about_privacy_policy">Leggi le nostre regole della privacy</string>
|
||||
<string name="sync_account_name">contatti linphone</string>
|
||||
<!--Notifications-->
|
||||
<string name="notification_reply_label">Rispondi</string>
|
||||
<string name="notification_replied_label">Risposta inviata: %s</string>
|
||||
<string name="notification_call_hangup_label">Interrompi</string>
|
||||
<string name="notification_call_answer_label">Rispondi</string>
|
||||
<string name="notification_mark_as_read_label">Segna come già letto</string>
|
||||
<!--Common-->
|
||||
<string name="username">Nome utente</string>
|
||||
<string name="userid">ID utente (facoltativo)</string>
|
||||
<string name="phone_number">Numero di telefono</string>
|
||||
<string name="confirmation_code">Codice di conferma</string>
|
||||
<string name="international_prefix">Prefisso internazionale</string>
|
||||
<string name="display_name">Nome visualizzato</string>
|
||||
<string name="password">Password</string>
|
||||
<string name="confirm_password">Conferma password</string>
|
||||
|
@ -48,6 +59,9 @@
|
|||
<string name="yes">Si</string>
|
||||
<string name="link_account">Collega il tuo account</string>
|
||||
<string name="update_available">È disponibile un aggiornamento</string>
|
||||
<string name="do_not_ask_again">Non mostrarlo più</string>
|
||||
<string name="delete_contacts_text">Sei sicuro di eliminare questi contatti?\nSaranno eliminati anche dal tuo telefono!</string>
|
||||
<string name="logs_url_copied_to_clipboard">Log indirizzi copiati negli appunti</string>
|
||||
<!--Launch screen-->
|
||||
<string name="app_description">the <i>libre</i> SIP client</string>
|
||||
<!--Assistant-->
|
||||
|
@ -78,6 +92,7 @@
|
|||
<string name="assistant_generic_account">Usa l\'account SIP</string>
|
||||
<string name="assistant_remote_provisioning_title">Recupera la configurazione remota</string>
|
||||
<string name="assistant_fetch_apply">Recupera ed applica</string>
|
||||
<string name="assistant_launch_qrcode">Codice QR</string>
|
||||
<string name="assistant_login">Login</string>
|
||||
<string name="assistant_ec_calibration">Calibrazione del cancellatore dell\'eco in corso</string>
|
||||
<string name="assistant_remote_provisioning_login">Inserisci il tuo login</string>
|
||||
|
@ -145,6 +160,7 @@
|
|||
<string name="delete_history_log">Vuoi cancellare il registro delle chiamate selezionato?</string>
|
||||
<string name="today">Oggi</string>
|
||||
<string name="yesterday">Ieri</string>
|
||||
<string name="calls">Chiamate</string>
|
||||
<!--Contacts-->
|
||||
<string name="no_contact">Nessun contatto nella tua rubrica.</string>
|
||||
<string name="no_sip_contact">Nessun contatto SIP nella tua rubrica.</string>
|
||||
|
@ -154,10 +170,16 @@
|
|||
<string name="contact_first_name">Nome</string>
|
||||
<string name="contact_last_name">Cognome</string>
|
||||
<string name="contact_organization">Organizzazione</string>
|
||||
<string name="invite_friend">Invito</string>
|
||||
<string name="invite_friend_text">Ciao, chiamami con Linphone! Puoi scaricarlo gratuitamente a %s</string>
|
||||
<string name="toast_choose_contact_for_edition">Scegli un contatto o creane uno nuovo</string>
|
||||
<!--Chat-->
|
||||
<string name="no_chat_history">Nessuna conversazione</string>
|
||||
<string name="delete_conversation">Vuoi eliminare la conversazione selezionata?</string>
|
||||
<string name="delete_message">Vuoi eliminare il messaggio selezionato?</string>
|
||||
<string name="remote_composing"> L\'interlocutore sta scrivendo...</string>
|
||||
<string name="remote_composing_single">%s sta scrivendo...</string>
|
||||
<string name="remote_composing_multiple">%s stanno scrivendo...</string>
|
||||
<string name="share_picture_size_small">Piccolo</string>
|
||||
<string name="share_picture_size_medium">Medio</string>
|
||||
<string name="share_picture_size_large">Grande</string>
|
||||
|
@ -167,6 +189,7 @@
|
|||
<string name="image_picker_title">Seleziona la fonte</string>
|
||||
<string name="image_saved">Immagine salvata</string>
|
||||
<string name="image_not_saved">Errore, immagine non salvata</string>
|
||||
<string name="wait">Attendere prego...</string>
|
||||
<string name="image_transfert_error">Si è verificato un errore durante il trasferimento del file</string>
|
||||
<string name="message_not_encrypted">Questo messaggio non è cifrato</string>
|
||||
<string name="message_cant_be_decrypted">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.</string>
|
||||
|
@ -200,17 +223,34 @@
|
|||
<string name="chat_room_you_are_now_admin">Ora sei amministratore</string>
|
||||
<string name="chat_room_you_are_no_longer_admin">Non sei più amministratore</string>
|
||||
<string name="chat_room_creation_failed">Creazione della chat room fallita</string>
|
||||
<string name="chat_room_leave_dialog">Vuoi veramente lasciare questa conversazione?</string>
|
||||
<string name="chat_room_leave_button">Lascia</string>
|
||||
<string name="chat_room_delete_dialog">Vuoi eliminare e lasciare le conversazioni selezionate?</string>
|
||||
<string name="separator">: </string>
|
||||
<string name="imdn_info">Stato della consegna</string>
|
||||
<string name="chat_room_devices">Dispositivi di %s</string>
|
||||
<string name="group_chat_room_devices">Dispositivi di conversazione</string>
|
||||
<string name="add_to_contacts">Aggiungi ai contatti</string>
|
||||
<string name="lime_security_popup">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.</string>
|
||||
<string name="lime_identity_key_changed">Chiave di identità LIME cambiata per %s</string>
|
||||
<string name="man_in_the_middle_detected">Attacco del tipo man-in-the-middle per %s</string>
|
||||
<string name="security_level_downgraded">%sha fatto diminuire il livello di sicurezza</string>
|
||||
<string name="participant_max_count_exceeded">%sha superato il numero max partecipanti</string>
|
||||
<string name="unexpected_event">Evento inaspettato %iper %s</string>
|
||||
<string name="download_file">Scarica</string>
|
||||
<string name="toast_choose_chat_room_for_sharing">Scegli una conversazione o creane una nuova</string>
|
||||
<string name="trust_denied">Il trust è stato negato. Effettua una chiamata per avviare nuovamente la procedura di autenticazione.</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">Connesso</string>
|
||||
<string name="status_not_connected">Non connesso</string>
|
||||
<string name="status_in_progress">Registrazione in corso</string>
|
||||
<string name="status_error">Connessione difettosa</string>
|
||||
<string name="voicemail_unread">messaggi non letti</string>
|
||||
<!--Side Menu-->
|
||||
<string name="menu_logout">Uscita</string>
|
||||
<string name="menu_assistant">Assistente</string>
|
||||
<string name="menu_settings">Impostazioni</string>
|
||||
<string name="menu_recordings">Registrazioni</string>
|
||||
<string name="menu_about">Informazioni</string>
|
||||
<string name="quit">Esci</string>
|
||||
<!--Call-->
|
||||
|
@ -220,6 +260,9 @@
|
|||
<string name="no_current_call">Nessuna chiamata attiva</string>
|
||||
<string name="call_paused_by_remote">Il chiamante ha messo in pausa la chiamata</string>
|
||||
<string name="couldnt_accept_call">Si è verificato un errore durante l\'accettazione della chiamata</string>
|
||||
<string name="zrtp_local_sas">Leggi:</string>
|
||||
<string name="zrtp_remote_sas">Conferma che il tuo interlocutore dice:</string>
|
||||
<string name="zrtp_dialog_title">Sicurezza della conversazione</string>
|
||||
<string name="zrtp_notification_title">SAS</string>
|
||||
<string name="zrtp_notification_message">Conferma il precedente codice SAS con il tuo corrispondente</string>
|
||||
<string name="unknown_incoming_call_name">Sconosciuto</string>
|
||||
|
@ -242,7 +285,10 @@
|
|||
<string name="call_stats_decoder_name">Decoder:</string>
|
||||
<string name="call_stats_display_filter">Filtro di visualizzazione:</string>
|
||||
<string name="call">Chiamata</string>
|
||||
<string name="call_log_delete_dialog">Vuoi cancellare il registro delle chiamate selezionate?</string>
|
||||
<!--Recordings-->
|
||||
<string name="no_recordings">Nessuna registrazione</string>
|
||||
<string name="recordings_delete_dialog">Vuoi eliminare le registrazioni selezionate?</string>
|
||||
<!--About-->
|
||||
<string name="menu_send_log">Invia log</string>
|
||||
<string name="menu_reset_log">Cancella log</string>
|
||||
|
@ -250,6 +296,8 @@
|
|||
<string name="incall_notif_active">Chiamata audio in corso</string>
|
||||
<string name="incall_notif_paused">Chiamata in pausa</string>
|
||||
<string name="incall_notif_video">Chiamata video in corso</string>
|
||||
<string name="incall_notif_incoming">Chiamata in arrivo</string>
|
||||
<string name="incall_notif_outgoing">Chiamata effettuata</string>
|
||||
<string name="notification_started">avviato</string>
|
||||
<string name="unread_messages">%i messaggi non letti</string>
|
||||
<string name="missed_calls_notif_title">Chiamata persa</string>
|
||||
|
@ -270,6 +318,7 @@
|
|||
<string name="error_unauthorized">Non autorizzato</string>
|
||||
<string name="error_io_error">Errore di rete</string>
|
||||
<string name="download_image_failed">Scaricamento fallito. Controlla la connessione di rete o riprova più tardi.</string>
|
||||
<string name="remote_provisioning_failure">Impossibile scaricare o applicare il profilo di provisioning remoto...</string>
|
||||
<string name="remote_provisioning_again_title">Provisioning remoto</string>
|
||||
<string name="remote_provisioning_again_message">Vuoi cambiare l\'URI di provisioning?</string>
|
||||
<!--Account Settings-->
|
||||
|
@ -336,6 +385,8 @@
|
|||
<string name="failed">non riuscito</string>
|
||||
<string name="pref_adaptive_rate_control">Controllo adattivo della velocità</string>
|
||||
<string name="pref_codec_bitrate_limit">Limite bitrate del codec</string>
|
||||
<string name="pref_mic_gain_db">Amplificazione microfono (in db)</string>
|
||||
<string name="pref_playback_gain_db">Amplificazione ascolto (in db)</string>
|
||||
<string name="pref_codecs">Codec</string>
|
||||
<!--Video settings-->
|
||||
<string name="pref_video_title">Video</string>
|
||||
|
@ -354,6 +405,7 @@
|
|||
<!--Call settings-->
|
||||
<string name="pref_call_title">Chiamata</string>
|
||||
<string name="pref_device_ringtone">Usa la suoneria del dispositivo</string>
|
||||
<string name="pref_vibrate_on_incoming_calls">Vibrazione per chiamata in arrivo</string>
|
||||
<string name="pref_auto_answer">Rispondere automaticamente alle chiamate in arrivo</string>
|
||||
<string name="pref_auto_answer_time">Tempo di risposta automatica (in millisecondi)</string>
|
||||
<string name="pref_rfc2833_dtmf">Invia DTMF in-band (RFC2833)</string>
|
||||
|
@ -361,6 +413,7 @@
|
|||
<string name="pref_call_timeout_title">Timeout della chiamata (in secondi)</string>
|
||||
<string name="pref_voice_mail">URI della segreteria telefonica</string>
|
||||
<string name="pref_dialer_call">Utilizza Linphone come app telefono predefinita</string>
|
||||
<string name="pref_accept_early_media">Accetta early-media</string>
|
||||
<!--Chat settings-->
|
||||
<string name="pref_chat_title">Chat</string>
|
||||
<string name="pref_image_sharing_server_title">Server di condivisione</string>
|
||||
|
@ -370,6 +423,11 @@
|
|||
<string name="lime_encryption_entry_mandatory">Obbligatorio</string>
|
||||
<string name="lime_encryption_entry_preferred">Preferito</string>
|
||||
<string name="lime_encryption_enable_zrtp">LIME richiede la cifratura ZRTP.\nAttivando LIME si attiva automaticamente la cifratura multimediale ZRTP.</string>
|
||||
<string name="pref_auto_download_policy_title">Regole per scaricamento di file in arrivo</string>
|
||||
<string name="pref_auto_download_max_size_title">Grandezza max (in byte)</string>
|
||||
<string name="pref_auto_download_disabled">Mai</string>
|
||||
<string name="pref_auto_download_always">Sempre</string>
|
||||
<string name="pref_auto_download_under_size">Se minore della grandezza massima</string>
|
||||
<!--Network settings-->
|
||||
<string name="pref_network_title">Rete</string>
|
||||
<string name="pref_wifi_only">Usa solo Wi-Fi</string>
|
||||
|
@ -389,17 +447,23 @@
|
|||
<string name="pref_media_encryption">Cifratura multimediale</string>
|
||||
<string name="pref_push_notification">Abilita le notifiche push</string>
|
||||
<string name="pref_ipv6_title">Consenti IPv6</string>
|
||||
<string name="pref_protected_settings_title">Impostazioni per protezione batteria</string>
|
||||
<string name="pref_protected_settings_desc">La app deve\'essere abilitata per ricevere notifiche push</string>
|
||||
<!--Advanced settings-->
|
||||
<string name="pref_advanced_title">Avanzate</string>
|
||||
<string name="pref_dark_mode">Modalità scura</string>
|
||||
<string name="pref_debug_title">Debug</string>
|
||||
<string name="pref_debug">Debug</string>
|
||||
<string name="pref_java_debug">Utilizza il Java logger</string>
|
||||
<string name="pref_friendlist_subscribe">Iscrizione ad una lista di amici</string>
|
||||
<string name="pref_background_mode">Modalità Background</string>
|
||||
<string name="pref_background_mode_desc">Mostra una notifica per tenere la app aperta</string>
|
||||
<string name="pref_animation_enable_title">Abilita animazioni</string>
|
||||
<string name="pref_service_notification">Abilita notifica di servizio</string>
|
||||
<string name="pref_autostart">Parti dell\'avvio</string>
|
||||
<string name="pref_incoming_call_timeout_title">Riaggancio delle chiamate in entrata (in secondi)</string>
|
||||
<string name="pref_device_name">Nome dispositivo</string>
|
||||
<string name="pref_display_name_subtitle">I cambiamenti entrano in vigore alla prossima accensione</string>
|
||||
<string name="pref_remote_provisioning_title">Provisioning remoto</string>
|
||||
<string name="pref_android_app_settings_title">Impostazioni dell\'app Android</string>
|
||||
<string name="pref_android_app_notif_settings_title">Impostazioni di notifica Android</string>
|
||||
|
@ -413,10 +477,15 @@
|
|||
<string name="pref_audio_hacks_use_routing_api_title">Usa la modifica delle API di instradamento</string>
|
||||
<string name="pref_audio_hacks_use_galaxys_hack_title">Utilizza le modifiche audio per Galaxy S</string>
|
||||
<!--Device specifics-->
|
||||
<string name="device_power_saver_dialog_title">Rilevato risparmio energetico</string>
|
||||
<string name="device_power_saver_dialog_message">Sembra che il tuo dispositivo abbia il risparmio energetico. Se desideri ricevere chiamate e notifiche push mentre la app è chiusa devi abilitare tale funzione.</string>
|
||||
<string name="device_power_saver_dialog_button_go_to_settings">Impostazioni</string>
|
||||
<string name="device_power_saver_dialog_button_later">Dopo</string>
|
||||
<!--Debug popup-->
|
||||
<string name="debug_popup_title">Debug</string>
|
||||
<string name="debug_popup_enable_logs">Abilita registri attività</string>
|
||||
<string name="debug_popup_disable_logs">Disabilita registri attività</string>
|
||||
<string name="debug_popup_send_logs">Invia registro attività</string>
|
||||
<!--Content description-->
|
||||
<string name="content_description_back">Indietro</string>
|
||||
<string name="content_description_dialer">Tastierino</string>
|
||||
|
@ -493,4 +562,5 @@
|
|||
<string name="content_title_notification">Notifiche di messaggi istantanei Linphone</string>
|
||||
<string name="content_description_conversation_subject">Oggetto della chat room di gruppo</string>
|
||||
<string name="content_description_conversation_infos">Informazioni sulla chat room di gruppo</string>
|
||||
<string name="content_description_record_call">Registra chiamata</string>
|
||||
</resources>
|
||||
|
|
|
@ -239,6 +239,7 @@
|
|||
<string name="unexpected_event">Неожиданное событие %i для %s</string>
|
||||
<string name="download_file">Скачать</string>
|
||||
<string name="toast_choose_chat_room_for_sharing">Выберите беседу или создайте новую</string>
|
||||
<string name="trust_denied">В доверии было отказано. Сделайте вызов, чтобы начать процесс аутентификации снова.</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">Соединено</string>
|
||||
<string name="status_not_connected">Не соединено</string>
|
||||
|
@ -461,6 +462,8 @@
|
|||
<string name="pref_service_notification">Включить сервисное уведомление</string>
|
||||
<string name="pref_autostart">Запуск во время загрузки</string>
|
||||
<string name="pref_incoming_call_timeout_title">Отклонение входящего вызова (в секундах)</string>
|
||||
<string name="pref_device_name">Имя устройства</string>
|
||||
<string name="pref_display_name_subtitle">Изменения применятся при следующем запуске</string>
|
||||
<string name="pref_remote_provisioning_title">Удалённое конфигурирование</string>
|
||||
<string name="pref_android_app_settings_title">Параметры приложения в Android</string>
|
||||
<string name="pref_android_app_notif_settings_title">Параметры уведомлений в Android</string>
|
||||
|
|
|
@ -6,10 +6,13 @@
|
|||
<string name="addressbook_label">Linphone</string>
|
||||
<string name="notification_title">Linphone</string>
|
||||
<string name="wait_dialog_text">Завантажується</string>
|
||||
<string name="notification_registered">%s з\'єднано</string>
|
||||
<string name="notification_register_failure">%s з\'єднатися не вийшло</string>
|
||||
<string name="tunnel_host"></string>
|
||||
<string name="about_version">Linphone Android %s</string>
|
||||
<string name="about_liblinphone_version">Linphone ядро %s</string>
|
||||
<string name="about_liblinphone_sdk_version">Linphone SDK %s</string>
|
||||
<string name="about_privacy_policy">Відвідайте нашу політику конфіденційності</string>
|
||||
<string name="sync_account_name">контакти linphone</string>
|
||||
<!--Notifications-->
|
||||
<string name="notification_reply_label">Відповідь</string>
|
||||
|
@ -21,6 +24,8 @@
|
|||
<string name="username">Ім\'я користувача</string>
|
||||
<string name="userid">Ідентифікатор користувача (необов\'язково)</string>
|
||||
<string name="phone_number">Номер телефону</string>
|
||||
<string name="confirmation_code">Код підтвердження</string>
|
||||
<string name="international_prefix">Префікс міжнародного номеру телефону</string>
|
||||
<string name="display_name">Показуване ім\'я</string>
|
||||
<string name="password">Пароль</string>
|
||||
<string name="confirm_password">Схвалення паролю</string>
|
||||
|
@ -56,6 +61,7 @@
|
|||
<string name="update_available">Доступне оновлення</string>
|
||||
<string name="do_not_ask_again">Не показувати знову</string>
|
||||
<string name="delete_contacts_text">Ви впевнені, що волієте вилучити ці контакти?\nВони також будуть вилучені з вашого телефону!</string>
|
||||
<string name="logs_url_copied_to_clipboard">URL-адресу журналів скопійовано до буферу обміну</string>
|
||||
<!--Launch screen-->
|
||||
<string name="app_description">це <i>безкоштовний</i> SIP-клієнт</string>
|
||||
<!--Assistant-->
|
||||
|
@ -154,6 +160,7 @@
|
|||
<string name="delete_history_log">Ви справді бажаєте вилучити обраний журнал викликів?</string>
|
||||
<string name="today">Сьогодні</string>
|
||||
<string name="yesterday">Вчора</string>
|
||||
<string name="calls">Виклики</string>
|
||||
<!--Contacts-->
|
||||
<string name="no_contact">В адресній книзі немає контактів.</string>
|
||||
<string name="no_sip_contact">В адресній книзі немає SIP контактів.</string>
|
||||
|
@ -164,10 +171,15 @@
|
|||
<string name="contact_last_name">Прізвище</string>
|
||||
<string name="contact_organization">Організація</string>
|
||||
<string name="invite_friend">Запросити</string>
|
||||
<string name="invite_friend_text">Вітаю! Приєднуйтеся до мене в Linphone! Ви можете завантажити його безкоштовно звідси: %s</string>
|
||||
<string name="toast_choose_contact_for_edition">Оберіть контакт або створіть новий</string>
|
||||
<!--Chat-->
|
||||
<string name="no_chat_history">Немає розмов</string>
|
||||
<string name="delete_conversation">Ви справді бажаєте вилучити обрану розмову?</string>
|
||||
<string name="delete_message">Ви справді бажаєте вилучити обране повідомлення?</string>
|
||||
<string name="remote_composing">Співрозмовник пише...</string>
|
||||
<string name="remote_composing_single">%s пише…</string>
|
||||
<string name="remote_composing_multiple">%s пишуть…</string>
|
||||
<string name="share_picture_size_small">Маленький</string>
|
||||
<string name="share_picture_size_medium">Середній</string>
|
||||
<string name="share_picture_size_large">Великий</string>
|
||||
|
@ -177,6 +189,7 @@
|
|||
<string name="image_picker_title">Вибрати джерело</string>
|
||||
<string name="image_saved">Зображення збережено</string>
|
||||
<string name="image_not_saved">Помилка, зображення не збережено</string>
|
||||
<string name="wait">Будь ласка зачекайте...</string>
|
||||
<string name="image_transfert_error">При передачі файлу трапилася помилка</string>
|
||||
<string name="message_not_encrypted">Це повідомлення не зашифровано</string>
|
||||
<string name="message_cant_be_decrypted">Від %sотримано зашифроване повідомлення, яке ви не можете розшифрувати.\nВи маєте зателефонувати своєму співрозмовнику для обміну ключами ZRTP. Це необхідно для розшифрування майбутніх повідомлень, які ви отримаєте.</string>
|
||||
|
@ -225,9 +238,16 @@
|
|||
<string name="participant_max_count_exceeded">Щонайбільша кількість учасників перебільшена %s</string>
|
||||
<string name="unexpected_event">Несподівана подія %i для %s</string>
|
||||
<string name="download_file">Стягнути</string>
|
||||
<string name="toast_choose_chat_room_for_sharing">Оберіть бесіду або створіть нову</string>
|
||||
<string name="trust_denied">У довірі було відмовлено. Зробіть виклик, аби почати процес автентифікації знову.</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">З\'єднано</string>
|
||||
<string name="status_not_connected">Не з\'єднано</string>
|
||||
<string name="status_in_progress">Виконується з\'єднання</string>
|
||||
<string name="status_error">З\'єднання не відбулося</string>
|
||||
<string name="voicemail_unread">непрочитаних повідомлень</string>
|
||||
<!--Side Menu-->
|
||||
<string name="menu_logout">Вийти</string>
|
||||
<string name="menu_assistant">Асистент</string>
|
||||
<string name="menu_settings">Налаштування</string>
|
||||
<string name="menu_recordings">Записи</string>
|
||||
|
@ -265,6 +285,7 @@
|
|||
<string name="call_stats_decoder_name">Декодер</string>
|
||||
<string name="call_stats_display_filter">Відображуваний фільтр:</string>
|
||||
<string name="call">Виклик</string>
|
||||
<string name="call_log_delete_dialog">Ви справді волієте вилучити обрані журнали викликів?</string>
|
||||
<!--Recordings-->
|
||||
<string name="no_recordings">Немає записів</string>
|
||||
<string name="recordings_delete_dialog">Ви бажаєте вилучити обрані записи?</string>
|
||||
|
@ -275,6 +296,8 @@
|
|||
<string name="incall_notif_active">Встановлено авдіоз\'єднання</string>
|
||||
<string name="incall_notif_paused">Виклик на павзі</string>
|
||||
<string name="incall_notif_video">Встановлено відеоз\'єднання</string>
|
||||
<string name="incall_notif_incoming">Вхідний виклик</string>
|
||||
<string name="incall_notif_outgoing">Вихідний виклик</string>
|
||||
<string name="notification_started">почато</string>
|
||||
<string name="unread_messages">%i непрочитаних повідомлень</string>
|
||||
<string name="missed_calls_notif_title">Пропущений виклик</string>
|
||||
|
@ -295,6 +318,7 @@
|
|||
<string name="error_unauthorized">Не авторизований</string>
|
||||
<string name="error_io_error">Помилка мережі</string>
|
||||
<string name="download_image_failed">Завантаження не вдалося. Перевірте мережеве з\'єднання або повторіть спробу пізніше.</string>
|
||||
<string name="remote_provisioning_failure">Не вдалося завантажити або застосувати профіль віддаленої конфігурації...</string>
|
||||
<string name="remote_provisioning_again_title">Віддалене конфігурування</string>
|
||||
<string name="remote_provisioning_again_message">Ви бажаєте змінити URI конфігурування?</string>
|
||||
<!--Account Settings-->
|
||||
|
@ -361,6 +385,8 @@
|
|||
<string name="failed">не вдалося</string>
|
||||
<string name="pref_adaptive_rate_control">Адаптивний контроль швидкости</string>
|
||||
<string name="pref_codec_bitrate_limit">Гранична межа кодеку</string>
|
||||
<string name="pref_mic_gain_db">Підсилення мікрофону (в дБ)</string>
|
||||
<string name="pref_playback_gain_db">Підсилення відтворення (в дБ)</string>
|
||||
<string name="pref_codecs">Кодеки</string>
|
||||
<!--Video settings-->
|
||||
<string name="pref_video_title">Відео</string>
|
||||
|
@ -387,6 +413,7 @@
|
|||
<string name="pref_call_timeout_title">Час очікування виклику (у секундах)</string>
|
||||
<string name="pref_voice_mail">URI голосової пошти</string>
|
||||
<string name="pref_dialer_call">Використовувати Linphone у якости типового застосунку для дзвінків.</string>
|
||||
<string name="pref_accept_early_media">Приймати ранній потік</string>
|
||||
<!--Chat settings-->
|
||||
<string name="pref_chat_title">Чат</string>
|
||||
<string name="pref_image_sharing_server_title">Сервер обміну</string>
|
||||
|
@ -424,15 +451,19 @@
|
|||
<string name="pref_protected_settings_desc">Цей застосунок має бути увімкнений для отримання push-сповіщень</string>
|
||||
<!--Advanced settings-->
|
||||
<string name="pref_advanced_title">Додатково</string>
|
||||
<string name="pref_dark_mode">Темний режим</string>
|
||||
<string name="pref_debug_title">Зневадження</string>
|
||||
<string name="pref_debug">Зневадження</string>
|
||||
<string name="pref_java_debug">Використовувати Java-реєстратор</string>
|
||||
<string name="pref_friendlist_subscribe">Підписка</string>
|
||||
<string name="pref_background_mode">Тловий режим</string>
|
||||
<string name="pref_background_mode_desc">Показувати сповіщення, аби зберегти застосунок робочим</string>
|
||||
<string name="pref_animation_enable_title">Увімкнути анімацію</string>
|
||||
<string name="pref_service_notification">Увімкнути сервісне сповіщення</string>
|
||||
<string name="pref_autostart">Запуск під час завантаження</string>
|
||||
<string name="pref_incoming_call_timeout_title">Відхилення вхідного виклику (у секундах)</string>
|
||||
<string name="pref_device_name">Ім\'я пристрою</string>
|
||||
<string name="pref_display_name_subtitle">Зміни буде застосовано при наступному запуску</string>
|
||||
<string name="pref_remote_provisioning_title">Віддалене конфігурування</string>
|
||||
<string name="pref_android_app_settings_title">Параметри додатку в Android</string>
|
||||
<string name="pref_android_app_notif_settings_title">Параметри сповіщень в Android</string>
|
||||
|
@ -452,6 +483,9 @@
|
|||
<string name="device_power_saver_dialog_button_later">Пізніше</string>
|
||||
<!--Debug popup-->
|
||||
<string name="debug_popup_title">Зневадження</string>
|
||||
<string name="debug_popup_enable_logs">Увімкнути журнали</string>
|
||||
<string name="debug_popup_disable_logs">Вимкнути журнали</string>
|
||||
<string name="debug_popup_send_logs">Відправити журнали</string>
|
||||
<!--Content description-->
|
||||
<string name="content_description_back">Назад</string>
|
||||
<string name="content_description_dialer">Номеронабирач</string>
|
||||
|
|
|
@ -250,6 +250,7 @@
|
|||
<string name="unexpected_event">Unexpected event %i for %s</string>
|
||||
<string name="download_file">Download</string>
|
||||
<string name="toast_choose_chat_room_for_sharing">Select a conversation or create a new one</string>
|
||||
<string name="trust_denied">Trust has been denied. Make a call to start the authentication process again.</string>
|
||||
|
||||
<!-- Status Bar -->
|
||||
<string name="status_connected">Connected</string>
|
||||
|
|
Loading…
Reference in a new issue