Multi-accounts
This commit is contained in:
parent
df13844357
commit
2ade8a9d8a
7 changed files with 331 additions and 64 deletions
|
@ -88,6 +88,7 @@
|
|||
<action android:name="android.intent.action.MAIN" />
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<activity android:name="org.linphone.LinphonePreferencesSIPAccountActivity"></activity>
|
||||
<activity android:name="org.linphone.LinphonePreferencesActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
|
|
@ -222,4 +222,8 @@
|
|||
<string name="media_encryption_none">None</string>
|
||||
<string name="media_encryption_srtp">SRTP</string>
|
||||
<string name="media_encryption_zrtp">ZRTP</string>
|
||||
|
||||
<string name="pref_extra_accounts">pref_nb_accounts_extra</string>
|
||||
<string name="pref_default_account">pref_default_account</string>
|
||||
<string name="pref_sipaccounts">SIP Accounts</string>
|
||||
</resources>
|
||||
|
|
4
res/xml/account_preferences.xml
Normal file
4
res/xml/account_preferences.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
</PreferenceScreen>
|
|
@ -2,8 +2,8 @@
|
|||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
|
||||
<PreferenceCategory android:title="@string/pref_sipaccount">
|
||||
<EditTextPreference android:title="@string/pref_username"
|
||||
<PreferenceCategory android:title="@string/pref_sipaccounts">
|
||||
<!--<EditTextPreference android:title="@string/pref_username"
|
||||
android:key="@string/pref_username_key" android:inputType="text|textEmailAddress"></EditTextPreference>
|
||||
|
||||
<EditTextPreference android:title="@string/pref_passwd"
|
||||
|
@ -17,9 +17,10 @@
|
|||
|
||||
<CheckBoxPreference android:enabled="true"
|
||||
android:selectable="true" android:key="@string/pref_enable_outbound_proxy_key"
|
||||
android:title="@string/pref_enable_outbound_proxy"></CheckBoxPreference>
|
||||
android:title="@string/pref_enable_outbound_proxy"></CheckBoxPreference>-->
|
||||
</PreferenceCategory>
|
||||
|
||||
<Preference android:title="Add Account"></Preference>
|
||||
|
||||
<PreferenceCategory android:key="@string/pref_tunnel_key" android:title="@string/pref_tunnel">
|
||||
<EditTextPreference android:title="@string/pref_tunnel_host"
|
||||
|
@ -48,7 +49,7 @@
|
|||
|
||||
<EditTextPreference android:title="@string/pref_stun_server"
|
||||
android:key="@string/pref_stun_server_key"></EditTextPreference>
|
||||
</PreferenceCategory>
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
|
||||
|
@ -91,45 +92,45 @@
|
|||
android:title="@string/pref_codec_pcma"/>
|
||||
</PreferenceScreen>
|
||||
|
||||
</PreferenceCategory>
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
|
||||
|
||||
<PreferenceCategory android:title="@string/pref_video" android:dependency="@string/pref_video_enable_key" android:shouldDisableView="true">
|
||||
<CheckBoxPreference android:key="@string/pref_video_use_front_camera_key"
|
||||
android:title="@string/pref_video_use_front_camera_title"
|
||||
android:dependency="@string/pref_video_enable_key"></CheckBoxPreference>
|
||||
|
||||
<CheckBoxPreference android:key="@string/pref_video_initiate_call_with_video_key"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/pref_video_initiate_call_with_video_title"
|
||||
android:summary="@string/pref_video_initiate_call_with_video"
|
||||
android:dependency="@string/pref_video_enable_key"></CheckBoxPreference>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_video_automatically_share_my_video_key"
|
||||
android:title="@string/pref_video_automatically_share_my_video_title"
|
||||
android:defaultValue="true" android:summary="@string/pref_video_automatically_share_my_video"
|
||||
android:dependency="@string/pref_video_enable_key"></CheckBoxPreference>
|
||||
|
||||
<PreferenceScreen android:dependency="@string/pref_video_enable_key"
|
||||
android:shouldDisableView="true" android:key="@string/pref_video_codecs_key"
|
||||
android:title="@string/pref_video_codecs_title">
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_vp8_key"
|
||||
android:title="@string/pref_video_codec_vp8_title"
|
||||
android:defaultValue="true"></CheckBoxPreference>
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_h264_key"
|
||||
android:title="@string/pref_video_codec_h264_title"
|
||||
android:defaultValue="false"></CheckBoxPreference>
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_mpeg4_key"
|
||||
android:title="@string/pref_video_codec_mpeg4_title"
|
||||
android:defaultValue="false"></CheckBoxPreference>
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_h263_key"
|
||||
android:title="@string/pref_video_codec_h263_title"
|
||||
android:defaultValue="false" android:layout="@layout/hidden"></CheckBoxPreference>
|
||||
</PreferenceScreen>
|
||||
</PreferenceCategory>
|
||||
<CheckBoxPreference android:key="@string/pref_video_use_front_camera_key"
|
||||
android:title="@string/pref_video_use_front_camera_title"
|
||||
android:dependency="@string/pref_video_enable_key"></CheckBoxPreference>
|
||||
|
||||
<CheckBoxPreference android:key="@string/pref_video_initiate_call_with_video_key"
|
||||
android:defaultValue="true"
|
||||
android:title="@string/pref_video_initiate_call_with_video_title"
|
||||
android:summary="@string/pref_video_initiate_call_with_video"
|
||||
android:dependency="@string/pref_video_enable_key"></CheckBoxPreference>
|
||||
|
||||
<CheckBoxPreference
|
||||
android:key="@string/pref_video_automatically_share_my_video_key"
|
||||
android:title="@string/pref_video_automatically_share_my_video_title"
|
||||
android:defaultValue="true" android:summary="@string/pref_video_automatically_share_my_video"
|
||||
android:dependency="@string/pref_video_enable_key"></CheckBoxPreference>
|
||||
|
||||
<PreferenceScreen android:dependency="@string/pref_video_enable_key"
|
||||
android:shouldDisableView="true" android:key="@string/pref_video_codecs_key"
|
||||
android:title="@string/pref_video_codecs_title">
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_vp8_key"
|
||||
android:title="@string/pref_video_codec_vp8_title"
|
||||
android:defaultValue="true"></CheckBoxPreference>
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_h264_key"
|
||||
android:title="@string/pref_video_codec_h264_title"
|
||||
android:defaultValue="false"></CheckBoxPreference>
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_mpeg4_key"
|
||||
android:title="@string/pref_video_codec_mpeg4_title"
|
||||
android:defaultValue="false"></CheckBoxPreference>
|
||||
<CheckBoxPreference android:key="@string/pref_video_codec_h263_key"
|
||||
android:title="@string/pref_video_codec_h263_title"
|
||||
android:defaultValue="false" android:layout="@layout/hidden"></CheckBoxPreference>
|
||||
</PreferenceScreen>
|
||||
</PreferenceCategory>
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -47,14 +47,21 @@ import java.util.Timer;
|
|||
import java.util.TimerTask;
|
||||
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener;
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneServiceListener;
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneOnAudioChangedListener.AudioState;
|
||||
import org.linphone.LinphoneSimpleListener.LinphoneServiceListener;
|
||||
import org.linphone.core.CallDirection;
|
||||
import org.linphone.core.LinphoneAddress;
|
||||
import org.linphone.core.LinphoneAuthInfo;
|
||||
import org.linphone.core.LinphoneCall;
|
||||
import org.linphone.core.LinphoneCall.State;
|
||||
import org.linphone.core.LinphoneChatRoom;
|
||||
import org.linphone.core.LinphoneCore;
|
||||
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||
import org.linphone.core.LinphoneCore.FirewallPolicy;
|
||||
import org.linphone.core.LinphoneCore.GlobalState;
|
||||
import org.linphone.core.LinphoneCore.MediaEncryption;
|
||||
import org.linphone.core.LinphoneCore.RegistrationState;
|
||||
import org.linphone.core.LinphoneCore.Transports;
|
||||
import org.linphone.core.LinphoneCoreException;
|
||||
import org.linphone.core.LinphoneCoreFactory;
|
||||
import org.linphone.core.LinphoneCoreListener;
|
||||
|
@ -62,18 +69,11 @@ import org.linphone.core.LinphoneFriend;
|
|||
import org.linphone.core.LinphoneProxyConfig;
|
||||
import org.linphone.core.Log;
|
||||
import org.linphone.core.PayloadType;
|
||||
import org.linphone.core.LinphoneCall.State;
|
||||
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||
import org.linphone.core.LinphoneCore.FirewallPolicy;
|
||||
import org.linphone.core.LinphoneCore.GlobalState;
|
||||
import org.linphone.core.LinphoneCore.MediaEncryption;
|
||||
import org.linphone.core.LinphoneCore.RegistrationState;
|
||||
import org.linphone.core.LinphoneCore.Transports;
|
||||
import org.linphone.mediastream.Version;
|
||||
import org.linphone.mediastream.video.capture.AndroidVideoApi5JniWrapper;
|
||||
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera;
|
||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.BroadcastReceiver;
|
||||
|
@ -93,8 +93,8 @@ import android.media.MediaPlayer;
|
|||
import android.net.ConnectivityManager;
|
||||
import android.net.NetworkInfo;
|
||||
import android.os.PowerManager;
|
||||
import android.os.Vibrator;
|
||||
import android.os.PowerManager.WakeLock;
|
||||
import android.os.Vibrator;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.provider.Settings;
|
||||
import android.provider.Settings.SettingNotFoundException;
|
||||
|
@ -184,7 +184,6 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
private BroadcastReceiver mKeepAliveReceiver = new KeepAliveReceiver();
|
||||
|
||||
private native void hackSpeakerState(boolean speakerOn);
|
||||
@SuppressWarnings("unused")
|
||||
private static void sRouteAudioToSpeakerHelperHelper(boolean speakerOn) {
|
||||
getInstance().routeAudioToSpeakerHelperHelper(speakerOn);
|
||||
}
|
||||
|
@ -623,7 +622,6 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
mLc.addAuthInfo(lAuthInfo);
|
||||
}
|
||||
|
||||
|
||||
//proxy
|
||||
mLc.clearProxyConfigs();
|
||||
String lProxy = getPrefString(R.string.pref_proxy_key,null);
|
||||
|
@ -640,7 +638,16 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
if (lDefaultProxyConfig == null) {
|
||||
lDefaultProxyConfig = LinphoneCoreFactory.instance().createProxyConfig(lIdentity, lProxy, null,true);
|
||||
mLc.addProxyConfig(lDefaultProxyConfig);
|
||||
mLc.setDefaultProxyConfig(lDefaultProxyConfig);
|
||||
int defaultAccount = getPrefInt(R.string.pref_default_account, 0);
|
||||
if (defaultAccount == 0 || defaultAccount >= getPrefInt(R.string.pref_extra_accounts, 0)) {
|
||||
//outbound proxy
|
||||
if (getPrefBoolean(R.string.pref_enable_outbound_proxy_key, false)) {
|
||||
lDefaultProxyConfig.setRoute(lProxy);
|
||||
} else {
|
||||
lDefaultProxyConfig.setRoute(null);
|
||||
}
|
||||
mLc.setDefaultProxyConfig(lDefaultProxyConfig);
|
||||
}
|
||||
|
||||
} else {
|
||||
lDefaultProxyConfig.edit();
|
||||
|
@ -649,8 +656,43 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
lDefaultProxyConfig.enableRegister(true);
|
||||
lDefaultProxyConfig.done();
|
||||
}
|
||||
|
||||
// Extra accounts
|
||||
for (int i = 1; i < getPrefExtraAccountsNumber(); i++) {
|
||||
lUserName = getPrefString(getString(R.string.pref_username_key) + i, null);
|
||||
lPasswd = getPrefString(getString(R.string.pref_passwd_key) + i, null);
|
||||
if (lUserName != null && lUserName.length() > 0) {
|
||||
LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(lUserName, lPasswd, null);
|
||||
mLc.addAuthInfo(lAuthInfo);
|
||||
|
||||
lDomain = getPrefString(getString(R.string.pref_domain_key) + i, null);
|
||||
if (lDomain != null && lDomain.length() > 0) {
|
||||
lIdentity = "sip:"+lUserName+"@"+lDomain;
|
||||
lProxy = getPrefString(getString(R.string.pref_proxy_key) + i, null);
|
||||
if (lProxy == null || lProxy.length() == 0) {
|
||||
lProxy = "sip:" + lDomain;
|
||||
}
|
||||
if (!lProxy.startsWith("sip:")) {
|
||||
lProxy = "sip:" + lProxy;
|
||||
}
|
||||
lDefaultProxyConfig = LinphoneCoreFactory.instance().createProxyConfig(lIdentity, lProxy, null, true);
|
||||
mLc.addProxyConfig(lDefaultProxyConfig);
|
||||
|
||||
//outbound proxy
|
||||
if (getPrefBoolean(getString(R.string.pref_enable_outbound_proxy_key) + i, false)) {
|
||||
lDefaultProxyConfig.setRoute(lProxy);
|
||||
} else {
|
||||
lDefaultProxyConfig.setRoute(null);
|
||||
}
|
||||
|
||||
if (i == getPrefInt(R.string.pref_default_account, 0)) {
|
||||
mLc.setDefaultProxyConfig(lDefaultProxyConfig);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lDefaultProxyConfig = mLc.getDefaultProxyConfig();
|
||||
|
||||
if (lDefaultProxyConfig !=null) {
|
||||
//prefix
|
||||
String lPrefix = getPrefString(R.string.pref_prefix_key, null);
|
||||
|
@ -659,14 +701,8 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
}
|
||||
//escape +
|
||||
lDefaultProxyConfig.setDialEscapePlus(getPrefBoolean(R.string.pref_escape_plus_key,false));
|
||||
//outbound proxy
|
||||
if (getPrefBoolean(R.string.pref_enable_outbound_proxy_key, false)) {
|
||||
lDefaultProxyConfig.setRoute(lProxy);
|
||||
} else {
|
||||
lDefaultProxyConfig.setRoute(null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//init network state
|
||||
NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo();
|
||||
mLc.setNetworkReachable(networkInfo !=null? networkInfo.getState() == NetworkInfo.State.CONNECTED:false);
|
||||
|
@ -766,13 +802,24 @@ public final class LinphoneManager implements LinphoneCoreListener {
|
|||
private boolean getPrefBoolean(int key, boolean value) {
|
||||
return mPref.getBoolean(mR.getString(key), value);
|
||||
}
|
||||
private boolean getPrefBoolean(String key, boolean value) {
|
||||
return mPref.getBoolean(key, value);
|
||||
}
|
||||
private String getPrefString(int key, String value) {
|
||||
return mPref.getString(mR.getString(key), value);
|
||||
}
|
||||
private int getPrefInt(int key, int value) {
|
||||
return mPref.getInt(mR.getString(key), value);
|
||||
}
|
||||
private String getPrefString(int key, int value) {
|
||||
return mPref.getString(mR.getString(key), mR.getString(value));
|
||||
}
|
||||
|
||||
private String getPrefString(String key, String value) {
|
||||
return mPref.getString(key, value);
|
||||
}
|
||||
private int getPrefExtraAccountsNumber() {
|
||||
return mPref.getInt(getString(R.string.pref_extra_accounts), 0);
|
||||
}
|
||||
|
||||
|
||||
/* Simple implementation as Android way seems very complicate:
|
||||
|
|
|
@ -37,24 +37,26 @@ import java.util.List;
|
|||
import org.linphone.LinphoneManager.EcCalibrationListener;
|
||||
import org.linphone.LinphoneManager.LinphoneConfigException;
|
||||
import org.linphone.core.LinphoneCore;
|
||||
import org.linphone.core.LinphoneCoreException;
|
||||
import org.linphone.core.Log;
|
||||
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||
import org.linphone.core.LinphoneCore.MediaEncryption;
|
||||
import org.linphone.core.LinphoneCoreException;
|
||||
import org.linphone.core.Log;
|
||||
import org.linphone.mediastream.Version;
|
||||
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.Preference.OnPreferenceChangeListener;
|
||||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceScreen;
|
||||
|
||||
public class LinphonePreferencesActivity extends PreferenceActivity implements EcCalibrationListener {
|
||||
private Handler mHandler = new Handler();
|
||||
|
@ -62,6 +64,8 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
|
|||
private CheckBoxPreference elPref;
|
||||
private CheckBoxPreference ecPref;
|
||||
private ListPreference mencPref;
|
||||
private int nbAccounts = 1;
|
||||
private static final int ADD_SIP_ACCOUNT = 0x666;
|
||||
|
||||
private SharedPreferences prefs() {
|
||||
return getPreferenceManager().getSharedPreferences();
|
||||
|
@ -84,6 +88,78 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
|
|||
findPreference(id).setEnabled(LinphoneManager.getInstance().detectVideoCodec(mime));
|
||||
}
|
||||
|
||||
private void createDynamicAccountsPreferences() {
|
||||
PreferenceScreen root = getPreferenceScreen();
|
||||
|
||||
// Get the good preference screen
|
||||
final PreferenceCategory accounts = (PreferenceCategory) root.getPreference(0);
|
||||
accounts.removeAll();
|
||||
Preference addAccount = (Preference) root.getPreference(1);
|
||||
addAccount.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
addExtraAccountPreferencesButton(accounts, nbAccounts, true);
|
||||
Intent i = new Intent();
|
||||
i.putExtra("Account",nbAccounts);
|
||||
nbAccounts++;
|
||||
i.setClass(LinphonePreferencesActivity.this, LinphonePreferencesSIPAccountActivity.class);
|
||||
startActivityForResult(i, ADD_SIP_ACCOUNT);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
// Get already configured extra accounts
|
||||
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
||||
nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 1);
|
||||
for (int i = 0; i < nbAccounts; i++) {
|
||||
// For each, add menus to configure it
|
||||
addExtraAccountPreferencesButton(accounts, i, false);
|
||||
}
|
||||
}
|
||||
|
||||
public int getNbAccountsExtra() {
|
||||
return nbAccounts;
|
||||
}
|
||||
|
||||
private void addExtraAccountPreferencesButton(PreferenceCategory parent, final int n, boolean isNewAccount) {
|
||||
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
||||
if (isNewAccount) {
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putInt(getString(R.string.pref_extra_accounts), n+1);
|
||||
editor.commit();
|
||||
}
|
||||
|
||||
Preference me = new Preference(LinphonePreferencesActivity.this);
|
||||
String keyUsername = getString(R.string.pref_username_key);
|
||||
String keyDomain = getString(R.string.pref_domain_key);
|
||||
if (n > 0) {
|
||||
keyUsername += n + "";
|
||||
keyDomain += n + "";
|
||||
}
|
||||
if (prefs.getString(keyUsername, null) == null) {
|
||||
me.setTitle(getString(R.string.pref_sipaccount));
|
||||
} else {
|
||||
me.setTitle(prefs.getString(keyUsername, "") + "@" + prefs.getString(keyDomain, ""));
|
||||
}
|
||||
|
||||
me.setOnPreferenceClickListener(new OnPreferenceClickListener()
|
||||
{
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
Intent i = new Intent();
|
||||
i.putExtra("Account", n);
|
||||
i.setClass(LinphonePreferencesActivity.this, LinphonePreferencesSIPAccountActivity.class);
|
||||
startActivityForResult(i, ADD_SIP_ACCOUNT);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
parent.addPreference(me);
|
||||
}
|
||||
|
||||
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
||||
super.onActivityResult(requestCode, resultCode, data);
|
||||
if (requestCode == ADD_SIP_ACCOUNT) {
|
||||
createDynamicAccountsPreferences();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
|
@ -91,6 +167,7 @@ public class LinphonePreferencesActivity extends PreferenceActivity implements E
|
|||
// Load the preferences from an XML resource
|
||||
addPreferencesFromResource(R.xml.preferences);
|
||||
|
||||
createDynamicAccountsPreferences();
|
||||
addTransportChecboxesListener();
|
||||
|
||||
ecCalibratePref = (CheckBoxPreference) findPreference(pref_echo_canceller_calibration_key);
|
||||
|
|
133
src/org/linphone/LinphonePreferencesSIPAccountActivity.java
Normal file
133
src/org/linphone/LinphonePreferencesSIPAccountActivity.java
Normal file
|
@ -0,0 +1,133 @@
|
|||
package org.linphone;
|
||||
|
||||
import org.linphone.core.Log;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.text.InputType;
|
||||
|
||||
public class LinphonePreferencesSIPAccountActivity extends PreferenceActivity {
|
||||
|
||||
protected void onCreate(Bundle savedInstanceState)
|
||||
{
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.xml.account_preferences);
|
||||
|
||||
PreferenceScreen screen = getPreferenceScreen();
|
||||
int n = getIntent().getExtras().getInt("Account", 1);
|
||||
addExtraAccountPreferencesFields(screen, n);
|
||||
}
|
||||
|
||||
private void addExtraAccountPreferencesFields(PreferenceScreen parent, final int n) {
|
||||
final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
||||
|
||||
PreferenceCategory category = new PreferenceCategory(this);
|
||||
category.setTitle(getString(R.string.pref_sipaccount));
|
||||
|
||||
EditTextPreference username = new EditTextPreference(this);
|
||||
username.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||
username.setTitle(getString(R.string.pref_username));
|
||||
username.setPersistent(true);
|
||||
username.setKey(getString(R.string.pref_username_key) + getAccountNumber(n));
|
||||
|
||||
EditTextPreference password = new EditTextPreference(this);
|
||||
password.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
||||
password.setTitle(getString(R.string.pref_passwd));
|
||||
password.setPersistent(true);
|
||||
password.setKey(getString(R.string.pref_passwd_key) + getAccountNumber(n));
|
||||
|
||||
EditTextPreference domain = new EditTextPreference(this);
|
||||
domain.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||
domain.setTitle(getString(R.string.pref_domain));
|
||||
domain.setPersistent(true);
|
||||
domain.setKey(getString(R.string.pref_domain_key) + getAccountNumber(n));
|
||||
|
||||
EditTextPreference proxy = new EditTextPreference(this);
|
||||
proxy.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||
proxy.setTitle(getString(R.string.pref_proxy));
|
||||
proxy.setPersistent(true);
|
||||
proxy.setKey(getString(R.string.pref_proxy_key) + getAccountNumber(n));
|
||||
|
||||
CheckBoxPreference outboundProxy = new CheckBoxPreference(this);
|
||||
outboundProxy.setTitle(getString(R.string.pref_enable_outbound_proxy));
|
||||
outboundProxy.setPersistent(true);
|
||||
outboundProxy.setKey(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(n));
|
||||
|
||||
final Preference delete = new Preference(this);
|
||||
delete.setTitle("Delete this account");
|
||||
delete.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
int nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 1);
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
|
||||
for (int i = n; i < nbAccounts - 1; i++) {
|
||||
editor.putString(getString(R.string.pref_username_key) + i, prefs.getString(getString(R.string.pref_username_key) + (i+1), null));
|
||||
editor.putString(getString(R.string.pref_passwd_key) + i, prefs.getString(getString(R.string.pref_passwd_key) + (i+1), null));
|
||||
editor.putString(getString(R.string.pref_domain_key) + i, prefs.getString(getString(R.string.pref_domain_key) + (i+1), null));
|
||||
editor.putString(getString(R.string.pref_proxy_key) + i, prefs.getString(getString(R.string.pref_proxy_key) + (i+1), null));
|
||||
editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + i, prefs.getBoolean(getString(R.string.pref_enable_outbound_proxy_key) + (i+1), false));
|
||||
}
|
||||
|
||||
int lastAccount = nbAccounts - 1;
|
||||
editor.putString(getString(R.string.pref_username_key) + lastAccount, null);
|
||||
editor.putString(getString(R.string.pref_passwd_key) + lastAccount, null);
|
||||
editor.putString(getString(R.string.pref_domain_key) + lastAccount, null);
|
||||
editor.putString(getString(R.string.pref_proxy_key) + lastAccount, null);
|
||||
editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + lastAccount, false);
|
||||
|
||||
int defaultAccount = prefs.getInt(getString(R.string.pref_default_account), 0);
|
||||
if (defaultAccount > n) {
|
||||
Log.e("Default Account : ", defaultAccount + " => " + (defaultAccount - 1));
|
||||
editor.putInt(getString(R.string.pref_default_account), defaultAccount - 1);
|
||||
}
|
||||
|
||||
editor.putInt(getString(R.string.pref_extra_accounts), nbAccounts - 1);
|
||||
editor.commit();
|
||||
LinphonePreferencesSIPAccountActivity.this.finish();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
CheckBoxPreference mainAccount = new CheckBoxPreference(this);
|
||||
mainAccount.setTitle("Use as default");
|
||||
mainAccount.setOnPreferenceClickListener(new OnPreferenceClickListener()
|
||||
{
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
||||
SharedPreferences.Editor editor = prefs.edit();
|
||||
editor.putInt(getString(R.string.pref_default_account), n);
|
||||
editor.commit();
|
||||
delete.setEnabled(false);
|
||||
preference.setEnabled(false);
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
mainAccount.setChecked(prefs.getInt(getString(R.string.pref_default_account), 0) == n);
|
||||
mainAccount.setEnabled(!mainAccount.isChecked());
|
||||
delete.setEnabled(prefs.getInt(getString(R.string.pref_default_account), 0) != n);
|
||||
|
||||
parent.addPreference(category);
|
||||
category.addPreference(username);
|
||||
category.addPreference(password);
|
||||
category.addPreference(domain);
|
||||
category.addPreference(proxy);
|
||||
category.addPreference(outboundProxy);
|
||||
category.addPreference(mainAccount);
|
||||
category.addPreference(delete);
|
||||
}
|
||||
|
||||
private String getAccountNumber(int n) {
|
||||
if (n > 0)
|
||||
return n + "";
|
||||
else
|
||||
return "";
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue