Merge branch 'dev_settings'
This commit is contained in:
commit
5a392adaf4
52 changed files with 2234 additions and 1830 deletions
|
@ -68,7 +68,7 @@
|
||||||
|
|
||||||
<activity android:name="org.linphone.LinphoneActivity"
|
<activity android:name="org.linphone.LinphoneActivity"
|
||||||
android:theme="@style/NoTitle"
|
android:theme="@style/NoTitle"
|
||||||
android:screenOrientation="nosensor"
|
android:screenOrientation="behind"
|
||||||
android:launchMode="singleTask">
|
android:launchMode="singleTask">
|
||||||
<intent-filter>
|
<intent-filter>
|
||||||
<action android:name="android.intent.action.MAIN" />
|
<action android:name="android.intent.action.MAIN" />
|
||||||
|
|
2
Makefile
2
Makefile
|
@ -42,7 +42,7 @@ BUILD_G729=0
|
||||||
BUILD_TUNNEL=0
|
BUILD_TUNNEL=0
|
||||||
BUILD_WEBRTC_AECM=1
|
BUILD_WEBRTC_AECM=1
|
||||||
BUILD_OPUS=1
|
BUILD_OPUS=1
|
||||||
BUILD_FOR_X86=1
|
BUILD_FOR_X86=0
|
||||||
USE_JAVAH=1
|
USE_JAVAH=1
|
||||||
BUILD_TLS=1
|
BUILD_TLS=1
|
||||||
BUILD_SQLITE=1
|
BUILD_SQLITE=1
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingTop="50sp"
|
android:paddingTop="50sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:id="@+id/AboutText"/>
|
android:id="@+id/AboutText"/>
|
||||||
|
|
||||||
<Button android:id="@+id/exit"
|
<Button android:id="@+id/exit"
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -32,14 +32,14 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/contactAddress"
|
android:id="@+id/contactAddress"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -58,7 +58,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:textSize="13sp"
|
android:textSize="13sp"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/date"
|
android:id="@+id/date"
|
||||||
|
@ -67,7 +67,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:textSize="13sp"
|
android:textSize="13sp"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/time"
|
android:id="@+id/time"
|
||||||
|
@ -79,7 +79,7 @@
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:textSize="13sp"
|
android:textSize="13sp"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
|
@ -62,7 +62,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,7 @@
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:paddingTop="50sp"
|
android:paddingTop="50sp"
|
||||||
android:textStyle="bold"
|
android:textStyle="bold"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:id="@+id/AboutText"/>
|
android:id="@+id/AboutText"/>
|
||||||
|
|
||||||
<Button android:id="@+id/exit"
|
<Button android:id="@+id/exit"
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -63,7 +63,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:layout_marginLeft="10dp" />
|
android:layout_marginLeft="10dp" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
|
@ -73,7 +73,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:layout_marginLeft="5dp" />
|
android:layout_marginLeft="5dp" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
android:layout_toRightOf="@id/icon"
|
android:layout_toRightOf="@id/icon"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:layout_marginLeft="10dp" />
|
android:layout_marginLeft="10dp" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
android:scrollHorizontally="true"
|
android:scrollHorizontally="true"
|
||||||
android:fadingEdge="horizontal"
|
android:fadingEdge="horizontal"
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:textAppearance="?android:attr/textAppearanceMedium"
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
android:gravity="left" />
|
android:gravity="left" />
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/contact_last_name"
|
android:hint="@string/contact_last_name"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:background="@drawable/chat_fast_address_background"
|
android:background="@drawable/chat_fast_address_background"
|
||||||
android:gravity="left"
|
android:gravity="left"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
|
@ -89,7 +89,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:hint="@string/contact_first_name"
|
android:hint="@string/contact_first_name"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:background="@drawable/chat_fast_address_background"
|
android:background="@drawable/chat_fast_address_background"
|
||||||
android:gravity="left"
|
android:gravity="left"
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_weight="0.3"
|
android:layout_weight="0.3"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:layout_marginLeft="10dp" />
|
android:layout_marginLeft="10dp" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|
|
@ -44,7 +44,7 @@
|
||||||
android:singleLine="true"
|
android:singleLine="true"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:layout_marginLeft="10dp" />
|
android:layout_marginLeft="10dp" />
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
|
|
|
@ -32,14 +32,14 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/contactAddress"
|
android:id="@+id/contactAddress"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceSmall"
|
android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
@ -57,7 +57,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/date"
|
android:id="@+id/date"
|
||||||
|
@ -65,7 +65,7 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_alignParentRight="true"
|
android:layout_alignParentRight="true"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/time"
|
android:id="@+id/time"
|
||||||
|
@ -76,7 +76,7 @@
|
||||||
android:layout_toRightOf="@id/callDirection"
|
android:layout_toRightOf="@id/callDirection"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:textColor="@android:color/black" />
|
android:textColor="@color/text_contrast" />
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textAppearance="?android:attr/textAppearanceLarge"
|
android:textAppearance="?android:attr/textAppearanceLarge"
|
||||||
android:textColor="@android:color/black"
|
android:textColor="@color/text_contrast"
|
||||||
android:layout_marginLeft="30dp"
|
android:layout_marginLeft="30dp"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"
|
||||||
android:layout_toLeftOf="@id/delete" />
|
android:layout_toLeftOf="@id/delete" />
|
||||||
|
|
16
res/raw-sw600dp/linphonerc_default
Normal file
16
res/raw-sw600dp/linphonerc_default
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[net]
|
||||||
|
download_bw=512
|
||||||
|
upload_bw=512
|
||||||
|
firewall_policy=0
|
||||||
|
|
||||||
|
[sip]
|
||||||
|
contact=sip:unknown@unknown-host
|
||||||
|
use_info=0
|
||||||
|
use_ipv6=0
|
||||||
|
keepalive_period=30000
|
||||||
|
|
||||||
|
[video]
|
||||||
|
size=qvga
|
||||||
|
|
||||||
|
[app]
|
||||||
|
sharing_server=https://www.linphone.org:444/upload.php
|
|
@ -1,21 +1,11 @@
|
||||||
[net]
|
[net]
|
||||||
download_bw=512
|
|
||||||
upload_bw=512
|
|
||||||
firewall_policy=0
|
|
||||||
mtu=1300
|
mtu=1300
|
||||||
|
|
||||||
[sip]
|
[sip]
|
||||||
sip_port=5060
|
|
||||||
sip_random_port=1
|
|
||||||
guess_hostname=1
|
guess_hostname=1
|
||||||
contact=sip:unknown@unknown-host
|
|
||||||
inc_timeout=15
|
inc_timeout=15
|
||||||
use_info=0
|
|
||||||
use_ipv6=0
|
|
||||||
register_only_when_network_is_up=1
|
register_only_when_network_is_up=1
|
||||||
default_proxy=0
|
|
||||||
auto_net_state_mon=0
|
auto_net_state_mon=0
|
||||||
keepalive_period=30000
|
|
||||||
auto_answer_replacing_calls=1
|
auto_answer_replacing_calls=1
|
||||||
media_encryption_mandatory=0
|
media_encryption_mandatory=0
|
||||||
|
|
||||||
|
@ -34,8 +24,5 @@ remote_ring=/data/data/org.linphone/files/ringback.wav
|
||||||
local_ring=/data/data/org.linphone/files/oldphone_mono.wav
|
local_ring=/data/data/org.linphone/files/oldphone_mono.wav
|
||||||
dtmf_player_amp=0.1
|
dtmf_player_amp=0.1
|
||||||
|
|
||||||
[video]
|
|
||||||
size=vga
|
|
||||||
|
|
||||||
[misc]
|
[misc]
|
||||||
max_calls=10
|
max_calls=10
|
15
res/raw/linphonerc_default
Normal file
15
res/raw/linphonerc_default
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
[net]
|
||||||
|
download_bw=380
|
||||||
|
upload_bw=380
|
||||||
|
|
||||||
|
[sip]
|
||||||
|
contact=sip:unknown@unknown-host
|
||||||
|
use_info=0
|
||||||
|
use_ipv6=0
|
||||||
|
keepalive_period=30000
|
||||||
|
|
||||||
|
[video]
|
||||||
|
size=qvga
|
||||||
|
|
||||||
|
[app]
|
||||||
|
sharing_server=https://www.linphone.org:444/upload.php
|
|
@ -1,20 +1,11 @@
|
||||||
[net]
|
[net]
|
||||||
download_bw=380
|
|
||||||
upload_bw=380
|
|
||||||
mtu=1300
|
mtu=1300
|
||||||
|
|
||||||
[sip]
|
[sip]
|
||||||
sip_port=5060
|
|
||||||
sip_random_port=1
|
|
||||||
guess_hostname=1
|
guess_hostname=1
|
||||||
contact=sip:unknown@unknown-host
|
|
||||||
inc_timeout=15
|
inc_timeout=15
|
||||||
use_info=0
|
|
||||||
use_ipv6=0
|
|
||||||
register_only_when_network_is_up=1
|
register_only_when_network_is_up=1
|
||||||
default_proxy=0
|
|
||||||
auto_net_state_mon=0
|
auto_net_state_mon=0
|
||||||
keepalive_period=30000
|
|
||||||
auto_answer_replacing_calls=1
|
auto_answer_replacing_calls=1
|
||||||
media_encryption_mandatory=0
|
media_encryption_mandatory=0
|
||||||
ping_with_options=0
|
ping_with_options=0
|
||||||
|
@ -38,8 +29,5 @@ remote_ring=/data/data/org.linphone/files/ringback.wav
|
||||||
local_ring=/data/data/org.linphone/files/oldphone_mono.wav
|
local_ring=/data/data/org.linphone/files/oldphone_mono.wav
|
||||||
dtmf_player_amp=0.1
|
dtmf_player_amp=0.1
|
||||||
|
|
||||||
[video]
|
|
||||||
size=qvga
|
|
||||||
|
|
||||||
[misc]
|
[misc]
|
||||||
max_calls=10
|
max_calls=10
|
|
@ -101,7 +101,6 @@
|
||||||
<string name="pref_preferred_video_size_hd">HD</string>
|
<string name="pref_preferred_video_size_hd">HD</string>
|
||||||
<string name="pref_preferred_video_size_vga">VGA (640x480)</string>
|
<string name="pref_preferred_video_size_vga">VGA (640x480)</string>
|
||||||
<string name="pref_preferred_video_size_qvga">QVGA (320x240)</string>
|
<string name="pref_preferred_video_size_qvga">QVGA (320x240)</string>
|
||||||
|
|
||||||
<string name="pref_video_settings_title">Paramètres vidéo</string>
|
<string name="pref_video_settings_title">Paramètres vidéo</string>
|
||||||
<string name="pref_video_automatically_share_my_video_title">Partager ma vidéo</string>
|
<string name="pref_video_automatically_share_my_video_title">Partager ma vidéo</string>
|
||||||
<string name="pref_video_automatically_accept_video_title">Accepter appels vidéo</string>
|
<string name="pref_video_automatically_accept_video_title">Accepter appels vidéo</string>
|
||||||
|
@ -372,6 +371,7 @@
|
||||||
<string name="call_state_incoming">Reçu</string>
|
<string name="call_state_incoming">Reçu</string>
|
||||||
|
|
||||||
<string name="pref_background_mode">Actif en arrière plan</string>
|
<string name="pref_background_mode">Actif en arrière plan</string>
|
||||||
|
<string name="pref_manage">Gestion</string>
|
||||||
|
|
||||||
<string name="show_image">Afficher</string>
|
<string name="show_image">Afficher</string>
|
||||||
<string name="download_image">Télécharger</string>
|
<string name="download_image">Télécharger</string>
|
||||||
|
@ -379,6 +379,7 @@
|
||||||
|
|
||||||
<string name="wait">Merci de patienter...</string>
|
<string name="wait">Merci de patienter...</string>
|
||||||
<string name="importing_messages">Mise à jour de la base des messages</string>
|
<string name="importing_messages">Mise à jour de la base des messages</string>
|
||||||
|
<string name="default_account_flag">Compte par défaut</string>
|
||||||
|
|
||||||
<string name="zrtp_accept">Accepter</string>
|
<string name="zrtp_accept">Accepter</string>
|
||||||
<string name="zrtp_deny">Refuser</string>
|
<string name="zrtp_deny">Refuser</string>
|
||||||
|
|
|
@ -118,7 +118,10 @@
|
||||||
<string name="pref_video_codec_mpeg4_title">MPEG4</string>
|
<string name="pref_video_codec_mpeg4_title">MPEG4</string>
|
||||||
<string name="pref_video_codec_h264_title">H264</string>
|
<string name="pref_video_codec_h264_title">H264</string>
|
||||||
<string name="pref_video_codecs_title">Кодеки</string>
|
<string name="pref_video_codecs_title">Кодеки</string>
|
||||||
<string name="pref_video_codecs_key">pref_video_codecs_key</string>
|
<string name="pref_preferred_video_size">Preferred video size</string>
|
||||||
|
<string name="pref_preferred_video_size_hd">HD</string>
|
||||||
|
<string name="pref_preferred_video_size_vga">VGA (640x480)</string>
|
||||||
|
<string name="pref_preferred_video_size_qvga">QVGA (320x240)</string>
|
||||||
<string name="menu_videocall_back_to_dialer_title">Показать клавиатуру</string>
|
<string name="menu_videocall_back_to_dialer_title">Показать клавиатуру</string>
|
||||||
<string name="menu_videocall_switch_camera_title">Лицевая/Задняя камера</string>
|
<string name="menu_videocall_switch_camera_title">Лицевая/Задняя камера</string>
|
||||||
<string name="menu_videocall_change_resolution_when_low_resolution">Высокое разрешение</string>
|
<string name="menu_videocall_change_resolution_when_low_resolution">Высокое разрешение</string>
|
||||||
|
@ -418,6 +421,22 @@
|
||||||
|
|
||||||
<string name="pref_background_mode">Фоновый режим</string>
|
<string name="pref_background_mode">Фоновый режим</string>
|
||||||
|
|
||||||
|
<string name="show_image">Show</string>
|
||||||
<string name="download_image">Скачать</string>
|
<string name="download_image">Скачать</string>
|
||||||
<string name="download_image_failed">Ошибка скачивания. Проверьте ваше интернет соединение или попробуйте позже.</string>
|
<string name="download_image_failed">Ошибка скачивания. Проверьте ваше интернет соединение или попробуйте позже.</string>
|
||||||
|
|
||||||
|
<string name="pref_auth_userid">Auth userid</string>
|
||||||
|
|
||||||
|
<string name="pref_help_auth_userid">Enter authentication userid (optionnal)</string>
|
||||||
|
|
||||||
|
<string name="pref_upnp_enable">Enable UPNP</string>
|
||||||
|
<string name="pref_manage">Manage</string>
|
||||||
|
|
||||||
|
<string name="wait">Please wait...</string>
|
||||||
|
<string name="importing_messages">Updating messages database</string>
|
||||||
|
<string name="default_account_flag">Default account</string>
|
||||||
|
|
||||||
|
<string name="zrtp_accept">Accept</string>
|
||||||
|
<string name="zrtp_deny">Deny</string>
|
||||||
|
<string name="zrtp_help">You should only accept if you have the same code (see above) as your correspondent</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -25,4 +25,6 @@
|
||||||
<color name="transparent">#00000000</color>
|
<color name="transparent">#00000000</color>
|
||||||
|
|
||||||
<color name="landscape_background">#CCCCCC</color>
|
<color name="landscape_background">#CCCCCC</color>
|
||||||
|
|
||||||
|
<color name="text_contrast">#ff000000</color> <!-- If background is white, set to black, else set to white -->
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
<string name="push_sender_id">622464153529</string>
|
<string name="push_sender_id">622464153529</string>
|
||||||
|
|
||||||
<string name="default_domain">sip.linphone.org</string>
|
<string name="default_domain">sip.linphone.org</string>
|
||||||
|
<string name="default_stun">stun.linphone.org</string>
|
||||||
<bool name="override_domain_using_default_one">false</bool> <!-- Replace the domain for outgoing calls by the one above -->
|
<bool name="override_domain_using_default_one">false</bool> <!-- Replace the domain for outgoing calls by the one above -->
|
||||||
<string name="wizard_url">https://www.linphone.org/wizard.php</string>
|
<string name="wizard_url">https://www.linphone.org/wizard.php</string>
|
||||||
|
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<resources>
|
|
||||||
|
|
||||||
<string name="pref_tunnel_host_default"></string>
|
|
||||||
<string name="pref_tunnel_port_default">443</string>
|
|
||||||
<string name="default_tunnel_mode_entry_value">@string/tunnel_mode_entry_value_disabled</string>
|
|
||||||
|
|
||||||
<bool name="pref_echo_canceller_default">true</bool>
|
|
||||||
<!-- Audio codecs -->
|
|
||||||
<bool name="pref_codec_opus_default">true</bool>
|
|
||||||
<bool name="pref_codec_speex16_default">true</bool>
|
|
||||||
<bool name="pref_codec_speex8_default">true</bool>
|
|
||||||
<bool name="pref_codec_ilbc_default">true</bool>
|
|
||||||
<bool name="pref_codec_amr_default">false</bool>
|
|
||||||
<bool name="pref_codec_g729_default">true</bool>
|
|
||||||
<bool name="pref_codec_amrwb_default">false</bool>
|
|
||||||
<bool name="pref_codec_gsm_default">true</bool>
|
|
||||||
<bool name="pref_codec_g722_default">false</bool>
|
|
||||||
<bool name="pref_codec_silk24_default">false</bool>
|
|
||||||
<bool name="pref_codec_silk16_default">true</bool>
|
|
||||||
<bool name="pref_codec_silk8_default">false</bool>
|
|
||||||
<bool name="pref_codec_pcmu_default">true</bool>
|
|
||||||
<bool name="pref_codec_pcma_default">true</bool>
|
|
||||||
|
|
||||||
<!-- Video -->
|
|
||||||
<bool name="pref_video_enable_default">true</bool>
|
|
||||||
<bool name="pref_video_use_front_camera_default">true</bool>
|
|
||||||
<bool name="pref_video_initiate_call_with_video_default">true</bool>
|
|
||||||
<bool name="pref_video_automatically_share_my_video_default">true</bool>
|
|
||||||
<bool name="pref_video_automatically_accept_video_default">true</bool>
|
|
||||||
<!-- Preferred video size -->
|
|
||||||
<string name="pref_preferred_video_size_default">@string/pref_preferred_video_size_vga_key</string>
|
|
||||||
<!-- Video codecs -->
|
|
||||||
<bool name="pref_video_codec_vp8_default">true</bool>
|
|
||||||
<bool name="pref_video_codec_h264_default">false</bool>
|
|
||||||
<bool name="pref_video_codec_mpeg4_default">false</bool>
|
|
||||||
<bool name="pref_video_codec_h263_default">false</bool>
|
|
||||||
|
|
||||||
<!-- Network -->
|
|
||||||
<bool name="pref_wifi_only_default">false</bool>
|
|
||||||
<string name="default_stun">stun.linphone.org</string>
|
|
||||||
<bool name="pref_ice_enabled_default">false</bool>
|
|
||||||
<bool name="pref_upnp_enabled_default">false</bool>
|
|
||||||
<bool name="pref_transport_use_random_ports_default">true</bool>
|
|
||||||
<string name="pref_sip_port_default">5060</string>
|
|
||||||
<string name="pref_transport_default">@string/pref_transport_udp_key</string>
|
|
||||||
<string name="default_audio_port">7078</string>
|
|
||||||
<string name="default_video_port">9078</string>
|
|
||||||
<string name="pref_media_encryption_default">@string/pref_media_encryption_key_none</string>
|
|
||||||
<bool name="pref_push_notification_default">false</bool>
|
|
||||||
<bool name="pref_ipv6_default">false</bool>
|
|
||||||
|
|
||||||
<!-- Advanced -->
|
|
||||||
<bool name="pref_debug_default">false</bool>
|
|
||||||
<bool name="pref_animation_enable_default">false</bool>
|
|
||||||
<bool name="pref_autostart_default">false</bool>
|
|
||||||
<string name="pref_incoming_call_timeout_default">30</string>
|
|
||||||
<string name="pref_image_sharing_server_default">https://www.linphone.org:444/upload.php</string>
|
|
||||||
<string name="pref_remote_provisioning_default"></string>
|
|
||||||
<string name="pref_audio_use_specific_mode_default">0</string>
|
|
||||||
<string name="pref_expire_default">3600</string>
|
|
||||||
<string name="pref_display_name_default">Linphone Android</string>
|
|
||||||
<string name="pref_user_name_default">linphone.android</string>
|
|
||||||
|
|
||||||
<bool name="pref_auto_accept_friends_default">false</bool>
|
|
||||||
|
|
||||||
<bool name="pref_sipinfo_dtmf_default">false</bool>
|
|
||||||
<bool name="pref_rfc2833_dtmf_default">true</bool>
|
|
||||||
|
|
||||||
<bool name="pref_background_mode_default">true</bool>
|
|
||||||
</resources>
|
|
|
@ -34,6 +34,7 @@
|
||||||
<string name="pref_sipaccounts_key">pref_sipaccounts_key</string>
|
<string name="pref_sipaccounts_key">pref_sipaccounts_key</string>
|
||||||
<string name="setup_key">setup_key</string>
|
<string name="setup_key">setup_key</string>
|
||||||
<string name="pref_video_key">pref_video_key</string>
|
<string name="pref_video_key">pref_video_key</string>
|
||||||
|
<string name="pref_video_codecs_key">pref_video_codecs_key</string>
|
||||||
<string name="pref_linphone_friend_key">pref_linphone_friend_key</string>
|
<string name="pref_linphone_friend_key">pref_linphone_friend_key</string>
|
||||||
|
|
||||||
<string name="pref_transport_key">pref_transport_key</string>
|
<string name="pref_transport_key">pref_transport_key</string>
|
||||||
|
@ -121,4 +122,8 @@
|
||||||
<string name="pref_upnp_enable_key">pref_upnp_enable_key</string>
|
<string name="pref_upnp_enable_key">pref_upnp_enable_key</string>
|
||||||
|
|
||||||
<string name="pref_first_time_linphone_chat_storage">pref_first_time_linphone_chat_storage</string>
|
<string name="pref_first_time_linphone_chat_storage">pref_first_time_linphone_chat_storage</string>
|
||||||
|
|
||||||
|
<string name="pref_sipaccount_key">pref_sipaccount_key</string>
|
||||||
|
<string name="pref_advanced_key">pref_advanced_key</string>
|
||||||
|
<string name="pref_manage_key">pref_manage_key</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -118,7 +118,6 @@
|
||||||
<string name="pref_video_codec_mpeg4_title">MPEG4</string>
|
<string name="pref_video_codec_mpeg4_title">MPEG4</string>
|
||||||
<string name="pref_video_codec_h264_title">H264</string>
|
<string name="pref_video_codec_h264_title">H264</string>
|
||||||
<string name="pref_video_codecs_title">Codecs</string>
|
<string name="pref_video_codecs_title">Codecs</string>
|
||||||
<string name="pref_video_codecs_key">pref_video_codecs_key</string>
|
|
||||||
<string name="pref_preferred_video_size">Preferred video size</string>
|
<string name="pref_preferred_video_size">Preferred video size</string>
|
||||||
<string name="pref_preferred_video_size_hd">HD</string>
|
<string name="pref_preferred_video_size_hd">HD</string>
|
||||||
<string name="pref_preferred_video_size_vga">VGA (640x480)</string>
|
<string name="pref_preferred_video_size_vga">VGA (640x480)</string>
|
||||||
|
@ -426,14 +425,16 @@
|
||||||
<string name="download_image">Download</string>
|
<string name="download_image">Download</string>
|
||||||
<string name="download_image_failed">Download failed. Please check your internet access or try again later.</string>
|
<string name="download_image_failed">Download failed. Please check your internet access or try again later.</string>
|
||||||
|
|
||||||
<string name="pref_auth_userid">Auth userid*</string>
|
<string name="pref_auth_userid">Auth userid</string>
|
||||||
|
|
||||||
<string name="pref_help_auth_userid">Enter authentication userid (optionnal)</string>
|
<string name="pref_help_auth_userid">Enter authentication userid (optionnal)</string>
|
||||||
|
|
||||||
<string name="pref_upnp_enable">Enable UPNP</string>
|
<string name="pref_upnp_enable">Enable UPNP</string>
|
||||||
|
<string name="pref_manage">Manage</string>
|
||||||
|
|
||||||
<string name="wait">Please wait...</string>
|
<string name="wait">Please wait...</string>
|
||||||
<string name="importing_messages">Updating messages database</string>
|
<string name="importing_messages">Updating messages database</string>
|
||||||
|
<string name="default_account_flag">Default account</string>
|
||||||
|
|
||||||
<string name="zrtp_accept">Accept</string>
|
<string name="zrtp_accept">Accept</string>
|
||||||
<string name="zrtp_deny">Deny</string>
|
<string name="zrtp_deny">Deny</string>
|
||||||
|
|
|
@ -2,7 +2,8 @@
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_sipaccount">
|
android:title="@string/pref_sipaccount"
|
||||||
|
android:key="@string/pref_sipaccount_key">
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_username"
|
android:title="@string/pref_username"
|
||||||
|
@ -24,7 +25,8 @@
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_advanced">
|
android:title="@string/pref_advanced"
|
||||||
|
android:key="@string/pref_advanced_key">
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_proxy"
|
android:title="@string/pref_proxy"
|
||||||
|
@ -36,7 +38,26 @@
|
||||||
android:dialogMessage="@string/pref_help_outbound_proxy"
|
android:dialogMessage="@string/pref_help_outbound_proxy"
|
||||||
android:summary="@string/pref_help_outbound_proxy"
|
android:summary="@string/pref_help_outbound_proxy"
|
||||||
android:persistent="true"/>
|
android:persistent="true"/>
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_expire_title"
|
||||||
|
android:key="@string/pref_expire_key"
|
||||||
|
android:numeric="integer" />
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_prefix"
|
||||||
|
android:key="@string/pref_prefix_key"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:title="@string/pref_escape_plus"
|
||||||
|
android:key="@string/pref_escape_plus_key"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:title="@string/pref_manage"
|
||||||
|
android:key="@string/pref_manage_key">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_disable_account"
|
android:title="@string/pref_disable_account"
|
||||||
android:persistent="true"/>
|
android:persistent="true"/>
|
||||||
|
|
|
@ -14,25 +14,22 @@
|
||||||
android:key="@string/setup_key"/>
|
android:key="@string/setup_key"/>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:key="@string/pref_tunnel_key"
|
android:title="@string/pref_tunnel"
|
||||||
android:title="@string/pref_tunnel">
|
android:key="@string/pref_tunnel_key">
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_tunnel_host"
|
android:title="@string/pref_tunnel_host"
|
||||||
android:key="@string/pref_tunnel_host_key"
|
android:key="@string/pref_tunnel_host_key"/>
|
||||||
android:defaultValue="@string/pref_tunnel_host_default"/>
|
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_tunnel_port"
|
android:title="@string/pref_tunnel_port"
|
||||||
android:key="@string/pref_tunnel_port_key"
|
android:key="@string/pref_tunnel_port_key"/>
|
||||||
android:defaultValue="@string/pref_tunnel_port_default"/>
|
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:title="@string/pref_tunnel_mode"
|
android:title="@string/pref_tunnel_mode"
|
||||||
|
android:key="@string/pref_tunnel_mode_key"
|
||||||
android:entries="@array/tunnel_mode_entries"
|
android:entries="@array/tunnel_mode_entries"
|
||||||
android:entryValues="@array/tunnel_mode_entry_values"
|
android:entryValues="@array/tunnel_mode_entry_values"/>
|
||||||
android:defaultValue="@string/default_tunnel_mode_entry_value"
|
|
||||||
android:key="@string/pref_tunnel_mode_key" />
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
@ -40,186 +37,80 @@
|
||||||
android:title="@string/pref_preferences">
|
android:title="@string/pref_preferences">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:defaultValue="@bool/pref_video_enable_default"
|
|
||||||
android:title="@string/pref_video_enable_title"
|
android:title="@string/pref_video_enable_title"
|
||||||
android:key="@string/pref_video_enable_key" />
|
android:key="@string/pref_video_enable_key"/>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_audio">
|
android:title="@string/pref_audio">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_echo_cancellation_key"
|
|
||||||
android:defaultValue="@bool/pref_echo_canceller_default"
|
|
||||||
android:title="@string/pref_echo_cancellation"
|
android:title="@string/pref_echo_cancellation"
|
||||||
|
android:key="@string/pref_echo_cancellation_key"
|
||||||
android:summary="@string/pref_echo_cancellation_summary"/>
|
android:summary="@string/pref_echo_cancellation_summary"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:key="@string/pref_echo_canceller_calibration_key"
|
android:title="@string/pref_echo_canceller_calibration"
|
||||||
android:title="@string/pref_echo_canceller_calibration" />
|
android:key="@string/pref_echo_canceller_calibration_key"/>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_codecs"
|
android:title="@string/pref_codecs"
|
||||||
android:key="@string/pref_codecs_key">
|
android:key="@string/pref_codecs_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_opus_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_opus_default"
|
|
||||||
android:title="@string/pref_codec_opus"/><CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_speex16_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_speex16_default"
|
|
||||||
android:title="@string/pref_codec_speex16"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_speex8_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_speex8_default"
|
|
||||||
android:title="@string/pref_codec_speex8"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_ilbc_key"
|
|
||||||
android:title="@string/pref_codec_ilbc"
|
|
||||||
android:defaultValue="@bool/pref_codec_ilbc_default"
|
|
||||||
android:summary="@string/pref_ilbc_summary"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_amr_key"
|
|
||||||
android:title="@string/pref_codec_amr"
|
|
||||||
android:defaultValue="@bool/pref_codec_amr_default" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_g729_key"
|
|
||||||
android:title="@string/pref_codec_g729"
|
|
||||||
android:defaultValue="@bool/pref_codec_g729_default" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_amrwb_key"
|
|
||||||
android:title="@string/pref_codec_amrwb"
|
|
||||||
android:defaultValue="@bool/pref_codec_amrwb_default" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_gsm_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_gsm_default"
|
|
||||||
android:title="@string/pref_codec_gsm"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_g722_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_g722_default"
|
|
||||||
android:title="@string/pref_codec_g722"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_silk8_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_silk8_default"
|
|
||||||
android:title="@string/pref_codec_silk8"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_silk16_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_silk16_default"
|
|
||||||
android:title="@string/pref_codec_silk16"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_pcmu_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_pcmu_default"
|
|
||||||
android:title="@string/pref_codec_pcmu"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_codec_pcma_key"
|
|
||||||
android:defaultValue="@bool/pref_codec_pcma_default"
|
|
||||||
android:title="@string/pref_codec_pcma"/>
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_video"
|
android:title="@string/pref_video"
|
||||||
android:dependency="@string/pref_video_enable_key"
|
|
||||||
android:key="@string/pref_video_key"
|
android:key="@string/pref_video_key"
|
||||||
|
android:dependency="@string/pref_video_enable_key"
|
||||||
android:shouldDisableView="true">
|
android:shouldDisableView="true">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_video_use_front_camera_key"
|
|
||||||
android:defaultValue="@bool/pref_video_use_front_camera_default"
|
|
||||||
android:title="@string/pref_video_use_front_camera_title"
|
android:title="@string/pref_video_use_front_camera_title"
|
||||||
|
android:key="@string/pref_video_use_front_camera_key"
|
||||||
android:dependency="@string/pref_video_enable_key"
|
android:dependency="@string/pref_video_enable_key"
|
||||||
android:layout="@layout/hidden"/>
|
android:layout="@layout/hidden"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_video_initiate_call_with_video_key"
|
|
||||||
android:defaultValue="@bool/pref_video_initiate_call_with_video_default"
|
|
||||||
android:title="@string/pref_video_initiate_call_with_video_title"
|
android:title="@string/pref_video_initiate_call_with_video_title"
|
||||||
|
android:key="@string/pref_video_initiate_call_with_video_key"
|
||||||
android:summary="@string/pref_video_initiate_call_with_video"
|
android:summary="@string/pref_video_initiate_call_with_video"
|
||||||
android:dependency="@string/pref_video_enable_key"/>
|
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:title="@string/pref_video_automatically_share_my_video_title"
|
||||||
android:defaultValue="@bool/pref_video_automatically_share_my_video_default"
|
android:key="@string/pref_video_automatically_share_my_video_key"
|
||||||
android:summary="@string/pref_video_automatically_share_my_video"
|
android:summary="@string/pref_video_automatically_share_my_video"
|
||||||
android:dependency="@string/pref_video_enable_key"
|
android:dependency="@string/pref_video_enable_key"
|
||||||
android:layout="@layout/hidden"/>
|
android:layout="@layout/hidden"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_video_automatically_accept_video_key"
|
|
||||||
android:title="@string/pref_video_automatically_accept_video_title"
|
android:title="@string/pref_video_automatically_accept_video_title"
|
||||||
android:defaultValue="@bool/pref_video_automatically_accept_video_default"
|
android:key="@string/pref_video_automatically_accept_video_key"
|
||||||
android:summary="@string/pref_video_automatically_accept_video"
|
android:summary="@string/pref_video_automatically_accept_video"
|
||||||
android:dependency="@string/pref_video_enable_key"/>
|
android:dependency="@string/pref_video_enable_key"/>
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:title="@string/pref_preferred_video_size"
|
android:title="@string/pref_preferred_video_size"
|
||||||
android:key="@string/pref_preferred_video_size_key"
|
android:key="@string/pref_preferred_video_size_key"/>
|
||||||
android:defaultValue="@string/pref_preferred_video_size_default" />
|
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:dependency="@string/pref_video_enable_key"
|
android:title="@string/pref_video_codecs_title"
|
||||||
android:shouldDisableView="true"
|
|
||||||
android:key="@string/pref_video_codecs_key"
|
android:key="@string/pref_video_codecs_key"
|
||||||
android:title="@string/pref_video_codecs_title">
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:shouldDisableView="true"/>
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_video_codec_vp8_key"
|
|
||||||
android:title="@string/pref_video_codec_vp8_title"
|
|
||||||
android:defaultValue="@bool/pref_video_codec_vp8_default"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_video_codec_h264_key"
|
|
||||||
android:title="@string/pref_video_codec_h264_title"
|
|
||||||
android:defaultValue="@bool/pref_video_codec_h264_default"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_video_codec_mpeg4_key"
|
|
||||||
android:title="@string/pref_video_codec_mpeg4_title"
|
|
||||||
android:defaultValue="@bool/pref_video_codec_mpeg4_default"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_video_codec_h263_key"
|
|
||||||
android:title="@string/pref_video_codec_h263_title"
|
|
||||||
android:defaultValue="@bool/pref_video_codec_h263_default"
|
|
||||||
android:layout="@layout/hidden"/>
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/call">
|
android:title="@string/call">
|
||||||
|
|
||||||
<EditTextPreference
|
|
||||||
android:title="@string/pref_prefix"
|
|
||||||
android:key="@string/pref_prefix_key"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
|
||||||
android:key="@string/pref_escape_plus_key"
|
|
||||||
android:title="@string/pref_escape_plus"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_sipinfo_dtmf_key"
|
android:title="@string/pref_sipinfo_dtmf"
|
||||||
android:defaultValue="@bool/pref_sipinfo_dtmf_default"
|
android:key="@string/pref_sipinfo_dtmf_key"/>
|
||||||
android:title="@string/pref_sipinfo_dtmf"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_rfc2833_dtmf_key"
|
android:title="@string/pref_rfc2833_dtmf"
|
||||||
android:defaultValue="@bool/pref_rfc2833_dtmf_default"
|
android:key="@string/pref_rfc2833_dtmf_key"/>
|
||||||
android:title="@string/pref_rfc2833_dtmf"/>
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
|
@ -227,69 +118,57 @@
|
||||||
android:title="@string/pref_network_title">
|
android:title="@string/pref_network_title">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_wifi_only_key"
|
|
||||||
android:title="@string/pref_wifi_only"
|
android:title="@string/pref_wifi_only"
|
||||||
android:defaultValue="@bool/pref_wifi_only_default"/>
|
android:key="@string/pref_wifi_only_key"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_stun_server"
|
android:title="@string/pref_stun_server"
|
||||||
android:defaultValue="@string/default_stun"
|
|
||||||
android:key="@string/pref_stun_server_key"/>
|
android:key="@string/pref_stun_server_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_ice_enable"
|
android:title="@string/pref_ice_enable"
|
||||||
android:key="@string/pref_ice_enable_key"
|
android:key="@string/pref_ice_enable_key"/>
|
||||||
android:defaultValue="@bool/pref_ice_enabled_default"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_upnp_enable"
|
android:title="@string/pref_upnp_enable"
|
||||||
android:key="@string/pref_upnp_enable_key"
|
android:key="@string/pref_upnp_enable_key"/>
|
||||||
android:defaultValue="@bool/pref_upnp_enabled_default"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_transport_use_random_ports_key"
|
|
||||||
android:title="@string/pref_transport_use_random_ports"
|
android:title="@string/pref_transport_use_random_ports"
|
||||||
android:defaultValue="@bool/pref_transport_use_random_ports_default"/>
|
android:key="@string/pref_transport_use_random_ports_key"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_sip_port_key"
|
|
||||||
android:title="@string/pref_sip_port_title"
|
android:title="@string/pref_sip_port_title"
|
||||||
android:defaultValue="@string/pref_sip_port_default"
|
android:key="@string/pref_sip_port_key"
|
||||||
android:numeric="integer"/>
|
android:numeric="integer"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_audio_port_key"
|
|
||||||
android:title="@string/pref_audio_port_title"
|
android:title="@string/pref_audio_port_title"
|
||||||
|
android:key="@string/pref_audio_port_key"
|
||||||
android:summary="@string/pref_audio_port_description"
|
android:summary="@string/pref_audio_port_description"
|
||||||
android:defaultValue="@string/default_audio_port"
|
|
||||||
android:layout="@layout/hidden"/>
|
android:layout="@layout/hidden"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_video_port_key"
|
|
||||||
android:title="@string/pref_video_port_title"
|
android:title="@string/pref_video_port_title"
|
||||||
android:defaultValue="@string/default_video_port"
|
android:key="@string/pref_video_port_key"
|
||||||
android:summary="@string/pref_video_port_description"
|
android:summary="@string/pref_video_port_description"
|
||||||
android:layout="@layout/hidden"/>
|
android:layout="@layout/hidden"/>
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:title="@string/pref_transport"
|
android:title="@string/pref_transport"
|
||||||
android:key="@string/pref_transport_key"
|
android:key="@string/pref_transport_key"/>
|
||||||
android:defaultValue="@string/pref_transport_default" />
|
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:title="@string/pref_media_encryption"
|
android:title="@string/pref_media_encryption"
|
||||||
android:key="@string/pref_media_encryption_key"
|
android:key="@string/pref_media_encryption_key"/>
|
||||||
android:defaultValue="@string/pref_media_encryption_default" />
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_push_notification_key"
|
|
||||||
android:title="@string/pref_push_notification"
|
android:title="@string/pref_push_notification"
|
||||||
android:defaultValue="@bool/pref_push_notification_default"/>
|
android:key="@string/pref_push_notification_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_ipv6_key"
|
|
||||||
android:title="@string/pref_ipv6_title"
|
android:title="@string/pref_ipv6_title"
|
||||||
android:defaultValue="@bool/pref_ipv6_default" />
|
android:key="@string/pref_ipv6_key"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
|
@ -297,58 +176,43 @@
|
||||||
android:title="@string/pref_advanced">
|
android:title="@string/pref_advanced">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_debug_key"
|
|
||||||
android:title="@string/pref_debug"
|
android:title="@string/pref_debug"
|
||||||
android:defaultValue="@bool/pref_debug_default"/>
|
android:key="@string/pref_debug_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_background_mode_key"
|
|
||||||
android:title="@string/pref_background_mode"
|
android:title="@string/pref_background_mode"
|
||||||
android:defaultValue="@bool/pref_background_mode_default"/>
|
android:key="@string/pref_background_mode_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:defaultValue="@bool/pref_animation_enable_default"
|
|
||||||
android:title="@string/pref_animation_enable_title"
|
android:title="@string/pref_animation_enable_title"
|
||||||
android:key="@string/pref_animation_enable_key" />
|
android:key="@string/pref_animation_enable_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_autostart"
|
android:title="@string/pref_autostart"
|
||||||
android:key="@string/pref_autostart_key"
|
android:key="@string/pref_autostart_key"/>
|
||||||
android:defaultValue="@bool/pref_autostart_default"/>
|
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_incoming_call_timeout_key"
|
|
||||||
android:title="@string/pref_incoming_call_timeout_title"
|
android:title="@string/pref_incoming_call_timeout_title"
|
||||||
android:defaultValue="@string/pref_incoming_call_timeout_default"
|
android:key="@string/pref_incoming_call_timeout_key"
|
||||||
android:layout="@layout/hidden"/>
|
android:layout="@layout/hidden"/>
|
||||||
|
|
||||||
<EditTextPreference
|
|
||||||
android:key="@string/pref_expire_key"
|
|
||||||
android:title="@string/pref_expire_title"
|
|
||||||
android:defaultValue="@string/pref_expire_default"
|
|
||||||
android:numeric="integer" />
|
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_image_sharing_server_key"
|
|
||||||
android:title="@string/pref_image_sharing_server_title"
|
android:title="@string/pref_image_sharing_server_title"
|
||||||
android:defaultValue="@string/pref_image_sharing_server_default" />
|
android:key="@string/pref_image_sharing_server_key"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_remote_provisioning_key"
|
|
||||||
android:title="@string/pref_remote_provisioning_title"
|
android:title="@string/pref_remote_provisioning_title"
|
||||||
android:defaultValue="@string/pref_remote_provisioning_default" />
|
android:key="@string/pref_remote_provisioning_key"/>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_primary_account_title">
|
android:title="@string/pref_primary_account_title">
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_display_name_title"
|
android:title="@string/pref_display_name_title"
|
||||||
android:defaultValue="@string/pref_display_name_default"
|
|
||||||
android:key="@string/pref_display_name_key"/>
|
android:key="@string/pref_display_name_key"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_user_name_title"
|
android:title="@string/pref_user_name_title"
|
||||||
android:defaultValue="@string/pref_user_name_default"
|
|
||||||
android:key="@string/pref_user_name_key"/>
|
android:key="@string/pref_user_name_key"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
@ -358,18 +222,17 @@
|
||||||
android:layout="@layout/hidden">
|
android:layout="@layout/hidden">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_audio_hacks_use_routing_api_key"
|
android:title="@string/pref_audio_hacks_use_routing_api_title"
|
||||||
android:title="@string/pref_audio_hacks_use_routing_api_title" />
|
android:key="@string/pref_audio_hacks_use_routing_api_key"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_audio_hacks_use_galaxys_hack_key"
|
android:title="@string/pref_audio_hacks_use_galaxys_hack_title"
|
||||||
android:title="@string/pref_audio_hacks_use_galaxys_hack_title" />
|
android:key="@string/pref_audio_hacks_use_galaxys_hack_key"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:key="@string/pref_audio_use_specific_mode_key"
|
|
||||||
android:title="@string/pref_audio_use_specific_mode_title"
|
android:title="@string/pref_audio_use_specific_mode_title"
|
||||||
|
android:key="@string/pref_audio_use_specific_mode_key"
|
||||||
android:summary="@string/pref_audio_use_specific_mode_summary"
|
android:summary="@string/pref_audio_use_specific_mode_summary"
|
||||||
android:defaultValue="@string/pref_audio_use_specific_mode_default"
|
|
||||||
android:numeric="integer" />
|
android:numeric="integer" />
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
@ -383,10 +246,9 @@
|
||||||
android:key="@string/pref_linphone_friend_key">
|
android:key="@string/pref_linphone_friend_key">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:key="@string/pref_auto_accept_friends_key"
|
|
||||||
android:title="@string/pref_auto_accept_friends_title"
|
android:title="@string/pref_auto_accept_friends_title"
|
||||||
android:summary="@string/pref_auto_accept_friends_desc"
|
android:key="@string/pref_auto_accept_friends_key"
|
||||||
android:defaultValue="@bool/pref_auto_accept_friends_default"/>
|
android:summary="@string/pref_auto_accept_friends_desc"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
|
|
@ -18,11 +18,10 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.linphone.compatibility.Compatibility;
|
|
||||||
import org.linphone.ui.PreferencesListFragment;
|
import org.linphone.ui.PreferencesListFragment;
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.preference.CheckBoxPreference;
|
||||||
import android.preference.EditTextPreference;
|
import android.preference.EditTextPreference;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.preference.Preference.OnPreferenceChangeListener;
|
import android.preference.Preference.OnPreferenceChangeListener;
|
||||||
|
@ -36,10 +35,17 @@ import android.text.InputType;
|
||||||
*/
|
*/
|
||||||
public class AccountPreferencesFragment extends PreferencesListFragment {
|
public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
private int n;
|
private int n;
|
||||||
private String key;
|
private LinphonePreferences mPrefs;
|
||||||
|
|
||||||
public AccountPreferencesFragment() {
|
public AccountPreferencesFragment() {
|
||||||
super(R.xml.account_preferences);
|
super(R.xml.account_preferences);
|
||||||
|
mPrefs = LinphonePreferences.instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
LinphoneManager.getLc().refreshRegisters();
|
||||||
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onCreate(Bundle savedInstanceState)
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
@ -48,154 +54,175 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
|
|
||||||
PreferenceScreen screen = getPreferenceScreen();
|
PreferenceScreen screen = getPreferenceScreen();
|
||||||
n = getArguments().getInt("Account", 0);
|
n = getArguments().getInt("Account", 0);
|
||||||
key = getAccountNumber(n);
|
|
||||||
manageAccountPreferencesFields(screen);
|
manageAccountPreferencesFields(screen);
|
||||||
}
|
}
|
||||||
|
|
||||||
OnPreferenceChangeListener preferenceChangedListener = new OnPreferenceChangeListener() {
|
OnPreferenceChangeListener usernameChangedListener = new OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountUsername(n, newValue.toString());
|
||||||
preference.setSummary(newValue.toString());
|
preference.setSummary(newValue.toString());
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
OnPreferenceChangeListener useridChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountUserId(n, newValue.toString());
|
||||||
|
preference.setSummary(newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener passwordChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountPassword(n, newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener domainChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountDomain(n, newValue.toString());
|
||||||
|
preference.setSummary(newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener proxyChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountProxy(n, newValue.toString());
|
||||||
|
preference.setSummary(newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener outboundProxyChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountOutboundProxyEnabled(n, (Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener expiresChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setExpires(n, newValue.toString());
|
||||||
|
preference.setSummary(newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener prefixChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
String value = newValue.toString();
|
||||||
|
preference.setSummary(value);
|
||||||
|
mPrefs.setPrefix(n, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener escapeChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
mPrefs.setReplacePlusByZeroZero(n, value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener disableChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setAccountEnabled(n, (Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
OnPreferenceChangeListener deleteChangedListener = new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
private void manageAccountPreferencesFields(PreferenceScreen parent) {
|
private void manageAccountPreferencesFields(PreferenceScreen parent) {
|
||||||
final SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
boolean isDefaultAccount = mPrefs.getDefaultAccountIndex() == n;
|
||||||
|
|
||||||
PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().getPreference(0);
|
PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key));
|
||||||
EditTextPreference username = (EditTextPreference) account.getPreference(0);
|
EditTextPreference username = (EditTextPreference) account.getPreference(0);
|
||||||
username.setText(prefs.getString(getString(R.string.pref_username_key) + key, ""));
|
username.setText(mPrefs.getAccountUsername(n));
|
||||||
username.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
username.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||||
username.setKey(getString(R.string.pref_username_key) + key);
|
username.setOnPreferenceChangeListener(usernameChangedListener);
|
||||||
username.setOnPreferenceChangeListener(preferenceChangedListener);
|
|
||||||
username.setSummary(username.getText());
|
username.setSummary(username.getText());
|
||||||
|
|
||||||
EditTextPreference userid = (EditTextPreference) account.getPreference(1);
|
EditTextPreference userid = (EditTextPreference) account.getPreference(1);
|
||||||
userid.setText(prefs.getString(getString(R.string.pref_auth_userid_key) + key, ""));
|
userid.setText(mPrefs.getAccountUserId(n));
|
||||||
userid.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
userid.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||||
userid.setKey(getString(R.string.pref_auth_userid_key) + key);
|
userid.setOnPreferenceChangeListener(useridChangedListener);
|
||||||
userid.setOnPreferenceChangeListener(preferenceChangedListener);
|
|
||||||
userid.setSummary(userid.getText());
|
userid.setSummary(userid.getText());
|
||||||
|
|
||||||
EditTextPreference password = (EditTextPreference) account.getPreference(2);
|
EditTextPreference password = (EditTextPreference) account.getPreference(2);
|
||||||
password.setText(prefs.getString(getString(R.string.pref_passwd_key) + key, ""));
|
password.setText(mPrefs.getAccountPassword(n));
|
||||||
password.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
password.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
||||||
password.setKey(getString(R.string.pref_passwd_key) + key);
|
password.setOnPreferenceChangeListener(passwordChangedListener);
|
||||||
|
|
||||||
EditTextPreference domain = (EditTextPreference) account.getPreference(3);
|
EditTextPreference domain = (EditTextPreference) account.getPreference(3);
|
||||||
domain.setText(prefs.getString(getString(R.string.pref_domain_key) + key, ""));
|
domain.setText(mPrefs.getAccountDomain(n));
|
||||||
domain.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
domain.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||||
domain.setKey(getString(R.string.pref_domain_key) + key);
|
domain.setOnPreferenceChangeListener(domainChangedListener);
|
||||||
domain.setOnPreferenceChangeListener(preferenceChangedListener);
|
|
||||||
domain.setSummary(domain.getText());
|
domain.setSummary(domain.getText());
|
||||||
|
|
||||||
PreferenceCategory advanced = (PreferenceCategory) getPreferenceScreen().getPreference(1);
|
PreferenceCategory advanced = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_advanced_key));
|
||||||
EditTextPreference proxy = (EditTextPreference) advanced.getPreference(0);
|
EditTextPreference proxy = (EditTextPreference) advanced.getPreference(0);
|
||||||
proxy.setText(prefs.getString(getString(R.string.pref_proxy_key) + key, ""));
|
proxy.setText(mPrefs.getAccountProxy(n));
|
||||||
proxy.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
proxy.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
||||||
proxy.setKey(getString(R.string.pref_proxy_key) + key);
|
proxy.setOnPreferenceChangeListener(proxyChangedListener);
|
||||||
proxy.setOnPreferenceChangeListener(preferenceChangedListener);
|
|
||||||
proxy.setSummary("".equals(proxy.getText()) || (proxy.getText() == null) ? getString(R.string.pref_help_proxy) : proxy.getText());
|
proxy.setSummary("".equals(proxy.getText()) || (proxy.getText() == null) ? getString(R.string.pref_help_proxy) : proxy.getText());
|
||||||
|
|
||||||
Preference outboundProxy = advanced.getPreference(1);
|
CheckBoxPreference outboundProxy = (CheckBoxPreference) advanced.getPreference(1);
|
||||||
Compatibility.setPreferenceChecked(outboundProxy, prefs.getBoolean(getString(R.string.pref_enable_outbound_proxy_key) + key, false));
|
outboundProxy.setChecked(mPrefs.isAccountOutboundProxySet(n));
|
||||||
outboundProxy.setKey(getString(R.string.pref_enable_outbound_proxy_key) + key);
|
outboundProxy.setOnPreferenceChangeListener(outboundProxyChangedListener);
|
||||||
|
|
||||||
final Preference disable = advanced.getPreference(2);
|
|
||||||
disable.setEnabled(true);
|
|
||||||
Compatibility.setPreferenceChecked(disable, prefs.getBoolean(getString(R.string.pref_disable_account_key) + key, false));
|
|
||||||
disable.setKey(getString(R.string.pref_disable_account_key) + key);
|
|
||||||
|
|
||||||
final Preference delete = advanced.getPreference(4);
|
|
||||||
delete.setEnabled(true);
|
|
||||||
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) + getAccountNumber(i), prefs.getString(getString(R.string.pref_username_key) + getAccountNumber(i+1), null));
|
|
||||||
editor.putString(getString(R.string.pref_auth_userid_key) + getAccountNumber(i), prefs.getString(getString(R.string.pref_auth_userid_key) + getAccountNumber(i+1), null));
|
|
||||||
editor.putString(getString(R.string.pref_passwd_key) + getAccountNumber(i), prefs.getString(getString(R.string.pref_passwd_key) + getAccountNumber(i+1), null));
|
|
||||||
editor.putString(getString(R.string.pref_domain_key) + getAccountNumber(i), prefs.getString(getString(R.string.pref_domain_key) + getAccountNumber(i+1), null));
|
|
||||||
editor.putString(getString(R.string.pref_proxy_key) + getAccountNumber(i), prefs.getString(getString(R.string.pref_proxy_key) + getAccountNumber(i+1), null));
|
|
||||||
editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(i), prefs.getBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(i+1), false));
|
|
||||||
editor.putBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(i), prefs.getBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(i+1), false));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n != 0) {
|
|
||||||
int lastAccount = nbAccounts - 1;
|
|
||||||
editor.putString(getString(R.string.pref_username_key) + getAccountNumber(lastAccount), null);
|
|
||||||
editor.putString(getString(R.string.pref_passwd_key) + getAccountNumber(lastAccount), null);
|
|
||||||
editor.putString(getString(R.string.pref_domain_key) + getAccountNumber(lastAccount), null);
|
|
||||||
editor.putString(getString(R.string.pref_proxy_key) + getAccountNumber(lastAccount), null);
|
|
||||||
editor.putBoolean(getString(R.string.pref_enable_outbound_proxy_key) + getAccountNumber(lastAccount), false);
|
|
||||||
editor.putBoolean(getString(R.string.pref_disable_account_key) + getAccountNumber(lastAccount), false);
|
|
||||||
|
|
||||||
int defaultAccount = prefs.getInt(getString(R.string.pref_default_account_key), 0);
|
|
||||||
if (defaultAccount > n) {
|
|
||||||
editor.putInt(getString(R.string.pref_default_account_key), defaultAccount - 1);
|
|
||||||
}
|
|
||||||
editor.putInt(getString(R.string.pref_extra_accounts), nbAccounts - 1);
|
|
||||||
} else if (n == 0 && nbAccounts <= 1) {
|
|
||||||
editor.putString(getString(R.string.pref_username_key), "");
|
|
||||||
editor.putString(getString(R.string.pref_passwd_key), "");
|
|
||||||
editor.putString(getString(R.string.pref_domain_key), "");
|
|
||||||
} else {
|
|
||||||
editor.putInt(getString(R.string.pref_extra_accounts), nbAccounts - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
editor.commit();
|
|
||||||
|
|
||||||
LinphoneActivity.instance().displaySettings();
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Preference mainAccount = advanced.getPreference(3);
|
EditTextPreference expires = (EditTextPreference) advanced.getPreference(2);
|
||||||
Compatibility.setPreferenceChecked(mainAccount, prefs.getInt(getString(R.string.pref_default_account_key), 0) == n);
|
expires.setText(mPrefs.getExpires(n));
|
||||||
mainAccount.setEnabled(!Compatibility.isPreferenceChecked(mainAccount));
|
expires.setOnPreferenceChangeListener(expiresChangedListener);
|
||||||
|
expires.setSummary(mPrefs.getExpires(n));
|
||||||
|
|
||||||
|
EditTextPreference prefix = (EditTextPreference) advanced.getPreference(3);
|
||||||
|
String prefixValue = mPrefs.getPrefix(n);
|
||||||
|
prefix.setSummary(prefixValue);
|
||||||
|
prefix.setText(prefixValue);
|
||||||
|
prefix.setOnPreferenceChangeListener(prefixChangedListener);
|
||||||
|
|
||||||
|
CheckBoxPreference escape = (CheckBoxPreference) advanced.getPreference(4);
|
||||||
|
escape.setChecked(mPrefs.getReplacePlusByZeroZero(n));
|
||||||
|
escape.setOnPreferenceChangeListener(escapeChangedListener);
|
||||||
|
|
||||||
|
PreferenceCategory manage = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_manage_key));
|
||||||
|
final CheckBoxPreference disable = (CheckBoxPreference) manage.getPreference(0);
|
||||||
|
disable.setEnabled(true);
|
||||||
|
disable.setChecked(!mPrefs.isAccountEnabled(n));
|
||||||
|
disable.setOnPreferenceChangeListener(disableChangedListener);
|
||||||
|
|
||||||
|
CheckBoxPreference mainAccount = (CheckBoxPreference) manage.getPreference(1);
|
||||||
|
mainAccount.setChecked(isDefaultAccount);
|
||||||
|
mainAccount.setEnabled(!mainAccount.isChecked());
|
||||||
mainAccount.setOnPreferenceClickListener(new OnPreferenceClickListener()
|
mainAccount.setOnPreferenceClickListener(new OnPreferenceClickListener()
|
||||||
{
|
{
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
mPrefs.setDefaultAccount(n);
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
|
||||||
editor.putInt(getString(R.string.pref_default_account_key), n);
|
|
||||||
editor.commit();
|
|
||||||
disable.setEnabled(false);
|
disable.setEnabled(false);
|
||||||
Compatibility.setPreferenceChecked(disable, false);
|
disable.setChecked(false);
|
||||||
preference.setEnabled(false);
|
preference.setEnabled(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
private String getAccountNumber(int n) {
|
|
||||||
if (n > 0)
|
|
||||||
return Integer.toString(n);
|
|
||||||
else
|
|
||||||
return "";
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
final Preference delete = manage.getPreference(2);
|
||||||
int n = prefs.getInt(getString(R.string.pref_extra_accounts), 1);
|
delete.setEnabled(true);
|
||||||
String keyUsername = getString(R.string.pref_username_key) + getAccountNumber(n-1);
|
delete.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
if (prefs.getString(keyUsername, "").equals("")) {
|
mPrefs.deleteAccount(n);
|
||||||
//If not, we suppress it to not display a blank field
|
LinphoneActivity.instance().displaySettings();
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
return true;
|
||||||
editor.putInt(getString(R.string.pref_extra_accounts), n-1);
|
}
|
||||||
editor.commit();
|
});
|
||||||
}
|
|
||||||
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
|
||||||
LinphoneActivity.instance().applyConfigChangesIfNeeded();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,14 +21,13 @@ package org.linphone;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
|
|
||||||
public class BootReceiver extends BroadcastReceiver {
|
public class BootReceiver extends BroadcastReceiver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
|
||||||
if (PreferenceManager.getDefaultSharedPreferences(context).getBoolean(context.getString(R.string.pref_autostart_key), false)) {
|
if (LinphonePreferences.instance().isAutoStartEnabled()) {
|
||||||
Intent lLinphoneServiceIntent = new Intent(Intent.ACTION_MAIN);
|
Intent lLinphoneServiceIntent = new Intent(Intent.ACTION_MAIN);
|
||||||
lLinphoneServiceIntent.setClass(context, LinphoneService.class);
|
lLinphoneServiceIntent.setClass(context, LinphoneService.class);
|
||||||
context.startService(lLinphoneServiceIntent);;
|
context.startService(lLinphoneServiceIntent);;
|
||||||
|
|
|
@ -48,7 +48,6 @@ import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.graphics.Bitmap.CompressFormat;
|
import android.graphics.Bitmap.CompressFormat;
|
||||||
|
@ -61,7 +60,6 @@ import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Parcelable;
|
import android.os.Parcelable;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.content.CursorLoader;
|
import android.support.v4.content.CursorLoader;
|
||||||
|
@ -194,8 +192,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
}
|
}
|
||||||
displayChat(displayName, pictureUri);
|
displayChat(displayName, pictureUri);
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.instance());
|
uploadServerUri = LinphonePreferences.instance().getSharingPictureServerUrl();
|
||||||
uploadServerUri = prefs.getString(getString(R.string.pref_image_sharing_server_key), getString(R.string.pref_image_sharing_server_default));
|
|
||||||
|
|
||||||
textWatcher = new TextWatcher() {
|
textWatcher = new TextWatcher() {
|
||||||
public void afterTextChanged(Editable arg0) {
|
public void afterTextChanged(Editable arg0) {
|
||||||
|
|
|
@ -37,7 +37,6 @@ import org.linphone.ui.Numpad;
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.res.Configuration;
|
import android.content.res.Configuration;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
@ -45,7 +44,6 @@ import android.os.Bundle;
|
||||||
import android.os.CountDownTimer;
|
import android.os.CountDownTimer;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentActivity;
|
import android.support.v4.app.FragmentActivity;
|
||||||
|
@ -127,8 +125,7 @@ public class InCallActivity extends FragmentActivity implements
|
||||||
isTransferAllowed = getApplicationContext().getResources().getBoolean(R.bool.allow_transfers);
|
isTransferAllowed = getApplicationContext().getResources().getBoolean(R.bool.allow_transfers);
|
||||||
showCallListInVideo = getApplicationContext().getResources().getBoolean(R.bool.show_current_calls_above_video);
|
showCallListInVideo = getApplicationContext().getResources().getBoolean(R.bool.show_current_calls_above_video);
|
||||||
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
isAnimationDisabled = getApplicationContext().getResources().getBoolean(R.bool.disable_animations) || !LinphonePreferences.instance().areAnimationsEnabled();
|
||||||
isAnimationDisabled = getApplicationContext().getResources().getBoolean(R.bool.disable_animations) || !prefs.getBoolean(getString(R.string.pref_animation_enable_key), false);
|
|
||||||
cameraNumber = AndroidCameraConfiguration.retrieveCameras().length;
|
cameraNumber = AndroidCameraConfiguration.retrieveCameras().length;
|
||||||
|
|
||||||
if (findViewById(R.id.fragmentContainer) != null) {
|
if (findViewById(R.id.fragmentContainer) != null) {
|
||||||
|
@ -273,7 +270,7 @@ public class InCallActivity extends FragmentActivity implements
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
if (!isVideoActivatedInSettings()) {
|
if (!LinphonePreferences.instance().isVideoEnabled()) {
|
||||||
video.setEnabled(false);
|
video.setEnabled(false);
|
||||||
} else {
|
} else {
|
||||||
if (isVideoEnabled) {
|
if (isVideoEnabled) {
|
||||||
|
@ -355,12 +352,6 @@ public class InCallActivity extends FragmentActivity implements
|
||||||
public void updateStatusFragment(StatusFragment statusFragment) {
|
public void updateStatusFragment(StatusFragment statusFragment) {
|
||||||
status = statusFragment;
|
status = statusFragment;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isVideoActivatedInSettings() {
|
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
|
||||||
boolean settingsVideoEnabled = prefs.getBoolean(getString(R.string.pref_video_enable_key), false);
|
|
||||||
return settingsVideoEnabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
@ -1087,7 +1078,7 @@ public class InCallActivity extends FragmentActivity implements
|
||||||
|
|
||||||
if (state == State.CallUpdatedByRemote) {
|
if (state == State.CallUpdatedByRemote) {
|
||||||
// If the correspondent proposes video while audio call
|
// If the correspondent proposes video while audio call
|
||||||
boolean isVideoEnabled = LinphoneManager.getInstance().isVideoEnabled();
|
boolean isVideoEnabled = LinphonePreferences.instance().isVideoEnabled();
|
||||||
if (!isVideoEnabled) {
|
if (!isVideoEnabled) {
|
||||||
acceptCallUpdate(false);
|
acceptCallUpdate(false);
|
||||||
return;
|
return;
|
||||||
|
@ -1095,7 +1086,7 @@ public class InCallActivity extends FragmentActivity implements
|
||||||
|
|
||||||
boolean remoteVideo = call.getRemoteParams().getVideoEnabled();
|
boolean remoteVideo = call.getRemoteParams().getVideoEnabled();
|
||||||
boolean localVideo = call.getCurrentParamsCopy().getVideoEnabled();
|
boolean localVideo = call.getCurrentParamsCopy().getVideoEnabled();
|
||||||
boolean autoAcceptCameraPolicy = LinphoneManager.getInstance().isAutoAcceptCamera();
|
boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests();
|
||||||
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) {
|
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) {
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
|
|
|
@ -156,7 +156,7 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat
|
||||||
|
|
||||||
private void answer() {
|
private void answer() {
|
||||||
LinphoneCallParams params = LinphoneManager.getLc().createDefaultCallParameters();
|
LinphoneCallParams params = LinphoneManager.getLc().createDefaultCallParameters();
|
||||||
if (mCall != null && mCall.getRemoteParams() != null && mCall.getRemoteParams().getVideoEnabled() && LinphoneManager.isInstanciated() && LinphoneManager.getInstance().isAutoAcceptCamera()) {
|
if (mCall != null && mCall.getRemoteParams() != null && mCall.getRemoteParams().getVideoEnabled() && LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||||
params.setVideoEnabled(true);
|
params.setVideoEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
params.setVideoEnabled(false);
|
params.setVideoEnabled(false);
|
||||||
|
@ -176,7 +176,7 @@ public class IncomingCallActivity extends Activity implements LinphoneOnCallStat
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final LinphoneCallParams remoteParams = mCall.getRemoteParams();
|
final LinphoneCallParams remoteParams = mCall.getRemoteParams();
|
||||||
if (remoteParams != null && remoteParams.getVideoEnabled() && LinphoneManager.getInstance().isAutoAcceptCamera()) {
|
if (remoteParams != null && remoteParams.getVideoEnabled() && LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests()) {
|
||||||
LinphoneActivity.instance().startVideoActivity(mCall);
|
LinphoneActivity.instance().startVideoActivity(mCall);
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().startIncallActivity(mCall);
|
LinphoneActivity.instance().startIncallActivity(mCall);
|
||||||
|
|
|
@ -27,7 +27,6 @@ import java.util.Collection;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.linphone.LinphoneManager.AddressType;
|
import org.linphone.LinphoneManager.AddressType;
|
||||||
import org.linphone.LinphoneManager.LinphoneConfigException;
|
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnCallStateChangedListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnMessageReceivedListener;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnRegistrationStateChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnRegistrationStateChangedListener;
|
||||||
|
@ -53,14 +52,12 @@ import android.annotation.SuppressLint;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.v4.app.DialogFragment;
|
import android.support.v4.app.DialogFragment;
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.Fragment.SavedState;
|
import android.support.v4.app.Fragment.SavedState;
|
||||||
|
@ -104,6 +101,7 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
private LinearLayout menu, mark;
|
private LinearLayout menu, mark;
|
||||||
private RelativeLayout contacts, history, settings, chat, aboutChat, aboutSettings;
|
private RelativeLayout contacts, history, settings, chat, aboutChat, aboutSettings;
|
||||||
private FragmentsAvailable currentFragment, nextFragment;
|
private FragmentsAvailable currentFragment, nextFragment;
|
||||||
|
private List<FragmentsAvailable> fragmentsHistory;
|
||||||
private Fragment dialerFragment, messageListenerFragment, messageListFragment, friendStatusListenerFragment;
|
private Fragment dialerFragment, messageListenerFragment, messageListFragment, friendStatusListenerFragment;
|
||||||
private SavedState dialerSavedState;
|
private SavedState dialerSavedState;
|
||||||
private boolean preferLinphoneContacts = false, isAnimationDisabled = false, isContactPresenceDisabled = true;
|
private boolean preferLinphoneContacts = false, isAnimationDisabled = false, isContactPresenceDisabled = true;
|
||||||
|
@ -139,10 +137,9 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
boolean useFirstLoginActivity = getResources().getBoolean(R.bool.display_account_wizard_at_first_start);
|
boolean useFirstLoginActivity = getResources().getBoolean(R.bool.display_account_wizard_at_first_start);
|
||||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(this);
|
if (useFirstLoginActivity && LinphonePreferences.instance().isFirstLaunch()) {
|
||||||
if (useFirstLoginActivity && !pref.getBoolean(getString(R.string.first_launch_suceeded_once_key), false)) {
|
if (LinphonePreferences.instance().getAccountCount() > 0) {
|
||||||
if (pref.getInt(getString(R.string.pref_extra_accounts), -1) > -1) {
|
LinphonePreferences.instance().firstLaunchSuccessful();
|
||||||
pref.edit().putBoolean(getString(R.string.first_launch_suceeded_once_key), true);
|
|
||||||
} else {
|
} else {
|
||||||
startActivityForResult(new Intent().setClass(this, SetupActivity.class), FIRST_LOGIN_ACTIVITY);
|
startActivityForResult(new Intent().setClass(this, SetupActivity.class), FIRST_LOGIN_ACTIVITY);
|
||||||
}
|
}
|
||||||
|
@ -150,9 +147,11 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
|
|
||||||
setContentView(R.layout.main);
|
setContentView(R.layout.main);
|
||||||
instance = this;
|
instance = this;
|
||||||
|
fragmentsHistory = new ArrayList<FragmentsAvailable>();
|
||||||
initButtons();
|
initButtons();
|
||||||
|
|
||||||
currentFragment = nextFragment = FragmentsAvailable.DIALER;
|
currentFragment = nextFragment = FragmentsAvailable.DIALER;
|
||||||
|
fragmentsHistory.add(currentFragment);
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
if (findViewById(R.id.fragmentContainer) != null) {
|
if (findViewById(R.id.fragmentContainer) != null) {
|
||||||
dialerFragment = new DialerFragment();
|
dialerFragment = new DialerFragment();
|
||||||
|
@ -289,7 +288,7 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
dialerFragment = newFragment;
|
dialerFragment = newFragment;
|
||||||
break;
|
break;
|
||||||
case SETTINGS:
|
case SETTINGS:
|
||||||
newFragment = new PreferencesFragment();
|
newFragment = new SettingsFragment();
|
||||||
break;
|
break;
|
||||||
case ACCOUNT_SETTINGS:
|
case ACCOUNT_SETTINGS:
|
||||||
newFragment = new AccountPreferencesFragment();
|
newFragment = new AccountPreferencesFragment();
|
||||||
|
@ -320,8 +319,7 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAnimationsState() {
|
private void updateAnimationsState() {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
isAnimationDisabled = getResources().getBoolean(R.bool.disable_animations) || !LinphonePreferences.instance().areAnimationsEnabled();
|
||||||
isAnimationDisabled = getResources().getBoolean(R.bool.disable_animations) || !prefs.getBoolean(getString(R.string.pref_animation_enable_key), false);
|
|
||||||
isContactPresenceDisabled = !getResources().getBoolean(R.bool.enable_linphone_friends);
|
isContactPresenceDisabled = !getResources().getBoolean(R.bool.enable_linphone_friends);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -427,6 +425,10 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
getSupportFragmentManager().executePendingTransactions();
|
getSupportFragmentManager().executePendingTransactions();
|
||||||
|
|
||||||
currentFragment = newFragmentType;
|
currentFragment = newFragmentType;
|
||||||
|
if (currentFragment == FragmentsAvailable.DIALER) {
|
||||||
|
fragmentsHistory.clear();
|
||||||
|
}
|
||||||
|
fragmentsHistory.add(currentFragment);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void displayHistoryDetail(String sipUri, LinphoneCallLog log) {
|
public void displayHistoryDetail(String sipUri, LinphoneCallLog log) {
|
||||||
|
@ -674,32 +676,10 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
|
|
||||||
public void applyConfigChangesIfNeeded() {
|
public void applyConfigChangesIfNeeded() {
|
||||||
if (nextFragment != FragmentsAvailable.SETTINGS && nextFragment != FragmentsAvailable.ACCOUNT_SETTINGS) {
|
if (nextFragment != FragmentsAvailable.SETTINGS && nextFragment != FragmentsAvailable.ACCOUNT_SETTINGS) {
|
||||||
reloadConfig();
|
|
||||||
updateAnimationsState();
|
updateAnimationsState();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reloadConfig() {
|
|
||||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
|
|
||||||
if (lc != null && (lc.isInComingInvitePending() || lc.isIncall())) {
|
|
||||||
Log.w("Call in progress => settings not applied");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
LinphoneManager.getInstance().initFromConf();
|
|
||||||
lc.setVideoPolicy(LinphoneManager.getInstance().isAutoInitiateVideoCalls(), LinphoneManager.getInstance().isAutoAcceptCamera());
|
|
||||||
} catch (LinphoneException e) {
|
|
||||||
if (!(e instanceof LinphoneConfigException)) {
|
|
||||||
Log.e(e, "Cannot update config");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
LinphoneActivity.instance().showPreferenceErrorDialog(e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void displayAccountSettings(int accountNumber) {
|
public void displayAccountSettings(int accountNumber) {
|
||||||
Bundle bundle = new Bundle();
|
Bundle bundle = new Bundle();
|
||||||
bundle.putInt("Account", accountNumber);
|
bundle.putInt("Account", accountNumber);
|
||||||
|
@ -996,8 +976,7 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
}
|
}
|
||||||
|
|
||||||
sipUri = sipUri.replace("<", "").replace(">", "");
|
sipUri = sipUri.replace("<", "").replace(">", "");
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
|
if (LinphonePreferences.instance().shouldAutomaticallyAcceptFriendsRequests()) {
|
||||||
if (prefs.getBoolean(getString(R.string.pref_auto_accept_friends_key), false)) {
|
|
||||||
Contact contact = findContactWithSipAddress(sipUri);
|
Contact contact = findContactWithSipAddress(sipUri);
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
friend.enableSubscribes(true);
|
friend.enableSubscribes(true);
|
||||||
|
@ -1364,7 +1343,7 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||||
if (currentFragment == FragmentsAvailable.DIALER) {
|
if (currentFragment == FragmentsAvailable.DIALER) {
|
||||||
boolean isBackgroundModeActive = PreferenceManager.getDefaultSharedPreferences(this).getBoolean(getString(R.string.pref_background_mode_key), getResources().getBoolean(R.bool.pref_background_mode_default));
|
boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled();
|
||||||
if (!isBackgroundModeActive) {
|
if (!isBackgroundModeActive) {
|
||||||
stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
|
stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||||
finish();
|
finish();
|
||||||
|
@ -1380,7 +1359,6 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
|
|
||||||
if (currentFragment == FragmentsAvailable.SETTINGS) {
|
if (currentFragment == FragmentsAvailable.SETTINGS) {
|
||||||
showStatusBar();
|
showStatusBar();
|
||||||
reloadConfig();
|
|
||||||
updateAnimationsState();
|
updateAnimationsState();
|
||||||
} else if (currentFragment == FragmentsAvailable.CHATLIST) {
|
} else if (currentFragment == FragmentsAvailable.CHATLIST) {
|
||||||
//Hack to ensure display the status bar on some devices
|
//Hack to ensure display the status bar on some devices
|
||||||
|
@ -1388,9 +1366,28 @@ public class LinphoneActivity extends FragmentActivity implements
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (currentFragment == FragmentsAvailable.SETTINGS) {
|
if (currentFragment == FragmentsAvailable.SETTINGS) {
|
||||||
reloadConfig();
|
|
||||||
updateAnimationsState();
|
updateAnimationsState();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fragmentsHistory.remove(fragmentsHistory.size() - 1);
|
||||||
|
if (fragmentsHistory.size() > 0) {
|
||||||
|
FragmentsAvailable newFragmentType = fragmentsHistory.get(fragmentsHistory.size() - 1);
|
||||||
|
LinearLayout ll = (LinearLayout) findViewById(R.id.fragmentContainer2);
|
||||||
|
if (newFragmentType.shouldAddItselfToTheRightOf(currentFragment)) {
|
||||||
|
ll.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
if (newFragmentType == FragmentsAvailable.DIALER
|
||||||
|
|| newFragmentType == FragmentsAvailable.ABOUT
|
||||||
|
|| newFragmentType == FragmentsAvailable.ABOUT_INSTEAD_OF_CHAT
|
||||||
|
|| newFragmentType == FragmentsAvailable.ABOUT_INSTEAD_OF_SETTINGS
|
||||||
|
|| newFragmentType == FragmentsAvailable.SETTINGS
|
||||||
|
|| newFragmentType == FragmentsAvailable.ACCOUNT_SETTINGS) {
|
||||||
|
ll.setVisibility(View.GONE);
|
||||||
|
} else {
|
||||||
|
ll.setVisibility(View.INVISIBLE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (keyCode == KeyEvent.KEYCODE_MENU && statusFragment != null) {
|
} else if (keyCode == KeyEvent.KEYCODE_MENU && statusFragment != null) {
|
||||||
|
|
|
@ -20,7 +20,6 @@ package org.linphone;
|
||||||
|
|
||||||
import static android.content.Intent.ACTION_MAIN;
|
import static android.content.Intent.ACTION_MAIN;
|
||||||
|
|
||||||
import org.linphone.compatibility.Compatibility;
|
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
import org.linphone.tutorials.TutorialLauncherActivity;
|
import org.linphone.tutorials.TutorialLauncherActivity;
|
||||||
|
|
||||||
|
@ -58,11 +57,6 @@ public class LinphoneLauncherActivity extends Activity {
|
||||||
setContentView(R.layout.launcher);
|
setContentView(R.layout.launcher);
|
||||||
|
|
||||||
mHandler = new Handler();
|
mHandler = new Handler();
|
||||||
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.enable_push_id)) {
|
|
||||||
Compatibility.initPushNotificationService(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LinphoneService.isReady()) {
|
if (LinphoneService.isReady()) {
|
||||||
onServiceReady();
|
onServiceReady();
|
||||||
|
|
|
@ -21,12 +21,6 @@ package org.linphone;
|
||||||
import static android.media.AudioManager.MODE_RINGTONE;
|
import static android.media.AudioManager.MODE_RINGTONE;
|
||||||
import static android.media.AudioManager.STREAM_RING;
|
import static android.media.AudioManager.STREAM_RING;
|
||||||
import static android.media.AudioManager.STREAM_VOICE_CALL;
|
import static android.media.AudioManager.STREAM_VOICE_CALL;
|
||||||
import static org.linphone.R.string.pref_codec_amr_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_amrwb_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_ilbc_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_speex16_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_speex32_key;
|
|
||||||
import static org.linphone.R.string.pref_video_enable_key;
|
|
||||||
import static org.linphone.core.LinphoneCall.State.CallEnd;
|
import static org.linphone.core.LinphoneCall.State.CallEnd;
|
||||||
import static org.linphone.core.LinphoneCall.State.Error;
|
import static org.linphone.core.LinphoneCall.State.Error;
|
||||||
import static org.linphone.core.LinphoneCall.State.IncomingReceived;
|
import static org.linphone.core.LinphoneCall.State.IncomingReceived;
|
||||||
|
@ -51,7 +45,6 @@ import org.linphone.LinphoneSimpleListener.LinphoneServiceListener;
|
||||||
import org.linphone.compatibility.Compatibility;
|
import org.linphone.compatibility.Compatibility;
|
||||||
import org.linphone.core.CallDirection;
|
import org.linphone.core.CallDirection;
|
||||||
import org.linphone.core.LinphoneAddress;
|
import org.linphone.core.LinphoneAddress;
|
||||||
import org.linphone.core.LinphoneAuthInfo;
|
|
||||||
import org.linphone.core.LinphoneCall;
|
import org.linphone.core.LinphoneCall;
|
||||||
import org.linphone.core.LinphoneCall.State;
|
import org.linphone.core.LinphoneCall.State;
|
||||||
import org.linphone.core.LinphoneCallParams;
|
import org.linphone.core.LinphoneCallParams;
|
||||||
|
@ -61,11 +54,8 @@ import org.linphone.core.LinphoneChatRoom;
|
||||||
import org.linphone.core.LinphoneContent;
|
import org.linphone.core.LinphoneContent;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||||
import org.linphone.core.LinphoneCore.FirewallPolicy;
|
|
||||||
import org.linphone.core.LinphoneCore.GlobalState;
|
import org.linphone.core.LinphoneCore.GlobalState;
|
||||||
import org.linphone.core.LinphoneCore.MediaEncryption;
|
|
||||||
import org.linphone.core.LinphoneCore.RegistrationState;
|
import org.linphone.core.LinphoneCore.RegistrationState;
|
||||||
import org.linphone.core.LinphoneCore.Transports;
|
|
||||||
import org.linphone.core.LinphoneCoreException;
|
import org.linphone.core.LinphoneCoreException;
|
||||||
import org.linphone.core.LinphoneCoreFactory;
|
import org.linphone.core.LinphoneCoreFactory;
|
||||||
import org.linphone.core.LinphoneCoreListener;
|
import org.linphone.core.LinphoneCoreListener;
|
||||||
|
@ -96,7 +86,6 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.Editor;
|
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.hardware.Sensor;
|
import android.hardware.Sensor;
|
||||||
|
@ -142,16 +131,12 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
private Context mServiceContext;
|
private Context mServiceContext;
|
||||||
private AudioManager mAudioManager;
|
private AudioManager mAudioManager;
|
||||||
private PowerManager mPowerManager;
|
private PowerManager mPowerManager;
|
||||||
private ConnectivityManager mConnectivityManager;
|
|
||||||
private SharedPreferences mPref;
|
|
||||||
private Resources mR;
|
private Resources mR;
|
||||||
|
private LinphonePreferences mPrefs;
|
||||||
private LinphoneCore mLc;
|
private LinphoneCore mLc;
|
||||||
private static Transports initialTransports;
|
|
||||||
private static LinphonePreferenceManager sLPref;
|
|
||||||
private String lastLcStatusMessage;
|
private String lastLcStatusMessage;
|
||||||
private String basePath;
|
private String basePath;
|
||||||
private static boolean sExited;
|
private static boolean sExited;
|
||||||
private String contactParams;
|
|
||||||
private boolean mAudioFocused;
|
private boolean mAudioFocused;
|
||||||
private boolean isNetworkReachable;
|
private boolean isNetworkReachable;
|
||||||
|
|
||||||
|
@ -181,7 +166,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
mListenerDispatcher = new ListenerDispatcher(listener);
|
mListenerDispatcher = new ListenerDispatcher(listener);
|
||||||
basePath = c.getFilesDir().getAbsolutePath();
|
basePath = c.getFilesDir().getAbsolutePath();
|
||||||
mLPConfigXsd = basePath + "/lpconfig.xsd";
|
mLPConfigXsd = basePath + "/lpconfig.xsd";
|
||||||
mLinphoneInitialConfigFile = basePath + "/linphonerc";
|
mLinphoneFactoryConfigFile = basePath + "/linphonerc";
|
||||||
mLinphoneConfigFile = basePath + "/.linphonerc";
|
mLinphoneConfigFile = basePath + "/.linphonerc";
|
||||||
mLinphoneRootCaFile = basePath + "/rootca.pem";
|
mLinphoneRootCaFile = basePath + "/rootca.pem";
|
||||||
mRingSoundFile = basePath + "/oldphone_mono.wav";
|
mRingSoundFile = basePath + "/oldphone_mono.wav";
|
||||||
|
@ -189,12 +174,10 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
mPauseSoundFile = basePath + "/toy_mono.wav";
|
mPauseSoundFile = basePath + "/toy_mono.wav";
|
||||||
mChatDatabaseFile = basePath + "/linphone-history.db";
|
mChatDatabaseFile = basePath + "/linphone-history.db";
|
||||||
|
|
||||||
sLPref = LinphonePreferenceManager.getInstance(c);
|
mPrefs = LinphonePreferences.instance();
|
||||||
mAudioManager = ((AudioManager) c.getSystemService(Context.AUDIO_SERVICE));
|
mAudioManager = ((AudioManager) c.getSystemService(Context.AUDIO_SERVICE));
|
||||||
mVibrator = (Vibrator) c.getSystemService(Context.VIBRATOR_SERVICE);
|
mVibrator = (Vibrator) c.getSystemService(Context.VIBRATOR_SERVICE);
|
||||||
mPref = PreferenceManager.getDefaultSharedPreferences(c);
|
|
||||||
mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE);
|
mPowerManager = (PowerManager) c.getSystemService(Context.POWER_SERVICE);
|
||||||
mConnectivityManager = (ConnectivityManager) c.getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
||||||
mR = c.getResources();
|
mR = c.getResources();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -202,15 +185,15 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
private static final int dbStep = 4;
|
private static final int dbStep = 4;
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
private final String mLPConfigXsd;
|
private final String mLPConfigXsd;
|
||||||
private final String mLinphoneInitialConfigFile;
|
private final String mLinphoneFactoryConfigFile;
|
||||||
private final String mLinphoneRootCaFile;
|
private final String mLinphoneRootCaFile;
|
||||||
private final String mLinphoneConfigFile;
|
public final String mLinphoneConfigFile;
|
||||||
private final String mRingSoundFile;
|
private final String mRingSoundFile;
|
||||||
private final String mRingbackSoundFile;
|
private final String mRingbackSoundFile;
|
||||||
private final String mPauseSoundFile;
|
private final String mPauseSoundFile;
|
||||||
private final String mChatDatabaseFile;
|
private final String mChatDatabaseFile;
|
||||||
|
|
||||||
private Timer mTimer = new Timer("Linphone scheduler");
|
private Timer mTimer;
|
||||||
|
|
||||||
private BroadcastReceiver mKeepAliveReceiver = new KeepAliveReceiver();
|
private BroadcastReceiver mKeepAliveReceiver = new KeepAliveReceiver();
|
||||||
|
|
||||||
|
@ -414,9 +397,8 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
if (mLc.isNetworkReachable()) {
|
if (mLc.isNetworkReachable()) {
|
||||||
try {
|
try {
|
||||||
if (Version.isVideoCapable()) {
|
if (Version.isVideoCapable()) {
|
||||||
boolean prefVideoEnable = isVideoEnabled();
|
boolean prefVideoEnable = mPrefs.isVideoEnabled();
|
||||||
int key = R.string.pref_video_initiate_call_with_video_key;
|
boolean prefInitiateWithVideo = mPrefs.shouldInitiateVideoCall();
|
||||||
boolean prefInitiateWithVideo = getPrefBoolean(key, false);
|
|
||||||
CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo, isLowBandwidthConnection);
|
CallManager.getInstance().inviteAddress(lAddress, prefVideoEnable && prefInitiateWithVideo, isLowBandwidthConnection);
|
||||||
} else {
|
} else {
|
||||||
CallManager.getInstance().inviteAddress(lAddress, false, isLowBandwidthConnection);
|
CallManager.getInstance().inviteAddress(lAddress, false, isLowBandwidthConnection);
|
||||||
|
@ -435,7 +417,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void resetCameraFromPreferences() {
|
private void resetCameraFromPreferences() {
|
||||||
boolean useFrontCam = getPrefBoolean(R.string.pref_video_use_front_camera_key, mR.getBoolean(R.bool.pref_video_use_front_camera_default));
|
boolean useFrontCam = mPrefs.useFrontCam();
|
||||||
|
|
||||||
int camId = 0;
|
int camId = 0;
|
||||||
AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras();
|
AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras();
|
||||||
|
@ -469,6 +451,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void enableCamera(LinphoneCall call, boolean enable) {
|
public void enableCamera(LinphoneCall call, boolean enable) {
|
||||||
if (call != null) {
|
if (call != null) {
|
||||||
call.enableCamera(enable);
|
call.enableCamera(enable);
|
||||||
|
@ -507,7 +490,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
String pref = getPrefString(R.string.pref_tunnel_mode_key, R.string.default_tunnel_mode_entry_value);
|
String pref = mPrefs.getTunnelMode();
|
||||||
|
|
||||||
if (getString(R.string.tunnel_mode_entry_value_always).equals(pref)) {
|
if (getString(R.string.tunnel_mode_entry_value_always).equals(pref)) {
|
||||||
return true;
|
return true;
|
||||||
|
@ -532,7 +515,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
mLc.tunnelEnable(true);
|
mLc.tunnelEnable(true);
|
||||||
} else {
|
} else {
|
||||||
Log.i("Tunnel should not be used");
|
Log.i("Tunnel should not be used");
|
||||||
String pref = getPrefString(R.string.pref_tunnel_mode_key, R.string.default_tunnel_mode_entry_value);
|
String pref = mPrefs.getTunnelMode();
|
||||||
mLc.tunnelEnable(false);
|
mLc.tunnelEnable(false);
|
||||||
if (getString(R.string.tunnel_mode_entry_value_auto).equals(pref)) {
|
if (getString(R.string.tunnel_mode_entry_value_auto).equals(pref)) {
|
||||||
mLc.tunnelAutoDetect();
|
mLc.tunnelAutoDetect();
|
||||||
|
@ -544,59 +527,33 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
try {
|
try {
|
||||||
copyAssetsFromPackage();
|
copyAssetsFromPackage();
|
||||||
//traces alway start with traces enable to not missed first initialization
|
//traces alway start with traces enable to not missed first initialization
|
||||||
|
boolean isDebugLogEnabled = !(mR.getBoolean(R.bool.disable_every_log));
|
||||||
boolean isDebugLogEnabled = !(mR.getBoolean(R.bool.disable_every_log)) && getPrefBoolean(R.string.pref_debug_key, mR.getBoolean(R.bool.pref_debug_default));
|
|
||||||
LinphoneCoreFactory.instance().setDebugMode(isDebugLogEnabled, getString(R.string.app_name));
|
LinphoneCoreFactory.instance().setDebugMode(isDebugLogEnabled, getString(R.string.app_name));
|
||||||
|
|
||||||
// Try to get remote provisioning
|
// Try to get remote provisioning
|
||||||
String remote_provisioning = (getPrefString(R.string.pref_remote_provisioning_key, mR.getString(R.string.pref_remote_provisioning_default)));
|
// First check if there is a remote provisioning url in the old preferences API
|
||||||
|
|
||||||
|
String remote_provisioning = mPrefs.getRemoteProvisioningUrl();
|
||||||
if(remote_provisioning != null && remote_provisioning.length() > 0 && RemoteProvisioning.isAvailable()) {
|
if(remote_provisioning != null && remote_provisioning.length() > 0 && RemoteProvisioning.isAvailable()) {
|
||||||
RemoteProvisioning.download(remote_provisioning, mLinphoneConfigFile);
|
RemoteProvisioning.download(remote_provisioning, mLinphoneConfigFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
mLc = LinphoneCoreFactory.instance().createLinphoneCore(this, mLinphoneConfigFile, mLinphoneInitialConfigFile, null);
|
initLiblinphone(c);
|
||||||
mLc.getConfig().setInt("sip", "store_auth_info", 0);
|
|
||||||
mLc.setContext(c);
|
|
||||||
try {
|
|
||||||
String versionName = c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionName;
|
|
||||||
if (versionName == null) {
|
|
||||||
versionName = String.valueOf(c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionCode);
|
|
||||||
}
|
|
||||||
mLc.setUserAgent("LinphoneAndroid", versionName);
|
|
||||||
} catch (NameNotFoundException e) {
|
|
||||||
Log.e(e, "cannot get version name");
|
|
||||||
}
|
|
||||||
|
|
||||||
mLc.enableIpv6(getPrefBoolean(R.string.pref_ipv6_key, false));
|
|
||||||
mLc.setZrtpSecretsCache(basePath + "/zrtp_secrets");
|
|
||||||
|
|
||||||
mLc.setRing(null);
|
|
||||||
mLc.setRootCA(mLinphoneRootCaFile);
|
|
||||||
mLc.setPlayFile(mPauseSoundFile);
|
|
||||||
mLc.setChatDatabasePath(mChatDatabaseFile);
|
|
||||||
|
|
||||||
int availableCores = Runtime.getRuntime().availableProcessors();
|
|
||||||
Log.w("MediaStreamer : " + availableCores + " cores detected and configured");
|
|
||||||
mLc.setCpuCount(availableCores);
|
|
||||||
|
|
||||||
try {
|
PreferencesMigrator prefMigrator = new PreferencesMigrator(mServiceContext);
|
||||||
initFromConf();
|
if (prefMigrator.isMigrationNeeded()) {
|
||||||
} catch (LinphoneException e) {
|
prefMigrator.doMigration();
|
||||||
Log.w("no config ready yet");
|
}
|
||||||
|
|
||||||
|
if (mServiceContext.getResources().getBoolean(R.bool.enable_push_id)) {
|
||||||
|
Compatibility.initPushNotificationService(mServiceContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
TimerTask lTask = new TimerTask() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
mLc.iterate();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
/*use schedule instead of scheduleAtFixedRate to avoid iterate from being call in burst after cpu wake up*/
|
|
||||||
mTimer.schedule(lTask, 0, 20);
|
|
||||||
|
|
||||||
IntentFilter lFilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
|
IntentFilter lFilter = new IntentFilter(Intent.ACTION_SCREEN_ON);
|
||||||
lFilter.addAction(Intent.ACTION_SCREEN_OFF);
|
lFilter.addAction(Intent.ACTION_SCREEN_OFF);
|
||||||
mServiceContext.registerReceiver(mKeepAliveReceiver, lFilter);
|
mServiceContext.registerReceiver(mKeepAliveReceiver, lFilter);
|
||||||
|
|
||||||
|
updateNetworkReachability();
|
||||||
|
|
||||||
startBluetooth();
|
startBluetooth();
|
||||||
resetCameraFromPreferences();
|
resetCameraFromPreferences();
|
||||||
|
@ -605,21 +562,70 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
Log.e(e, "Cannot start linphone");
|
Log.e(e, "Cannot start linphone");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public synchronized void initLiblinphone(Context c) throws LinphoneCoreException {
|
||||||
|
boolean isDebugLogEnabled = !(mR.getBoolean(R.bool.disable_every_log)) && mPrefs.isDebugEnabled();
|
||||||
|
LinphoneCoreFactory.instance().setDebugMode(isDebugLogEnabled, getString(R.string.app_name));
|
||||||
|
|
||||||
|
mLc = LinphoneCoreFactory.instance().createLinphoneCore(this, mLinphoneConfigFile, mLinphoneFactoryConfigFile, null);
|
||||||
|
mLc.setContext(c);
|
||||||
|
try {
|
||||||
|
String versionName = c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionName;
|
||||||
|
if (versionName == null) {
|
||||||
|
versionName = String.valueOf(c.getPackageManager().getPackageInfo(c.getPackageName(), 0).versionCode);
|
||||||
|
}
|
||||||
|
mLc.setUserAgent("LinphoneAndroid", versionName);
|
||||||
|
} catch (NameNotFoundException e) {
|
||||||
|
Log.e(e, "cannot get version name");
|
||||||
|
}
|
||||||
|
|
||||||
|
mLc.setZrtpSecretsCache(basePath + "/zrtp_secrets");
|
||||||
|
|
||||||
|
mLc.setRing(mPrefs.getRingtone(null));
|
||||||
|
mLc.setRootCA(mLinphoneRootCaFile);
|
||||||
|
mLc.setPlayFile(mPauseSoundFile);
|
||||||
|
mLc.setChatDatabasePath(mChatDatabaseFile);
|
||||||
|
|
||||||
|
int availableCores = Runtime.getRuntime().availableProcessors();
|
||||||
|
Log.w("MediaStreamer : " + availableCores + " cores detected and configured");
|
||||||
|
mLc.setCpuCount(availableCores);
|
||||||
|
|
||||||
|
int camId = 0;
|
||||||
|
AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras();
|
||||||
|
for (AndroidCamera androidCamera : cameras) {
|
||||||
|
if (androidCamera.frontFacing == mPrefs.useFrontCam())
|
||||||
|
camId = androidCamera.id;
|
||||||
|
}
|
||||||
|
LinphoneManager.getLc().setVideoDevice(camId);
|
||||||
|
|
||||||
|
TimerTask lTask = new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
mLc.iterate();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/*use schedule instead of scheduleAtFixedRate to avoid iterate from being call in burst after cpu wake up*/
|
||||||
|
mTimer = new Timer("Linphone scheduler");
|
||||||
|
mTimer.schedule(lTask, 0, 20);
|
||||||
|
}
|
||||||
|
|
||||||
private void copyAssetsFromPackage() throws IOException {
|
private void copyAssetsFromPackage() throws IOException {
|
||||||
copyIfNotExist(R.raw.oldphone_mono,mRingSoundFile);
|
copyIfNotExist(R.raw.oldphone_mono,mRingSoundFile);
|
||||||
copyIfNotExist(R.raw.ringback,mRingbackSoundFile);
|
copyIfNotExist(R.raw.ringback,mRingbackSoundFile);
|
||||||
copyIfNotExist(R.raw.toy_mono,mPauseSoundFile);
|
copyIfNotExist(R.raw.toy_mono,mPauseSoundFile);
|
||||||
copyFromPackage(R.raw.linphonerc, new File(mLinphoneInitialConfigFile).getName());
|
copyIfNotExist(R.raw.linphonerc_default, mLinphoneConfigFile);
|
||||||
copyIfNotExist(R.raw.lpconfig, new File(mLPConfigXsd).getName());
|
copyFromPackage(R.raw.linphonerc_factory, new File(mLinphoneFactoryConfigFile).getName());
|
||||||
copyIfNotExist(R.raw.rootca, new File(mLinphoneRootCaFile).getName());
|
copyIfNotExist(R.raw.lpconfig, mLPConfigXsd);
|
||||||
|
copyIfNotExist(R.raw.rootca, mLinphoneRootCaFile);
|
||||||
}
|
}
|
||||||
private void copyIfNotExist(int ressourceId,String target) throws IOException {
|
|
||||||
|
private void copyIfNotExist(int ressourceId,String target) throws IOException {
|
||||||
File lFileToCopy = new File(target);
|
File lFileToCopy = new File(target);
|
||||||
if (!lFileToCopy.exists()) {
|
if (!lFileToCopy.exists()) {
|
||||||
copyFromPackage(ressourceId,lFileToCopy.getName());
|
copyFromPackage(ressourceId,lFileToCopy.getName());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copyFromPackage(int ressourceId,String target) throws IOException{
|
private void copyFromPackage(int ressourceId,String target) throws IOException{
|
||||||
FileOutputStream lOutputStream = mServiceContext.openFileOutput (target, 0);
|
FileOutputStream lOutputStream = mServiceContext.openFileOutput (target, 0);
|
||||||
InputStream lInputStream = mR.openRawResource(ressourceId);
|
InputStream lInputStream = mR.openRawResource(ressourceId);
|
||||||
|
@ -646,267 +652,6 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void initMediaEncryption(){
|
|
||||||
String pref = getPrefString(R.string.pref_media_encryption_key, R.string.pref_media_encryption_key_none);
|
|
||||||
MediaEncryption me=MediaEncryption.None;
|
|
||||||
if (pref.equals(getString(R.string.pref_media_encryption_key_srtp)))
|
|
||||||
me = MediaEncryption.SRTP;
|
|
||||||
else if (pref.equals(getString(R.string.pref_media_encryption_key_zrtp)))
|
|
||||||
me = MediaEncryption.ZRTP;
|
|
||||||
Log.i("Media encryption set to " + pref);
|
|
||||||
mLc.setMediaEncryption(me);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initFromConfTunnel(){
|
|
||||||
if (!mLc.isTunnelAvailable())
|
|
||||||
return;
|
|
||||||
|
|
||||||
NetworkInfo info = mConnectivityManager.getActiveNetworkInfo();
|
|
||||||
mLc.tunnelCleanServers();
|
|
||||||
String host = getString(R.string.tunnel_host);
|
|
||||||
if (host == null || host.length() == 0)
|
|
||||||
host = mPref.getString(getString(R.string.pref_tunnel_host_key), "");
|
|
||||||
int port = Integer.parseInt(getPrefString(R.string.pref_tunnel_port_key, "443"));
|
|
||||||
mLc.tunnelAddServerAndMirror(host, port, 12345,500);
|
|
||||||
manageTunnelServer(info);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initAccounts() throws LinphoneCoreException {
|
|
||||||
mLc.clearAuthInfos();
|
|
||||||
mLc.clearProxyConfigs();
|
|
||||||
|
|
||||||
for (int i = 0; i < getPrefExtraAccountsNumber(); i++) {
|
|
||||||
String key = i == 0 ? "" : String.valueOf(i);
|
|
||||||
if (!getPrefBoolean(getString(R.string.pref_disable_account_key) + key, false)) {
|
|
||||||
initAccount(key, i == getPrefInt(R.string.pref_default_account_key, 0));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
LinphoneProxyConfig lDefaultProxyConfig = mLc.getDefaultProxyConfig();
|
|
||||||
if (lDefaultProxyConfig != null) {
|
|
||||||
//prefix
|
|
||||||
String lPrefix = getPrefString(R.string.pref_prefix_key, null);
|
|
||||||
if (lPrefix != null) {
|
|
||||||
lDefaultProxyConfig.setDialPrefix(lPrefix);
|
|
||||||
}
|
|
||||||
//escape +
|
|
||||||
lDefaultProxyConfig.setDialEscapePlus(getPrefBoolean(R.string.pref_escape_plus_key, false));
|
|
||||||
} else if (LinphoneService.isReady()) {
|
|
||||||
LinphoneService.instance().onRegistrationStateChanged(RegistrationState.RegistrationNone, null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initAccount(String key, boolean defaultAccount) throws LinphoneCoreException {
|
|
||||||
String username = getPrefString(getString(R.string.pref_username_key) + key, null);
|
|
||||||
String userid = getPrefString(getString(R.string.pref_auth_userid_key) + key, null);
|
|
||||||
String password = getPrefString(getString(R.string.pref_passwd_key) + key, null);
|
|
||||||
String domain = getPrefString(getString(R.string.pref_domain_key) + key, null);
|
|
||||||
if (username != null && username.length() > 0 && password != null) {
|
|
||||||
LinphoneAuthInfo lAuthInfo = LinphoneCoreFactory.instance().createAuthInfo(username
|
|
||||||
, userid
|
|
||||||
, password
|
|
||||||
, null
|
|
||||||
,null);
|
|
||||||
mLc.addAuthInfo(lAuthInfo);
|
|
||||||
|
|
||||||
if (domain != null && domain.length() > 0) {
|
|
||||||
String identity = "sip:" + username +"@" + domain;
|
|
||||||
String proxy = getPrefString(getString(R.string.pref_proxy_key) + key, null);
|
|
||||||
if (proxy == null || proxy.length() == 0) {
|
|
||||||
proxy = "sip:" + domain;
|
|
||||||
}
|
|
||||||
if (!proxy.startsWith("sip:")) {
|
|
||||||
proxy = "sip:" + proxy;
|
|
||||||
}
|
|
||||||
|
|
||||||
LinphoneProxyConfig proxycon = LinphoneCoreFactory.instance().createProxyConfig(identity, proxy, null, true);
|
|
||||||
String defaultExpire = getString(R.string.pref_expire_default);
|
|
||||||
proxycon.setExpires(tryToParseIntValue(getPrefString(R.string.pref_expire_key, defaultExpire), defaultExpire));
|
|
||||||
|
|
||||||
// Add parameters for push notifications
|
|
||||||
if (mR.getBoolean(R.bool.enable_push_id)) {
|
|
||||||
String regId = getPrefString(R.string.push_reg_id_key, null);
|
|
||||||
String appId = getString(R.string.push_sender_id);
|
|
||||||
if (regId != null && getPrefBoolean(R.string.pref_push_notification_key, mR.getBoolean(R.bool.pref_push_notification_default))) {
|
|
||||||
String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId + ";pn-msg-str=IM_MSG;pn-call-str=IC_MSG;pn-call-snd=ring.caf;pn-msg-snd=msg.caf";
|
|
||||||
proxycon.setContactParameters(contactInfos);
|
|
||||||
}
|
|
||||||
} else if (contactParams != null) {
|
|
||||||
proxycon.setContactParameters(contactParams);
|
|
||||||
}
|
|
||||||
mLc.addProxyConfig(proxycon);
|
|
||||||
|
|
||||||
//outbound proxy
|
|
||||||
if (getPrefBoolean(getString(R.string.pref_enable_outbound_proxy_key) + key, false)) {
|
|
||||||
proxycon.setRoute(proxy);
|
|
||||||
} else {
|
|
||||||
proxycon.setRoute(null);
|
|
||||||
}
|
|
||||||
proxycon.done();
|
|
||||||
|
|
||||||
if (defaultAccount) {
|
|
||||||
mLc.setDefaultProxyConfig(proxycon);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readAndSetAudioAndVideoPorts() throws NumberFormatException {
|
|
||||||
int aPortStart, aPortEnd, vPortStart, vPortEnd;
|
|
||||||
int defaultAudioPort, defaultVideoPort;
|
|
||||||
defaultAudioPort = Integer.parseInt(getString(R.string.default_audio_port));
|
|
||||||
defaultVideoPort = Integer.parseInt(getString(R.string.default_video_port));
|
|
||||||
aPortStart = aPortEnd = defaultAudioPort;
|
|
||||||
vPortStart = vPortEnd = defaultVideoPort;
|
|
||||||
|
|
||||||
String audioPort = getPrefString(R.string.pref_audio_port_key, String.valueOf(aPortStart));
|
|
||||||
String videoPort = getPrefString(R.string.pref_video_port_key, String.valueOf(vPortStart));
|
|
||||||
|
|
||||||
if (audioPort.contains("-")) {
|
|
||||||
// Port range
|
|
||||||
aPortStart = Integer.parseInt(audioPort.split("-")[0]);
|
|
||||||
aPortEnd = Integer.parseInt(audioPort.split("-")[1]);
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
aPortStart = aPortEnd = Integer.parseInt(audioPort);
|
|
||||||
} catch (NumberFormatException nfe) {
|
|
||||||
aPortStart = aPortEnd = defaultAudioPort;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (videoPort.contains("-")) {
|
|
||||||
// Port range
|
|
||||||
vPortStart = Integer.parseInt(videoPort.split("-")[0]);
|
|
||||||
vPortEnd = Integer.parseInt(videoPort.split("-")[1]);
|
|
||||||
} else {
|
|
||||||
try {
|
|
||||||
vPortStart = vPortEnd = Integer.parseInt(videoPort);
|
|
||||||
} catch (NumberFormatException nfe) {
|
|
||||||
vPortStart = vPortEnd = defaultVideoPort;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (aPortStart >= aPortEnd) {
|
|
||||||
mLc.setAudioPort(aPortStart);
|
|
||||||
} else {
|
|
||||||
mLc.setAudioPortRange(aPortStart, aPortEnd);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (vPortStart >= vPortEnd) {
|
|
||||||
mLc.setVideoPort(vPortStart);
|
|
||||||
} else {
|
|
||||||
mLc.setVideoPortRange(vPortStart, vPortEnd);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private int tryToParseIntValue(String valueToParse, String defaultValue) {
|
|
||||||
return tryToParseIntValue(valueToParse, Integer.parseInt(defaultValue));
|
|
||||||
}
|
|
||||||
|
|
||||||
private int tryToParseIntValue(String valueToParse, int defaultValue) {
|
|
||||||
try {
|
|
||||||
int returned = Integer.parseInt(valueToParse);
|
|
||||||
return returned;
|
|
||||||
} catch (NumberFormatException nfe) {
|
|
||||||
|
|
||||||
}
|
|
||||||
return defaultValue;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setContactParams(String params) {
|
|
||||||
contactParams = params;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void initFromConf() throws LinphoneConfigException {
|
|
||||||
boolean isDebugLogEnabled = !(mR.getBoolean(R.bool.disable_every_log)) && getPrefBoolean(R.string.pref_debug_key, mR.getBoolean(R.bool.pref_debug_default));
|
|
||||||
LinphoneCoreFactory.instance().setDebugMode(isDebugLogEnabled, getString(R.string.app_name));
|
|
||||||
initFromConfTunnel();
|
|
||||||
|
|
||||||
if (initialTransports == null)
|
|
||||||
initialTransports = mLc.getSignalingTransportPorts();
|
|
||||||
|
|
||||||
setSignalingTransportsFromConfiguration(initialTransports);
|
|
||||||
initMediaEncryption();
|
|
||||||
|
|
||||||
mLc.setVideoPolicy(isAutoInitiateVideoCalls(), isAutoAcceptCamera());
|
|
||||||
|
|
||||||
readAndSetAudioAndVideoPorts();
|
|
||||||
|
|
||||||
String defaultIncomingCallTimeout = getString(R.string.pref_incoming_call_timeout_default);
|
|
||||||
int incomingCallTimeout = tryToParseIntValue(getPrefString(R.string.pref_incoming_call_timeout_key, defaultIncomingCallTimeout), defaultIncomingCallTimeout);
|
|
||||||
mLc.setIncomingTimeout(incomingCallTimeout);
|
|
||||||
|
|
||||||
try {
|
|
||||||
// Configure audio codecs
|
|
||||||
// enableDisableAudioCodec("speex", 32000, 1, R.string.pref_codec_speex32_key);
|
|
||||||
enableDisableAudioCodec("speex", 32000, 1, false);
|
|
||||||
enableDisableAudioCodec("speex", 16000, 1, R.string.pref_codec_speex16_key);
|
|
||||||
enableDisableAudioCodec("speex", 8000, 1, R.string.pref_codec_speex8_key);
|
|
||||||
enableDisableAudioCodec("iLBC", 8000, 1, R.string.pref_codec_ilbc_key);
|
|
||||||
enableDisableAudioCodec("GSM", 8000, 1, R.string.pref_codec_gsm_key);
|
|
||||||
enableDisableAudioCodec("G722", 8000, 1, R.string.pref_codec_g722_key);
|
|
||||||
enableDisableAudioCodec("G729", 8000, 1, R.string.pref_codec_g729_key);
|
|
||||||
enableDisableAudioCodec("PCMU", 8000, 1, R.string.pref_codec_pcmu_key);
|
|
||||||
enableDisableAudioCodec("PCMA", 8000, 1, R.string.pref_codec_pcma_key);
|
|
||||||
enableDisableAudioCodec("AMR", 8000, 1, R.string.pref_codec_amr_key);
|
|
||||||
enableDisableAudioCodec("AMR-WB", 16000, 1, R.string.pref_codec_amrwb_key);
|
|
||||||
//enableDisableAudioCodec("SILK", 24000, 1, R.string.pref_codec_silk24_key);
|
|
||||||
enableDisableAudioCodec("SILK", 24000, 1, false);
|
|
||||||
enableDisableAudioCodec("SILK", 16000, 1, R.string.pref_codec_silk16_key);
|
|
||||||
//enableDisableAudioCodec("SILK", 12000, 1, R.string.pref_codec_silk12_key);
|
|
||||||
enableDisableAudioCodec("SILK", 12000, 1, false);
|
|
||||||
enableDisableAudioCodec("SILK", 8000, 1, R.string.pref_codec_silk8_key);
|
|
||||||
enableDisableAudioCodec("OPUS", 48000, 1, R.string.pref_codec_opus_key);
|
|
||||||
|
|
||||||
// Configure video codecs
|
|
||||||
for (PayloadType videoCodec : mLc.getVideoCodecs()) {
|
|
||||||
enableDisableVideoCodecs(videoCodec);
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean useEC = getPrefBoolean(R.string.pref_echo_cancellation_key, mR.getBoolean(R.bool.pref_echo_canceller_default));
|
|
||||||
mLc.enableEchoCancellation(useEC);
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
throw new LinphoneConfigException(getString(R.string.wrong_settings),e);
|
|
||||||
}
|
|
||||||
boolean isVideoEnabled = isVideoEnabled();
|
|
||||||
mLc.enableVideo(isVideoEnabled, isVideoEnabled);
|
|
||||||
setPreferredVideoSizeFromConfiguration();
|
|
||||||
|
|
||||||
//stun server
|
|
||||||
String lStun = getPrefString(R.string.pref_stun_server_key, getString(R.string.default_stun));
|
|
||||||
boolean useICE = getPrefBoolean(R.string.pref_ice_enable_key, mR.getBoolean(R.bool.pref_ice_enabled_default));
|
|
||||||
boolean useUpnp = getPrefBoolean(R.string.pref_upnp_enable_key, mR.getBoolean(R.bool.pref_upnp_enabled_default));
|
|
||||||
|
|
||||||
mLc.setStunServer(lStun);
|
|
||||||
if (lStun!=null && lStun.length()>0 && useICE) {
|
|
||||||
mLc.setFirewallPolicy(FirewallPolicy.UseIce);
|
|
||||||
if (useUpnp) Log.e("Cannot have both ice and upnp enabled, disabling upnp");
|
|
||||||
} else if (useUpnp) {
|
|
||||||
mLc.setFirewallPolicy(FirewallPolicy.UseUpnp);
|
|
||||||
} else if (lStun!=null && lStun.length()>0){
|
|
||||||
mLc.setFirewallPolicy(FirewallPolicy.UseStun);
|
|
||||||
} else {
|
|
||||||
mLc.setFirewallPolicy(FirewallPolicy.NoFirewall);
|
|
||||||
}
|
|
||||||
|
|
||||||
mLc.setUseRfc2833ForDtmfs(getPrefBoolean(R.string.pref_rfc2833_dtmf_key, mR.getBoolean(R.bool.pref_rfc2833_dtmf_default)));
|
|
||||||
mLc.setUseSipInfoForDtmfs(getPrefBoolean(R.string.pref_sipinfo_dtmf_key, mR.getBoolean(R.bool.pref_sipinfo_dtmf_default)));
|
|
||||||
|
|
||||||
String displayName = getPrefString(R.string.pref_display_name_key, getString(R.string.pref_display_name_default));
|
|
||||||
String username = getPrefString(R.string.pref_user_name_key, getString(R.string.pref_user_name_default));
|
|
||||||
mLc.setPrimaryContact(displayName, username);
|
|
||||||
|
|
||||||
//accounts
|
|
||||||
try {
|
|
||||||
initAccounts();
|
|
||||||
|
|
||||||
//init network state
|
|
||||||
updateNetworkReachability();
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
throw new LinphoneConfigException(getString(R.string.wrong_settings),e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateNetworkReachability() {
|
public void updateNetworkReachability() {
|
||||||
ConnectivityManager cm = (ConnectivityManager) mServiceContext.getSystemService(Context.CONNECTIVITY_SERVICE);
|
ConnectivityManager cm = (ConnectivityManager) mServiceContext.getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||||
|
@ -920,8 +665,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
}
|
}
|
||||||
} else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){
|
} else if (eventInfo.getState() == NetworkInfo.State.CONNECTED){
|
||||||
manageTunnelServer(eventInfo);
|
manageTunnelServer(eventInfo);
|
||||||
SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(mServiceContext);
|
boolean wifiOnly = LinphonePreferences.instance().isWifiOnlyEnabled();
|
||||||
boolean wifiOnly = pref.getBoolean(getString(R.string.pref_wifi_only_key), mR.getBoolean(R.bool.pref_wifi_only_default));
|
|
||||||
if ((eventInfo.getTypeName().equals("WIFI")) || (!eventInfo.getTypeName().equals("WIFI") && !wifiOnly)) {
|
if ((eventInfo.getTypeName().equals("WIFI")) || (!eventInfo.getTypeName().equals("WIFI") && !wifiOnly)) {
|
||||||
if (!isNetworkReachable) {
|
if (!isNetworkReachable) {
|
||||||
isNetworkReachable = true;
|
isNetworkReachable = true;
|
||||||
|
@ -937,96 +681,6 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setSignalingTransportsFromConfiguration(Transports t) {
|
|
||||||
Transports ports = new Transports(t);
|
|
||||||
boolean useRandomPort = getPrefBoolean(R.string.pref_transport_use_random_ports_key, mR.getBoolean(R.bool.pref_transport_use_random_ports_default));
|
|
||||||
int lPreviousPort = tryToParseIntValue(getPrefString(R.string.pref_sip_port_key, getString(R.string.pref_sip_port_default)), 5060);
|
|
||||||
if (lPreviousPort>0xFFFF || useRandomPort) {
|
|
||||||
lPreviousPort=(int)(Math.random() * (0xFFFF - 1024)) + 1024;
|
|
||||||
Log.w("Using random port " + lPreviousPort);
|
|
||||||
}
|
|
||||||
|
|
||||||
String transport = getPrefString(R.string.pref_transport_key, getString(R.string.pref_transport_udp_key));
|
|
||||||
if (transport.equals(getString(R.string.pref_transport_tcp_key)))
|
|
||||||
{
|
|
||||||
ports.udp = 0;
|
|
||||||
ports.tls = 0;
|
|
||||||
ports.tcp = lPreviousPort;
|
|
||||||
} else if (transport.equals(getString(R.string.pref_transport_udp_key)))
|
|
||||||
{
|
|
||||||
ports.tcp = 0;
|
|
||||||
ports.tls = 0;
|
|
||||||
ports.udp = lPreviousPort;
|
|
||||||
} else if (transport.equals(getString(R.string.pref_transport_tls_key)))
|
|
||||||
{
|
|
||||||
ports.udp = 0;
|
|
||||||
ports.tcp = 0;
|
|
||||||
ports.tls = lPreviousPort;
|
|
||||||
}
|
|
||||||
|
|
||||||
mLc.setSignalingTransportPorts(ports);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void enableDisableAudioCodec(String codec, int rate, int channels, int key) throws LinphoneCoreException {
|
|
||||||
PayloadType pt = mLc.findPayloadType(codec, rate, channels);
|
|
||||||
if (pt !=null) {
|
|
||||||
boolean enable= getPrefBoolean(key,false);
|
|
||||||
mLc.enablePayloadType(pt, enable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
private void enableDisableAudioCodec(String codec, int rate, int channels, boolean enable) throws LinphoneCoreException {
|
|
||||||
PayloadType pt = mLc.findPayloadType(codec, rate, channels);
|
|
||||||
if (pt !=null) {
|
|
||||||
mLc.enablePayloadType(pt, enable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void enableDisableVideoCodecs(PayloadType videoCodec) throws LinphoneCoreException {
|
|
||||||
String mime = videoCodec.getMime();
|
|
||||||
int key;
|
|
||||||
int defaultValueKey;
|
|
||||||
|
|
||||||
if ("MP4V-ES".equals(mime)) {
|
|
||||||
key = R.string.pref_video_codec_mpeg4_key;
|
|
||||||
defaultValueKey = R.bool.pref_video_codec_mpeg4_default;
|
|
||||||
} else if ("H264".equals(mime)) {
|
|
||||||
key = R.string.pref_video_codec_h264_key;
|
|
||||||
defaultValueKey = R.bool.pref_video_codec_h264_default;
|
|
||||||
} else if ("H263-1998".equals(mime)) {
|
|
||||||
key = R.string.pref_video_codec_h263_key;
|
|
||||||
defaultValueKey = R.bool.pref_video_codec_h263_default;
|
|
||||||
} else if ("VP8".equals(mime)) {
|
|
||||||
key = R.string.pref_video_codec_vp8_key;
|
|
||||||
defaultValueKey = R.bool.pref_video_codec_vp8_default;
|
|
||||||
} else {
|
|
||||||
Log.e("Unhandled video codec ", mime);
|
|
||||||
mLc.enablePayloadType(videoCodec, false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean enable = getPrefBoolean(key, mR.getBoolean(defaultValueKey));
|
|
||||||
mLc.enablePayloadType(videoCodec, enable);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void setPreferredVideoSizeFromConfiguration() {
|
|
||||||
String preferredVideoSize = getPrefString(R.string.pref_preferred_video_size_key, getString(R.string.pref_preferred_video_size_vga_key));
|
|
||||||
int bandwidth = 512 + 60;
|
|
||||||
if (preferredVideoSize.equals(getString(R.string.pref_preferred_video_size_hd_key))) {
|
|
||||||
preferredVideoSize = "uxga";
|
|
||||||
bandwidth = 1024 + 60;
|
|
||||||
} else if (preferredVideoSize.equals(getString(R.string.pref_preferred_video_size_vga_key))) {
|
|
||||||
preferredVideoSize = "vga";
|
|
||||||
bandwidth = 512 + 60;
|
|
||||||
} else if (preferredVideoSize.equals(getString(R.string.pref_preferred_video_size_qvga_key))) {
|
|
||||||
preferredVideoSize = "qvga";
|
|
||||||
bandwidth = 380 + 60;
|
|
||||||
}
|
|
||||||
|
|
||||||
mLc.setPreferredVideoSizeByName(preferredVideoSize);
|
|
||||||
mLc.setUploadBandwidth(bandwidth);
|
|
||||||
mLc.setDownloadBandwidth(bandwidth);
|
|
||||||
}
|
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||||
private void doDestroy() {
|
private void doDestroy() {
|
||||||
|
@ -1064,28 +718,6 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
private String getString(int key) {
|
private String getString(int key) {
|
||||||
return mR.getString(key);
|
return mR.getString(key);
|
||||||
}
|
}
|
||||||
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), 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Simple implementation as Android way seems very complicate:
|
/* Simple implementation as Android way seems very complicate:
|
||||||
For example: with wifi and mobile actives; when pulling mobile down:
|
For example: with wifi and mobile actives; when pulling mobile down:
|
||||||
|
@ -1241,7 +873,9 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
return InCallActivity.instance();
|
return InCallActivity.instance();
|
||||||
else if (IncomingCallActivity.isInstanciated())
|
else if (IncomingCallActivity.isInstanciated())
|
||||||
return IncomingCallActivity.instance();
|
return IncomingCallActivity.instance();
|
||||||
else
|
else if (mServiceContext != null)
|
||||||
|
return mServiceContext;
|
||||||
|
else if (LinphoneService.isReady())
|
||||||
return LinphoneService.instance().getApplicationContext();
|
return LinphoneService.instance().getApplicationContext();
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -1285,7 +919,7 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
Compatibility.setAudioManagerInCallMode(mAudioManager);
|
Compatibility.setAudioManagerInCallMode(mAudioManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Hacks.needSoftvolume() || sLPref.useSoftvolume()) {
|
if (Hacks.needSoftvolume() || LinphonePreferences.instance().shouldUseSoftvolume()) {
|
||||||
adjustVolume(0); // Synchronize
|
adjustVolume(0); // Synchronize
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1452,55 +1086,6 @@ public class LinphoneManager implements LinphoneCoreListener {
|
||||||
return CallManager.getInstance().reinviteWithVideo();
|
return CallManager.getInstance().reinviteWithVideo();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isVideoEnabled() {
|
|
||||||
return getPrefBoolean(R.string.pref_video_enable_key, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAutoAcceptCamera() {
|
|
||||||
return isVideoEnabled() && getPrefBoolean(R.string.pref_video_automatically_accept_video_key, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAutoInitiateVideoCalls() {
|
|
||||||
return isVideoEnabled() && getPrefBoolean(R.string.pref_video_initiate_call_with_video_key, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Called on first launch only
|
|
||||||
public void initializePayloads() {
|
|
||||||
Log.i("Initializing supported payloads");
|
|
||||||
Editor e = mPref.edit();
|
|
||||||
boolean fastCpu = Version.hasFastCpu();
|
|
||||||
|
|
||||||
e.putBoolean(getString(R.string.pref_codec_gsm_key), true);
|
|
||||||
e.putBoolean(getString(R.string.pref_codec_pcma_key), true);
|
|
||||||
e.putBoolean(getString(R.string.pref_codec_pcmu_key), true);
|
|
||||||
e.putBoolean(getString(R.string.pref_codec_speex8_key), true);
|
|
||||||
e.putBoolean(getString(R.string.pref_codec_g722_key), false);
|
|
||||||
e.putBoolean(getString(pref_codec_speex16_key), fastCpu);
|
|
||||||
e.putBoolean(getString(pref_codec_speex32_key), fastCpu);
|
|
||||||
|
|
||||||
boolean ilbc = LinphoneService.isReady() && LinphoneManager.getLc()
|
|
||||||
.findPayloadType("iLBC", 8000, 1)!=null;
|
|
||||||
e.putBoolean(getString(pref_codec_ilbc_key), ilbc);
|
|
||||||
|
|
||||||
boolean amr = LinphoneService.isReady() && LinphoneManager.getLc()
|
|
||||||
.findPayloadType("AMR", 8000, 1)!=null;
|
|
||||||
e.putBoolean(getString(pref_codec_amr_key), amr);
|
|
||||||
|
|
||||||
boolean amrwb = LinphoneService.isReady() && LinphoneManager.getLc()
|
|
||||||
.findPayloadType("AMR-WB", 16000, 1)!=null;
|
|
||||||
e.putBoolean(getString(pref_codec_amrwb_key), amrwb);
|
|
||||||
|
|
||||||
boolean g729 = LinphoneService.isReady() && LinphoneManager.getLc()
|
|
||||||
.findPayloadType("G729", 8000, 1)!=null;
|
|
||||||
e.putBoolean(getString(R.string.pref_codec_g729_key), g729);
|
|
||||||
|
|
||||||
if (Version.sdkStrictlyBelow(5) || !Version.hasNeon() || !Hacks.hasCamera()) {
|
|
||||||
e.putBoolean(getString(pref_video_enable_key), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
* @return false if already in video call.
|
* @return false if already in video call.
|
||||||
|
|
|
@ -1,66 +0,0 @@
|
||||||
/*
|
|
||||||
PreferenceManager.java
|
|
||||||
Copyright (C) 2011 Belledonne Communications, Grenoble, France
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
package org.linphone;
|
|
||||||
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
|
|
||||||
public class LinphonePreferenceManager {
|
|
||||||
|
|
||||||
private static LinphonePreferenceManager instance;
|
|
||||||
private Context c;
|
|
||||||
private SharedPreferences p;
|
|
||||||
|
|
||||||
public LinphonePreferenceManager(Context context) {
|
|
||||||
c = context.getApplicationContext();
|
|
||||||
p = PreferenceManager.getDefaultSharedPreferences(c);
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getString(int key) {
|
|
||||||
return c.getString(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean useSoftvolume() {
|
|
||||||
return p.getBoolean(
|
|
||||||
getString(R.string.pref_audio_soft_volume_key), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean useAudioRoutingAPIHack() {
|
|
||||||
return p.getBoolean(
|
|
||||||
getString(R.string.pref_audio_hacks_use_routing_api_key), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean useGalaxySHack() {
|
|
||||||
return p.getBoolean(
|
|
||||||
getString(R.string.pref_audio_hacks_use_galaxys_hack_key), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public int useSpecificAudioModeHack() {
|
|
||||||
return Integer.parseInt(p.getString(getString(R.string.pref_audio_use_specific_mode_key), "0"));
|
|
||||||
}
|
|
||||||
|
|
||||||
public static final synchronized LinphonePreferenceManager getInstance(Context c) {
|
|
||||||
if (instance == null) {
|
|
||||||
instance = new LinphonePreferenceManager(c.getApplicationContext());
|
|
||||||
}
|
|
||||||
return instance;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
714
src/org/linphone/LinphonePreferences.java
Normal file
714
src/org/linphone/LinphonePreferences.java
Normal file
|
@ -0,0 +1,714 @@
|
||||||
|
package org.linphone;
|
||||||
|
|
||||||
|
/*
|
||||||
|
LinphonePreferences.java
|
||||||
|
Copyright (C) 2013 Belledonne Communications, Grenoble, France
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.linphone.core.LinphoneAddress;
|
||||||
|
import org.linphone.core.LinphoneAuthInfo;
|
||||||
|
import org.linphone.core.LinphoneCore;
|
||||||
|
import org.linphone.core.LinphoneCore.FirewallPolicy;
|
||||||
|
import org.linphone.core.LinphoneCore.MediaEncryption;
|
||||||
|
import org.linphone.core.LinphoneCore.Transports;
|
||||||
|
import org.linphone.core.LinphoneCoreException;
|
||||||
|
import org.linphone.core.LinphoneCoreFactory;
|
||||||
|
import org.linphone.core.LinphoneProxyConfig;
|
||||||
|
import org.linphone.core.LpConfig;
|
||||||
|
import org.linphone.mediastream.Log;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sylvain Berfini
|
||||||
|
*/
|
||||||
|
public class LinphonePreferences {
|
||||||
|
private static final int LINPHONE_CORE_RANDOM_PORT = -1;
|
||||||
|
private static LinphonePreferences instance;
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
|
public static final synchronized LinphonePreferences instance() {
|
||||||
|
if (instance == null) {
|
||||||
|
instance = new LinphonePreferences();
|
||||||
|
}
|
||||||
|
return instance;
|
||||||
|
}
|
||||||
|
|
||||||
|
private LinphonePreferences() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getString(int key) {
|
||||||
|
if (mContext == null) {
|
||||||
|
mContext = LinphoneManager.getInstance().getContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
return mContext.getString(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
private LinphoneCore getLc() {
|
||||||
|
return LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
private LpConfig getConfig() {
|
||||||
|
LinphoneCore lc = getLc();
|
||||||
|
if (lc != null)
|
||||||
|
return lc.getConfig();
|
||||||
|
|
||||||
|
return LinphoneCoreFactory.instance().createLpConfig(LinphoneManager.getInstance().mLinphoneConfigFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removePreviousVersionAuthInfoRemoval() {
|
||||||
|
getConfig().setBool("sip", "store_auth_info", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
// App settings
|
||||||
|
public boolean isFirstLaunch() {
|
||||||
|
return getConfig().getBool("app", "first_launch", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void firstLaunchSuccessful() {
|
||||||
|
getConfig().setBool("app", "first_launch", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRingtone(String defaultRingtone) {
|
||||||
|
String ringtone = getLc().getRing();
|
||||||
|
if (ringtone == null || ringtone.length() == 0)
|
||||||
|
ringtone = defaultRingtone;
|
||||||
|
return ringtone;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRingtone(String ringtone) {
|
||||||
|
getLc().setRing(ringtone);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldAutomaticallyAcceptFriendsRequests() {
|
||||||
|
return false; //TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldUseSoftvolume() {
|
||||||
|
return false; //TODO
|
||||||
|
}
|
||||||
|
// End of app settings
|
||||||
|
|
||||||
|
// Accounts settings
|
||||||
|
private LinphoneProxyConfig getProxyConfig(int n) {
|
||||||
|
LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
|
||||||
|
if (n < 0 || n >= prxCfgs.length)
|
||||||
|
return null;
|
||||||
|
return prxCfgs[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
private LinphoneAuthInfo getAuthInfo(int n) {
|
||||||
|
LinphoneAuthInfo[] authsInfos = getLc().getAuthInfosList();
|
||||||
|
// In case you have multiple proxy configs with same auth info
|
||||||
|
if (n > 0 && n >= authsInfos.length) {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
try {
|
||||||
|
LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity());
|
||||||
|
return getLc().findAuthInfo(addr.getUserName(), null);
|
||||||
|
} catch (LinphoneCoreException e) { }
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
else if (n < 0) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return authsInfos[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
private String tempUsername;
|
||||||
|
private String tempUserId;
|
||||||
|
private String tempPassword;
|
||||||
|
private String tempDomain;
|
||||||
|
private String tempProxy;
|
||||||
|
private boolean tempOutboundProxy;
|
||||||
|
private String tempContactsParams;
|
||||||
|
private String tempExpire;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new account using values previously set using setNew* functions
|
||||||
|
* @throws LinphoneCoreException
|
||||||
|
*/
|
||||||
|
public void saveNewAccount() throws LinphoneCoreException {
|
||||||
|
String identity = "sip:" + tempUsername + "@" + tempDomain;
|
||||||
|
String proxy = "sip:";
|
||||||
|
proxy += tempProxy == null ? tempDomain : tempProxy;
|
||||||
|
String route = tempOutboundProxy ? tempProxy : null;
|
||||||
|
|
||||||
|
LinphoneProxyConfig prxCfg = LinphoneCoreFactory.instance().createProxyConfig(identity, proxy, route, true);
|
||||||
|
if (tempContactsParams != null)
|
||||||
|
prxCfg.setContactParameters(tempContactsParams);
|
||||||
|
if (tempExpire != null) {
|
||||||
|
try {
|
||||||
|
prxCfg.setExpires(Integer.parseInt(tempExpire));
|
||||||
|
} catch (NumberFormatException nfe) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, null, null);
|
||||||
|
|
||||||
|
getLc().addProxyConfig(prxCfg);
|
||||||
|
getLc().addAuthInfo(authInfo);
|
||||||
|
|
||||||
|
if (getAccountCount() == 1)
|
||||||
|
getLc().setDefaultProxyConfig(prxCfg);
|
||||||
|
|
||||||
|
tempUsername = null;
|
||||||
|
tempUserId = null;
|
||||||
|
tempPassword = null;
|
||||||
|
tempDomain = null;
|
||||||
|
tempProxy = null;
|
||||||
|
tempOutboundProxy = false;
|
||||||
|
tempContactsParams = null;
|
||||||
|
tempExpire = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountUsername(String username) {
|
||||||
|
tempUsername = username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountUsername(int n, String username) {
|
||||||
|
getAuthInfo(n).setUsername(username);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccountUsername(int n) {
|
||||||
|
LinphoneAuthInfo authInfo = getAuthInfo(n);
|
||||||
|
return authInfo == null ? null : authInfo.getUsername();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountUserId(String userId) {
|
||||||
|
tempUserId = userId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountUserId(int n, String userId) {
|
||||||
|
getAuthInfo(n).setUserId(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccountUserId(int n) {
|
||||||
|
LinphoneAuthInfo authInfo = getAuthInfo(n);
|
||||||
|
return authInfo == null ? null : authInfo.getUserId();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountPassword(String password) {
|
||||||
|
tempPassword = password;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountPassword(int n, String password) {
|
||||||
|
getAuthInfo(n).setPassword(password);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccountPassword(int n) {
|
||||||
|
LinphoneAuthInfo authInfo = getAuthInfo(n);
|
||||||
|
return authInfo == null ? null : authInfo.getPassword();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountDomain(String domain) {
|
||||||
|
tempDomain = domain;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountDomain(int n, String domain) {
|
||||||
|
String identity = "sip:" + getAccountUsername(n) + "@" + domain;
|
||||||
|
String proxy = "sip:" + domain;
|
||||||
|
|
||||||
|
try {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
prxCfg.setIdentity(identity);
|
||||||
|
prxCfg.setProxy(proxy);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccountDomain(int n) {
|
||||||
|
return getProxyConfig(n).getDomain();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountProxy(String proxy) {
|
||||||
|
tempProxy = proxy;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountProxy(int n, String proxy) {
|
||||||
|
try {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
prxCfg.setProxy("sip:" + proxy);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAccountProxy(int n) {
|
||||||
|
return getProxyConfig(n).getProxy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountOutboundProxyEnabled(boolean enabled) {
|
||||||
|
tempOutboundProxy = enabled;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountOutboundProxyEnabled(int n, boolean enabled) {
|
||||||
|
try {
|
||||||
|
if (enabled) {
|
||||||
|
getProxyConfig(n).setRoute(getAccountProxy(n));
|
||||||
|
} else {
|
||||||
|
getProxyConfig(n).setRoute(null);
|
||||||
|
}
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountContactParameters(String contactParams) {
|
||||||
|
tempContactsParams = contactParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAccountOutboundProxySet(int n) {
|
||||||
|
return getProxyConfig(n).getRoute() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getExpires(int n) {
|
||||||
|
return String.valueOf(getProxyConfig(n).getExpires());
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setNewAccountExpires(String expire) {
|
||||||
|
tempExpire = expire;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setExpires(int n, String expire) {
|
||||||
|
try {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
prxCfg.setExpires(Integer.parseInt(expire));
|
||||||
|
prxCfg.done();
|
||||||
|
} catch (NumberFormatException nfe) { }
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPrefix(int n) {
|
||||||
|
return getProxyConfig(n).getDialPrefix();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPrefix(int n, String prefix) {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
prxCfg.setDialPrefix(prefix);
|
||||||
|
prxCfg.done();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean getReplacePlusByZeroZero(int n) {
|
||||||
|
return getProxyConfig(n).getDialEscapePlus();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setReplacePlusByZeroZero(int n, boolean replace) {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
prxCfg.setDialEscapePlus(replace);
|
||||||
|
prxCfg.done();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultAccount(int accountIndex) {
|
||||||
|
LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
|
||||||
|
if (accountIndex >= 0 && accountIndex < prxCfgs.length)
|
||||||
|
getLc().setDefaultProxyConfig(prxCfgs[accountIndex]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getDefaultAccountIndex() {
|
||||||
|
LinphoneProxyConfig defaultPrxCfg = getLc().getDefaultProxyConfig();
|
||||||
|
if (defaultPrxCfg == null)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList();
|
||||||
|
for (int i = 0; i < prxCfgs.length; i++) {
|
||||||
|
if (defaultPrxCfg.getIdentity().equals(prxCfgs[i].getIdentity())) {
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAccountCount() {
|
||||||
|
return getLc().getProxyConfigList().length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccountEnabled(int n, boolean disabled) {
|
||||||
|
LinphoneProxyConfig prxCfg = getProxyConfig(n);
|
||||||
|
try {
|
||||||
|
prxCfg.enableRegister(!disabled);
|
||||||
|
prxCfg.done();
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAccountEnabled(int n) {
|
||||||
|
return getProxyConfig(n).registerEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void deleteAccount(int n) {
|
||||||
|
LinphoneProxyConfig proxyCfg = getProxyConfig(n);
|
||||||
|
if (proxyCfg != null)
|
||||||
|
getLc().removeProxyConfig(proxyCfg);
|
||||||
|
LinphoneAuthInfo authInfo = getAuthInfo(n);
|
||||||
|
if (authInfo != null)
|
||||||
|
getLc().removeAuthInfo(authInfo);
|
||||||
|
}
|
||||||
|
// End of accounts settings
|
||||||
|
|
||||||
|
// Audio settings
|
||||||
|
public void setEchoCancellation(boolean enable) {
|
||||||
|
getLc().enableEchoCancellation(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEchoCancellationEnabled() {
|
||||||
|
return getLc().isEchoCancellationEnabled();
|
||||||
|
}
|
||||||
|
// End of audio settings
|
||||||
|
|
||||||
|
// Video settings
|
||||||
|
public boolean useFrontCam() {
|
||||||
|
return getConfig().getBool("app", "front_camera_default", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setFrontCamAsDefault(boolean frontcam) {
|
||||||
|
getConfig().setBool("app", "front_camera_default", frontcam);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isVideoEnabled() {
|
||||||
|
return getLc().isVideoSupported() && getLc().isVideoEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableVideo(boolean enable) {
|
||||||
|
if (enable) {
|
||||||
|
getLc().enableVideo(shouldAutomaticallyShareMyVideo(), true);
|
||||||
|
} else {
|
||||||
|
getLc().enableVideo(false, false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldInitiateVideoCall() {
|
||||||
|
return getLc().getVideoAutoInitiatePolicy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setInitiateVideoCall(boolean initiate) {
|
||||||
|
getLc().setVideoPolicy(initiate, shouldAutomaticallyAcceptVideoRequests());
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldAutomaticallyAcceptVideoRequests() {
|
||||||
|
return getLc().getVideoAutoAcceptPolicy();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutomaticallyAcceptVideoRequests(boolean accept) {
|
||||||
|
getLc().setVideoPolicy(shouldInitiateVideoCall(), accept);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldAutomaticallyShareMyVideo() {
|
||||||
|
return false; //TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutomaticallyShareMyVideo(boolean accept) {
|
||||||
|
//TODO
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPreferredVideoSize() {
|
||||||
|
//LinphoneCore can only return video size (width and height), not the name
|
||||||
|
return getConfig().getString("video", "size", "qvga");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPreferredVideoSize(String preferredVideoSize) {
|
||||||
|
int bandwidth = 512 + 60;
|
||||||
|
if (preferredVideoSize.equals(getString(R.string.pref_preferred_video_size_hd_key))) {
|
||||||
|
preferredVideoSize = "uxga";
|
||||||
|
bandwidth = 1024 + 60;
|
||||||
|
} else if (preferredVideoSize.equals(getString(R.string.pref_preferred_video_size_vga_key))) {
|
||||||
|
preferredVideoSize = "vga";
|
||||||
|
bandwidth = 512 + 60;
|
||||||
|
} else if (preferredVideoSize.equals(getString(R.string.pref_preferred_video_size_qvga_key))) {
|
||||||
|
preferredVideoSize = "qvga";
|
||||||
|
bandwidth = 380 + 60;
|
||||||
|
}
|
||||||
|
|
||||||
|
getLc().setPreferredVideoSizeByName(preferredVideoSize);
|
||||||
|
getLc().setUploadBandwidth(bandwidth);
|
||||||
|
getLc().setDownloadBandwidth(bandwidth);
|
||||||
|
}
|
||||||
|
// End of video settings
|
||||||
|
|
||||||
|
// Call settings
|
||||||
|
public boolean useRfc2833Dtmfs() {
|
||||||
|
return getLc().getUseRfc2833ForDtmfs();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendDtmfsAsRfc2833(boolean use) {
|
||||||
|
getLc().setUseRfc2833ForDtmfs(use);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean useSipInfoDtmfs() {
|
||||||
|
return getLc().getUseSipInfoForDtmfs();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void sendDTMFsAsSipInfo(boolean use) {
|
||||||
|
getLc().setUseSipInfoForDtmfs(use);
|
||||||
|
}
|
||||||
|
// End of call settings
|
||||||
|
|
||||||
|
// Network settings
|
||||||
|
public void setWifiOnlyEnabled(Boolean enable) {
|
||||||
|
getConfig().setBool("app", "wifi_only", enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isWifiOnlyEnabled() {
|
||||||
|
return getConfig().getBool("app", "wifi_only", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStunServer() {
|
||||||
|
return getLc().getStunServer();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStunServer(String stun) {
|
||||||
|
getLc().setStunServer(stun);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setIceEnabled(boolean enabled) {
|
||||||
|
if (enabled) {
|
||||||
|
getLc().setFirewallPolicy(FirewallPolicy.UseIce);
|
||||||
|
} else {
|
||||||
|
String stun = getStunServer();
|
||||||
|
if (stun != null && stun.length() > 0) {
|
||||||
|
getLc().setFirewallPolicy(FirewallPolicy.UseStun);
|
||||||
|
} else {
|
||||||
|
getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUpnpEnabled(boolean enabled) {
|
||||||
|
if (enabled) {
|
||||||
|
if (isIceEnabled()) {
|
||||||
|
Log.e("Cannot have both ice and upnp enabled, disabling upnp");
|
||||||
|
} else {
|
||||||
|
getLc().setFirewallPolicy(FirewallPolicy.UseUpnp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
String stun = getStunServer();
|
||||||
|
if (stun != null && stun.length() > 0) {
|
||||||
|
getLc().setFirewallPolicy(FirewallPolicy.UseStun);
|
||||||
|
} else {
|
||||||
|
getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUpnpEnabled() {
|
||||||
|
return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isIceEnabled() {
|
||||||
|
return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void useRandomPort(boolean enabled) {
|
||||||
|
useRandomPort(enabled, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void useRandomPort(boolean enabled, boolean apply) {
|
||||||
|
getConfig().setBool("app", "random_port", enabled);
|
||||||
|
if (apply) {
|
||||||
|
if (enabled) {
|
||||||
|
setSipPort(LINPHONE_CORE_RANDOM_PORT);
|
||||||
|
} else {
|
||||||
|
if (getTransport().equals(getString(R.string.pref_transport_tls)))
|
||||||
|
setSipPort(5061);
|
||||||
|
else
|
||||||
|
setSipPort(5060);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUsingRandomPort() {
|
||||||
|
return getConfig().getBool("app", "random_port", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSipPort() {
|
||||||
|
Transports transports = getLc().getSignalingTransportPorts();
|
||||||
|
int port;
|
||||||
|
if (transports.udp > 0)
|
||||||
|
port = transports.udp;
|
||||||
|
else if (transports.tcp > 0)
|
||||||
|
port = transports.tcp;
|
||||||
|
else
|
||||||
|
port = transports.tls;
|
||||||
|
return String.valueOf(port);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSipPort(int port) {
|
||||||
|
Transports transports = getLc().getSignalingTransportPorts();
|
||||||
|
if (transports.udp > 0)
|
||||||
|
transports.udp = port;
|
||||||
|
else if (transports.tcp > 0)
|
||||||
|
transports.tcp = port;
|
||||||
|
else
|
||||||
|
transports.tls = port;
|
||||||
|
getLc().setSignalingTransportPorts(transports);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public String getTransport() {
|
||||||
|
Transports transports = getLc().getSignalingTransportPorts();
|
||||||
|
String transport = getString(R.string.pref_transport_udp);
|
||||||
|
if (transports.tcp > 0)
|
||||||
|
transport = getString(R.string.pref_transport_tcp);
|
||||||
|
else if (transports.tls > 0)
|
||||||
|
transport = getString(R.string.pref_transport_tls);
|
||||||
|
return transport;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTransport(String transportKey) {
|
||||||
|
if (transportKey == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Transports transports = getLc().getSignalingTransportPorts();
|
||||||
|
if (transports.udp > 0) {
|
||||||
|
if (transportKey.equals(getString(R.string.pref_transport_tcp_key))) {
|
||||||
|
transports.tcp = transports.udp;
|
||||||
|
transports.udp = transports.tls;
|
||||||
|
} else if (transportKey.equals(getString(R.string.pref_transport_tls_key))) {
|
||||||
|
transports.tls = transports.udp;
|
||||||
|
transports.udp = transports.tcp;
|
||||||
|
}
|
||||||
|
} else if (transports.tcp > 0) {
|
||||||
|
if (transportKey.equals(getString(R.string.pref_transport_udp_key))) {
|
||||||
|
transports.udp = transports.tcp;
|
||||||
|
transports.tcp = transports.tls;
|
||||||
|
} else if (transportKey.equals(getString(R.string.pref_transport_tls_key))) {
|
||||||
|
transports.tls = transports.tcp;
|
||||||
|
transports.tcp = transports.udp;
|
||||||
|
}
|
||||||
|
} else if (transports.tls > 0) {
|
||||||
|
if (transportKey.equals(getString(R.string.pref_transport_udp_key))) {
|
||||||
|
transports.udp = transports.tls;
|
||||||
|
transports.tls = transports.tcp;
|
||||||
|
} else if (transportKey.equals(getString(R.string.pref_transport_tcp_key))) {
|
||||||
|
transports.tcp = transports.tls;
|
||||||
|
transports.tls = transports.udp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
getLc().setSignalingTransportPorts(transports);
|
||||||
|
}
|
||||||
|
|
||||||
|
public MediaEncryption getMediaEncryption() {
|
||||||
|
return getLc().getMediaEncryption();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setMediaEncryption(MediaEncryption menc) {
|
||||||
|
if (menc == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
getLc().setMediaEncryption(menc);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPushNotificationEnabled(boolean enable) {
|
||||||
|
getConfig().setBool("app", "push_notification", enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isPushNotificationEnabled() {
|
||||||
|
return getConfig().getBool("app", "push_notification", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPushNotificationRegistrationID(String regId) {
|
||||||
|
getConfig().setString("app", "push_notification_regid", regId);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPushNotificationRegistrationID() {
|
||||||
|
return getConfig().getString("app", "push_notification_regid", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void useIpv6(Boolean enable) {
|
||||||
|
getLc().enableIpv6(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isUsingIpv6() {
|
||||||
|
return getLc().isIpv6Enabled();
|
||||||
|
}
|
||||||
|
// End of network settings
|
||||||
|
|
||||||
|
// Advanced settings
|
||||||
|
public void setDebugEnabled(boolean enabled) {
|
||||||
|
getConfig().setBool("app", "debug", enabled);
|
||||||
|
LinphoneCoreFactory.instance().setDebugMode(enabled, getString(R.string.app_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isDebugEnabled() {
|
||||||
|
return getConfig().getBool("app", "debug", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setBackgroundModeEnabled(boolean enabled) {
|
||||||
|
getConfig().setBool("app", "background_mode", enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBackgroundModeEnabled() {
|
||||||
|
return getConfig().getBool("app", "background_mode", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAnimationsEnabled(boolean enabled) {
|
||||||
|
getConfig().setBool("app", "animations", enabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean areAnimationsEnabled() {
|
||||||
|
return getConfig().getBool("app", "animations", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAutoStartEnabled() {
|
||||||
|
return getConfig().getBool("app", "auto_start", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAutoStart(boolean autoStartEnabled) {
|
||||||
|
getConfig().setBool("app", "auto_start", autoStartEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSharingPictureServerUrl() {
|
||||||
|
return getConfig().getString("app", "sharing_server", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSharingPictureServerUrl(String url) {
|
||||||
|
getConfig().setString("app", "sharing_server", url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRemoteProvisioningUrl(String url) {
|
||||||
|
getConfig().setString("app", "remote_provisioning", url);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getRemoteProvisioningUrl() {
|
||||||
|
return getConfig().getString("app", "remote_provisioning", null);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultDisplayName(String displayName) {
|
||||||
|
getLc().setPrimaryContact(displayName, getDefaultUsername());
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaultDisplayName() {
|
||||||
|
return getLc().getPrimaryContactDisplayName();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultUsername(String username) {
|
||||||
|
getLc().setPrimaryContact(getDefaultDisplayName(), username);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDefaultUsername() {
|
||||||
|
return getLc().getPrimaryContactUsername();
|
||||||
|
}
|
||||||
|
// End of advanced settings
|
||||||
|
|
||||||
|
// Tunnel settings
|
||||||
|
public String getTunnelMode() {
|
||||||
|
return null; //TODO
|
||||||
|
}
|
||||||
|
// End of tunnel settings
|
||||||
|
}
|
|
@ -47,7 +47,6 @@ import android.app.PendingIntent;
|
||||||
import android.app.Service;
|
import android.app.Service;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
|
@ -60,7 +59,6 @@ import android.os.Build;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.IBinder;
|
import android.os.IBinder;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -137,12 +135,6 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
|
||||||
super.onCreate();
|
super.onCreate();
|
||||||
|
|
||||||
// In case restart after a crash. Main in LinphoneActivity
|
// In case restart after a crash. Main in LinphoneActivity
|
||||||
LinphonePreferenceManager.getInstance(this);
|
|
||||||
|
|
||||||
// Set default preferences
|
|
||||||
PreferenceManager.setDefaultValues(this, R.xml.preferences, true);
|
|
||||||
|
|
||||||
|
|
||||||
mNotificationTitle = getString(R.string.app_name);
|
mNotificationTitle = getString(R.string.app_name);
|
||||||
|
|
||||||
// Dump some debugging information to the logs
|
// Dump some debugging information to the logs
|
||||||
|
@ -580,7 +572,7 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
|
||||||
// If the correspondent proposes video while audio call
|
// If the correspondent proposes video while audio call
|
||||||
boolean remoteVideo = call.getRemoteParams().getVideoEnabled();
|
boolean remoteVideo = call.getRemoteParams().getVideoEnabled();
|
||||||
boolean localVideo = call.getCurrentParamsCopy().getVideoEnabled();
|
boolean localVideo = call.getCurrentParamsCopy().getVideoEnabled();
|
||||||
boolean autoAcceptCameraPolicy = LinphoneManager.getInstance().isAutoAcceptCamera();
|
boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests();
|
||||||
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) {
|
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) {
|
||||||
try {
|
try {
|
||||||
LinphoneManager.getLc().deferCallUpdate(call);
|
LinphoneManager.getLc().deferCallUpdate(call);
|
||||||
|
@ -619,15 +611,8 @@ public final class LinphoneService extends Service implements LinphoneServiceLis
|
||||||
void onCallStateChanged(LinphoneCall call, State state, String message);
|
void onCallStateChanged(LinphoneCall call, State state, String message);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void changeRingtone(String ringtone) {
|
|
||||||
SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(this).edit();
|
|
||||||
editor.putString(getString(R.string.pref_audio_ringtone), ringtone);
|
|
||||||
editor.commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onRingerPlayerCreated(MediaPlayer mRingerPlayer) {
|
public void onRingerPlayerCreated(MediaPlayer mRingerPlayer) {
|
||||||
String uriString = PreferenceManager.getDefaultSharedPreferences(this).getString(getString(R.string.pref_audio_ringtone),
|
String uriString = LinphonePreferences.instance().getRingtone(android.provider.Settings.System.DEFAULT_RINGTONE_URI.toString());
|
||||||
android.provider.Settings.System.DEFAULT_RINGTONE_URI.toString());
|
|
||||||
try {
|
try {
|
||||||
if (uriString.startsWith("content://")) {
|
if (uriString.startsWith("content://")) {
|
||||||
mRingerPlayer.setDataSource(this, Uri.parse(uriString));
|
mRingerPlayer.setDataSource(this, Uri.parse(uriString));
|
||||||
|
|
|
@ -1,583 +0,0 @@
|
||||||
package org.linphone;
|
|
||||||
/*
|
|
||||||
PreferencesFragment.java
|
|
||||||
Copyright (C) 2012 Belledonne Communications, Grenoble, France
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|
||||||
*/
|
|
||||||
import static org.linphone.R.string.ec_calibrating;
|
|
||||||
import static org.linphone.R.string.pref_codec_amr_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_amrwb_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_ilbc_key;
|
|
||||||
import static org.linphone.R.string.pref_codec_speex16_key;
|
|
||||||
import static org.linphone.R.string.pref_echo_cancellation_key;
|
|
||||||
import static org.linphone.R.string.pref_echo_canceller_calibration_key;
|
|
||||||
import static org.linphone.R.string.pref_media_encryption_key;
|
|
||||||
import static org.linphone.R.string.pref_preferred_video_size_key;
|
|
||||||
import static org.linphone.R.string.pref_transport_key;
|
|
||||||
import static org.linphone.R.string.pref_video_enable_key;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.linphone.LinphoneManager.EcCalibrationListener;
|
|
||||||
import org.linphone.compatibility.Compatibility;
|
|
||||||
import org.linphone.core.LinphoneCore;
|
|
||||||
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
|
||||||
import org.linphone.core.LinphoneCore.MediaEncryption;
|
|
||||||
import org.linphone.core.LinphoneCoreException;
|
|
||||||
import org.linphone.core.LinphoneProxyConfig;
|
|
||||||
import org.linphone.mediastream.Log;
|
|
||||||
import org.linphone.mediastream.Version;
|
|
||||||
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
|
||||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
|
||||||
import org.linphone.setup.SetupActivity;
|
|
||||||
import org.linphone.ui.LedPreference;
|
|
||||||
import org.linphone.ui.PreferencesListFragment;
|
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.preference.CheckBoxPreference;
|
|
||||||
import android.preference.EditTextPreference;
|
|
||||||
import android.preference.ListPreference;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.preference.Preference.OnPreferenceChangeListener;
|
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
|
||||||
import android.preference.PreferenceCategory;
|
|
||||||
import android.preference.PreferenceScreen;
|
|
||||||
|
|
||||||
public class PreferencesFragment extends PreferencesListFragment implements EcCalibrationListener {
|
|
||||||
private Handler mHandler = new Handler();
|
|
||||||
private Context mContext;
|
|
||||||
private Preference ecCalibratePref;
|
|
||||||
private CheckBoxPreference ecPref;
|
|
||||||
private ListPreference mencPref;
|
|
||||||
private int nbAccounts = 1;
|
|
||||||
private PreferenceCategory accounts;
|
|
||||||
|
|
||||||
private static final int WIZARD_INTENT = 1;
|
|
||||||
|
|
||||||
public PreferencesFragment() {
|
|
||||||
super(R.xml.preferences);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle bundle) {
|
|
||||||
super.onCreate(bundle);
|
|
||||||
mContext = getActivity();
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.hide_accounts)) {
|
|
||||||
// Hide category
|
|
||||||
PreferenceCategory accounts = (PreferenceCategory) findPreference(getString(R.string.pref_sipaccounts_key));
|
|
||||||
accounts.removeAll();
|
|
||||||
accounts.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.hide_wizard) || getResources().getBoolean(R.bool.replace_wizard_with_old_interface)) {
|
|
||||||
Preference wizard = findPreference(getString(R.string.setup_key));
|
|
||||||
if (getResources().getBoolean(R.bool.replace_wizard_with_old_interface)) {
|
|
||||||
createAddAccountButton();
|
|
||||||
} else {
|
|
||||||
wizard.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
addWizardPreferenceButton();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_animations)) {
|
|
||||||
uncheckDisableAndHideCheckbox(R.string.pref_animation_enable_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getResources().getBoolean(R.bool.enable_linphone_friends)) {
|
|
||||||
PreferenceCategory friends = (PreferenceCategory) findPreference(getString(R.string.pref_linphone_friend_key));
|
|
||||||
friends.removeAll();
|
|
||||||
friends.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
EditTextPreference imageSharingServer = (EditTextPreference) findPreference(getString(R.string.pref_image_sharing_server_key));
|
|
||||||
if (getResources().getBoolean(R.bool.disable_chat)) {
|
|
||||||
imageSharingServer.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getResources().getBoolean(R.bool.enable_push_id)) {
|
|
||||||
findPreference(getString(R.string.pref_push_notification_key)).setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
initializeTransportPreferences();
|
|
||||||
|
|
||||||
ecCalibratePref = findPreference(pref_echo_canceller_calibration_key);
|
|
||||||
ecCalibratePref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
startEcCalibration();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
ecPref = (CheckBoxPreference) findPreference(pref_echo_cancellation_key);
|
|
||||||
mencPref = (ListPreference) findPreference(pref_media_encryption_key);
|
|
||||||
|
|
||||||
boolean fastCpu = Version.hasFastCpu();
|
|
||||||
if (fastCpu) {
|
|
||||||
detectAudioCodec(pref_codec_ilbc_key, "iLBC", 8000, 1, false);
|
|
||||||
findPreference(pref_codec_speex16_key).setEnabled(true);
|
|
||||||
//findPreference(pref_codec_speex32_key)).setEnabled(enableIlbc);
|
|
||||||
}
|
|
||||||
|
|
||||||
initializeMediaEncryptionPreferences();
|
|
||||||
|
|
||||||
detectAudioCodec(pref_codec_amr_key,"AMR", 8000, 1, false);
|
|
||||||
detectAudioCodec(pref_codec_amrwb_key,"AMR-WB", 16000, 1, false);
|
|
||||||
//detectAudioCodec(R.string.pref_codec_silk8_key,"SILK",8000, 1, true);
|
|
||||||
//detectAudioCodec(R.string.pref_codec_silk12_key,"SILK",12000, 1, true);
|
|
||||||
detectAudioCodec(R.string.pref_codec_silk16_key,"SILK",16000, 1, true);
|
|
||||||
//detectAudioCodec(R.string.pref_codec_silk24_key,"SILK",24000, 1, true);
|
|
||||||
detectAudioCodec(R.string.pref_codec_g729_key,"G729",8000, 1, true);
|
|
||||||
detectAudioCodec(R.string.pref_codec_opus_key,"OPUS",48000, 1, true);
|
|
||||||
|
|
||||||
// No video
|
|
||||||
if (!Version.isVideoCapable()) {
|
|
||||||
uncheckAndDisableCheckbox(pref_video_enable_key);
|
|
||||||
} else {
|
|
||||||
if (!AndroidCameraConfiguration.hasFrontCamera()) {
|
|
||||||
uncheckDisableAndHideCheckbox(R.string.pref_video_use_front_camera_key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
initializePreferredVideoSizePreferences();
|
|
||||||
|
|
||||||
if (prefs().getBoolean(LinphoneActivity.PREF_FIRST_LAUNCH,true)) {
|
|
||||||
doOnFirstLaunch();
|
|
||||||
}
|
|
||||||
if (Hacks.hasBuiltInEchoCanceller()) {
|
|
||||||
uncheckDisableAndHideCheckbox(R.string.pref_echo_cancellation_key);
|
|
||||||
findPreference(R.string.pref_echo_canceller_calibration_key).setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_all_patented_codecs_for_markets)) {
|
|
||||||
Preference prefH264 = findPreference(R.string.pref_video_codec_h264_key);
|
|
||||||
prefH264.setEnabled(false);
|
|
||||||
prefH264.setSummary(R.string.pref_video_codec_h264_unavailable);
|
|
||||||
|
|
||||||
Preference prefMPEG4 = findPreference(R.string.pref_video_codec_mpeg4_key);
|
|
||||||
prefMPEG4.setEnabled(false);
|
|
||||||
prefMPEG4.setSummary(R.string.pref_video_codec_mpeg4_unavailable);
|
|
||||||
} else {
|
|
||||||
detectVideoCodec(R.string.pref_video_codec_h264_key, "H264");
|
|
||||||
if (!Version.hasFastCpuWithAsmOptim())
|
|
||||||
{
|
|
||||||
// Android without neon doesn't support H264
|
|
||||||
Log.w("CPU does not have asm optimisations available, disabling H264");
|
|
||||||
findPreference(R.string.pref_video_codec_h264_key).setEnabled(false);
|
|
||||||
findPreference(R.string.pref_video_codec_h264_key).setDefaultValue(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Hacks.needSoftvolume()) {
|
|
||||||
Log.w("Using Audio Hack");
|
|
||||||
checkAndDisableCheckbox(R.string.pref_audio_hacks_use_galaxys_hack_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!LinphoneManager.getLc().isTunnelAvailable()) {
|
|
||||||
hidePreferenceCategory(R.string.pref_tunnel_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.hide_camera_settings)) {
|
|
||||||
PreferenceScreen videoSettings = (PreferenceScreen) findPreference(getString(R.string.pref_video_key));
|
|
||||||
videoSettings.removeAll();
|
|
||||||
videoSettings.setLayoutResource(R.layout.hidden);
|
|
||||||
|
|
||||||
Preference enableVideo = findPreference(R.string.pref_video_enable_key);
|
|
||||||
enableVideo.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.display_about_in_settings)) {
|
|
||||||
findPreference(getString(R.string.menu_about_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
|
||||||
LinphoneActivity.instance().displayAbout();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
findPreference(getString(R.string.menu_about_key)).setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
final CheckBoxPreference useRandomPort = (CheckBoxPreference) findPreference(R.string.pref_transport_use_random_ports_key);
|
|
||||||
final Preference sipPort = findPreference(R.string.pref_sip_port_key);
|
|
||||||
sipPort.setEnabled(!useRandomPort.isChecked());
|
|
||||||
useRandomPort.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
||||||
boolean isChecked = (Boolean) newValue;
|
|
||||||
sipPort.setEnabled(!isChecked);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
CheckBoxPreference wifiOnly = (CheckBoxPreference) findPreference(R.string.pref_wifi_only_key);
|
|
||||||
wifiOnly.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
||||||
LinphoneManager.getInstance().updateNetworkReachability();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
final CheckBoxPreference useIce = (CheckBoxPreference) findPreference(R.string.pref_ice_enable_key);
|
|
||||||
final CheckBoxPreference useUpnp = (CheckBoxPreference) findPreference(R.string.pref_upnp_enable_key);
|
|
||||||
|
|
||||||
useIce.setEnabled(!useUpnp.isChecked());
|
|
||||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
useUpnp.setEnabled(lc.upnpAvailable() && !useIce.isChecked());
|
|
||||||
|
|
||||||
useIce.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
||||||
boolean isChecked = (Boolean) newValue;
|
|
||||||
useUpnp.setEnabled(!isChecked);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
useUpnp.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
|
||||||
@Override
|
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
|
||||||
boolean isChecked = (Boolean) newValue;
|
|
||||||
useIce.setEnabled(!isChecked);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_every_log)) {
|
|
||||||
uncheckDisableAndHideCheckbox(R.string.pref_debug_key);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createAddAccountButton() {
|
|
||||||
Preference addAccount = findPreference(getString(R.string.setup_key));
|
|
||||||
addAccount.setTitle(getString(R.string.pref_add_account));
|
|
||||||
addAccount.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
|
||||||
nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 0);
|
|
||||||
prefs.edit().putInt(getString(R.string.pref_extra_accounts), nbAccounts+1).commit();
|
|
||||||
|
|
||||||
addExtraAccountPreferencesButton(accounts, nbAccounts, true);
|
|
||||||
LinphoneActivity.instance().displayAccountSettings(nbAccounts);
|
|
||||||
nbAccounts++;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void hidePreferenceCategory(int key) {
|
|
||||||
PreferenceCategory p = (PreferenceCategory) findPreference(key);
|
|
||||||
p.removeAll();
|
|
||||||
p.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void doOnFirstLaunch() {
|
|
||||||
prefs().edit().putBoolean(LinphoneActivity.PREF_FIRST_LAUNCH, false).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private synchronized void startEcCalibration() {
|
|
||||||
try {
|
|
||||||
LinphoneManager.getInstance().startEcCalibration(this);
|
|
||||||
|
|
||||||
ecCalibratePref.setSummary(ec_calibrating);
|
|
||||||
ecCalibratePref.getEditor().putBoolean(getString(pref_echo_canceller_calibration_key), false).commit();
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
Log.w(e, "Cannot calibrate EC");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onEcCalibrationStatus(final EcCalibratorStatus status, final int delayMs) {
|
|
||||||
mHandler.post(new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
if (status == EcCalibratorStatus.DoneNoEcho) {
|
|
||||||
ecCalibratePref.setSummary(R.string.no_echo);
|
|
||||||
ecPref.setChecked(false);
|
|
||||||
} else if (status == EcCalibratorStatus.Done) {
|
|
||||||
ecCalibratePref.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
|
|
||||||
ecPref.setChecked(true);
|
|
||||||
} else if (status == EcCalibratorStatus.Failed) {
|
|
||||||
ecCalibratePref.setSummary(R.string.failed);
|
|
||||||
ecPref.setChecked(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void uncheckDisableAndHideCheckbox(int key) {
|
|
||||||
manageCheckbox(key, false, false, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void uncheckAndDisableCheckbox(int key) {
|
|
||||||
manageCheckbox(key, false, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void checkAndDisableCheckbox(int key) {
|
|
||||||
manageCheckbox(key, true, false, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void manageCheckbox(int key, boolean value, boolean enabled, boolean hidden) {
|
|
||||||
Preference box = findPreference(key);
|
|
||||||
box.setEnabled(enabled);
|
|
||||||
Compatibility.setPreferenceChecked(box, value);
|
|
||||||
writeBoolean(key, value);
|
|
||||||
if (hidden) box.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writeBoolean(int key, boolean value) {
|
|
||||||
prefs().edit().putBoolean(getString(key), value).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SharedPreferences prefs() {
|
|
||||||
return getPreferenceManager().getSharedPreferences();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void detectAudioCodec(int id, String mime, int rate, int channels, boolean hide) {
|
|
||||||
Log.w("Payload type for codec " + mime + " = " + LinphoneManager.getLc().findPayloadType(mime, rate, channels));
|
|
||||||
boolean enable = LinphoneService.isReady() && LinphoneManager.getLc().findPayloadType(mime, rate, channels)!=null;
|
|
||||||
Preference cb = findPreference(id);
|
|
||||||
cb.setEnabled(enable);
|
|
||||||
if (hide && !enable) {
|
|
||||||
cb.setLayoutResource(R.layout.hidden);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void detectVideoCodec(int id, String mime) {
|
|
||||||
findPreference(id).setEnabled(LinphoneManager.getInstance().detectVideoCodec(mime));
|
|
||||||
}
|
|
||||||
|
|
||||||
private void createDynamicAccountsPreferences() {
|
|
||||||
accounts = (PreferenceCategory) findPreference(getString(R.string.pref_sipaccounts_key));
|
|
||||||
accounts.removeAll();
|
|
||||||
|
|
||||||
// Get already configured extra accounts
|
|
||||||
SharedPreferences prefs = getPreferenceManager().getSharedPreferences();
|
|
||||||
nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 0);
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
final LedPreference me = new LedPreference(mContext);
|
|
||||||
String keyUsername = getString(R.string.pref_username_key);
|
|
||||||
String keyDomain = getString(R.string.pref_domain_key);
|
|
||||||
if (n > 0) {
|
|
||||||
keyUsername += n + "";
|
|
||||||
keyDomain += n + "";
|
|
||||||
}
|
|
||||||
|
|
||||||
String username = prefs.getString(keyUsername, "");
|
|
||||||
String domain = prefs.getString(keyDomain, "");
|
|
||||||
if (username == null) {
|
|
||||||
me.setTitle(getString(R.string.pref_sipaccount));
|
|
||||||
} else {
|
|
||||||
me.setTitle(username + "@" + domain);
|
|
||||||
}
|
|
||||||
|
|
||||||
me.setOnPreferenceClickListener(new OnPreferenceClickListener()
|
|
||||||
{
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
LinphoneActivity.instance().displayAccountSettings(n);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
updateAccountLed(me, username, domain);
|
|
||||||
parent.addPreference(me);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateAccountLed(final LedPreference me, final String username, final String domain) {
|
|
||||||
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
|
|
||||||
for (LinphoneProxyConfig lpc : LinphoneManager.getLc().getProxyConfigList()) {
|
|
||||||
if (lpc.getIdentity().contains(username) && lpc.getIdentity().contains(domain)) {
|
|
||||||
if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationOk) {
|
|
||||||
me.setLed(R.drawable.led_connected);
|
|
||||||
} else if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationFailed) {
|
|
||||||
me.setLed(R.drawable.led_error);
|
|
||||||
} else if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationProgress) {
|
|
||||||
me.setLed(R.drawable.led_inprogress);
|
|
||||||
mHandler.postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
updateAccountLed(me, username, domain);
|
|
||||||
}
|
|
||||||
}, 1500);
|
|
||||||
} else {
|
|
||||||
me.setLed(R.drawable.led_disconnected);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addWizardPreferenceButton() {
|
|
||||||
Preference wizard = findPreference(getString(R.string.setup_key));
|
|
||||||
wizard.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
|
||||||
Intent intent = new Intent(mContext, SetupActivity.class);
|
|
||||||
startActivityForResult(intent, WIZARD_INTENT);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == WIZARD_INTENT && resultCode == Activity.RESULT_OK) {
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
|
||||||
LinphoneActivity.instance().goToDialer();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeMediaEncryptionPreferences() {
|
|
||||||
LinphoneCore lc = null;
|
|
||||||
try {
|
|
||||||
lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
} catch (Exception e) {}
|
|
||||||
|
|
||||||
List<CharSequence> mencEntries=new ArrayList<CharSequence>();
|
|
||||||
List<CharSequence> mencEntryValues=new ArrayList<CharSequence>();
|
|
||||||
mencEntries.add(getString(R.string.media_encryption_none));
|
|
||||||
mencEntryValues.add(getString(R.string.pref_media_encryption_key_none));
|
|
||||||
|
|
||||||
if (lc == null || getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
|
|
||||||
CharSequence[] contents=new CharSequence[mencEntries.size()];
|
|
||||||
mencEntries.toArray(contents);
|
|
||||||
mencPref.setEntries(contents);
|
|
||||||
contents=new CharSequence[mencEntryValues.size()];
|
|
||||||
mencEntryValues.toArray(contents);
|
|
||||||
mencPref.setEntryValues(contents);
|
|
||||||
mencPref.setDefaultValue(getString(R.string.media_encryption_none));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean hasZrtp = lc.mediaEncryptionSupported(MediaEncryption.ZRTP);
|
|
||||||
boolean hasSrtp = lc.mediaEncryptionSupported(MediaEncryption.SRTP);
|
|
||||||
if (!hasSrtp && !hasZrtp){
|
|
||||||
mencPref.setEnabled(false);
|
|
||||||
}else{
|
|
||||||
if (hasSrtp){
|
|
||||||
mencEntries.add(getString(R.string.media_encryption_srtp));
|
|
||||||
mencEntryValues.add(getString(R.string.pref_media_encryption_key_srtp));
|
|
||||||
}
|
|
||||||
if (hasZrtp){
|
|
||||||
mencEntries.add(getString(R.string.media_encryption_zrtp));
|
|
||||||
mencEntryValues.add(getString(R.string.pref_media_encryption_key_zrtp));
|
|
||||||
}
|
|
||||||
CharSequence[] contents=new CharSequence[mencEntries.size()];
|
|
||||||
mencEntries.toArray(contents);
|
|
||||||
mencPref.setEntries(contents);
|
|
||||||
contents=new CharSequence[mencEntryValues.size()];
|
|
||||||
mencEntryValues.toArray(contents);
|
|
||||||
mencPref.setEntryValues(contents);
|
|
||||||
mencPref.setDefaultValue(getString(R.string.media_encryption_none));
|
|
||||||
//mencPref.setValueIndex(mencPref.findIndexOfValue(getString(R.string.media_encryption_none)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializePreferredVideoSizePreferences() {
|
|
||||||
List<CharSequence> entries = new ArrayList<CharSequence>();
|
|
||||||
List<CharSequence> values = new ArrayList<CharSequence>();
|
|
||||||
if (Version.isHDVideoCapable()) {
|
|
||||||
entries.add(getString(R.string.pref_preferred_video_size_hd));
|
|
||||||
values.add(getString(R.string.pref_preferred_video_size_hd_key));
|
|
||||||
}
|
|
||||||
entries.add(getString(R.string.pref_preferred_video_size_vga));
|
|
||||||
values.add(getString(R.string.pref_preferred_video_size_vga_key));
|
|
||||||
entries.add(getString(R.string.pref_preferred_video_size_qvga));
|
|
||||||
values.add(getString(R.string.pref_preferred_video_size_qvga_key));
|
|
||||||
|
|
||||||
ListPreference preferredVideoSize = (ListPreference) findPreference(pref_preferred_video_size_key);
|
|
||||||
CharSequence[] content = new CharSequence[entries.size()];
|
|
||||||
entries.toArray(content);
|
|
||||||
preferredVideoSize.setEntries(content);
|
|
||||||
content = new CharSequence[values.size()];
|
|
||||||
values.toArray(content);
|
|
||||||
preferredVideoSize.setEntryValues(content);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void initializeTransportPreferences() {
|
|
||||||
List<CharSequence> mencEntries=new ArrayList<CharSequence>();
|
|
||||||
List<CharSequence> mencEntryValues=new ArrayList<CharSequence>();
|
|
||||||
mencEntries.add(getString(R.string.pref_transport_udp));
|
|
||||||
mencEntryValues.add(getString(R.string.pref_transport_udp_key));
|
|
||||||
mencEntries.add(getString(R.string.pref_transport_tcp));
|
|
||||||
mencEntryValues.add(getString(R.string.pref_transport_tcp_key));
|
|
||||||
|
|
||||||
if (!getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
|
|
||||||
mencEntries.add(getString(R.string.pref_transport_tls));
|
|
||||||
mencEntryValues.add(getString(R.string.pref_transport_tls_key));
|
|
||||||
}
|
|
||||||
|
|
||||||
ListPreference transport = (ListPreference) findPreference(pref_transport_key);
|
|
||||||
|
|
||||||
CharSequence[] contents=new CharSequence[mencEntries.size()];
|
|
||||||
mencEntries.toArray(contents);
|
|
||||||
transport.setEntries(contents);
|
|
||||||
contents=new CharSequence[mencEntryValues.size()];
|
|
||||||
mencEntryValues.toArray(contents);
|
|
||||||
transport.setEntryValues(contents);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Preference findPreference(int key) {
|
|
||||||
return getPreferenceManager().findPreference(getString(key));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
|
||||||
LinphoneActivity.instance().applyConfigChangesIfNeeded();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
|
||||||
LinphoneActivity.instance().selectMenu(FragmentsAvailable.SETTINGS);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!getResources().getBoolean(R.bool.hide_accounts)) {
|
|
||||||
createDynamicAccountsPreferences();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
148
src/org/linphone/PreferencesMigrator.java
Normal file
148
src/org/linphone/PreferencesMigrator.java
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
package org.linphone;
|
||||||
|
|
||||||
|
/*
|
||||||
|
PreferencesMigrator.java
|
||||||
|
Copyright (C) 2013 Belledonne Communications, Grenoble, France
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import org.linphone.core.LinphoneCore;
|
||||||
|
import org.linphone.core.LinphoneCoreException;
|
||||||
|
import org.linphone.mediastream.Log;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.SharedPreferences.Editor;
|
||||||
|
import android.content.res.Resources;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sylvain Berfini
|
||||||
|
*/
|
||||||
|
public class PreferencesMigrator {
|
||||||
|
private LinphonePreferences mNewPrefs;
|
||||||
|
private SharedPreferences mOldPrefs;
|
||||||
|
private Resources mResources;
|
||||||
|
|
||||||
|
public PreferencesMigrator(Context context) {
|
||||||
|
mNewPrefs = LinphonePreferences.instance();
|
||||||
|
mResources = context.getResources();
|
||||||
|
mOldPrefs = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isMigrationNeeded() {
|
||||||
|
int accountNumber = mOldPrefs.getInt(getString(R.string.pref_extra_accounts), -1);
|
||||||
|
boolean migrationNeeded = accountNumber != -1;
|
||||||
|
return migrationNeeded;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void doMigration() {
|
||||||
|
mNewPrefs.firstLaunchSuccessful(); // If migration is needed, it is safe to assume Linphone has already been started once.
|
||||||
|
mNewPrefs.removePreviousVersionAuthInfoRemoval(); // Remove flag in linphonerc asking core not to store auths infos
|
||||||
|
|
||||||
|
mNewPrefs.setFrontCamAsDefault(getPrefBoolean(R.string.pref_video_use_front_camera_key, true));
|
||||||
|
mNewPrefs.setWifiOnlyEnabled(getPrefBoolean(R.string.pref_wifi_only_key, false));
|
||||||
|
mNewPrefs.useRandomPort(getPrefBoolean(R.string.pref_transport_use_random_ports_key, true), false);
|
||||||
|
mNewPrefs.setPushNotificationEnabled(getPrefBoolean(R.string.pref_push_notification_key, false));
|
||||||
|
mNewPrefs.setPushNotificationRegistrationID(getPrefString(R.string.push_reg_id_key, null));
|
||||||
|
mNewPrefs.setDebugEnabled(getPrefBoolean(R.string.pref_debug_key, false));
|
||||||
|
mNewPrefs.setBackgroundModeEnabled(getPrefBoolean(R.string.pref_background_mode_key, true));
|
||||||
|
mNewPrefs.setAnimationsEnabled(getPrefBoolean(R.string.pref_animation_enable_key, false));
|
||||||
|
mNewPrefs.setAutoStart(getPrefBoolean(R.string.pref_autostart_key, false));
|
||||||
|
mNewPrefs.setSharingPictureServerUrl(getPrefString(R.string.pref_image_sharing_server_key, null));
|
||||||
|
mNewPrefs.setRemoteProvisioningUrl(getPrefString(R.string.pref_remote_provisioning_key, null));
|
||||||
|
|
||||||
|
doAccountsMigration();
|
||||||
|
deleteAllOldPreferences();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doAccountsMigration() {
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
lc.clearAuthInfos();
|
||||||
|
lc.clearProxyConfigs();
|
||||||
|
|
||||||
|
for (int i = 0; i < mOldPrefs.getInt(getString(R.string.pref_extra_accounts), 1); i++) {
|
||||||
|
doAccountMigration(i, i == getPrefInt(R.string.pref_default_account_key, 0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void doAccountMigration(int index, boolean isDefaultAccount) {
|
||||||
|
String key = index == 0 ? "" : String.valueOf(index);
|
||||||
|
|
||||||
|
String username = getPrefString(getString(R.string.pref_username_key) + key, null);
|
||||||
|
String userid = getPrefString(getString(R.string.pref_auth_userid_key) + key, null);
|
||||||
|
String password = getPrefString(getString(R.string.pref_passwd_key) + key, null);
|
||||||
|
String domain = getPrefString(getString(R.string.pref_domain_key) + key, null);
|
||||||
|
if (username != null && username.length() > 0 && password != null) {
|
||||||
|
mNewPrefs.setNewAccountUsername(username);
|
||||||
|
mNewPrefs.setNewAccountUserId(userid);
|
||||||
|
mNewPrefs.setNewAccountDomain(domain);
|
||||||
|
mNewPrefs.setNewAccountPassword(password);
|
||||||
|
|
||||||
|
String proxy = getPrefString(getString(R.string.pref_proxy_key) + key, null);
|
||||||
|
mNewPrefs.setNewAccountProxy(proxy);
|
||||||
|
String expire = getPrefString(R.string.pref_expire_key, null);
|
||||||
|
mNewPrefs.setNewAccountExpires(expire);
|
||||||
|
|
||||||
|
if (getPrefBoolean(getString(R.string.pref_enable_outbound_proxy_key) + key, false)) {
|
||||||
|
mNewPrefs.setNewAccountOutboundProxyEnabled(true);
|
||||||
|
}
|
||||||
|
if (mResources.getBoolean(R.bool.enable_push_id)) {
|
||||||
|
String regId = mNewPrefs.getPushNotificationRegistrationID();
|
||||||
|
String appId = getString(R.string.push_sender_id);
|
||||||
|
if (regId != null && mNewPrefs.isPushNotificationEnabled()) {
|
||||||
|
String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId;
|
||||||
|
mNewPrefs.setNewAccountContactParameters(contactInfos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
mNewPrefs.saveNewAccount();
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isDefaultAccount) {
|
||||||
|
mNewPrefs.setDefaultAccount(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteAllOldPreferences() {
|
||||||
|
Editor editor = mOldPrefs.edit();
|
||||||
|
editor.clear();
|
||||||
|
editor.commit();
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getString(int key) {
|
||||||
|
return mResources.getString(key);
|
||||||
|
}
|
||||||
|
private boolean getPrefBoolean(int key, boolean defaultValue) {
|
||||||
|
return mOldPrefs.getBoolean(mResources.getString(key), defaultValue);
|
||||||
|
}
|
||||||
|
private boolean getPrefBoolean(String key, boolean defaultValue) {
|
||||||
|
return mOldPrefs.getBoolean(key, defaultValue);
|
||||||
|
}
|
||||||
|
private String getPrefString(int key, String defaultValue) {
|
||||||
|
return mOldPrefs.getString(mResources.getString(key), defaultValue);
|
||||||
|
}
|
||||||
|
private int getPrefInt(int key, int defaultValue) {
|
||||||
|
return mOldPrefs.getInt(mResources.getString(key), defaultValue);
|
||||||
|
}
|
||||||
|
private String getPrefString(String key, String defaultValue) {
|
||||||
|
return mOldPrefs.getString(key, defaultValue);
|
||||||
|
}
|
||||||
|
}
|
|
@ -45,8 +45,7 @@ public class RemoteProvisioning {
|
||||||
}
|
}
|
||||||
|
|
||||||
String strFileContents = fileContents.toString();
|
String strFileContents = fileContents.toString();
|
||||||
Log.i("Download Success");
|
Log.i("Remote provisioning download successful");
|
||||||
Log.i(strFileContents);
|
|
||||||
|
|
||||||
// Initialize converter
|
// Initialize converter
|
||||||
LpConfig lp = LinphoneCoreFactory.instance().createLpConfig(mLocalLP);
|
LpConfig lp = LinphoneCoreFactory.instance().createLpConfig(mLocalLP);
|
||||||
|
|
861
src/org/linphone/SettingsFragment.java
Normal file
861
src/org/linphone/SettingsFragment.java
Normal file
|
@ -0,0 +1,861 @@
|
||||||
|
package org.linphone;
|
||||||
|
|
||||||
|
/*
|
||||||
|
SettingsFragment.java
|
||||||
|
Copyright (C) 2013 Belledonne Communications, Grenoble, France
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or
|
||||||
|
modify it under the terms of the GNU General Public License
|
||||||
|
as published by the Free Software Foundation; either version 2
|
||||||
|
of the License, or (at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.linphone.LinphoneManager.EcCalibrationListener;
|
||||||
|
import org.linphone.core.LinphoneAddress;
|
||||||
|
import org.linphone.core.LinphoneCore;
|
||||||
|
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||||
|
import org.linphone.core.LinphoneCore.MediaEncryption;
|
||||||
|
import org.linphone.core.LinphoneCoreException;
|
||||||
|
import org.linphone.core.LinphoneCoreFactory;
|
||||||
|
import org.linphone.core.LinphoneProxyConfig;
|
||||||
|
import org.linphone.core.PayloadType;
|
||||||
|
import org.linphone.mediastream.Log;
|
||||||
|
import org.linphone.mediastream.Version;
|
||||||
|
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
||||||
|
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||||
|
import org.linphone.setup.SetupActivity;
|
||||||
|
import org.linphone.ui.LedPreference;
|
||||||
|
import org.linphone.ui.PreferencesListFragment;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.os.Handler;
|
||||||
|
import android.preference.CheckBoxPreference;
|
||||||
|
import android.preference.ListPreference;
|
||||||
|
import android.preference.Preference;
|
||||||
|
import android.preference.Preference.OnPreferenceChangeListener;
|
||||||
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
|
import android.preference.PreferenceCategory;
|
||||||
|
import android.preference.PreferenceScreen;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Sylvain Berfini
|
||||||
|
*/
|
||||||
|
public class SettingsFragment extends PreferencesListFragment implements EcCalibrationListener {
|
||||||
|
private static final int WIZARD_INTENT = 1;
|
||||||
|
private LinphonePreferences mPrefs;
|
||||||
|
private Handler mHandler = new Handler();
|
||||||
|
|
||||||
|
public SettingsFragment() {
|
||||||
|
super(R.xml.preferences);
|
||||||
|
mPrefs = LinphonePreferences.instance();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle bundle) {
|
||||||
|
super.onCreate(bundle);
|
||||||
|
|
||||||
|
// Init the settings page interface
|
||||||
|
initSettings();
|
||||||
|
setListeners();
|
||||||
|
hideSettings();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Inits the values or the listener on some settings
|
||||||
|
private void initSettings() {
|
||||||
|
//Init accounts on Resume instead of on Create to update the account list when coming back from wizard
|
||||||
|
|
||||||
|
initAudioSettings();
|
||||||
|
initVideoSettings();
|
||||||
|
initCallSettings();
|
||||||
|
initNetworkSettings();
|
||||||
|
initAdvancedSettings();
|
||||||
|
|
||||||
|
// Add action on About button
|
||||||
|
findPreference(getString(R.string.menu_about_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
|
LinphoneActivity.instance().displayAbout();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
findPreference(getString(R.string.setup_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
Intent intent = new Intent(LinphoneService.instance(), SetupActivity.class);
|
||||||
|
startActivityForResult(intent, WIZARD_INTENT);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sets listener for each preference to update the matching value in linphonecore
|
||||||
|
private void setListeners() {
|
||||||
|
setAudioPreferencesListener();
|
||||||
|
setVideoPreferencesListener();
|
||||||
|
setCallPreferencesListener();
|
||||||
|
setNetworkPreferencesListener();
|
||||||
|
setAdvancedPreferencesListener();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read the values set in resources and hides the settings accordingly
|
||||||
|
private void hideSettings() {
|
||||||
|
if (!getResources().getBoolean(R.bool.display_about_in_settings)) {
|
||||||
|
hidePreference(R.string.menu_about_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getResources().getBoolean(R.bool.hide_accounts)) {
|
||||||
|
emptyAndHidePreference(R.string.pref_sipaccounts_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getResources().getBoolean(R.bool.hide_wizard)) {
|
||||||
|
hidePreference(R.string.setup_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getResources().getBoolean(R.bool.disable_animations)) {
|
||||||
|
uncheckAndHidePreference(R.string.pref_animation_enable_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!getResources().getBoolean(R.bool.enable_linphone_friends)) {
|
||||||
|
emptyAndHidePreference(R.string.pref_linphone_friend_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getResources().getBoolean(R.bool.disable_chat)) {
|
||||||
|
findPreference(getString(R.string.pref_image_sharing_server_key)).setLayoutResource(R.layout.hidden);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!getResources().getBoolean(R.bool.enable_push_id)) {
|
||||||
|
hidePreference(R.string.pref_push_notification_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Version.isVideoCapable()) {
|
||||||
|
uncheckAndHidePreference(R.string.pref_video_enable_key);
|
||||||
|
} else {
|
||||||
|
if (!AndroidCameraConfiguration.hasFrontCamera()) {
|
||||||
|
uncheckAndHidePreference(R.string.pref_video_use_front_camera_key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Hacks.hasBuiltInEchoCanceller()) {
|
||||||
|
uncheckAndHidePreference(R.string.pref_echo_cancellation_key);
|
||||||
|
hidePreference(R.string.pref_echo_canceller_calibration_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!LinphoneManager.getLc().isTunnelAvailable()) {
|
||||||
|
emptyAndHidePreference(R.string.pref_tunnel_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getResources().getBoolean(R.bool.hide_camera_settings)) {
|
||||||
|
emptyAndHidePreference(R.string.pref_video_key);
|
||||||
|
hidePreference(R.string.pref_video_enable_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getResources().getBoolean(R.bool.disable_every_log)) {
|
||||||
|
uncheckAndHidePreference(R.string.pref_debug_key);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!LinphoneManager.getLc().upnpAvailable()) {
|
||||||
|
uncheckAndHidePreference(R.string.pref_upnp_enable_key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void uncheckAndHidePreference(int preferenceKey) {
|
||||||
|
Preference preference = findPreference(getString(preferenceKey));
|
||||||
|
if (!(preference instanceof CheckBoxPreference))
|
||||||
|
return;
|
||||||
|
|
||||||
|
CheckBoxPreference checkBoxPreference = (CheckBoxPreference) preference;
|
||||||
|
checkBoxPreference.setChecked(false);
|
||||||
|
hidePreference(checkBoxPreference);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void emptyAndHidePreference(int preferenceKey) {
|
||||||
|
Preference preference = findPreference(getString(preferenceKey));
|
||||||
|
if (preference instanceof PreferenceCategory)
|
||||||
|
emptyAndHidePreferenceCategory(preferenceKey);
|
||||||
|
else if (preference instanceof PreferenceScreen)
|
||||||
|
emptyAndHidePreferenceScreen(preferenceKey);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void emptyAndHidePreferenceCategory(int preferenceKey) {
|
||||||
|
Preference preference = findPreference(getString(preferenceKey));
|
||||||
|
if (!(preference instanceof PreferenceCategory))
|
||||||
|
return;
|
||||||
|
|
||||||
|
PreferenceCategory preferenceCategory = (PreferenceCategory) preference;
|
||||||
|
preferenceCategory.removeAll();
|
||||||
|
hidePreference(preferenceCategory);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void emptyAndHidePreferenceScreen(int preferenceKey) {
|
||||||
|
Preference preference = findPreference(getString(preferenceKey));
|
||||||
|
if (!(preference instanceof PreferenceScreen))
|
||||||
|
return;
|
||||||
|
|
||||||
|
PreferenceScreen preferenceScreen = (PreferenceScreen) preference;
|
||||||
|
preferenceScreen.removeAll();
|
||||||
|
hidePreference(preferenceScreen);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void hidePreference(int preferenceKey) {
|
||||||
|
hidePreference(findPreference(getString(preferenceKey)));
|
||||||
|
}
|
||||||
|
|
||||||
|
private void hidePreference(Preference preference) {
|
||||||
|
preference.setLayoutResource(R.layout.hidden);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setPreferenceDefaultValueAndSummary(int pref, String value) {
|
||||||
|
findPreference(getString(pref)).setDefaultValue(value);
|
||||||
|
findPreference(getString(pref)).setSummary(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initAccounts() {
|
||||||
|
PreferenceCategory accounts = (PreferenceCategory) findPreference(getString(R.string.pref_sipaccounts_key));
|
||||||
|
accounts.removeAll();
|
||||||
|
|
||||||
|
// Get already configured extra accounts
|
||||||
|
int defaultAccountID = mPrefs.getDefaultAccountIndex();
|
||||||
|
int nbAccounts = mPrefs.getAccountCount();
|
||||||
|
for (int i = 0; i < nbAccounts; i++) {
|
||||||
|
final int accountId = i;
|
||||||
|
// For each, add menus to configure it
|
||||||
|
LedPreference account = new LedPreference(LinphoneService.instance());
|
||||||
|
String username = mPrefs.getAccountUsername(accountId);
|
||||||
|
String domain = mPrefs.getAccountDomain(accountId);
|
||||||
|
|
||||||
|
if (username == null) {
|
||||||
|
account.setTitle(getString(R.string.pref_sipaccount));
|
||||||
|
} else {
|
||||||
|
account.setTitle(username + "@" + domain);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (defaultAccountID == i) {
|
||||||
|
account.setSummary(R.string.default_account_flag);
|
||||||
|
}
|
||||||
|
|
||||||
|
account.setOnPreferenceClickListener(new OnPreferenceClickListener()
|
||||||
|
{
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
LinphoneActivity.instance().displayAccountSettings(accountId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
updateAccountLed(account, username, domain, mPrefs.isAccountEnabled(i));
|
||||||
|
accounts.addPreference(account);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateAccountLed(final LedPreference me, final String username, final String domain, boolean enabled) {
|
||||||
|
if (!enabled) {
|
||||||
|
me.setLed(R.drawable.led_disconnected);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
|
||||||
|
for (LinphoneProxyConfig lpc : LinphoneManager.getLc().getProxyConfigList()) {
|
||||||
|
LinphoneAddress addr = null;
|
||||||
|
try {
|
||||||
|
addr = LinphoneCoreFactory.instance().createLinphoneAddress(lpc.getIdentity());
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
me.setLed(R.drawable.led_disconnected);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (addr.getUserName().equals(username) && addr.getDomain().equals(domain)) {
|
||||||
|
if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationOk) {
|
||||||
|
me.setLed(R.drawable.led_connected);
|
||||||
|
} else if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationFailed) {
|
||||||
|
me.setLed(R.drawable.led_error);
|
||||||
|
} else if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationProgress) {
|
||||||
|
me.setLed(R.drawable.led_inprogress);
|
||||||
|
mHandler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
updateAccountLed(me, username, domain, true);
|
||||||
|
}
|
||||||
|
}, 500);
|
||||||
|
} else {
|
||||||
|
me.setLed(R.drawable.led_disconnected);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initMediaEncryptionPreference(ListPreference pref) {
|
||||||
|
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||||
|
List<CharSequence> values = new ArrayList<CharSequence>();
|
||||||
|
entries.add(getString(R.string.media_encryption_none));
|
||||||
|
values.add(getString(R.string.pref_media_encryption_key_none));
|
||||||
|
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
if (lc == null || getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
|
||||||
|
setListPreferenceValues(pref, entries, values);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean hasZrtp = lc.mediaEncryptionSupported(MediaEncryption.ZRTP);
|
||||||
|
boolean hasSrtp = lc.mediaEncryptionSupported(MediaEncryption.SRTP);
|
||||||
|
if (!hasSrtp && !hasZrtp) {
|
||||||
|
pref.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
if (hasSrtp){
|
||||||
|
entries.add(getString(R.string.media_encryption_srtp));
|
||||||
|
values.add(getString(R.string.pref_media_encryption_key_srtp));
|
||||||
|
}
|
||||||
|
if (hasZrtp){
|
||||||
|
entries.add(getString(R.string.media_encryption_zrtp));
|
||||||
|
values.add(getString(R.string.pref_media_encryption_key_zrtp));
|
||||||
|
}
|
||||||
|
setListPreferenceValues(pref, entries, values);
|
||||||
|
}
|
||||||
|
|
||||||
|
MediaEncryption value = mPrefs.getMediaEncryption();
|
||||||
|
pref.setSummary(value.toString());
|
||||||
|
|
||||||
|
String key = getString(R.string.pref_media_encryption_key_none);
|
||||||
|
if (value.toString().equals(getString(R.string.media_encryption_srtp)))
|
||||||
|
key = getString(R.string.pref_media_encryption_key_srtp);
|
||||||
|
else if (value.toString().equals(getString(R.string.media_encryption_zrtp)))
|
||||||
|
key = getString(R.string.pref_media_encryption_key_zrtp);
|
||||||
|
pref.setDefaultValue(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializeTransportPreferences(ListPreference pref) {
|
||||||
|
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||||
|
List<CharSequence> values = new ArrayList<CharSequence>();
|
||||||
|
entries.add(getString(R.string.pref_transport_udp));
|
||||||
|
values.add(getString(R.string.pref_transport_udp_key));
|
||||||
|
entries.add(getString(R.string.pref_transport_tcp));
|
||||||
|
values.add(getString(R.string.pref_transport_tcp_key));
|
||||||
|
|
||||||
|
if (!getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
|
||||||
|
entries.add(getString(R.string.pref_transport_tls));
|
||||||
|
values.add(getString(R.string.pref_transport_tls_key));
|
||||||
|
}
|
||||||
|
setListPreferenceValues(pref, entries, values);
|
||||||
|
|
||||||
|
String value = mPrefs.getTransport();
|
||||||
|
pref.setSummary(value);
|
||||||
|
String key = getString(R.string.pref_transport_udp_key);
|
||||||
|
if (value.equals(getString(R.string.pref_transport_tcp)))
|
||||||
|
key = getString(R.string.pref_transport_tcp_key);
|
||||||
|
else if (value.equals(getString(R.string.pref_transport_tls)))
|
||||||
|
key = getString(R.string.pref_transport_tls_key);
|
||||||
|
pref.setDefaultValue(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initializePreferredVideoSizePreferences(ListPreference pref) {
|
||||||
|
List<CharSequence> entries = new ArrayList<CharSequence>();
|
||||||
|
List<CharSequence> values = new ArrayList<CharSequence>();
|
||||||
|
if (Version.isHDVideoCapable()) {
|
||||||
|
entries.add(getString(R.string.pref_preferred_video_size_hd));
|
||||||
|
values.add(getString(R.string.pref_preferred_video_size_hd_key));
|
||||||
|
}
|
||||||
|
entries.add(getString(R.string.pref_preferred_video_size_vga));
|
||||||
|
values.add(getString(R.string.pref_preferred_video_size_vga_key));
|
||||||
|
entries.add(getString(R.string.pref_preferred_video_size_qvga));
|
||||||
|
values.add(getString(R.string.pref_preferred_video_size_qvga_key));
|
||||||
|
setListPreferenceValues(pref, entries, values);
|
||||||
|
|
||||||
|
String value = mPrefs.getPreferredVideoSize();
|
||||||
|
pref.setSummary(value);
|
||||||
|
String key = getString(R.string.pref_preferred_video_size_qvga_key);
|
||||||
|
if (value.equals(getString(R.string.pref_preferred_video_size_vga)))
|
||||||
|
key = getString(R.string.pref_preferred_video_size_vga_key);
|
||||||
|
else if (value.equals(getString(R.string.pref_preferred_video_size_hd)))
|
||||||
|
key = getString(R.string.pref_preferred_video_size_hd_key);
|
||||||
|
pref.setDefaultValue(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void setListPreferenceValues(ListPreference pref, List<CharSequence> entries, List<CharSequence> values) {
|
||||||
|
CharSequence[] contents = new CharSequence[entries.size()];
|
||||||
|
entries.toArray(contents);
|
||||||
|
pref.setEntries(contents);
|
||||||
|
contents = new CharSequence[values.size()];
|
||||||
|
values.toArray(contents);
|
||||||
|
pref.setEntryValues(contents);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initAudioSettings() {
|
||||||
|
PreferenceCategory codecs = (PreferenceCategory) findPreference(getString(R.string.pref_codecs_key));
|
||||||
|
codecs.removeAll();
|
||||||
|
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
for(final PayloadType pt : lc.getAudioCodecs()) {
|
||||||
|
CheckBoxPreference codec = new CheckBoxPreference(LinphoneService.instance());
|
||||||
|
codec.setTitle(pt.getMime());
|
||||||
|
codec.setSummary(pt.getRate() + " Hz");
|
||||||
|
codec.setChecked(lc.isPayloadTypeEnabled(pt));
|
||||||
|
|
||||||
|
codec.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
try {
|
||||||
|
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
codecs.addPreference(codec);
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBoxPreference echoCancellation = (CheckBoxPreference) findPreference(getString(R.string.pref_echo_cancellation_key));
|
||||||
|
echoCancellation.setChecked(mPrefs.isEchoCancellationEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setAudioPreferencesListener() {
|
||||||
|
findPreference(getString(R.string.pref_echo_cancellation_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enabled = (Boolean) newValue;
|
||||||
|
mPrefs.setEchoCancellation(enabled);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_echo_canceller_calibration_key)).setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
synchronized (SettingsFragment.this) {
|
||||||
|
try {
|
||||||
|
LinphoneManager.getInstance().startEcCalibration(SettingsFragment.this);
|
||||||
|
preference.setSummary(R.string.ec_calibrating);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
Log.w(e, "Cannot calibrate EC");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initVideoSettings() {
|
||||||
|
initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_key)));
|
||||||
|
|
||||||
|
PreferenceCategory codecs = (PreferenceCategory) findPreference(getString(R.string.pref_video_codecs_key));
|
||||||
|
codecs.removeAll();
|
||||||
|
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
for(final PayloadType pt : lc.getVideoCodecs()) {
|
||||||
|
CheckBoxPreference codec = new CheckBoxPreference(LinphoneService.instance());
|
||||||
|
codec.setTitle(pt.getMime());
|
||||||
|
|
||||||
|
if (!pt.getMime().equals("VP8")) {
|
||||||
|
if (getResources().getBoolean(R.bool.disable_all_patented_codecs_for_markets)) {
|
||||||
|
continue;
|
||||||
|
} else {
|
||||||
|
if (!Version.hasFastCpuWithAsmOptim() && pt.getMime().equals("H264"))
|
||||||
|
{
|
||||||
|
// Android without neon doesn't support H264
|
||||||
|
Log.w("CPU does not have asm optimisations available, disabling H264");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
codec.setChecked(lc.isPayloadTypeEnabled(pt));
|
||||||
|
|
||||||
|
codec.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
try {
|
||||||
|
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
codecs.addPreference(codec);
|
||||||
|
}
|
||||||
|
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_enable_key))).setChecked(mPrefs.isVideoEnabled());
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_use_front_camera_key))).setChecked(mPrefs.useFrontCam());
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_initiate_call_with_video_key))).setChecked(mPrefs.shouldInitiateVideoCall());
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_automatically_share_my_video_key))).setChecked(mPrefs.shouldAutomaticallyShareMyVideo());
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_automatically_accept_video_key))).setChecked(mPrefs.shouldAutomaticallyAcceptVideoRequests());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setVideoPreferencesListener() {
|
||||||
|
findPreference(getString(R.string.pref_video_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
mPrefs.enableVideo(enable);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_video_use_front_camera_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
mPrefs.setFrontCamAsDefault(enable);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_video_initiate_call_with_video_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
mPrefs.setInitiateVideoCall(enable);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_video_automatically_share_my_video_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
mPrefs.setAutomaticallyShareMyVideo(enable);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_video_automatically_accept_video_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean enable = (Boolean) newValue;
|
||||||
|
mPrefs.setAutomaticallyAcceptVideoRequests(enable);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_preferred_video_size_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setPreferredVideoSize(newValue.toString());
|
||||||
|
preference.setSummary(mPrefs.getPreferredVideoSize());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initCallSettings() {
|
||||||
|
CheckBoxPreference rfc2833 = (CheckBoxPreference) findPreference(getString(R.string.pref_rfc2833_dtmf_key));
|
||||||
|
CheckBoxPreference sipInfo = (CheckBoxPreference) findPreference(getString(R.string.pref_sipinfo_dtmf_key));
|
||||||
|
if (mPrefs.useRfc2833Dtmfs()) {
|
||||||
|
rfc2833.setChecked(true);
|
||||||
|
sipInfo.setChecked(false);
|
||||||
|
sipInfo.setEnabled(false);
|
||||||
|
} else if (mPrefs.useSipInfoDtmfs()) {
|
||||||
|
sipInfo.setChecked(true);
|
||||||
|
rfc2833.setChecked(false);
|
||||||
|
rfc2833.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setCallPreferencesListener() {
|
||||||
|
findPreference(getString(R.string.pref_rfc2833_dtmf_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean use = (Boolean) newValue;
|
||||||
|
CheckBoxPreference sipInfo = (CheckBoxPreference) findPreference(getString(R.string.pref_sipinfo_dtmf_key));
|
||||||
|
sipInfo.setEnabled(!use);
|
||||||
|
sipInfo.setChecked(false);
|
||||||
|
mPrefs.sendDtmfsAsRfc2833(use);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_sipinfo_dtmf_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean use = (Boolean) newValue;
|
||||||
|
CheckBoxPreference rfc2833 = (CheckBoxPreference) findPreference(getString(R.string.pref_rfc2833_dtmf_key));
|
||||||
|
rfc2833.setEnabled(!use);
|
||||||
|
rfc2833.setChecked(false);
|
||||||
|
mPrefs.sendDTMFsAsSipInfo(use);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initNetworkSettings() {
|
||||||
|
initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key)));
|
||||||
|
initializeTransportPreferences((ListPreference) findPreference(getString(R.string.pref_transport_key)));
|
||||||
|
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_wifi_only_key))).setChecked(mPrefs.isWifiOnlyEnabled());
|
||||||
|
|
||||||
|
// Disable UPnP if ICE si enabled, or disable ICE if UPnP is enabled
|
||||||
|
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
|
||||||
|
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
|
||||||
|
ice.setChecked(mPrefs.isIceEnabled());
|
||||||
|
if (mPrefs.isIceEnabled()) {
|
||||||
|
upnp.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
upnp.setChecked(mPrefs.isUpnpEnabled());
|
||||||
|
if (mPrefs.isUpnpEnabled()) {
|
||||||
|
ice.setEnabled(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
CheckBoxPreference randomPort = (CheckBoxPreference) findPreference(getString(R.string.pref_transport_use_random_ports_key));
|
||||||
|
randomPort.setChecked(mPrefs.isUsingRandomPort());
|
||||||
|
|
||||||
|
// Disable sip port choice if port is random
|
||||||
|
Preference sipPort = findPreference(getString(R.string.pref_sip_port_key));
|
||||||
|
sipPort.setEnabled(!randomPort.isChecked());
|
||||||
|
sipPort.setSummary(mPrefs.getSipPort());
|
||||||
|
sipPort.setDefaultValue(mPrefs.getSipPort());
|
||||||
|
|
||||||
|
Preference stun = findPreference(getString(R.string.pref_stun_server_key));
|
||||||
|
stun.setSummary(mPrefs.getStunServer());
|
||||||
|
stun.setDefaultValue(mPrefs.getStunServer());
|
||||||
|
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_push_notification_key))).setChecked(mPrefs.isPushNotificationEnabled());
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_ipv6_key))).setChecked(mPrefs.isUsingIpv6());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setNetworkPreferencesListener() {
|
||||||
|
findPreference(getString(R.string.pref_wifi_only_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setWifiOnlyEnabled((Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_stun_server_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setStunServer(newValue.toString());
|
||||||
|
preference.setSummary(newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_ice_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
upnp.setChecked(false);
|
||||||
|
upnp.setEnabled(!value);
|
||||||
|
mPrefs.setIceEnabled((Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
ice.setChecked(false);
|
||||||
|
ice.setEnabled(!value);
|
||||||
|
mPrefs.setUpnpEnabled(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_transport_use_random_ports_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean randomPort = (Boolean) newValue;
|
||||||
|
mPrefs.useRandomPort((Boolean) newValue);
|
||||||
|
findPreference(getString(R.string.pref_sip_port_key)).setEnabled(!randomPort);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_sip_port_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
int port = -1;
|
||||||
|
try {
|
||||||
|
port = Integer.parseInt(newValue.toString());
|
||||||
|
} catch (NumberFormatException nfe) { }
|
||||||
|
|
||||||
|
mPrefs.setSipPort(port);
|
||||||
|
preference.setSummary(newValue.toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_transport_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setTransport(newValue.toString());
|
||||||
|
preference.setSummary(mPrefs.getTransport());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_media_encryption_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
String value = newValue.toString();
|
||||||
|
MediaEncryption menc = MediaEncryption.None;
|
||||||
|
if (value.equals(getString(R.string.pref_media_encryption_key_srtp)))
|
||||||
|
menc = MediaEncryption.SRTP;
|
||||||
|
else if (value.equals(getString(R.string.pref_media_encryption_key_zrtp)))
|
||||||
|
menc = MediaEncryption.ZRTP;
|
||||||
|
mPrefs.setMediaEncryption(menc);
|
||||||
|
|
||||||
|
preference.setSummary(mPrefs.getMediaEncryption().toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_push_notification_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.setPushNotificationEnabled((Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_ipv6_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
mPrefs.useIpv6((Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initAdvancedSettings() {
|
||||||
|
((CheckBoxPreference)findPreference(getString(R.string.pref_debug_key))).setChecked(mPrefs.isDebugEnabled());
|
||||||
|
((CheckBoxPreference)findPreference(getString(R.string.pref_background_mode_key))).setChecked(mPrefs.isBackgroundModeEnabled());
|
||||||
|
((CheckBoxPreference)findPreference(getString(R.string.pref_animation_enable_key))).setChecked(mPrefs.areAnimationsEnabled());
|
||||||
|
((CheckBoxPreference)findPreference(getString(R.string.pref_autostart_key))).setChecked(mPrefs.isAutoStartEnabled());
|
||||||
|
setPreferenceDefaultValueAndSummary(R.string.pref_image_sharing_server_key, mPrefs.getSharingPictureServerUrl());
|
||||||
|
setPreferenceDefaultValueAndSummary(R.string.pref_remote_provisioning_key, mPrefs.getRemoteProvisioningUrl());
|
||||||
|
setPreferenceDefaultValueAndSummary(R.string.pref_display_name_key, mPrefs.getDefaultDisplayName());
|
||||||
|
setPreferenceDefaultValueAndSummary(R.string.pref_user_name_key, mPrefs.getDefaultUsername());
|
||||||
|
}
|
||||||
|
|
||||||
|
private void setAdvancedPreferencesListener() {
|
||||||
|
findPreference(getString(R.string.pref_debug_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
mPrefs.setDebugEnabled(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_background_mode_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
mPrefs.setBackgroundModeEnabled(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_animation_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
mPrefs.setAnimationsEnabled(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_autostart_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean value = (Boolean) newValue;
|
||||||
|
mPrefs.setAutoStart(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_image_sharing_server_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
String value = (String) newValue;
|
||||||
|
mPrefs.setSharingPictureServerUrl(value);
|
||||||
|
preference.setSummary(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_remote_provisioning_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
String value = (String) newValue;
|
||||||
|
mPrefs.setRemoteProvisioningUrl(value);
|
||||||
|
preference.setSummary(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_display_name_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
String value = (String) newValue;
|
||||||
|
mPrefs.setDefaultDisplayName(value);
|
||||||
|
preference.setSummary(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_user_name_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
String value = (String) newValue;
|
||||||
|
mPrefs.setDefaultUsername(value);
|
||||||
|
preference.setSummary(value);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onEcCalibrationStatus(final EcCalibratorStatus status, final int delayMs) {
|
||||||
|
mHandler.post(new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
CheckBoxPreference echoCancellation = (CheckBoxPreference) findPreference(getString(R.string.pref_echo_cancellation_key));
|
||||||
|
Preference echoCancellerCalibration = findPreference(getString(R.string.pref_echo_canceller_calibration_key));
|
||||||
|
|
||||||
|
if (status == EcCalibratorStatus.DoneNoEcho) {
|
||||||
|
echoCancellerCalibration.setSummary(R.string.no_echo);
|
||||||
|
echoCancellation.setChecked(false);
|
||||||
|
} else if (status == EcCalibratorStatus.Done) {
|
||||||
|
echoCancellerCalibration.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
|
||||||
|
echoCancellation.setChecked(true);
|
||||||
|
} else if (status == EcCalibratorStatus.Failed) {
|
||||||
|
echoCancellerCalibration.setSummary(R.string.failed);
|
||||||
|
echoCancellation.setChecked(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
initAccounts();
|
||||||
|
|
||||||
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
|
LinphoneActivity.instance().selectMenu(FragmentsAvailable.SETTINGS);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -38,10 +38,8 @@ import android.app.Activity;
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
@ -485,13 +483,9 @@ public class StatusFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
class AccountsListAdapter extends BaseAdapter {
|
class AccountsListAdapter extends BaseAdapter {
|
||||||
private SharedPreferences prefs;
|
|
||||||
private List<CheckBox> checkboxes;
|
private List<CheckBox> checkboxes;
|
||||||
|
|
||||||
AccountsListAdapter() {
|
AccountsListAdapter() {
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
|
||||||
prefs = PreferenceManager.getDefaultSharedPreferences(LinphoneActivity.instance());
|
|
||||||
}
|
|
||||||
checkboxes = new ArrayList<CheckBox>();
|
checkboxes = new ArrayList<CheckBox>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -501,23 +495,16 @@ public class StatusFragment extends Fragment {
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
CheckBox checkBox = (CheckBox) v;
|
CheckBox checkBox = (CheckBox) v;
|
||||||
if (checkBox.isChecked()) {
|
if (checkBox.isChecked()) {
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
|
||||||
String tag = (String) checkBox.getTag();
|
String tag = (String) checkBox.getTag();
|
||||||
String sipAddress = tag.split(":")[0];
|
String sipAddress = tag.split(":")[0];
|
||||||
int accountPosition = Integer.parseInt(tag.split(":")[1]);
|
int accountPosition = Integer.parseInt(tag.split(":")[1]);
|
||||||
|
|
||||||
int nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 0);
|
int nbAccounts = LinphonePreferences.instance().getAccountCount();
|
||||||
int accountIndex = 0;
|
int accountIndex = 0;
|
||||||
for (int i = 0; i < nbAccounts; i++)
|
for (int i = 0; i < nbAccounts; i++)
|
||||||
{
|
{
|
||||||
String keyUsername = getString(R.string.pref_username_key);
|
String username = LinphonePreferences.instance().getAccountUsername(i);
|
||||||
String keyDomain = getString(R.string.pref_domain_key);
|
String domain = LinphonePreferences.instance().getAccountDomain(i);
|
||||||
if (i > 0) {
|
|
||||||
keyUsername += i + "";
|
|
||||||
keyDomain += i + "";
|
|
||||||
}
|
|
||||||
String username = prefs.getString(keyUsername, "");
|
|
||||||
String domain = prefs.getString(keyDomain, "");
|
|
||||||
String identity = username + "@" + domain;
|
String identity = username + "@" + domain;
|
||||||
if (identity.equals(sipAddress)) {
|
if (identity.equals(sipAddress)) {
|
||||||
accountIndex = i;
|
accountIndex = i;
|
||||||
|
@ -525,8 +512,7 @@ public class StatusFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
editor.putInt(getString(R.string.pref_default_account_key), accountIndex);
|
LinphonePreferences.instance().setDefaultAccount(accountIndex);
|
||||||
editor.commit();
|
|
||||||
|
|
||||||
for (CheckBox cb : checkboxes) {
|
for (CheckBox cb : checkboxes) {
|
||||||
cb.setChecked(false);
|
cb.setChecked(false);
|
||||||
|
@ -590,34 +576,30 @@ public class StatusFragment extends Fragment {
|
||||||
isDefault.setChecked(false);
|
isDefault.setChecked(false);
|
||||||
isDefault.setEnabled(true);
|
isDefault.setEnabled(true);
|
||||||
|
|
||||||
if (prefs != null) {
|
int nbAccounts = LinphonePreferences.instance().getAccountCount();
|
||||||
int nbAccounts = prefs.getInt(getString(R.string.pref_extra_accounts), 0);
|
int accountIndex = 0;
|
||||||
int accountIndex = 0;
|
for (int i = 0; i < nbAccounts; i++)
|
||||||
for (int i = 0; i < nbAccounts; i++)
|
{
|
||||||
{
|
String username = LinphonePreferences.instance().getAccountUsername(i);
|
||||||
String keyUsername = getString(R.string.pref_username_key);
|
String domain = LinphonePreferences.instance().getAccountDomain(i);
|
||||||
String keyDomain = getString(R.string.pref_domain_key);
|
String id = username + "@" + domain;
|
||||||
if (i > 0) {
|
if (id.equals(sipAddress)) {
|
||||||
keyUsername += i + "";
|
accountIndex = i;
|
||||||
keyDomain += i + "";
|
break;
|
||||||
}
|
|
||||||
String username = prefs.getString(keyUsername, "");
|
|
||||||
String domain = prefs.getString(keyDomain, "");
|
|
||||||
String id = username + "@" + domain;
|
|
||||||
if (id.equals(sipAddress)) {
|
|
||||||
accountIndex = i;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (prefs.getInt(getString(R.string.pref_default_account_key), 0) == accountIndex) {
|
}
|
||||||
|
|
||||||
|
// Force led if account is disabled
|
||||||
|
if (!LinphonePreferences.instance().isAccountEnabled(accountIndex)) {
|
||||||
|
status.setImageResource(getStatusIconResource(RegistrationState.RegistrationNone, false));
|
||||||
|
} else {
|
||||||
|
if (LinphonePreferences.instance().getDefaultAccountIndex() == accountIndex) {
|
||||||
isDefault.setChecked(true);
|
isDefault.setChecked(true);
|
||||||
isDefault.setEnabled(false);
|
isDefault.setEnabled(false);
|
||||||
status.setImageResource(getStatusIconResource(lpc.getState(), true));
|
status.setImageResource(getStatusIconResource(lpc.getState(), true));
|
||||||
} else {
|
} else {
|
||||||
status.setImageResource(getStatusIconResource(lpc.getState(), false));
|
status.setImageResource(getStatusIconResource(lpc.getState(), false));
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
status.setImageResource(getStatusIconResource(lpc.getState(), false));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
isDefault.setOnClickListener(defaultListener);
|
isDefault.setOnClickListener(defaultListener);
|
||||||
|
|
|
@ -1,12 +1,11 @@
|
||||||
package org.linphone.compatibility;
|
package org.linphone.compatibility;
|
||||||
|
|
||||||
|
import org.linphone.LinphonePreferences;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.view.Display;
|
import android.view.Display;
|
||||||
|
|
||||||
import com.google.android.gcm.GCMRegistrar;
|
import com.google.android.gcm.GCMRegistrar;
|
||||||
|
@ -40,28 +39,21 @@ public class ApiEightPlus {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void initPushNotificationService(Context context) {
|
public static void initPushNotificationService(Context context) {
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
// Starting the push notification service
|
// Starting the push notification service
|
||||||
GCMRegistrar.checkDevice(context);
|
GCMRegistrar.checkDevice(context);
|
||||||
GCMRegistrar.checkManifest(context);
|
GCMRegistrar.checkManifest(context);
|
||||||
final String regId = GCMRegistrar.getRegistrationId(context);
|
final String regId = GCMRegistrar.getRegistrationId(context);
|
||||||
String newPushSenderID = context.getString(R.string.push_sender_id);
|
String newPushSenderID = context.getString(R.string.push_sender_id);
|
||||||
String currentPushSenderID = prefs.getString(context.getString(R.string.push_sender_id_key), null);
|
String currentPushSenderID = LinphonePreferences.instance().getPushNotificationRegistrationID();
|
||||||
if (regId.equals("") || currentPushSenderID == null || !currentPushSenderID.equals(newPushSenderID)) {
|
if (regId.equals("") || currentPushSenderID == null || !currentPushSenderID.equals(newPushSenderID)) {
|
||||||
GCMRegistrar.register(context, newPushSenderID);
|
GCMRegistrar.register(context, newPushSenderID);
|
||||||
|
|
||||||
Log.d("Push Notification : storing current sender id = " + newPushSenderID);
|
Log.d("Push Notification : storing current sender id = " + newPushSenderID);
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
LinphonePreferences.instance().setPushNotificationRegistrationID(newPushSenderID);
|
||||||
editor.putString(context.getString(R.string.push_sender_id_key), newPushSenderID);
|
|
||||||
|
|
||||||
editor.commit();
|
|
||||||
} else {
|
} else {
|
||||||
Log.d("Push Notification : already registered with id = " + regId);
|
Log.d("Push Notification : already registered with id = " + regId);
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
LinphonePreferences.instance().setPushNotificationRegistrationID(regId);
|
||||||
editor.putString(context.getString(R.string.push_reg_id_key), regId);
|
|
||||||
editor.commit();
|
|
||||||
}
|
}
|
||||||
} catch (java.lang.UnsupportedOperationException e) {
|
} catch (java.lang.UnsupportedOperationException e) {
|
||||||
Log.i("Push Notification not activated");
|
Log.i("Push Notification not activated");
|
||||||
|
|
|
@ -19,14 +19,12 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
|
import org.linphone.LinphonePreferences;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.LinphoneCoreException;
|
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
|
|
||||||
import com.google.android.gcm.GCMBaseIntentService;
|
import com.google.android.gcm.GCMBaseIntentService;
|
||||||
|
|
||||||
|
@ -57,27 +55,13 @@ public class GCMService extends GCMBaseIntentService {
|
||||||
@Override
|
@Override
|
||||||
protected void onRegistered(Context context, String regId) {
|
protected void onRegistered(Context context, String regId) {
|
||||||
Log.d("Registered push notification : " + regId);
|
Log.d("Registered push notification : " + regId);
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
LinphonePreferences.instance().setPushNotificationRegistrationID(regId);
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
|
||||||
editor.putString(context.getString(R.string.push_reg_id_key), regId);
|
|
||||||
editor.commit();
|
|
||||||
|
|
||||||
if (LinphoneManager.isInstanciated()) {
|
|
||||||
try {
|
|
||||||
LinphoneManager.getInstance().initAccounts();
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onUnregistered(Context context, String regId) {
|
protected void onUnregistered(Context context, String regId) {
|
||||||
Log.w("Unregistered push notification : " + regId);
|
Log.w("Unregistered push notification : " + regId);
|
||||||
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
|
LinphonePreferences.instance().setPushNotificationRegistrationID(null);
|
||||||
SharedPreferences.Editor editor = prefs.edit();
|
|
||||||
editor.putString(context.getString(R.string.push_reg_id_key), null);
|
|
||||||
editor.commit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String[] getSenderIds(Context context) {
|
protected String[] getSenderIds(Context context) {
|
||||||
|
|
|
@ -18,18 +18,17 @@ along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
|
import org.linphone.LinphonePreferences;
|
||||||
import org.linphone.LinphoneSimpleListener.LinphoneOnRegistrationStateChangedListener;
|
import org.linphone.LinphoneSimpleListener.LinphoneOnRegistrationStateChangedListener;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.LinphoneCore.RegistrationState;
|
import org.linphone.core.LinphoneCore.RegistrationState;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.core.LinphoneCoreException;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.v4.app.Fragment;
|
import android.support.v4.app.Fragment;
|
||||||
import android.support.v4.app.FragmentActivity;
|
import android.support.v4.app.FragmentActivity;
|
||||||
import android.support.v4.app.FragmentTransaction;
|
import android.support.v4.app.FragmentTransaction;
|
||||||
|
@ -46,9 +45,9 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
private static SetupActivity instance;
|
private static SetupActivity instance;
|
||||||
private RelativeLayout back, next, cancel;
|
private RelativeLayout back, next, cancel;
|
||||||
private SetupFragmentsEnum currentFragment;
|
private SetupFragmentsEnum currentFragment;
|
||||||
private SharedPreferences mPref;
|
|
||||||
private SetupFragmentsEnum firstFragment;
|
private SetupFragmentsEnum firstFragment;
|
||||||
private Fragment fragment;
|
private Fragment fragment;
|
||||||
|
private LinphonePreferences mPrefs;
|
||||||
private boolean accountCreated = false;
|
private boolean accountCreated = false;
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
|
|
||||||
|
@ -69,8 +68,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
currentFragment = (SetupFragmentsEnum) savedInstanceState.getSerializable("CurrentFragment");
|
currentFragment = (SetupFragmentsEnum) savedInstanceState.getSerializable("CurrentFragment");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
mPrefs = LinphonePreferences.instance();
|
||||||
mPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
|
|
||||||
|
|
||||||
initUI();
|
initUI();
|
||||||
instance = this;
|
instance = this;
|
||||||
|
@ -109,6 +107,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
int id = v.getId();
|
int id = v.getId();
|
||||||
|
|
||||||
if (id == R.id.setup_cancel) {
|
if (id == R.id.setup_cancel) {
|
||||||
|
LinphonePreferences.instance().firstLaunchSuccessful();
|
||||||
if (getResources().getBoolean(R.bool.setup_cancel_move_to_back)) {
|
if (getResources().getBoolean(R.bool.setup_cancel_move_to_back)) {
|
||||||
moveTaskToBack(true);
|
moveTaskToBack(true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -139,6 +138,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (currentFragment == firstFragment) {
|
if (currentFragment == firstFragment) {
|
||||||
|
LinphonePreferences.instance().firstLaunchSuccessful();
|
||||||
if (getResources().getBoolean(R.bool.setup_cancel_move_to_back)) {
|
if (getResources().getBoolean(R.bool.setup_cancel_move_to_back)) {
|
||||||
moveTaskToBack(true);
|
moveTaskToBack(true);
|
||||||
} else {
|
} else {
|
||||||
|
@ -163,7 +163,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
|
private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
|
||||||
if (LinphoneManager.getLc().needsEchoCalibration() && !mPref.getBoolean(getString(R.string.first_launch_suceeded_once_key), false)) {
|
if (LinphoneManager.getLc().needsEchoCalibration() && mPrefs.isFirstLaunch()) {
|
||||||
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
|
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
|
||||||
fragment.enableEcCalibrationResultSending(sendEcCalibrationResult);
|
fragment.enableEcCalibrationResultSending(sendEcCalibrationResult);
|
||||||
changeFragment(fragment);
|
changeFragment(fragment);
|
||||||
|
@ -184,14 +184,6 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
saveCreatedAccount(username, password, domain);
|
saveCreatedAccount(username, password, domain);
|
||||||
LinphoneManager.getInstance().initializePayloads();
|
|
||||||
|
|
||||||
try {
|
|
||||||
LinphoneManager.getInstance().initFromConf();
|
|
||||||
} catch (Throwable e) {
|
|
||||||
Log.e(e, "Error while initializing from config in first login activity");
|
|
||||||
Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LinphoneManager.getLc().getDefaultProxyConfig() != null) {
|
if (LinphoneManager.getLc().getDefaultProxyConfig() != null) {
|
||||||
launchEchoCancellerCalibration(sendEcCalibrationResult);
|
launchEchoCancellerCalibration(sendEcCalibrationResult);
|
||||||
|
@ -213,7 +205,6 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
}
|
}
|
||||||
} else if (state == RegistrationState.RegistrationFailed) {
|
} else if (state == RegistrationState.RegistrationFailed) {
|
||||||
LinphoneManager.removeListener(registrationListener);
|
LinphoneManager.removeListener(registrationListener);
|
||||||
deleteCreatedAccount();
|
|
||||||
mHandler.post(new Runnable () {
|
mHandler.post(new Runnable () {
|
||||||
public void run() {
|
public void run() {
|
||||||
Toast.makeText(SetupActivity.this, getString(R.string.first_launch_bad_login_password), Toast.LENGTH_LONG).show();
|
Toast.makeText(SetupActivity.this, getString(R.string.first_launch_bad_login_password), Toast.LENGTH_LONG).show();
|
||||||
|
@ -227,17 +218,6 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
LinphoneManager.addListener(registrationListener);
|
LinphoneManager.addListener(registrationListener);
|
||||||
|
|
||||||
saveCreatedAccount(username, password, domain);
|
saveCreatedAccount(username, password, domain);
|
||||||
LinphoneManager.getInstance().initializePayloads();
|
|
||||||
|
|
||||||
try {
|
|
||||||
LinphoneManager.getInstance().initFromConf();
|
|
||||||
} catch (Throwable e) {
|
|
||||||
LinphoneManager.removeListener(registrationListener);
|
|
||||||
deleteCreatedAccount();
|
|
||||||
|
|
||||||
Log.e(e, "Error while initializing from config in first login activity");
|
|
||||||
Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void linphoneLogIn(String username, String password, boolean validate) {
|
public void linphoneLogIn(String username, String password, boolean validate) {
|
||||||
|
@ -252,22 +232,6 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
logIn(username, password, domain, false);
|
logIn(username, password, domain, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void writePreference(int key, String value) {
|
|
||||||
mPref.edit().putString(getString(key), value).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePreference(String key, String value) {
|
|
||||||
mPref.edit().putString(key, value).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePreference(int key, int value) {
|
|
||||||
mPref.edit().putInt(getString(key), value).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void writePreference(int key, boolean value) {
|
|
||||||
mPref.edit().putBoolean(getString(key), value).commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void display(SetupFragmentsEnum fragment) {
|
private void display(SetupFragmentsEnum fragment) {
|
||||||
switch (fragment) {
|
switch (fragment) {
|
||||||
case WELCOME:
|
case WELCOME:
|
||||||
|
@ -305,57 +269,54 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
currentFragment = SetupFragmentsEnum.WIZARD;
|
currentFragment = SetupFragmentsEnum.WIZARD;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void deleteCreatedAccount() {
|
|
||||||
if (!accountCreated)
|
|
||||||
return;
|
|
||||||
|
|
||||||
writePreference(R.string.pref_extra_accounts, 0);
|
|
||||||
accountCreated = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void saveCreatedAccount(String username, String password, String domain) {
|
public void saveCreatedAccount(String username, String password, String domain) {
|
||||||
if (accountCreated)
|
if (accountCreated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
int newAccountId = mPref.getInt(getString(R.string.pref_extra_accounts), 0);
|
boolean isMainAccountLinphoneDotOrg = domain.equals(getString(R.string.default_domain));
|
||||||
if (newAccountId == -1)
|
boolean useLinphoneDotOrgCustomPorts = getResources().getBoolean(R.bool.use_linphone_server_ports);
|
||||||
newAccountId = 0;
|
mPrefs.setNewAccountUsername(username);
|
||||||
writePreference(R.string.pref_extra_accounts, newAccountId+1);
|
mPrefs.setNewAccountDomain(domain);
|
||||||
|
mPrefs.setNewAccountPassword(password);
|
||||||
|
|
||||||
if (newAccountId == 0) {
|
if (isMainAccountLinphoneDotOrg && useLinphoneDotOrgCustomPorts) {
|
||||||
writePreference(R.string.pref_username_key, username);
|
if (getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
|
||||||
writePreference(R.string.pref_passwd_key, password);
|
mPrefs.setNewAccountProxy(domain + ":5228");
|
||||||
writePreference(R.string.pref_domain_key, domain);
|
mPrefs.setTransport(getString(R.string.pref_transport_tcp_key));
|
||||||
|
|
||||||
boolean isMainAccountLinphoneDotOrg = domain.equals(getString(R.string.default_domain));
|
|
||||||
boolean useLinphoneDotOrgCustomPorts = getResources().getBoolean(R.bool.use_linphone_server_ports);
|
|
||||||
if (isMainAccountLinphoneDotOrg && useLinphoneDotOrgCustomPorts) {
|
|
||||||
if (getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) {
|
|
||||||
writePreference(R.string.pref_proxy_key, domain + ":5228");
|
|
||||||
writePreference(R.string.pref_transport_key, getString(R.string.pref_transport_tcp_key));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
writePreference(R.string.pref_proxy_key, domain + ":5223");
|
|
||||||
writePreference(R.string.pref_transport_key, getString(R.string.pref_transport_tls_key));
|
|
||||||
}
|
|
||||||
|
|
||||||
writePreference(R.string.pref_expire_key, "604800"); // 3600*24*7
|
|
||||||
writePreference(R.string.pref_enable_outbound_proxy_key, true);
|
|
||||||
writePreference(R.string.pref_stun_server_key, getString(R.string.default_stun));
|
|
||||||
writePreference(R.string.pref_ice_enable_key, true);
|
|
||||||
writePreference(R.string.pref_push_notification_key, true);
|
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
mPrefs.setNewAccountProxy(domain + ":5223");
|
||||||
|
mPrefs.setTransport(getString(R.string.pref_transport_tls_key));
|
||||||
|
}
|
||||||
|
|
||||||
|
mPrefs.setNewAccountExpires("604800");
|
||||||
|
mPrefs.setNewAccountOutboundProxyEnabled(true);
|
||||||
|
mPrefs.setStunServer(getString(R.string.default_stun));
|
||||||
|
mPrefs.setIceEnabled(true);
|
||||||
|
mPrefs.setPushNotificationEnabled(true);
|
||||||
} else {
|
} else {
|
||||||
writePreference(getString(R.string.pref_username_key) + newAccountId, username);
|
String forcedProxy = getResources().getString(R.string.setup_forced_proxy);
|
||||||
writePreference(getString(R.string.pref_passwd_key) + newAccountId, password);
|
if (!TextUtils.isEmpty(forcedProxy)) {
|
||||||
writePreference(getString(R.string.pref_domain_key) + newAccountId, domain);
|
mPrefs.setNewAccountProxy(forcedProxy);
|
||||||
|
mPrefs.setNewAccountOutboundProxyEnabled(true);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
String forcedProxy=getResources().getString(R.string.setup_forced_proxy);
|
|
||||||
if (!TextUtils.isEmpty(forcedProxy)) {
|
if (getResources().getBoolean(R.bool.enable_push_id)) {
|
||||||
writePreference(R.string.pref_enable_outbound_proxy_key, true);
|
String regId = mPrefs.getPushNotificationRegistrationID();
|
||||||
writePreference(R.string.pref_proxy_key, forcedProxy);
|
String appId = getString(R.string.push_sender_id);
|
||||||
|
if (regId != null && mPrefs.isPushNotificationEnabled()) {
|
||||||
|
String contactInfos = "app-id=" + appId + ";pn-type=google;pn-tok=" + regId;
|
||||||
|
mPrefs.setNewAccountContactParameters(contactInfos);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
mPrefs.saveNewAccount();
|
||||||
|
accountCreated = true;
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
accountCreated = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void displayWizardConfirm(String username) {
|
public void displayWizardConfirm(String username) {
|
||||||
|
@ -375,16 +336,6 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
|
|
||||||
public void isAccountVerified() {
|
public void isAccountVerified() {
|
||||||
Toast.makeText(this, getString(R.string.setup_account_validated), Toast.LENGTH_LONG).show();
|
Toast.makeText(this, getString(R.string.setup_account_validated), Toast.LENGTH_LONG).show();
|
||||||
|
|
||||||
LinphoneManager.getInstance().initializePayloads();
|
|
||||||
|
|
||||||
try {
|
|
||||||
LinphoneManager.getInstance().initFromConf();
|
|
||||||
} catch (Throwable e) {
|
|
||||||
Log.e(e, "Error while initializing from config in first login activity");
|
|
||||||
Toast.makeText(this, getString(R.string.error), Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
|
|
||||||
launchEchoCancellerCalibration(true);
|
launchEchoCancellerCalibration(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,7 +344,7 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void success() {
|
public void success() {
|
||||||
writePreference(R.string.first_launch_suceeded_once_key, true);
|
mPrefs.firstLaunchSuccessful();
|
||||||
setResult(Activity.RESULT_OK);
|
setResult(Activity.RESULT_OK);
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 0e9de476d131cf2e2a39bf6bdf686a451e04d876
|
Subproject commit 107fb22c07a2372cdaf4d02687d828ec8f044170
|
Loading…
Reference in a new issue