Merge remote-tracking branch 'origin/master' into dev_codec_downloader
This commit is contained in:
commit
24d8accf5b
87 changed files with 2414 additions and 2158 deletions
|
@ -4,7 +4,6 @@
|
||||||
<classpathentry kind="src" path="submodules/linphone/java/j2se"/>
|
<classpathentry kind="src" path="submodules/linphone/java/j2se"/>
|
||||||
<classpathentry kind="src" path="submodules/linphone/java/common"/>
|
<classpathentry kind="src" path="submodules/linphone/java/common"/>
|
||||||
<classpathentry kind="src" path="submodules/linphone/java/impl"/>
|
<classpathentry kind="src" path="submodules/linphone/java/impl"/>
|
||||||
<classpathentry kind="src" path="submodules/externals/axmlrpc/src/main/java"/>
|
|
||||||
<classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/>
|
<classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/>
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
||||||
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -46,3 +46,4 @@ liblinphone_tester/tests.output
|
||||||
tests/linphonetester_*
|
tests/linphonetester_*
|
||||||
tests/tests.output
|
tests/tests.output
|
||||||
WORK
|
WORK
|
||||||
|
.d
|
||||||
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -55,9 +55,6 @@
|
||||||
[submodule "submodules/externals/libupnp"]
|
[submodule "submodules/externals/libupnp"]
|
||||||
path = submodules/externals/libupnp
|
path = submodules/externals/libupnp
|
||||||
url = git://git.linphone.org/libupnp.git
|
url = git://git.linphone.org/libupnp.git
|
||||||
[submodule "submodules/externals/axmlrpc"]
|
|
||||||
path = submodules/externals/axmlrpc
|
|
||||||
url = git://git.linphone.org/axmlrpc.git
|
|
||||||
[submodule "submodules/externals/opus"]
|
[submodule "submodules/externals/opus"]
|
||||||
path = submodules/externals/opus
|
path = submodules/externals/opus
|
||||||
url = git://git.linphone.org/opus.git
|
url = git://git.linphone.org/opus.git
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
source.dir=src:submodules/linphone/mediastreamer2/java/src:submodules/linphone/java/j2se:submodules/linphone/java/common:submodules/linphone/java/impl:submodules/linphone/coreapi/help/java:submodules/externals/axmlrpc/src/main/java
|
source.dir=src:submodules/linphone/mediastreamer2/java/src:submodules/linphone/java/j2se:submodules/linphone/java/common:submodules/linphone/java/impl:submodules/linphone/coreapi/help/java
|
||||||
key.store=bc-android.keystore
|
key.store=bc-android.keystore
|
||||||
key.alias=nw8000
|
key.alias=nw8000
|
||||||
version.name=2.5.0
|
version.name=2.5.0
|
||||||
|
|
|
@ -93,7 +93,7 @@
|
||||||
<property name="out.library.jar.file" location="${out.absolute.dir}/linphone.jar" />
|
<property name="out.library.jar.file" location="${out.absolute.dir}/linphone.jar" />
|
||||||
<jar destfile="${out.library.jar.file}">
|
<jar destfile="${out.library.jar.file}">
|
||||||
<fileset dir="${out.classes.absolute.dir}"
|
<fileset dir="${out.classes.absolute.dir}"
|
||||||
includes="org/linphone/mediastream/**/*.class org/linphone/core/**/*.class org/linphone/**/*.class de/timroes/axmlrpc/**/*.class de/timroes/base64/Base64.class"/>
|
includes="org/linphone/mediastream/**/*.class org/linphone/core/**/*.class org/linphone/**/*.class"/>
|
||||||
<fileset dir="submodules/linphone/java" >
|
<fileset dir="submodules/linphone/java" >
|
||||||
<include name="common/org/linphone/core/*.java"/>
|
<include name="common/org/linphone/core/*.java"/>
|
||||||
<include name="j2se/org/linphone/core/*.java"/>
|
<include name="j2se/org/linphone/core/*.java"/>
|
||||||
|
|
|
@ -86,6 +86,7 @@ class AndroidPreparator(prepare.Preparator):
|
||||||
self.min_supported_ndk = 10
|
self.min_supported_ndk = 10
|
||||||
self.max_supported_ndk = 12
|
self.max_supported_ndk = 12
|
||||||
self.unsupported_ndk_version = None
|
self.unsupported_ndk_version = None
|
||||||
|
self.min_cmake_version = "3.0"
|
||||||
self.release_with_debug_info = True
|
self.release_with_debug_info = True
|
||||||
self.veryclean = True
|
self.veryclean = True
|
||||||
self.show_gpl_disclaimer = True
|
self.show_gpl_disclaimer = True
|
||||||
|
|
BIN
res/drawable-xhdpi/contact.png
Normal file
BIN
res/drawable-xhdpi/contact.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.1 KiB |
|
@ -55,7 +55,7 @@
|
||||||
android:id="@+id/username"
|
android:id="@+id/username"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="text|textNoSuggestions"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
|
|
@ -49,7 +49,7 @@
|
||||||
android:id="@+id/assistant_username"
|
android:id="@+id/assistant_username"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="text|textNoSuggestions"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
@ -110,7 +110,7 @@
|
||||||
android:id="@+id/assistant_display_name"
|
android:id="@+id/assistant_display_name"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textPersonName"
|
||||||
android:contentDescription="@string/content_description_display_field"
|
android:contentDescription="@string/content_description_display_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
|
|
@ -53,7 +53,7 @@
|
||||||
android:id="@+id/assistant_username"
|
android:id="@+id/assistant_username"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="text|textNoSuggestions"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
@ -107,7 +107,7 @@
|
||||||
android:id="@+id/assistant_display_name"
|
android:id="@+id/assistant_display_name"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textPersonName"
|
||||||
android:contentDescription="@string/content_description_display_field"
|
android:contentDescription="@string/content_description_display_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
@ -132,7 +132,7 @@
|
||||||
android:id="@+id/assistant_domain"
|
android:id="@+id/assistant_domain"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textUri"
|
||||||
android:contentDescription="@string/content_description_domain_field"
|
android:contentDescription="@string/content_description_domain_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
|
|
@ -77,7 +77,6 @@
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/fragmentContainer2"
|
android:id="@+id/fragmentContainer2"
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
|
|
@ -77,7 +77,6 @@
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/fragmentContainer2"
|
android:id="@+id/fragmentContainer2"
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="text|textNoSuggestions"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
android:singleLine="true"/>
|
android:singleLine="true"/>
|
||||||
|
@ -153,7 +153,7 @@
|
||||||
android:id="@+id/email"
|
android:id="@+id/email"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="textEmailAddress"
|
||||||
android:contentDescription="@string/content_description_email_field"
|
android:contentDescription="@string/content_description_email_field"
|
||||||
android:textCursorDrawable="@null"
|
android:textCursorDrawable="@null"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
android:id="@+id/assistant_username"
|
android:id="@+id/assistant_username"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="text|textNoSuggestions"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
@ -87,7 +87,7 @@
|
||||||
android:id="@+id/assistant_display_name"
|
android:id="@+id/assistant_display_name"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textPersonName"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
|
|
@ -45,7 +45,7 @@
|
||||||
android:id="@+id/assistant_username"
|
android:id="@+id/assistant_username"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="text|textEmailAddress"
|
android:inputType="text|textNoSuggestions"
|
||||||
android:contentDescription="@string/content_description_username_field"
|
android:contentDescription="@string/content_description_username_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
@ -80,7 +80,7 @@
|
||||||
android:id="@+id/assistant_domain"
|
android:id="@+id/assistant_domain"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textUri"
|
||||||
android:contentDescription="@string/content_description_domain_field"
|
android:contentDescription="@string/content_description_domain_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
@ -98,7 +98,7 @@
|
||||||
android:id="@+id/assistant_display_name"
|
android:id="@+id/assistant_display_name"
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textPersonName"
|
||||||
android:contentDescription="@string/content_description_display_field"
|
android:contentDescription="@string/content_description_display_field"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
|
|
|
@ -42,7 +42,7 @@
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:textCursorDrawable="@null"
|
android:textCursorDrawable="@null"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textNoSuggestions"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
|
@ -84,7 +84,7 @@
|
||||||
android:background="@drawable/resizable_textfield"
|
android:background="@drawable/resizable_textfield"
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:textCursorDrawable="@null"
|
android:textCursorDrawable="@null"
|
||||||
android:inputType="textEmailAddress"
|
android:inputType="textUri"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="40dp"
|
android:layout_height="40dp"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
|
|
|
@ -94,9 +94,9 @@
|
||||||
android:textColor="@color/colorB"
|
android:textColor="@color/colorB"
|
||||||
android:imeOptions="flagNoExtractUi"
|
android:imeOptions="flagNoExtractUi"
|
||||||
android:textCursorDrawable="@null"
|
android:textCursorDrawable="@null"
|
||||||
android:inputType="textMultiLine"
|
android:inputType="textShortMessage|textMultiLine"
|
||||||
android:contentDescription="@string/content_description_message"
|
android:contentDescription="@string/content_description_message"
|
||||||
android:maxLines="3"
|
android:maxLines="2"
|
||||||
android:padding="5dp"
|
android:padding="5dp"
|
||||||
android:layout_margin="5dp"
|
android:layout_margin="5dp"
|
||||||
android:layout_weight="1"
|
android:layout_weight="1"
|
||||||
|
|
|
@ -72,8 +72,7 @@
|
||||||
android:layout_width="100dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"/>
|
||||||
android:layout_marginLeft="5dp"/>
|
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/mask"
|
android:id="@+id/mask"
|
||||||
|
@ -81,8 +80,7 @@
|
||||||
android:layout_width="100dp"
|
android:layout_width="100dp"
|
||||||
android:layout_height="100dp"
|
android:layout_height="100dp"
|
||||||
android:adjustViewBounds="true"
|
android:adjustViewBounds="true"
|
||||||
android:layout_alignParentLeft="true"
|
android:layout_alignParentLeft="true"/>
|
||||||
android:layout_marginLeft="5dp"/>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
|
@ -94,12 +92,20 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/contactOrganization"
|
||||||
|
style="@style/font9"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
<TableLayout
|
<TableLayout
|
||||||
android:id="@+id/controls"
|
android:id="@+id/controls"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:stretchColumns="*"
|
android:stretchColumns="*"
|
||||||
android:paddingTop="20dp"/>
|
android:paddingTop="10dp"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
|
|
@ -72,16 +72,31 @@
|
||||||
android:paddingLeft="5dp"
|
android:paddingLeft="5dp"
|
||||||
android:paddingRight="5dp" />
|
android:paddingRight="5dp" />
|
||||||
|
|
||||||
<TextView
|
<RelativeLayout
|
||||||
android:id="@+id/name"
|
|
||||||
android:lines="1"
|
|
||||||
style="@style/font6"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_toRightOf="@id/avatar_layout"
|
android:layout_toRightOf="@id/avatar_layout"
|
||||||
android:layout_centerVertical="true"
|
android:layout_centerVertical="true"
|
||||||
android:layout_toLeftOf="@id/delete"
|
android:layout_toLeftOf="@id/delete"
|
||||||
android:layout_marginLeft="10dp" />
|
android:layout_marginLeft="10dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/name"
|
||||||
|
android:lines="1"
|
||||||
|
style="@style/font6"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/contactOrganization"
|
||||||
|
style="@style/font9"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentBottom="true"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:id="@+id/friendStatus"
|
android:id="@+id/friendStatus"
|
||||||
|
|
|
@ -41,7 +41,6 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:paddingTop="20dp"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
|
|
@ -135,6 +135,26 @@
|
||||||
android:paddingRight="5dp"
|
android:paddingRight="5dp"
|
||||||
android:inputType="textPersonName|textCapWords"/>
|
android:inputType="textPersonName|textCapWords"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:text="@string/contact_organization"
|
||||||
|
style="@style/font13"
|
||||||
|
android:textAllCaps="true"
|
||||||
|
android:paddingTop="10dp"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:id="@+id/contactOrganization"
|
||||||
|
android:textCursorDrawable="@null"
|
||||||
|
android:background="@drawable/resizable_textfield"
|
||||||
|
style="@style/font6"
|
||||||
|
android:contentDescription="@string/content_description_contact_organization"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="40dp"
|
||||||
|
android:gravity="left"
|
||||||
|
android:paddingRight="5dp"
|
||||||
|
android:inputType="textPersonName|textCapWords"/>
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
|
|
@ -128,6 +128,15 @@
|
||||||
android:fastScrollAlwaysVisible="true"
|
android:fastScrollAlwaysVisible="true"
|
||||||
android:dividerHeight="1dp" />
|
android:dividerHeight="1dp" />
|
||||||
|
|
||||||
|
<ProgressBar
|
||||||
|
android:id="@+id/contactsFetchInProgress"
|
||||||
|
style="?android:attr/progressBarStyle"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/noSipContact"
|
android:id="@+id/noSipContact"
|
||||||
android:text="@string/no_sip_contact"
|
android:text="@string/no_sip_contact"
|
||||||
|
|
|
@ -36,6 +36,17 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_weight="0.2"
|
android:layout_weight="0.2"
|
||||||
android:padding="15dp"/>
|
android:padding="15dp"/>
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/goto_contact"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:src="@drawable/contact"
|
||||||
|
android:background="@drawable/toolbar_button"
|
||||||
|
android:contentDescription="@string/content_description_contacts"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="0.2"
|
||||||
|
android:padding="15dp"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
<ScrollView
|
<ScrollView
|
||||||
|
@ -46,13 +57,11 @@
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:padding="10dp"
|
android:padding="20dp"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/avatar_layout"
|
android:id="@+id/avatar_layout"
|
||||||
android:layout_marginTop="20dp"
|
|
||||||
android:layout_marginBottom="10dp"
|
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:gravity="center">
|
android:gravity="center">
|
||||||
|
@ -88,7 +97,6 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="10dp"
|
|
||||||
android:gravity="center"
|
android:gravity="center"
|
||||||
android:orientation="horizontal">
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
|
BIN
res/raw/notes_of_the_optimistic.mkv
Normal file
BIN
res/raw/notes_of_the_optimistic.mkv
Normal file
Binary file not shown.
|
@ -9,9 +9,15 @@
|
||||||
<string name="notification_registered">%s مُسجَّل</string>
|
<string name="notification_registered">%s مُسجَّل</string>
|
||||||
<string name="notification_register_failure">فشل %s في التسجيل</string>
|
<string name="notification_register_failure">فشل %s في التسجيل</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="about_version">لِنْفُونْ أندرويد %s</string>
|
||||||
|
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||||
|
<string name="about_text">رخصة جْنُو العمومية الإصدار 2\n © 2010-2016 Belledonne Communications</string>
|
||||||
|
<string name="about_link">www.linphone.org</string>
|
||||||
|
<string name="sync_account_name">جهات اتصال Linphone</string>
|
||||||
|
<string name="today_date_format">HH:mm</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">إسم المستخدم</string>
|
<string name="username">اسم المستخدم</string>
|
||||||
<string name="display_name">الإسم المعروض</string>
|
<string name="display_name">الاسم المعروض</string>
|
||||||
<string name="password">كلمة السر</string>
|
<string name="password">كلمة السر</string>
|
||||||
<string name="confirm_password">تأكيد كلمة السر</string>
|
<string name="confirm_password">تأكيد كلمة السر</string>
|
||||||
<string name="domain">النطاق</string>
|
<string name="domain">النطاق</string>
|
||||||
|
@ -42,20 +48,20 @@
|
||||||
<string name="assistant_create_account">إنشاء الحساب</string>
|
<string name="assistant_create_account">إنشاء الحساب</string>
|
||||||
<string name="assistant_finish">أنهِ التهئية</string>
|
<string name="assistant_finish">أنهِ التهئية</string>
|
||||||
<string name="assistant_validate_account">لقد أُنشِيء حسابك. يُرجى الاطلاع على رسائل بريدك الإلكتروني لتأكيد حسابك. حالما تنتهي من ذلك، عُد إلى هنا واضغط على الزر.</string>
|
<string name="assistant_validate_account">لقد أُنشِيء حسابك. يُرجى الاطلاع على رسائل بريدك الإلكتروني لتأكيد حسابك. حالما تنتهي من ذلك، عُد إلى هنا واضغط على الزر.</string>
|
||||||
<string name="assistant_welcome_desc">سيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات.</string>
|
<string name="assistant_welcome_desc">سيمكنك هذا المرشد من إعداد حساب SIP لإجراء المكالمات.</string>
|
||||||
<string name="assistant_linphone_login_desc">أدخِل اسم المستخدم وكلمة السر لحساب لِنْفُونْ</string>
|
<string name="assistant_linphone_login_desc">أدخِل اسم المستخدم وكلمة السر لحساب لِنْفُونْ</string>
|
||||||
<string name="assistant_login_desc">أدخِل اسم المستخدم وكلمة السر الحساب مع نطاق SIP</string>
|
<string name="assistant_login_desc">أدخِل اسم المستخدم وكلمة السر الحساب مع نطاق SIP</string>
|
||||||
<string name="assistant_remote_provisioning_desc">يٌرجى إدخال عنوان التهئية البعيدة</string>
|
<string name="assistant_remote_provisioning_desc">يٌرجى إدخال عنوان التهئية البعيدة</string>
|
||||||
<string name="transport">النقل</string>
|
<string name="transport">النقل</string>
|
||||||
<string name="assistant_login_linphone">استخدم حساب لِنْفُونْ</string>
|
<string name="assistant_login_linphone">استخدم حساب لِنْفُونْ</string>
|
||||||
<string name="assistant_login_generic">استخدم حساب SIP</string>
|
<string name="assistant_login_generic">استخدم حساب SIP</string>
|
||||||
<string name="assistant_remote_provisioning">اجذب التهئية البعيدة</string>
|
<string name="assistant_remote_provisioning">اجذب التهيئة البعيدة</string>
|
||||||
<string name="assistant_create_account_part_1">1/2</string>
|
<string name="assistant_create_account_part_1">1/2</string>
|
||||||
<string name="assistant_create_account_part_2">2/2</string>
|
<string name="assistant_create_account_part_2">2/2</string>
|
||||||
<string name="assistant_display_name_optional">الاسم المعروض (اختياري)</string>
|
<string name="assistant_display_name_optional">الاسم المعروض (اختياري)</string>
|
||||||
<string name="assistant_linphone_account">هيِّءْ حساب لِنْفُونْ</string>
|
<string name="assistant_linphone_account">هيِّءْ حساب لِنْفُونْ</string>
|
||||||
<string name="assistant_generic_account">هيِّءْ حساب SIP</string>
|
<string name="assistant_generic_account">هيِّءْ حساب SIP</string>
|
||||||
<string name="assistant_remote_provisioning_title">اجذب التهئية البعيدة</string>
|
<string name="assistant_remote_provisioning_title">اجذب التهيئة البعيدة</string>
|
||||||
<string name="assistant_fetch_apply">اجذبْ وطبِّق</string>
|
<string name="assistant_fetch_apply">اجذبْ وطبِّق</string>
|
||||||
<string name="assistant_login">الولوج</string>
|
<string name="assistant_login">الولوج</string>
|
||||||
<string name="assistant_ec_calibration">معايرة مزيل الصدى في طور الإنجاز</string>
|
<string name="assistant_ec_calibration">معايرة مزيل الصدى في طور الإنجاز</string>
|
||||||
|
@ -71,7 +77,7 @@
|
||||||
<string name="wizard_password_incorrect">كلمة السر غير صحيحة.</string>
|
<string name="wizard_password_incorrect">كلمة السر غير صحيحة.</string>
|
||||||
<string name="wizard_passwords_unmatched">كلمتا السر غير متطابقتين.</string>
|
<string name="wizard_passwords_unmatched">كلمتا السر غير متطابقتين.</string>
|
||||||
<string name="setup_confirm_username">سيكون اسم المستخدم هو %s.\r\n\r\nقد يختلف عما أدخلته ليوافق المعايير.\r\nأتقبل ذلك ؟</string>
|
<string name="setup_confirm_username">سيكون اسم المستخدم هو %s.\r\n\r\nقد يختلف عما أدخلته ليوافق المعايير.\r\nأتقبل ذلك ؟</string>
|
||||||
<string name="first_launch_no_login_password">يُرجى إدخال إسم المستخدم وكلمة السر</string>
|
<string name="first_launch_no_login_password">يُرجى إدخال اسم المستخدم وكلمة السر</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
<string name="address_bar_hint">أدخل رقما أو عنوانا</string>
|
<string name="address_bar_hint">أدخل رقما أو عنوانا</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
@ -132,7 +138,7 @@
|
||||||
<string name="call_stats_download">صبيب التنزيل :</string>
|
<string name="call_stats_download">صبيب التنزيل :</string>
|
||||||
<string name="call_stats_ice">توصيل ICE :</string>
|
<string name="call_stats_ice">توصيل ICE :</string>
|
||||||
<string name="call_stats_video_resolution">مقاس الفيديو :</string>
|
<string name="call_stats_video_resolution">مقاس الفيديو :</string>
|
||||||
<string name="call">مكالمة</string>
|
<string name="call">المكالمة</string>
|
||||||
<!--About-->
|
<!--About-->
|
||||||
<string name="menu_send_log">إرسال السجل</string>
|
<string name="menu_send_log">إرسال السجل</string>
|
||||||
<string name="menu_reset_log">إعادة تعيين السجل</string>
|
<string name="menu_reset_log">إعادة تعيين السجل</string>
|
||||||
|
@ -212,6 +218,7 @@
|
||||||
<string name="pref_echo_cancellation_summary">إزالة الصدى المسموع من الطرف الآخر</string>
|
<string name="pref_echo_cancellation_summary">إزالة الصدى المسموع من الطرف الآخر</string>
|
||||||
<string name="pref_echo_canceller_calibration">معايرة مزيل الصدى</string>
|
<string name="pref_echo_canceller_calibration">معايرة مزيل الصدى</string>
|
||||||
<string name="ec_calibrating">يُعايِر...</string>
|
<string name="ec_calibrating">يُعايِر...</string>
|
||||||
|
<string name="ec_calibrated">جرت المعايرة بـ %s ms</string>
|
||||||
<string name="no_echo">لا وجود لصدى</string>
|
<string name="no_echo">لا وجود لصدى</string>
|
||||||
<string name="failed">فشِل</string>
|
<string name="failed">فشِل</string>
|
||||||
<string name="pref_adaptive_rate_control">التحكم في ملائمة الصبيب</string>
|
<string name="pref_adaptive_rate_control">التحكم في ملائمة الصبيب</string>
|
||||||
|
@ -224,15 +231,19 @@
|
||||||
<string name="pref_video_initiate_call_with_video">أرسِل دائما طلبات الفيديو</string>
|
<string name="pref_video_initiate_call_with_video">أرسِل دائما طلبات الفيديو</string>
|
||||||
<string name="pref_video_automatically_accept_video_title">قبول طلبات الفيديو الواردة</string>
|
<string name="pref_video_automatically_accept_video_title">قبول طلبات الفيديو الواردة</string>
|
||||||
<string name="pref_video_automatically_accept_video">قبول طلبات الفيديو دائما</string>
|
<string name="pref_video_automatically_accept_video">قبول طلبات الفيديو دائما</string>
|
||||||
|
<string name="pref_video_preset">إعداد الفيديو المسبق</string>
|
||||||
<string name="pref_preferred_video_size">حجم الفيديو المفضل</string>
|
<string name="pref_preferred_video_size">حجم الفيديو المفضل</string>
|
||||||
<string name="pref_preferred_fps">معدل الإطارات المفضل</string>
|
<string name="pref_preferred_fps">معدل الإطارات المفضل</string>
|
||||||
<string name="pref_bandwidth_limit">حد سعة القناة بـ ك.بِتْ/ثانية</string>
|
<string name="pref_bandwidth_limit">حد سعة القناة بـ ك.بِتْ/ثانية</string>
|
||||||
<string name="pref_video_codecs_title">المراميز</string>
|
<string name="pref_video_codecs_title">المراميز</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">مكالمة</string>
|
<string name="pref_call_title">المكالمة</string>
|
||||||
<string name="pref_rfc2833_dtmf">إرسال RFC2833 DTMFs</string>
|
<string name="pref_rfc2833_dtmf">إرسال RFC2833 DTMFs</string>
|
||||||
<string name="pref_sipinfo_dtmf">إرسال SIP INFO DTMFs</string>
|
<string name="pref_sipinfo_dtmf">إرسال SIP INFO DTMFs</string>
|
||||||
<string name="pref_voice_mail">عنوان العلبة الصوتية</string>
|
<string name="pref_voice_mail">عنوان العلبة الصوتية</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">المحادثة</string>
|
||||||
|
<string name="pref_image_sharing_server_title">خادم المشاركة</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">الشبكة</string>
|
<string name="pref_network_title">الشبكة</string>
|
||||||
<string name="pref_wifi_only">استخدم WiFi فقط</string>
|
<string name="pref_wifi_only">استخدم WiFi فقط</string>
|
||||||
|
@ -255,7 +266,6 @@
|
||||||
<string name="pref_animation_enable_title">تشغيل التحريكات</string>
|
<string name="pref_animation_enable_title">تشغيل التحريكات</string>
|
||||||
<string name="pref_autostart">البدء خلال الإقلاع</string>
|
<string name="pref_autostart">البدء خلال الإقلاع</string>
|
||||||
<string name="pref_incoming_call_timeout_title">مهلة الانتظار قبل رفض المكالمة (بالثواني)</string>
|
<string name="pref_incoming_call_timeout_title">مهلة الانتظار قبل رفض المكالمة (بالثواني)</string>
|
||||||
<string name="pref_image_sharing_server_title">خادم المشاركة</string>
|
|
||||||
<string name="pref_remote_provisioning_title">التهيئة عن بعد</string>
|
<string name="pref_remote_provisioning_title">التهيئة عن بعد</string>
|
||||||
<string name="pref_primary_account_title">الحساب اﻷوَّلي</string>
|
<string name="pref_primary_account_title">الحساب اﻷوَّلي</string>
|
||||||
<string name="pref_display_name_title">الإسم المعروض</string>
|
<string name="pref_display_name_title">الإسم المعروض</string>
|
||||||
|
@ -269,18 +279,22 @@
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">الرجوع</string>
|
<string name="content_description_back">الرجوع</string>
|
||||||
<string name="content_description_dialer">لوحة المفاتيح</string>
|
<string name="content_description_dialer">لوحة المفاتيح</string>
|
||||||
|
<string name="content_description_menu">القائمة</string>
|
||||||
<string name="content_description_toggle_micro">تبديل الميكروفون</string>
|
<string name="content_description_toggle_micro">تبديل الميكروفون</string>
|
||||||
<string name="content_description_toggle_speaker">تبديل مكبر الصوت</string>
|
<string name="content_description_toggle_speaker">تبديل مكبر الصوت</string>
|
||||||
<string name="content_description_decline">رفض</string>
|
<string name="content_description_decline">رفض</string>
|
||||||
<string name="content_description_hang_up">ضع السماعة</string>
|
<string name="content_description_hang_up">ضع السماعة</string>
|
||||||
<string name="content_description_accept">قبول</string>
|
<string name="content_description_accept">قبول</string>
|
||||||
<string name="content_description_edit">تحرير</string>
|
<string name="content_description_edit">تحرير</string>
|
||||||
|
<string name="content_description_edit_list">حرر القائمة</string>
|
||||||
|
<string name="content_description_valid">صحيح</string>
|
||||||
<string name="content_description_add_contact">إضافة إلى جهات الاتصال</string>
|
<string name="content_description_add_contact">إضافة إلى جهات الاتصال</string>
|
||||||
<string name="content_description_new_contact">جهة اتصال جديدة</string>
|
<string name="content_description_new_contact">جهة اتصال جديدة</string>
|
||||||
<string name="content_description_call">مكالمة</string>
|
<string name="content_description_call">المكالمة</string>
|
||||||
<string name="content_description_backspace">مسافة</string>
|
<string name="content_description_backspace">مسافة</string>
|
||||||
<string name="content_description_chat">المحادثة</string>
|
<string name="content_description_chat">المحادثة</string>
|
||||||
<string name="content_description_dial_back">إعادة الاتصال</string>
|
<string name="content_description_dial_back">إعادة الاتصال</string>
|
||||||
|
<string name="content_description_dialer_back">الرجوع إلى لوحة المفاتيح</string>
|
||||||
<string name="content_description_contact_picture">صورة جهة الاتصال</string>
|
<string name="content_description_contact_picture">صورة جهة الاتصال</string>
|
||||||
<string name="content_description_send_message">إرسال رسالة</string>
|
<string name="content_description_send_message">إرسال رسالة</string>
|
||||||
<string name="content_description_detail">التفاصيل</string>
|
<string name="content_description_detail">التفاصيل</string>
|
||||||
|
@ -288,6 +302,7 @@
|
||||||
<string name="content_description_add">إضافة مكالمة</string>
|
<string name="content_description_add">إضافة مكالمة</string>
|
||||||
<string name="content_description_new_discussion">محادثة جديدة</string>
|
<string name="content_description_new_discussion">محادثة جديدة</string>
|
||||||
<string name="content_description_search">بحث</string>
|
<string name="content_description_search">بحث</string>
|
||||||
|
<string name="content_description_search_contact">ابحث عن جهة الاتصال</string>
|
||||||
<string name="content_description_all_contacts">كل جهات الاتصال</string>
|
<string name="content_description_all_contacts">كل جهات الاتصال</string>
|
||||||
<string name="content_description_linphone_contacts">جهات اتصال Linphone</string>
|
<string name="content_description_linphone_contacts">جهات اتصال Linphone</string>
|
||||||
<string name="content_description_call_direction">اتجاه الاتصال</string>
|
<string name="content_description_call_direction">اتجاه الاتصال</string>
|
||||||
|
@ -306,9 +321,26 @@
|
||||||
<string name="content_description_cancel_button">زر الإلغاء</string>
|
<string name="content_description_cancel_button">زر الإلغاء</string>
|
||||||
<string name="content_description_message_status">حالة الرسالة</string>
|
<string name="content_description_message_status">حالة الرسالة</string>
|
||||||
<string name="content_description_conference">اجتماع</string>
|
<string name="content_description_conference">اجتماع</string>
|
||||||
|
<string name="content_description_username_field">حقل اسم المستخدم</string>
|
||||||
|
<string name="content_description_display_field">اعرض حقل الاسم</string>
|
||||||
|
<string name="content_description_domain_field">حقل النطاق</string>
|
||||||
|
<string name="content_description_url_field">حقل التهيئة البعيدة</string>
|
||||||
|
<string name="content_description_confirm_password_field">حقل تأكيد كلمة السر</string>
|
||||||
|
<string name="content_description_email_field">حقل البريد الإلكتروني</string>
|
||||||
<string name="content_description_default_account">الحساب الافتراضي</string>
|
<string name="content_description_default_account">الحساب الافتراضي</string>
|
||||||
|
<string name="content_description_deselect_all">أزل تحديد الكل</string>
|
||||||
|
<string name="content_description_select_all">حدد الكل</string>
|
||||||
|
<string name="content_description_delete_selection">احذف التحديد</string>
|
||||||
<string name="content_description_contact_first_name">اﻹسم</string>
|
<string name="content_description_contact_first_name">اﻹسم</string>
|
||||||
<string name="content_description_contact_last_name">اللقب</string>
|
<string name="content_description_contact_last_name">اللقب</string>
|
||||||
|
<string name="content_description_back_call">ارجع إلى المكالمة</string>
|
||||||
|
<string name="content_description_send_file">أرسل ملفا</string>
|
||||||
|
<string name="content_description_message">رسالة</string>
|
||||||
|
<string name="content_description_unread_chat_message">الرسائل غير المقروءة</string>
|
||||||
<string name="content_description_transfer">تحويل</string>
|
<string name="content_description_transfer">تحويل</string>
|
||||||
|
<string name="content_description_earpiece">سماعة الأذن</string>
|
||||||
<string name="content_description_bluetooth">بلوتوث</string>
|
<string name="content_description_bluetooth">بلوتوث</string>
|
||||||
|
<string name="content_description_call_options">خيارات المكالمة</string>
|
||||||
|
<string name="content_description_audio_route">توجيه الصوت</string>
|
||||||
|
<string name="content_description_exit_conference">مغادرة الاجتماع</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -6,11 +6,28 @@
|
||||||
<string name="addressbook_label">Linphone</string>
|
<string name="addressbook_label">Linphone</string>
|
||||||
<string name="notification_title">Linphone</string>
|
<string name="notification_title">Linphone</string>
|
||||||
<string name="wait_dialog_text">Startvorgang</string>
|
<string name="wait_dialog_text">Startvorgang</string>
|
||||||
|
<string name="notification_registered">%s registriert</string>
|
||||||
|
<string name="notification_register_failure">%s konnte nicht registrieren</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="about_version">Linphone Android %s</string>
|
||||||
|
<string name="about_liblinphone_version">Linphone-Kern %s</string>
|
||||||
|
<string name="about_text">GNU General Public License V2\n © 2010-2016 Belledonne Communications</string>
|
||||||
|
<string name="about_link">www.linphone.org</string>
|
||||||
|
<string name="sync_account_name">Linphone-Kontakte</string>
|
||||||
|
<string name="history_date_format">EEE, t MMM</string>
|
||||||
|
<string name="history_detail_date_format">jjjj/MM/tt - HH:mm - </string>
|
||||||
|
<string name="messages_date_format">tt/MM, HH:mm</string>
|
||||||
|
<string name="messages_list_date_format">tt/MM</string>
|
||||||
|
<string name="today_date_format">HH:mm</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Benutzername</string>
|
<string name="username">Benutzername</string>
|
||||||
<string name="display_name">Anzeigename</string>
|
<string name="display_name">Anzeigename</string>
|
||||||
<string name="password">Passwort</string>
|
<string name="password">Passwort</string>
|
||||||
|
<string name="confirm_password">Passwortbestätigung</string>
|
||||||
|
<string name="domain">Domain</string>
|
||||||
|
<string name="remote_provisioning_url">URL</string>
|
||||||
|
<string name="email">E-Mail</string>
|
||||||
|
<string name="delete_text">Sind Sie sicher, dass Sie Ihre Auswahl löschen möchten?</string>
|
||||||
<string name="delete">Löschen</string>
|
<string name="delete">Löschen</string>
|
||||||
<string name="retry">Erneut versuchen</string>
|
<string name="retry">Erneut versuchen</string>
|
||||||
<string name="cancel">Abbrechen</string>
|
<string name="cancel">Abbrechen</string>
|
||||||
|
@ -18,34 +35,75 @@
|
||||||
<string name="continue_text">Fortsetzen</string>
|
<string name="continue_text">Fortsetzen</string>
|
||||||
<string name="about">Über</string>
|
<string name="about">Über</string>
|
||||||
<string name="deny">Verweigern</string>
|
<string name="deny">Verweigern</string>
|
||||||
|
<string name="no_account">Kein Konto konfiguriert</string>
|
||||||
<string name="search">Suchen</string>
|
<string name="search">Suchen</string>
|
||||||
<string name="outgoing">Ausgehend</string>
|
<string name="outgoing">Ausgehend</string>
|
||||||
<string name="incoming">Eingehend</string>
|
<string name="incoming">Eingehend</string>
|
||||||
<string name="missed">Verpasst</string>
|
<string name="missed">Verpasst</string>
|
||||||
<string name="settings">Einstellungen</string>
|
<string name="settings">Einstellungen</string>
|
||||||
|
<string name="connect">Verbindung</string>
|
||||||
<string name="decline">Ablehnen</string>
|
<string name="decline">Ablehnen</string>
|
||||||
<string name="conference">Konferenz</string>
|
<string name="conference">Konferenz</string>
|
||||||
<!--Launch screen-->
|
<!--Launch screen-->
|
||||||
|
<string name="app_description">der <i>freie</i> SIP-Client</string>
|
||||||
<!--Assistant-->
|
<!--Assistant-->
|
||||||
|
<string name="welcome">Willkommen</string>
|
||||||
|
<string name="assistant">Assistent</string>
|
||||||
|
<string name="assistant_create_account">Konto erstellen</string>
|
||||||
|
<string name="assistant_finish">Konfiguration fertigstellen</string>
|
||||||
|
<string name="assistant_validate_account">Ihr Konto ist erstellt. Bitte überprüfen Sie Ihre E-Mails, um Ihr Konto zu bestätigen. Sobald das gemacht ist, kommen Sie hierher zurück und klicken Sie auf die Schaltfläche.</string>
|
||||||
<string name="assistant_welcome_desc">Dieser Assistent wird Ihnen dabei helfen, ein SIP-Konto für Ihre Anrufe zu verwenden.</string>
|
<string name="assistant_welcome_desc">Dieser Assistent wird Ihnen dabei helfen, ein SIP-Konto für Ihre Anrufe zu verwenden.</string>
|
||||||
|
<string name="assistant_linphone_login_desc">Geben Sie Ihren Benutzernamen und Passwort des Linphone-Kontos ein</string>
|
||||||
|
<string name="assistant_login_desc">Geben Sie Ihren Benutzernamen und Passwort mit Ihrer SIP-Domäne ein</string>
|
||||||
|
<string name="assistant_remote_provisioning_desc">Bitte geben Sie eine Bereitstellungs-URL an</string>
|
||||||
<string name="transport">Transport</string>
|
<string name="transport">Transport</string>
|
||||||
|
<string name="assistant_login_linphone">Linphone-Konto verwenden</string>
|
||||||
|
<string name="assistant_login_generic">SIP-Konto verwenden</string>
|
||||||
|
<string name="assistant_remote_provisioning">Fernkonfiguration abrufen</string>
|
||||||
|
<string name="assistant_create_account_part_1">1/2</string>
|
||||||
|
<string name="assistant_create_account_part_2">2/2</string>
|
||||||
|
<string name="assistant_display_name_optional">Anzeigename (optional)</string>
|
||||||
|
<string name="assistant_linphone_account">Linphone-Konto konfigurieren</string>
|
||||||
|
<string name="assistant_generic_account">SIP-Konto konfigurieren</string>
|
||||||
|
<string name="assistant_remote_provisioning_title">Fernkonfiguration abrufen</string>
|
||||||
|
<string name="assistant_fetch_apply">Abrufen und anwenden</string>
|
||||||
|
<string name="assistant_login">Anmelden</string>
|
||||||
|
<string name="assistant_ec_calibration">Echounterdrückungskalibrierung läuft</string>
|
||||||
|
<string name="assistant_remote_provisioning_login">Geben Sie Ihre Anmeldung ein</string>
|
||||||
<string name="assistant_account_not_validated">Ihr Konto wurde noch nicht überprüft.</string>
|
<string name="assistant_account_not_validated">Ihr Konto wurde noch nicht überprüft.</string>
|
||||||
<string name="assistant_account_validated">Ihr Konto wurde überprüft.</string>
|
<string name="assistant_account_validated">Ihr Konto wurde überprüft.</string>
|
||||||
|
<string name="assistant_error_bad_credentials">Falscher Benutzername oder Passwort</string>
|
||||||
<string name="wizard_failed">Es ist ein Fehler aufgetreten, versuchen Sie es später nochmal</string>
|
<string name="wizard_failed">Es ist ein Fehler aufgetreten, versuchen Sie es später nochmal</string>
|
||||||
|
<string name="wizard_server_unavailable">Server nicht erreichbar, überprüfen Sie Ihre Netzwerkverbindung.</string>
|
||||||
<string name="wizard_username_unavailable">Der Benutzername wird bereits verwendet.</string>
|
<string name="wizard_username_unavailable">Der Benutzername wird bereits verwendet.</string>
|
||||||
|
<string name="wizard_username_incorrect">Ihr Benutzername ist ungültig.</string>
|
||||||
|
<string name="wizard_email_incorrect">Ihre E-Mail-Adresse ist ungültig.</string>
|
||||||
|
<string name="wizard_password_incorrect">Ihr Passwort ist ungültig.</string>
|
||||||
|
<string name="wizard_passwords_unmatched">Passwörter stimmen nicht überein.</string>
|
||||||
|
<string name="setup_confirm_username">Ihr Benutzername wird %s sein.\r\n\r\nIt kann von Ihrer Eingabe abweichen, um Anforderungen zu entsprechen.\r\nNehmen Sie an?</string>
|
||||||
<string name="first_launch_no_login_password">Bitte geben Sie Ihren Benutzername und Ihr Passwort ein</string>
|
<string name="first_launch_no_login_password">Bitte geben Sie Ihren Benutzername und Ihr Passwort ein</string>
|
||||||
|
<string name="forgot_password">Passwort vergessen?</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
|
<string name="address_bar_hint">Geben Sie eine Nummer oder eine Adresse ein</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
<string name="no_call_history">Kein Anruf in Ihrer Chronik</string>
|
||||||
|
<string name="no_missed_call_history">Kein verpasster Anruf in Ihrer Chronik</string>
|
||||||
|
<string name="delete_history_log">Möchten Sie das ausgewählte Anrufprotokoll löschen?</string>
|
||||||
<string name="today">Heute</string>
|
<string name="today">Heute</string>
|
||||||
<string name="yesterday">Gestern</string>
|
<string name="yesterday">Gestern</string>
|
||||||
<!--Contacts-->
|
<!--Contacts-->
|
||||||
<string name="no_contact">Kein Kontakt in Ihrem Adressbuch.</string>
|
<string name="no_contact">Kein Kontakt in Ihrem Adressbuch.</string>
|
||||||
<string name="no_sip_contact">Kein SIP-Kontakt in Ihrem Adressbuch.</string>
|
<string name="no_sip_contact">Kein SIP-Kontakt in Ihrem Adressbuch.</string>
|
||||||
|
<string name="delete_contacts">Möchten Sie die ausgewählten Kontakte löschen?</string>
|
||||||
|
<string name="delete_contact">Möchten Sie den ausgewählten Kontakt löschen?</string>
|
||||||
<string name="sip_address">SIP-Adresse</string>
|
<string name="sip_address">SIP-Adresse</string>
|
||||||
<string name="phone_number">Telefonnummer</string>
|
<string name="phone_number">Telefonnummer</string>
|
||||||
<string name="contact_first_name">Vorname</string>
|
<string name="contact_first_name">Vorname</string>
|
||||||
<string name="contact_last_name">Nachname</string>
|
<string name="contact_last_name">Nachname</string>
|
||||||
<!--Chat-->
|
<!--Chat-->
|
||||||
|
<string name="no_chat_history">Keine Gespräche</string>
|
||||||
|
<string name="delete_conversation">Möchten Sie das ausgewählte Gespräch löschen?</string>
|
||||||
|
<string name="delete_message">Möchten Sie die ausgewählte Nachricht löschen?</string>
|
||||||
<string name="remote_composing">Partner schreibt...</string>
|
<string name="remote_composing">Partner schreibt...</string>
|
||||||
<string name="share_picture_size_small">Klein</string>
|
<string name="share_picture_size_small">Klein</string>
|
||||||
<string name="share_picture_size_medium">Mittel</string>
|
<string name="share_picture_size_medium">Mittel</string>
|
||||||
|
@ -60,13 +118,23 @@
|
||||||
<string name="processing_image">Bild wird verarbeitet. Je nach Größe der Datei kann dies mehrere Sekunden in Anspruch nehmen</string>
|
<string name="processing_image">Bild wird verarbeitet. Je nach Größe der Datei kann dies mehrere Sekunden in Anspruch nehmen</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">Registriert</string>
|
<string name="status_connected">Registriert</string>
|
||||||
|
<string name="status_not_connected">Nicht registriert</string>
|
||||||
<string name="status_in_progress">Registrierung in Arbeit</string>
|
<string name="status_in_progress">Registrierung in Arbeit</string>
|
||||||
<string name="status_error">Registierung fehlgeschlagen</string>
|
<string name="status_error">Registierung fehlgeschlagen</string>
|
||||||
<string name="voicemail_unread">ungelesene Nachrichten</string>
|
<string name="voicemail_unread">ungelesene Nachrichten</string>
|
||||||
<!--Side Menu-->
|
<!--Side Menu-->
|
||||||
|
<string name="menu_assistant">Assistent</string>
|
||||||
<string name="menu_settings">Einstellungen</string>
|
<string name="menu_settings">Einstellungen</string>
|
||||||
<string name="menu_about">Über</string>
|
<string name="menu_about">Über</string>
|
||||||
|
<string name="quit">Schließen</string>
|
||||||
<!--Call-->
|
<!--Call-->
|
||||||
|
<string name="incoming_call">eingehender Anruf</string>
|
||||||
|
<string name="outgoing_call">ausgehender Anruf</string>
|
||||||
|
<string name="add_video_dialog">Ihr Partner möchte Video einschalten</string>
|
||||||
|
<string name="no_current_call">Kein aktiver Anruf</string>
|
||||||
|
<string name="call_paused_by_remote">Ihr Partner hat den Anruf pausiert</string>
|
||||||
|
<string name="couldnt_accept_call">Beim Annehmen des Anrufs ist ein Fehler aufgetreten</string>
|
||||||
|
<string name="zrtp_dialog">ZRTP-Token ist %s\nSie sollten nur annehmen, wenn Sie den gleichen Token wie Ihr Partner haben</string>
|
||||||
<string name="unknown_incoming_call_name">Unbekannt</string>
|
<string name="unknown_incoming_call_name">Unbekannt</string>
|
||||||
<string name="call_stats_audio">Audio</string>
|
<string name="call_stats_audio">Audio</string>
|
||||||
<string name="call_stats_video">Video</string>
|
<string name="call_stats_video">Video</string>
|
||||||
|
@ -88,16 +156,20 @@
|
||||||
<!--Errors-->
|
<!--Errors-->
|
||||||
<string name="skipable_error_service_not_ready">Warnung: Dienst ist nicht bereit</string>
|
<string name="skipable_error_service_not_ready">Warnung: Dienst ist nicht bereit</string>
|
||||||
<string name="error">Fehler</string>
|
<string name="error">Fehler</string>
|
||||||
|
<string name="warning_wrong_destination_address">Kann Zieladresse aus %s nicht bauen</string>
|
||||||
<string name="error_unknown">Unbekannter Fehler</string>
|
<string name="error_unknown">Unbekannter Fehler</string>
|
||||||
<string name="error_call_declined">Anruf abgelehnt</string>
|
<string name="error_call_declined">Anruf abgelehnt</string>
|
||||||
<string name="error_user_not_found">Benutzer nicht gefunden</string>
|
<string name="error_user_not_found">Benutzer nicht gefunden</string>
|
||||||
<string name="error_incompatible_media">Inkompatible Medienparameter</string>
|
<string name="error_incompatible_media">Inkompatible Medienparameter</string>
|
||||||
|
<string name="error_low_bandwidth">Ihr Partner hat eine niedrige Bandbreite, Video kann nicht gestartet werden</string>
|
||||||
<string name="error_network_unreachable">Netzwerk ist nicht erreichbar</string>
|
<string name="error_network_unreachable">Netzwerk ist nicht erreichbar</string>
|
||||||
<string name="error_bad_credentials">Falsche Anmeldedaten</string>
|
<string name="error_bad_credentials">Falsche Anmeldedaten</string>
|
||||||
<string name="error_unauthorized">Unzulässig</string>
|
<string name="error_unauthorized">Unzulässig</string>
|
||||||
<string name="error_io_error">Netzwerkfehler</string>
|
<string name="error_io_error">Netzwerkfehler</string>
|
||||||
|
<string name="download_image_failed">Herunterladen fehlgeschlagen. Bitte überprüfen Sie Ihre Netzwerkverbindung oder versuchen Sie es später erneut.</string>
|
||||||
<string name="remote_provisioning_failure">Fehler beim Herunterladen oder Anwenden des Fernbereitstellungsprofils...</string>
|
<string name="remote_provisioning_failure">Fehler beim Herunterladen oder Anwenden des Fernbereitstellungsprofils...</string>
|
||||||
<string name="remote_provisioning_again_title">Fernbereitstellung</string>
|
<string name="remote_provisioning_again_title">Fernbereitstellung</string>
|
||||||
|
<string name="remote_provisioning_again_message">Möchten Sie die Bereitstellungs-URI ändern?</string>
|
||||||
<!--Account Settings-->
|
<!--Account Settings-->
|
||||||
<string name="pref_sipaccount">SIP-Konto</string>
|
<string name="pref_sipaccount">SIP-Konto</string>
|
||||||
<string name="pref_manage_title">Verwalten</string>
|
<string name="pref_manage_title">Verwalten</string>
|
||||||
|
@ -111,13 +183,16 @@
|
||||||
<string name="pref_help_outbound_proxy">Alle Anrufe üder einen SIP Proxy leiten</string>
|
<string name="pref_help_outbound_proxy">Alle Anrufe üder einen SIP Proxy leiten</string>
|
||||||
<string name="pref_help_username">Beispiel: John, wenn ihr Konto john@sip.example.org ist</string>
|
<string name="pref_help_username">Beispiel: John, wenn ihr Konto john@sip.example.org ist</string>
|
||||||
<string name="pref_help_domain">sip.example.org, wenn Ihr Konto john@sip.example.org ist</string>
|
<string name="pref_help_domain">sip.example.org, wenn Ihr Konto john@sip.example.org ist</string>
|
||||||
<string name="pref_help_password">Sie müssen Ihr Passwort erneut eingeben, wenn Sie Ihren Benutzernamen und/oder Domain ändern</string>
|
<string name="pref_help_password">Sie müssen Ihr Passwort erneut eingeben, wenn Sie Ihren Benutzernamen und/oder Domain bearbeiten</string>
|
||||||
<string name="pref_expire_title">Ablaufen</string>
|
<string name="pref_expire_title">Ablaufen</string>
|
||||||
<string name="pref_avpf">AVPF</string>
|
<string name="pref_avpf">AVPF</string>
|
||||||
<string name="pref_avpf_rr_interval"> AVPF Standard RTCP Interval in Sekunden (zwischen 1 und 5)</string>
|
<string name="pref_avpf_rr_interval"> AVPF Standard RTCP Interval in Sekunden (zwischen 1 und 5)</string>
|
||||||
<string name="pref_escape_plus">Ersetzen + durch 00</string>
|
<string name="pref_escape_plus">Ersetzen + durch 00</string>
|
||||||
|
<string name="pref_friendlist_subscribe">Freundesliste abonnieren</string>
|
||||||
<string name="pref_auth_userid">Authentifizierungs-Benutzerkennung</string>
|
<string name="pref_auth_userid">Authentifizierungs-Benutzerkennung</string>
|
||||||
|
<string name="pref_help_auth_userid">Authentifizierungs-Benutzerkennung eingeben (optional)</string>
|
||||||
<string name="pref_display_name">Anzeigename</string>
|
<string name="pref_display_name">Anzeigename</string>
|
||||||
|
<string name="pref_help_display_name">Anzeigename eingeben (optional)</string>
|
||||||
<string name="pref_prefix">Präfix</string>
|
<string name="pref_prefix">Präfix</string>
|
||||||
<string name="pref_transport">Transport</string>
|
<string name="pref_transport">Transport</string>
|
||||||
<string name="pref_transport_udp">UDP</string>
|
<string name="pref_transport_udp">UDP</string>
|
||||||
|
@ -147,7 +222,9 @@
|
||||||
<string name="pref_audio_title">Audio</string>
|
<string name="pref_audio_title">Audio</string>
|
||||||
<string name="pref_echo_cancellation">Echounterdrückung</string>
|
<string name="pref_echo_cancellation">Echounterdrückung</string>
|
||||||
<string name="pref_echo_cancellation_summary">Entfernt das Echo, das am anderen Ende gehört wird</string>
|
<string name="pref_echo_cancellation_summary">Entfernt das Echo, das am anderen Ende gehört wird</string>
|
||||||
|
<string name="pref_echo_canceller_calibration">Echounterdrückungskalibrierung</string>
|
||||||
<string name="ec_calibrating">Kalibrierung...</string>
|
<string name="ec_calibrating">Kalibrierung...</string>
|
||||||
|
<string name="ec_calibrated">Kalibriert in %s ms</string>
|
||||||
<string name="no_echo">Kein Echo</string>
|
<string name="no_echo">Kein Echo</string>
|
||||||
<string name="failed">fehlgeschlagen</string>
|
<string name="failed">fehlgeschlagen</string>
|
||||||
<string name="pref_adaptive_rate_control">Adaptive Ratenregelung</string>
|
<string name="pref_adaptive_rate_control">Adaptive Ratenregelung</string>
|
||||||
|
@ -155,20 +232,34 @@
|
||||||
<string name="pref_codecs">Codecs</string>
|
<string name="pref_codecs">Codecs</string>
|
||||||
<!--Video settings-->
|
<!--Video settings-->
|
||||||
<string name="pref_video_title">Video</string>
|
<string name="pref_video_title">Video</string>
|
||||||
|
<string name="pref_overlay">Videoeinblendung</string>
|
||||||
|
<string name="pref_overlay_summary">Anrufvideo in Einblendung anzeigen, wenn Sie außerhalb der Anwendung sind</string>
|
||||||
<string name="pref_video_use_front_camera_title">Frontkamera benutzen</string>
|
<string name="pref_video_use_front_camera_title">Frontkamera benutzen</string>
|
||||||
<string name="pref_video_initiate_call_with_video_title">Videoanrufe starten</string>
|
<string name="pref_video_initiate_call_with_video_title">Videoanrufe starten</string>
|
||||||
<string name="pref_video_initiate_call_with_video">Immer Videoanfragen senden</string>
|
<string name="pref_video_initiate_call_with_video">Immer Videoanfragen senden</string>
|
||||||
<string name="pref_video_automatically_accept_video_title">Eingehende Videoanfragen annehmen</string>
|
<string name="pref_video_automatically_accept_video_title">Eingehende Videoanfragen annehmen</string>
|
||||||
<string name="pref_video_automatically_accept_video">Videoanfragen immer annehmen</string>
|
<string name="pref_video_automatically_accept_video">Videoanfragen immer annehmen</string>
|
||||||
|
<string name="pref_video_preset">Videovoreinstellung</string>
|
||||||
<string name="pref_preferred_video_size">Bevorzugte Videogröße</string>
|
<string name="pref_preferred_video_size">Bevorzugte Videogröße</string>
|
||||||
|
<string name="pref_preferred_fps">Bevorzugte FPS</string>
|
||||||
<string name="pref_bandwidth_limit">Bandbreitenbegrenzung in kbits/s</string>
|
<string name="pref_bandwidth_limit">Bandbreitenbegrenzung in kbits/s</string>
|
||||||
<string name="pref_video_codecs_title">Codecs</string>
|
<string name="pref_video_codecs_title">Codecs</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Anruf</string>
|
<string name="pref_call_title">Anruf</string>
|
||||||
<string name="pref_rfc2833_dtmf">RFC2833 DTMFs senden</string>
|
<string name="pref_rfc2833_dtmf">RFC2833 DTMFs senden</string>
|
||||||
<string name="pref_sipinfo_dtmf">SIP INFO DTMFs senden</string>
|
<string name="pref_sipinfo_dtmf">SIP INFO DTMFs senden</string>
|
||||||
|
<string name="pref_voice_mail">Sprachnachricht-URI</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Nachrichten</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Gemeinsamer Server</string>
|
||||||
|
<string name="pref_image_sharing_server_desc">Nicht bearbeiten, außer Sie wissen, was Sie tun!</string>
|
||||||
|
<string name="pref_use_lime_encryption">LIME-Verschlüsselung verwenden</string>
|
||||||
|
<string name="lime_encryption_entry_disabled">Deaktiviert</string>
|
||||||
|
<string name="lime_encryption_entry_mandatory">Obligatorisch</string>
|
||||||
|
<string name="lime_encryption_entry_preferred">Bevorzugt</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Netzwerk</string>
|
<string name="pref_network_title">Netzwerk</string>
|
||||||
|
<string name="pref_wifi_only">Nur WiFi verwenden</string>
|
||||||
<string name="pref_stun_server">Stun-Server</string>
|
<string name="pref_stun_server">Stun-Server</string>
|
||||||
<string name="pref_ice_enable">ICE aktivieren</string>
|
<string name="pref_ice_enable">ICE aktivieren</string>
|
||||||
<string name="pref_upnp_enable">UPNP aktivieren</string>
|
<string name="pref_upnp_enable">UPNP aktivieren</string>
|
||||||
|
@ -180,12 +271,15 @@
|
||||||
<string name="pref_audio_port_description">Audioport oder Portbereich (Min.Port-Max.Port)</string>
|
<string name="pref_audio_port_description">Audioport oder Portbereich (Min.Port-Max.Port)</string>
|
||||||
<string name="pref_media_encryption">Medienverschlüsselung</string>
|
<string name="pref_media_encryption">Medienverschlüsselung</string>
|
||||||
<string name="pref_push_notification">Push-Benachrichtigungen aktivieren</string>
|
<string name="pref_push_notification">Push-Benachrichtigungen aktivieren</string>
|
||||||
|
<string name="pref_ipv6_title">IPv6 erlauben</string>
|
||||||
<!--Advanced settings-->
|
<!--Advanced settings-->
|
||||||
<string name="pref_advanced_title">Erweitert</string>
|
<string name="pref_advanced_title">Erweitert</string>
|
||||||
<string name="pref_debug">Debug</string>
|
<string name="pref_debug">Debug</string>
|
||||||
<string name="pref_background_mode">Hintergrundmodus</string>
|
<string name="pref_background_mode">Hintergrundmodus</string>
|
||||||
<string name="pref_animation_enable_title">Animationen aktivieren</string>
|
<string name="pref_animation_enable_title">Animationen aktivieren</string>
|
||||||
|
<string name="pref_service_notification">Dienstbenachrichtigung aktivieren</string>
|
||||||
<string name="pref_autostart">Beim Einschalten starten</string>
|
<string name="pref_autostart">Beim Einschalten starten</string>
|
||||||
|
<string name="pref_incoming_call_timeout_title">Auflegen bei eingehendem Anruf (in Sekunden)</string>
|
||||||
<string name="pref_remote_provisioning_title">Fernbereitstellung</string>
|
<string name="pref_remote_provisioning_title">Fernbereitstellung</string>
|
||||||
<string name="pref_primary_account_title">Primäres Konto</string>
|
<string name="pref_primary_account_title">Primäres Konto</string>
|
||||||
<string name="pref_display_name_title">Anzeigename</string>
|
<string name="pref_display_name_title">Anzeigename</string>
|
||||||
|
@ -199,24 +293,30 @@
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">Zurück</string>
|
<string name="content_description_back">Zurück</string>
|
||||||
<string name="content_description_dialer">Wählgerät</string>
|
<string name="content_description_dialer">Wählgerät</string>
|
||||||
|
<string name="content_description_menu">Menü</string>
|
||||||
<string name="content_description_toggle_micro">Mikrofon umschalten</string>
|
<string name="content_description_toggle_micro">Mikrofon umschalten</string>
|
||||||
<string name="content_description_toggle_speaker">Lautsprecher umschalten</string>
|
<string name="content_description_toggle_speaker">Lautsprecher umschalten</string>
|
||||||
<string name="content_description_decline">Ablehnen</string>
|
<string name="content_description_decline">Ablehnen</string>
|
||||||
<string name="content_description_hang_up">Auflegen</string>
|
<string name="content_description_hang_up">Auflegen</string>
|
||||||
<string name="content_description_accept">Annehmen</string>
|
<string name="content_description_accept">Annehmen</string>
|
||||||
<string name="content_description_edit">Ändern</string>
|
<string name="content_description_edit">Bearbeiten</string>
|
||||||
|
<string name="content_description_edit_list">Liste bearbeiten</string>
|
||||||
|
<string name="content_description_valid">Gültig</string>
|
||||||
<string name="content_description_add_contact">Zu Kontakten hinzufügen</string>
|
<string name="content_description_add_contact">Zu Kontakten hinzufügen</string>
|
||||||
<string name="content_description_new_contact">Neuer Kontakt</string>
|
<string name="content_description_new_contact">Neuer Kontakt</string>
|
||||||
<string name="content_description_call">Call</string>
|
<string name="content_description_call">Call</string>
|
||||||
<string name="content_description_backspace">Zurückschalten</string>
|
<string name="content_description_backspace">Zurückschalten</string>
|
||||||
<string name="content_description_chat">Nachrichten</string>
|
<string name="content_description_chat">Nachrichten</string>
|
||||||
<string name="content_description_dial_back">Zurückrufen</string>
|
<string name="content_description_dial_back">Zurückrufen</string>
|
||||||
|
<string name="content_description_dialer_back">Zurück zum Anrufer</string>
|
||||||
<string name="content_description_contact_picture">Kontaktbild</string>
|
<string name="content_description_contact_picture">Kontaktbild</string>
|
||||||
<string name="content_description_send_message">Nachricht senden</string>
|
<string name="content_description_send_message">Nachricht senden</string>
|
||||||
|
<string name="content_description_detail">Details</string>
|
||||||
<string name="content_description_delete">Löschen</string>
|
<string name="content_description_delete">Löschen</string>
|
||||||
<string name="content_description_add">Anruf hinzufügen</string>
|
<string name="content_description_add">Anruf hinzufügen</string>
|
||||||
<string name="content_description_new_discussion">Neue Diskussion</string>
|
<string name="content_description_new_discussion">Neue Diskussion</string>
|
||||||
<string name="content_description_search">Suchen</string>
|
<string name="content_description_search">Suchen</string>
|
||||||
|
<string name="content_description_search_contact">Kontakt suchen</string>
|
||||||
<string name="content_description_all_contacts">Alle Kontakte</string>
|
<string name="content_description_all_contacts">Alle Kontakte</string>
|
||||||
<string name="content_description_linphone_contacts">Linphone-Kontakte</string>
|
<string name="content_description_linphone_contacts">Linphone-Kontakte</string>
|
||||||
<string name="content_description_call_direction">Anrufrichtung</string>
|
<string name="content_description_call_direction">Anrufrichtung</string>
|
||||||
|
@ -235,9 +335,26 @@
|
||||||
<string name="content_description_cancel_button">Schaltfläche Abbrechen</string>
|
<string name="content_description_cancel_button">Schaltfläche Abbrechen</string>
|
||||||
<string name="content_description_message_status">Nachrichtenstatus</string>
|
<string name="content_description_message_status">Nachrichtenstatus</string>
|
||||||
<string name="content_description_conference">Konferenz</string>
|
<string name="content_description_conference">Konferenz</string>
|
||||||
|
<string name="content_description_username_field">Benutzernamenfeld</string>
|
||||||
|
<string name="content_description_display_field">Anzeigenamenfeld</string>
|
||||||
|
<string name="content_description_domain_field">Domänenfeld</string>
|
||||||
|
<string name="content_description_url_field">Fernbereitstellungsfeld</string>
|
||||||
|
<string name="content_description_confirm_password_field">Passwortbestätigungsfeld</string>
|
||||||
|
<string name="content_description_email_field">E-Mail-Feld</string>
|
||||||
<string name="content_description_default_account">Standardkonto</string>
|
<string name="content_description_default_account">Standardkonto</string>
|
||||||
|
<string name="content_description_deselect_all">Alle abwählen</string>
|
||||||
|
<string name="content_description_select_all">Alle auswählen</string>
|
||||||
|
<string name="content_description_delete_selection">Auswahl löschen</string>
|
||||||
<string name="content_description_contact_first_name">Vorname</string>
|
<string name="content_description_contact_first_name">Vorname</string>
|
||||||
<string name="content_description_contact_last_name">Nachname</string>
|
<string name="content_description_contact_last_name">Nachname</string>
|
||||||
|
<string name="content_description_back_call">Zurück zum Anruf</string>
|
||||||
|
<string name="content_description_send_file">Datei senden</string>
|
||||||
|
<string name="content_description_message">Nachricht</string>
|
||||||
|
<string name="content_description_unread_chat_message">Ungelesene Chatnachricht</string>
|
||||||
<string name="content_description_transfer">Weiterleiten</string>
|
<string name="content_description_transfer">Weiterleiten</string>
|
||||||
|
<string name="content_description_earpiece">Ohrhörer</string>
|
||||||
<string name="content_description_bluetooth">Bluetooth</string>
|
<string name="content_description_bluetooth">Bluetooth</string>
|
||||||
|
<string name="content_description_call_options">Anrufoptionen</string>
|
||||||
|
<string name="content_description_audio_route">Audioroute</string>
|
||||||
|
<string name="content_description_exit_conference">Konferenz beenden</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
<string name="notification_title">Linphone</string>
|
<string name="notification_title">Linphone</string>
|
||||||
<string name="wait_dialog_text">Iniciando</string>
|
<string name="wait_dialog_text">Iniciando</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="sync_account_name">contactos linphone</string>
|
||||||
|
<string name="today_date_format">HH:mm</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Nombre de usuario</string>
|
<string name="username">Nombre de usuario</string>
|
||||||
<string name="display_name">Nombre a mostrar</string>
|
<string name="display_name">Nombre a mostrar</string>
|
||||||
|
@ -144,6 +146,8 @@
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Llamar</string>
|
<string name="pref_call_title">Llamar</string>
|
||||||
<string name="pref_rfc2833_dtmf">Enviar DTMS RFC2833</string>
|
<string name="pref_rfc2833_dtmf">Enviar DTMS RFC2833</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Chat</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Red</string>
|
<string name="pref_network_title">Red</string>
|
||||||
<string name="pref_stun_server">Servidor STUN</string>
|
<string name="pref_stun_server">Servidor STUN</string>
|
||||||
|
|
|
@ -9,6 +9,12 @@
|
||||||
<string name="notification_registered">Rekisteröity kohteeseen %s</string>
|
<string name="notification_registered">Rekisteröity kohteeseen %s</string>
|
||||||
<string name="notification_register_failure">Epäonnistui rekisteröidä kohteeseen %s</string>
|
<string name="notification_register_failure">Epäonnistui rekisteröidä kohteeseen %s</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="sync_account_name">linphone yhteystiedot</string>
|
||||||
|
<string name="history_date_format">VVV, p KKK esim. Maanantai, 1 Tam</string>
|
||||||
|
<string name="history_detail_date_format">vvvv/KK/dd - TT:mm - esim 2012/11/22 - 12:34</string>
|
||||||
|
<string name="messages_date_format">pp/KK, TT:mm esim 22/11, 12:34</string>
|
||||||
|
<string name="messages_list_date_format">pp/KK esim 22/11</string>
|
||||||
|
<string name="today_date_format">TT:mm esim. 11:11</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Käyttäjätunnus</string>
|
<string name="username">Käyttäjätunnus</string>
|
||||||
<string name="display_name">Näytä nimi</string>
|
<string name="display_name">Näytä nimi</string>
|
||||||
|
@ -232,6 +238,9 @@
|
||||||
<string name="pref_rfc2833_dtmf">Lähetä RFC2833 DTMFs</string>
|
<string name="pref_rfc2833_dtmf">Lähetä RFC2833 DTMFs</string>
|
||||||
<string name="pref_sipinfo_dtmf">Lähetä SIP INFO DTMFs</string>
|
<string name="pref_sipinfo_dtmf">Lähetä SIP INFO DTMFs</string>
|
||||||
<string name="pref_voice_mail">Ääni postin URI-osoite</string>
|
<string name="pref_voice_mail">Ääni postin URI-osoite</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Keskustelu</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Jaa palvelin</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Verkko</string>
|
<string name="pref_network_title">Verkko</string>
|
||||||
<string name="pref_wifi_only">Käytä vain wifiä</string>
|
<string name="pref_wifi_only">Käytä vain wifiä</string>
|
||||||
|
@ -254,7 +263,6 @@
|
||||||
<string name="pref_animation_enable_title">Salli animaatiot</string>
|
<string name="pref_animation_enable_title">Salli animaatiot</string>
|
||||||
<string name="pref_autostart">Käynnistä laitteen käynnistyessä</string>
|
<string name="pref_autostart">Käynnistä laitteen käynnistyessä</string>
|
||||||
<string name="pref_incoming_call_timeout_title">Saapuva puhelu aikakatkaisu (sekunneissa)</string>
|
<string name="pref_incoming_call_timeout_title">Saapuva puhelu aikakatkaisu (sekunneissa)</string>
|
||||||
<string name="pref_image_sharing_server_title">Jaa palvelin</string>
|
|
||||||
<string name="pref_remote_provisioning_title">Vastapuoli hakee asetuksia</string>
|
<string name="pref_remote_provisioning_title">Vastapuoli hakee asetuksia</string>
|
||||||
<string name="pref_primary_account_title">Pääasiallinen tili</string>
|
<string name="pref_primary_account_title">Pääasiallinen tili</string>
|
||||||
<string name="pref_display_name_title">Näytä nimi</string>
|
<string name="pref_display_name_title">Näytä nimi</string>
|
||||||
|
|
|
@ -9,6 +9,16 @@
|
||||||
<string name="notification_registered">%s enregistré</string>
|
<string name="notification_registered">%s enregistré</string>
|
||||||
<string name="notification_register_failure">%s n\'a pas pu s\'enregistrer</string>
|
<string name="notification_register_failure">%s n\'a pas pu s\'enregistrer</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="about_version">Linphone Android %s</string>
|
||||||
|
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||||
|
<string name="about_text">GNU General Public License V2\n © 2010-2016 Belledonne Communications</string>
|
||||||
|
<string name="about_link">www.linphone.org</string>
|
||||||
|
<string name="sync_account_name">contacts linphone</string>
|
||||||
|
<string name="history_date_format">EEE, d MMM</string>
|
||||||
|
<string name="history_detail_date_format">dd/MM/yyy - HH:mm -</string>
|
||||||
|
<string name="messages_date_format">dd/MM, HH:mm</string>
|
||||||
|
<string name="messages_list_date_format">dd/MM</string>
|
||||||
|
<string name="today_date_format">HH:mm</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Nom d\'utilisateur</string>
|
<string name="username">Nom d\'utilisateur</string>
|
||||||
<string name="display_name">Nom d\'affichage</string>
|
<string name="display_name">Nom d\'affichage</string>
|
||||||
|
@ -35,6 +45,7 @@
|
||||||
<string name="decline">Refuser</string>
|
<string name="decline">Refuser</string>
|
||||||
<string name="conference">Conférence</string>
|
<string name="conference">Conférence</string>
|
||||||
<!--Launch screen-->
|
<!--Launch screen-->
|
||||||
|
<string name="app_description">le client SIP <i>libre</i></string>
|
||||||
<!--Assistant-->
|
<!--Assistant-->
|
||||||
<string name="welcome">Bienvenue</string>
|
<string name="welcome">Bienvenue</string>
|
||||||
<string name="assistant">Assistant</string>
|
<string name="assistant">Assistant</string>
|
||||||
|
@ -72,6 +83,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="wizard_passwords_unmatched">Les mots de passes ne correspondent pas.</string>
|
<string name="wizard_passwords_unmatched">Les mots de passes ne correspondent pas.</string>
|
||||||
<string name="setup_confirm_username">Votre nom d\'utilisateur sera %s.\r\n\r\nIl peut différer de votre saisie.\r\nContinuer ?</string>
|
<string name="setup_confirm_username">Votre nom d\'utilisateur sera %s.\r\n\r\nIl peut différer de votre saisie.\r\nContinuer ?</string>
|
||||||
<string name="first_launch_no_login_password">Entrez votre nom d\'utilisateur et votre mot de passe</string>
|
<string name="first_launch_no_login_password">Entrez votre nom d\'utilisateur et votre mot de passe</string>
|
||||||
|
<string name="forgot_password">Mot de passe oublié ?</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
<string name="address_bar_hint">Entrez un numéro ou une adresse</string>
|
<string name="address_bar_hint">Entrez un numéro ou une adresse</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
@ -177,6 +189,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="pref_avpf">AVPF</string>
|
<string name="pref_avpf">AVPF</string>
|
||||||
<string name="pref_avpf_rr_interval">Intervalle AVPF RTCP régulier en secondes (entre 1 et 5) </string>
|
<string name="pref_avpf_rr_interval">Intervalle AVPF RTCP régulier en secondes (entre 1 et 5) </string>
|
||||||
<string name="pref_escape_plus">Remplacer + par 00</string>
|
<string name="pref_escape_plus">Remplacer + par 00</string>
|
||||||
|
<string name="pref_friendlist_subscribe">Souscrire à la liste d\'amis</string>
|
||||||
<string name="pref_auth_userid">Identifiant d\'authentification</string>
|
<string name="pref_auth_userid">Identifiant d\'authentification</string>
|
||||||
<string name="pref_help_auth_userid">Entrez l\'userid d\'authentification (optionnel)</string>
|
<string name="pref_help_auth_userid">Entrez l\'userid d\'authentification (optionnel)</string>
|
||||||
<string name="pref_display_name">Nom d\'affichage</string>
|
<string name="pref_display_name">Nom d\'affichage</string>
|
||||||
|
@ -192,6 +205,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="pref_sipaccounts">Comptes SIP</string>
|
<string name="pref_sipaccounts">Comptes SIP</string>
|
||||||
<string name="default_account_flag">Compte par défaut</string>
|
<string name="default_account_flag">Compte par défaut</string>
|
||||||
<string name="pref_add_account">Ajouter un compte</string>
|
<string name="pref_add_account">Ajouter un compte</string>
|
||||||
|
<string name="pref_in_app_store">Magasin</string>
|
||||||
<string name="pref_tunnel">Tunnel</string>
|
<string name="pref_tunnel">Tunnel</string>
|
||||||
<string name="pref_tunnel_host">Hôte</string>
|
<string name="pref_tunnel_host">Hôte</string>
|
||||||
<string name="pref_tunnel_port">Port</string>
|
<string name="pref_tunnel_port">Port</string>
|
||||||
|
@ -220,6 +234,8 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="pref_codecs">Codecs</string>
|
<string name="pref_codecs">Codecs</string>
|
||||||
<!--Video settings-->
|
<!--Video settings-->
|
||||||
<string name="pref_video_title">Vidéo</string>
|
<string name="pref_video_title">Vidéo</string>
|
||||||
|
<string name="pref_overlay">Vidéo détachable</string>
|
||||||
|
<string name="pref_overlay_summary">Affiche la video d\'un appel en dehors de l\'application</string>
|
||||||
<string name="pref_video_use_front_camera_title">Utiliser la caméra en façade</string>
|
<string name="pref_video_use_front_camera_title">Utiliser la caméra en façade</string>
|
||||||
<string name="pref_video_initiate_call_with_video_title">Initier les appels en vidéo</string>
|
<string name="pref_video_initiate_call_with_video_title">Initier les appels en vidéo</string>
|
||||||
<string name="pref_video_initiate_call_with_video">Toujours envoyer des demandes d\'appels vidéo</string>
|
<string name="pref_video_initiate_call_with_video">Toujours envoyer des demandes d\'appels vidéo</string>
|
||||||
|
@ -232,9 +248,19 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="pref_video_codecs_title">Codecs</string>
|
<string name="pref_video_codecs_title">Codecs</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Appel</string>
|
<string name="pref_call_title">Appel</string>
|
||||||
|
<string name="pref_device_ringtone">Utiliser la sonnerie du téléphone</string>
|
||||||
|
<string name="pref_auto_answer">Décrocher automatiquement appels entrants</string>
|
||||||
<string name="pref_rfc2833_dtmf">Envoyer les DTMFs RFC2833</string>
|
<string name="pref_rfc2833_dtmf">Envoyer les DTMFs RFC2833</string>
|
||||||
<string name="pref_sipinfo_dtmf">Envoyer les DTMFs en SIP INFO</string>
|
<string name="pref_sipinfo_dtmf">Envoyer les DTMFs en SIP INFO</string>
|
||||||
<string name="pref_voice_mail">URI de boîte vocale</string>
|
<string name="pref_voice_mail">URI de boîte vocale</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Chat</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Serveur de partage</string>
|
||||||
|
<string name="pref_image_sharing_server_desc">Ne changez pas cette valeur sans savoir ce que vous faites !</string>
|
||||||
|
<string name="pref_use_lime_encryption">Encrypter avec LIME</string>
|
||||||
|
<string name="lime_encryption_entry_disabled">Désactivé</string>
|
||||||
|
<string name="lime_encryption_entry_mandatory">Obligatoire</string>
|
||||||
|
<string name="lime_encryption_entry_preferred">Préferré</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Réseau</string>
|
<string name="pref_network_title">Réseau</string>
|
||||||
<string name="pref_wifi_only">Utiliser WiFi uniquement</string>
|
<string name="pref_wifi_only">Utiliser WiFi uniquement</string>
|
||||||
|
@ -255,9 +281,9 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="pref_debug">Activer les traces de débogage</string>
|
<string name="pref_debug">Activer les traces de débogage</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_animation_enable_title">Activer les animations</string>
|
<string name="pref_animation_enable_title">Activer les animations</string>
|
||||||
|
<string name="pref_service_notification">Notification de service</string>
|
||||||
<string name="pref_autostart">Démarrer au lancement du téléphone</string>
|
<string name="pref_autostart">Démarrer au lancement du téléphone</string>
|
||||||
<string name="pref_incoming_call_timeout_title">Ignorer les appels entrants après (en secondes)</string>
|
<string name="pref_incoming_call_timeout_title">Ignorer les appels entrants après (en secondes)</string>
|
||||||
<string name="pref_image_sharing_server_title">Serveur de partage</string>
|
|
||||||
<string name="pref_remote_provisioning_title">Configuration distante</string>
|
<string name="pref_remote_provisioning_title">Configuration distante</string>
|
||||||
<string name="pref_primary_account_title">Compte principal</string>
|
<string name="pref_primary_account_title">Compte principal</string>
|
||||||
<string name="pref_display_name_title">Nom d\'affichage</string>
|
<string name="pref_display_name_title">Nom d\'affichage</string>
|
||||||
|
@ -271,6 +297,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">Retour</string>
|
<string name="content_description_back">Retour</string>
|
||||||
<string name="content_description_dialer">Dialer</string>
|
<string name="content_description_dialer">Dialer</string>
|
||||||
|
<string name="content_description_menu">Menu</string>
|
||||||
<string name="content_description_toggle_micro">Basculer micro</string>
|
<string name="content_description_toggle_micro">Basculer micro</string>
|
||||||
<string name="content_description_toggle_speaker">Basculer haut-parleur</string>
|
<string name="content_description_toggle_speaker">Basculer haut-parleur</string>
|
||||||
<string name="content_description_decline">Refuser</string>
|
<string name="content_description_decline">Refuser</string>
|
||||||
|
@ -315,11 +342,13 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.</string>
|
||||||
<string name="content_description_username_field">Champ nom d\'utilisateur</string>
|
<string name="content_description_username_field">Champ nom d\'utilisateur</string>
|
||||||
<string name="content_description_display_field">Champ nom d\'affichage</string>
|
<string name="content_description_display_field">Champ nom d\'affichage</string>
|
||||||
<string name="content_description_domain_field">Champ domaine</string>
|
<string name="content_description_domain_field">Champ domaine</string>
|
||||||
|
<string name="content_description_url_field">Champ de configuration distante</string>
|
||||||
<string name="content_description_confirm_password_field">Champ confirmation du mot de passe</string>
|
<string name="content_description_confirm_password_field">Champ confirmation du mot de passe</string>
|
||||||
<string name="content_description_email_field">Champ email</string>
|
<string name="content_description_email_field">Champ email</string>
|
||||||
<string name="content_description_default_account">Compte par défaut</string>
|
<string name="content_description_default_account">Compte par défaut</string>
|
||||||
<string name="content_description_deselect_all">Tout déselectionner</string>
|
<string name="content_description_deselect_all">Tout déselectionner</string>
|
||||||
<string name="content_description_select_all">Tout sélectionner</string>
|
<string name="content_description_select_all">Tout sélectionner</string>
|
||||||
|
<string name="content_description_delete_selection">Supprimer la sélection</string>
|
||||||
<string name="content_description_contact_first_name">Prénom</string>
|
<string name="content_description_contact_first_name">Prénom</string>
|
||||||
<string name="content_description_contact_last_name">Nom</string>
|
<string name="content_description_contact_last_name">Nom</string>
|
||||||
<string name="content_description_back_call">Retour à l\'appel</string>
|
<string name="content_description_back_call">Retour à l\'appel</string>
|
||||||
|
|
|
@ -67,6 +67,8 @@
|
||||||
<string name="pref_video_title">וידאו</string>
|
<string name="pref_video_title">וידאו</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">קריאה</string>
|
<string name="pref_call_title">קריאה</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">שיחה</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">רשת</string>
|
<string name="pref_network_title">רשת</string>
|
||||||
<string name="pref_stun_server">שרת Stun</string>
|
<string name="pref_stun_server">שרת Stun</string>
|
||||||
|
|
|
@ -9,6 +9,16 @@
|
||||||
<string name="notification_registered">%sを登録しました</string>
|
<string name="notification_registered">%sを登録しました</string>
|
||||||
<string name="notification_register_failure">%sの登録に失敗しました</string>
|
<string name="notification_register_failure">%sの登録に失敗しました</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="about_version">Linphone Android %s</string>
|
||||||
|
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||||
|
<string name="about_text">GNU ライセンス V2\n © 2010-2016 Belledonne Communications</string>
|
||||||
|
<string name="about_link">www.linphone.org</string>
|
||||||
|
<string name="sync_account_name">linphoneにたずねる</string>
|
||||||
|
<string name="history_date_format">EEE, d MMM</string>
|
||||||
|
<string name="history_detail_date_format">yyyy/MM/dd - HH:mm - </string>
|
||||||
|
<string name="messages_date_format">dd/MM, HH:mm</string>
|
||||||
|
<string name="messages_list_date_format">dd/MM</string>
|
||||||
|
<string name="today_date_format">HH:mm</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">ユーザー名</string>
|
<string name="username">ユーザー名</string>
|
||||||
<string name="display_name">表示する名前</string>
|
<string name="display_name">表示する名前</string>
|
||||||
|
@ -64,19 +74,33 @@
|
||||||
<string name="assistant_error_bad_credentials">ユーザー名かパスワードが異なります</string>
|
<string name="assistant_error_bad_credentials">ユーザー名かパスワードが異なります</string>
|
||||||
<string name="wizard_failed">エラーが発生しました。のちほど再試行してください。</string>
|
<string name="wizard_failed">エラーが発生しました。のちほど再試行してください。</string>
|
||||||
<string name="wizard_username_unavailable">このユーザー名はすでに使われています。</string>
|
<string name="wizard_username_unavailable">このユーザー名はすでに使われています。</string>
|
||||||
|
<string name="wizard_username_incorrect">不適切なユーザー名です</string>
|
||||||
|
<string name="wizard_email_incorrect">不適切なメールアドレスです</string>
|
||||||
|
<string name="wizard_password_incorrect">不適切なパスワードです</string>
|
||||||
|
<string name="wizard_passwords_unmatched">パスワードが一致しません</string>
|
||||||
<string name="first_launch_no_login_password">ユーザー名とパスワードを入力してください</string>
|
<string name="first_launch_no_login_password">ユーザー名とパスワードを入力してください</string>
|
||||||
|
<string name="forgot_password">パスワードを忘れましたか?</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
|
<string name="address_bar_hint">番号もしくはアドレスを入力してください</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
<string name="no_call_history">発信履歴がありません</string>
|
||||||
|
<string name="no_missed_call_history">発信ミス履歴がありません</string>
|
||||||
|
<string name="delete_history_log">本当に選択した通話履歴を削除しますか?</string>
|
||||||
<string name="today">今日</string>
|
<string name="today">今日</string>
|
||||||
<string name="yesterday">昨日</string>
|
<string name="yesterday">昨日</string>
|
||||||
<!--Contacts-->
|
<!--Contacts-->
|
||||||
<string name="no_contact">電話帳に連絡先がありません</string>
|
<string name="no_contact">電話帳に連絡先がありません</string>
|
||||||
<string name="no_sip_contact">電話帳にSIPの連絡先がありません</string>
|
<string name="no_sip_contact">電話帳にSIPの連絡先がありません</string>
|
||||||
|
<string name="delete_contacts">本当に選択した連絡先を削除しますか?</string>
|
||||||
|
<string name="delete_contact">本当に選択した連絡先を削除しますか?</string>
|
||||||
<string name="sip_address">SIPアドレス</string>
|
<string name="sip_address">SIPアドレス</string>
|
||||||
<string name="phone_number">電話番号</string>
|
<string name="phone_number">電話番号</string>
|
||||||
<string name="contact_first_name">名前</string>
|
<string name="contact_first_name">名前</string>
|
||||||
<string name="contact_last_name">名字</string>
|
<string name="contact_last_name">名字</string>
|
||||||
<!--Chat-->
|
<!--Chat-->
|
||||||
|
<string name="no_chat_history">新しい会話はありません</string>
|
||||||
|
<string name="delete_conversation">本当に選択した会話を削除しますか?</string>
|
||||||
|
<string name="delete_message">本当に選択したメッセージを削除しますか?</string>
|
||||||
<string name="remote_composing">リモート先が入力中...</string>
|
<string name="remote_composing">リモート先が入力中...</string>
|
||||||
<string name="share_picture_size_small">小さい</string>
|
<string name="share_picture_size_small">小さい</string>
|
||||||
<string name="share_picture_size_medium">中くらい</string>
|
<string name="share_picture_size_medium">中くらい</string>
|
||||||
|
@ -103,6 +127,7 @@
|
||||||
<!--Call-->
|
<!--Call-->
|
||||||
<string name="incoming_call">着信</string>
|
<string name="incoming_call">着信</string>
|
||||||
<string name="outgoing_call">発信</string>
|
<string name="outgoing_call">発信</string>
|
||||||
|
<string name="no_current_call">有効な発信はありません</string>
|
||||||
<string name="unknown_incoming_call_name">不明</string>
|
<string name="unknown_incoming_call_name">不明</string>
|
||||||
<string name="call_stats_audio">オーディオ</string>
|
<string name="call_stats_audio">オーディオ</string>
|
||||||
<string name="call_stats_video">ビデオ</string>
|
<string name="call_stats_video">ビデオ</string>
|
||||||
|
@ -132,6 +157,7 @@
|
||||||
<string name="error_bad_credentials">不正な証明書です</string>
|
<string name="error_bad_credentials">不正な証明書です</string>
|
||||||
<string name="error_unauthorized">無断</string>
|
<string name="error_unauthorized">無断</string>
|
||||||
<string name="error_io_error">ネットワークエラー</string>
|
<string name="error_io_error">ネットワークエラー</string>
|
||||||
|
<string name="download_image_failed">ダウンロードに失敗しました。ネットワークを確認して再度操作してください。</string>
|
||||||
<string name="remote_provisioning_failure">ダウンロードした、リモートプロビジョニング設定を適用できませんでした...</string>
|
<string name="remote_provisioning_failure">ダウンロードした、リモートプロビジョニング設定を適用できませんでした...</string>
|
||||||
<string name="remote_provisioning_again_title">遠隔準備</string>
|
<string name="remote_provisioning_again_title">遠隔準備</string>
|
||||||
<!--Account Settings-->
|
<!--Account Settings-->
|
||||||
|
@ -154,6 +180,7 @@
|
||||||
<string name="pref_escape_plus">00 で置き換える</string>
|
<string name="pref_escape_plus">00 で置き換える</string>
|
||||||
<string name="pref_auth_userid">ユーザーIDを認証</string>
|
<string name="pref_auth_userid">ユーザーIDを認証</string>
|
||||||
<string name="pref_display_name">表示名</string>
|
<string name="pref_display_name">表示名</string>
|
||||||
|
<string name="pref_help_display_name">表示する名前(任意)</string>
|
||||||
<string name="pref_prefix">プレフィックス</string>
|
<string name="pref_prefix">プレフィックス</string>
|
||||||
<string name="pref_transport">トランスポート</string>
|
<string name="pref_transport">トランスポート</string>
|
||||||
<string name="pref_transport_udp">UDP</string>
|
<string name="pref_transport_udp">UDP</string>
|
||||||
|
@ -165,6 +192,7 @@
|
||||||
<string name="pref_sipaccounts">SIPアカウント</string>
|
<string name="pref_sipaccounts">SIPアカウント</string>
|
||||||
<string name="default_account_flag">デフォルトのアカウント</string>
|
<string name="default_account_flag">デフォルトのアカウント</string>
|
||||||
<string name="pref_add_account">アカウントを追加する</string>
|
<string name="pref_add_account">アカウントを追加する</string>
|
||||||
|
<string name="pref_in_app_store">アプリストアで</string>
|
||||||
<string name="pref_tunnel">トンネル</string>
|
<string name="pref_tunnel">トンネル</string>
|
||||||
<string name="pref_tunnel_host">ホスト名</string>
|
<string name="pref_tunnel_host">ホスト名</string>
|
||||||
<string name="pref_tunnel_port">ポート</string>
|
<string name="pref_tunnel_port">ポート</string>
|
||||||
|
@ -183,6 +211,7 @@
|
||||||
<string name="pref_audio_title">オーディオ</string>
|
<string name="pref_audio_title">オーディオ</string>
|
||||||
<string name="pref_echo_cancellation">エコーキャンセル</string>
|
<string name="pref_echo_cancellation">エコーキャンセル</string>
|
||||||
<string name="pref_echo_cancellation_summary">相手が聞こえるエコーを削除する</string>
|
<string name="pref_echo_cancellation_summary">相手が聞こえるエコーを削除する</string>
|
||||||
|
<string name="pref_echo_canceller_calibration">エコーキャンセラーの調整</string>
|
||||||
<string name="ec_calibrating">調整中...</string>
|
<string name="ec_calibrating">調整中...</string>
|
||||||
<string name="ec_calibrated">%s msで調整しました</string>
|
<string name="ec_calibrated">%s msで調整しました</string>
|
||||||
<string name="no_echo">エコーなし</string>
|
<string name="no_echo">エコーなし</string>
|
||||||
|
@ -207,6 +236,10 @@
|
||||||
<string name="pref_rfc2833_dtmf">DTMFをRFC2833で送信する</string>
|
<string name="pref_rfc2833_dtmf">DTMFをRFC2833で送信する</string>
|
||||||
<string name="pref_sipinfo_dtmf">DTMFをSIP情報で送信する</string>
|
<string name="pref_sipinfo_dtmf">DTMFをSIP情報で送信する</string>
|
||||||
<string name="pref_voice_mail">音声メールのURI</string>
|
<string name="pref_voice_mail">音声メールのURI</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">チャット</string>
|
||||||
|
<string name="pref_image_sharing_server_title">共有サーバー</string>
|
||||||
|
<string name="lime_encryption_entry_disabled">無効にする</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">ネットワーク</string>
|
<string name="pref_network_title">ネットワーク</string>
|
||||||
<string name="pref_wifi_only">WiFiのみ</string>
|
<string name="pref_wifi_only">WiFiのみ</string>
|
||||||
|
@ -227,8 +260,8 @@
|
||||||
<string name="pref_debug">デバッグ</string>
|
<string name="pref_debug">デバッグ</string>
|
||||||
<string name="pref_background_mode">バックグラウンド動作</string>
|
<string name="pref_background_mode">バックグラウンド動作</string>
|
||||||
<string name="pref_animation_enable_title">アニメーションを有効にする</string>
|
<string name="pref_animation_enable_title">アニメーションを有効にする</string>
|
||||||
|
<string name="pref_service_notification">サービス通知を有効にする</string>
|
||||||
<string name="pref_autostart">起動時に開始する</string>
|
<string name="pref_autostart">起動時に開始する</string>
|
||||||
<string name="pref_image_sharing_server_title">共有サーバー</string>
|
|
||||||
<string name="pref_remote_provisioning_title">遠隔準備</string>
|
<string name="pref_remote_provisioning_title">遠隔準備</string>
|
||||||
<string name="pref_primary_account_title">優先アカウント</string>
|
<string name="pref_primary_account_title">優先アカウント</string>
|
||||||
<string name="pref_display_name_title">表示名</string>
|
<string name="pref_display_name_title">表示名</string>
|
||||||
|
@ -242,18 +275,22 @@
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">戻る</string>
|
<string name="content_description_back">戻る</string>
|
||||||
<string name="content_description_dialer">ダイヤラー</string>
|
<string name="content_description_dialer">ダイヤラー</string>
|
||||||
|
<string name="content_description_menu">メニュー</string>
|
||||||
<string name="content_description_toggle_micro">マイク切り替えトグル</string>
|
<string name="content_description_toggle_micro">マイク切り替えトグル</string>
|
||||||
<string name="content_description_toggle_speaker">スピーカー切り替えトグル</string>
|
<string name="content_description_toggle_speaker">スピーカー切り替えトグル</string>
|
||||||
<string name="content_description_decline">拒否</string>
|
<string name="content_description_decline">拒否</string>
|
||||||
<string name="content_description_hang_up">ハングアップ</string>
|
<string name="content_description_hang_up">ハングアップ</string>
|
||||||
<string name="content_description_accept">受理する</string>
|
<string name="content_description_accept">受理する</string>
|
||||||
<string name="content_description_edit">編集</string>
|
<string name="content_description_edit">編集</string>
|
||||||
|
<string name="content_description_edit_list">編集リスト</string>
|
||||||
|
<string name="content_description_valid">適正</string>
|
||||||
<string name="content_description_add_contact">連絡先に追加</string>
|
<string name="content_description_add_contact">連絡先に追加</string>
|
||||||
<string name="content_description_new_contact">新しい連絡先</string>
|
<string name="content_description_new_contact">新しい連絡先</string>
|
||||||
<string name="content_description_call">発信</string>
|
<string name="content_description_call">発信</string>
|
||||||
<string name="content_description_backspace">バックスペース</string>
|
<string name="content_description_backspace">バックスペース</string>
|
||||||
<string name="content_description_chat">チャット</string>
|
<string name="content_description_chat">チャット</string>
|
||||||
<string name="content_description_dial_back">コールバック</string>
|
<string name="content_description_dial_back">コールバック</string>
|
||||||
|
<string name="content_description_dialer_back">ダイヤル画面に戻る</string>
|
||||||
<string name="content_description_contact_picture">連絡相手の画像</string>
|
<string name="content_description_contact_picture">連絡相手の画像</string>
|
||||||
<string name="content_description_send_message">送信メッセージ</string>
|
<string name="content_description_send_message">送信メッセージ</string>
|
||||||
<string name="content_description_detail">詳細</string>
|
<string name="content_description_detail">詳細</string>
|
||||||
|
@ -261,6 +298,7 @@
|
||||||
<string name="content_description_add">追加発信</string>
|
<string name="content_description_add">追加発信</string>
|
||||||
<string name="content_description_new_discussion">新しいやりとりを行う</string>
|
<string name="content_description_new_discussion">新しいやりとりを行う</string>
|
||||||
<string name="content_description_search">検索</string>
|
<string name="content_description_search">検索</string>
|
||||||
|
<string name="content_description_search_contact">連絡先を検索する</string>
|
||||||
<string name="content_description_all_contacts">すべての連絡先</string>
|
<string name="content_description_all_contacts">すべての連絡先</string>
|
||||||
<string name="content_description_linphone_contacts">Linphoneでの連絡先</string>
|
<string name="content_description_linphone_contacts">Linphoneでの連絡先</string>
|
||||||
<string name="content_description_call_direction">宛先を指定</string>
|
<string name="content_description_call_direction">宛先を指定</string>
|
||||||
|
@ -279,9 +317,22 @@
|
||||||
<string name="content_description_cancel_button">キャンセルボタン</string>
|
<string name="content_description_cancel_button">キャンセルボタン</string>
|
||||||
<string name="content_description_message_status">メッセージ状態</string>
|
<string name="content_description_message_status">メッセージ状態</string>
|
||||||
<string name="content_description_conference">会談</string>
|
<string name="content_description_conference">会談</string>
|
||||||
|
<string name="content_description_username_field">ユーザー名</string>
|
||||||
|
<string name="content_description_display_field">表示名</string>
|
||||||
|
<string name="content_description_domain_field">ドメイン</string>
|
||||||
|
<string name="content_description_confirm_password_field">パスワードの再入力</string>
|
||||||
|
<string name="content_description_email_field">メールアドレス</string>
|
||||||
<string name="content_description_default_account">デフォルトのアカウント</string>
|
<string name="content_description_default_account">デフォルトのアカウント</string>
|
||||||
|
<string name="content_description_deselect_all">全ての選択を外す</string>
|
||||||
|
<string name="content_description_select_all">全てを選択する</string>
|
||||||
<string name="content_description_contact_first_name">名前</string>
|
<string name="content_description_contact_first_name">名前</string>
|
||||||
<string name="content_description_contact_last_name">名字</string>
|
<string name="content_description_contact_last_name">名字</string>
|
||||||
|
<string name="content_description_back_call">発信に戻る</string>
|
||||||
|
<string name="content_description_send_file">ファイルを送信する</string>
|
||||||
|
<string name="content_description_message">メッセージ</string>
|
||||||
|
<string name="content_description_unread_chat_message">未読件数</string>
|
||||||
<string name="content_description_transfer">転送</string>
|
<string name="content_description_transfer">転送</string>
|
||||||
<string name="content_description_bluetooth">Bluetooth</string>
|
<string name="content_description_bluetooth">Bluetooth</string>
|
||||||
|
<string name="content_description_call_options">発信オプション</string>
|
||||||
|
<string name="content_description_exit_conference">会議を終了する</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<string name="notification_title">Linphone</string>
|
<string name="notification_title">Linphone</string>
|
||||||
<string name="wait_dialog_text">Bezig met opstarten</string>
|
<string name="wait_dialog_text">Bezig met opstarten</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="today_date_format">HH:mm</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Gebruikersnaam</string>
|
<string name="username">Gebruikersnaam</string>
|
||||||
<string name="display_name">Weergavenaam</string>
|
<string name="display_name">Weergavenaam</string>
|
||||||
|
@ -94,6 +95,8 @@
|
||||||
<string name="pref_video_codecs_title">Codecs</string>
|
<string name="pref_video_codecs_title">Codecs</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Oproep</string>
|
<string name="pref_call_title">Oproep</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Chat</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Netwerk</string>
|
<string name="pref_network_title">Netwerk</string>
|
||||||
<string name="pref_stun_server">Stun-server</string>
|
<string name="pref_stun_server">Stun-server</string>
|
||||||
|
|
|
@ -161,6 +161,9 @@
|
||||||
<string name="pref_call_title">Ligar</string>
|
<string name="pref_call_title">Ligar</string>
|
||||||
<string name="pref_rfc2833_dtmf">Enviar RFC2833 DTMFs</string>
|
<string name="pref_rfc2833_dtmf">Enviar RFC2833 DTMFs</string>
|
||||||
<string name="pref_sipinfo_dtmf">Enviar SIP INFO DTMFs</string>
|
<string name="pref_sipinfo_dtmf">Enviar SIP INFO DTMFs</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Chat</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Servidor de compartilhamento</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Network</string>
|
<string name="pref_network_title">Network</string>
|
||||||
<string name="pref_stun_server">Servidor Stun</string>
|
<string name="pref_stun_server">Servidor Stun</string>
|
||||||
|
@ -180,7 +183,6 @@
|
||||||
<string name="pref_background_mode">Em segundo plano</string>
|
<string name="pref_background_mode">Em segundo plano</string>
|
||||||
<string name="pref_animation_enable_title">Ativar Animações</string>
|
<string name="pref_animation_enable_title">Ativar Animações</string>
|
||||||
<string name="pref_autostart">Iniciar na inicialização</string>
|
<string name="pref_autostart">Iniciar na inicialização</string>
|
||||||
<string name="pref_image_sharing_server_title">Servidor de compartilhamento</string>
|
|
||||||
<string name="pref_remote_provisioning_title">Provisionamento remoto</string>
|
<string name="pref_remote_provisioning_title">Provisionamento remoto</string>
|
||||||
<string name="pref_primary_account_title">Conta primária</string>
|
<string name="pref_primary_account_title">Conta primária</string>
|
||||||
<string name="pref_display_name_title">Mostrar nome</string>
|
<string name="pref_display_name_title">Mostrar nome</string>
|
||||||
|
|
|
@ -2,49 +2,97 @@
|
||||||
<resources>
|
<resources>
|
||||||
<!--Custom-->
|
<!--Custom-->
|
||||||
<string name="app_name">Linphone</string>
|
<string name="app_name">Linphone</string>
|
||||||
|
<string name="service_name">Служба Linphone</string>
|
||||||
<string name="addressbook_label">Linphone</string>
|
<string name="addressbook_label">Linphone</string>
|
||||||
<string name="notification_title">Linphone</string>
|
<string name="notification_title">Linphone</string>
|
||||||
<string name="wait_dialog_text">Загружается</string>
|
<string name="wait_dialog_text">Загружается</string>
|
||||||
|
<string name="notification_registered">%s зарегистрирован</string>
|
||||||
|
<string name="notification_register_failure">%s зарегистрировать не удалось</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Имя пользователя</string>
|
<string name="username">Имя пользователя</string>
|
||||||
<string name="display_name">Display name</string>
|
<string name="display_name">Отображаемое имя</string>
|
||||||
<string name="password">Пароль</string>
|
<string name="password">Пароль</string>
|
||||||
|
<string name="confirm_password">Подтверждение пароля</string>
|
||||||
|
<string name="domain">Домен</string>
|
||||||
|
<string name="remote_provisioning_url">URL</string>
|
||||||
|
<string name="email">Электронная почта</string>
|
||||||
|
<string name="delete_text">Вы уверены, что хотите удалить выбранное?</string>
|
||||||
<string name="delete">Удалить</string>
|
<string name="delete">Удалить</string>
|
||||||
<string name="retry">Retry</string>
|
<string name="retry">Повторить</string>
|
||||||
<string name="cancel">Отменить</string>
|
<string name="cancel">Отменить</string>
|
||||||
<string name="accept">Принять</string>
|
<string name="accept">Принять</string>
|
||||||
<string name="continue_text">Продолжить</string>
|
<string name="continue_text">Продолжить</string>
|
||||||
<string name="about">О программе</string>
|
<string name="about">О программе</string>
|
||||||
<string name="deny">Deny</string>
|
<string name="deny">Отклонить</string>
|
||||||
|
<string name="no_account">Нет настроенных аккаунтов</string>
|
||||||
|
<string name="search">Поиск</string>
|
||||||
<string name="outgoing">Исходящий</string>
|
<string name="outgoing">Исходящий</string>
|
||||||
<string name="incoming">Входящий</string>
|
<string name="incoming">Входящий</string>
|
||||||
<string name="missed">Пропущенный</string>
|
<string name="missed">Пропущенный</string>
|
||||||
<string name="settings">Настройки</string>
|
<string name="settings">Настройки</string>
|
||||||
|
<string name="connect">Подключение</string>
|
||||||
<string name="decline">Отклонить</string>
|
<string name="decline">Отклонить</string>
|
||||||
<string name="conference">Конференция</string>
|
<string name="conference">Конференция</string>
|
||||||
<!--Launch screen-->
|
<!--Launch screen-->
|
||||||
<!--Assistant-->
|
<!--Assistant-->
|
||||||
<string name="assistant_welcome_desc">Этот помощник поможет Вам настроить учётную запись SIP для звонков.</string>
|
<string name="welcome">Добро пожаловать</string>
|
||||||
|
<string name="assistant">Ассистент</string>
|
||||||
|
<string name="assistant_create_account">Создать аккаунт</string>
|
||||||
|
<string name="assistant_finish">Завершить настройку</string>
|
||||||
|
<string name="assistant_validate_account">Ваш аккаунт создан. Пожалуйста, проверьте электронную почту, чтобы подтвердить свой аккаунт. Как только это будет сделано, вернитесь сюда и нажмите на кнопку.</string>
|
||||||
|
<string name="assistant_welcome_desc">Этот ассистент поможет настроить SIP-аккаунт для звонков.</string>
|
||||||
|
<string name="assistant_linphone_login_desc">Введите имя пользователя и пароль от аккаунта Linphone</string>
|
||||||
|
<string name="assistant_login_desc">Введите имя пользователя и пароль с доменом SIP</string>
|
||||||
|
<string name="assistant_remote_provisioning_desc">Пожалуйста, введите URL конфигурирования</string>
|
||||||
<string name="transport">Транспорт</string>
|
<string name="transport">Транспорт</string>
|
||||||
|
<string name="assistant_login_linphone">Исп. аккаунт Linphone</string>
|
||||||
|
<string name="assistant_login_generic">Исп. SIP-аккаунт</string>
|
||||||
|
<string name="assistant_remote_provisioning">Удалённое конфигурирование</string>
|
||||||
|
<string name="assistant_create_account_part_1">1/2</string>
|
||||||
|
<string name="assistant_create_account_part_2">2/2</string>
|
||||||
|
<string name="assistant_display_name_optional">Отображаемое имя (необязательно)</string>
|
||||||
|
<string name="assistant_linphone_account">Настройка аккаунта Linphone</string>
|
||||||
|
<string name="assistant_generic_account">Настройка SIP-аккаунта</string>
|
||||||
|
<string name="assistant_remote_provisioning_title">Удалённое конфигурирование</string>
|
||||||
|
<string name="assistant_fetch_apply">Извлечь и применить</string>
|
||||||
|
<string name="assistant_login">Логин</string>
|
||||||
|
<string name="assistant_ec_calibration">Выполняется калибровка эхоподавления</string>
|
||||||
|
<string name="assistant_remote_provisioning_login">Введите логин</string>
|
||||||
<string name="assistant_account_not_validated">Ваша учётная запись ещё не подтверждена.</string>
|
<string name="assistant_account_not_validated">Ваша учётная запись ещё не подтверждена.</string>
|
||||||
<string name="assistant_account_validated">Ваша учётная запись подтверждена.</string>
|
<string name="assistant_account_validated">Ваша учётная запись подтверждена.</string>
|
||||||
<string name="wizard_failed">Произошла ошибка, попробуйте повторить позже.</string>
|
<string name="assistant_error_bad_credentials">Неверное имя пользователя или пароль</string>
|
||||||
<string name="wizard_username_unavailable">Это имя пользователя уже использовано.</string>
|
<string name="wizard_failed">Произошла ошибка, повторите попытку позже.</string>
|
||||||
<string name="first_launch_no_login_password">Пожалуйста введите имя пользователя и пароль</string>
|
<string name="wizard_server_unavailable">Сервер недоступен, проверьте подключение к сети.</string>
|
||||||
|
<string name="wizard_username_unavailable">Это имя пользователя уже используется.</string>
|
||||||
|
<string name="wizard_username_incorrect">Неверное имя пользователя.</string>
|
||||||
|
<string name="wizard_email_incorrect">Неверный адрес эл. почты.</string>
|
||||||
|
<string name="wizard_password_incorrect">Неверный пароль</string>
|
||||||
|
<string name="wizard_passwords_unmatched">Пароли не совпадают.</string>
|
||||||
|
<string name="setup_confirm_username">Ваше имя пользователя будет %s.\r\n\r\nОно может отличаться от введённого для соответствия требованиям.\r\nВы согласны?</string>
|
||||||
|
<string name="first_launch_no_login_password">Пожалуйста, введите имя пользователя и пароль</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
|
<string name="address_bar_hint">Введите номер или адрес</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
<string name="no_call_history">В журнале нет вызовов</string>
|
||||||
|
<string name="no_missed_call_history">В журнале нет пропущенных вызовов</string>
|
||||||
|
<string name="delete_history_log">Вы действительно хотите удалить выбранный журнал вызовов?</string>
|
||||||
<string name="today">Сегодня</string>
|
<string name="today">Сегодня</string>
|
||||||
<string name="yesterday">Вчера</string>
|
<string name="yesterday">Вчера</string>
|
||||||
<!--Contacts-->
|
<!--Contacts-->
|
||||||
<string name="no_contact">Нет контакта в Вашей адресной книге.</string>
|
<string name="no_contact">В адресной книге нет контактов.</string>
|
||||||
<string name="no_sip_contact">Нет SIP контакта в Вашей адресной книге.</string>
|
<string name="no_sip_contact">В адресной книге нет SIP контактов.</string>
|
||||||
<string name="sip_address">адрес SIP</string>
|
<string name="delete_contacts">Вы действительно хотите удалить выбранные контакты?</string>
|
||||||
|
<string name="delete_contact">Вы действительно хотите удалить выбранный контакт?</string>
|
||||||
|
<string name="sip_address">Адрес SIP</string>
|
||||||
<string name="phone_number">Номер телефона</string>
|
<string name="phone_number">Номер телефона</string>
|
||||||
<string name="contact_first_name">Имя</string>
|
<string name="contact_first_name">Имя</string>
|
||||||
<string name="contact_last_name">Фамилия</string>
|
<string name="contact_last_name">Фамилия</string>
|
||||||
<!--Chat-->
|
<!--Chat-->
|
||||||
<string name="remote_composing">Remote is writing...</string>
|
<string name="no_chat_history">Нет разговоров</string>
|
||||||
|
<string name="delete_conversation">Вы действительно хотите удалить выбранный разговор?</string>
|
||||||
|
<string name="delete_message">Вы действительно хотите удалить выбранные сообщения?</string>
|
||||||
|
<string name="remote_composing">Собеседник пишет...</string>
|
||||||
<string name="share_picture_size_small">Маленький</string>
|
<string name="share_picture_size_small">Маленький</string>
|
||||||
<string name="share_picture_size_medium">Средний</string>
|
<string name="share_picture_size_medium">Средний</string>
|
||||||
<string name="share_picture_size_large">Большой</string>
|
<string name="share_picture_size_large">Большой</string>
|
||||||
|
@ -54,69 +102,95 @@
|
||||||
<string name="image_picker_title">Выбрать источник</string>
|
<string name="image_picker_title">Выбрать источник</string>
|
||||||
<string name="image_saved">Картинка сохранена</string>
|
<string name="image_saved">Картинка сохранена</string>
|
||||||
<string name="image_not_saved">Ошибка, картинка не сохранена</string>
|
<string name="image_not_saved">Ошибка, картинка не сохранена</string>
|
||||||
<string name="wait">Please wait...</string>
|
<string name="wait">Пожалуйста, подождите...</string>
|
||||||
|
<string name="processing_image">Обработка изображения может занять несколько секунд в зависимости от размера файла</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">Зарегистрирован</string>
|
<string name="status_connected">Зарегистрирован</string>
|
||||||
|
<string name="status_not_connected">Не зарегистрирован</string>
|
||||||
<string name="status_in_progress">В процессе регистрации</string>
|
<string name="status_in_progress">В процессе регистрации</string>
|
||||||
<string name="status_error">Ошибка регистрации</string>
|
<string name="status_error">Ошибка регистрации</string>
|
||||||
|
<string name="voicemail_unread"> непрочитанных сообщений</string>
|
||||||
<!--Side Menu-->
|
<!--Side Menu-->
|
||||||
|
<string name="menu_assistant">Ассистент</string>
|
||||||
<string name="menu_settings">Настройки</string>
|
<string name="menu_settings">Настройки</string>
|
||||||
<string name="menu_about">О программе</string>
|
<string name="menu_about">О программе</string>
|
||||||
|
<string name="quit">Выход</string>
|
||||||
<!--Call-->
|
<!--Call-->
|
||||||
<string name="unknown_incoming_call_name">Неизвестнвй</string>
|
<string name="incoming_call">входящий вызов</string>
|
||||||
|
<string name="outgoing_call">исходящий вызов</string>
|
||||||
|
<string name="add_video_dialog">Ваш собеседник хотел бы включить видео</string>
|
||||||
|
<string name="no_current_call">Нет активного вызова</string>
|
||||||
|
<string name="call_paused_by_remote">Ваш собеседник поставил звонок на паузу</string>
|
||||||
|
<string name="couldnt_accept_call">Произошла ошибка во время принятия вызова</string>
|
||||||
|
<string name="zrtp_dialog">ZRTP токен %s\nВы должны принять только если у вас тот же токен, как у вашего собеседника</string>
|
||||||
|
<string name="unknown_incoming_call_name">Неизвестный</string>
|
||||||
<string name="call_stats_audio">Аудио</string>
|
<string name="call_stats_audio">Аудио</string>
|
||||||
<string name="call_stats_video">Видео</string>
|
<string name="call_stats_video">Видео</string>
|
||||||
<string name="call_stats_codec">Кодек:</string>
|
<string name="call_stats_codec">Кодек:</string>
|
||||||
<string name="call_stats_upload">Полоса пропускания загрузки:</string>
|
<string name="call_stats_upload">Полоса пропускания загрузки:</string>
|
||||||
<string name="call_stats_download">Полоса пропускания скачивания:</string>
|
<string name="call_stats_download">Полоса пропускания скачивания:</string>
|
||||||
<string name="call_stats_ice">Подключение ICE:</string>
|
<string name="call_stats_ice">Подключение ICE:</string>
|
||||||
<string name="call_stats_video_resolution">Video size:</string>
|
<string name="call_stats_video_resolution">Размер видео:</string>
|
||||||
<string name="call">Звонок</string>
|
<string name="call">Вызов</string>
|
||||||
<!--About-->
|
<!--About-->
|
||||||
|
<string name="menu_send_log">Отправить журнал</string>
|
||||||
|
<string name="menu_reset_log">Сброс журнала</string>
|
||||||
<!--Service-->
|
<!--Service-->
|
||||||
<string name="incall_notif_active">Идёт Аудио звонок</string>
|
<string name="incall_notif_active">Идёт аудиозвонок</string>
|
||||||
<string name="incall_notif_paused">Звонок на Паузе</string>
|
<string name="incall_notif_paused">Звонок на паузе</string>
|
||||||
<string name="incall_notif_video">Идёт Видео звонок</string>
|
<string name="incall_notif_video">Идёт видеозвонок</string>
|
||||||
<string name="notification_started">начат</string>
|
<string name="notification_started">начат</string>
|
||||||
<string name="unread_messages">%i unread messages</string>
|
<string name="unread_messages">%i непрочитанных сообщений</string>
|
||||||
<!--Errors-->
|
<!--Errors-->
|
||||||
<string name="skipable_error_service_not_ready">Внимание : сервис не готов</string>
|
<string name="skipable_error_service_not_ready">Внимание: сервис не готов</string>
|
||||||
<string name="error">Ошибка</string>
|
<string name="error">Ошибка</string>
|
||||||
<string name="error_call_declined">Звонок сброшен</string>
|
<string name="warning_wrong_destination_address">Невозможно установить адрес назначения из %s</string>
|
||||||
|
<string name="error_unknown">Неизвестная ошибка</string>
|
||||||
|
<string name="error_call_declined">Вызов сброшен</string>
|
||||||
<string name="error_user_not_found">Пользователь не найден</string>
|
<string name="error_user_not_found">Пользователь не найден</string>
|
||||||
<string name="error_incompatible_media">Несовместимые параметры потока</string>
|
<string name="error_incompatible_media">Несовместимые параметры потока</string>
|
||||||
|
<string name="error_low_bandwidth">У вашего собеседника низкая пропускная способность, видео не может быть запущено</string>
|
||||||
<string name="error_network_unreachable">Сеть недоступна</string>
|
<string name="error_network_unreachable">Сеть недоступна</string>
|
||||||
<string name="remote_provisioning_failure">Failed to download or apply remote provisioning profile...</string>
|
<string name="error_bad_credentials">Неверные учетные данные</string>
|
||||||
<string name="remote_provisioning_again_title">Remote provisioning</string>
|
<string name="error_unauthorized">Неавторизован</string>
|
||||||
|
<string name="error_io_error">Ошибка сети</string>
|
||||||
|
<string name="download_image_failed">Скачать не удалось. Пожалуйста, проверьте сетевое подключение или повторите попытку позже.</string>
|
||||||
|
<string name="remote_provisioning_failure">Не удалось скачать или применить профиль удалённого конфигурирования...</string>
|
||||||
|
<string name="remote_provisioning_again_title">Удаленное конфигурирование</string>
|
||||||
|
<string name="remote_provisioning_again_message">Вы действительно хотите изменить URI конфигурирования?</string>
|
||||||
<!--Account Settings-->
|
<!--Account Settings-->
|
||||||
<string name="pref_sipaccount">Имя SIP</string>
|
<string name="pref_sipaccount">SIP-аккаунт</string>
|
||||||
<string name="pref_manage_title">Manage</string>
|
<string name="pref_manage_title">Управление</string>
|
||||||
<string name="pref_disable_account">Деактивировать</string>
|
<string name="pref_disable_account">Отключить</string>
|
||||||
<string name="pref_proxy">Прокси</string>
|
<string name="pref_proxy">Прокси</string>
|
||||||
<string name="pref_domain">Сервер*</string>
|
<string name="pref_domain">Домен*</string>
|
||||||
<string name="pref_passwd">Пароль*</string>
|
<string name="pref_passwd">Пароль*</string>
|
||||||
<string name="pref_username">Имя пользователя*</string>
|
<string name="pref_username">Имя пользователя*</string>
|
||||||
<string name="pref_enable_outbound_proxy">Исходящий прокси</string>
|
<string name="pref_enable_outbound_proxy">Исходящий прокси</string>
|
||||||
<string name="pref_help_proxy">Имя сервера SIP прокси или адрес ip (необязательно)</string>
|
<string name="pref_help_proxy">Имя сервера SIP прокси или ip адрес (необязательно)</string>
|
||||||
<string name="pref_help_outbound_proxy">Отправить все звонки через SIP прокси</string>
|
<string name="pref_help_outbound_proxy">Отправлять все вызовы через SIP прокси</string>
|
||||||
<string name="pref_help_username">Например: john если Ваш адрес john@sip.example.org</string>
|
<string name="pref_help_username">Например: john если ваш адрес john@sip.example.org</string>
|
||||||
<string name="pref_help_domain">sip.example.org если Ваш адрес john@sip.example.org</string>
|
<string name="pref_help_domain">sip.example.org если ваш адрес john@sip.example.org</string>
|
||||||
<string name="pref_help_password">You have to re-enter your password if you edit the username and/or the domain</string>
|
<string name="pref_help_password">Вы должны повторно ввести ваш пароль, если вы измените имя пользователя и/или домен</string>
|
||||||
<string name="pref_expire_title">Истекает</string>
|
<string name="pref_expire_title">Истекает</string>
|
||||||
|
<string name="pref_avpf">AVPF</string>
|
||||||
|
<string name="pref_avpf_rr_interval"> AVPF регулярный интервал RTCP в секундах (от 1 до 5)</string>
|
||||||
<string name="pref_escape_plus">Заменить + на 00</string>
|
<string name="pref_escape_plus">Заменить + на 00</string>
|
||||||
<string name="pref_auth_userid">Auth userid</string>
|
<string name="pref_auth_userid">Имя для аутентификации</string>
|
||||||
<string name="pref_display_name">Display name</string>
|
<string name="pref_help_auth_userid">Введите имя для аутентификации (необязательно)</string>
|
||||||
|
<string name="pref_display_name">Отображаемое имя</string>
|
||||||
|
<string name="pref_help_display_name">Введите отображаемое имя (необязательно)</string>
|
||||||
<string name="pref_prefix">Префикс</string>
|
<string name="pref_prefix">Префикс</string>
|
||||||
<string name="pref_transport">Транспорт</string>
|
<string name="pref_transport">Транспорт</string>
|
||||||
<string name="pref_transport_udp">UDP</string>
|
<string name="pref_transport_udp">UDP</string>
|
||||||
<string name="pref_transport_tcp">TCP</string>
|
<string name="pref_transport_tcp">TCP</string>
|
||||||
<string name="pref_transport_tls">TLS</string>
|
<string name="pref_transport_tls">TLS</string>
|
||||||
<string name="pref_delete_account">Удалить учётную запись</string>
|
<string name="pref_delete_account">Удалить аккаунт</string>
|
||||||
<string name="pref_default_account">Использовать как основную</string>
|
<string name="pref_default_account">Использовать по умолчанию</string>
|
||||||
<!--Settings-->
|
<!--Settings-->
|
||||||
<string name="pref_sipaccounts">Учётные записи SIP</string>
|
<string name="pref_sipaccounts">SIP-аккаунты</string>
|
||||||
<string name="default_account_flag">Default account</string>
|
<string name="default_account_flag">Аккаунт по умолчанию</string>
|
||||||
<string name="pref_add_account">Добавить учётную запись</string>
|
<string name="pref_add_account">Добавить аккаунт</string>
|
||||||
<string name="pref_tunnel">Туннель</string>
|
<string name="pref_tunnel">Туннель</string>
|
||||||
<string name="pref_tunnel_host">Сервер</string>
|
<string name="pref_tunnel_host">Сервер</string>
|
||||||
<string name="pref_tunnel_port">Порт</string>
|
<string name="pref_tunnel_port">Порт</string>
|
||||||
|
@ -128,35 +202,47 @@
|
||||||
<item>всегда</item>
|
<item>всегда</item>
|
||||||
<item>авто</item>
|
<item>авто</item>
|
||||||
</string-array>
|
</string-array>
|
||||||
<string name="pref_none">Отсутствует</string>
|
<string name="pref_none">Нет</string>
|
||||||
<string name="pref_preferences_title">Настройки</string>
|
<string name="pref_preferences_title">Настройки</string>
|
||||||
<string name="pref_video_enable_title">Разрешить видео</string>
|
<string name="pref_video_enable_title">Включить видео</string>
|
||||||
<!--Audio settings-->
|
<!--Audio settings-->
|
||||||
<string name="pref_audio_title">Аудио</string>
|
<string name="pref_audio_title">Аудио</string>
|
||||||
<string name="pref_echo_cancellation">Шумоподавление</string>
|
<string name="pref_echo_cancellation">Эхоподавление</string>
|
||||||
<string name="pref_echo_cancellation_summary">Удаляет эхо, слышимое другой стороной</string>
|
<string name="pref_echo_cancellation_summary">Устраняет эхо, слышимое другой стороной</string>
|
||||||
<string name="ec_calibrating">Настраиваем…</string>
|
<string name="pref_echo_canceller_calibration">Калибровка эхоподавления</string>
|
||||||
|
<string name="ec_calibrating">Калибровка…</string>
|
||||||
|
<string name="ec_calibrated">Откалибровано в %s мс</string>
|
||||||
<string name="no_echo">Нет эха</string>
|
<string name="no_echo">Нет эха</string>
|
||||||
<string name="failed">неудавшийся</string>
|
<string name="failed">не удалось</string>
|
||||||
|
<string name="pref_adaptive_rate_control">Адаптивное управление скорость</string>
|
||||||
|
<string name="pref_codec_bitrate_limit">Ограничение битрейта кодека</string>
|
||||||
<string name="pref_codecs">Кодеки</string>
|
<string name="pref_codecs">Кодеки</string>
|
||||||
<!--Video settings-->
|
<!--Video settings-->
|
||||||
<string name="pref_video_title">Видео</string>
|
<string name="pref_video_title">Видео</string>
|
||||||
<string name="pref_video_use_front_camera_title">Использовать фронтальную камеру</string>
|
<string name="pref_video_use_front_camera_title">Использовать фронтальную камеру</string>
|
||||||
<string name="pref_video_initiate_call_with_video_title">Начинать видео звонки</string>
|
<string name="pref_video_initiate_call_with_video_title">Начинать видеозвонки</string>
|
||||||
<string name="pref_video_initiate_call_with_video">Всегда посылать видео запросы</string>
|
<string name="pref_video_initiate_call_with_video">Всегда посылать видео запросы</string>
|
||||||
<string name="pref_video_automatically_accept_video_title">Принимать входящие видео звонки</string>
|
<string name="pref_video_automatically_accept_video_title">Принимать входящие видеозвонки</string>
|
||||||
<string name="pref_video_automatically_accept_video">Всегда принимать видео запросы</string>
|
<string name="pref_video_automatically_accept_video">Всегда принимать видео запросы</string>
|
||||||
<string name="pref_preferred_video_size">Preferred video size</string>
|
<string name="pref_video_preset">Предустановка видео</string>
|
||||||
|
<string name="pref_preferred_video_size">Предпочтительный размер видео</string>
|
||||||
|
<string name="pref_preferred_fps">Предпочтительный FPS</string>
|
||||||
|
<string name="pref_bandwidth_limit">Ограничение пропускной способности в Кбит/с</string>
|
||||||
<string name="pref_video_codecs_title">Кодеки</string>
|
<string name="pref_video_codecs_title">Кодеки</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Звонок</string>
|
<string name="pref_call_title">Вызов</string>
|
||||||
<string name="pref_rfc2833_dtmf">Послать RFC2833 DTMFs</string>
|
<string name="pref_rfc2833_dtmf">Отправлять RFC2833 DTMFs</string>
|
||||||
<string name="pref_sipinfo_dtmf">Послать SIP INFO DTMFs</string>
|
<string name="pref_sipinfo_dtmf">Отправлять SIP INFO DTMFs</string>
|
||||||
|
<string name="pref_voice_mail">URI голосовой почты</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Чат</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Сервер обмена</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Сеть</string>
|
<string name="pref_network_title">Сеть</string>
|
||||||
|
<string name="pref_wifi_only">Использовать только WiFi</string>
|
||||||
<string name="pref_stun_server">Сервер Stun</string>
|
<string name="pref_stun_server">Сервер Stun</string>
|
||||||
<string name="pref_ice_enable">Разрешить ICE</string>
|
<string name="pref_ice_enable">Включить ICE</string>
|
||||||
<string name="pref_upnp_enable">Enable UPNP</string>
|
<string name="pref_upnp_enable">Включить UPNP</string>
|
||||||
<string name="pref_transport_use_random_ports">Использовать случайный порт</string>
|
<string name="pref_transport_use_random_ports">Использовать случайный порт</string>
|
||||||
<string name="pref_sip_port_title">SIP порт занят</string>
|
<string name="pref_sip_port_title">SIP порт занят</string>
|
||||||
<string name="pref_video_port_title">Видео порт или диапазон портов</string>
|
<string name="pref_video_port_title">Видео порт или диапазон портов</string>
|
||||||
|
@ -164,16 +250,17 @@
|
||||||
<string name="pref_video_port_description">Видео порт или диапазон портов (минимум-максимум)</string>
|
<string name="pref_video_port_description">Видео порт или диапазон портов (минимум-максимум)</string>
|
||||||
<string name="pref_audio_port_description">Аудио порт или диапазон портов (минимум-максимум)</string>
|
<string name="pref_audio_port_description">Аудио порт или диапазон портов (минимум-максимум)</string>
|
||||||
<string name="pref_media_encryption">Шифрование потока</string>
|
<string name="pref_media_encryption">Шифрование потока</string>
|
||||||
<string name="pref_push_notification">Разрешить серверные уведомления</string>
|
<string name="pref_push_notification">Включить push-уведомления</string>
|
||||||
|
<string name="pref_ipv6_title">Разрешить IPv6</string>
|
||||||
<!--Advanced settings-->
|
<!--Advanced settings-->
|
||||||
<string name="pref_advanced_title">Продвинутые</string>
|
<string name="pref_advanced_title">Дополнительно</string>
|
||||||
<string name="pref_debug">Отладка</string>
|
<string name="pref_debug">Отладка</string>
|
||||||
<string name="pref_background_mode">Фоновый режим</string>
|
<string name="pref_background_mode">Фоновый режим</string>
|
||||||
<string name="pref_animation_enable_title">Разрешить анимацию</string>
|
<string name="pref_animation_enable_title">Включить анимацию</string>
|
||||||
<string name="pref_autostart">Запускаться с системой</string>
|
<string name="pref_autostart">Запуск при загрузке</string>
|
||||||
<string name="pref_image_sharing_server_title">Общий сервер</string>
|
<string name="pref_incoming_call_timeout_title">Отклонение входящего вызова (в секундах)</string>
|
||||||
<string name="pref_remote_provisioning_title">Удалённое резервирование</string>
|
<string name="pref_remote_provisioning_title">Удалённое конфигурирование</string>
|
||||||
<string name="pref_primary_account_title">Основная учётная запись</string>
|
<string name="pref_primary_account_title">Основной аккаунт</string>
|
||||||
<string name="pref_display_name_title">Отображаемое имя</string>
|
<string name="pref_display_name_title">Отображаемое имя</string>
|
||||||
<string name="pref_user_name_title">Имя пользователя</string>
|
<string name="pref_user_name_title">Имя пользователя</string>
|
||||||
<!--Audio hack settings-->
|
<!--Audio hack settings-->
|
||||||
|
@ -184,22 +271,65 @@
|
||||||
<string name="pref_audio_hacks_use_galaxys_hack_title">Использовать аудио хак Galaxy S</string>
|
<string name="pref_audio_hacks_use_galaxys_hack_title">Использовать аудио хак Galaxy S</string>
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">Назад</string>
|
<string name="content_description_back">Назад</string>
|
||||||
<string name="content_description_dialer">Клавиатура</string>
|
<string name="content_description_dialer">Номеронабиратель</string>
|
||||||
|
<string name="content_description_menu">Меню</string>
|
||||||
|
<string name="content_description_toggle_micro">Переключить микрофон</string>
|
||||||
|
<string name="content_description_toggle_speaker">Переключить динамик</string>
|
||||||
<string name="content_description_decline">Отклонить</string>
|
<string name="content_description_decline">Отклонить</string>
|
||||||
<string name="content_description_hang_up">Положить трубку</string>
|
<string name="content_description_hang_up">Положить трубку</string>
|
||||||
<string name="content_description_accept">Accept</string>
|
<string name="content_description_accept">Принять</string>
|
||||||
<string name="content_description_edit">Редактировать</string>
|
<string name="content_description_edit">Редактировать</string>
|
||||||
<string name="content_description_add_contact">Кнопка добавить к контактам</string>
|
<string name="content_description_edit_list">Редактировать список</string>
|
||||||
|
<string name="content_description_add_contact">Добавить в контакты</string>
|
||||||
<string name="content_description_new_contact">Новый контакт</string>
|
<string name="content_description_new_contact">Новый контакт</string>
|
||||||
<string name="content_description_call">Звонок</string>
|
<string name="content_description_call">Вызов</string>
|
||||||
<string name="content_description_chat">Чат</string>
|
<string name="content_description_chat">Чат</string>
|
||||||
|
<string name="content_description_dialer_back">Вернуться к номеронабирателю</string>
|
||||||
|
<string name="content_description_contact_picture">Изображение контакта</string>
|
||||||
|
<string name="content_description_send_message">Отправить сообщение</string>
|
||||||
|
<string name="content_description_detail">Подробнее</string>
|
||||||
<string name="content_description_delete">Удалить</string>
|
<string name="content_description_delete">Удалить</string>
|
||||||
<string name="content_description_add">Добавить звонок</string>
|
<string name="content_description_add">Добавить вызов</string>
|
||||||
<string name="content_description_add_call">Добавить звонок</string>
|
<string name="content_description_new_discussion">Новая дискуссия</string>
|
||||||
|
<string name="content_description_search">Поиск</string>
|
||||||
|
<string name="content_description_search_contact">Поиск контакта</string>
|
||||||
|
<string name="content_description_all_contacts">Все контакты</string>
|
||||||
|
<string name="content_description_linphone_contacts">Контакты Linphone</string>
|
||||||
|
<string name="content_description_call_direction">Направление вызова</string>
|
||||||
|
<string name="content_description_all_calls">Все вызовы</string>
|
||||||
|
<string name="content_description_missed_calls">Пропущенные вызовы</string>
|
||||||
|
<string name="content_description_switch_video">Переключить видео</string>
|
||||||
|
<string name="content_description_add_call">Добавить вызов</string>
|
||||||
|
<string name="content_description_pause">Пауза</string>
|
||||||
|
<string name="content_description_numpad">Цифровая клавиатура</string>
|
||||||
|
<string name="content_description_history">Кнопка истории</string>
|
||||||
|
<string name="content_description_chat_button">Кнопка чата</string>
|
||||||
|
<string name="content_description_contacts">Кнопка контактов</string>
|
||||||
|
<string name="content_description_call_quality">Качество вызова</string>
|
||||||
|
<string name="content_description_encryption">Шифрование</string>
|
||||||
|
<string name="content_description_switch_camera">Переключить камеру</string>
|
||||||
|
<string name="content_description_cancel_button">Кнопка отмены</string>
|
||||||
|
<string name="content_description_message_status">Статус сообщения</string>
|
||||||
<string name="content_description_conference">Конференция</string>
|
<string name="content_description_conference">Конференция</string>
|
||||||
<string name="content_description_default_account">Default account</string>
|
<string name="content_description_username_field">Поле имени пользователя</string>
|
||||||
|
<string name="content_description_display_field">Поле отображаемого имени</string>
|
||||||
|
<string name="content_description_domain_field">Поле домена</string>
|
||||||
|
<string name="content_description_url_field">Поле удалённого конфигурирования</string>
|
||||||
|
<string name="content_description_confirm_password_field">Поле подтверждения пароля</string>
|
||||||
|
<string name="content_description_email_field">Поле электронной почты</string>
|
||||||
|
<string name="content_description_default_account">Аккаунт по умолчанию</string>
|
||||||
|
<string name="content_description_deselect_all">Отменить выбор</string>
|
||||||
|
<string name="content_description_select_all">Выбрать всё</string>
|
||||||
|
<string name="content_description_delete_selection">Удалить выбранное</string>
|
||||||
<string name="content_description_contact_first_name">Имя</string>
|
<string name="content_description_contact_first_name">Имя</string>
|
||||||
<string name="content_description_contact_last_name">Фамилия</string>
|
<string name="content_description_contact_last_name">Фамилия</string>
|
||||||
|
<string name="content_description_back_call">Вернуться к вызову</string>
|
||||||
|
<string name="content_description_send_file">Отправить файл</string>
|
||||||
|
<string name="content_description_message">Сообщение</string>
|
||||||
|
<string name="content_description_unread_chat_message">Непрочитанное сообщение чата</string>
|
||||||
<string name="content_description_transfer">Перевести</string>
|
<string name="content_description_transfer">Перевести</string>
|
||||||
|
<string name="content_description_earpiece">Наушник</string>
|
||||||
<string name="content_description_bluetooth">Bluetooth</string>
|
<string name="content_description_bluetooth">Bluetooth</string>
|
||||||
|
<string name="content_description_call_options">Параметры вызова</string>
|
||||||
|
<string name="content_description_exit_conference">Выйти из конференции</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
<string name="notification_title">Линфон</string>
|
<string name="notification_title">Линфон</string>
|
||||||
<string name="wait_dialog_text">Покрећем се</string>
|
<string name="wait_dialog_text">Покрећем се</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="sync_account_name">контакти линфона</string>
|
||||||
|
<string name="today_date_format">ЧЧ:мм</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Корисничко име</string>
|
<string name="username">Корисничко име</string>
|
||||||
<string name="display_name">Приказано име</string>
|
<string name="display_name">Приказано име</string>
|
||||||
|
@ -167,6 +169,9 @@
|
||||||
<string name="pref_call_title">Позови</string>
|
<string name="pref_call_title">Позови</string>
|
||||||
<string name="pref_rfc2833_dtmf">Пошаљи РФЦ2833 ДТМФ-е</string>
|
<string name="pref_rfc2833_dtmf">Пошаљи РФЦ2833 ДТМФ-е</string>
|
||||||
<string name="pref_sipinfo_dtmf">Пошаљи СИП ИНФО ДТФ-е</string>
|
<string name="pref_sipinfo_dtmf">Пошаљи СИП ИНФО ДТФ-е</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Ћаскање</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Сервер дељења</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Мрежа</string>
|
<string name="pref_network_title">Мрежа</string>
|
||||||
<string name="pref_stun_server">Стун сервер</string>
|
<string name="pref_stun_server">Стун сервер</string>
|
||||||
|
@ -186,7 +191,6 @@
|
||||||
<string name="pref_background_mode">Режим позадине</string>
|
<string name="pref_background_mode">Режим позадине</string>
|
||||||
<string name="pref_animation_enable_title">Укључи анимације</string>
|
<string name="pref_animation_enable_title">Укључи анимације</string>
|
||||||
<string name="pref_autostart">Покрени се приликом подизања система</string>
|
<string name="pref_autostart">Покрени се приликом подизања система</string>
|
||||||
<string name="pref_image_sharing_server_title">Сервер дељења</string>
|
|
||||||
<string name="pref_remote_provisioning_title">Прибављање удаљеног</string>
|
<string name="pref_remote_provisioning_title">Прибављање удаљеног</string>
|
||||||
<string name="pref_primary_account_title">Главни налог</string>
|
<string name="pref_primary_account_title">Главни налог</string>
|
||||||
<string name="pref_display_name_title">Приказано име</string>
|
<string name="pref_display_name_title">Приказано име</string>
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
<string name="notification_title">Linphone</string>
|
<string name="notification_title">Linphone</string>
|
||||||
<string name="wait_dialog_text">Startar upp</string>
|
<string name="wait_dialog_text">Startar upp</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="sync_account_name">linphone-kontakter</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Användarnamn</string>
|
<string name="username">Användarnamn</string>
|
||||||
<string name="display_name">Visningsnamn</string>
|
<string name="display_name">Visningsnamn</string>
|
||||||
|
@ -132,6 +133,9 @@
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Ring</string>
|
<string name="pref_call_title">Ring</string>
|
||||||
<string name="pref_rfc2833_dtmf">Skicka RFC2833 DTMF</string>
|
<string name="pref_rfc2833_dtmf">Skicka RFC2833 DTMF</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Chatt</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Delar server</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Nätverk</string>
|
<string name="pref_network_title">Nätverk</string>
|
||||||
<string name="pref_stun_server">Stun-server</string>
|
<string name="pref_stun_server">Stun-server</string>
|
||||||
|
@ -145,7 +149,6 @@
|
||||||
<string name="pref_background_mode">Bakgrundsläge</string>
|
<string name="pref_background_mode">Bakgrundsläge</string>
|
||||||
<string name="pref_animation_enable_title">Aktivera animeringar</string>
|
<string name="pref_animation_enable_title">Aktivera animeringar</string>
|
||||||
<string name="pref_autostart">Starta vid uppstart</string>
|
<string name="pref_autostart">Starta vid uppstart</string>
|
||||||
<string name="pref_image_sharing_server_title">Delar server</string>
|
|
||||||
<string name="pref_primary_account_title">Primärt konto</string>
|
<string name="pref_primary_account_title">Primärt konto</string>
|
||||||
<string name="pref_display_name_title">Visningsnamn</string>
|
<string name="pref_display_name_title">Visningsnamn</string>
|
||||||
<string name="pref_user_name_title">Användarnamn</string>
|
<string name="pref_user_name_title">Användarnamn</string>
|
||||||
|
|
|
@ -6,46 +6,95 @@
|
||||||
<string name="addressbook_label">Linphone</string>
|
<string name="addressbook_label">Linphone</string>
|
||||||
<string name="notification_title">Linphone</string>
|
<string name="notification_title">Linphone</string>
|
||||||
<string name="wait_dialog_text">Başlatılıyor</string>
|
<string name="wait_dialog_text">Başlatılıyor</string>
|
||||||
|
<string name="notification_registered">%s kayıtlı</string>
|
||||||
|
<string name="notification_register_failure">%s kaydedilemedi</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
|
<string name="sync_account_name">Linphone bağlantıları</string>
|
||||||
|
<string name="today_date_format">SS:dd</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">Kullanıcı adı</string>
|
<string name="username">Kullanıcı adı</string>
|
||||||
<string name="display_name">Görünen ad</string>
|
<string name="display_name">Görünen ad</string>
|
||||||
<string name="password">Parola</string>
|
<string name="password">Parola</string>
|
||||||
|
<string name="confirm_password">Parola doğrulama</string>
|
||||||
|
<string name="domain">Alan adı</string>
|
||||||
|
<string name="remote_provisioning_url">URL</string>
|
||||||
|
<string name="email">Eposta</string>
|
||||||
|
<string name="delete_text">Seçimlerinizi silmek istediğinizden emin misiniz?</string>
|
||||||
<string name="delete">Sil</string>
|
<string name="delete">Sil</string>
|
||||||
<string name="retry">Yeniden dene</string>
|
<string name="retry">Yeniden dene</string>
|
||||||
<string name="cancel">İptal</string>
|
<string name="cancel">İptal</string>
|
||||||
<string name="accept">Kabul et</string>
|
<string name="accept">Kabul et</string>
|
||||||
<string name="continue_text">Sürdürmek</string>
|
<string name="continue_text">Sürdür</string>
|
||||||
<string name="about">Hakkında</string>
|
<string name="about">Hakkında</string>
|
||||||
<string name="deny">Yoksay</string>
|
<string name="deny">Yoksay</string>
|
||||||
|
<string name="no_account">Yapılandırılmış hesap yok</string>
|
||||||
<string name="search">Arama</string>
|
<string name="search">Arama</string>
|
||||||
<string name="outgoing">Giden</string>
|
<string name="outgoing">Giden</string>
|
||||||
<string name="incoming">Gelen</string>
|
<string name="incoming">Gelen</string>
|
||||||
<string name="missed">Yanıtsız</string>
|
<string name="missed">Yanıtsız</string>
|
||||||
<string name="settings">Ayarlar</string>
|
<string name="settings">Ayarlar</string>
|
||||||
|
<string name="connect">Bağlantı</string>
|
||||||
<string name="decline">Reddet</string>
|
<string name="decline">Reddet</string>
|
||||||
<string name="conference">Çoklu görüşme</string>
|
<string name="conference">Çoklu görüşme</string>
|
||||||
<!--Launch screen-->
|
<!--Launch screen-->
|
||||||
|
<string name="app_description"><i>özgür</i> SIP istemcisi</string>
|
||||||
<!--Assistant-->
|
<!--Assistant-->
|
||||||
|
<string name="welcome">Hoş geldiniz</string>
|
||||||
|
<string name="assistant">Yardımcı</string>
|
||||||
|
<string name="assistant_create_account">Hesap Oluştur</string>
|
||||||
|
<string name="assistant_finish">Yapılandırmayı bitir</string>
|
||||||
|
<string name="assistant_validate_account">Hesabınız oluşturuldu.Hesabınız için geçerli posta adresinize bakın lütfen.Onu yapınca geri dön ve düğmeyi tıkla.</string>
|
||||||
<string name="assistant_welcome_desc">Bu yardımcı, aramalarınız için bir SİP hesabı kullanmanıza yardım edecek.</string>
|
<string name="assistant_welcome_desc">Bu yardımcı, aramalarınız için bir SİP hesabı kullanmanıza yardım edecek.</string>
|
||||||
|
<string name="assistant_linphone_login_desc">Linphone hesabınızın kullanıcı adı ve parolasını girin</string>
|
||||||
|
<string name="assistant_login_desc">SIP alan adı ile kullanıcı adınız ve parolanızı girin</string>
|
||||||
|
<string name="assistant_remote_provisioning_desc">Lütfen yetkilendirme adresinizi girin</string>
|
||||||
<string name="transport">Taşıma</string>
|
<string name="transport">Taşıma</string>
|
||||||
|
<string name="assistant_login_linphone">Linphone hesabı kullan</string>
|
||||||
|
<string name="assistant_login_generic">SIP hesabı kullan</string>
|
||||||
|
<string name="assistant_remote_provisioning">Uzaktan yapılandırma al</string>
|
||||||
|
<string name="assistant_create_account_part_1">1/2</string>
|
||||||
|
<string name="assistant_create_account_part_2">2/2</string>
|
||||||
|
<string name="assistant_display_name_optional">Görünen ad (isteğe bağlı)</string>
|
||||||
|
<string name="assistant_linphone_account">Linphone hesabı yapılandır</string>
|
||||||
|
<string name="assistant_generic_account">SIP hesabı yapılandır</string>
|
||||||
|
<string name="assistant_remote_provisioning_title">Uzaktan yapılandırma al</string>
|
||||||
|
<string name="assistant_fetch_apply">Al ve uygula</string>
|
||||||
|
<string name="assistant_login">Giriş</string>
|
||||||
|
<string name="assistant_ec_calibration">Yankı giderme ayarlaması sürüyor</string>
|
||||||
|
<string name="assistant_remote_provisioning_login">Giriş bilgilerinizi girin</string>
|
||||||
<string name="assistant_account_not_validated">Hesabınız henüz onaylanmadı.</string>
|
<string name="assistant_account_not_validated">Hesabınız henüz onaylanmadı.</string>
|
||||||
<string name="assistant_account_validated">Hesabınız onaylandı.</string>
|
<string name="assistant_account_validated">Hesabınız onaylandı.</string>
|
||||||
|
<string name="assistant_error_bad_credentials">Geçersiz kullanıcı adı ve parola</string>
|
||||||
<string name="wizard_failed">Bir hata oluştu,daha sonra tekrar deneyin.</string>
|
<string name="wizard_failed">Bir hata oluştu,daha sonra tekrar deneyin.</string>
|
||||||
|
<string name="wizard_server_unavailable">Sunucuya ulaşılamıyor,ağ bağlantınızı kontrol edin.</string>
|
||||||
<string name="wizard_username_unavailable">Bu kullanıcı adı zaten kullanılıyor.</string>
|
<string name="wizard_username_unavailable">Bu kullanıcı adı zaten kullanılıyor.</string>
|
||||||
|
<string name="wizard_username_incorrect">Kullanıcı adınız geçersiz.</string>
|
||||||
|
<string name="wizard_email_incorrect">Epostanız geçersiz.</string>
|
||||||
|
<string name="wizard_password_incorrect">Parolanız geçersiz.</string>
|
||||||
|
<string name="wizard_passwords_unmatched">Parolalar eşleşmiyor.</string>
|
||||||
|
<string name="setup_confirm_username">Kullanıcı adınız %s olacak.\r\n\r\nGereklilikleri sağlaması için sizin girdiğinizden farklı olabilir.\r\nKabul ediyor musunuz?</string>
|
||||||
<string name="first_launch_no_login_password">Lütfen giriş adınızı ve parolanızı girin</string>
|
<string name="first_launch_no_login_password">Lütfen giriş adınızı ve parolanızı girin</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
|
<string name="address_bar_hint">Numara veya adres girin</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
<string name="no_call_history">Çağrı geçmişiniz boş</string>
|
||||||
|
<string name="no_missed_call_history">Geçmişinizde yanıtsız çağrı yok</string>
|
||||||
|
<string name="delete_history_log">Seçilmiş çağrı kayıtlarını silmek ister misin?</string>
|
||||||
<string name="today">Bugün</string>
|
<string name="today">Bugün</string>
|
||||||
<string name="yesterday">Dün</string>
|
<string name="yesterday">Dün</string>
|
||||||
<!--Contacts-->
|
<!--Contacts-->
|
||||||
<string name="no_contact">Adres defterinizde kimse yok</string>
|
<string name="no_contact">Adres defterinizde kimse yok</string>
|
||||||
<string name="no_sip_contact">Adres defterinizde SİP bağlantısı yok</string>
|
<string name="no_sip_contact">Adres defterinizde SİP bağlantısı yok</string>
|
||||||
|
<string name="delete_contacts">Seçilen bağlantıları silmek ister misiniz?</string>
|
||||||
|
<string name="delete_contact">Seçilen bağlantıyı silmek ister misiniz?</string>
|
||||||
<string name="sip_address">SİP adresi</string>
|
<string name="sip_address">SİP adresi</string>
|
||||||
<string name="phone_number">Telefon numarası</string>
|
<string name="phone_number">Telefon numarası</string>
|
||||||
<string name="contact_first_name">Ad</string>
|
<string name="contact_first_name">Ad</string>
|
||||||
<string name="contact_last_name">Soyadı</string>
|
<string name="contact_last_name">Soyadı</string>
|
||||||
<!--Chat-->
|
<!--Chat-->
|
||||||
|
<string name="no_chat_history">görüşme yok</string>
|
||||||
|
<string name="delete_conversation">Seçilen görüşmeyi silmek ister misiniz?</string>
|
||||||
|
<string name="delete_message">Seçilen iletiyi silmek ister misiniz?</string>
|
||||||
<string name="remote_composing">Karşıdan yazılıyor...</string>
|
<string name="remote_composing">Karşıdan yazılıyor...</string>
|
||||||
<string name="share_picture_size_small">Küçük</string>
|
<string name="share_picture_size_small">Küçük</string>
|
||||||
<string name="share_picture_size_medium">Orta</string>
|
<string name="share_picture_size_medium">Orta</string>
|
||||||
|
@ -57,15 +106,26 @@
|
||||||
<string name="image_saved">Resim kaydedildi</string>
|
<string name="image_saved">Resim kaydedildi</string>
|
||||||
<string name="image_not_saved">Hata,resim kaydedilmedi</string>
|
<string name="image_not_saved">Hata,resim kaydedilmedi</string>
|
||||||
<string name="wait">Lütfen bekleyin...</string>
|
<string name="wait">Lütfen bekleyin...</string>
|
||||||
|
<string name="processing_image">Görüntü işleniyor, dosyanın boyutuna bağlı olarak bir kaç saniye sürebilir</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">Kayıtlı</string>
|
<string name="status_connected">Kayıtlı</string>
|
||||||
|
<string name="status_not_connected">Kayıtsız</string>
|
||||||
<string name="status_in_progress">Kayıt sürüyor</string>
|
<string name="status_in_progress">Kayıt sürüyor</string>
|
||||||
<string name="status_error">Kayıt başarısız</string>
|
<string name="status_error">Kayıt başarısız</string>
|
||||||
<string name="voicemail_unread">okunmamış iletiler</string>
|
<string name="voicemail_unread">okunmamış iletiler</string>
|
||||||
<!--Side Menu-->
|
<!--Side Menu-->
|
||||||
|
<string name="menu_assistant">Yardımcı</string>
|
||||||
<string name="menu_settings">Ayarlar</string>
|
<string name="menu_settings">Ayarlar</string>
|
||||||
<string name="menu_about">Hakkında</string>
|
<string name="menu_about">Hakkında</string>
|
||||||
|
<string name="quit">Çık</string>
|
||||||
<!--Call-->
|
<!--Call-->
|
||||||
|
<string name="incoming_call">Gelen çağrı</string>
|
||||||
|
<string name="outgoing_call">Giden çağrı</string>
|
||||||
|
<string name="add_video_dialog">Görüştüğünüz kişi görüntüyü açmak istiyor</string>
|
||||||
|
<string name="no_current_call">Etkin arama yok</string>
|
||||||
|
<string name="call_paused_by_remote">Görüştüğünüz kişi aramayı duraklattı</string>
|
||||||
|
<string name="couldnt_accept_call">Gelen aramanın kabulünde bir hata oluştu</string>
|
||||||
|
<string name="zrtp_dialog">ZRTP fişiniz %s\nBunu sadece görüştüğünüz kişinin fişiyle aynıysa kabul etmelisiniz</string>
|
||||||
<string name="unknown_incoming_call_name">Bilinmeyen</string>
|
<string name="unknown_incoming_call_name">Bilinmeyen</string>
|
||||||
<string name="call_stats_audio">Ses</string>
|
<string name="call_stats_audio">Ses</string>
|
||||||
<string name="call_stats_video">Görüntü</string>
|
<string name="call_stats_video">Görüntü</string>
|
||||||
|
@ -87,15 +147,20 @@
|
||||||
<!--Errors-->
|
<!--Errors-->
|
||||||
<string name="skipable_error_service_not_ready">Uyarı: hizmet hazır değil</string>
|
<string name="skipable_error_service_not_ready">Uyarı: hizmet hazır değil</string>
|
||||||
<string name="error">Hata</string>
|
<string name="error">Hata</string>
|
||||||
|
<string name="warning_wrong_destination_address">%s dan gidilecek adres inşa edilemiyor</string>
|
||||||
<string name="error_unknown">Tanımlanmayan hata</string>
|
<string name="error_unknown">Tanımlanmayan hata</string>
|
||||||
<string name="error_call_declined">Reddedilen çağrı</string>
|
<string name="error_call_declined">Reddedilen çağrı</string>
|
||||||
<string name="error_user_not_found">Kullanıcı bulunamadı</string>
|
<string name="error_user_not_found">Kullanıcı bulunamadı</string>
|
||||||
<string name="error_incompatible_media">Uyumsuz ortam değişkenleri</string>
|
<string name="error_incompatible_media">Uyumsuz ortam değişkenleri</string>
|
||||||
|
<string name="error_low_bandwidth">Görüştüğünüz kişinin bant genişliği düşük, görüntü başlatılamaz.</string>
|
||||||
<string name="error_network_unreachable">Ağa erişim yok</string>
|
<string name="error_network_unreachable">Ağa erişim yok</string>
|
||||||
<string name="error_bad_credentials">Referansı kötü</string>
|
<string name="error_bad_credentials">Referansı kötü</string>
|
||||||
<string name="error_unauthorized">Kimlik doğrulanmadı</string>
|
<string name="error_unauthorized">Kimlik doğrulanmadı</string>
|
||||||
<string name="error_io_error">Ağ hatası</string>
|
<string name="error_io_error">Ağ hatası</string>
|
||||||
|
<string name="download_image_failed">İndirme başarısız. Lütfen ağ bağlantınızı gözden geçirin ya da daha sonra tekrar deneyin.</string>
|
||||||
|
<string name="remote_provisioning_failure">Uzaktan yetkilendirme profili indirilirmesi ya da uygulanması başarısız...</string>
|
||||||
<string name="remote_provisioning_again_title">Uzaktan yetkilendirme</string>
|
<string name="remote_provisioning_again_title">Uzaktan yetkilendirme</string>
|
||||||
|
<string name="remote_provisioning_again_message">Uzaktan yetkilendirme adresinizi değiştirmek istiyor musunuz?</string>
|
||||||
<!--Account Settings-->
|
<!--Account Settings-->
|
||||||
<string name="pref_sipaccount">SİP Hesabı</string>
|
<string name="pref_sipaccount">SİP Hesabı</string>
|
||||||
<string name="pref_manage_title">Yönetme</string>
|
<string name="pref_manage_title">Yönetme</string>
|
||||||
|
@ -108,11 +173,16 @@
|
||||||
<string name="pref_help_proxy">SİP vekil sunucu makine adı veya ip adresi (isteğe bağlı)</string>
|
<string name="pref_help_proxy">SİP vekil sunucu makine adı veya ip adresi (isteğe bağlı)</string>
|
||||||
<string name="pref_help_outbound_proxy">Bütün çağrıları SİP vekil sunucuya yönlendir</string>
|
<string name="pref_help_outbound_proxy">Bütün çağrıları SİP vekil sunucuya yönlendir</string>
|
||||||
<string name="pref_help_username">Örneğin: John eğer sizin hesabınız john@sip.example.org ise</string>
|
<string name="pref_help_username">Örneğin: John eğer sizin hesabınız john@sip.example.org ise</string>
|
||||||
|
<string name="pref_help_domain">eğer hesabınız john@sip.example.org ise sip.example.org</string>
|
||||||
<string name="pref_help_password">Kullanıcı adı veya alan adı oluşturduysanız parolanızı tekrar girmeniz gerekir</string>
|
<string name="pref_help_password">Kullanıcı adı veya alan adı oluşturduysanız parolanızı tekrar girmeniz gerekir</string>
|
||||||
<string name="pref_expire_title">Süresi dolmak</string>
|
<string name="pref_expire_title">Süresi dolmak</string>
|
||||||
<string name="pref_avpf">AVPF</string>
|
<string name="pref_avpf">AVPF</string>
|
||||||
|
<string name="pref_avpf_rr_interval">AVPF düzenli RTCP aralığında ( 1 ile 5 saniye arasında)</string>
|
||||||
|
<string name="pref_escape_plus">+\'yı 00 ile değiştir</string>
|
||||||
<string name="pref_auth_userid">Kullanıcı kimliği yetkisi</string>
|
<string name="pref_auth_userid">Kullanıcı kimliği yetkisi</string>
|
||||||
|
<string name="pref_help_auth_userid">Kullanıcı kimliği doğrulumayı girin (isteğe bağlı)</string>
|
||||||
<string name="pref_display_name">Görünen ad</string>
|
<string name="pref_display_name">Görünen ad</string>
|
||||||
|
<string name="pref_help_display_name">Görünen adı girin (isteğe bağlı)</string>
|
||||||
<string name="pref_prefix">Önek</string>
|
<string name="pref_prefix">Önek</string>
|
||||||
<string name="pref_transport">Taşıma</string>
|
<string name="pref_transport">Taşıma</string>
|
||||||
<string name="pref_transport_udp">UDP</string>
|
<string name="pref_transport_udp">UDP</string>
|
||||||
|
@ -142,8 +212,10 @@
|
||||||
<string name="pref_audio_title">Ses</string>
|
<string name="pref_audio_title">Ses</string>
|
||||||
<string name="pref_echo_cancellation">Yankı giderme</string>
|
<string name="pref_echo_cancellation">Yankı giderme</string>
|
||||||
<string name="pref_echo_cancellation_summary">Karşıdan gelen yankılı sesi kaldır</string>
|
<string name="pref_echo_cancellation_summary">Karşıdan gelen yankılı sesi kaldır</string>
|
||||||
|
<string name="pref_echo_canceller_calibration">Yankı giderme ayarı</string>
|
||||||
<string name="ec_calibrating">Ayarlama...</string>
|
<string name="ec_calibrating">Ayarlama...</string>
|
||||||
<string name="no_echo">Eko yok</string>
|
<string name="ec_calibrated">%s ms\'de ayarlandı</string>
|
||||||
|
<string name="no_echo">Yankı yok</string>
|
||||||
<string name="failed">başarısız</string>
|
<string name="failed">başarısız</string>
|
||||||
<string name="pref_adaptive_rate_control">Uyarlanabilir oran denetimi</string>
|
<string name="pref_adaptive_rate_control">Uyarlanabilir oran denetimi</string>
|
||||||
<string name="pref_codec_bitrate_limit">Çözücü bitrate sınırı</string>
|
<string name="pref_codec_bitrate_limit">Çözücü bitrate sınırı</string>
|
||||||
|
@ -155,15 +227,22 @@
|
||||||
<string name="pref_video_initiate_call_with_video">Görüntü isteğini her zaman gönder</string>
|
<string name="pref_video_initiate_call_with_video">Görüntü isteğini her zaman gönder</string>
|
||||||
<string name="pref_video_automatically_accept_video_title">Gelen görüntü isteklerini kabul et</string>
|
<string name="pref_video_automatically_accept_video_title">Gelen görüntü isteklerini kabul et</string>
|
||||||
<string name="pref_video_automatically_accept_video">Görüntü isteklerini her zaman kabul et</string>
|
<string name="pref_video_automatically_accept_video">Görüntü isteklerini her zaman kabul et</string>
|
||||||
|
<string name="pref_video_preset">Görüntü ön ayarı</string>
|
||||||
<string name="pref_preferred_video_size">Yeğlenen görüntü boyutu</string>
|
<string name="pref_preferred_video_size">Yeğlenen görüntü boyutu</string>
|
||||||
|
<string name="pref_preferred_fps">Yeğlenen FPS</string>
|
||||||
<string name="pref_bandwidth_limit">kbits/s olarak bant genişliği</string>
|
<string name="pref_bandwidth_limit">kbits/s olarak bant genişliği</string>
|
||||||
<string name="pref_video_codecs_title">Çözücüler</string>
|
<string name="pref_video_codecs_title">Çözücüler</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">Çağrı</string>
|
<string name="pref_call_title">Çağrı</string>
|
||||||
<string name="pref_rfc2833_dtmf">RFC2833 DTMF\'yi gönder</string>
|
<string name="pref_rfc2833_dtmf">RFC2833 DTMF\'yi gönder</string>
|
||||||
<string name="pref_sipinfo_dtmf">SIP INFO DTMF\'yi gönder</string>
|
<string name="pref_sipinfo_dtmf">SIP INFO DTMF\'yi gönder</string>
|
||||||
|
<string name="pref_voice_mail">Sesli posta adresi</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">Sohbet</string>
|
||||||
|
<string name="pref_image_sharing_server_title">Sunucu paylaşımı</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">Ağ</string>
|
<string name="pref_network_title">Ağ</string>
|
||||||
|
<string name="pref_wifi_only">Sadece WİFİ kullan</string>
|
||||||
<string name="pref_stun_server">Stun sunucusu</string>
|
<string name="pref_stun_server">Stun sunucusu</string>
|
||||||
<string name="pref_ice_enable">İCE Etkin</string>
|
<string name="pref_ice_enable">İCE Etkin</string>
|
||||||
<string name="pref_upnp_enable">UPNP Etkin</string>
|
<string name="pref_upnp_enable">UPNP Etkin</string>
|
||||||
|
@ -175,13 +254,14 @@
|
||||||
<string name="pref_audio_port_description">Ses bağlantı noktası veya bağlantı noktası aralığı (minport-maxport)</string>
|
<string name="pref_audio_port_description">Ses bağlantı noktası veya bağlantı noktası aralığı (minport-maxport)</string>
|
||||||
<string name="pref_media_encryption">Ortam şifreleme</string>
|
<string name="pref_media_encryption">Ortam şifreleme</string>
|
||||||
<string name="pref_push_notification">Anlık bildirim etkin</string>
|
<string name="pref_push_notification">Anlık bildirim etkin</string>
|
||||||
|
<string name="pref_ipv6_title">IPv6 ya izin ver</string>
|
||||||
<!--Advanced settings-->
|
<!--Advanced settings-->
|
||||||
<string name="pref_advanced_title">Gelişmiş</string>
|
<string name="pref_advanced_title">Gelişmiş</string>
|
||||||
<string name="pref_debug">Hata ayıklama</string>
|
<string name="pref_debug">Hata ayıklama</string>
|
||||||
<string name="pref_background_mode">Artalan kipi</string>
|
<string name="pref_background_mode">Artalan kipi</string>
|
||||||
<string name="pref_animation_enable_title">Animasyonlar etkin</string>
|
<string name="pref_animation_enable_title">Animasyonlar etkin</string>
|
||||||
<string name="pref_autostart">Başlangıçta çalıştır</string>
|
<string name="pref_autostart">Başlangıçta çalıştır</string>
|
||||||
<string name="pref_image_sharing_server_title">Sunucu paylaşımı</string>
|
<string name="pref_incoming_call_timeout_title">Gelen çağrı kapandı (anında)</string>
|
||||||
<string name="pref_remote_provisioning_title">Uzaktan yetkilendirme</string>
|
<string name="pref_remote_provisioning_title">Uzaktan yetkilendirme</string>
|
||||||
<string name="pref_primary_account_title">Ana hesap</string>
|
<string name="pref_primary_account_title">Ana hesap</string>
|
||||||
<string name="pref_display_name_title">Görünen ad</string>
|
<string name="pref_display_name_title">Görünen ad</string>
|
||||||
|
@ -189,28 +269,36 @@
|
||||||
<!--Audio hack settings-->
|
<!--Audio hack settings-->
|
||||||
<string name="pref_audio_hacks_title">Ses kesme</string>
|
<string name="pref_audio_hacks_title">Ses kesme</string>
|
||||||
<string name="pref_audio_use_specific_mode_title">Özgün kesme kipi kullan</string>
|
<string name="pref_audio_use_specific_mode_title">Özgün kesme kipi kullan</string>
|
||||||
|
<string name="pref_audio_use_specific_mode_summary">0=NORMAL_KİP (öntanımlı), 2=GELEN_ÇAĞRI_KİPİ</string>
|
||||||
|
<string name="pref_audio_hacks_use_routing_api_title">API hack yönlendirmesini kullanın</string>
|
||||||
<string name="pref_audio_hacks_use_galaxys_hack_title">Galaxy S ses kesmeyi kullan</string>
|
<string name="pref_audio_hacks_use_galaxys_hack_title">Galaxy S ses kesmeyi kullan</string>
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">Geri</string>
|
<string name="content_description_back">Geri</string>
|
||||||
<string name="content_description_dialer">Telefon numarası çevirici</string>
|
<string name="content_description_dialer">Telefon numarası çevirici</string>
|
||||||
|
<string name="content_description_menu">Menü</string>
|
||||||
<string name="content_description_toggle_micro">Mikrofon düğmesi</string>
|
<string name="content_description_toggle_micro">Mikrofon düğmesi</string>
|
||||||
<string name="content_description_toggle_speaker">Hoparlör düğmesi</string>
|
<string name="content_description_toggle_speaker">Hoparlör düğmesi</string>
|
||||||
<string name="content_description_decline">Reddet</string>
|
<string name="content_description_decline">Reddet</string>
|
||||||
<string name="content_description_hang_up">Telefonu kapat</string>
|
<string name="content_description_hang_up">Telefonu kapat</string>
|
||||||
<string name="content_description_accept">Kabul et</string>
|
<string name="content_description_accept">Kabul et</string>
|
||||||
<string name="content_description_edit">Düzenle</string>
|
<string name="content_description_edit">Düzenle</string>
|
||||||
|
<string name="content_description_edit_list">Liste Düzenle</string>
|
||||||
|
<string name="content_description_valid">Geçerli</string>
|
||||||
<string name="content_description_add_contact">Bağlantılara ekle</string>
|
<string name="content_description_add_contact">Bağlantılara ekle</string>
|
||||||
<string name="content_description_new_contact">Yeni bağlantı</string>
|
<string name="content_description_new_contact">Yeni bağlantı</string>
|
||||||
<string name="content_description_call">Çağrı</string>
|
<string name="content_description_call">Çağrı</string>
|
||||||
<string name="content_description_backspace">Geri alma</string>
|
<string name="content_description_backspace">Geri alma</string>
|
||||||
<string name="content_description_chat">Sohbet</string>
|
<string name="content_description_chat">Sohbet</string>
|
||||||
<string name="content_description_dial_back">Geri aramalı</string>
|
<string name="content_description_dial_back">Geri aramalı</string>
|
||||||
|
<string name="content_description_dialer_back">Çeviriciye dön</string>
|
||||||
<string name="content_description_contact_picture">Kayıtlı kişinin resmi</string>
|
<string name="content_description_contact_picture">Kayıtlı kişinin resmi</string>
|
||||||
<string name="content_description_send_message">İleti gönder</string>
|
<string name="content_description_send_message">İleti gönder</string>
|
||||||
|
<string name="content_description_detail">Ayrıntılar</string>
|
||||||
<string name="content_description_delete">Sil</string>
|
<string name="content_description_delete">Sil</string>
|
||||||
<string name="content_description_add">Arama ekle</string>
|
<string name="content_description_add">Arama ekle</string>
|
||||||
<string name="content_description_new_discussion">Yeni tartışma</string>
|
<string name="content_description_new_discussion">Yeni tartışma</string>
|
||||||
<string name="content_description_search">Arama</string>
|
<string name="content_description_search">Arama</string>
|
||||||
|
<string name="content_description_search_contact">Bağlantı ara</string>
|
||||||
<string name="content_description_all_contacts">Tüm bağlantılar</string>
|
<string name="content_description_all_contacts">Tüm bağlantılar</string>
|
||||||
<string name="content_description_linphone_contacts">Linphone bağlantıları</string>
|
<string name="content_description_linphone_contacts">Linphone bağlantıları</string>
|
||||||
<string name="content_description_call_direction">Çağrı yönlendirme</string>
|
<string name="content_description_call_direction">Çağrı yönlendirme</string>
|
||||||
|
@ -229,9 +317,26 @@
|
||||||
<string name="content_description_cancel_button">İptal düğmesi</string>
|
<string name="content_description_cancel_button">İptal düğmesi</string>
|
||||||
<string name="content_description_message_status">İleti durumu</string>
|
<string name="content_description_message_status">İleti durumu</string>
|
||||||
<string name="content_description_conference">Çoklu görüşme</string>
|
<string name="content_description_conference">Çoklu görüşme</string>
|
||||||
|
<string name="content_description_username_field">Kullanıcı adı alanı</string>
|
||||||
|
<string name="content_description_display_field">Görünen ad alanı</string>
|
||||||
|
<string name="content_description_domain_field">Alan adı alanı</string>
|
||||||
|
<string name="content_description_url_field">Uzaktan yetkilendirme alanı</string>
|
||||||
|
<string name="content_description_confirm_password_field">Parola onaylama alanı</string>
|
||||||
|
<string name="content_description_email_field">Eposta alanı</string>
|
||||||
<string name="content_description_default_account">Öntanımlı hesap</string>
|
<string name="content_description_default_account">Öntanımlı hesap</string>
|
||||||
|
<string name="content_description_deselect_all">Tüm seçilenleri iptal et</string>
|
||||||
|
<string name="content_description_select_all">Tümünü seç</string>
|
||||||
|
<string name="content_description_delete_selection">Şeçimi Sil</string>
|
||||||
<string name="content_description_contact_first_name">Ad</string>
|
<string name="content_description_contact_first_name">Ad</string>
|
||||||
<string name="content_description_contact_last_name">Soyadı</string>
|
<string name="content_description_contact_last_name">Soyadı</string>
|
||||||
|
<string name="content_description_back_call">Aramaya dön</string>
|
||||||
|
<string name="content_description_send_file">Bir dosya gönder</string>
|
||||||
|
<string name="content_description_message">İleti</string>
|
||||||
|
<string name="content_description_unread_chat_message">Okunmamış sohbet iletisi</string>
|
||||||
<string name="content_description_transfer">Aktarma</string>
|
<string name="content_description_transfer">Aktarma</string>
|
||||||
|
<string name="content_description_earpiece">Kulaklık</string>
|
||||||
<string name="content_description_bluetooth">Bluetooth</string>
|
<string name="content_description_bluetooth">Bluetooth</string>
|
||||||
|
<string name="content_description_call_options">Çağrı seçenekleri</string>
|
||||||
|
<string name="content_description_audio_route">Ses yolu</string>
|
||||||
|
<string name="content_description_exit_conference">Görüşmeden çık</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -1,11 +1,23 @@
|
||||||
<?xml version='1.0' encoding='UTF-8'?>
|
<?xml version='1.0' encoding='UTF-8'?>
|
||||||
<resources>
|
<resources>
|
||||||
<!--Custom-->
|
<!--Custom-->
|
||||||
|
<string name="app_name">Linphone</string>
|
||||||
|
<string name="service_name">Linphone 服務</string>
|
||||||
|
<string name="addressbook_label">Linphone</string>
|
||||||
|
<string name="notification_title">Linphone</string>
|
||||||
|
<string name="wait_dialog_text">啟動中</string>
|
||||||
|
<string name="notification_registered">%s 已註冊</string>
|
||||||
|
<string name="notification_register_failure">%s 無法註冊</string>
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">使用者名稱</string>
|
<string name="username">使用者名稱</string>
|
||||||
<string name="display_name">顯示名稱</string>
|
<string name="display_name">顯示名稱</string>
|
||||||
<string name="password">密碼</string>
|
<string name="password">密碼</string>
|
||||||
|
<string name="confirm_password">密碼確認</string>
|
||||||
|
<string name="domain">網域</string>
|
||||||
|
<string name="remote_provisioning_url">網址</string>
|
||||||
|
<string name="email">電子郵件</string>
|
||||||
|
<string name="delete_text">你確定要刪除選取的項目嗎?</string>
|
||||||
<string name="delete">刪除</string>
|
<string name="delete">刪除</string>
|
||||||
<string name="retry">重試</string>
|
<string name="retry">重試</string>
|
||||||
<string name="cancel">取消</string>
|
<string name="cancel">取消</string>
|
||||||
|
@ -14,28 +26,65 @@
|
||||||
<string name="about">關於</string>
|
<string name="about">關於</string>
|
||||||
<string name="deny">拒絕</string>
|
<string name="deny">拒絕</string>
|
||||||
<string name="search">搜尋</string>
|
<string name="search">搜尋</string>
|
||||||
|
<string name="outgoing">撥出</string>
|
||||||
|
<string name="incoming">來電</string>
|
||||||
<string name="missed">未接來電</string>
|
<string name="missed">未接來電</string>
|
||||||
<string name="settings">設定</string>
|
<string name="settings">設定</string>
|
||||||
|
<string name="connect">連接</string>
|
||||||
<string name="decline">拒絕</string>
|
<string name="decline">拒絕</string>
|
||||||
<string name="conference">會議</string>
|
<string name="conference">會議</string>
|
||||||
<!--Launch screen-->
|
<!--Launch screen-->
|
||||||
|
<string name="app_description"><i>自由的</i> SIP 客戶端</string>
|
||||||
<!--Assistant-->
|
<!--Assistant-->
|
||||||
|
<string name="welcome">歡迎</string>
|
||||||
|
<string name="assistant">助理</string>
|
||||||
|
<string name="assistant_create_account">建立帳號</string>
|
||||||
|
<string name="assistant_finish">完成設定</string>
|
||||||
|
<string name="assistant_validate_account">你的帳號已經建立。請檢查你的郵件來驗證你的帳號。完成時,回到這裡並點擊按鈕。</string>
|
||||||
|
<string name="assistant_welcome_desc">這個助理將幫助你使用一個 SIP 帳號來通話。</string>
|
||||||
|
<string name="assistant_linphone_login_desc">輸入你 Linphone 帳號的使用者名稱和密碼</string>
|
||||||
<string name="transport">傳輸</string>
|
<string name="transport">傳輸</string>
|
||||||
|
<string name="assistant_login_linphone">使用 Linphone 帳號</string>
|
||||||
|
<string name="assistant_login_generic">使用 SIP 帳號</string>
|
||||||
|
<string name="assistant_create_account_part_1">1/2</string>
|
||||||
|
<string name="assistant_create_account_part_2">2/2</string>
|
||||||
|
<string name="assistant_display_name_optional">顯示名稱(選擇性)</string>
|
||||||
|
<string name="assistant_linphone_account">設定 Linphone 帳號</string>
|
||||||
|
<string name="assistant_generic_account">設定 SIP 帳號</string>
|
||||||
|
<string name="assistant_login">登入</string>
|
||||||
|
<string name="assistant_ec_calibration">正在進行回音消除器校正</string>
|
||||||
<string name="assistant_account_not_validated">你的帳號還沒被驗證。</string>
|
<string name="assistant_account_not_validated">你的帳號還沒被驗證。</string>
|
||||||
<string name="assistant_account_validated">你的帳號已經被驗證。</string>
|
<string name="assistant_account_validated">你的帳號已經被驗證。</string>
|
||||||
|
<string name="assistant_error_bad_credentials">不正確的使用者名稱或密碼</string>
|
||||||
<string name="wizard_failed">發生錯誤,請稍候再試。</string>
|
<string name="wizard_failed">發生錯誤,請稍候再試。</string>
|
||||||
|
<string name="wizard_server_unavailable">無法連接到伺服器,請確認你的網路連接。</string>
|
||||||
<string name="wizard_username_unavailable">這個使用者名稱已經被使用。</string>
|
<string name="wizard_username_unavailable">這個使用者名稱已經被使用。</string>
|
||||||
|
<string name="wizard_username_incorrect">你的使用者名稱無效。</string>
|
||||||
|
<string name="wizard_email_incorrect">你的電子郵件無效。</string>
|
||||||
|
<string name="wizard_password_incorrect">你的密碼無效。</string>
|
||||||
|
<string name="wizard_passwords_unmatched">密碼不相符</string>
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
|
<string name="address_bar_hint">輸入號碼或位址</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
|
<string name="no_call_history">歷史中沒有通話</string>
|
||||||
|
<string name="no_missed_call_history">歷史中沒有未接來電</string>
|
||||||
|
<string name="delete_history_log">你想要刪除選取的通話紀錄嗎?</string>
|
||||||
<string name="today">今天</string>
|
<string name="today">今天</string>
|
||||||
<string name="yesterday">昨天</string>
|
<string name="yesterday">昨天</string>
|
||||||
<!--Contacts-->
|
<!--Contacts-->
|
||||||
<string name="no_contact">通訊錄中沒有連絡人。</string>
|
<string name="no_contact">通訊錄中沒有連絡人。</string>
|
||||||
<string name="no_sip_contact">通訊錄中沒有 SIP 連絡人。</string>
|
<string name="no_sip_contact">通訊錄中沒有 SIP 連絡人。</string>
|
||||||
|
<string name="delete_contacts">你想要刪除選取的聯絡人嗎?</string>
|
||||||
|
<string name="delete_contact">你想要刪除選取的聯絡人嗎?</string>
|
||||||
|
<string name="sip_address">SIP 位址</string>
|
||||||
<string name="phone_number">電話號碼</string>
|
<string name="phone_number">電話號碼</string>
|
||||||
<string name="contact_first_name">名字</string>
|
<string name="contact_first_name">名字</string>
|
||||||
<string name="contact_last_name">姓氏</string>
|
<string name="contact_last_name">姓氏</string>
|
||||||
<!--Chat-->
|
<!--Chat-->
|
||||||
|
<string name="no_chat_history">沒有對話</string>
|
||||||
|
<string name="delete_conversation">你想要刪除選取的對話嗎?</string>
|
||||||
|
<string name="delete_message">你想要刪除選取的訊息嗎?</string>
|
||||||
|
<string name="remote_composing">對方正在輸入...</string>
|
||||||
<string name="share_picture_size_small">小</string>
|
<string name="share_picture_size_small">小</string>
|
||||||
<string name="share_picture_size_medium">中</string>
|
<string name="share_picture_size_medium">中</string>
|
||||||
<string name="share_picture_size_large">大</string>
|
<string name="share_picture_size_large">大</string>
|
||||||
|
@ -48,13 +97,21 @@
|
||||||
<string name="wait">請稍候...</string>
|
<string name="wait">請稍候...</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">已註冊</string>
|
<string name="status_connected">已註冊</string>
|
||||||
|
<string name="status_not_connected">未註冊</string>
|
||||||
<string name="status_in_progress">正在註冊</string>
|
<string name="status_in_progress">正在註冊</string>
|
||||||
<string name="status_error">註冊失敗</string>
|
<string name="status_error">註冊失敗</string>
|
||||||
<string name="voicemail_unread">未讀訊息</string>
|
<string name="voicemail_unread">未讀訊息</string>
|
||||||
<!--Side Menu-->
|
<!--Side Menu-->
|
||||||
|
<string name="menu_assistant">助理</string>
|
||||||
<string name="menu_settings">設定</string>
|
<string name="menu_settings">設定</string>
|
||||||
<string name="menu_about">關於</string>
|
<string name="menu_about">關於</string>
|
||||||
|
<string name="quit">退出</string>
|
||||||
<!--Call-->
|
<!--Call-->
|
||||||
|
<string name="incoming_call">來電</string>
|
||||||
|
<string name="outgoing_call">撥出電話</string>
|
||||||
|
<string name="add_video_dialog">對方想要啟用視訊</string>
|
||||||
|
<string name="call_paused_by_remote">對方暫停了通話</string>
|
||||||
|
<string name="couldnt_accept_call">接電話時發生錯誤</string>
|
||||||
<string name="unknown_incoming_call_name">未知</string>
|
<string name="unknown_incoming_call_name">未知</string>
|
||||||
<string name="call_stats_audio">音訊</string>
|
<string name="call_stats_audio">音訊</string>
|
||||||
<string name="call_stats_video">視訊</string>
|
<string name="call_stats_video">視訊</string>
|
||||||
|
@ -64,15 +121,20 @@
|
||||||
<string name="call_stats_video_resolution">視訊大小:</string>
|
<string name="call_stats_video_resolution">視訊大小:</string>
|
||||||
<string name="call">通話</string>
|
<string name="call">通話</string>
|
||||||
<!--About-->
|
<!--About-->
|
||||||
|
<string name="menu_send_log">傳送記錄</string>
|
||||||
|
<string name="menu_reset_log">重設記錄</string>
|
||||||
<!--Service-->
|
<!--Service-->
|
||||||
|
<string name="notification_started">已啟動</string>
|
||||||
<string name="unread_messages">%i 未讀訊息</string>
|
<string name="unread_messages">%i 未讀訊息</string>
|
||||||
<!--Errors-->
|
<!--Errors-->
|
||||||
<string name="skipable_error_service_not_ready">關閉</string>
|
<string name="skipable_error_service_not_ready">關閉</string>
|
||||||
<string name="error">錯誤</string>
|
<string name="error">錯誤</string>
|
||||||
<string name="error_unknown">未知錯誤</string>
|
<string name="error_unknown">未知錯誤</string>
|
||||||
<string name="error_user_not_found">找不到使用者</string>
|
<string name="error_user_not_found">找不到使用者</string>
|
||||||
|
<string name="error_low_bandwidth">對方的頻寬過低,視訊無法啟動</string>
|
||||||
<string name="error_network_unreachable">無法連接網路</string>
|
<string name="error_network_unreachable">無法連接網路</string>
|
||||||
<string name="error_io_error">網路錯誤</string>
|
<string name="error_io_error">網路錯誤</string>
|
||||||
|
<string name="download_image_failed">下載失敗。請檢查你的網路連接或稍候再試。</string>
|
||||||
<!--Account Settings-->
|
<!--Account Settings-->
|
||||||
<string name="pref_sipaccount">SIP 帳號</string>
|
<string name="pref_sipaccount">SIP 帳號</string>
|
||||||
<string name="pref_manage_title">管理</string>
|
<string name="pref_manage_title">管理</string>
|
||||||
|
@ -82,11 +144,14 @@
|
||||||
<string name="pref_username">使用者名稱*</string>
|
<string name="pref_username">使用者名稱*</string>
|
||||||
<string name="pref_escape_plus">以 00 取代 +</string>
|
<string name="pref_escape_plus">以 00 取代 +</string>
|
||||||
<string name="pref_display_name">顯示名稱</string>
|
<string name="pref_display_name">顯示名稱</string>
|
||||||
|
<string name="pref_help_display_name">輸入顯示名稱(選擇性)</string>
|
||||||
|
<string name="pref_prefix">前綴</string>
|
||||||
<string name="pref_transport">傳輸</string>
|
<string name="pref_transport">傳輸</string>
|
||||||
<string name="pref_transport_udp">UDP</string>
|
<string name="pref_transport_udp">UDP</string>
|
||||||
<string name="pref_transport_tcp">TCP</string>
|
<string name="pref_transport_tcp">TCP</string>
|
||||||
<string name="pref_transport_tls">TLS</string>
|
<string name="pref_transport_tls">TLS</string>
|
||||||
<string name="pref_delete_account">刪除這個帳號</string>
|
<string name="pref_delete_account">刪除這個帳號</string>
|
||||||
|
<string name="pref_default_account">設為預設值</string>
|
||||||
<!--Settings-->
|
<!--Settings-->
|
||||||
<string name="pref_sipaccounts">SIP 帳號</string>
|
<string name="pref_sipaccounts">SIP 帳號</string>
|
||||||
<string name="default_account_flag">預設帳號</string>
|
<string name="default_account_flag">預設帳號</string>
|
||||||
|
@ -109,22 +174,30 @@
|
||||||
<string name="pref_audio_title">音訊</string>
|
<string name="pref_audio_title">音訊</string>
|
||||||
<string name="pref_echo_cancellation">回音消除</string>
|
<string name="pref_echo_cancellation">回音消除</string>
|
||||||
<string name="pref_echo_cancellation_summary">移除另一端聽到的回音</string>
|
<string name="pref_echo_cancellation_summary">移除另一端聽到的回音</string>
|
||||||
|
<string name="pref_echo_canceller_calibration">回音消除器校正</string>
|
||||||
<string name="ec_calibrating">校正中...</string>
|
<string name="ec_calibrating">校正中...</string>
|
||||||
|
<string name="no_echo">沒有回音</string>
|
||||||
<string name="failed">失敗</string>
|
<string name="failed">失敗</string>
|
||||||
<string name="pref_codec_bitrate_limit">編碼位元率限制</string>
|
<string name="pref_codec_bitrate_limit">編碼位元率限制</string>
|
||||||
<string name="pref_codecs">編碼</string>
|
<string name="pref_codecs">編碼</string>
|
||||||
<!--Video settings-->
|
<!--Video settings-->
|
||||||
<string name="pref_video_title">視訊</string>
|
<string name="pref_video_title">視訊</string>
|
||||||
<string name="pref_video_use_front_camera_title">使用前攝影機</string>
|
<string name="pref_video_use_front_camera_title">使用前攝影機</string>
|
||||||
<string name="pref_video_initiate_call_with_video_title">開始視訊通話</string>
|
<string name="pref_video_initiate_call_with_video_title">發起視訊通話</string>
|
||||||
<string name="pref_video_initiate_call_with_video">總是傳送視訊要求</string>
|
<string name="pref_video_initiate_call_with_video">總是傳送視訊要求</string>
|
||||||
|
<string name="pref_video_automatically_accept_video_title">接受來電視訊要求</string>
|
||||||
<string name="pref_video_automatically_accept_video">總是接受視訊要求</string>
|
<string name="pref_video_automatically_accept_video">總是接受視訊要求</string>
|
||||||
|
<string name="pref_video_preset">視訊預設</string>
|
||||||
<string name="pref_preferred_video_size">偏好的視訊大小</string>
|
<string name="pref_preferred_video_size">偏好的視訊大小</string>
|
||||||
|
<string name="pref_preferred_fps">偏好的 FPS</string>
|
||||||
<string name="pref_video_codecs_title">編碼</string>
|
<string name="pref_video_codecs_title">編碼</string>
|
||||||
<!--Call settings-->
|
<!--Call settings-->
|
||||||
<string name="pref_call_title">通話</string>
|
<string name="pref_call_title">通話</string>
|
||||||
|
<!--Chat settings-->
|
||||||
|
<string name="pref_chat_title">聊天</string>
|
||||||
<!--Network settings-->
|
<!--Network settings-->
|
||||||
<string name="pref_network_title">網路</string>
|
<string name="pref_network_title">網路</string>
|
||||||
|
<string name="pref_wifi_only">只使用 WiFi</string>
|
||||||
<string name="pref_stun_server"> Stun 伺服器</string>
|
<string name="pref_stun_server"> Stun 伺服器</string>
|
||||||
<string name="pref_ice_enable">啟用 ICE</string>
|
<string name="pref_ice_enable">啟用 ICE</string>
|
||||||
<string name="pref_upnp_enable">啟用 UPNP</string>
|
<string name="pref_upnp_enable">啟用 UPNP</string>
|
||||||
|
@ -135,6 +208,8 @@
|
||||||
<string name="pref_video_port_description">視訊連接埠或連接埠範圍(最小連接埠-最大連接埠)</string>
|
<string name="pref_video_port_description">視訊連接埠或連接埠範圍(最小連接埠-最大連接埠)</string>
|
||||||
<string name="pref_audio_port_description">音訊連接埠或連接埠範圍(最小連接埠-最大連接埠)</string>
|
<string name="pref_audio_port_description">音訊連接埠或連接埠範圍(最小連接埠-最大連接埠)</string>
|
||||||
<string name="pref_media_encryption">媒體加密</string>
|
<string name="pref_media_encryption">媒體加密</string>
|
||||||
|
<string name="pref_push_notification">啟用推播通知</string>
|
||||||
|
<string name="pref_ipv6_title">允許 IPv6</string>
|
||||||
<!--Advanced settings-->
|
<!--Advanced settings-->
|
||||||
<string name="pref_advanced_title">進階</string>
|
<string name="pref_advanced_title">進階</string>
|
||||||
<string name="pref_debug">除錯</string>
|
<string name="pref_debug">除錯</string>
|
||||||
|
@ -148,20 +223,26 @@
|
||||||
<!--Content description-->
|
<!--Content description-->
|
||||||
<string name="content_description_back">返回</string>
|
<string name="content_description_back">返回</string>
|
||||||
<string name="content_description_dialer">撥號器</string>
|
<string name="content_description_dialer">撥號器</string>
|
||||||
|
<string name="content_description_menu">功能表</string>
|
||||||
<string name="content_description_decline">拒絕</string>
|
<string name="content_description_decline">拒絕</string>
|
||||||
<string name="content_description_hang_up">掛斷</string>
|
<string name="content_description_hang_up">掛斷</string>
|
||||||
<string name="content_description_accept">接受</string>
|
<string name="content_description_accept">接受</string>
|
||||||
<string name="content_description_edit">編輯</string>
|
<string name="content_description_edit">編輯</string>
|
||||||
|
<string name="content_description_edit_list">編輯清單</string>
|
||||||
|
<string name="content_description_valid">有效</string>
|
||||||
<string name="content_description_add_contact">加入到連絡人</string>
|
<string name="content_description_add_contact">加入到連絡人</string>
|
||||||
<string name="content_description_new_contact">新增聯絡人</string>
|
<string name="content_description_new_contact">新增聯絡人</string>
|
||||||
<string name="content_description_call">通話</string>
|
<string name="content_description_call">通話</string>
|
||||||
<string name="content_description_backspace">Backspace</string>
|
<string name="content_description_backspace">Backspace</string>
|
||||||
<string name="content_description_chat">聊天</string>
|
<string name="content_description_chat">聊天</string>
|
||||||
<string name="content_description_dial_back">回播</string>
|
<string name="content_description_dial_back">回播</string>
|
||||||
|
<string name="content_description_dialer_back">回到撥號器</string>
|
||||||
<string name="content_description_contact_picture">連絡人圖片</string>
|
<string name="content_description_contact_picture">連絡人圖片</string>
|
||||||
<string name="content_description_send_message">傳送訊息</string>
|
<string name="content_description_send_message">傳送訊息</string>
|
||||||
|
<string name="content_description_detail">詳細資料</string>
|
||||||
<string name="content_description_delete">刪除</string>
|
<string name="content_description_delete">刪除</string>
|
||||||
<string name="content_description_search">搜尋</string>
|
<string name="content_description_search">搜尋</string>
|
||||||
|
<string name="content_description_search_contact">搜尋聯絡人</string>
|
||||||
<string name="content_description_all_contacts">所有聯絡人</string>
|
<string name="content_description_all_contacts">所有聯絡人</string>
|
||||||
<string name="content_description_linphone_contacts">Linphone 聯絡人</string>
|
<string name="content_description_linphone_contacts">Linphone 聯絡人</string>
|
||||||
<string name="content_description_call_direction">通話方向</string>
|
<string name="content_description_call_direction">通話方向</string>
|
||||||
|
@ -169,6 +250,7 @@
|
||||||
<string name="content_description_missed_calls">未接來電</string>
|
<string name="content_description_missed_calls">未接來電</string>
|
||||||
<string name="content_description_switch_video">切換視訊</string>
|
<string name="content_description_switch_video">切換視訊</string>
|
||||||
<string name="content_description_pause">暫停</string>
|
<string name="content_description_pause">暫停</string>
|
||||||
|
<string name="content_description_numpad">數字鍵盤</string>
|
||||||
<string name="content_description_history">歷史按鈕</string>
|
<string name="content_description_history">歷史按鈕</string>
|
||||||
<string name="content_description_chat_button">聊天按鈕</string>
|
<string name="content_description_chat_button">聊天按鈕</string>
|
||||||
<string name="content_description_contacts">聯絡人按鈕</string>
|
<string name="content_description_contacts">聯絡人按鈕</string>
|
||||||
|
@ -178,9 +260,22 @@
|
||||||
<string name="content_description_cancel_button">取消按鈕</string>
|
<string name="content_description_cancel_button">取消按鈕</string>
|
||||||
<string name="content_description_message_status">訊息狀態</string>
|
<string name="content_description_message_status">訊息狀態</string>
|
||||||
<string name="content_description_conference">會議</string>
|
<string name="content_description_conference">會議</string>
|
||||||
|
<string name="content_description_username_field">使用者名稱欄位</string>
|
||||||
|
<string name="content_description_display_field">顯示名稱欄位</string>
|
||||||
|
<string name="content_description_domain_field">網域欄位</string>
|
||||||
|
<string name="content_description_confirm_password_field">確認密碼欄位</string>
|
||||||
|
<string name="content_description_email_field">電子郵件欄位</string>
|
||||||
<string name="content_description_default_account">預設帳號</string>
|
<string name="content_description_default_account">預設帳號</string>
|
||||||
|
<string name="content_description_deselect_all">取消全選</string>
|
||||||
|
<string name="content_description_select_all">全選</string>
|
||||||
|
<string name="content_description_delete_selection">刪除選取項目</string>
|
||||||
<string name="content_description_contact_first_name">名字</string>
|
<string name="content_description_contact_first_name">名字</string>
|
||||||
<string name="content_description_contact_last_name">姓氏</string>
|
<string name="content_description_contact_last_name">姓氏</string>
|
||||||
|
<string name="content_description_back_call">回到通話</string>
|
||||||
|
<string name="content_description_send_file">傳送檔案</string>
|
||||||
|
<string name="content_description_message">訊息</string>
|
||||||
|
<string name="content_description_unread_chat_message">未讀聊天訊息</string>
|
||||||
<string name="content_description_transfer">轉接</string>
|
<string name="content_description_transfer">轉接</string>
|
||||||
<string name="content_description_bluetooth">藍牙</string>
|
<string name="content_description_bluetooth">藍牙</string>
|
||||||
|
<string name="content_description_call_options">通話選項</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -24,6 +24,10 @@
|
||||||
<bool name="hide_camera_settings">false</bool>
|
<bool name="hide_camera_settings">false</bool>
|
||||||
<bool name="hide_wizard">false</bool>
|
<bool name="hide_wizard">false</bool>
|
||||||
|
|
||||||
|
<bool name="disable_chat">false</bool>
|
||||||
|
<bool name="disable_chat_message_notification">false</bool>
|
||||||
|
<bool name="disable_chat_send_file">false</bool>
|
||||||
|
|
||||||
<bool name="setup_account_validation_mandatory">false</bool>
|
<bool name="setup_account_validation_mandatory">false</bool>
|
||||||
<bool name="hide_linphone_accounts_wizard">false</bool>
|
<bool name="hide_linphone_accounts_wizard">false</bool>
|
||||||
<bool name="hide_generic_accounts_wizard">false</bool>
|
<bool name="hide_generic_accounts_wizard">false</bool>
|
||||||
|
@ -31,42 +35,26 @@
|
||||||
<bool name="allow_cancel_remote_provisioning_login_activity">true</bool>
|
<bool name="allow_cancel_remote_provisioning_login_activity">true</bool>
|
||||||
<bool name="hide_accounts">false</bool>
|
<bool name="hide_accounts">false</bool>
|
||||||
<bool name="display_account_wizard_at_first_start">true</bool>
|
<bool name="display_account_wizard_at_first_start">true</bool>
|
||||||
<bool name="use_linphone_server_ports">false</bool>
|
|
||||||
<bool name="allow_only_phone_numbers_in_wizard">false</bool>
|
<bool name="allow_only_phone_numbers_in_wizard">false</bool>
|
||||||
|
|
||||||
<bool name="enable_linphone_friends">false</bool>
|
|
||||||
<bool name="use_linphone_tag">true</bool>
|
<bool name="use_linphone_tag">true</bool>
|
||||||
<bool name="disable_options_in_call">false</bool>
|
|
||||||
|
|
||||||
<bool name="pre_fill_email_in_wizard">true</bool> <!-- Set the email field of the wizard with one of the gmail account registered on the device -->
|
<bool name="pre_fill_email_in_wizard">true</bool> <!-- Set the email field of the wizard with one of the gmail account registered on the device -->
|
||||||
|
|
||||||
<bool name="call_last_log_if_adress_is_empty">true</bool>
|
|
||||||
|
|
||||||
<bool name="allow_ringing_while_early_media">true</bool>
|
|
||||||
|
|
||||||
<bool name="disable_chat">false</bool>
|
|
||||||
<bool name="disable_chat_message_notification">false</bool>
|
|
||||||
|
|
||||||
<bool name="disable_chat_send_file">false</bool>
|
|
||||||
<bool name="auto_answer_calls">false</bool>
|
|
||||||
|
|
||||||
<bool name="allow_transfers">true</bool>
|
|
||||||
|
|
||||||
<bool name="forbid_self_call">false</bool>
|
<bool name="forbid_self_call">false</bool>
|
||||||
|
<bool name="allow_ringing_while_early_media">true</bool>
|
||||||
<bool name="disable_animations">false</bool>
|
<bool name="allow_transfers">true</bool>
|
||||||
|
<bool name="disable_options_in_call">false</bool>
|
||||||
|
|
||||||
<bool name="automatically_start_intercepted_outgoing_gsm_call">true</bool>
|
<bool name="automatically_start_intercepted_outgoing_gsm_call">true</bool>
|
||||||
<!-- This settings handle the behavior of the view waiting for the remote provisioning configuration to be done -->
|
<!-- This settings handle the behavior of the view waiting for the remote provisioning configuration to be done -->
|
||||||
<bool name="display_sms_remote_provisioning_activity">false</bool>
|
<bool name="display_sms_remote_provisioning_activity">false</bool>
|
||||||
<bool name="forbid_app_usage_until_remote_provisioning_completed">false</bool>
|
<bool name="forbid_app_usage_until_remote_provisioning_completed">false</bool>
|
||||||
<bool name="display_confirmation_popup_after_first_configuration">false</bool>
|
<bool name="display_confirmation_popup_after_first_configuration">false</bool>
|
||||||
<bool name="enable_log_collect">false</bool>
|
|
||||||
<bool name="disable_every_log">false</bool>
|
<bool name="disable_every_log">false</bool>
|
||||||
<bool name="disable_all_security_features_for_markets">false</bool> <!-- Disable TLS/SRTP/ZRTP -->
|
<bool name="disable_all_security_features_for_markets">false</bool> <!-- Disable TLS/SRTP/ZRTP -->
|
||||||
<bool name="disable_all_patented_codecs_for_markets">false</bool> <!-- Disable MPEG4/H264 -->
|
<bool name="disable_all_patented_codecs_for_markets">false</bool> <!-- Disable MPEG4/H264 -->
|
||||||
<string name="about_bugreport_email">linphone-android@belledonne-communications.com</string>
|
<string name="about_bugreport_email">linphone-android@belledonne-communications.com</string>
|
||||||
<bool name="use_linphonecore_ringing">false</bool>
|
|
||||||
|
|
||||||
<string name="temp_photo_name">linphone-android-photo-temp</string>
|
<string name="temp_photo_name">linphone-android-photo-temp</string>
|
||||||
<string name="temp_photo_name_with_date">linphone-android-photo-%s</string>
|
<string name="temp_photo_name_with_date">linphone-android-photo-%s</string>
|
||||||
|
@ -82,12 +70,9 @@
|
||||||
|
|
||||||
<bool name="setup_cancel_move_to_back">false</bool>
|
<bool name="setup_cancel_move_to_back">false</bool>
|
||||||
|
|
||||||
|
|
||||||
<bool name="enable_call_notification">true</bool>
|
<bool name="enable_call_notification">true</bool>
|
||||||
<bool name="kill_service_with_task_manager">true</bool>
|
<bool name="kill_service_with_task_manager">true</bool>
|
||||||
|
|
||||||
<bool name="hash_images_as_name_before_upload">true</bool>
|
|
||||||
|
|
||||||
<!-- Tutorial settings -->
|
<!-- Tutorial settings -->
|
||||||
<bool name="show_tutorials_instead_of_app">false</bool> <!-- Be careful ! Setting this to true prevent the app from working ! It will only display tutorial activities -->
|
<bool name="show_tutorials_instead_of_app">false</bool> <!-- Be careful ! Setting this to true prevent the app from working ! It will only display tutorial activities -->
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,7 @@
|
||||||
<string name="pref_codecs_key">pref_codecs_key</string>
|
<string name="pref_codecs_key">pref_codecs_key</string>
|
||||||
<string name="pref_stun_server_key">pref_stun_server_key</string>
|
<string name="pref_stun_server_key">pref_stun_server_key</string>
|
||||||
<string name="pref_ice_enable_key">pref_ice_enable_key</string>
|
<string name="pref_ice_enable_key">pref_ice_enable_key</string>
|
||||||
|
<string name="pref_turn_enable_key">pref_turn_enable_key</string>
|
||||||
<string name="pref_video_codec_vp8_key">pref_video_codec_vp8_key</string>
|
<string name="pref_video_codec_vp8_key">pref_video_codec_vp8_key</string>
|
||||||
<string name="pref_media_encryption_key">pref_media_encryption_key</string>
|
<string name="pref_media_encryption_key">pref_media_encryption_key</string>
|
||||||
<string name="pref_media_encryption_key_none">none</string>
|
<string name="pref_media_encryption_key_none">none</string>
|
||||||
|
@ -201,4 +202,6 @@
|
||||||
</string-array>
|
</string-array>
|
||||||
|
|
||||||
<string name="pref_use_lime_encryption_key">pref_use_lime_encryption_key</string>
|
<string name="pref_use_lime_encryption_key">pref_use_lime_encryption_key</string>
|
||||||
|
<string name="pref_device_ringtone_key">pref_device_ringtone_key</string>
|
||||||
|
<string name="pref_auto_answer_key">pref_auto_answer_key</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -110,6 +110,7 @@
|
||||||
<string name="phone_number">Phone number</string>
|
<string name="phone_number">Phone number</string>
|
||||||
<string name="contact_first_name">First name</string>
|
<string name="contact_first_name">First name</string>
|
||||||
<string name="contact_last_name">Last name</string>
|
<string name="contact_last_name">Last name</string>
|
||||||
|
<string name="contact_organization">Organization</string>
|
||||||
|
|
||||||
<!-- Chat -->
|
<!-- Chat -->
|
||||||
<string name="no_chat_history">No conversations</string>
|
<string name="no_chat_history">No conversations</string>
|
||||||
|
@ -270,6 +271,8 @@
|
||||||
|
|
||||||
<!-- Call settings -->
|
<!-- Call settings -->
|
||||||
<string name="pref_call_title">Call</string>
|
<string name="pref_call_title">Call</string>
|
||||||
|
<string name="pref_device_ringtone">Use device ringtone</string>
|
||||||
|
<string name="pref_auto_answer">Auto answer incoming calls</string>
|
||||||
<string name="pref_rfc2833_dtmf">Send RFC2833 DTMFs</string>
|
<string name="pref_rfc2833_dtmf">Send RFC2833 DTMFs</string>
|
||||||
<string name="pref_sipinfo_dtmf">Send SIP INFO DTMFs</string>
|
<string name="pref_sipinfo_dtmf">Send SIP INFO DTMFs</string>
|
||||||
<string name="pref_voice_mail">Voice mail URI</string>
|
<string name="pref_voice_mail">Voice mail URI</string>
|
||||||
|
@ -288,6 +291,7 @@
|
||||||
<string name="pref_wifi_only">Use WiFi only</string>
|
<string name="pref_wifi_only">Use WiFi only</string>
|
||||||
<string name="pref_stun_server">Stun server</string>
|
<string name="pref_stun_server">Stun server</string>
|
||||||
<string name="pref_ice_enable">Enable ICE</string>
|
<string name="pref_ice_enable">Enable ICE</string>
|
||||||
|
<string name="pref_turn_enable">Enable TURN</string>
|
||||||
<string name="pref_upnp_enable">Enable UPNP</string>
|
<string name="pref_upnp_enable">Enable UPNP</string>
|
||||||
<string name="pref_transport_use_random_ports">Use random ports</string>
|
<string name="pref_transport_use_random_ports">Use random ports</string>
|
||||||
<string name="pref_sip_port_title">SIP port to use</string>
|
<string name="pref_sip_port_title">SIP port to use</string>
|
||||||
|
@ -376,6 +380,7 @@
|
||||||
<string name="content_description_delete_selection">Delete selection</string>
|
<string name="content_description_delete_selection">Delete selection</string>
|
||||||
<string name="content_description_contact_first_name">First name</string>
|
<string name="content_description_contact_first_name">First name</string>
|
||||||
<string name="content_description_contact_last_name">Last name</string>
|
<string name="content_description_contact_last_name">Last name</string>
|
||||||
|
<string name="content_description_contact_organization">Organization</string>
|
||||||
<string name="content_description_back_call">Back to call</string>
|
<string name="content_description_back_call">Back to call</string>
|
||||||
<string name="content_description_send_file">Send a file</string>
|
<string name="content_description_send_file">Send a file</string>
|
||||||
<string name="content_description_message">Message</string>
|
<string name="content_description_message">Message</string>
|
||||||
|
|
|
@ -3,97 +3,113 @@
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_sipaccount"
|
android:title="@string/pref_sipaccount"
|
||||||
android:key="@string/pref_sipaccount_key">
|
android:key="@string/pref_sipaccount_key"
|
||||||
|
android:persistent="false">
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_username"
|
android:title="@string/pref_username"
|
||||||
|
android:inputType="text|textNoSuggestions"
|
||||||
android:dialogMessage="@string/pref_help_username"
|
android:dialogMessage="@string/pref_help_username"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_auth_userid"
|
android:title="@string/pref_auth_userid"
|
||||||
|
android:inputType="text|textNoSuggestions"
|
||||||
android:dialogMessage="@string/pref_help_auth_userid"
|
android:dialogMessage="@string/pref_help_auth_userid"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_passwd"
|
android:title="@string/pref_passwd"
|
||||||
android:dialogMessage="@string/pref_help_password"
|
android:dialogMessage="@string/pref_help_password"
|
||||||
android:persistent="true"/>
|
android:inputType="textPassword"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_domain"
|
android:title="@string/pref_domain"
|
||||||
android:dialogMessage="@string/pref_help_domain"
|
android:dialogMessage="@string/pref_help_domain"
|
||||||
android:persistent="true"/>
|
android:inputType="textUri"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_display_name"
|
android:title="@string/pref_display_name"
|
||||||
|
android:inputType="textPersonName"
|
||||||
android:dialogMessage="@string/pref_help_display_name"
|
android:dialogMessage="@string/pref_help_display_name"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_advanced_title"
|
android:title="@string/pref_advanced_title"
|
||||||
android:key="@string/pref_advanced_key">
|
android:key="@string/pref_advanced_key"
|
||||||
|
android:persistent="false">
|
||||||
|
|
||||||
<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:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_proxy"
|
android:title="@string/pref_proxy"
|
||||||
|
android:inputType="textUri"
|
||||||
android:summary="@string/pref_help_proxy"
|
android:summary="@string/pref_help_proxy"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_enable_outbound_proxy"
|
android:title="@string/pref_enable_outbound_proxy"
|
||||||
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="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_expire_title"
|
android:title="@string/pref_expire_title"
|
||||||
android:key="@string/pref_expire_key"
|
android:key="@string/pref_expire_key"
|
||||||
android:numeric="integer" />
|
android:numeric="integer"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_prefix"
|
android:title="@string/pref_prefix"
|
||||||
android:key="@string/pref_prefix_key"/>
|
android:key="@string/pref_prefix_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_avpf"
|
android:title="@string/pref_avpf"
|
||||||
android:key="@string/pref_avpf_key"/>
|
android:key="@string/pref_avpf_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_avpf_rr_interval"
|
android:title="@string/pref_avpf_rr_interval"
|
||||||
android:key="@string/pref_avpf_rr_interval_key"
|
android:key="@string/pref_avpf_rr_interval_key"
|
||||||
android:numeric="integer"/>
|
android:numeric="integer"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_escape_plus"
|
android:title="@string/pref_escape_plus"
|
||||||
android:key="@string/pref_escape_plus_key"/>
|
android:key="@string/pref_escape_plus_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_friendlist_subscribe"
|
android:title="@string/pref_friendlist_subscribe"
|
||||||
android:key="@string/pref_friendlist_subscribe_key"/>
|
android:key="@string/pref_friendlist_subscribe_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_manage_title"
|
android:title="@string/pref_manage_title"
|
||||||
android:key="@string/pref_manage_key">
|
android:key="@string/pref_manage_key"
|
||||||
|
android:persistent="false">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_disable_account"
|
android:title="@string/pref_disable_account"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_default_account"
|
android:title="@string/pref_default_account"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:title="@string/pref_delete_account"
|
android:title="@string/pref_delete_account"
|
||||||
android:persistent="true"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
|
|
@ -1,257 +1,366 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
|
<!-- DO NOT PUT A PreferenceCategory INSIDE ANOTHER ONE EVER ! -->
|
||||||
|
<!-- It will trigger [PreferencesListFragment] addPreferencesFromResource TargetInvocationException error -->
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_sipaccounts"
|
android:title="@string/pref_sipaccounts"
|
||||||
android:key="@string/pref_sipaccounts_key"/>
|
android:key="@string/pref_sipaccounts_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:title="@string/pref_add_account"
|
android:title="@string/pref_add_account"
|
||||||
android:key="@string/pref_add_account_key"/>
|
android:key="@string/pref_add_account_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<Preference
|
<Preference
|
||||||
android:title="@string/pref_in_app_store"
|
android:title="@string/pref_in_app_store"
|
||||||
android:key="@string/pref_in_app_store_key"/>
|
android:key="@string/pref_in_app_store_key"
|
||||||
|
android:persistent="false"/>
|
||||||
<PreferenceCategory
|
|
||||||
android:title="@string/pref_tunnel"
|
|
||||||
android:key="@string/pref_tunnel_key">
|
|
||||||
|
|
||||||
<EditTextPreference
|
|
||||||
android:title="@string/pref_tunnel_host"
|
|
||||||
android:key="@string/pref_tunnel_host_key"/>
|
|
||||||
|
|
||||||
<EditTextPreference
|
|
||||||
android:title="@string/pref_tunnel_port"
|
|
||||||
android:key="@string/pref_tunnel_port_key"
|
|
||||||
android:numeric="integer"/>
|
|
||||||
|
|
||||||
<ListPreference
|
|
||||||
android:title="@string/pref_tunnel_mode"
|
|
||||||
android:key="@string/pref_tunnel_mode_key"
|
|
||||||
android:entries="@array/tunnel_mode_entries"
|
|
||||||
android:entryValues="@array/tunnel_mode_entry_values"/>
|
|
||||||
|
|
||||||
</PreferenceCategory>
|
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_preferences_title">
|
android:title="@string/pref_preferences_title">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<PreferenceScreen
|
||||||
android:title="@string/pref_video_enable_title"
|
android:title="@string/pref_tunnel"
|
||||||
android:key="@string/pref_video_enable_key"/>
|
android:key="@string/pref_tunnel_key"
|
||||||
|
android:persistent="false">
|
||||||
|
|
||||||
|
<PreferenceCategory
|
||||||
|
android:title="@string/pref_tunnel">
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_tunnel_host"
|
||||||
|
android:key="@string/pref_tunnel_host_key"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_tunnel_port"
|
||||||
|
android:key="@string/pref_tunnel_port_key"
|
||||||
|
android:numeric="integer"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<ListPreference
|
||||||
|
android:title="@string/pref_tunnel_mode"
|
||||||
|
android:key="@string/pref_tunnel_mode_key"
|
||||||
|
android:entries="@array/tunnel_mode_entries"
|
||||||
|
android:entryValues="@array/tunnel_mode_entry_values"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_audio_title">
|
android:title="@string/pref_audio_title">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<PreferenceCategory
|
||||||
android:title="@string/pref_echo_cancellation"
|
android:title="@string/pref_audio_title">
|
||||||
android:key="@string/pref_echo_cancellation_key"
|
|
||||||
android:summary="@string/pref_echo_cancellation_summary"/>
|
|
||||||
|
|
||||||
<Preference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_echo_canceller_calibration"
|
android:title="@string/pref_echo_cancellation"
|
||||||
android:key="@string/pref_echo_canceller_calibration_key"/>
|
android:key="@string/pref_echo_cancellation_key"
|
||||||
|
android:summary="@string/pref_echo_cancellation_summary"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<Preference
|
||||||
android:title="@string/pref_adaptive_rate_control"
|
android:title="@string/pref_echo_canceller_calibration"
|
||||||
android:key="@string/pref_adaptive_rate_control_key" />
|
android:key="@string/pref_echo_canceller_calibration_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<ListPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_codec_bitrate_limit"
|
android:title="@string/pref_adaptive_rate_control"
|
||||||
android:key="@string/pref_codec_bitrate_limit_key"
|
android:key="@string/pref_adaptive_rate_control_key"
|
||||||
android:entries="@array/limit_bitrate_entries"
|
android:persistent="false"/>
|
||||||
android:entryValues="@array/limit_bitrate_entry_values" />
|
|
||||||
|
<ListPreference
|
||||||
|
android:title="@string/pref_codec_bitrate_limit"
|
||||||
|
android:key="@string/pref_codec_bitrate_limit_key"
|
||||||
|
android:entries="@array/limit_bitrate_entries"
|
||||||
|
android:entryValues="@array/limit_bitrate_entry_values"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_codecs"
|
android:title="@string/pref_codecs"
|
||||||
android:key="@string/pref_codecs_key"/>
|
android:key="@string/pref_codecs_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_video_title"
|
android:title="@string/pref_video_title"
|
||||||
android:key="@string/pref_video_key"
|
android:key="@string/pref_video_key"
|
||||||
android:dependency="@string/pref_video_enable_key"
|
android:persistent="false">
|
||||||
android:shouldDisableView="true">
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<PreferenceCategory
|
||||||
android:title="@string/pref_video_use_front_camera_title"
|
android:title="@string/pref_video_title">
|
||||||
android:key="@string/pref_video_use_front_camera_key"
|
|
||||||
android:dependency="@string/pref_video_enable_key"
|
|
||||||
android:layout="@layout/hidden"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_video_initiate_call_with_video_title"
|
android:title="@string/pref_video_enable_title"
|
||||||
android:key="@string/pref_video_initiate_call_with_video_key"
|
android:key="@string/pref_video_enable_key"
|
||||||
android:summary="@string/pref_video_initiate_call_with_video"
|
android:persistent="false"/>
|
||||||
android:dependency="@string/pref_video_enable_key"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_video_automatically_accept_video_title"
|
android:title="@string/pref_video_use_front_camera_title"
|
||||||
android:key="@string/pref_video_automatically_accept_video_key"
|
android:key="@string/pref_video_use_front_camera_key"
|
||||||
android:summary="@string/pref_video_automatically_accept_video"
|
android:dependency="@string/pref_video_enable_key"
|
||||||
android:dependency="@string/pref_video_enable_key"/>
|
android:layout="@layout/hidden"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<ListPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_video_preset"
|
android:title="@string/pref_video_initiate_call_with_video_title"
|
||||||
android:key="@string/pref_video_preset_key"
|
android:key="@string/pref_video_initiate_call_with_video_key"
|
||||||
android:entries="@array/video_preset_entries"
|
android:summary="@string/pref_video_initiate_call_with_video"
|
||||||
android:entryValues="@array/video_preset_entries" />
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<ListPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_preferred_video_size"
|
android:title="@string/pref_video_automatically_accept_video_title"
|
||||||
android:key="@string/pref_preferred_video_size_key"/>
|
android:key="@string/pref_video_automatically_accept_video_key"
|
||||||
|
android:summary="@string/pref_video_automatically_accept_video"
|
||||||
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:title="@string/pref_preferred_fps"
|
android:title="@string/pref_video_preset"
|
||||||
android:key="@string/pref_preferred_video_fps_key"/>
|
android:key="@string/pref_video_preset_key"
|
||||||
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:shouldDisableView="true"
|
||||||
|
android:entries="@array/video_preset_entries"
|
||||||
|
android:entryValues="@array/video_preset_entries"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<ListPreference
|
||||||
android:title="@string/pref_bandwidth_limit"
|
android:title="@string/pref_preferred_video_size"
|
||||||
android:key="@string/pref_bandwidth_limit_key"
|
android:key="@string/pref_preferred_video_size_key"
|
||||||
android:numeric="integer" />
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:shouldDisableView="true"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<ListPreference
|
||||||
android:title="@string/pref_overlay"
|
android:title="@string/pref_preferred_fps"
|
||||||
android:key="@string/pref_overlay_key"
|
android:key="@string/pref_preferred_video_fps_key"
|
||||||
android:summary="@string/pref_overlay_summary"/>
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:shouldDisableView="true"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_bandwidth_limit"
|
||||||
|
android:key="@string/pref_bandwidth_limit_key"
|
||||||
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:shouldDisableView="true"
|
||||||
|
android:numeric="integer"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:title="@string/pref_overlay"
|
||||||
|
android:key="@string/pref_overlay_key"
|
||||||
|
android:dependency="@string/pref_video_enable_key"
|
||||||
|
android:shouldDisableView="true"
|
||||||
|
android:summary="@string/pref_overlay_summary"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<PreferenceCategory
|
<PreferenceCategory
|
||||||
android:title="@string/pref_video_codecs_title"
|
android:title="@string/pref_video_codecs_title"
|
||||||
android:key="@string/pref_video_codecs_key"
|
android:key="@string/pref_video_codecs_key"
|
||||||
android:dependency="@string/pref_video_enable_key"
|
android:dependency="@string/pref_video_enable_key"
|
||||||
android:shouldDisableView="true"/>
|
android:shouldDisableView="true"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_call_title">
|
android:title="@string/pref_call_title">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<PreferenceCategory
|
||||||
android:title="@string/pref_sipinfo_dtmf"
|
android:title="@string/pref_call_title">
|
||||||
android:key="@string/pref_sipinfo_dtmf_key"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_rfc2833_dtmf"
|
android:title="@string/pref_device_ringtone"
|
||||||
android:key="@string/pref_rfc2833_dtmf_key"/>
|
android:key="@string/pref_device_ringtone_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<ListPreference
|
||||||
android:title="@string/pref_voice_mail"
|
android:title="@string/pref_media_encryption"
|
||||||
android:key="@string/pref_voice_mail_key"/>
|
android:key="@string/pref_media_encryption_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:title="@string/pref_sipinfo_dtmf"
|
||||||
|
android:key="@string/pref_sipinfo_dtmf_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:title="@string/pref_rfc2833_dtmf"
|
||||||
|
android:key="@string/pref_rfc2833_dtmf_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:title="@string/pref_auto_answer"
|
||||||
|
android:key="@string/pref_auto_answer_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_voice_mail"
|
||||||
|
android:key="@string/pref_voice_mail_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_chat_title">
|
android:title="@string/pref_chat_title">
|
||||||
|
|
||||||
<EditTextPreference
|
<PreferenceCategory
|
||||||
android:title="@string/pref_image_sharing_server_title"
|
android:title="@string/pref_chat_title">
|
||||||
android:key="@string/pref_image_sharing_server_key"
|
|
||||||
android:summary="@string/pref_image_sharing_server_desc"/>
|
|
||||||
|
|
||||||
<ListPreference
|
<ListPreference
|
||||||
android:title="@string/pref_use_lime_encryption"
|
android:title="@string/pref_use_lime_encryption"
|
||||||
android:key="@string/pref_use_lime_encryption_key"/>
|
android:key="@string/pref_use_lime_encryption_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<EditTextPreference
|
||||||
|
android:title="@string/pref_image_sharing_server_title"
|
||||||
|
android:key="@string/pref_image_sharing_server_key"
|
||||||
|
android:summary="@string/pref_image_sharing_server_desc"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_network_title">
|
android:title="@string/pref_network_title">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<PreferenceCategory
|
||||||
android:title="@string/pref_wifi_only"
|
android:title="@string/pref_network_title">
|
||||||
android:key="@string/pref_wifi_only_key"/>
|
|
||||||
|
|
||||||
<EditTextPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_stun_server"
|
android:title="@string/pref_wifi_only"
|
||||||
android:key="@string/pref_stun_server_key"/>
|
android:key="@string/pref_wifi_only_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_ice_enable"
|
android:title="@string/pref_stun_server"
|
||||||
android:key="@string/pref_ice_enable_key"/>
|
android:key="@string/pref_stun_server_key"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_upnp_enable"
|
android:title="@string/pref_ice_enable"
|
||||||
android:key="@string/pref_upnp_enable_key"/>
|
android:key="@string/pref_ice_enable_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_transport_use_random_ports"
|
android:title="@string/pref_turn_enable"
|
||||||
android:key="@string/pref_transport_use_random_ports_key"/>
|
android:key="@string/pref_turn_enable_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_sip_port_title"
|
android:title="@string/pref_upnp_enable"
|
||||||
android:key="@string/pref_sip_port_key"
|
android:key="@string/pref_upnp_enable_key"
|
||||||
android:numeric="integer"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_audio_port_title"
|
android:title="@string/pref_transport_use_random_ports"
|
||||||
android:key="@string/pref_audio_port_key"
|
android:key="@string/pref_transport_use_random_ports_key"
|
||||||
android:summary="@string/pref_audio_port_description"
|
android:persistent="false"/>
|
||||||
android:layout="@layout/hidden"/>
|
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_video_port_title"
|
android:title="@string/pref_sip_port_title"
|
||||||
android:key="@string/pref_video_port_key"
|
android:key="@string/pref_sip_port_key"
|
||||||
android:summary="@string/pref_video_port_description"
|
android:numeric="integer"
|
||||||
android:layout="@layout/hidden"/>
|
android:persistent="false"/>
|
||||||
|
|
||||||
<ListPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_media_encryption"
|
android:title="@string/pref_audio_port_title"
|
||||||
android:key="@string/pref_media_encryption_key"/>
|
android:key="@string/pref_audio_port_key"
|
||||||
|
android:summary="@string/pref_audio_port_description"
|
||||||
|
android:layout="@layout/hidden"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_push_notification"
|
android:title="@string/pref_video_port_title"
|
||||||
android:key="@string/pref_push_notification_key"/>
|
android:key="@string/pref_video_port_key"
|
||||||
|
android:summary="@string/pref_video_port_description"
|
||||||
|
android:layout="@layout/hidden"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_ipv6_title"
|
android:title="@string/pref_push_notification"
|
||||||
android:key="@string/pref_ipv6_key"/>
|
android:key="@string/pref_push_notification_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
<CheckBoxPreference
|
||||||
|
android:title="@string/pref_ipv6_title"
|
||||||
|
android:key="@string/pref_ipv6_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
<PreferenceScreen
|
<PreferenceScreen
|
||||||
android:title="@string/pref_advanced_title">
|
android:title="@string/pref_advanced_title">
|
||||||
|
|
||||||
<CheckBoxPreference
|
<PreferenceCategory
|
||||||
android:title="@string/pref_debug"
|
android:title="@string/pref_advanced_title">
|
||||||
android:key="@string/pref_debug_key"/>
|
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_background_mode"
|
android:title="@string/pref_debug"
|
||||||
android:key="@string/pref_background_mode_key"/>
|
android:key="@string/pref_debug_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_service_notification"
|
android:title="@string/pref_background_mode"
|
||||||
android:key="@string/pref_service_notification_key"/>
|
android:key="@string/pref_background_mode_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
android:title="@string/pref_animation_enable_title"
|
android:title="@string/pref_service_notification"
|
||||||
android:key="@string/pref_animation_enable_key"/>
|
android:key="@string/pref_service_notification_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<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:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_incoming_call_timeout_title"
|
android:title="@string/pref_incoming_call_timeout_title"
|
||||||
android:key="@string/pref_incoming_call_timeout_key"
|
android:key="@string/pref_incoming_call_timeout_key"
|
||||||
android:layout="@layout/hidden"/>
|
android:layout="@layout/hidden"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_remote_provisioning_title"
|
android:title="@string/pref_remote_provisioning_title"
|
||||||
android:key="@string/pref_remote_provisioning_key"/>
|
android:key="@string/pref_remote_provisioning_key"
|
||||||
|
android:inputType="textUri"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
|
</PreferenceCategory>
|
||||||
|
|
||||||
<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:key="@string/pref_display_name_key"/>
|
android:key="@string/pref_display_name_key"
|
||||||
|
android:inputType="textPersonName"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
android:title="@string/pref_user_name_title"
|
android:title="@string/pref_user_name_title"
|
||||||
android:key="@string/pref_user_name_key"/>
|
android:key="@string/pref_user_name_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
@ -261,17 +370,20 @@
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
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"/>
|
android:key="@string/pref_audio_hacks_use_routing_api_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<CheckBoxPreference
|
<CheckBoxPreference
|
||||||
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"/>
|
android:key="@string/pref_audio_hacks_use_galaxys_hack_key"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
<EditTextPreference
|
<EditTextPreference
|
||||||
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: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:numeric="integer" />
|
android:numeric="integer"
|
||||||
|
android:persistent="false"/>
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|
||||||
|
|
|
@ -23,7 +23,6 @@ import org.linphone.core.LinphoneCore.LogCollectionUploadState;
|
||||||
import org.linphone.core.LinphoneCoreListenerBase;
|
import org.linphone.core.LinphoneCoreListenerBase;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
|
|
||||||
import android.app.Dialog;
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
@ -32,11 +31,12 @@ import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.WindowManager;
|
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
|
import android.view.WindowManager;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ public class AboutFragment extends Fragment implements OnClickListener {
|
||||||
uploadInProgress = true;
|
uploadInProgress = true;
|
||||||
|
|
||||||
progress = ProgressDialog.show(LinphoneActivity.instance(), null, null);
|
progress = ProgressDialog.show(LinphoneActivity.instance(), null, null);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorE));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(getActivity(), R.color.colorE));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
progress.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
progress.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
progress.getWindow().setBackgroundDrawable(d);
|
progress.getWindow().setBackgroundDrawable(d);
|
||||||
|
|
|
@ -35,7 +35,6 @@ import android.preference.Preference.OnPreferenceChangeListener;
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
import android.preference.PreferenceCategory;
|
import android.preference.PreferenceCategory;
|
||||||
import android.preference.PreferenceScreen;
|
import android.preference.PreferenceScreen;
|
||||||
import android.text.InputType;
|
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -280,7 +279,6 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
|
|
||||||
PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key));
|
PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key));
|
||||||
EditTextPreference username = (EditTextPreference) account.getPreference(0);
|
EditTextPreference username = (EditTextPreference) account.getPreference(0);
|
||||||
username.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
|
||||||
username.setOnPreferenceChangeListener(usernameChangedListener);
|
username.setOnPreferenceChangeListener(usernameChangedListener);
|
||||||
if (!isNewAccount){
|
if (!isNewAccount){
|
||||||
username.setText(mPrefs.getAccountUsername(n));
|
username.setText(mPrefs.getAccountUsername(n));
|
||||||
|
@ -288,7 +286,6 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
EditTextPreference userid = (EditTextPreference) account.getPreference(1);
|
EditTextPreference userid = (EditTextPreference) account.getPreference(1);
|
||||||
userid.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
|
||||||
userid.setOnPreferenceChangeListener(useridChangedListener);
|
userid.setOnPreferenceChangeListener(useridChangedListener);
|
||||||
if (!isNewAccount){
|
if (!isNewAccount){
|
||||||
userid.setText(mPrefs.getAccountUserId(n));
|
userid.setText(mPrefs.getAccountUserId(n));
|
||||||
|
@ -296,14 +293,12 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
EditTextPreference password = (EditTextPreference) account.getPreference(2);
|
EditTextPreference password = (EditTextPreference) account.getPreference(2);
|
||||||
password.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD);
|
|
||||||
password.setOnPreferenceChangeListener(passwordChangedListener);
|
password.setOnPreferenceChangeListener(passwordChangedListener);
|
||||||
if(!isNewAccount){
|
if(!isNewAccount){
|
||||||
password.setText(mPrefs.getAccountPassword(n));
|
password.setText(mPrefs.getAccountPassword(n));
|
||||||
}
|
}
|
||||||
|
|
||||||
EditTextPreference domain = (EditTextPreference) account.getPreference(3);
|
EditTextPreference domain = (EditTextPreference) account.getPreference(3);
|
||||||
domain.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
|
||||||
domain.setOnPreferenceChangeListener(domainChangedListener);
|
domain.setOnPreferenceChangeListener(domainChangedListener);
|
||||||
if (!isNewAccount){
|
if (!isNewAccount){
|
||||||
domain.setText(mPrefs.getAccountDomain(n));
|
domain.setText(mPrefs.getAccountDomain(n));
|
||||||
|
@ -311,7 +306,6 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
EditTextPreference displayName = (EditTextPreference) account.getPreference(4);
|
EditTextPreference displayName = (EditTextPreference) account.getPreference(4);
|
||||||
displayName.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PERSON_NAME);
|
|
||||||
displayName.setOnPreferenceChangeListener(displayNameChangedListener);
|
displayName.setOnPreferenceChangeListener(displayNameChangedListener);
|
||||||
if (!isNewAccount){
|
if (!isNewAccount){
|
||||||
displayName.setText(mPrefs.getAccountDisplayName(n));
|
displayName.setText(mPrefs.getAccountDisplayName(n));
|
||||||
|
@ -327,7 +321,6 @@ public class AccountPreferencesFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
mProxyPreference = (EditTextPreference) advanced.getPreference(1);
|
mProxyPreference = (EditTextPreference) advanced.getPreference(1);
|
||||||
mProxyPreference.getEditText().setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS);
|
|
||||||
mProxyPreference.setOnPreferenceChangeListener(proxyChangedListener);
|
mProxyPreference.setOnPreferenceChangeListener(proxyChangedListener);
|
||||||
if (!isNewAccount){
|
if (!isNewAccount){
|
||||||
mProxyPreference.setText(mPrefs.getAccountProxy(n));
|
mProxyPreference.setText(mPrefs.getAccountProxy(n));
|
||||||
|
|
|
@ -43,7 +43,6 @@ import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.res.Configuration;
|
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
@ -57,6 +56,7 @@ import android.os.Handler;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -66,9 +66,6 @@ import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.animation.Animation;
|
|
||||||
import android.view.animation.Animation.AnimationListener;
|
|
||||||
import android.view.animation.AnimationUtils;
|
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.Chronometer;
|
import android.widget.Chronometer;
|
||||||
|
@ -103,11 +100,10 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
private StatusFragment status;
|
private StatusFragment status;
|
||||||
private CallAudioFragment audioCallFragment;
|
private CallAudioFragment audioCallFragment;
|
||||||
private CallVideoFragment videoCallFragment;
|
private CallVideoFragment videoCallFragment;
|
||||||
private boolean isSpeakerEnabled = false, isMicMuted = false, isTransferAllowed, isAnimationDisabled;
|
private boolean isSpeakerEnabled = false, isMicMuted = false, isTransferAllowed;
|
||||||
private LinearLayout mControlsLayout;
|
private LinearLayout mControlsLayout;
|
||||||
private Numpad numpad;
|
private Numpad numpad;
|
||||||
private int cameraNumber;
|
private int cameraNumber;
|
||||||
private Animation slideOutLeftToRight, slideInRightToLeft, slideInBottomToTop, slideInTopToBottom, slideOutBottomToTop, slideOutTopToBottom;
|
|
||||||
private CountDownTimer timer;
|
private CountDownTimer timer;
|
||||||
private boolean isVideoCallPaused = false;
|
private boolean isVideoCallPaused = false;
|
||||||
|
|
||||||
|
@ -150,7 +146,6 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
BluetoothManager.getInstance().initBluetooth();
|
BluetoothManager.getInstance().initBluetooth();
|
||||||
}
|
}
|
||||||
|
|
||||||
isAnimationDisabled = getApplicationContext().getResources().getBoolean(R.bool.disable_animations) || !LinphonePreferences.instance().areAnimationsEnabled();
|
|
||||||
cameraNumber = AndroidCameraConfiguration.retrieveCameras().length;
|
cameraNumber = AndroidCameraConfiguration.retrieveCameras().length;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
@ -291,6 +286,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
callFragment = new CallVideoFragment();
|
callFragment = new CallVideoFragment();
|
||||||
videoCallFragment = (CallVideoFragment) callFragment;
|
videoCallFragment = (CallVideoFragment) callFragment;
|
||||||
displayVideoCall(false);
|
displayVideoCall(false);
|
||||||
|
LinphoneManager.getInstance().routeAudioToSpeaker();
|
||||||
isSpeakerEnabled = true;
|
isSpeakerEnabled = true;
|
||||||
} else {
|
} else {
|
||||||
callFragment = new CallAudioFragment();
|
callFragment = new CallAudioFragment();
|
||||||
|
@ -421,15 +417,6 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
addCall.setBackgroundResource(R.drawable.options_add_call);
|
addCall.setBackgroundResource(R.drawable.options_add_call);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!isAnimationDisabled) {
|
|
||||||
slideInRightToLeft = AnimationUtils.loadAnimation(this, R.anim.slide_in_right_to_left);
|
|
||||||
slideOutLeftToRight = AnimationUtils.loadAnimation(this, R.anim.slide_out_left_to_right);
|
|
||||||
slideInBottomToTop = AnimationUtils.loadAnimation(this, R.anim.slide_in_bottom_to_top);
|
|
||||||
slideInTopToBottom = AnimationUtils.loadAnimation(this, R.anim.slide_in_top_to_bottom);
|
|
||||||
slideOutBottomToTop = AnimationUtils.loadAnimation(this, R.anim.slide_out_bottom_to_top);
|
|
||||||
slideOutTopToBottom = AnimationUtils.loadAnimation(this, R.anim.slide_out_top_to_bottom);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (BluetoothManager.getInstance().isBluetoothHeadsetAvailable()) {
|
if (BluetoothManager.getInstance().isBluetoothHeadsetAvailable()) {
|
||||||
try {
|
try {
|
||||||
audioRoute.setVisibility(View.VISIBLE);
|
audioRoute.setVisibility(View.VISIBLE);
|
||||||
|
@ -962,31 +949,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
public void displayVideoCallControlsIfHidden() {
|
public void displayVideoCallControlsIfHidden() {
|
||||||
if (mControlsLayout != null) {
|
if (mControlsLayout != null) {
|
||||||
if (mControlsLayout.getVisibility() != View.VISIBLE) {
|
if (mControlsLayout.getVisibility() != View.VISIBLE) {
|
||||||
if (isAnimationDisabled) {
|
displayVideoCall(true);
|
||||||
displayVideoCall(true);
|
|
||||||
} else {
|
|
||||||
Animation animation = slideInBottomToTop;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
displayVideoCall(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
animation.setAnimationListener(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mControlsLayout.startAnimation(animation);
|
|
||||||
if (cameraNumber > 1) {
|
|
||||||
switchCamera.startAnimation(slideInTopToBottom);
|
|
||||||
}
|
|
||||||
pause.startAnimation(slideInTopToBottom);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
resetControlsHidingCallBack();
|
resetControlsHidingCallBack();
|
||||||
}
|
}
|
||||||
|
@ -1002,45 +965,13 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
mControlsHandler.postDelayed(mControls = new Runnable() {
|
mControlsHandler.postDelayed(mControls = new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
hideNumpad();
|
hideNumpad();
|
||||||
|
video.setEnabled(true);
|
||||||
if (isAnimationDisabled) {
|
transfer.setVisibility(View.INVISIBLE);
|
||||||
video.setEnabled(true);
|
addCall.setVisibility(View.INVISIBLE);
|
||||||
transfer.setVisibility(View.INVISIBLE);
|
conference.setVisibility(View.INVISIBLE);
|
||||||
addCall.setVisibility(View.INVISIBLE);
|
displayVideoCall(false);
|
||||||
conference.setVisibility(View.INVISIBLE);
|
numpad.setVisibility(View.GONE);
|
||||||
displayVideoCall(false);
|
options.setImageResource(R.drawable.options_default);
|
||||||
numpad.setVisibility(View.GONE);
|
|
||||||
options.setImageResource(R.drawable.options_default);
|
|
||||||
} else {
|
|
||||||
Animation animation = slideOutTopToBottom;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
video.setEnabled(false); // HACK: Used to avoid controls from being hided if video is switched while controls are hiding
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
video.setEnabled(true); // HACK: Used to avoid controls from being hided if video is switched while controls are hiding
|
|
||||||
transfer.setVisibility(View.INVISIBLE);
|
|
||||||
addCall.setVisibility(View.INVISIBLE);
|
|
||||||
conference.setVisibility(View.INVISIBLE);
|
|
||||||
displayVideoCall(false);
|
|
||||||
numpad.setVisibility(View.GONE);
|
|
||||||
options.setImageResource(R.drawable.options_default);
|
|
||||||
animation.setAnimationListener(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
mControlsLayout.startAnimation(animation);
|
|
||||||
if (cameraNumber > 1) {
|
|
||||||
switchCamera.startAnimation(slideOutBottomToTop);
|
|
||||||
}
|
|
||||||
pause.startAnimation(slideOutBottomToTop);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}, SECONDS_BEFORE_HIDING_CONTROLS);
|
}, SECONDS_BEFORE_HIDING_CONTROLS);
|
||||||
}
|
}
|
||||||
|
@ -1059,29 +990,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
}
|
}
|
||||||
|
|
||||||
dialer.setImageResource(R.drawable.footer_dialer);
|
dialer.setImageResource(R.drawable.footer_dialer);
|
||||||
if (isAnimationDisabled) {
|
numpad.setVisibility(View.GONE);
|
||||||
numpad.setVisibility(View.GONE);
|
|
||||||
} else {
|
|
||||||
Animation animation = slideOutTopToBottom;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
numpad.setVisibility(View.GONE);
|
|
||||||
animation.setAnimationListener(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
numpad.startAnimation(animation);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideOrDisplayNumpad() {
|
private void hideOrDisplayNumpad() {
|
||||||
|
@ -1093,187 +1002,10 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
hideNumpad();
|
hideNumpad();
|
||||||
} else {
|
} else {
|
||||||
dialer.setImageResource(R.drawable.dialer_alt_back);
|
dialer.setImageResource(R.drawable.dialer_alt_back);
|
||||||
if (isAnimationDisabled) {
|
numpad.setVisibility(View.VISIBLE);
|
||||||
numpad.setVisibility(View.VISIBLE);
|
|
||||||
} else {
|
|
||||||
Animation animation = slideInBottomToTop;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
numpad.setVisibility(View.VISIBLE);
|
|
||||||
animation.setAnimationListener(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
numpad.startAnimation(animation);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideAnimatedPortraitCallOptions() {
|
|
||||||
Animation animation = slideOutLeftToRight;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
if (isTransferAllowed) {
|
|
||||||
transfer.setVisibility(View.INVISIBLE);
|
|
||||||
}
|
|
||||||
addCall.setVisibility(View.INVISIBLE);
|
|
||||||
conference.setVisibility(View.INVISIBLE);
|
|
||||||
animation.setAnimationListener(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (isTransferAllowed) {
|
|
||||||
transfer.startAnimation(animation);
|
|
||||||
}
|
|
||||||
addCall.startAnimation(animation);
|
|
||||||
conference.startAnimation(animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void hideAnimatedLandscapeCallOptions() {
|
|
||||||
Animation animation = slideOutTopToBottom;
|
|
||||||
if (isTransferAllowed) {
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
transfer.setAnimation(null);
|
|
||||||
transfer.setVisibility(View.INVISIBLE);
|
|
||||||
|
|
||||||
animation = AnimationUtils.loadAnimation(CallActivity.this, R.anim.slide_out_top_to_bottom); // Reload animation to prevent transfer button to blink
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
addCall.setVisibility(View.INVISIBLE);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
addCall.startAnimation(animation);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
transfer.startAnimation(animation);
|
|
||||||
conference.startAnimation(animation);
|
|
||||||
} else {
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
addCall.setVisibility(View.INVISIBLE);
|
|
||||||
conference.setVisibility(View.INVISIBLE);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
addCall.startAnimation(animation);
|
|
||||||
conference.startAnimation(animation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showAnimatedPortraitCallOptions() {
|
|
||||||
Animation animation = slideInRightToLeft;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
options.setImageResource(R.drawable.options_default);
|
|
||||||
if (isTransferAllowed) {
|
|
||||||
transfer.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
addCall.setVisibility(View.VISIBLE);
|
|
||||||
conference.setVisibility(View.VISIBLE);
|
|
||||||
animation.setAnimationListener(null);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
if (isTransferAllowed) {
|
|
||||||
transfer.startAnimation(animation);
|
|
||||||
}
|
|
||||||
conference.startAnimation(animation);
|
|
||||||
addCall.startAnimation(animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showAnimatedLandscapeCallOptions() {
|
|
||||||
Animation animation = slideInBottomToTop;
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
addCall.setAnimation(null);
|
|
||||||
options.setImageResource(R.drawable.options_default);
|
|
||||||
addCall.setVisibility(View.VISIBLE);
|
|
||||||
conference.setVisibility(View.VISIBLE);
|
|
||||||
if (isTransferAllowed) {
|
|
||||||
animation.setAnimationListener(new AnimationListener() {
|
|
||||||
@Override
|
|
||||||
public void onAnimationStart(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationRepeat(Animation animation) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAnimationEnd(Animation animation) {
|
|
||||||
transfer.setVisibility(View.VISIBLE);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
transfer.startAnimation(animation);
|
|
||||||
}
|
|
||||||
conference.startAnimation(animation);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
addCall.startAnimation(animation);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void hideOrDisplayAudioRoutes()
|
private void hideOrDisplayAudioRoutes()
|
||||||
{
|
{
|
||||||
if (routeSpeaker.getVisibility() == View.VISIBLE) {
|
if (routeSpeaker.getVisibility() == View.VISIBLE) {
|
||||||
|
@ -1288,40 +1020,21 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
}
|
}
|
||||||
|
|
||||||
private void hideOrDisplayCallOptions() {
|
private void hideOrDisplayCallOptions() {
|
||||||
boolean isOrientationLandscape = getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE;
|
|
||||||
|
|
||||||
//Hide options
|
//Hide options
|
||||||
if (addCall.getVisibility() == View.VISIBLE) {
|
if (addCall.getVisibility() == View.VISIBLE) {
|
||||||
options.setImageResource(R.drawable.options_default);
|
options.setImageResource(R.drawable.options_default);
|
||||||
if (isAnimationDisabled) {
|
if (isTransferAllowed) {
|
||||||
if (isTransferAllowed) {
|
transfer.setVisibility(View.INVISIBLE);
|
||||||
transfer.setVisibility(View.INVISIBLE);
|
|
||||||
}
|
|
||||||
addCall.setVisibility(View.INVISIBLE);
|
|
||||||
conference.setVisibility(View.INVISIBLE);
|
|
||||||
} else {
|
|
||||||
if (isOrientationLandscape) {
|
|
||||||
hideAnimatedLandscapeCallOptions();
|
|
||||||
} else {
|
|
||||||
hideAnimatedPortraitCallOptions();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
//Display options
|
addCall.setVisibility(View.INVISIBLE);
|
||||||
} else {
|
conference.setVisibility(View.INVISIBLE);
|
||||||
if (isAnimationDisabled) {
|
} else { //Display options
|
||||||
if (isTransferAllowed) {
|
if (isTransferAllowed) {
|
||||||
transfer.setVisibility(View.VISIBLE);
|
transfer.setVisibility(View.VISIBLE);
|
||||||
}
|
|
||||||
addCall.setVisibility(View.VISIBLE);
|
|
||||||
conference.setVisibility(View.VISIBLE);
|
|
||||||
options.setImageResource(R.drawable.options_selected);
|
|
||||||
} else {
|
|
||||||
if (isOrientationLandscape) {
|
|
||||||
showAnimatedLandscapeCallOptions();
|
|
||||||
} else {
|
|
||||||
showAnimatedPortraitCallOptions();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
addCall.setVisibility(View.VISIBLE);
|
||||||
|
conference.setVisibility(View.VISIBLE);
|
||||||
|
options.setImageResource(R.drawable.options_selected);
|
||||||
transfer.setEnabled(LinphoneManager.getLc().getCurrentCall() != null);
|
transfer.setEnabled(LinphoneManager.getLc().getCurrentCall() != null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1401,7 +1114,7 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
private void showAcceptCallUpdateDialog() {
|
private void showAcceptCallUpdateDialog() {
|
||||||
final Dialog dialog = new Dialog(this);
|
final Dialog dialog = new Dialog(this);
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorC));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorC));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
dialog.setContentView(R.layout.dialog);
|
dialog.setContentView(R.layout.dialog);
|
||||||
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);
|
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
|
@ -1862,12 +1575,6 @@ public class CallActivity extends Activity implements OnClickListener, SensorEve
|
||||||
if (count > 0) {
|
if (count > 0) {
|
||||||
missedChats.setText(count + "");
|
missedChats.setText(count + "");
|
||||||
missedChats.setVisibility(View.VISIBLE);
|
missedChats.setVisibility(View.VISIBLE);
|
||||||
if (!isAnimationDisabled) {
|
|
||||||
missedChats.startAnimation(AnimationUtils.loadAnimation(this, R.anim.bounce));
|
|
||||||
}
|
|
||||||
if(count > 99){
|
|
||||||
//TODO
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
missedChats.clearAnimation();
|
missedChats.clearAnimation();
|
||||||
missedChats.setVisibility(View.GONE);
|
missedChats.setVisibility(View.GONE);
|
||||||
|
|
|
@ -17,9 +17,8 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
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 android.app.Activity;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
|
@ -40,18 +39,13 @@ public class CallAudioFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onAttach(Activity activity) {
|
public void onStart() {
|
||||||
super.onAttach(activity);
|
super.onStart();
|
||||||
incallActvityInstance = (CallActivity) activity;
|
incallActvityInstance = (CallActivity) getActivity();
|
||||||
|
|
||||||
if (incallActvityInstance != null) {
|
if (incallActvityInstance != null) {
|
||||||
incallActvityInstance.bindAudioFragment(this);
|
incallActvityInstance.bindAudioFragment(this);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onStart() {
|
|
||||||
super.onStart();
|
|
||||||
|
|
||||||
// Just to be sure we have incall controls
|
// Just to be sure we have incall controls
|
||||||
if (incallActvityInstance != null) {
|
if (incallActvityInstance != null) {
|
||||||
|
|
|
@ -21,6 +21,7 @@ package org.linphone;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import org.linphone.compatibility.Compatibility;
|
||||||
import org.linphone.core.LinphoneAddress;
|
import org.linphone.core.LinphoneAddress;
|
||||||
import org.linphone.core.LinphoneCall;
|
import org.linphone.core.LinphoneCall;
|
||||||
import org.linphone.core.LinphoneCall.State;
|
import org.linphone.core.LinphoneCall.State;
|
||||||
|
@ -35,7 +36,6 @@ import android.app.Activity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
|
@ -89,11 +89,7 @@ public class CallIncomingActivity extends Activity implements LinphoneSliderTrig
|
||||||
getWindow().addFlags(flags);
|
getWindow().addFlags(flags);
|
||||||
|
|
||||||
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) {
|
isScreenActive = Compatibility.isScreenOn(pm);
|
||||||
isScreenActive = pm.isInteractive();
|
|
||||||
} else {
|
|
||||||
isScreenActive = pm.isScreenOn();
|
|
||||||
}
|
|
||||||
|
|
||||||
final int screenWidth = getResources().getDisplayMetrics().widthPixels;
|
final int screenWidth = getResources().getDisplayMetrics().widthPixels;
|
||||||
|
|
||||||
|
|
|
@ -25,7 +25,6 @@ import org.linphone.mediastream.Log;
|
||||||
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
|
import org.linphone.mediastream.video.AndroidVideoWindowImpl;
|
||||||
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration;
|
||||||
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.GestureDetector;
|
import android.view.GestureDetector;
|
||||||
|
@ -132,6 +131,15 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onStart() {
|
||||||
|
super.onStart();
|
||||||
|
inCallActivity = (CallActivity) getActivity();
|
||||||
|
if (inCallActivity != null) {
|
||||||
|
inCallActivity.bindVideoFragment(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void fixZOrder(SurfaceView video, SurfaceView preview) {
|
private void fixZOrder(SurfaceView video, SurfaceView preview) {
|
||||||
video.setZOrderOnTop(false);
|
video.setZOrderOnTop(false);
|
||||||
preview.setZOrderOnTop(true);
|
preview.setZOrderOnTop(true);
|
||||||
|
@ -293,15 +301,6 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On
|
||||||
super.onDestroy();
|
super.onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
inCallActivity = (CallActivity) activity;
|
|
||||||
if (inCallActivity != null) {
|
|
||||||
inCallActivity.bindVideoFragment(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onDown(MotionEvent e) {
|
public boolean onDown(MotionEvent e) {
|
||||||
return true; // Needed to make the GestureDetector working
|
return true; // Needed to make the GestureDetector working
|
||||||
|
|
|
@ -183,7 +183,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
initNewChatConversation();
|
initNewChatConversation();
|
||||||
}
|
}
|
||||||
|
|
||||||
//Manage multiline
|
|
||||||
message = (EditText) view.findViewById(R.id.message);
|
message = (EditText) view.findViewById(R.id.message);
|
||||||
|
|
||||||
sendImage = (ImageView) view.findViewById(R.id.send_picture);
|
sendImage = (ImageView) view.findViewById(R.id.send_picture);
|
||||||
|
@ -1027,7 +1026,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
if(search != null) {
|
if(search != null) {
|
||||||
for (ContactAddress c : searchAdapter.contacts) {
|
for (ContactAddress c : searchAdapter.contacts) {
|
||||||
String address = c.address;
|
String address = c.address;
|
||||||
if(address.startsWith("sip:")) address = address.substring(4);
|
if (address.startsWith("sip:")) address = address.substring(4);
|
||||||
if (c.contact.getFullName().toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))
|
if (c.contact.getFullName().toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))
|
||||||
|| address.toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))) {
|
|| address.toLowerCase(Locale.getDefault()).startsWith(search.toLowerCase(Locale.getDefault()))) {
|
||||||
result.add(c);
|
result.add(c);
|
||||||
|
@ -1045,7 +1044,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
|
|
||||||
SearchContactsListAdapter(List<ContactAddress> contactsList) {
|
SearchContactsListAdapter(List<ContactAddress> contactsList) {
|
||||||
mInflater = inflater;
|
mInflater = inflater;
|
||||||
if(contactsList == null){
|
if (contactsList == null) {
|
||||||
contacts = getContactsList();
|
contacts = getContactsList();
|
||||||
} else {
|
} else {
|
||||||
contacts = contactsList;
|
contacts = contactsList;
|
||||||
|
@ -1057,7 +1056,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
if(ContactsManager.getInstance().hasContacts()) {
|
if(ContactsManager.getInstance().hasContacts()) {
|
||||||
for (LinphoneContact con : ContactsManager.getInstance().getContacts()) {
|
for (LinphoneContact con : ContactsManager.getInstance().getContacts()) {
|
||||||
for (LinphoneNumberOrAddress noa : con.getNumbersOrAddresses()) {
|
for (LinphoneNumberOrAddress noa : con.getNumbersOrAddresses()) {
|
||||||
list.add(new ContactAddress(con, noa.getValue()));
|
String value = noa.getValue();
|
||||||
|
// Fix for sip:username compatibility issue
|
||||||
|
if (value.startsWith("sip:") && !value.contains("@")) {
|
||||||
|
value = value.substring(4);
|
||||||
|
value = LinphoneUtils.getFullAddressFromUsername(value);
|
||||||
|
}
|
||||||
|
list.add(new ContactAddress(con, value));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1095,7 +1100,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
||||||
}
|
}
|
||||||
|
|
||||||
final String a = contact.address;
|
final String a = contact.address;
|
||||||
final LinphoneContact c = contact.contact;
|
LinphoneContact c = contact.contact;
|
||||||
|
|
||||||
TextView name = (TextView) view.findViewById(R.id.contact_name);
|
TextView name = (TextView) view.findViewById(R.id.contact_name);
|
||||||
name.setText(c.getFullName());
|
name.setText(c.getFullName());
|
||||||
|
|
|
@ -55,7 +55,7 @@ import android.widget.TextView;
|
||||||
/**
|
/**
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
*/
|
*/
|
||||||
public class ChatListFragment extends Fragment implements OnClickListener, OnItemClickListener {
|
public class ChatListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener {
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
private List<String> mConversations;
|
private List<String> mConversations;
|
||||||
private ListView chatList;
|
private ListView chatList;
|
||||||
|
@ -193,6 +193,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
ContactsManager.addContactsListener(this);
|
||||||
|
|
||||||
if (LinphoneManager.getLc().getCallsNb() > 0) {
|
if (LinphoneManager.getLc().getCallsNb() > 0) {
|
||||||
backInCall.setVisibility(View.VISIBLE);
|
backInCall.setVisibility(View.VISIBLE);
|
||||||
|
@ -219,9 +220,15 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
|
||||||
if (lc != null) {
|
if (lc != null) {
|
||||||
lc.removeListener(mListener);
|
lc.removeListener(mListener);
|
||||||
}
|
}
|
||||||
|
ContactsManager.removeContactsListener(this);
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onContactsUpdated() {
|
||||||
|
hideAndDisplayMessageIfNoChat();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
|
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
|
||||||
super.onCreateContextMenu(menu, v, menuInfo);
|
super.onCreateContextMenu(menu, v, menuInfo);
|
||||||
|
|
|
@ -25,6 +25,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
|
* @deprecated
|
||||||
*/
|
*/
|
||||||
public class ChatMessage {
|
public class ChatMessage {
|
||||||
private String message;
|
private String message;
|
||||||
|
|
|
@ -17,7 +17,6 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
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.core.LinphoneCore;
|
|
||||||
import org.linphone.core.LinphoneProxyConfig;
|
import org.linphone.core.LinphoneProxyConfig;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
@ -39,6 +38,7 @@ import android.widget.TextView;
|
||||||
public class ContactDetailsFragment extends Fragment implements OnClickListener {
|
public class ContactDetailsFragment extends Fragment implements OnClickListener {
|
||||||
private LinphoneContact contact;
|
private LinphoneContact contact;
|
||||||
private ImageView editContact, deleteContact, back;
|
private ImageView editContact, deleteContact, back;
|
||||||
|
private TextView organization;
|
||||||
private LayoutInflater inflater;
|
private LayoutInflater inflater;
|
||||||
private View view;
|
private View view;
|
||||||
private boolean displayChatAddressOnly = false;
|
private boolean displayChatAddressOnly = false;
|
||||||
|
@ -47,22 +47,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
LinphoneActivity.instance().setAddresGoToDialerAndCall(v.getTag().toString(), contact.getFullName(), contact.getPhotoUri());
|
||||||
if (lc != null) {
|
|
||||||
LinphoneProxyConfig lpc = lc.getDefaultProxyConfig();
|
|
||||||
String to;
|
|
||||||
if (lpc != null) {
|
|
||||||
String address = v.getTag().toString();
|
|
||||||
if (!address.contains("@")) {
|
|
||||||
to = lpc.normalizePhoneNumber(address);
|
|
||||||
} else {
|
|
||||||
to = v.getTag().toString();
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
to = v.getTag().toString();
|
|
||||||
}
|
|
||||||
LinphoneActivity.instance().setAddresGoToDialerAndCall(to, contact.getFullName(), contact.getPhotoUri());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -92,6 +77,14 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
deleteContact = (ImageView) view.findViewById(R.id.deleteContact);
|
deleteContact = (ImageView) view.findViewById(R.id.deleteContact);
|
||||||
deleteContact.setOnClickListener(this);
|
deleteContact.setOnClickListener(this);
|
||||||
|
|
||||||
|
organization = (TextView) view.findViewById(R.id.contactOrganization);
|
||||||
|
String org = contact.getOrganization();
|
||||||
|
if (org != null && !org.isEmpty()) {
|
||||||
|
organization.setText(org);
|
||||||
|
} else {
|
||||||
|
organization.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
back = (ImageView) view.findViewById(R.id.back);
|
back = (ImageView) view.findViewById(R.id.back);
|
||||||
if(getResources().getBoolean(R.bool.isTablet)){
|
if(getResources().getBoolean(R.bool.isTablet)){
|
||||||
back.setVisibility(View.INVISIBLE);
|
back.setVisibility(View.INVISIBLE);
|
||||||
|
@ -125,13 +118,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
boolean skip = false;
|
boolean skip = false;
|
||||||
View v = inflater.inflate(R.layout.contact_control_row, null);
|
View v = inflater.inflate(R.layout.contact_control_row, null);
|
||||||
|
|
||||||
String displayednumberOrAddress = noa.getValue();
|
String displayednumberOrAddress = LinphoneUtils.getDisplayableUsernameFromAddress(noa.getValue());
|
||||||
if (displayednumberOrAddress.startsWith("sip:")) {
|
|
||||||
displayednumberOrAddress = displayednumberOrAddress.replace("sip:", "");
|
|
||||||
}
|
|
||||||
if (displayednumberOrAddress.contains("@")) {
|
|
||||||
displayednumberOrAddress = displayednumberOrAddress.split("@")[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
TextView label = (TextView) v.findViewById(R.id.address_label);
|
TextView label = (TextView) v.findViewById(R.id.address_label);
|
||||||
if (noa.isSIPAddress()) {
|
if (noa.isSIPAddress()) {
|
||||||
|
@ -156,48 +143,13 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
v.findViewById(R.id.contact_chat).setOnClickListener(chatListener);
|
v.findViewById(R.id.contact_chat).setOnClickListener(chatListener);
|
||||||
LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig();
|
LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig();
|
||||||
if (lpc != null) {
|
if (lpc != null) {
|
||||||
displayednumberOrAddress = lpc.normalizePhoneNumber(displayednumberOrAddress);
|
String username = lpc.normalizePhoneNumber(LinphoneUtils.getUsernameFromAddress(noa.getValue()));
|
||||||
String tag = noa.getValue();
|
String tag = LinphoneUtils.getFullAddressFromUsername(username);
|
||||||
if (!tag.startsWith("sip:")) {
|
|
||||||
tag = "sip:" + tag;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!tag.contains("@")) {
|
|
||||||
tag = tag + "@" + lpc.getDomain();
|
|
||||||
}
|
|
||||||
v.findViewById(R.id.contact_chat).setTag(tag);
|
v.findViewById(R.id.contact_chat).setTag(tag);
|
||||||
} else {
|
} else {
|
||||||
v.findViewById(R.id.contact_chat).setTag(noa.getValue());
|
v.findViewById(R.id.contact_chat).setTag(noa.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
/*ImageView friend = (ImageView) v.findViewById(R.id.addFriend);
|
|
||||||
if (getResources().getBoolean(R.bool.enable_linphone_friends) && !displayChatAddressOnly) {
|
|
||||||
friend.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
boolean isAlreadyAFriend = LinphoneManager.getLc().findFriendByAddress(finalNumberOrAddress) != null;
|
|
||||||
if (!isAlreadyAFriend) {
|
|
||||||
friend.setImageResource(R.drawable.contact_add);
|
|
||||||
friend.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (ContactsManager.getInstance().createNewFriend(contact, finalNumberOrAddress)) {
|
|
||||||
displayContact(ContactFragment.this.inflater, ContactFragment.this.view);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
friend.setImageResource(R.drawable.delete);
|
|
||||||
friend.setOnClickListener(new OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(View v) {
|
|
||||||
if (ContactsManager.getInstance().removeFriend(finalNumberOrAddress)) {
|
|
||||||
displayContact(ContactFragment.this.inflater, ContactFragment.this.view);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_chat)) {
|
if (getResources().getBoolean(R.bool.disable_chat)) {
|
||||||
v.findViewById(R.id.contact_chat).setVisibility(View.GONE);
|
v.findViewById(R.id.contact_chat).setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,8 +25,6 @@ import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.linphone.core.LinphoneCore;
|
|
||||||
import org.linphone.core.LinphoneProxyConfig;
|
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
import org.linphone.mediastream.Version;
|
import org.linphone.mediastream.Version;
|
||||||
|
|
||||||
|
@ -64,7 +62,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
private ImageView cancel, deleteContact, ok;
|
private ImageView cancel, deleteContact, ok;
|
||||||
private ImageView addNumber, addSipAddress, contactPicture;
|
private ImageView addNumber, addSipAddress, contactPicture;
|
||||||
private LinearLayout phoneNumbersSection, sipAddressesSection;
|
private LinearLayout phoneNumbersSection, sipAddressesSection;
|
||||||
private EditText firstName, lastName;
|
private EditText firstName, lastName, organization;
|
||||||
private LayoutInflater inflater;
|
private LayoutInflater inflater;
|
||||||
|
|
||||||
private static final int ADD_PHOTO = 1337;
|
private static final int ADD_PHOTO = 1337;
|
||||||
|
@ -126,10 +124,6 @@ public class ContactEditorFragment extends Fragment {
|
||||||
ok.setOnClickListener(new OnClickListener() {
|
ok.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
LinphoneProxyConfig lpc = lc != null ? lc.getDefaultProxyConfig() : null;
|
|
||||||
String defaultDomain = lpc != null ? lpc.getDomain() : null;
|
|
||||||
|
|
||||||
if (isNewContact) {
|
if (isNewContact) {
|
||||||
boolean areAllFielsEmpty = true;
|
boolean areAllFielsEmpty = true;
|
||||||
for (LinphoneNumberOrAddress nounoa : numbersAndAddresses) {
|
for (LinphoneNumberOrAddress nounoa : numbersAndAddresses) {
|
||||||
|
@ -150,15 +144,11 @@ public class ContactEditorFragment extends Fragment {
|
||||||
}
|
}
|
||||||
for (LinphoneNumberOrAddress noa : numbersAndAddresses) {
|
for (LinphoneNumberOrAddress noa : numbersAndAddresses) {
|
||||||
if (noa.isSIPAddress() && noa.getValue() != null) {
|
if (noa.isSIPAddress() && noa.getValue() != null) {
|
||||||
if (!noa.getValue().contains("@") && defaultDomain != null) {
|
noa.setValue(LinphoneUtils.getFullAddressFromUsername(noa.getValue()));
|
||||||
noa.setValue(noa.getValue() + "@" + defaultDomain);
|
|
||||||
}
|
|
||||||
if (!noa.getValue().startsWith("sip:")) {
|
|
||||||
noa.setValue("sip:" + noa.getValue());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
contact.addOrUpdateNumberOrAddress(noa);
|
contact.addOrUpdateNumberOrAddress(noa);
|
||||||
}
|
}
|
||||||
|
contact.setOrganization(organization.getText().toString());
|
||||||
contact.save();
|
contact.save();
|
||||||
getFragmentManager().popBackStackImmediate();
|
getFragmentManager().popBackStackImmediate();
|
||||||
}
|
}
|
||||||
|
@ -214,6 +204,11 @@ public class ContactEditorFragment extends Fragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
organization = (EditText) view.findViewById(R.id.contactOrganization);
|
||||||
|
if (!isNewContact) {
|
||||||
|
organization.setText(contact.getOrganization());
|
||||||
|
}
|
||||||
|
|
||||||
if (!isNewContact) {
|
if (!isNewContact) {
|
||||||
String fn = contact.getFirstName();
|
String fn = contact.getFirstName();
|
||||||
String ln = contact.getLastName();
|
String ln = contact.getLastName();
|
||||||
|
@ -331,7 +326,6 @@ public class ContactEditorFragment extends Fragment {
|
||||||
final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
final Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
|
||||||
File file = new File(Environment.getExternalStorageDirectory(), getString(R.string.temp_photo_name));
|
File file = new File(Environment.getExternalStorageDirectory(), getString(R.string.temp_photo_name));
|
||||||
pickedPhotoForContactUri = Uri.fromFile(file);
|
pickedPhotoForContactUri = Uri.fromFile(file);
|
||||||
captureIntent.putExtra("crop", "true");
|
|
||||||
captureIntent.putExtra("outputX", PHOTO_SIZE);
|
captureIntent.putExtra("outputX", PHOTO_SIZE);
|
||||||
captureIntent.putExtra("outputY", PHOTO_SIZE);
|
captureIntent.putExtra("outputY", PHOTO_SIZE);
|
||||||
captureIntent.putExtra("aspectX", 0);
|
captureIntent.putExtra("aspectX", 0);
|
||||||
|
@ -485,10 +479,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
if (firstSipAddressIndex == -1) {
|
if (firstSipAddressIndex == -1) {
|
||||||
firstSipAddressIndex = controls.getChildCount();
|
firstSipAddressIndex = controls.getChildCount();
|
||||||
}
|
}
|
||||||
numberOrAddress = numberOrAddress.replace("sip:", "");
|
numberOrAddress = LinphoneUtils.getDisplayableUsernameFromAddress(numberOrAddress);
|
||||||
if (numberOrAddress.contains("@")) {
|
|
||||||
numberOrAddress = numberOrAddress.split("@")[0];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if ((getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) && !isSIP) || (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor) && isSIP)) {
|
if ((getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) && !isSIP) || (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor) && isSIP)) {
|
||||||
if (forceAddNumber)
|
if (forceAddNumber)
|
||||||
|
@ -513,7 +504,9 @@ public class ContactEditorFragment extends Fragment {
|
||||||
final View view = inflater.inflate(R.layout.contact_edit_row, null);
|
final View view = inflater.inflate(R.layout.contact_edit_row, null);
|
||||||
|
|
||||||
final EditText noa = (EditText) view.findViewById(R.id.numoraddr);
|
final EditText noa = (EditText) view.findViewById(R.id.numoraddr);
|
||||||
noa.setInputType(isSIP ? InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS : InputType.TYPE_CLASS_PHONE);
|
if (!isSIP) {
|
||||||
|
noa.setInputType(InputType.TYPE_CLASS_PHONE);
|
||||||
|
}
|
||||||
noa.setText(numberOrAddress);
|
noa.setText(numberOrAddress);
|
||||||
noa.addTextChangedListener(new TextWatcher() {
|
noa.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -559,7 +552,9 @@ public class ContactEditorFragment extends Fragment {
|
||||||
final EditText noa = (EditText) view.findViewById(R.id.numoraddr);
|
final EditText noa = (EditText) view.findViewById(R.id.numoraddr);
|
||||||
numbersAndAddresses.add(nounoa);
|
numbersAndAddresses.add(nounoa);
|
||||||
noa.setHint(isSip ? getString(R.string.sip_address) : getString(R.string.phone_number));
|
noa.setHint(isSip ? getString(R.string.sip_address) : getString(R.string.phone_number));
|
||||||
noa.setInputType(isSip ? InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS : InputType.TYPE_CLASS_PHONE);
|
if (!isSip) {
|
||||||
|
noa.setInputType(InputType.TYPE_CLASS_PHONE);
|
||||||
|
}
|
||||||
noa.requestFocus();
|
noa.requestFocus();
|
||||||
noa.addTextChangedListener(new TextWatcher() {
|
noa.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -48,6 +48,7 @@ import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.ListView;
|
import android.widget.ListView;
|
||||||
|
import android.widget.ProgressBar;
|
||||||
import android.widget.SectionIndexer;
|
import android.widget.SectionIndexer;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
@ -67,6 +68,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
|
||||||
private String sipAddressToAdd;
|
private String sipAddressToAdd;
|
||||||
private ImageView clearSearchField;
|
private ImageView clearSearchField;
|
||||||
private EditText searchField;
|
private EditText searchField;
|
||||||
|
private ProgressBar contactsFetchInProgress;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -142,6 +144,8 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
contactsFetchInProgress = (ProgressBar) view.findViewById(R.id.contactsFetchInProgress);
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -339,6 +343,11 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
|
||||||
edit.setEnabled(true);
|
edit.setEnabled(true);
|
||||||
}
|
}
|
||||||
ContactsManager.getInstance().setLinphoneContactsPrefered(onlyDisplayLinphoneContacts);
|
ContactsManager.getInstance().setLinphoneContactsPrefered(onlyDisplayLinphoneContacts);
|
||||||
|
if (contactsList.getCount() == 0) {
|
||||||
|
contactsFetchInProgress.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
contactsFetchInProgress.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeContactsToggle() {
|
private void changeContactsToggle() {
|
||||||
|
@ -476,7 +485,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(contact.isInLinphoneFriendList()){
|
if (contact.isInLinphoneFriendList()) {
|
||||||
linphoneFriend.setVisibility(View.VISIBLE);
|
linphoneFriend.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
linphoneFriend.setVisibility(View.GONE);
|
linphoneFriend.setVisibility(View.GONE);
|
||||||
|
@ -491,6 +500,15 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
|
||||||
icon.setImageResource(R.drawable.avatar);
|
icon.setImageResource(R.drawable.avatar);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TextView organization = (TextView) view.findViewById(R.id.contactOrganization);
|
||||||
|
String org = contact.getOrganization();
|
||||||
|
if (org != null && !org.isEmpty()) {
|
||||||
|
organization.setText(org);
|
||||||
|
organization.setVisibility(View.VISIBLE);
|
||||||
|
} else {
|
||||||
|
organization.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
|
||||||
if (isEditMode) {
|
if (isEditMode) {
|
||||||
delete.setVisibility(View.VISIBLE);
|
delete.setVisibility(View.VISIBLE);
|
||||||
delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
|
||||||
|
|
|
@ -39,6 +39,7 @@ import android.content.Context;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.database.Cursor;
|
import android.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.AsyncTask;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
|
@ -49,14 +50,12 @@ interface ContactsUpdatedListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
public class ContactsManager extends ContentObserver {
|
public class ContactsManager extends ContentObserver {
|
||||||
private static final int CONTACTS_UPDATED = 543;
|
|
||||||
|
|
||||||
private static ContactsManager instance;
|
private static ContactsManager instance;
|
||||||
private List<LinphoneContact> contacts, sipContacts;
|
private List<LinphoneContact> contacts, sipContacts;
|
||||||
private Account mAccount;
|
|
||||||
private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false;
|
private boolean preferLinphoneContacts = false, isContactPresenceDisabled = true, hasContactAccess = false;
|
||||||
private ContentResolver contentResolver;
|
private ContentResolver contentResolver;
|
||||||
private Context context;
|
private Context context;
|
||||||
|
private ContactsFetchTask contactsFetchTask;
|
||||||
|
|
||||||
private static ArrayList<ContactsUpdatedListener> contactsUpdatedListeners;
|
private static ArrayList<ContactsUpdatedListener> contactsUpdatedListeners;
|
||||||
public static void addContactsListener(ContactsUpdatedListener listener) {
|
public static void addContactsListener(ContactsUpdatedListener listener) {
|
||||||
|
@ -67,16 +66,9 @@ public class ContactsManager extends ContentObserver {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Handler handler = new Handler() {
|
private static Handler handler = new Handler() {
|
||||||
@SuppressWarnings("unchecked")
|
|
||||||
@Override
|
@Override
|
||||||
public void handleMessage (Message msg) {
|
public void handleMessage (Message msg) {
|
||||||
if (msg.what == CONTACTS_UPDATED && msg.obj instanceof List<?>) {
|
|
||||||
List<LinphoneContact> c = (List<LinphoneContact>) msg.obj;
|
|
||||||
ContactsManager.getInstance().setContacts(c);
|
|
||||||
for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
|
|
||||||
listener.onContactsUpdated();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -87,6 +79,13 @@ public class ContactsManager extends ContentObserver {
|
||||||
sipContacts = new ArrayList<LinphoneContact>();
|
sipContacts = new ArrayList<LinphoneContact>();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void destroy() {
|
||||||
|
if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) {
|
||||||
|
contactsFetchTask.cancel(true);
|
||||||
|
}
|
||||||
|
instance = null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange) {
|
public void onChange(boolean selfChange) {
|
||||||
onChange(selfChange, null);
|
onChange(selfChange, null);
|
||||||
|
@ -94,11 +93,7 @@ public class ContactsManager extends ContentObserver {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChange(boolean selfChange, Uri uri) {
|
public void onChange(boolean selfChange, Uri uri) {
|
||||||
List<LinphoneContact> contacts = fetchContactsAsync();
|
fetchContactsAsync();
|
||||||
Message msg = handler.obtainMessage();
|
|
||||||
msg.what = CONTACTS_UPDATED;
|
|
||||||
msg.obj = contacts;
|
|
||||||
handler.sendMessage(msg);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContentResolver getContentResolver() {
|
public ContentResolver getContentResolver() {
|
||||||
|
@ -179,17 +174,13 @@ public class ContactsManager extends ContentObserver {
|
||||||
|
|
||||||
Account[] accounts = accountManager.getAccountsByType(context.getPackageName());
|
Account[] accounts = accountManager.getAccountsByType(context.getPackageName());
|
||||||
|
|
||||||
if(accounts != null && accounts.length == 0) {
|
if (accounts != null && accounts.length == 0) {
|
||||||
Account newAccount = new Account(context.getString(R.string.sync_account_name), context.getPackageName());
|
Account newAccount = new Account(context.getString(R.string.sync_account_name), context.getPackageName());
|
||||||
try {
|
try {
|
||||||
accountManager.addAccountExplicitly(newAccount, null, null);
|
accountManager.addAccountExplicitly(newAccount, null, null);
|
||||||
mAccount = newAccount;
|
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
mAccount = null;
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
mAccount = accounts[0];
|
|
||||||
}
|
}
|
||||||
initializeContactManager(context, contentResolver);
|
initializeContactManager(context, contentResolver);
|
||||||
}
|
}
|
||||||
|
@ -229,60 +220,99 @@ public class ContactsManager extends ContentObserver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void fetchContacts() {
|
public synchronized void fetchContactsAsync() {
|
||||||
setContacts(fetchContactsAsync());
|
if (contactsFetchTask != null && !contactsFetchTask.isCancelled()) {
|
||||||
|
contactsFetchTask.cancel(true);
|
||||||
|
}
|
||||||
|
contactsFetchTask = new ContactsFetchTask();
|
||||||
|
contactsFetchTask.execute();
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<LinphoneContact> fetchContactsAsync() {
|
|
||||||
List<LinphoneContact> contacts = new ArrayList<LinphoneContact>();
|
|
||||||
|
|
||||||
if (hasContactsAccess()) {
|
private class ContactsFetchTask extends AsyncTask<Void, List<LinphoneContact>, List<LinphoneContact>> {
|
||||||
Cursor c = Compatibility.getContactsCursor(contentResolver, null);
|
@SuppressWarnings("unchecked")
|
||||||
if (c != null) {
|
protected List<LinphoneContact> doInBackground(Void... params) {
|
||||||
while (c.moveToNext()) {
|
List<LinphoneContact> contacts = new ArrayList<LinphoneContact>();
|
||||||
String id = c.getString(c.getColumnIndex(Data.CONTACT_ID));
|
|
||||||
LinphoneContact contact = new LinphoneContact();
|
|
||||||
contact.setAndroidId(id);
|
|
||||||
contacts.add(contact);
|
|
||||||
}
|
|
||||||
c.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (LinphoneFriend friend : LinphoneManager.getLc().getFriendList()) {
|
if (hasContactsAccess()) {
|
||||||
String refkey = friend.getRefKey();
|
Cursor c = Compatibility.getContactsCursor(contentResolver, null);
|
||||||
if (refkey != null) {
|
if (c != null) {
|
||||||
boolean found = false;
|
while (c.moveToNext()) {
|
||||||
for (LinphoneContact contact : contacts) {
|
String id = c.getString(c.getColumnIndex(Data.CONTACT_ID));
|
||||||
if (refkey.equals(contact.getAndroidId())) {
|
LinphoneContact contact = new LinphoneContact();
|
||||||
contact.setFriend(friend);
|
contact.setAndroidId(id);
|
||||||
found = true;
|
contacts.add(contact);
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
c.close();
|
||||||
}
|
}
|
||||||
if (!found) {
|
}
|
||||||
|
|
||||||
|
for (LinphoneFriend friend : LinphoneManager.getLc().getFriendList()) {
|
||||||
|
String refkey = friend.getRefKey();
|
||||||
|
if (refkey != null) {
|
||||||
|
boolean found = false;
|
||||||
|
for (LinphoneContact contact : contacts) {
|
||||||
|
if (refkey.equals(contact.getAndroidId())) {
|
||||||
|
// Native matching contact found, link the friend to it
|
||||||
|
contact.setFriend(friend);
|
||||||
|
found = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
if (hasContactAccess) {
|
||||||
|
// If refkey != null and hasContactAccess but there isn't a native contact with this value, then this contact has been deleted. Let's do the same with the LinphoneFriend
|
||||||
|
LinphoneManager.getLc().removeFriend(friend);
|
||||||
|
} else {
|
||||||
|
// Refkey not null but no contact access => can't link it to native contact so display it on is own
|
||||||
|
LinphoneContact contact = new LinphoneContact();
|
||||||
|
contact.setFriend(friend);
|
||||||
|
contacts.add(contact);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// No refkey so it's a standalone contact
|
||||||
LinphoneContact contact = new LinphoneContact();
|
LinphoneContact contact = new LinphoneContact();
|
||||||
contact.setFriend(friend);
|
contact.setFriend(friend);
|
||||||
contacts.add(contact);
|
contacts.add(contact);
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
LinphoneContact contact = new LinphoneContact();
|
|
||||||
contact.setFriend(friend);
|
for (LinphoneContact contact : contacts) {
|
||||||
contacts.add(contact);
|
// This will only get name & picture informations to be able to quickly display contacts list
|
||||||
|
contact.minimalRefresh();
|
||||||
|
}
|
||||||
|
Collections.sort(contacts);
|
||||||
|
|
||||||
|
// Public the current list of contacts without all the informations populated
|
||||||
|
publishProgress(contacts);
|
||||||
|
|
||||||
|
for (LinphoneContact contact : contacts) {
|
||||||
|
// This time fetch all informations including phone numbers and SIP addresses
|
||||||
|
contact.refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
return contacts;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void onProgressUpdate(List<LinphoneContact>... result) {
|
||||||
|
setContacts(result[0]);
|
||||||
|
for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
|
||||||
|
listener.onContactsUpdated();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (LinphoneContact contact : contacts) {
|
protected void onPostExecute(List<LinphoneContact> result) {
|
||||||
contact.refresh();
|
setContacts(result);
|
||||||
|
for (ContactsUpdatedListener listener : contactsUpdatedListeners) {
|
||||||
|
listener.onContactsUpdated();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Collections.sort(contacts);
|
|
||||||
|
|
||||||
return contacts;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getAddressOrNumberForAndroidContact(ContentResolver resolver, Uri contactUri) {
|
public static String getAddressOrNumberForAndroidContact(ContentResolver resolver, Uri contactUri) {
|
||||||
// Phone Numbers
|
// Phone Numbers
|
||||||
String[] projection = new String[]{ ContactsContract.CommonDataKinds.Phone.NUMBER };
|
String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.NUMBER };
|
||||||
Cursor c = resolver.query(contactUri, projection, null, null, null);
|
Cursor c = resolver.query(contactUri, projection, null, null, null);
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
while (c.moveToNext()) {
|
while (c.moveToNext()) {
|
||||||
|
|
|
@ -36,11 +36,12 @@ import android.widget.TextView;
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
*/
|
*/
|
||||||
public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
private ImageView dialBack, chat, addToContacts, back;
|
private ImageView dialBack, chat, addToContacts, goToContact, back;
|
||||||
private View view;
|
private View view;
|
||||||
private ImageView contactPicture, callDirection;
|
private ImageView contactPicture, callDirection;
|
||||||
private TextView contactName, contactAddress, time, date;
|
private TextView contactName, contactAddress, time, date;
|
||||||
private String sipUri, displayName, pictureUri;
|
private String sipUri, displayName, pictureUri;
|
||||||
|
private LinphoneContact contact;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
@ -72,6 +73,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
addToContacts = (ImageView) view.findViewById(R.id.add_contact);
|
addToContacts = (ImageView) view.findViewById(R.id.add_contact);
|
||||||
addToContacts.setOnClickListener(this);
|
addToContacts.setOnClickListener(this);
|
||||||
|
|
||||||
|
goToContact = (ImageView) view.findViewById(R.id.goto_contact);
|
||||||
|
goToContact.setOnClickListener(this);
|
||||||
|
|
||||||
contactPicture = (ImageView) view.findViewById(R.id.contact_picture);
|
contactPicture = (ImageView) view.findViewById(R.id.contact_picture);
|
||||||
|
|
||||||
contactName = (TextView) view.findViewById(R.id.contact_name);
|
contactName = (TextView) view.findViewById(R.id.contact_name);
|
||||||
|
@ -107,17 +111,19 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(lAddress != null) {
|
if (lAddress != null) {
|
||||||
contactAddress.setText(lAddress.asStringUriOnly());
|
contactAddress.setText(lAddress.asStringUriOnly());
|
||||||
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(lAddress);
|
contact = ContactsManager.getInstance().findContactFromAddress(lAddress);
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
contactName.setText(contact.getFullName());
|
contactName.setText(contact.getFullName());
|
||||||
LinphoneUtils.setImagePictureFromUri(view.getContext(),contactPicture,contact.getPhotoUri(),contact.getThumbnailUri());
|
LinphoneUtils.setImagePictureFromUri(view.getContext(),contactPicture,contact.getPhotoUri(),contact.getThumbnailUri());
|
||||||
addToContacts.setVisibility(View.INVISIBLE);
|
addToContacts.setVisibility(View.GONE);
|
||||||
|
goToContact.setVisibility(View.VISIBLE);
|
||||||
} else {
|
} else {
|
||||||
contactName.setText(displayName == null ? LinphoneUtils.getAddressDisplayName(sipUri) : displayName);
|
contactName.setText(displayName == null ? LinphoneUtils.getAddressDisplayName(sipUri) : displayName);
|
||||||
contactPicture.setImageResource(R.drawable.avatar);
|
contactPicture.setImageResource(R.drawable.avatar);
|
||||||
addToContacts.setVisibility(View.VISIBLE);
|
addToContacts.setVisibility(View.VISIBLE);
|
||||||
|
goToContact.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
contactAddress.setText(sipUri);
|
contactAddress.setText(sipUri);
|
||||||
|
@ -165,6 +171,8 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
}
|
}
|
||||||
LinphoneActivity.instance().displayContactsForEdition(uri);
|
LinphoneActivity.instance().displayContactsForEdition(uri);
|
||||||
|
} else if (id == R.id.goto_contact) {
|
||||||
|
LinphoneActivity.instance().displayContact(contact, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,7 @@ import android.widget.TextView;
|
||||||
/**
|
/**
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
*/
|
*/
|
||||||
public class HistoryListFragment extends Fragment implements OnClickListener, OnItemClickListener {
|
public class HistoryListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener {
|
||||||
private ListView historyList;
|
private ListView historyList;
|
||||||
private LayoutInflater mInflater;
|
private LayoutInflater mInflater;
|
||||||
private TextView noCallHistory, noMissedCallHistory;
|
private TextView noCallHistory, noMissedCallHistory;
|
||||||
|
@ -198,6 +198,7 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
ContactsManager.addContactsListener(this);
|
||||||
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
LinphoneActivity.instance().selectMenu(FragmentsAvailable.HISTORY_LIST);
|
LinphoneActivity.instance().selectMenu(FragmentsAvailable.HISTORY_LIST);
|
||||||
|
@ -212,6 +213,17 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPause() {
|
||||||
|
ContactsManager.removeContactsListener(this);
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onContactsUpdated() {
|
||||||
|
historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext()));
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
int id = v.getId();
|
int id = v.getId();
|
||||||
|
@ -327,18 +339,20 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
|
||||||
topBar.setVisibility(View.VISIBLE);
|
topBar.setVisibility(View.VISIBLE);
|
||||||
|
|
||||||
refresh();
|
refresh();
|
||||||
if (!hideHistoryListAndDisplayMessageIfEmpty()){
|
if (!hideHistoryListAndDisplayMessageIfEmpty()) {
|
||||||
historyList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
|
historyList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
|
||||||
historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext()));
|
historyList.setAdapter(new CallHistoryAdapter(getActivity().getApplicationContext()));
|
||||||
}
|
}
|
||||||
if(getResources().getBoolean(R.bool.isTablet)){
|
if (getResources().getBoolean(R.bool.isTablet)) {
|
||||||
displayFirstLog();
|
displayFirstLog();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class CallHistoryAdapter extends BaseAdapter {
|
class CallHistoryAdapter extends BaseAdapter {
|
||||||
CallHistoryAdapter(Context aContext) {
|
CallHistoryAdapter(Context aContext) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getCount() {
|
public int getCount() {
|
||||||
return mLogs.size();
|
return mLogs.size();
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.support.v4.widget.DrawerLayout;
|
import android.support.v4.widget.DrawerLayout;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -81,7 +82,6 @@ import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.animation.AnimationUtils;
|
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.BaseAdapter;
|
import android.widget.BaseAdapter;
|
||||||
|
@ -104,6 +104,8 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
private static final int PERMISSIONS_REQUEST_OVERLAY = 206;
|
private static final int PERMISSIONS_REQUEST_OVERLAY = 206;
|
||||||
private static final int PERMISSIONS_REQUEST_SYNC = 207;
|
private static final int PERMISSIONS_REQUEST_SYNC = 207;
|
||||||
private static final int PERMISSIONS_REQUEST_CONTACTS = 208;
|
private static final int PERMISSIONS_REQUEST_CONTACTS = 208;
|
||||||
|
private static final int PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER = 209;
|
||||||
|
private static final int PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE = 210;
|
||||||
|
|
||||||
private static LinphoneActivity instance;
|
private static LinphoneActivity instance;
|
||||||
|
|
||||||
|
@ -113,11 +115,12 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
private View contacts_selected, history_selected, dialer_selected, chat_selected;
|
private View contacts_selected, history_selected, dialer_selected, chat_selected;
|
||||||
private RelativeLayout mTopBar;
|
private RelativeLayout mTopBar;
|
||||||
private ImageView cancel;
|
private ImageView cancel;
|
||||||
private FragmentsAvailable pendingFragmentTransaction, currentFragment, nextFragment;
|
private FragmentsAvailable pendingFragmentTransaction, currentFragment;
|
||||||
|
private Fragment fragment;
|
||||||
private List<FragmentsAvailable> fragmentsHistory;
|
private List<FragmentsAvailable> fragmentsHistory;
|
||||||
private Fragment.SavedState dialerSavedState;
|
private Fragment.SavedState dialerSavedState;
|
||||||
private boolean newProxyConfig;
|
private boolean newProxyConfig;
|
||||||
private boolean isAnimationDisabled = true, emptyFragment = false;
|
private boolean emptyFragment = false;
|
||||||
private OrientationEventListener mOrientationHelper;
|
private OrientationEventListener mOrientationHelper;
|
||||||
private LinphoneCoreListenerBase mListener;
|
private LinphoneCoreListenerBase mListener;
|
||||||
private LinearLayout mTabBar;
|
private LinearLayout mTabBar;
|
||||||
|
@ -194,9 +197,11 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
initButtons();
|
initButtons();
|
||||||
initSideMenu();
|
initSideMenu();
|
||||||
|
|
||||||
currentFragment = nextFragment = FragmentsAvailable.EMPTY;
|
currentFragment = FragmentsAvailable.EMPTY;
|
||||||
if (savedInstanceState == null) {
|
if (savedInstanceState == null) {
|
||||||
changeCurrentFragment(FragmentsAvailable.DIALER, getIntent().getExtras());
|
changeCurrentFragment(FragmentsAvailable.DIALER, getIntent().getExtras());
|
||||||
|
} else {
|
||||||
|
currentFragment = (FragmentsAvailable) savedInstanceState.getSerializable("currentFragment");
|
||||||
}
|
}
|
||||||
|
|
||||||
mListener = new LinphoneCoreListenerBase(){
|
mListener = new LinphoneCoreListenerBase(){
|
||||||
|
@ -273,8 +278,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
|
|
||||||
LinphoneManager.getLc().setDeviceRotation(rotation);
|
LinphoneManager.getLc().setDeviceRotation(rotation);
|
||||||
mAlwaysChangingPhoneAngle = rotation;
|
mAlwaysChangingPhoneAngle = rotation;
|
||||||
|
|
||||||
updateAnimationsState();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initButtons() {
|
private void initButtons() {
|
||||||
|
@ -337,7 +340,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
if (newFragmentType == currentFragment && newFragmentType != FragmentsAvailable.CHAT) {
|
if (newFragmentType == currentFragment && newFragmentType != FragmentsAvailable.CHAT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
nextFragment = newFragmentType;
|
|
||||||
|
|
||||||
if (currentFragment == FragmentsAvailable.DIALER) {
|
if (currentFragment == FragmentsAvailable.DIALER) {
|
||||||
try {
|
try {
|
||||||
|
@ -347,81 +349,76 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Fragment newFragment = null;
|
fragment = null;
|
||||||
|
|
||||||
switch (newFragmentType) {
|
switch (newFragmentType) {
|
||||||
case HISTORY_LIST:
|
case HISTORY_LIST:
|
||||||
newFragment = new HistoryListFragment();
|
fragment = new HistoryListFragment();
|
||||||
if (isTablet()) {
|
|
||||||
((HistoryListFragment) newFragment).displayFirstLog();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case HISTORY_DETAIL:
|
case HISTORY_DETAIL:
|
||||||
newFragment = new HistoryDetailFragment();
|
fragment = new HistoryDetailFragment();
|
||||||
break;
|
break;
|
||||||
case CONTACTS_LIST:
|
case CONTACTS_LIST:
|
||||||
checkAndRequestReadContactsPermission();
|
checkAndRequestReadContactsPermission();
|
||||||
newFragment = new ContactsListFragment();
|
fragment = new ContactsListFragment();
|
||||||
if (isTablet()) {
|
|
||||||
((ContactsListFragment) newFragment).displayFirstContact();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CONTACT_DETAIL:
|
case CONTACT_DETAIL:
|
||||||
newFragment = new ContactDetailsFragment();
|
fragment = new ContactDetailsFragment();
|
||||||
break;
|
break;
|
||||||
case CONTACT_EDITOR:
|
case CONTACT_EDITOR:
|
||||||
newFragment = new ContactEditorFragment();
|
fragment = new ContactEditorFragment();
|
||||||
break;
|
break;
|
||||||
case DIALER:
|
case DIALER:
|
||||||
newFragment = new DialerFragment();
|
fragment = new DialerFragment();
|
||||||
if (extras == null) {
|
if (extras == null) {
|
||||||
newFragment.setInitialSavedState(dialerSavedState);
|
fragment.setInitialSavedState(dialerSavedState);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case SETTINGS:
|
case SETTINGS:
|
||||||
newFragment = new SettingsFragment();
|
fragment = new SettingsFragment();
|
||||||
break;
|
break;
|
||||||
case ACCOUNT_SETTINGS:
|
case ACCOUNT_SETTINGS:
|
||||||
newFragment = new AccountPreferencesFragment();
|
fragment = new AccountPreferencesFragment();
|
||||||
break;
|
break;
|
||||||
case ABOUT:
|
case ABOUT:
|
||||||
newFragment = new AboutFragment();
|
fragment = new AboutFragment();
|
||||||
break;
|
break;
|
||||||
case EMPTY:
|
case EMPTY:
|
||||||
newFragment = new EmptyFragment();
|
fragment = new EmptyFragment();
|
||||||
break;
|
break;
|
||||||
case CHAT_LIST:
|
case CHAT_LIST:
|
||||||
newFragment = new ChatListFragment();
|
fragment = new ChatListFragment();
|
||||||
if (isTablet()) {
|
|
||||||
((ChatListFragment) newFragment).displayFirstChat();
|
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case CHAT:
|
case CHAT:
|
||||||
newFragment = new ChatFragment();
|
fragment = new ChatFragment();
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (newFragment != null) {
|
if (fragment != null) {
|
||||||
newFragment.setArguments(extras);
|
fragment.setArguments(extras);
|
||||||
if (isTablet()) {
|
if (isTablet()) {
|
||||||
changeFragmentForTablets(newFragment, newFragmentType, withoutAnimation);
|
changeFragmentForTablets(fragment, newFragmentType, withoutAnimation);
|
||||||
|
switch (newFragmentType) {
|
||||||
|
case HISTORY_LIST:
|
||||||
|
((HistoryListFragment) fragment).displayFirstLog();
|
||||||
|
break;
|
||||||
|
case CONTACTS_LIST:
|
||||||
|
((ContactsListFragment) fragment).displayFirstContact();
|
||||||
|
break;
|
||||||
|
case CHAT_LIST:
|
||||||
|
((ChatListFragment) fragment).displayFirstChat();
|
||||||
|
break;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
changeFragment(newFragment, newFragmentType, withoutAnimation);
|
changeFragment(fragment, newFragmentType, withoutAnimation);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateAnimationsState() {
|
|
||||||
isAnimationDisabled = getResources().getBoolean(R.bool.disable_animations) || !LinphonePreferences.instance().areAnimationsEnabled();
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isAnimationDisabled() {
|
|
||||||
return isAnimationDisabled;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
|
private void changeFragment(Fragment newFragment, FragmentsAvailable newFragmentType, boolean withoutAnimation) {
|
||||||
|
|
||||||
FragmentManager fm = getFragmentManager();
|
FragmentManager fm = getFragmentManager();
|
||||||
FragmentTransaction transaction = fm.beginTransaction();
|
FragmentTransaction transaction = fm.beginTransaction();
|
||||||
|
|
||||||
|
@ -784,12 +781,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
changeCurrentFragment(FragmentsAvailable.SETTINGS, null);
|
changeCurrentFragment(FragmentsAvailable.SETTINGS, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void applyConfigChangesIfNeeded() {
|
|
||||||
if (nextFragment != FragmentsAvailable.SETTINGS && nextFragment != FragmentsAvailable.ACCOUNT_SETTINGS) {
|
|
||||||
updateAnimationsState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void displayDialer() {
|
public void displayDialer() {
|
||||||
changeCurrentFragment(FragmentsAvailable.DIALER, null);
|
changeCurrentFragment(FragmentsAvailable.DIALER, null);
|
||||||
}
|
}
|
||||||
|
@ -856,9 +847,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
if (missedCallsCount > 0) {
|
if (missedCallsCount > 0) {
|
||||||
missedCalls.setText(missedCallsCount + "");
|
missedCalls.setText(missedCallsCount + "");
|
||||||
missedCalls.setVisibility(View.VISIBLE);
|
missedCalls.setVisibility(View.VISIBLE);
|
||||||
if (!isAnimationDisabled) {
|
|
||||||
missedCalls.startAnimation(AnimationUtils.loadAnimation(LinphoneActivity.this, R.anim.bounce));
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
LinphoneManager.getLc().resetMissedCallsCount();
|
LinphoneManager.getLc().resetMissedCallsCount();
|
||||||
missedCalls.clearAnimation();
|
missedCalls.clearAnimation();
|
||||||
|
@ -870,12 +858,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
if (missedChatCount > 0) {
|
if (missedChatCount > 0) {
|
||||||
missedChats.setText(missedChatCount + "");
|
missedChats.setText(missedChatCount + "");
|
||||||
missedChats.setVisibility(View.VISIBLE);
|
missedChats.setVisibility(View.VISIBLE);
|
||||||
if (!isAnimationDisabled) {
|
|
||||||
missedChats.startAnimation(AnimationUtils.loadAnimation(LinphoneActivity.this, R.anim.bounce));
|
|
||||||
}
|
|
||||||
if(missedChatCount > 99){
|
|
||||||
//TODO
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
missedChats.clearAnimation();
|
missedChats.clearAnimation();
|
||||||
missedChats.setVisibility(View.GONE);
|
missedChats.setVisibility(View.GONE);
|
||||||
|
@ -899,7 +881,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
public Dialog displayDialog(String text){
|
public Dialog displayDialog(String text){
|
||||||
Dialog dialog = new Dialog(this);
|
Dialog dialog = new Dialog(this);
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorC));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorC));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
dialog.setContentView(R.layout.dialog);
|
dialog.setContentView(R.layout.dialog);
|
||||||
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
|
@ -913,7 +895,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
public Dialog displayWrongPasswordDialog(final String username, final String realm, final String domain){
|
public Dialog displayWrongPasswordDialog(final String username, final String realm, final String domain){
|
||||||
final Dialog dialog = new Dialog(this);
|
final Dialog dialog = new Dialog(this);
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorC));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorC));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
dialog.setContentView(R.layout.input_dialog);
|
dialog.setContentView(R.layout.input_dialog);
|
||||||
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
|
@ -1134,6 +1116,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public static boolean isApplicationBroughtToBackground(final Activity activity) {
|
public static boolean isApplicationBroughtToBackground(final Activity activity) {
|
||||||
ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
|
ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
|
||||||
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
|
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
|
||||||
|
@ -1186,6 +1169,14 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, 0);
|
checkAndRequestPermission(Manifest.permission.WRITE_CONTACTS, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void checkAndRequestRecordAudioPermissionForEchoCanceller() {
|
||||||
|
checkAndRequestPermission(Manifest.permission.RECORD_AUDIO, PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void checkAndRequestReadExternalStoragePermissionForDeviceRingtone() {
|
||||||
|
checkAndRequestPermission(Manifest.permission.READ_EXTERNAL_STORAGE, PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE);
|
||||||
|
}
|
||||||
|
|
||||||
public void checkAndRequestPermissionsToSendImage() {
|
public void checkAndRequestPermissionsToSendImage() {
|
||||||
ArrayList<String> permissionsList = new ArrayList<String>();
|
ArrayList<String> permissionsList = new ArrayList<String>();
|
||||||
|
|
||||||
|
@ -1246,9 +1237,19 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
case PERMISSIONS_REQUEST_CONTACTS:
|
case PERMISSIONS_REQUEST_CONTACTS:
|
||||||
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
ContactsManager.getInstance().enableContactsAccess();
|
ContactsManager.getInstance().enableContactsAccess();
|
||||||
ContactsManager.getInstance().fetchContacts();
|
|
||||||
fetchedContactsOnce = true;
|
|
||||||
}
|
}
|
||||||
|
ContactsManager.getInstance().fetchContactsAsync();
|
||||||
|
fetchedContactsOnce = true;
|
||||||
|
break;
|
||||||
|
case PERMISSIONS_RECORD_AUDIO_ECHO_CANCELLER:
|
||||||
|
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
((SettingsFragment) fragment).startEchoCancellerCalibration();
|
||||||
|
} else {
|
||||||
|
((SettingsFragment) fragment).echoCalibrationFail();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PERMISSIONS_READ_EXTERNAL_STORAGE_DEVICE_RINGTONE:
|
||||||
|
((SettingsFragment) fragment).enableDeviceRingtone(grantResults[0] == PackageManager.PERMISSION_GRANTED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1262,13 +1263,19 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
|
|
||||||
if (contacts == PackageManager.PERMISSION_GRANTED && !fetchedContactsOnce) {
|
if (contacts == PackageManager.PERMISSION_GRANTED && !fetchedContactsOnce) {
|
||||||
ContactsManager.getInstance().enableContactsAccess();
|
ContactsManager.getInstance().enableContactsAccess();
|
||||||
ContactsManager.getInstance().fetchContacts();
|
ContactsManager.getInstance().fetchContactsAsync();
|
||||||
fetchedContactsOnce = true;
|
fetchedContactsOnce = true;
|
||||||
} else {
|
} else {
|
||||||
checkAndRequestReadContactsPermission();
|
checkAndRequestReadContactsPermission();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
outState.putSerializable("currentFragment", currentFragment);
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
@ -1282,6 +1289,13 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
lc.addListener(mListener);
|
lc.addListener(mListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isTablet()) {
|
||||||
|
LinearLayout ll = (LinearLayout) findViewById(R.id.fragmentContainer2);
|
||||||
|
if (currentFragment == FragmentsAvailable.DIALER) {
|
||||||
|
ll.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
refreshAccounts();
|
refreshAccounts();
|
||||||
|
|
||||||
updateMissedChatCount();
|
updateMissedChatCount();
|
||||||
|
@ -1400,12 +1414,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
|
||||||
} else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) {
|
} else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
if (isTablet()) {
|
|
||||||
if (currentFragment == FragmentsAvailable.SETTINGS) {
|
|
||||||
updateAnimationsState();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.onKeyDown(keyCode, event);
|
return super.onKeyDown(keyCode, event);
|
||||||
|
|
|
@ -20,6 +20,7 @@ package org.linphone;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
|
|
||||||
|
@ -48,7 +49,7 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
private static final long serialVersionUID = 9015568163905205244L;
|
private static final long serialVersionUID = 9015568163905205244L;
|
||||||
|
|
||||||
private transient LinphoneFriend friend;
|
private transient LinphoneFriend friend;
|
||||||
private String fullName, firstName, lastName, androidId, androidRawId, androidTagId;
|
private String fullName, firstName, lastName, androidId, androidRawId, androidTagId, organization;
|
||||||
private transient Uri photoUri, thumbnailUri;
|
private transient Uri photoUri, thumbnailUri;
|
||||||
private List<LinphoneNumberOrAddress> addresses;
|
private List<LinphoneNumberOrAddress> addresses;
|
||||||
private transient ArrayList<ContentProviderOperation> changesToCommit;
|
private transient ArrayList<ContentProviderOperation> changesToCommit;
|
||||||
|
@ -65,6 +66,15 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
hasSipAddress = false;
|
hasSipAddress = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(LinphoneContact contact) {
|
||||||
|
String fullName = getFullName();
|
||||||
|
String contactFullName = contact.getFullName();
|
||||||
|
String firstLetter = fullName == null || fullName.isEmpty() ? "" : fullName.substring(0, 1).toUpperCase(Locale.getDefault());
|
||||||
|
String contactfirstLetter = contactFullName == null || contactFullName.isEmpty() ? "" : contactFullName.substring(0, 1).toUpperCase(Locale.getDefault());
|
||||||
|
return firstLetter.compareTo(contactfirstLetter);
|
||||||
|
}
|
||||||
|
|
||||||
public void setFullName(String name) {
|
public void setFullName(String name) {
|
||||||
fullName = name;
|
fullName = name;
|
||||||
}
|
}
|
||||||
|
@ -117,6 +127,41 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
return lastName;
|
return lastName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getOrganization() {
|
||||||
|
return organization;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOrganization(String org) {
|
||||||
|
if (isAndroidContact()) {
|
||||||
|
if (androidRawId != null) {
|
||||||
|
String select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE + "'";
|
||||||
|
String[] args = new String[]{ getAndroidId() };
|
||||||
|
|
||||||
|
if (organization != null) {
|
||||||
|
changesToCommit.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
|
||||||
|
.withSelection(select, args)
|
||||||
|
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
|
||||||
|
.withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, org)
|
||||||
|
.build());
|
||||||
|
} else {
|
||||||
|
changesToCommit.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
|
||||||
|
.withValue(ContactsContract.Data.RAW_CONTACT_ID, androidRawId)
|
||||||
|
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
|
||||||
|
.withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, org)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
changesToCommit.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
|
||||||
|
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
|
||||||
|
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
|
||||||
|
.withValue(ContactsContract.CommonDataKinds.Organization.COMPANY, org)
|
||||||
|
.build());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
organization = org;
|
||||||
|
}
|
||||||
|
|
||||||
public boolean hasPhoto() {
|
public boolean hasPhoto() {
|
||||||
return photoUri != null;
|
return photoUri != null;
|
||||||
}
|
}
|
||||||
|
@ -351,6 +396,72 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
return androidId;
|
return androidId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void createOrUpdateFriend() {
|
||||||
|
if (!isLinphoneFriend()) {
|
||||||
|
friend = LinphoneCoreFactory.instance().createLinphoneFriend();
|
||||||
|
friend.enableSubscribes(false);
|
||||||
|
friend.setIncSubscribePolicy(SubscribePolicy.SPDeny);
|
||||||
|
if (isAndroidContact()) {
|
||||||
|
friend.setRefKey(getAndroidId());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (isLinphoneFriend()) {
|
||||||
|
updateFriend();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateFriend() {
|
||||||
|
if (!isLinphoneFriend()) return;
|
||||||
|
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
if (lc == null) return;
|
||||||
|
|
||||||
|
friend.edit();
|
||||||
|
friend.setFamilyName(lastName);
|
||||||
|
friend.setGivenName(firstName);
|
||||||
|
|
||||||
|
for (LinphoneAddress address : friend.getAddresses()) {
|
||||||
|
friend.removeAddress(address);
|
||||||
|
}
|
||||||
|
for (String phone : friend.getPhoneNumbers()) {
|
||||||
|
friend.removePhoneNumber(phone);
|
||||||
|
}
|
||||||
|
if (organization != null && !organization.isEmpty()) {
|
||||||
|
friend.setOrganization(organization);
|
||||||
|
}
|
||||||
|
for (LinphoneNumberOrAddress noa : addresses) {
|
||||||
|
if (noa.isSIPAddress()) {
|
||||||
|
try {
|
||||||
|
LinphoneAddress addr = lc.interpretUrl(noa.getValue());
|
||||||
|
if (addr != null) {
|
||||||
|
friend.addAddress(addr);
|
||||||
|
}
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
Log.e(e);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
friend.addPhoneNumber(noa.getValue());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
friend.setName(fullName);
|
||||||
|
friend.done();
|
||||||
|
|
||||||
|
if (friend.getAddress() != null) {
|
||||||
|
if (lc.findFriendByAddress(friend.getAddress().asString()) == null) {
|
||||||
|
try {
|
||||||
|
lc.addFriend(friend);
|
||||||
|
if (!ContactsManager.getInstance().hasContactsAccess()) {
|
||||||
|
// This refresh is only needed if app has no contacts permission to refresh the list of LinphoneFriends.
|
||||||
|
// Otherwise contacts will be refreshed due to changes in native contact and the handler in ContactsManager
|
||||||
|
ContactsManager.getInstance().fetchContactsAsync();
|
||||||
|
}
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
Log.e(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void save() {
|
public void save() {
|
||||||
if (isAndroidContact() && ContactsManager.getInstance().hasContactsAccess() && changesToCommit.size() > 0) {
|
if (isAndroidContact() && ContactsManager.getInstance().hasContactsAccess() && changesToCommit.size() > 0) {
|
||||||
try {
|
try {
|
||||||
|
@ -364,49 +475,7 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLinphoneFriend()) {
|
createOrUpdateFriend();
|
||||||
boolean hasAddr = false;
|
|
||||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
if (lc == null) return;
|
|
||||||
|
|
||||||
friend.edit();
|
|
||||||
for (LinphoneAddress address : friend.getAddresses()) {
|
|
||||||
friend.removeAddress(address);
|
|
||||||
}
|
|
||||||
for (String phone : friend.getPhoneNumbers()) {
|
|
||||||
friend.removePhoneNumber(phone);
|
|
||||||
}
|
|
||||||
for (LinphoneNumberOrAddress noa : addresses) {
|
|
||||||
if (noa.isSIPAddress()) {
|
|
||||||
try {
|
|
||||||
LinphoneAddress addr = lc.interpretUrl(noa.getValue());
|
|
||||||
if (addr != null) {
|
|
||||||
friend.addAddress(addr);
|
|
||||||
hasAddr = true;
|
|
||||||
}
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
friend.addPhoneNumber(noa.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (hasAddr) {
|
|
||||||
friend.setName(fullName);
|
|
||||||
}
|
|
||||||
friend.done();
|
|
||||||
|
|
||||||
if (friend.getAddress() != null) {
|
|
||||||
if (lc.findFriendByAddress(friend.getAddress().asString()) == null) {
|
|
||||||
try {
|
|
||||||
lc.addFriend(friend);
|
|
||||||
ContactsManager.getInstance().fetchContacts();
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete() {
|
public void delete() {
|
||||||
|
@ -427,14 +496,38 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void minimalRefresh() {
|
||||||
|
hasSipAddress = false;
|
||||||
|
|
||||||
|
if (isAndroidContact()) {
|
||||||
|
getContactNames();
|
||||||
|
setThumbnailUri(getContactThumbnailPictureUri());
|
||||||
|
setPhotoUri(getContactPictureUri());
|
||||||
|
getNativeContactOrganization();
|
||||||
|
|
||||||
|
if (isLinphoneFriend()) {
|
||||||
|
hasSipAddress = friend.getAddress() != null;
|
||||||
|
}
|
||||||
|
} else if (isLinphoneFriend()) {
|
||||||
|
fullName = friend.getName();
|
||||||
|
lastName = friend.getFamilyName();
|
||||||
|
firstName = friend.getGivenName();
|
||||||
|
thumbnailUri = null;
|
||||||
|
photoUri = null;
|
||||||
|
hasSipAddress = friend.getAddress() != null;
|
||||||
|
organization = friend.getOrganization();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void refresh() {
|
public void refresh() {
|
||||||
addresses = new ArrayList<LinphoneNumberOrAddress>();
|
addresses = new ArrayList<LinphoneNumberOrAddress>();
|
||||||
hasSipAddress = false;
|
hasSipAddress = false;
|
||||||
|
|
||||||
if (isAndroidContact()) {
|
if (isAndroidContact()) {
|
||||||
getContactNames();
|
getContactNames();
|
||||||
setThumbnailUri(getContactPictureUri());
|
setThumbnailUri(getContactThumbnailPictureUri());
|
||||||
setPhotoUri(getContactPhotoUri());
|
setPhotoUri(getContactPictureUri());
|
||||||
|
|
||||||
androidRawId = findRawContactID();
|
androidRawId = findRawContactID();
|
||||||
|
|
||||||
if (LinphoneManager.getInstance().getContext().getResources().getBoolean(R.bool.use_linphone_tag)) {
|
if (LinphoneManager.getInstance().getContext().getResources().getBoolean(R.bool.use_linphone_tag)) {
|
||||||
|
@ -445,46 +538,29 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
addNumberOrAddress(noa);
|
addNumberOrAddress(noa);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (friend == null) {
|
createOrUpdateFriend();
|
||||||
friend = LinphoneCoreFactory.instance().createLinphoneFriend();
|
|
||||||
friend.setRefKey(getAndroidId());
|
|
||||||
// Disable subscribes for now
|
|
||||||
friend.enableSubscribes(false);
|
|
||||||
friend.setIncSubscribePolicy(SubscribePolicy.SPDeny);
|
|
||||||
if (hasSipAddress) {
|
|
||||||
for (LinphoneNumberOrAddress noa : addresses) {
|
|
||||||
if (noa.isSIPAddress()) {
|
|
||||||
try {
|
|
||||||
LinphoneAddress addr = LinphoneManager.getLc().interpretUrl(noa.getValue());
|
|
||||||
if (addr != null) {
|
|
||||||
friend.addAddress(addr);
|
|
||||||
}
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
friend.addPhoneNumber(noa.getValue());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
|
||||||
if (lc != null && friend.getAddress() != null) {
|
|
||||||
friend.setName(fullName);
|
|
||||||
try {
|
|
||||||
lc.addFriend(friend);
|
|
||||||
} catch (LinphoneCoreException e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (isLinphoneFriend()) {
|
} else if (isLinphoneFriend()) {
|
||||||
fullName = friend.getName();
|
fullName = friend.getName();
|
||||||
|
lastName = friend.getFamilyName();
|
||||||
|
firstName = friend.getGivenName();
|
||||||
thumbnailUri = null;
|
thumbnailUri = null;
|
||||||
photoUri = null;
|
photoUri = null;
|
||||||
LinphoneAddress addr = friend.getAddress();
|
|
||||||
if (addr != null) {
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
addresses.add(new LinphoneNumberOrAddress(addr.asStringUriOnly(), true));
|
if (lc != null && lc.isVCardSupported()) {
|
||||||
hasSipAddress = true;
|
for (LinphoneAddress addr : friend.getAddresses()) {
|
||||||
|
if (addr != null) {
|
||||||
|
addNumberOrAddress(new LinphoneNumberOrAddress(addr.asStringUriOnly(), true));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (String tel : friend.getPhoneNumbers()) {
|
||||||
|
if (tel != null) {
|
||||||
|
addNumberOrAddress(new LinphoneNumberOrAddress(tel, false));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
LinphoneAddress addr = friend.getAddress();
|
||||||
|
addNumberOrAddress(new LinphoneNumberOrAddress(addr.asStringUriOnly(), true));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -512,21 +588,12 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
return createLinphoneFriend();
|
return createLinphoneFriend();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private Uri getContactThumbnailPictureUri() {
|
||||||
public int compareTo(LinphoneContact contact) {
|
|
||||||
String fullName = getFullName();
|
|
||||||
String contactFullName = contact.getFullName();
|
|
||||||
String firstLetter = fullName == null || fullName.isEmpty() ? "" : fullName.substring(0, 1).toUpperCase(Locale.getDefault());
|
|
||||||
String contactfirstLetter = contactFullName == null || contactFullName.isEmpty() ? "" : contactFullName.substring(0, 1).toUpperCase(Locale.getDefault());
|
|
||||||
return firstLetter.compareTo(contactfirstLetter);
|
|
||||||
}
|
|
||||||
|
|
||||||
private Uri getContactPictureUri() {
|
|
||||||
Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(getAndroidId()));
|
Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(getAndroidId()));
|
||||||
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
|
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.CONTENT_DIRECTORY);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Uri getContactPhotoUri() {
|
private Uri getContactPictureUri() {
|
||||||
Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(getAndroidId()));
|
Uri person = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, Long.parseLong(getAndroidId()));
|
||||||
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
|
return Uri.withAppendedPath(person, ContactsContract.Contacts.Photo.DISPLAY_PHOTO);
|
||||||
}
|
}
|
||||||
|
@ -547,6 +614,20 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void getNativeContactOrganization() {
|
||||||
|
ContentResolver resolver = ContactsManager.getInstance().getContentResolver();
|
||||||
|
String[] proj = new String[]{ ContactsContract.CommonDataKinds.Organization.COMPANY };
|
||||||
|
String select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "=?";
|
||||||
|
String[] args = new String[]{ getAndroidId(), ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE };
|
||||||
|
Cursor c = resolver.query(ContactsContract.Data.CONTENT_URI, proj, select, args, null);
|
||||||
|
if (c != null) {
|
||||||
|
if (c.moveToFirst()) {
|
||||||
|
organization = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Organization.COMPANY));
|
||||||
|
}
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String findRawContactID() {
|
private String findRawContactID() {
|
||||||
ContentResolver resolver = ContactsManager.getInstance().getContentResolver();
|
ContentResolver resolver = ContactsManager.getInstance().getContentResolver();
|
||||||
String result = null;
|
String result = null;
|
||||||
|
@ -596,7 +677,7 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
}
|
}
|
||||||
c.close();
|
c.close();
|
||||||
}
|
}
|
||||||
|
Collections.sort(result);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -25,16 +25,13 @@ import static android.media.AudioManager.STREAM_VOICE_CALL;
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
import java.io.FileNotFoundException;
|
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.Timer;
|
import java.util.Timer;
|
||||||
import java.util.TimerTask;
|
import java.util.TimerTask;
|
||||||
|
@ -87,15 +84,12 @@ import android.app.AlertDialog;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.ContentResolver;
|
import android.content.ContentResolver;
|
||||||
import android.content.ContentValues;
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
import android.graphics.Bitmap;
|
|
||||||
import android.graphics.BitmapFactory;
|
|
||||||
import android.hardware.Sensor;
|
import android.hardware.Sensor;
|
||||||
import android.hardware.SensorEvent;
|
import android.hardware.SensorEvent;
|
||||||
import android.hardware.SensorEventListener;
|
import android.hardware.SensorEventListener;
|
||||||
|
@ -106,7 +100,6 @@ import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Environment;
|
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.PowerManager;
|
import android.os.PowerManager;
|
||||||
import android.os.PowerManager.WakeLock;
|
import android.os.PowerManager.WakeLock;
|
||||||
|
@ -180,7 +173,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
mLinphoneFactoryConfigFile = 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 + "/ringtone.mkv";
|
||||||
mRingbackSoundFile = basePath + "/ringback.wav";
|
mRingbackSoundFile = basePath + "/ringback.wav";
|
||||||
mPauseSoundFile = basePath + "/hold.mkv";
|
mPauseSoundFile = basePath + "/hold.mkv";
|
||||||
mChatDatabaseFile = basePath + "/linphone-history.db";
|
mChatDatabaseFile = basePath + "/linphone-history.db";
|
||||||
|
@ -290,14 +283,19 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
routeAudioToSpeakerHelper(true);
|
routeAudioToSpeakerHelper(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getUserAgent() throws NameNotFoundException {
|
public String getUserAgent() {
|
||||||
StringBuilder userAgent = new StringBuilder();
|
try {
|
||||||
userAgent.append("LinphoneAndroid/" + mServiceContext.getPackageManager().getPackageInfo(mServiceContext.getPackageName(),0).versionCode);
|
StringBuilder userAgent = new StringBuilder();
|
||||||
userAgent.append(" (");
|
userAgent.append("LinphoneAndroid/" + mServiceContext.getPackageManager().getPackageInfo(mServiceContext.getPackageName(),0).versionCode);
|
||||||
userAgent.append("Linphone/" + LinphoneManager.getLc().getVersion() + "; ");
|
userAgent.append(" (");
|
||||||
userAgent.append(Build.DEVICE + " " + Build.MODEL + " Android/" + Build.VERSION.SDK_INT);
|
userAgent.append("Linphone/" + LinphoneManager.getLc().getVersion() + "; ");
|
||||||
userAgent.append(")");
|
userAgent.append(Build.DEVICE + " " + Build.MODEL + " Android/" + Build.VERSION.SDK_INT);
|
||||||
return userAgent.toString();
|
userAgent.append(")");
|
||||||
|
return userAgent.toString();
|
||||||
|
} catch (NameNotFoundException nnfe) {
|
||||||
|
Log.e(nnfe);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void routeAudioToReceiver() {
|
public void routeAudioToReceiver() {
|
||||||
|
@ -359,40 +357,6 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
this.mUploadingImageStream = array;
|
this.mUploadingImageStream = array;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void storeImage(LinphoneChatMessage msg) {
|
|
||||||
if (msg == null || msg.getFileTransferInformation() == null || msg.getAppData() == null) return;
|
|
||||||
File file = new File(Environment.getExternalStorageDirectory(), msg.getAppData());
|
|
||||||
Bitmap bm = BitmapFactory.decodeFile(file.getPath());
|
|
||||||
if (bm == null) return;
|
|
||||||
|
|
||||||
ContentValues values = new ContentValues();
|
|
||||||
values.put(Images.Media.TITLE, file.getName());
|
|
||||||
String extension = msg.getFileTransferInformation().getSubtype();
|
|
||||||
values.put(Images.Media.MIME_TYPE, "image/" + extension);
|
|
||||||
ContentResolver cr = getContext().getContentResolver();
|
|
||||||
Uri path = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
|
|
||||||
|
|
||||||
OutputStream stream;
|
|
||||||
try {
|
|
||||||
stream = cr.openOutputStream(path);
|
|
||||||
if (extension != null && extension.toLowerCase(Locale.getDefault()).equals("png")) {
|
|
||||||
bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
|
|
||||||
} else {
|
|
||||||
bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
stream.close();
|
|
||||||
file.delete();
|
|
||||||
bm.recycle();
|
|
||||||
|
|
||||||
msg.setAppData(path.toString());
|
|
||||||
} catch (FileNotFoundException e) {
|
|
||||||
Log.e(e);
|
|
||||||
} catch (IOException e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, LinphoneChatMessage.State state) {
|
public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, LinphoneChatMessage.State state) {
|
||||||
if (state == LinphoneChatMessage.State.FileTransferDone) {
|
if (state == LinphoneChatMessage.State.FileTransferDone) {
|
||||||
|
@ -400,7 +364,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
mUploadPendingFileMessage = null;
|
mUploadPendingFileMessage = null;
|
||||||
mUploadingImageStream = null;
|
mUploadingImageStream = null;
|
||||||
} else {
|
} else {
|
||||||
storeImage(msg);
|
LinphoneUtils.storeImage(getContext(), msg);
|
||||||
removePendingMessage(msg);
|
removePendingMessage(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -761,12 +725,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
} catch (NameNotFoundException e) {
|
} catch (NameNotFoundException e) {
|
||||||
Log.e(e, "cannot get version name");
|
Log.e(e, "cannot get version name");
|
||||||
}
|
}
|
||||||
mLc.setRing(mRingSoundFile);
|
|
||||||
if (mR.getBoolean(R.bool.use_linphonecore_ringing)) {
|
|
||||||
disableRinging();
|
|
||||||
} else {
|
|
||||||
mLc.setRing(null); //We'll use the android media player api to play the ringtone
|
|
||||||
}
|
|
||||||
mLc.setRingback(mRingbackSoundFile);
|
mLc.setRingback(mRingbackSoundFile);
|
||||||
mLc.setRootCA(mLinphoneRootCaFile);
|
mLc.setRootCA(mLinphoneRootCaFile);
|
||||||
mLc.setPlayFile(mPauseSoundFile);
|
mLc.setPlayFile(mPauseSoundFile);
|
||||||
|
@ -776,6 +735,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
mLc.setUserCertificatesPath(mUserCertificatePath);
|
mLc.setUserCertificatesPath(mUserCertificatePath);
|
||||||
subscribeFriendList(mPrefs.isFriendlistsubscriptionEnabled());
|
subscribeFriendList(mPrefs.isFriendlistsubscriptionEnabled());
|
||||||
//mLc.setCallErrorTone(Reason.NotFound, mErrorToneFile);
|
//mLc.setCallErrorTone(Reason.NotFound, mErrorToneFile);
|
||||||
|
enableDeviceRingtone(mPrefs.isDeviceRingtoneEnabled());
|
||||||
|
|
||||||
int availableCores = Runtime.getRuntime().availableProcessors();
|
int availableCores = Runtime.getRuntime().availableProcessors();
|
||||||
Log.w("MediaStreamer : " + availableCores + " cores detected and configured");
|
Log.w("MediaStreamer : " + availableCores + " cores detected and configured");
|
||||||
|
@ -804,7 +764,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
}
|
}
|
||||||
|
|
||||||
private void copyAssetsFromPackage() throws IOException {
|
private void copyAssetsFromPackage() throws IOException {
|
||||||
copyIfNotExist(R.raw.oldphone_mono, mRingSoundFile);
|
copyIfNotExist(R.raw.notes_of_the_optimistic, mRingSoundFile);
|
||||||
copyIfNotExist(R.raw.ringback, mRingbackSoundFile);
|
copyIfNotExist(R.raw.ringback, mRingbackSoundFile);
|
||||||
copyIfNotExist(R.raw.hold, mPauseSoundFile);
|
copyIfNotExist(R.raw.hold, mPauseSoundFile);
|
||||||
copyIfNotExist(R.raw.incoming_chat, mErrorToneFile);
|
copyIfNotExist(R.raw.incoming_chat, mErrorToneFile);
|
||||||
|
@ -917,6 +877,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
|
|
||||||
public static synchronized void destroy() {
|
public static synchronized void destroy() {
|
||||||
if (instance == null) return;
|
if (instance == null) return;
|
||||||
|
ContactsManager.getInstance().destroy();
|
||||||
getInstance().changeStatusToOffline();
|
getInstance().changeStatusToOffline();
|
||||||
sExited = true;
|
sExited = true;
|
||||||
instance.doDestroy();
|
instance.doDestroy();
|
||||||
|
@ -1070,7 +1031,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (state == State.IncomingReceived && mR.getBoolean(R.bool.auto_answer_calls)) {
|
if (state == State.IncomingReceived && LinphonePreferences.instance().isAutoAnswerEnabled()) {
|
||||||
try {
|
try {
|
||||||
mLc.acceptCall(call);
|
mLc.acceptCall(call);
|
||||||
} catch (LinphoneCoreException e) {
|
} catch (LinphoneCoreException e) {
|
||||||
|
@ -1184,20 +1145,16 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
|
|
||||||
public void startEcCalibration(LinphoneCoreListener l) throws LinphoneCoreException {
|
public void startEcCalibration(LinphoneCoreListener l) throws LinphoneCoreException {
|
||||||
routeAudioToSpeaker();
|
routeAudioToSpeaker();
|
||||||
|
Compatibility.setAudioManagerInCallMode((AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE));
|
||||||
|
Log.i("Set audio mode on 'Voice Communication'");
|
||||||
int oldVolume = mAudioManager.getStreamVolume(STREAM_VOICE_CALL);
|
int oldVolume = mAudioManager.getStreamVolume(STREAM_VOICE_CALL);
|
||||||
int maxVolume = mAudioManager.getStreamMaxVolume(STREAM_VOICE_CALL);
|
int maxVolume = mAudioManager.getStreamMaxVolume(STREAM_VOICE_CALL);
|
||||||
mAudioManager.setStreamVolume(STREAM_VOICE_CALL, maxVolume, 0);
|
mAudioManager.setStreamVolume(STREAM_VOICE_CALL, maxVolume, 0);
|
||||||
mLc.startEchoCalibration(l);
|
mLc.startEchoCalibration(l);
|
||||||
|
|
||||||
mAudioManager.setStreamVolume(STREAM_VOICE_CALL, oldVolume, 0);
|
mAudioManager.setStreamVolume(STREAM_VOICE_CALL, oldVolume, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isRinging;
|
private boolean isRinging;
|
||||||
private boolean disableRinging = false;
|
|
||||||
|
|
||||||
public void disableRinging() {
|
|
||||||
disableRinging = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void requestAudioFocus(){
|
private void requestAudioFocus(){
|
||||||
if (!mAudioFocused){
|
if (!mAudioFocused){
|
||||||
|
@ -1207,11 +1164,21 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void enableDeviceRingtone(boolean use) {
|
||||||
|
if (use) {
|
||||||
|
mLc.setRing(null);
|
||||||
|
} else {
|
||||||
|
mLc.setRing(mRingSoundFile);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private synchronized void startRinging() {
|
private synchronized void startRinging() {
|
||||||
if (disableRinging) {
|
if (!LinphonePreferences.instance().isDeviceRingtoneEnabled()) {
|
||||||
|
// Enable speaker audio route, linphone library will do the ringing itself automatically
|
||||||
routeAudioToSpeaker();
|
routeAudioToSpeaker();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mR.getBoolean(R.bool.allow_ringing_while_early_media)) {
|
if (mR.getBoolean(R.bool.allow_ringing_while_early_media)) {
|
||||||
routeAudioToSpeaker(); // Need to be able to ear the ringtone during the early media
|
routeAudioToSpeaker(); // Need to be able to ear the ringtone during the early media
|
||||||
}
|
}
|
||||||
|
@ -1577,8 +1544,8 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
|
||||||
@Override
|
@Override
|
||||||
public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,
|
public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status,
|
||||||
int delay_ms, Object data) {
|
int delay_ms, Object data) {
|
||||||
// TODO Auto-generated method stub
|
((AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL);
|
||||||
|
Log.i("Set audio mode on 'Normal'");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -21,7 +21,7 @@ package org.linphone;
|
||||||
|
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
public class LinphoneNumberOrAddress implements Serializable {
|
public class LinphoneNumberOrAddress implements Serializable, Comparable<LinphoneNumberOrAddress> {
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
@ -41,6 +41,15 @@ public class LinphoneNumberOrAddress implements Serializable {
|
||||||
oldValueForUpdatePurpose = old;
|
oldValueForUpdatePurpose = old;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(LinphoneNumberOrAddress noa) {
|
||||||
|
if (noa.isSIPAddress() == isSIPAddress()) {
|
||||||
|
return noa.getValue().compareTo(getValue());
|
||||||
|
} else {
|
||||||
|
return isSIPAddress() ? -1 : 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSIPAddress() {
|
public boolean isSIPAddress() {
|
||||||
return isSIPAddress;
|
return isSIPAddress;
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,19 +31,21 @@ import org.linphone.core.LinphoneAddress.TransportType;
|
||||||
import org.linphone.core.LinphoneAuthInfo;
|
import org.linphone.core.LinphoneAuthInfo;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
import org.linphone.core.LinphoneCore.AdaptiveRateAlgorithm;
|
import org.linphone.core.LinphoneCore.AdaptiveRateAlgorithm;
|
||||||
import org.linphone.core.LinphoneCore.FirewallPolicy;
|
|
||||||
import org.linphone.core.LinphoneCore.LinphoneLimeState;
|
import org.linphone.core.LinphoneCore.LinphoneLimeState;
|
||||||
import org.linphone.core.LinphoneCore.MediaEncryption;
|
import org.linphone.core.LinphoneCore.MediaEncryption;
|
||||||
import org.linphone.core.LinphoneCore.Transports;
|
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.LinphoneNatPolicy;
|
||||||
import org.linphone.core.LinphoneProxyConfig;
|
import org.linphone.core.LinphoneProxyConfig;
|
||||||
import org.linphone.core.LpConfig;
|
import org.linphone.core.LpConfig;
|
||||||
import org.linphone.core.TunnelConfig;
|
import org.linphone.core.TunnelConfig;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
import org.linphone.purchase.Purchasable;
|
import org.linphone.purchase.Purchasable;
|
||||||
|
|
||||||
|
import android.Manifest;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
|
@ -52,6 +54,7 @@ public class LinphonePreferences {
|
||||||
private static final int LINPHONE_CORE_RANDOM_PORT = -1;
|
private static final int LINPHONE_CORE_RANDOM_PORT = -1;
|
||||||
private static LinphonePreferences instance;
|
private static LinphonePreferences instance;
|
||||||
private Context mContext;
|
private Context mContext;
|
||||||
|
private String basePath;
|
||||||
|
|
||||||
public static final synchronized LinphonePreferences instance() {
|
public static final synchronized LinphonePreferences instance() {
|
||||||
if (instance == null) {
|
if (instance == null) {
|
||||||
|
@ -66,6 +69,7 @@ public class LinphonePreferences {
|
||||||
|
|
||||||
public void setContext(Context c) {
|
public void setContext(Context c) {
|
||||||
mContext = c;
|
mContext = c;
|
||||||
|
basePath = mContext.getFilesDir().getAbsolutePath();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getString(int key) {
|
private String getString(int key) {
|
||||||
|
@ -90,10 +94,10 @@ public class LinphonePreferences {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!LinphoneManager.isInstanciated()) {
|
if (!LinphoneManager.isInstanciated()) {
|
||||||
File linphonerc = new File(mContext.getFilesDir().getAbsolutePath() + "/.linphonerc");
|
File linphonerc = new File(basePath + "/.linphonerc");
|
||||||
if (linphonerc.exists()) {
|
if (linphonerc.exists()) {
|
||||||
return LinphoneCoreFactory.instance().createLpConfig(linphonerc.getAbsolutePath());
|
return LinphoneCoreFactory.instance().createLpConfig(linphonerc.getAbsolutePath());
|
||||||
} else {
|
} else if (mContext != null) {
|
||||||
InputStream inputStream = mContext.getResources().openRawResource(R.raw.linphonerc_default);
|
InputStream inputStream = mContext.getResources().openRawResource(R.raw.linphonerc_default);
|
||||||
InputStreamReader inputreader = new InputStreamReader(inputStream);
|
InputStreamReader inputreader = new InputStreamReader(inputStream);
|
||||||
BufferedReader buffreader = new BufferedReader(inputreader);
|
BufferedReader buffreader = new BufferedReader(inputreader);
|
||||||
|
@ -105,13 +109,14 @@ public class LinphonePreferences {
|
||||||
text.append('\n');
|
text.append('\n');
|
||||||
}
|
}
|
||||||
} catch (IOException ioe) {
|
} catch (IOException ioe) {
|
||||||
|
Log.e(ioe);
|
||||||
}
|
}
|
||||||
return LinphoneCoreFactory.instance().createLpConfigFromString(text.toString());
|
return LinphoneCoreFactory.instance().createLpConfigFromString(text.toString());
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
return LinphoneCoreFactory.instance().createLpConfig(LinphoneManager.getInstance().mLinphoneConfigFile);
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
return LinphoneCoreFactory.instance().createLpConfig(LinphoneManager.getInstance().mLinphoneConfigFile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removePreviousVersionAuthInfoRemoval() {
|
public void removePreviousVersionAuthInfoRemoval() {
|
||||||
|
@ -905,43 +910,44 @@ public class LinphonePreferences {
|
||||||
return getConfig().getBool("app", "wifi_only", false);
|
return getConfig().getBool("app", "wifi_only", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private LinphoneNatPolicy getOrCreateNatPolicy() {
|
||||||
|
LinphoneNatPolicy nat = getLc().getNatPolicy();
|
||||||
|
if (nat == null) {
|
||||||
|
nat = getLc().createNatPolicy();
|
||||||
|
}
|
||||||
|
return nat;
|
||||||
|
}
|
||||||
|
|
||||||
public String getStunServer() {
|
public String getStunServer() {
|
||||||
return getLc().getStunServer();
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
|
return nat.getStunServer();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setStunServer(String stun) {
|
public void setStunServer(String stun) {
|
||||||
getLc().setStunServer(stun);
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
|
nat.setStunServer(stun);
|
||||||
|
if (stun != null && !stun.isEmpty()) {
|
||||||
|
nat.enableStun(true);
|
||||||
|
}
|
||||||
|
getLc().setNatPolicy(nat);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setIceEnabled(boolean enabled) {
|
public void setIceEnabled(boolean enabled) {
|
||||||
if (enabled) {
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
getLc().setFirewallPolicy(FirewallPolicy.UseIce);
|
nat.enableIce(enabled);
|
||||||
} else {
|
getLc().setNatPolicy(nat);
|
||||||
String stun = getStunServer();
|
}
|
||||||
if (stun != null && stun.length() > 0) {
|
|
||||||
getLc().setFirewallPolicy(FirewallPolicy.UseStun);
|
public void setTurnEnabled(boolean enabled) {
|
||||||
} else {
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
getLc().setFirewallPolicy(FirewallPolicy.NoFirewall);
|
nat.enableTurn(enabled);
|
||||||
}
|
getLc().setNatPolicy(nat);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setUpnpEnabled(boolean enabled) {
|
public void setUpnpEnabled(boolean enabled) {
|
||||||
if (enabled) {
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
if (isIceEnabled()) {
|
nat.enableUpnp(enabled);
|
||||||
Log.e("Cannot have both ice and upnp enabled, disabling upnp");
|
getLc().setNatPolicy(nat);
|
||||||
} 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 void useRandomPort(boolean enabled) {
|
public void useRandomPort(boolean enabled) {
|
||||||
|
@ -982,11 +988,18 @@ public class LinphonePreferences {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isUpnpEnabled() {
|
public boolean isUpnpEnabled() {
|
||||||
return getLc().upnpAvailable() && getLc().getFirewallPolicy() == FirewallPolicy.UseUpnp;
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
|
return nat.upnpEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isIceEnabled() {
|
public boolean isIceEnabled() {
|
||||||
return getLc().getFirewallPolicy() == FirewallPolicy.UseIce;
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
|
return nat.iceEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isTurnEnabled() {
|
||||||
|
LinphoneNatPolicy nat = getOrCreateNatPolicy();
|
||||||
|
return nat.turnEnabled();
|
||||||
}
|
}
|
||||||
|
|
||||||
public MediaEncryption getMediaEncryption() {
|
public MediaEncryption getMediaEncryption() {
|
||||||
|
@ -1076,14 +1089,6 @@ public class LinphonePreferences {
|
||||||
return getConfig().getBool("app", "background_mode", true);
|
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() {
|
public boolean isAutoStartEnabled() {
|
||||||
return getConfig().getBool("app", "auto_start", false);
|
return getConfig().getBool("app", "auto_start", false);
|
||||||
}
|
}
|
||||||
|
@ -1327,4 +1332,29 @@ public class LinphonePreferences {
|
||||||
}
|
}
|
||||||
return firstTime;
|
return firstTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isDeviceRingtoneEnabled() {
|
||||||
|
int readExternalStorage = mContext.getPackageManager().checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, mContext.getPackageName());
|
||||||
|
return getConfig().getBool("app", "device_ringtone", true) && readExternalStorage == PackageManager.PERMISSION_GRANTED;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableDeviceRingtone(boolean enable) {
|
||||||
|
getConfig().setBool("app", "device_ringtone", enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isBisFeatureEnabled() {
|
||||||
|
return getConfig().getBool("app", "bis_feature", true);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableBisFeature(boolean enable) {
|
||||||
|
getConfig().setBool("app", "bis_feature", enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAutoAnswerEnabled() {
|
||||||
|
return getConfig().getBool("app", "auto_answer", false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void enableAutoAnswer(boolean enable) {
|
||||||
|
getConfig().setBool("app", "auto_answer", enable);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,10 +23,13 @@ import static android.view.View.VISIBLE;
|
||||||
|
|
||||||
import java.io.BufferedOutputStream;
|
import java.io.BufferedOutputStream;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileNotFoundException;
|
||||||
import java.io.FileOutputStream;
|
import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -42,6 +45,7 @@ import java.util.zip.ZipOutputStream;
|
||||||
import org.linphone.core.LinphoneAddress;
|
import org.linphone.core.LinphoneAddress;
|
||||||
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.LinphoneChatMessage;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
import org.linphone.core.LinphoneCoreException;
|
import org.linphone.core.LinphoneCoreException;
|
||||||
import org.linphone.core.LinphoneCoreFactory;
|
import org.linphone.core.LinphoneCoreFactory;
|
||||||
|
@ -50,6 +54,8 @@ import org.linphone.mediastream.Log;
|
||||||
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
import org.linphone.mediastream.video.capture.hwconf.Hacks;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.ContentResolver;
|
||||||
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.res.Resources;
|
import android.content.res.Resources;
|
||||||
|
@ -59,7 +65,9 @@ import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
import android.os.Environment;
|
||||||
import android.provider.MediaStore;
|
import android.provider.MediaStore;
|
||||||
|
import android.provider.MediaStore.Images;
|
||||||
import android.telephony.TelephonyManager;
|
import android.telephony.TelephonyManager;
|
||||||
import android.util.TypedValue;
|
import android.util.TypedValue;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -464,5 +472,97 @@ public final class LinphoneUtils {
|
||||||
}
|
}
|
||||||
return extension;
|
return extension;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void recursiveFileRemoval(File root) {
|
||||||
|
if (!root.delete()) {
|
||||||
|
if (root.isDirectory()) {
|
||||||
|
File[] files = root.listFiles();
|
||||||
|
if (files != null) {
|
||||||
|
for (File f : files) {
|
||||||
|
recursiveFileRemoval(f);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getDisplayableUsernameFromAddress(String sipAddress) {
|
||||||
|
String username = sipAddress;
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
if (lc == null) return username;
|
||||||
|
|
||||||
|
if (username.startsWith("sip:")) {
|
||||||
|
username = username.substring(4);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (username.contains("@")) {
|
||||||
|
String domain = username.split("@")[1];
|
||||||
|
LinphoneProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||||
|
if (lpc != null) {
|
||||||
|
if (domain.equals(lpc.getDomain())) {
|
||||||
|
return username.split("@")[0];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (domain.equals(LinphoneManager.getInstance().getContext().getString(R.string.default_domain))) {
|
||||||
|
return username.split("@")[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return username;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getFullAddressFromUsername(String username) {
|
||||||
|
String sipAddress = username;
|
||||||
|
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||||
|
if (lc == null) return sipAddress;
|
||||||
|
|
||||||
|
if (!sipAddress.startsWith("sip:")) {
|
||||||
|
sipAddress = "sip:" + sipAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!sipAddress.contains("@")) {
|
||||||
|
LinphoneProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||||
|
if (lpc != null) {
|
||||||
|
sipAddress = sipAddress + "@" + lpc.getDomain();
|
||||||
|
} else {
|
||||||
|
sipAddress = sipAddress + "@" + LinphoneManager.getInstance().getContext().getString(R.string.default_domain);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return sipAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void storeImage(Context context, LinphoneChatMessage msg) {
|
||||||
|
if (msg == null || msg.getFileTransferInformation() == null || msg.getAppData() == null) return;
|
||||||
|
File file = new File(Environment.getExternalStorageDirectory(), msg.getAppData());
|
||||||
|
Bitmap bm = BitmapFactory.decodeFile(file.getPath());
|
||||||
|
if (bm == null) return;
|
||||||
|
|
||||||
|
ContentValues values = new ContentValues();
|
||||||
|
values.put(Images.Media.TITLE, file.getName());
|
||||||
|
String extension = msg.getFileTransferInformation().getSubtype();
|
||||||
|
values.put(Images.Media.MIME_TYPE, "image/" + extension);
|
||||||
|
ContentResolver cr = context.getContentResolver();
|
||||||
|
Uri path = cr.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
|
||||||
|
|
||||||
|
OutputStream stream;
|
||||||
|
try {
|
||||||
|
stream = cr.openOutputStream(path);
|
||||||
|
if (extension != null && extension.toLowerCase(Locale.getDefault()).equals("png")) {
|
||||||
|
bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
|
||||||
|
} else {
|
||||||
|
bm.compress(Bitmap.CompressFormat.JPEG, 100, stream);
|
||||||
|
}
|
||||||
|
|
||||||
|
stream.close();
|
||||||
|
file.delete();
|
||||||
|
bm.recycle();
|
||||||
|
|
||||||
|
msg.setAppData(path.toString());
|
||||||
|
} catch (FileNotFoundException e) {
|
||||||
|
Log.e(e);
|
||||||
|
} catch (IOException e) {
|
||||||
|
Log.e(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -84,7 +84,6 @@ public class PreferencesMigrator {
|
||||||
mNewPrefs.setPushNotificationRegistrationID(getPrefString(R.string.push_reg_id_key, null));
|
mNewPrefs.setPushNotificationRegistrationID(getPrefString(R.string.push_reg_id_key, null));
|
||||||
mNewPrefs.setDebugEnabled(getPrefBoolean(R.string.pref_debug_key, false));
|
mNewPrefs.setDebugEnabled(getPrefBoolean(R.string.pref_debug_key, false));
|
||||||
mNewPrefs.setBackgroundModeEnabled(getPrefBoolean(R.string.pref_background_mode_key, true));
|
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.setAutoStart(getPrefBoolean(R.string.pref_autostart_key, false));
|
||||||
mNewPrefs.setSharingPictureServerUrl(getPrefString(R.string.pref_image_sharing_server_key, null));
|
mNewPrefs.setSharingPictureServerUrl(getPrefString(R.string.pref_image_sharing_server_key, null));
|
||||||
mNewPrefs.setRemoteProvisioningUrl(getPrefString(R.string.pref_remote_provisioning_key, null));
|
mNewPrefs.setRemoteProvisioningUrl(getPrefString(R.string.pref_remote_provisioning_key, null));
|
||||||
|
|
|
@ -42,7 +42,12 @@ import org.linphone.ui.PreferencesListFragment;
|
||||||
|
|
||||||
import android.app.AlertDialog;
|
import android.app.AlertDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
|
import android.Manifest;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.SharedPreferences;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.media.AudioManager;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.preference.CheckBoxPreference;
|
import android.preference.CheckBoxPreference;
|
||||||
|
@ -63,20 +68,18 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
private LinphoneCoreListenerBase mListener;
|
private LinphoneCoreListenerBase mListener;
|
||||||
|
|
||||||
|
public SettingsFragment() {
|
||||||
|
super(R.xml.preferences);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle bundle) {
|
public void onCreate(Bundle bundle) {
|
||||||
super.onCreate(bundle);
|
super.onCreate(bundle);
|
||||||
|
|
||||||
mPrefs = LinphonePreferences.instance();
|
mPrefs = LinphonePreferences.instance();
|
||||||
removePreviousPreferencesFile(); // Required when updating the preferences order
|
removePreviousPreferencesFile(); // Required when updating the preferences order
|
||||||
addPreferencesFromResource(R.xml.preferences);
|
|
||||||
|
|
||||||
// Init the settings page interface
|
mListener = new LinphoneCoreListenerBase() {
|
||||||
initSettings();
|
|
||||||
setListeners();
|
|
||||||
hideSettings();
|
|
||||||
|
|
||||||
mListener = new LinphoneCoreListenerBase(){
|
|
||||||
@Override
|
@Override
|
||||||
public void ecCalibrationStatus(LinphoneCore lc, final EcCalibratorStatus status, final int delayMs, Object data) {
|
public void ecCalibrationStatus(LinphoneCore lc, final EcCalibratorStatus status, final int delayMs, Object data) {
|
||||||
LinphoneManager.getInstance().routeAudioToReceiver();
|
LinphoneManager.getInstance().routeAudioToReceiver();
|
||||||
|
@ -88,22 +91,36 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
echoCancellerCalibration.setSummary(R.string.no_echo);
|
echoCancellerCalibration.setSummary(R.string.no_echo);
|
||||||
echoCancellation.setChecked(false);
|
echoCancellation.setChecked(false);
|
||||||
LinphonePreferences.instance().setEchoCancellation(false);
|
LinphonePreferences.instance().setEchoCancellation(false);
|
||||||
|
((AudioManager)getActivity().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL);
|
||||||
|
Log.i("Set audio mode on 'Normal'");
|
||||||
} else if (status == EcCalibratorStatus.Done) {
|
} else if (status == EcCalibratorStatus.Done) {
|
||||||
echoCancellerCalibration.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
|
echoCancellerCalibration.setSummary(String.format(getString(R.string.ec_calibrated), delayMs));
|
||||||
echoCancellation.setChecked(true);
|
echoCancellation.setChecked(true);
|
||||||
LinphonePreferences.instance().setEchoCancellation(true);
|
LinphonePreferences.instance().setEchoCancellation(true);
|
||||||
|
((AudioManager)getActivity().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL);
|
||||||
|
Log.i("Set audio mode on 'Normal'");
|
||||||
} else if (status == EcCalibratorStatus.Failed) {
|
} else if (status == EcCalibratorStatus.Failed) {
|
||||||
echoCancellerCalibration.setSummary(R.string.failed);
|
echoCancellerCalibration.setSummary(R.string.failed);
|
||||||
echoCancellation.setChecked(true);
|
echoCancellation.setChecked(true);
|
||||||
LinphonePreferences.instance().setEchoCancellation(true);
|
LinphonePreferences.instance().setEchoCancellation(true);
|
||||||
|
((AudioManager)getActivity().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL);
|
||||||
|
Log.i("Set audio mode on 'Normal'");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
initSettings();
|
||||||
|
setListeners();
|
||||||
|
hideSettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void removePreviousPreferencesFile() {
|
private void removePreviousPreferencesFile() {
|
||||||
File dir = new File(LinphoneActivity.instance().getFilesDir().getAbsolutePath() + "shared_prefs");
|
SharedPreferences.Editor editor = getPreferenceManager().getSharedPreferences().edit();
|
||||||
dir.delete();
|
editor.clear();
|
||||||
|
editor.commit();
|
||||||
|
|
||||||
|
File dir = new File(getActivity().getFilesDir().getAbsolutePath() + "shared_prefs");
|
||||||
|
LinphoneUtils.recursiveFileRemoval(dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Inits the values or the listener on some settings
|
// Inits the values or the listener on some settings
|
||||||
|
@ -159,11 +176,6 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
hidePreference(R.string.pref_in_app_store_key);
|
hidePreference(R.string.pref_in_app_store_key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_animations)) {
|
|
||||||
uncheckAndHidePreference(R.string.pref_animation_enable_key);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_chat)) {
|
if (getResources().getBoolean(R.bool.disable_chat)) {
|
||||||
findPreference(getString(R.string.pref_image_sharing_server_key)).setLayoutResource(R.layout.hidden);
|
findPreference(getString(R.string.pref_image_sharing_server_key)).setLayoutResource(R.layout.hidden);
|
||||||
}
|
}
|
||||||
|
@ -173,7 +185,7 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!Version.isVideoCapable() || !LinphoneManager.getLcIfManagerNotDestroyedOrNull().isVideoSupported()) {
|
if (!Version.isVideoCapable() || !LinphoneManager.getLcIfManagerNotDestroyedOrNull().isVideoSupported()) {
|
||||||
uncheckAndHidePreference(R.string.pref_video_enable_key);
|
emptyAndHidePreference(R.string.pref_video_key);
|
||||||
} else {
|
} else {
|
||||||
if (!AndroidCameraConfiguration.hasFrontCamera()) {
|
if (!AndroidCameraConfiguration.hasFrontCamera()) {
|
||||||
uncheckAndHidePreference(R.string.pref_video_use_front_camera_key);
|
uncheckAndHidePreference(R.string.pref_video_use_front_camera_key);
|
||||||
|
@ -186,7 +198,6 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.hide_camera_settings)) {
|
if (getResources().getBoolean(R.bool.hide_camera_settings)) {
|
||||||
emptyAndHidePreference(R.string.pref_video_key);
|
emptyAndHidePreference(R.string.pref_video_key);
|
||||||
hidePreference(R.string.pref_video_enable_key);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getResources().getBoolean(R.bool.disable_every_log)) {
|
if (getResources().getBoolean(R.bool.disable_every_log)) {
|
||||||
|
@ -245,14 +256,20 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setPreferenceDefaultValueAndSummary(int pref, String value) {
|
private void setPreferenceDefaultValueAndSummary(int pref, String value) {
|
||||||
if(value != null) {
|
if (value != null) {
|
||||||
EditTextPreference etPref = (EditTextPreference) findPreference(getString(pref));
|
EditTextPreference etPref = (EditTextPreference) findPreference(getString(pref));
|
||||||
etPref.setText(value);
|
if (etPref != null) {
|
||||||
etPref.setSummary(value);
|
etPref.setText(value);
|
||||||
|
etPref.setSummary(value);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initTunnelSettings() {
|
private void initTunnelSettings() {
|
||||||
|
if (!LinphoneManager.getLc().isTunnelAvailable()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_host_key, mPrefs.getTunnelHost());
|
setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_host_key, mPrefs.getTunnelHost());
|
||||||
setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_port_key, String.valueOf(mPrefs.getTunnelPort()));
|
setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_port_key, String.valueOf(mPrefs.getTunnelPort()));
|
||||||
ListPreference tunnelModePref = (ListPreference) findPreference(getString(R.string.pref_tunnel_mode_key));
|
ListPreference tunnelModePref = (ListPreference) findPreference(getString(R.string.pref_tunnel_mode_key));
|
||||||
|
@ -464,7 +481,13 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
setListPreferenceValues(pref, entries, values);
|
setListPreferenceValues(pref, entries, values);
|
||||||
|
|
||||||
LinphoneLimeState lime = mPrefs.getLimeEncryption();
|
LinphoneLimeState lime = mPrefs.getLimeEncryption();
|
||||||
pref.setSummary(lime.toString());
|
if (lime == LinphoneLimeState.Disabled) {
|
||||||
|
pref.setSummary(getString(R.string.lime_encryption_entry_disabled));
|
||||||
|
} else if (lime == LinphoneLimeState.Mandatory) {
|
||||||
|
pref.setSummary(getString(R.string.lime_encryption_entry_mandatory));
|
||||||
|
} else if (lime == LinphoneLimeState.Preferred) {
|
||||||
|
pref.setSummary(getString(R.string.lime_encryption_entry_preferred));
|
||||||
|
}
|
||||||
pref.setValue(lime.toString());
|
pref.setValue(lime.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -576,11 +599,13 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
synchronized (SettingsFragment.this) {
|
synchronized (SettingsFragment.this) {
|
||||||
try {
|
preference.setSummary(R.string.ec_calibrating);
|
||||||
LinphoneManager.getInstance().startEcCalibration(mListener);
|
|
||||||
preference.setSummary(R.string.ec_calibrating);
|
int recordAudio = getActivity().getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getActivity().getPackageName());
|
||||||
} catch (LinphoneCoreException e) {
|
if (recordAudio == PackageManager.PERMISSION_GRANTED) {
|
||||||
Log.w(e, "Cannot calibrate EC");
|
startEchoCancellerCalibration();
|
||||||
|
} else {
|
||||||
|
LinphoneActivity.instance().checkAndRequestRecordAudioPermissionForEchoCanceller();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
@ -588,6 +613,19 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void startEchoCancellerCalibration() {
|
||||||
|
try {
|
||||||
|
LinphoneManager.getInstance().startEcCalibration(mListener);
|
||||||
|
} catch (LinphoneCoreException e) {
|
||||||
|
Log.e(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void echoCalibrationFail() {
|
||||||
|
Preference echoCancellerCalibration = findPreference(getString(R.string.pref_echo_canceller_calibration_key));
|
||||||
|
echoCancellerCalibration.setSummary(R.string.failed);
|
||||||
|
}
|
||||||
|
|
||||||
private void initVideoSettings() {
|
private void initVideoSettings() {
|
||||||
initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_key)));
|
initializePreferredVideoSizePreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_size_key)));
|
||||||
initializePreferredVideoFpsPreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_fps_key)));
|
initializePreferredVideoFpsPreferences((ListPreference) findPreference(getString(R.string.pref_preferred_video_fps_key)));
|
||||||
|
@ -782,9 +820,14 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initCallSettings() {
|
private void initCallSettings() {
|
||||||
|
CheckBoxPreference deviceRingtone = (CheckBoxPreference) findPreference(getString(R.string.pref_device_ringtone_key));
|
||||||
|
CheckBoxPreference autoAnswer = (CheckBoxPreference) findPreference(getString(R.string.pref_auto_answer_key));
|
||||||
CheckBoxPreference rfc2833 = (CheckBoxPreference) findPreference(getString(R.string.pref_rfc2833_dtmf_key));
|
CheckBoxPreference rfc2833 = (CheckBoxPreference) findPreference(getString(R.string.pref_rfc2833_dtmf_key));
|
||||||
CheckBoxPreference sipInfo = (CheckBoxPreference) findPreference(getString(R.string.pref_sipinfo_dtmf_key));
|
CheckBoxPreference sipInfo = (CheckBoxPreference) findPreference(getString(R.string.pref_sipinfo_dtmf_key));
|
||||||
|
|
||||||
|
deviceRingtone.setChecked(mPrefs.isDeviceRingtoneEnabled());
|
||||||
|
autoAnswer.setChecked(mPrefs.isAutoAnswerEnabled());
|
||||||
|
|
||||||
if (mPrefs.useRfc2833Dtmfs()) {
|
if (mPrefs.useRfc2833Dtmfs()) {
|
||||||
rfc2833.setChecked(true);
|
rfc2833.setChecked(true);
|
||||||
sipInfo.setChecked(false);
|
sipInfo.setChecked(false);
|
||||||
|
@ -798,7 +841,63 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
setPreferenceDefaultValueAndSummary(R.string.pref_voice_mail_key, mPrefs.getVoiceMailUri());
|
setPreferenceDefaultValueAndSummary(R.string.pref_voice_mail_key, mPrefs.getVoiceMailUri());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void enableDeviceRingtone(boolean enabled) {
|
||||||
|
LinphonePreferences.instance().enableDeviceRingtone(enabled);
|
||||||
|
LinphoneManager.getInstance().enableDeviceRingtone(enabled);
|
||||||
|
((CheckBoxPreference)findPreference(getString(R.string.pref_device_ringtone_key))).setChecked(enabled);
|
||||||
|
}
|
||||||
|
|
||||||
private void setCallPreferencesListener() {
|
private void setCallPreferencesListener() {
|
||||||
|
findPreference(getString(R.string.pref_device_ringtone_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean use = (Boolean) newValue;
|
||||||
|
if (use) {
|
||||||
|
int readExternalStorage = getActivity().getPackageManager().checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, getActivity().getPackageName());
|
||||||
|
if (readExternalStorage == PackageManager.PERMISSION_GRANTED) {
|
||||||
|
mPrefs.enableDeviceRingtone(true);
|
||||||
|
LinphoneManager.getInstance().enableDeviceRingtone(true);
|
||||||
|
} else {
|
||||||
|
LinphoneActivity.instance().checkAndRequestReadExternalStoragePermissionForDeviceRingtone();
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mPrefs.enableDeviceRingtone(false);
|
||||||
|
LinphoneManager.getInstance().enableDeviceRingtone(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
else if (value.equals(getString(R.string.pref_media_encryption_key_dtls)))
|
||||||
|
menc = MediaEncryption.DTLS;
|
||||||
|
mPrefs.setMediaEncryption(menc);
|
||||||
|
|
||||||
|
preference.setSummary(mPrefs.getMediaEncryption().toString());
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key)));
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_auto_answer_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
boolean use = (Boolean) newValue;
|
||||||
|
mPrefs.enableAutoAnswer(use);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
findPreference(getString(R.string.pref_rfc2833_dtmf_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
findPreference(getString(R.string.pref_rfc2833_dtmf_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
@ -877,22 +976,14 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void initNetworkSettings() {
|
private void initNetworkSettings() {
|
||||||
initMediaEncryptionPreference((ListPreference) findPreference(getString(R.string.pref_media_encryption_key)));
|
|
||||||
|
|
||||||
((CheckBoxPreference) findPreference(getString(R.string.pref_wifi_only_key))).setChecked(mPrefs.isWifiOnlyEnabled());
|
((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
|
// 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 ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
|
||||||
|
CheckBoxPreference turn = (CheckBoxPreference) findPreference(getString(R.string.pref_turn_enable_key));
|
||||||
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
|
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
|
||||||
ice.setChecked(mPrefs.isIceEnabled());
|
ice.setChecked(mPrefs.isIceEnabled());
|
||||||
if (mPrefs.isIceEnabled()) {
|
turn.setChecked(mPrefs.isTurnEnabled());
|
||||||
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));
|
CheckBoxPreference randomPort = (CheckBoxPreference) findPreference(getString(R.string.pref_transport_use_random_ports_key));
|
||||||
randomPort.setChecked(mPrefs.isUsingRandomPort());
|
randomPort.setChecked(mPrefs.isUsingRandomPort());
|
||||||
|
@ -934,20 +1025,26 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
|
CheckBoxPreference upnp = (CheckBoxPreference) findPreference(getString(R.string.pref_upnp_enable_key));
|
||||||
boolean value = (Boolean) newValue;
|
boolean value = (Boolean) newValue;
|
||||||
upnp.setChecked(false);
|
|
||||||
upnp.setEnabled(!value);
|
|
||||||
mPrefs.setIceEnabled((Boolean) newValue);
|
mPrefs.setIceEnabled((Boolean) newValue);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
findPreference(getString(R.string.pref_turn_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;
|
||||||
|
mPrefs.setTurnEnabled((Boolean) newValue);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
findPreference(getString(R.string.pref_upnp_enable_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
|
CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key));
|
||||||
boolean value = (Boolean) newValue;
|
boolean value = (Boolean) newValue;
|
||||||
ice.setChecked(false);
|
|
||||||
ice.setEnabled(!value);
|
|
||||||
mPrefs.setUpnpEnabled(value);
|
mPrefs.setUpnpEnabled(value);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -978,24 +1075,6 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
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;
|
|
||||||
else if (value.equals(getString(R.string.pref_media_encryption_key_dtls)))
|
|
||||||
menc = MediaEncryption.DTLS;
|
|
||||||
mPrefs.setMediaEncryption(menc);
|
|
||||||
|
|
||||||
preference.setSummary(mPrefs.getMediaEncryption().toString());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
findPreference(getString(R.string.pref_push_notification_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
findPreference(getString(R.string.pref_push_notification_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
@ -1016,7 +1095,6 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
private void initAdvancedSettings() {
|
private void initAdvancedSettings() {
|
||||||
((CheckBoxPreference)findPreference(getString(R.string.pref_debug_key))).setChecked(mPrefs.isDebugEnabled());
|
((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_background_mode_key))).setChecked(mPrefs.isBackgroundModeEnabled());
|
||||||
((CheckBoxPreference)findPreference(getString(R.string.pref_animation_enable_key))).setChecked(mPrefs.areAnimationsEnabled());
|
|
||||||
((CheckBoxPreference)findPreference(getString(R.string.pref_service_notification_key))).setChecked(mPrefs.getServiceNotificationVisibility());
|
((CheckBoxPreference)findPreference(getString(R.string.pref_service_notification_key))).setChecked(mPrefs.getServiceNotificationVisibility());
|
||||||
((CheckBoxPreference)findPreference(getString(R.string.pref_autostart_key))).setChecked(mPrefs.isAutoStartEnabled());
|
((CheckBoxPreference)findPreference(getString(R.string.pref_autostart_key))).setChecked(mPrefs.isAutoStartEnabled());
|
||||||
setPreferenceDefaultValueAndSummary(R.string.pref_remote_provisioning_key, mPrefs.getRemoteProvisioningUrl());
|
setPreferenceDefaultValueAndSummary(R.string.pref_remote_provisioning_key, mPrefs.getRemoteProvisioningUrl());
|
||||||
|
@ -1043,15 +1121,6 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
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_service_notification_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
findPreference(getString(R.string.pref_service_notification_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
|
@ -1112,6 +1181,7 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
|
// Init the settings page interface
|
||||||
initAccounts();
|
initAccounts();
|
||||||
|
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
if (LinphoneActivity.isInstanciated()) {
|
||||||
|
|
|
@ -42,6 +42,7 @@ import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
@ -142,6 +143,20 @@ public class StatusFragment extends Fragment {
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
isAttached = true;
|
||||||
|
Activity activity = getActivity();
|
||||||
|
|
||||||
|
if (activity instanceof LinphoneActivity) {
|
||||||
|
((LinphoneActivity) activity).updateStatusFragment(this);
|
||||||
|
isInCall = false;
|
||||||
|
} else if (activity instanceof CallActivity) {
|
||||||
|
((CallActivity) activity).updateStatusFragment(this);
|
||||||
|
isInCall = true;
|
||||||
|
} else if (activity instanceof AssistantActivity) {
|
||||||
|
((AssistantActivity) activity).updateStatusFragment(this);
|
||||||
|
isInCall = false;
|
||||||
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -157,23 +172,6 @@ public class StatusFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAttach(Activity activity) {
|
|
||||||
super.onAttach(activity);
|
|
||||||
isAttached = true;
|
|
||||||
|
|
||||||
if (activity instanceof LinphoneActivity) {
|
|
||||||
((LinphoneActivity) activity).updateStatusFragment(this);
|
|
||||||
isInCall = false;
|
|
||||||
} else if (activity instanceof CallActivity) {
|
|
||||||
((CallActivity) activity).updateStatusFragment(this);
|
|
||||||
isInCall = true;
|
|
||||||
} else if (activity instanceof AssistantActivity) {
|
|
||||||
((AssistantActivity) activity).updateStatusFragment(this);
|
|
||||||
isInCall = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDetach() {
|
public void onDetach() {
|
||||||
super.onDetach();
|
super.onDetach();
|
||||||
|
@ -399,7 +397,7 @@ public class StatusFragment extends Fragment {
|
||||||
if(ZRTPdialog == null || !ZRTPdialog.isShowing()) {
|
if(ZRTPdialog == null || !ZRTPdialog.isShowing()) {
|
||||||
ZRTPdialog = new Dialog(getActivity());
|
ZRTPdialog = new Dialog(getActivity());
|
||||||
ZRTPdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
ZRTPdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorC));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(getActivity(), R.color.colorC));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
ZRTPdialog.setContentView(R.layout.dialog);
|
ZRTPdialog.setContentView(R.layout.dialog);
|
||||||
ZRTPdialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
ZRTPdialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
|
|
|
@ -20,6 +20,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
import org.linphone.LinphoneActivity;
|
import org.linphone.LinphoneActivity;
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.LinphonePreferences;
|
import org.linphone.LinphonePreferences;
|
||||||
|
import org.linphone.LinphoneUtils;
|
||||||
import org.linphone.LinphonePreferences.AccountBuilder;
|
import org.linphone.LinphonePreferences.AccountBuilder;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.StatusFragment;
|
import org.linphone.StatusFragment;
|
||||||
|
@ -51,6 +52,7 @@ import android.graphics.drawable.ColorDrawable;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v4.app.ActivityCompat;
|
import android.support.v4.app.ActivityCompat;
|
||||||
|
import android.support.v4.content.ContextCompat;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
|
@ -120,7 +122,7 @@ private static AssistantActivity instance;
|
||||||
if (state == RegistrationState.RegistrationOk) {
|
if (state == RegistrationState.RegistrationOk) {
|
||||||
if (progress != null) progress.dismiss();
|
if (progress != null) progress.dismiss();
|
||||||
if (LinphoneManager.getLc().getDefaultProxyConfig() != null) {
|
if (LinphoneManager.getLc().getDefaultProxyConfig() != null) {
|
||||||
launchEchoCancellerCalibration(true);
|
success();
|
||||||
}
|
}
|
||||||
} else if (state == RegistrationState.RegistrationFailed) {
|
} else if (state == RegistrationState.RegistrationFailed) {
|
||||||
if (progress != null) progress.dismiss();
|
if (progress != null) progress.dismiss();
|
||||||
|
@ -272,24 +274,20 @@ private static AssistantActivity instance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
|
private void launchEchoCancellerCalibration(boolean sendEcCalibrationResult) {
|
||||||
if (getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName()) == PackageManager.PERMISSION_GRANTED) {
|
int recordAudio = getPackageManager().checkPermission(Manifest.permission.RECORD_AUDIO, getPackageName());
|
||||||
boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration();
|
Log.i("[Permission] Record audio permission is " + (recordAudio == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||||
if (needsEchoCalibration && mPrefs.isFirstLaunch() && !echoCancellerAlreadyDone) {
|
|
||||||
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
|
if (recordAudio == PackageManager.PERMISSION_GRANTED) {
|
||||||
fragment.enableEcCalibrationResultSending(sendEcCalibrationResult);
|
EchoCancellerCalibrationFragment fragment = new EchoCancellerCalibrationFragment();
|
||||||
changeFragment(fragment);
|
fragment.enableEcCalibrationResultSending(sendEcCalibrationResult);
|
||||||
currentFragment = AssistantFragmentsEnum.ECHO_CANCELLER_CALIBRATION;
|
changeFragment(fragment);
|
||||||
back.setVisibility(View.VISIBLE);
|
currentFragment = AssistantFragmentsEnum.ECHO_CANCELLER_CALIBRATION;
|
||||||
cancel.setEnabled(false);
|
back.setVisibility(View.VISIBLE);
|
||||||
echoCancellerAlreadyDone = true;
|
cancel.setEnabled(false);
|
||||||
return true;
|
|
||||||
}
|
|
||||||
isEchoCalibrationFinished();
|
|
||||||
} else {
|
} else {
|
||||||
checkAndRequestAudioPermission();
|
checkAndRequestAudioPermission();
|
||||||
}
|
}
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void logIn(String username, String password, String displayName, String domain, TransportType transport, boolean sendEcCalibrationResult) {
|
private void logIn(String username, String password, String displayName, String domain, TransportType transport, boolean sendEcCalibrationResult) {
|
||||||
|
@ -379,7 +377,6 @@ private static AssistantActivity instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void launchDownloadCodec() {
|
private void launchDownloadCodec() {
|
||||||
Log.i("linphone salut c'est miguel download");
|
|
||||||
OpenH264DownloadHelper downloadHelper = LinphoneCoreFactory.instance().createOpenH264DownloadHelper();
|
OpenH264DownloadHelper downloadHelper = LinphoneCoreFactory.instance().createOpenH264DownloadHelper();
|
||||||
if (Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") && !downloadHelper.isCodecFound()) {
|
if (Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") && !downloadHelper.isCodecFound()) {
|
||||||
CodecDownloaderFragment codecFragment = new CodecDownloaderFragment();
|
CodecDownloaderFragment codecFragment = new CodecDownloaderFragment();
|
||||||
|
@ -388,27 +385,19 @@ private static AssistantActivity instance;
|
||||||
back.setVisibility(View.VISIBLE);
|
back.setVisibility(View.VISIBLE);
|
||||||
cancel.setEnabled(false);
|
cancel.setEnabled(false);
|
||||||
} else
|
} else
|
||||||
endDownloadCodec();
|
goToLinphoneActivity();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endDownloadCodec() {
|
public void endDownloadCodec() {
|
||||||
success();
|
goToLinphoneActivity();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveCreatedAccount(String username, String password, String displayName, String domain, TransportType transport) {
|
public void saveCreatedAccount(String username, String password, String displayName, String domain, TransportType transport) {
|
||||||
if (accountCreated)
|
if (accountCreated)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(username.startsWith("sip:")) {
|
username = LinphoneUtils.getDisplayableUsernameFromAddress(username);
|
||||||
username = username.substring(4);
|
domain = LinphoneUtils.getDisplayableUsernameFromAddress(domain);
|
||||||
}
|
|
||||||
|
|
||||||
if (username.contains("@"))
|
|
||||||
username = username.split("@")[0];
|
|
||||||
|
|
||||||
if(domain.startsWith("sip:")) {
|
|
||||||
domain = domain.substring(4);
|
|
||||||
}
|
|
||||||
|
|
||||||
String identity = "sip:" + username + "@" + domain;
|
String identity = "sip:" + username + "@" + domain;
|
||||||
try {
|
try {
|
||||||
|
@ -486,7 +475,7 @@ private static AssistantActivity instance;
|
||||||
public void displayRegistrationInProgressDialog() {
|
public void displayRegistrationInProgressDialog() {
|
||||||
if(LinphoneManager.getLc().isNetworkReachable()) {
|
if(LinphoneManager.getLc().isNetworkReachable()) {
|
||||||
progress = ProgressDialog.show(this, null, null);
|
progress = ProgressDialog.show(this, null, null);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorE));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorE));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
progress.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
progress.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
progress.getWindow().setBackgroundDrawable(d);
|
progress.getWindow().setBackgroundDrawable(d);
|
||||||
|
@ -499,7 +488,7 @@ private static AssistantActivity instance;
|
||||||
remoteProvisioningInProgress = true;
|
remoteProvisioningInProgress = true;
|
||||||
|
|
||||||
progress = ProgressDialog.show(this, null, null);
|
progress = ProgressDialog.show(this, null, null);
|
||||||
Drawable d = new ColorDrawable(getResources().getColor(R.color.colorE));
|
Drawable d = new ColorDrawable(ContextCompat.getColor(this, R.color.colorE));
|
||||||
d.setAlpha(200);
|
d.setAlpha(200);
|
||||||
progress.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
progress.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.MATCH_PARENT);
|
||||||
progress.getWindow().setBackgroundDrawable(d);
|
progress.getWindow().setBackgroundDrawable(d);
|
||||||
|
@ -553,6 +542,15 @@ private static AssistantActivity instance;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void success() {
|
public void success() {
|
||||||
|
boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration();
|
||||||
|
if (needsEchoCalibration && mPrefs.isFirstLaunch()) {
|
||||||
|
launchEchoCancellerCalibration(true);
|
||||||
|
} else {
|
||||||
|
launchDownloadCodec();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void goToLinphoneActivity() {
|
||||||
mPrefs.firstLaunchSuccessful();
|
mPrefs.firstLaunchSuccessful();
|
||||||
startActivity(new Intent().setClass(this, LinphoneActivity.class).putExtra("isNewProxyConfig", true));
|
startActivity(new Intent().setClass(this, LinphoneActivity.class).putExtra("isNewProxyConfig", true));
|
||||||
finish();
|
finish();
|
||||||
|
|
|
@ -17,9 +17,13 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
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 java.net.URL;
|
import org.linphone.LinphoneManager;
|
||||||
|
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequest;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequest.LinphoneXmlRpcRequestListener;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequestImpl;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcSession;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcSessionImpl;
|
||||||
|
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
|
@ -30,17 +34,16 @@ import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import de.timroes.axmlrpc.XMLRPCCallback;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCClient;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCException;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCServerException;
|
|
||||||
/**
|
/**
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
*/
|
*/
|
||||||
public class CreateAccountActivationFragment extends Fragment {
|
public class CreateAccountActivationFragment extends Fragment implements LinphoneXmlRpcRequestListener {
|
||||||
private String username, password, domain;
|
private String username, password;
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
private Button checkAccount;
|
private Button checkAccount;
|
||||||
|
private LinphoneXmlRpcSession xmlRpcSession;
|
||||||
|
private LinphoneXmlRpcRequest xmlRpcRequest;
|
||||||
|
private Runnable runNotOk, runOk, runNotReachable;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
@ -59,57 +62,48 @@ public class CreateAccountActivationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return view;
|
runNotOk = new Runnable() {
|
||||||
}
|
public void run() {
|
||||||
|
checkAccount.setEnabled(true);
|
||||||
private void isAccountVerified(final String username) {
|
Toast.makeText(getActivity(), getString(R.string.assistant_account_not_validated), Toast.LENGTH_LONG).show();
|
||||||
final Runnable runNotReachable = new Runnable() {
|
}
|
||||||
|
};
|
||||||
|
runOk = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
checkAccount.setEnabled(true);
|
||||||
|
AssistantActivity.instance().saveCreatedAccount(username,password,null, getString(R.string.default_domain),null);
|
||||||
|
AssistantActivity.instance().isAccountVerified(username);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
runNotReachable = new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
Toast.makeText(getActivity(), getString(R.string.wizard_server_unavailable), Toast.LENGTH_LONG).show();
|
Toast.makeText(getActivity(), getString(R.string.wizard_server_unavailable), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
xmlRpcSession = new LinphoneXmlRpcSessionImpl(LinphoneManager.getLcIfManagerNotDestroyedOrNull(), getString(R.string.wizard_url));
|
||||||
XMLRPCClient client = new XMLRPCClient(new URL(getString(R.string.wizard_url)));
|
xmlRpcRequest = new LinphoneXmlRpcRequestImpl("check_account_validated", LinphoneXmlRpcRequest.ArgType.Int);
|
||||||
|
xmlRpcRequest.setListener(this);
|
||||||
|
|
||||||
XMLRPCCallback listener = new XMLRPCCallback() {
|
return view;
|
||||||
Runnable runNotOk = new Runnable() {
|
}
|
||||||
public void run() {
|
|
||||||
checkAccount.setEnabled(true);
|
|
||||||
Toast.makeText(getActivity(), getString(R.string.assistant_account_not_validated), Toast.LENGTH_LONG).show();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Runnable runOk = new Runnable() {
|
@Override
|
||||||
public void run() {
|
public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) {
|
||||||
checkAccount.setEnabled(true);
|
if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) {
|
||||||
AssistantActivity.instance().saveCreatedAccount(username,password,null, getString(R.string.default_domain),null);
|
int response = request.getIntResponse();
|
||||||
AssistantActivity.instance().isAccountVerified(username);
|
if (response != 1) {
|
||||||
}
|
mHandler.post(runNotOk);
|
||||||
};
|
} else {
|
||||||
|
mHandler.post(runOk);
|
||||||
public void onResponse(long id, Object result) {
|
}
|
||||||
int answer = (Integer) result;
|
} else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) {
|
||||||
if (answer != 1) {
|
|
||||||
mHandler.post(runNotOk);
|
|
||||||
} else {
|
|
||||||
mHandler.post(runOk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onError(long id, XMLRPCException error) {
|
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onServerError(long id, XMLRPCServerException error) {
|
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
client.callAsync(listener, "check_account_validated", username + "@" + getString(R.string.default_domain));
|
|
||||||
}
|
|
||||||
catch(Exception ex) {
|
|
||||||
mHandler.post(runNotReachable);
|
mHandler.post(runNotReachable);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void isAccountVerified(final String username) {
|
||||||
|
xmlRpcRequest.addStringArg(username + "@" + getString(R.string.default_domain));
|
||||||
|
xmlRpcSession.sendRequest(xmlRpcRequest);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,20 +17,22 @@ You should have received a copy of the GNU General Public License
|
||||||
along with this program; if not, write to the Free Software
|
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 java.net.URL;
|
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.LinphoneService;
|
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.LinphoneProxyConfig;
|
import org.linphone.core.LinphoneProxyConfig;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequest;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequest.LinphoneXmlRpcRequestListener;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequestImpl;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcSession;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcSessionImpl;
|
||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
import android.app.Fragment;
|
import android.app.Fragment;
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.text.Editable;
|
import android.text.Editable;
|
||||||
|
@ -45,10 +47,6 @@ import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import de.timroes.axmlrpc.XMLRPCCallback;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCClient;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCException;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCServerException;
|
|
||||||
/**
|
/**
|
||||||
* @author Sylvain Berfini
|
* @author Sylvain Berfini
|
||||||
*/
|
*/
|
||||||
|
@ -63,11 +61,7 @@ public class CreateAccountFragment extends Fragment {
|
||||||
private boolean confirmPasswordOk = false;
|
private boolean confirmPasswordOk = false;
|
||||||
private Button createAccount;
|
private Button createAccount;
|
||||||
private final Pattern UPPER_CASE_REGEX = Pattern.compile("[A-Z]");
|
private final Pattern UPPER_CASE_REGEX = Pattern.compile("[A-Z]");
|
||||||
private char[] acceptedChars = new char[]{ 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
|
private LinphoneXmlRpcSession xmlRpcSession;
|
||||||
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
|
|
||||||
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', '_', '-' };
|
|
||||||
private char[] acceptedCharsForPhoneNumbers = new char[] { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '-', '+' };
|
|
||||||
private String inputFilterCharacters;
|
|
||||||
|
|
||||||
private String getUsername() {
|
private String getUsername() {
|
||||||
String username = usernameEdit.getText().toString();
|
String username = usernameEdit.getText().toString();
|
||||||
|
@ -96,9 +90,7 @@ public class CreateAccountFragment extends Fragment {
|
||||||
|
|
||||||
addXMLRPCUsernameHandler(usernameEdit, null);
|
addXMLRPCUsernameHandler(usernameEdit, null);
|
||||||
|
|
||||||
inputFilterCharacters = new String(acceptedChars);
|
|
||||||
if (getResources().getBoolean(R.bool.allow_only_phone_numbers_in_wizard)) {
|
if (getResources().getBoolean(R.bool.allow_only_phone_numbers_in_wizard)) {
|
||||||
inputFilterCharacters = new String(acceptedCharsForPhoneNumbers);
|
|
||||||
usernameEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
|
usernameEdit.setInputType(InputType.TYPE_CLASS_NUMBER);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,6 +119,8 @@ public class CreateAccountFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
xmlRpcSession = new LinphoneXmlRpcSessionImpl(LinphoneManager.getLcIfManagerNotDestroyedOrNull(), getString(R.string.wizard_url));
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -152,58 +146,46 @@ public class CreateAccountFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void isUsernameRegistred(final String username, final ImageView icon) {
|
private void isUsernameRegistred(final String username, final ImageView icon) {
|
||||||
|
final Runnable runNotOk = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
usernameOk = false;
|
||||||
|
displayError(usernameOk, usernameError, usernameEdit, LinphoneManager.getInstance().getContext().getString(R.string.wizard_username_unavailable));
|
||||||
|
createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final Runnable runOk = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
usernameOk = true;
|
||||||
|
displayError(usernameOk, usernameError, usernameEdit, "");
|
||||||
|
createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
|
||||||
|
}
|
||||||
|
};
|
||||||
final Runnable runNotReachable = new Runnable() {
|
final Runnable runNotReachable = new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
usernameOk = false;
|
usernameOk = false;
|
||||||
displayError(usernameOk, usernameError, usernameEdit, getResources().getString(R.string.wizard_server_unavailable));
|
displayError(usernameOk, usernameError, usernameEdit, LinphoneManager.getInstance().getContext().getString(R.string.wizard_server_unavailable));
|
||||||
createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
|
createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
try {
|
LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("check_account", LinphoneXmlRpcRequest.ArgType.Int);
|
||||||
XMLRPCClient client = new XMLRPCClient(new URL(getString(R.string.wizard_url)));
|
xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() {
|
||||||
|
@Override
|
||||||
XMLRPCCallback listener = new XMLRPCCallback() {
|
public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) {
|
||||||
Runnable runNotOk = new Runnable() {
|
if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) {
|
||||||
public void run() {
|
int response = request.getIntResponse();
|
||||||
usernameOk = false;
|
if (response != 0) {
|
||||||
displayError(usernameOk, usernameError, usernameEdit, getResources().getString(R.string.wizard_username_unavailable));
|
mHandler.post(runNotOk);
|
||||||
createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
|
} else {
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Runnable runOk = new Runnable() {
|
|
||||||
public void run() {
|
|
||||||
usernameOk = true;
|
|
||||||
displayError(usernameOk, usernameError, usernameEdit, "");
|
|
||||||
createAccount.setEnabled(usernameOk && passwordOk && confirmPasswordOk && emailOk);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
public void onResponse(long id, Object result) {
|
|
||||||
int answer = (Integer) result;
|
|
||||||
if (answer != 0) {
|
|
||||||
mHandler.post(runNotOk);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
mHandler.post(runOk);
|
mHandler.post(runOk);
|
||||||
}
|
}
|
||||||
}
|
} else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) {
|
||||||
|
mHandler.post(runNotReachable);
|
||||||
public void onError(long id, XMLRPCException error) {
|
}
|
||||||
mHandler.post(runNotReachable);
|
}
|
||||||
}
|
});
|
||||||
|
xmlRpcRequest.addStringArg(username);
|
||||||
public void onServerError(long id, XMLRPCServerException error) {
|
xmlRpcSession.sendRequest(xmlRpcRequest);
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
client.callAsync(listener, "check_account", username);
|
|
||||||
}
|
|
||||||
catch(Exception ex) {
|
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isEmailCorrect(String email) {
|
private boolean isEmailCorrect(String email) {
|
||||||
|
@ -216,53 +198,43 @@ public class CreateAccountFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void createAccount(final String username, final String password, String email, boolean suscribe) {
|
private void createAccount(final String username, final String password, String email, boolean suscribe) {
|
||||||
|
final Runnable runNotOk = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
//TODO errorMessage.setText(R.string.wizard_failed);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
final Runnable runOk = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
AssistantActivity.instance().displayAssistantConfirm(username, password);
|
||||||
|
}
|
||||||
|
};
|
||||||
final Runnable runNotReachable = new Runnable() {
|
final Runnable runNotReachable = new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
//TODO errorMessage.setText(R.string.wizard_server_unavailable);
|
//TODO errorMessage.setText(R.string.wizard_not_reachable);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
final Context context = AssistantActivity.instance() == null ? LinphoneService.instance().getApplicationContext() : AssistantActivity.instance();
|
LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("create_account_with_useragent", LinphoneXmlRpcRequest.ArgType.Int);
|
||||||
|
xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() {
|
||||||
try {
|
@Override
|
||||||
XMLRPCClient client = new XMLRPCClient(new URL(context.getString(R.string.wizard_url)));
|
public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) {
|
||||||
|
if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) {
|
||||||
XMLRPCCallback listener = new XMLRPCCallback() {
|
int response = request.getIntResponse();
|
||||||
Runnable runNotOk = new Runnable() {
|
if (response != 0) {
|
||||||
public void run() {
|
mHandler.post(runNotOk);
|
||||||
//TODO errorMessage.setText(R.string.wizard_failed);
|
} else {
|
||||||
|
mHandler.post(runOk);
|
||||||
}
|
}
|
||||||
};
|
} else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) {
|
||||||
|
mHandler.post(runNotReachable);
|
||||||
Runnable runOk = new Runnable() {
|
}
|
||||||
public void run() {
|
}
|
||||||
AssistantActivity.instance().displayAssistantConfirm(username, password);
|
});
|
||||||
}
|
xmlRpcRequest.addStringArg(username);
|
||||||
};
|
xmlRpcRequest.addStringArg(password);
|
||||||
|
xmlRpcRequest.addStringArg(email);
|
||||||
public void onResponse(long id, Object result) {
|
xmlRpcRequest.addStringArg(LinphoneManager.getInstance().getUserAgent());
|
||||||
int answer = (Integer) result;
|
xmlRpcSession.sendRequest(xmlRpcRequest);
|
||||||
if (answer != 0) {
|
|
||||||
mHandler.post(runNotOk);
|
|
||||||
} else {
|
|
||||||
mHandler.post(runOk);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onError(long id, XMLRPCException error) {
|
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onServerError(long id, XMLRPCServerException error) {
|
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
client.callAsync(listener, "create_account_with_useragent", username, password, email, LinphoneManager.getInstance().getUserAgent());
|
|
||||||
}
|
|
||||||
catch(Exception ex) {
|
|
||||||
mHandler.post(runNotReachable);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addXMLRPCUsernameHandler(final EditText field, final ImageView icon) {
|
private void addXMLRPCUsernameHandler(final EditText field, final ImageView icon) {
|
||||||
|
|
|
@ -19,35 +19,37 @@ 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 java.net.URL;
|
|
||||||
|
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
|
import org.linphone.core.LinphoneCore.EcCalibratorStatus;
|
||||||
import org.linphone.core.LinphoneCoreException;
|
import org.linphone.core.LinphoneCoreException;
|
||||||
import org.linphone.core.LinphoneCoreListenerBase;
|
import org.linphone.core.LinphoneCoreListenerBase;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequest;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequest.LinphoneXmlRpcRequestListener;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcRequestImpl;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcSession;
|
||||||
|
import org.linphone.core.LinphoneXmlRpcSessionImpl;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
|
|
||||||
|
import android.app.Fragment;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.app.Fragment;
|
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import de.timroes.axmlrpc.XMLRPCCallback;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCClient;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCException;
|
|
||||||
import de.timroes.axmlrpc.XMLRPCServerException;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Ghislain MARY
|
* @author Ghislain MARY
|
||||||
*/
|
*/
|
||||||
public class EchoCancellerCalibrationFragment extends Fragment {
|
public class EchoCancellerCalibrationFragment extends Fragment implements LinphoneXmlRpcRequestListener {
|
||||||
private Handler mHandler = new Handler();
|
private Handler mHandler = new Handler();
|
||||||
private boolean mSendEcCalibrationResult = false;
|
private boolean mSendEcCalibrationResult = false;
|
||||||
private LinphoneCoreListenerBase mListener;
|
private LinphoneCoreListenerBase mListener;
|
||||||
|
private LinphoneXmlRpcSession xmlRpcSession;
|
||||||
|
private LinphoneXmlRpcRequest xmlRpcRequest;
|
||||||
|
private Runnable runFinished;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||||
|
@ -56,7 +58,7 @@ public class EchoCancellerCalibrationFragment extends Fragment {
|
||||||
|
|
||||||
mListener = new LinphoneCoreListenerBase(){
|
mListener = new LinphoneCoreListenerBase(){
|
||||||
@Override
|
@Override
|
||||||
public void ecCalibrationStatus(LinphoneCore lc,LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data) {
|
public void ecCalibrationStatus(LinphoneCore lc, LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data) {
|
||||||
LinphoneManager.getInstance().routeAudioToReceiver();
|
LinphoneManager.getInstance().routeAudioToReceiver();
|
||||||
if (mSendEcCalibrationResult) {
|
if (mSendEcCalibrationResult) {
|
||||||
sendEcCalibrationResult(status, delay_ms);
|
sendEcCalibrationResult(status, delay_ms);
|
||||||
|
@ -65,6 +67,15 @@ public class EchoCancellerCalibrationFragment extends Fragment {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
runFinished = new Runnable() {
|
||||||
|
public void run() {
|
||||||
|
AssistantActivity.instance().isEchoCalibrationFinished();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
xmlRpcSession = new LinphoneXmlRpcSessionImpl(LinphoneManager.getLcIfManagerNotDestroyedOrNull(), getString(R.string.wizard_url));
|
||||||
|
xmlRpcRequest = new LinphoneXmlRpcRequestImpl("add_ec_calibration_result", LinphoneXmlRpcRequest.ArgType.None);
|
||||||
|
xmlRpcRequest.setListener(this);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
LinphoneManager.getInstance().startEcCalibration(mListener);
|
LinphoneManager.getInstance().startEcCalibration(mListener);
|
||||||
|
@ -79,34 +90,19 @@ public class EchoCancellerCalibrationFragment extends Fragment {
|
||||||
mSendEcCalibrationResult = enabled;
|
mSendEcCalibrationResult = enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) {
|
||||||
|
mHandler.post(runFinished);
|
||||||
|
}
|
||||||
|
|
||||||
private void sendEcCalibrationResult(EcCalibratorStatus status, int delayMs) {
|
private void sendEcCalibrationResult(EcCalibratorStatus status, int delayMs) {
|
||||||
try {
|
Boolean hasBuiltInEchoCanceler = LinphoneManager.getLc().hasBuiltInEchoCanceler();
|
||||||
XMLRPCClient client = new XMLRPCClient(new URL(getString(R.string.wizard_url)));
|
Log.i("Add echo canceller calibration result: manufacturer=" + Build.MANUFACTURER + " model=" + Build.MODEL + " status=" + status + " delay=" + delayMs + "ms" + " hasBuiltInEchoCanceler " + hasBuiltInEchoCanceler);
|
||||||
|
xmlRpcRequest.addStringArg(Build.MANUFACTURER);
|
||||||
XMLRPCCallback listener = new XMLRPCCallback() {
|
xmlRpcRequest.addStringArg(Build.MODEL);
|
||||||
Runnable runFinished = new Runnable() {
|
xmlRpcRequest.addStringArg(status.toString());
|
||||||
public void run() {
|
xmlRpcRequest.addIntArg(delayMs);
|
||||||
AssistantActivity.instance().isEchoCalibrationFinished();
|
xmlRpcRequest.addIntArg(hasBuiltInEchoCanceler ? 1 : 0);
|
||||||
}
|
xmlRpcSession.sendRequest(xmlRpcRequest);
|
||||||
};
|
|
||||||
|
|
||||||
public void onResponse(long id, Object result) {
|
|
||||||
mHandler.post(runFinished);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onError(long id, XMLRPCException error) {
|
|
||||||
mHandler.post(runFinished);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onServerError(long id, XMLRPCServerException error) {
|
|
||||||
mHandler.post(runFinished);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
Boolean hasBuiltInEchoCanceler = LinphoneManager.getLc().hasBuiltInEchoCanceler();
|
|
||||||
Log.i("Add echo canceller calibration result: manufacturer=" + Build.MANUFACTURER + " model=" + Build.MODEL + " status=" + status + " delay=" + delayMs + "ms" + " hasBuiltInEchoCanceler " + hasBuiltInEchoCanceler);
|
|
||||||
client.callAsync(listener, "add_ec_calibration_result", Build.MANUFACTURER, Build.MODEL, status.toString(), delayMs, hasBuiltInEchoCanceler);
|
|
||||||
}
|
|
||||||
catch(Exception ex) {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,9 +20,9 @@ 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.LinphonePreferences;
|
||||||
import org.linphone.core.LinphoneCoreListenerBase;
|
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.LinphoneCore;
|
import org.linphone.core.LinphoneCore;
|
||||||
|
import org.linphone.core.LinphoneCoreListenerBase;
|
||||||
import org.linphone.xmlrpc.XmlRpcHelper;
|
import org.linphone.xmlrpc.XmlRpcHelper;
|
||||||
import org.linphone.xmlrpc.XmlRpcListenerBase;
|
import org.linphone.xmlrpc.XmlRpcListenerBase;
|
||||||
|
|
||||||
|
@ -32,7 +32,6 @@ import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -40,7 +39,6 @@ import android.widget.Toast;
|
||||||
*/
|
*/
|
||||||
public class RemoteProvisioningLoginActivity extends Activity implements OnClickListener {
|
public class RemoteProvisioningLoginActivity extends Activity implements OnClickListener {
|
||||||
private EditText login, password, domain;
|
private EditText login, password, domain;
|
||||||
private ImageView cancel;
|
|
||||||
private Button connect;
|
private Button connect;
|
||||||
private LinphoneCoreListenerBase mListener;
|
private LinphoneCoreListenerBase mListener;
|
||||||
|
|
||||||
|
@ -53,9 +51,6 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick
|
||||||
password = (EditText) findViewById(R.id.assistant_password);
|
password = (EditText) findViewById(R.id.assistant_password);
|
||||||
domain = (EditText) findViewById(R.id.assistant_domain);
|
domain = (EditText) findViewById(R.id.assistant_domain);
|
||||||
|
|
||||||
//cancel = (ImageView) findViewById(R.id.cancel);
|
|
||||||
//cancel.setOnClickListener(this);
|
|
||||||
|
|
||||||
connect = (Button) findViewById(R.id.assistant_connect);
|
connect = (Button) findViewById(R.id.assistant_connect);
|
||||||
connect.setOnClickListener(this);
|
connect.setOnClickListener(this);
|
||||||
|
|
||||||
|
@ -86,8 +81,6 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean storeAccount(String username, String password, String domain) {
|
private boolean storeAccount(String username, String password, String domain) {
|
||||||
LinphoneCore lc = LinphoneManager.getLc();
|
|
||||||
|
|
||||||
XmlRpcHelper xmlRpcHelper = new XmlRpcHelper();
|
XmlRpcHelper xmlRpcHelper = new XmlRpcHelper();
|
||||||
xmlRpcHelper.getRemoteProvisioningFilenameAsync(new XmlRpcListenerBase() {
|
xmlRpcHelper.getRemoteProvisioningFilenameAsync(new XmlRpcListenerBase() {
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -36,6 +36,7 @@ import android.database.Cursor;
|
||||||
import android.graphics.Bitmap;
|
import android.graphics.Bitmap;
|
||||||
import android.media.AudioManager;
|
import android.media.AudioManager;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.PowerManager;
|
||||||
import android.preference.Preference;
|
import android.preference.Preference;
|
||||||
import android.provider.Settings;
|
import android.provider.Settings;
|
||||||
import android.view.ViewTreeObserver;
|
import android.view.ViewTreeObserver;
|
||||||
|
@ -344,4 +345,13 @@ public class Compatibility {
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
public static boolean isScreenOn(PowerManager pm) {
|
||||||
|
if (Version.sdkAboveOrEqual(20)) {
|
||||||
|
return pm.isInteractive();
|
||||||
|
} else {
|
||||||
|
return pm.isScreenOn();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -43,19 +43,22 @@ public class GCMService extends GCMBaseIntentService {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
private void initLogger(Context context) {
|
||||||
protected void onError(Context context, String errorId) {
|
LinphonePreferences.instance().setContext(context);
|
||||||
boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled();
|
boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled();
|
||||||
LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled);
|
LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled);
|
||||||
LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name));
|
LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onError(Context context, String errorId) {
|
||||||
|
initLogger(context);
|
||||||
Log.e("Error while registering push notification : " + errorId);
|
Log.e("Error while registering push notification : " + errorId);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onMessage(Context context, Intent intent) {
|
protected void onMessage(Context context, Intent intent) {
|
||||||
boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled();
|
initLogger(context);
|
||||||
LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled);
|
|
||||||
LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name));
|
|
||||||
Log.d("Push notification received");
|
Log.d("Push notification received");
|
||||||
|
|
||||||
if (!LinphoneService.isReady()) {
|
if (!LinphoneService.isReady()) {
|
||||||
|
@ -70,15 +73,12 @@ public class GCMService extends GCMBaseIntentService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onRegistered(Context context, String regId) {
|
protected void onRegistered(Context context, String regId) {
|
||||||
boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled();
|
initLogger(context);
|
||||||
LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled);
|
|
||||||
LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name));
|
|
||||||
Log.d("Registered push notification : " + regId);
|
Log.d("Registered push notification : " + regId);
|
||||||
|
|
||||||
LinphonePreferences.instance().setPushNotificationRegistrationID(regId);
|
LinphonePreferences.instance().setPushNotificationRegistrationID(regId);
|
||||||
|
@ -86,9 +86,7 @@ public class GCMService extends GCMBaseIntentService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onUnregistered(Context context, String regId) {
|
protected void onUnregistered(Context context, String regId) {
|
||||||
boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled();
|
initLogger(context);
|
||||||
LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled);
|
|
||||||
LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name));
|
|
||||||
Log.w("Unregistered push notification : " + regId);
|
Log.w("Unregistered push notification : " + regId);
|
||||||
|
|
||||||
LinphonePreferences.instance().setPushNotificationRegistrationID(null);
|
LinphonePreferences.instance().setPushNotificationRegistrationID(null);
|
||||||
|
|
|
@ -39,7 +39,6 @@ import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageView;
|
|
||||||
import android.widget.LinearLayout;
|
import android.widget.LinearLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
|
@ -339,7 +339,8 @@ public class InAppPurchaseHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
private Purchasable verifySignature(String payload, String signature) {
|
private Purchasable verifySignature(String payload, String signature) {
|
||||||
XmlRpcHelper helper = new XmlRpcHelper();
|
// TODO FIXME rework to be async
|
||||||
|
/*XmlRpcHelper helper = new XmlRpcHelper();
|
||||||
if (helper.verifySignature(payload, signature)) {
|
if (helper.verifySignature(payload, signature)) {
|
||||||
try {
|
try {
|
||||||
JSONObject json = new JSONObject(payload);
|
JSONObject json = new JSONObject(payload);
|
||||||
|
@ -350,7 +351,7 @@ public class InAppPurchaseHelper {
|
||||||
} catch (JSONException e) {
|
} catch (JSONException e) {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,6 @@ import java.util.Map.Entry;
|
||||||
import org.linphone.LinphoneActivity;
|
import org.linphone.LinphoneActivity;
|
||||||
import org.linphone.LinphoneContact;
|
import org.linphone.LinphoneContact;
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
import org.linphone.LinphonePreferences;
|
|
||||||
import org.linphone.LinphoneUtils;
|
import org.linphone.LinphoneUtils;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.LinphoneBuffer;
|
import org.linphone.core.LinphoneBuffer;
|
||||||
|
|
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
package org.linphone.ui;
|
package org.linphone.ui;
|
||||||
|
|
||||||
import org.linphone.LinphoneManager;
|
import org.linphone.LinphoneManager;
|
||||||
|
import org.linphone.LinphonePreferences;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.core.CallDirection;
|
import org.linphone.core.CallDirection;
|
||||||
import org.linphone.core.LinphoneCallLog;
|
import org.linphone.core.LinphoneCallLog;
|
||||||
|
@ -54,7 +55,7 @@ public class CallButton extends ImageView implements OnClickListener, AddressAwa
|
||||||
if (mAddress.getText().length() > 0) {
|
if (mAddress.getText().length() > 0) {
|
||||||
LinphoneManager.getInstance().newOutgoingCall(mAddress);
|
LinphoneManager.getInstance().newOutgoingCall(mAddress);
|
||||||
} else {
|
} else {
|
||||||
if (getContext().getResources().getBoolean(R.bool.call_last_log_if_adress_is_empty)) {
|
if (LinphonePreferences.instance().isBisFeatureEnabled()) {
|
||||||
LinphoneCallLog[] logs = LinphoneManager.getLc().getCallLogs();
|
LinphoneCallLog[] logs = LinphoneManager.getLc().getCallLogs();
|
||||||
LinphoneCallLog log = null;
|
LinphoneCallLog log = null;
|
||||||
for (LinphoneCallLog l : logs) {
|
for (LinphoneCallLog l : logs) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ public class LinphoneOverlay extends org.linphone.mediastream.video.display.GL2J
|
||||||
private float y;
|
private float y;
|
||||||
private float touchX;
|
private float touchX;
|
||||||
private float touchY;
|
private float touchY;
|
||||||
|
private boolean dragEnabled;
|
||||||
private AndroidVideoWindowImpl androidVideoWindowImpl;
|
private AndroidVideoWindowImpl androidVideoWindowImpl;
|
||||||
|
|
||||||
public LinphoneOverlay(Context context, AttributeSet attrs, int defStyle) {
|
public LinphoneOverlay(Context context, AttributeSet attrs, int defStyle) {
|
||||||
|
@ -71,6 +72,13 @@ public class LinphoneOverlay extends org.linphone.mediastream.video.display.GL2J
|
||||||
context.startActivity(intent);
|
context.startActivity(intent);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
setOnLongClickListener(new OnLongClickListener() {
|
||||||
|
@Override
|
||||||
|
public boolean onLongClick(View v) {
|
||||||
|
dragEnabled = true;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public LinphoneOverlay(Context context, AttributeSet attrs) {
|
public LinphoneOverlay(Context context, AttributeSet attrs) {
|
||||||
|
@ -95,11 +103,14 @@ public class LinphoneOverlay extends org.linphone.mediastream.video.display.GL2J
|
||||||
touchY = event.getY();
|
touchY = event.getY();
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_MOVE:
|
case MotionEvent.ACTION_MOVE:
|
||||||
updateViewPostion();
|
if (dragEnabled) {
|
||||||
|
updateViewPostion();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case MotionEvent.ACTION_CANCEL:
|
case MotionEvent.ACTION_CANCEL:
|
||||||
case MotionEvent.ACTION_UP:
|
case MotionEvent.ACTION_UP:
|
||||||
touchX = touchY = 0;
|
touchX = touchY = 0;
|
||||||
|
dragEnabled = false;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -1,7 +1,5 @@
|
||||||
package org.linphone.ui;
|
package org.linphone.ui;
|
||||||
|
|
||||||
import org.linphone.R;
|
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.graphics.Canvas;
|
import android.graphics.Canvas;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
|
|
@ -70,7 +70,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Must be provided
|
// Must be provided
|
||||||
public PreferencesListFragment(){
|
public PreferencesListFragment() {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -123,7 +123,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
m.setAccessible(true);
|
m.setAccessible(true);
|
||||||
m.invoke(mPreferenceManager);
|
m.invoke(mPreferenceManager);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] onStop " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -136,7 +136,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
m.setAccessible(true);
|
m.setAccessible(true);
|
||||||
m.invoke(mPreferenceManager);
|
m.invoke(mPreferenceManager);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] onDestroy " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
m.setAccessible(true);
|
m.setAccessible(true);
|
||||||
m.invoke(mPreferenceManager, requestCode, resultCode, data);
|
m.invoke(mPreferenceManager, requestCode, resultCode, data);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] onActivityResult " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -188,7 +188,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
PreferenceManager preferenceManager = c.newInstance(this.getActivity(), FIRST_REQUEST_CODE);
|
PreferenceManager preferenceManager = c.newInstance(this.getActivity(), FIRST_REQUEST_CODE);
|
||||||
return preferenceManager;
|
return preferenceManager;
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] onCreatePreferenceManager " + e);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -215,7 +215,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
postBindPreferences();
|
postBindPreferences();
|
||||||
}
|
}
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] setPreferenceScreen " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -231,7 +231,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
m.setAccessible(true);
|
m.setAccessible(true);
|
||||||
return (PreferenceScreen) m.invoke(mPreferenceManager);
|
return (PreferenceScreen) m.invoke(mPreferenceManager);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] getPreferenceScreen " + e);
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
|
@ -250,7 +250,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
PreferenceScreen prefScreen = (PreferenceScreen) m.invoke(mPreferenceManager, getActivity(), preferencesResId, getPreferenceScreen());
|
PreferenceScreen prefScreen = (PreferenceScreen) m.invoke(mPreferenceManager, getActivity(), preferencesResId, getPreferenceScreen());
|
||||||
setPreferenceScreen(prefScreen);
|
setPreferenceScreen(prefScreen);
|
||||||
} catch(Exception e) {
|
} catch(Exception e) {
|
||||||
Log.e(e);
|
Log.e("[PreferencesListFragment] addPreferencesFromResource " + e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -263,6 +263,7 @@ public class PreferencesListFragment extends ListFragment {
|
||||||
*/
|
*/
|
||||||
public Preference findPreference(CharSequence key) {
|
public Preference findPreference(CharSequence key) {
|
||||||
if (mPreferenceManager == null) {
|
if (mPreferenceManager == null) {
|
||||||
|
Log.e("[PreferencesListFragment] PreferenceManager is null !");
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
return mPreferenceManager.findPreference(key);
|
return mPreferenceManager.findPreference(key);
|
||||||
|
|
|
@ -160,6 +160,7 @@ public class SlidingDrawer extends ViewGroup {
|
||||||
* @param defStyle
|
* @param defStyle
|
||||||
* The style to apply to this widget.
|
* The style to apply to this widget.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public SlidingDrawer(Context context, AttributeSet attrs, int defStyle) {
|
public SlidingDrawer(Context context, AttributeSet attrs, int defStyle) {
|
||||||
super(context, attrs, defStyle);
|
super(context, attrs, defStyle);
|
||||||
TypedArray a = context.obtainStyledAttributes(attrs,
|
TypedArray a = context.obtainStyledAttributes(attrs,
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1 +1 @@
|
||||||
Subproject commit cedccbe75ca28f1a7f5ab953d652511b46804fa4
|
Subproject commit 2b6e15cddcd3e4480161b3a5a3b3af77317cefd5
|
|
@ -1 +1 @@
|
||||||
Subproject commit fa1dbedef5e69cb304dbf77463b05376618795b4
|
Subproject commit d892c1c397370d26e646a412d5df6bd5fb103a88
|
1
submodules/externals/axmlrpc
vendored
1
submodules/externals/axmlrpc
vendored
|
@ -1 +0,0 @@
|
||||||
Subproject commit c47eaa453fb75d55d32304413672c16706af85e0
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit d0c6e9766c86fca904db40c17f78cf00eb0e8c0c
|
Subproject commit 2974b7ef419876105d6142750b4dbb40723e8a87
|
Loading…
Reference in a new issue