Fixed issues with link phone number to account dialog

This commit is contained in:
Sylvain Berfini 2021-03-22 17:30:13 +01:00
parent b63b23a8b3
commit 7c244654b3
3 changed files with 143 additions and 149 deletions

View file

@ -20,9 +20,7 @@
package org.linphone; package org.linphone;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.hardware.Sensor; import android.hardware.Sensor;
import android.hardware.SensorEvent; import android.hardware.SensorEvent;
import android.hardware.SensorEventListener; import android.hardware.SensorEventListener;
@ -33,20 +31,13 @@ import android.os.PowerManager;
import android.os.PowerManager.WakeLock; import android.os.PowerManager.WakeLock;
import android.telephony.PhoneStateListener; import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import java.io.File; import java.io.File;
import java.sql.Timestamp;
import java.util.Date;
import java.util.Timer; import java.util.Timer;
import java.util.TimerTask; import java.util.TimerTask;
import org.linphone.assistant.PhoneAccountLinkingAssistantActivity;
import org.linphone.call.AndroidAudioManager; import org.linphone.call.AndroidAudioManager;
import org.linphone.call.CallManager; import org.linphone.call.CallManager;
import org.linphone.contacts.ContactsManager; import org.linphone.contacts.ContactsManager;
import org.linphone.core.AccountCreator; import org.linphone.core.AccountCreator;
import org.linphone.core.AccountCreatorListenerStub;
import org.linphone.core.Call; import org.linphone.core.Call;
import org.linphone.core.Call.State; import org.linphone.core.Call.State;
import org.linphone.core.Core; import org.linphone.core.Core;
@ -92,7 +83,6 @@ public class LinphoneManager implements SensorEventListener {
private Core mCore; private Core mCore;
private CoreListenerStub mCoreListener; private CoreListenerStub mCoreListener;
private AccountCreator mAccountCreator; private AccountCreator mAccountCreator;
private AccountCreatorListenerStub mAccountCreatorListener;
private boolean mExited; private boolean mExited;
private boolean mCallGsmON; private boolean mCallGsmON;
@ -223,39 +213,6 @@ public class LinphoneManager implements SensorEventListener {
list.removeListener(ContactsManager.getInstance()); list.removeListener(ContactsManager.getInstance());
} }
}; };
mAccountCreatorListener =
new AccountCreatorListenerStub() {
@Override
public void onIsAccountExist(
AccountCreator accountCreator,
AccountCreator.Status status,
String resp) {
if (status.equals(AccountCreator.Status.AccountExist)) {
accountCreator.isAccountLinked();
}
}
@Override
public void onLinkAccount(
AccountCreator accountCreator,
AccountCreator.Status status,
String resp) {
if (status.equals(AccountCreator.Status.AccountNotLinked)) {
askLinkWithPhoneNumber();
}
}
@Override
public void onIsAccountLinked(
AccountCreator accountCreator,
AccountCreator.Status status,
String resp) {
if (status.equals(AccountCreator.Status.AccountNotLinked)) {
askLinkWithPhoneNumber();
}
}
};
} }
public static synchronized LinphoneManager getInstance() { public static synchronized LinphoneManager getInstance() {
@ -452,7 +409,6 @@ public class LinphoneManager implements SensorEventListener {
resetCameraFromPreferences(); resetCameraFromPreferences();
mAccountCreator = mCore.createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); mAccountCreator = mCore.createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl());
mAccountCreator.setListener(mAccountCreatorListener);
mCallGsmON = false; mCallGsmON = false;
Log.i("[Manager] Core configured"); Log.i("[Manager] Core configured");
@ -489,99 +445,10 @@ public class LinphoneManager implements SensorEventListener {
Log.w("[Manager] Account creator shouldn't be null !"); Log.w("[Manager] Account creator shouldn't be null !");
mAccountCreator = mAccountCreator =
mCore.createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); mCore.createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl());
mAccountCreator.setListener(mAccountCreatorListener);
} }
return mAccountCreator; return mAccountCreator;
} }
public void isAccountWithAlias() {
if (mCore.getDefaultProxyConfig() != null) {
long now = new Timestamp(new Date().getTime()).getTime();
AccountCreator accountCreator = getAccountCreator();
if (LinphonePreferences.instance().getLinkPopupTime() == null
|| Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) < now) {
accountCreator.reset();
accountCreator.setUsername(
LinphonePreferences.instance()
.getAccountUsername(
LinphonePreferences.instance().getDefaultAccountIndex()));
accountCreator.isAccountExist();
}
} else {
LinphonePreferences.instance().setLinkPopupTime(null);
}
}
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;
ProxyConfig proxyConfig = mCore.getDefaultProxyConfig();
if (proxyConfig == null) return;
if (!proxyConfig.getDomain().equals(getString(R.string.default_domain))) return;
long future =
new Timestamp(
mContext.getResources()
.getInteger(
R.integer.phone_number_linking_popup_time_interval))
.getTime();
long newDate = now + future;
LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate));
final Dialog dialog =
LinphoneUtils.getDialog(
mContext,
String.format(
getString(R.string.link_account_popup),
proxyConfig.getIdentityAddress().asStringUriOnly()));
Button delete = dialog.findViewById(R.id.dialog_delete_button);
delete.setVisibility(View.GONE);
Button ok = dialog.findViewById(R.id.dialog_ok_button);
ok.setText(getString(R.string.link));
ok.setVisibility(View.VISIBLE);
Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
cancel.setText(getString(R.string.maybe_later));
dialog.findViewById(R.id.dialog_do_not_ask_again_layout).setVisibility(View.VISIBLE);
final CheckBox doNotAskAgain = dialog.findViewById(R.id.doNotAskAgain);
dialog.findViewById(R.id.doNotAskAgainLabel)
.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
doNotAskAgain.setChecked(!doNotAskAgain.isChecked());
}
});
ok.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent assistant = new Intent();
assistant.setClass(mContext, PhoneAccountLinkingAssistantActivity.class);
mContext.startActivity(assistant);
dialog.dismiss();
}
});
cancel.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
if (doNotAskAgain.isChecked()) {
LinphonePreferences.instance().enableLinkPopup(false);
}
dialog.dismiss();
}
});
dialog.show();
}
/* Presence stuff */ /* Presence stuff */
private boolean isPresenceModelActivitySet() { private boolean isPresenceModelActivitySet() {

View file

@ -43,10 +43,13 @@ import android.widget.TextView;
import android.widget.Toast; import android.widget.Toast;
import androidx.core.app.ActivityCompat; import androidx.core.app.ActivityCompat;
import androidx.drawerlayout.widget.DrawerLayout; import androidx.drawerlayout.widget.DrawerLayout;
import java.sql.Timestamp;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import org.linphone.LinphoneContext; import org.linphone.LinphoneContext;
import org.linphone.LinphoneManager; import org.linphone.LinphoneManager;
import org.linphone.R; import org.linphone.R;
import org.linphone.assistant.PhoneAccountLinkingAssistantActivity;
import org.linphone.call.CallActivity; import org.linphone.call.CallActivity;
import org.linphone.call.CallIncomingActivity; import org.linphone.call.CallIncomingActivity;
import org.linphone.call.CallOutgoingActivity; import org.linphone.call.CallOutgoingActivity;
@ -55,8 +58,9 @@ import org.linphone.compatibility.Compatibility;
import org.linphone.contacts.ContactsActivity; import org.linphone.contacts.ContactsActivity;
import org.linphone.contacts.ContactsManager; import org.linphone.contacts.ContactsManager;
import org.linphone.contacts.LinphoneContact; import org.linphone.contacts.LinphoneContact;
import org.linphone.core.AccountCreator;
import org.linphone.core.AccountCreatorListenerStub;
import org.linphone.core.Address; import org.linphone.core.Address;
import org.linphone.core.AuthInfo;
import org.linphone.core.Call; import org.linphone.core.Call;
import org.linphone.core.ChatMessage; import org.linphone.core.ChatMessage;
import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoom;
@ -99,6 +103,7 @@ public abstract class MainActivity extends LinphoneGenericActivity
protected String[] mPermissionsToHave; protected String[] mPermissionsToHave;
private CoreListenerStub mListener; private CoreListenerStub mListener;
private AccountCreatorListenerStub mAccountCreatorListener;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -228,15 +233,10 @@ public abstract class MainActivity extends LinphoneGenericActivity
MainActivity.this); MainActivity.this);
if (getResources().getBoolean(R.bool.use_phone_number_validation)) { if (getResources().getBoolean(R.bool.use_phone_number_validation)) {
AuthInfo authInfo = if (proxyConfig
core.findAuthInfo( .getDomain()
proxyConfig.getRealm(), .equals(getString(R.string.default_domain))) {
proxyConfig.getIdentityAddress().getUsername(), isAccountWithAlias();
proxyConfig.getDomain());
if (authInfo != null
&& authInfo.getDomain()
.equals(getString(R.string.default_domain))) {
LinphoneManager.getInstance().isAccountWithAlias();
} }
} }
@ -269,6 +269,39 @@ public abstract class MainActivity extends LinphoneGenericActivity
} }
} }
}; };
mAccountCreatorListener =
new AccountCreatorListenerStub() {
@Override
public void onIsAccountExist(
AccountCreator accountCreator,
AccountCreator.Status status,
String resp) {
if (status.equals(AccountCreator.Status.AccountExist)) {
accountCreator.isAccountLinked();
}
}
@Override
public void onLinkAccount(
AccountCreator accountCreator,
AccountCreator.Status status,
String resp) {
if (status.equals(AccountCreator.Status.AccountNotLinked)) {
askLinkWithPhoneNumber();
}
}
@Override
public void onIsAccountLinked(
AccountCreator accountCreator,
AccountCreator.Status status,
String resp) {
if (status.equals(AccountCreator.Status.AccountNotLinked)) {
askLinkWithPhoneNumber();
}
}
};
} }
@Override @Override
@ -814,6 +847,101 @@ public abstract class MainActivity extends LinphoneGenericActivity
dialog.show(); dialog.show();
} }
public void isAccountWithAlias() {
if (LinphoneManager.getCore().getDefaultProxyConfig() != null) {
long now = new Timestamp(new Date().getTime()).getTime();
AccountCreator accountCreator = LinphoneManager.getInstance().getAccountCreator();
accountCreator.setListener(mAccountCreatorListener);
if (LinphonePreferences.instance().getLinkPopupTime() == null
|| Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) < now) {
accountCreator.reset();
accountCreator.setUsername(
LinphonePreferences.instance()
.getAccountUsername(
LinphonePreferences.instance().getDefaultAccountIndex()));
accountCreator.isAccountExist();
}
} else {
LinphonePreferences.instance().setLinkPopupTime(null);
}
}
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;
ProxyConfig proxyConfig = LinphoneManager.getCore().getDefaultProxyConfig();
if (proxyConfig == null) return;
if (!proxyConfig.getDomain().equals(getString(R.string.default_domain))) return;
final Dialog dialog =
LinphoneUtils.getDialog(
this,
String.format(
getString(R.string.link_account_popup),
proxyConfig.getIdentityAddress().asStringUriOnly()));
Button delete = dialog.findViewById(R.id.dialog_delete_button);
delete.setVisibility(View.GONE);
Button ok = dialog.findViewById(R.id.dialog_ok_button);
ok.setText(getString(R.string.link));
ok.setVisibility(View.VISIBLE);
Button cancel = dialog.findViewById(R.id.dialog_cancel_button);
cancel.setText(getString(R.string.maybe_later));
dialog.findViewById(R.id.dialog_do_not_ask_again_layout).setVisibility(View.VISIBLE);
final CheckBox doNotAskAgain = dialog.findViewById(R.id.doNotAskAgain);
dialog.findViewById(R.id.doNotAskAgainLabel)
.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View v) {
doNotAskAgain.setChecked(!doNotAskAgain.isChecked());
}
});
ok.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent assistant = new Intent();
assistant.setClass(
MainActivity.this, PhoneAccountLinkingAssistantActivity.class);
startActivity(assistant);
updatePopupTimestamp();
dialog.dismiss();
}
});
cancel.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
if (doNotAskAgain.isChecked()) {
LinphonePreferences.instance().enableLinkPopup(false);
}
updatePopupTimestamp();
dialog.dismiss();
}
});
dialog.show();
}
private void updatePopupTimestamp() {
long future =
new Timestamp(
getResources()
.getInteger(
R.integer.phone_number_linking_popup_time_interval))
.getTime();
long now = new Timestamp(new Date().getTime()).getTime();
long newDate = now + future;
LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate));
}
// Logs // Logs
private void shareUploadedLogsUrl(String info) { private void shareUploadedLogsUrl(String info) {

View file

@ -52,8 +52,11 @@ public class PhoneAccountLinkingAssistantActivity extends AssistantActivity {
setContentView(R.layout.assistant_phone_account_linking); setContentView(R.layout.assistant_phone_account_linking);
if (getIntent() != null && getIntent().hasExtra("AccountNumber")) { if (getIntent() != null) {
int proxyConfigIndex = getIntent().getExtras().getInt("AccountNumber"); int proxyConfigIndex = 0;
if (getIntent().hasExtra("AccountNumber"))
proxyConfigIndex = getIntent().getExtras().getInt("AccountNumber");
Core core = LinphoneManager.getCore(); Core core = LinphoneManager.getCore();
if (core == null) { if (core == null) {
Log.e("[Account Linking Assistant] Core not available"); Log.e("[Account Linking Assistant] Core not available");
@ -96,10 +99,6 @@ public class PhoneAccountLinkingAssistantActivity extends AssistantActivity {
unexpectedError(); unexpectedError();
return; return;
} }
} else {
Log.e("[Account Linking Assistant] Proxy config index not found");
unexpectedError();
return;
} }
mCountryPicker = findViewById(R.id.select_country); mCountryPicker = findViewById(R.id.select_country);