Merge with master branch, commit 3aff3070e7
, working state
This commit is contained in:
commit
e8f04f3d7c
93 changed files with 18313 additions and 5390 deletions
16
.classpath
16
.classpath
|
@ -1,16 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<classpath>
|
|
||||||
<classpathentry excluding="org/linphone/mediastream/MediastreamerActivity.java" kind="src" path="submodules/linphone/mediastreamer2/java/src"/>
|
|
||||||
<classpathentry kind="src" path="submodules/linphone/java/j2se"/>
|
|
||||||
<classpathentry kind="src" path="submodules/linphone/java/common"/>
|
|
||||||
<classpathentry kind="src" path="submodules/linphone/java/impl"/>
|
|
||||||
<classpathentry kind="src" path="submodules/linphone/coreapi/help/java"/>
|
|
||||||
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
|
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/>
|
|
||||||
<classpathentry kind="lib" path="libs/android-support-v4.jar"/>
|
|
||||||
<classpathentry exported="true" kind="lib" path="libs/gcm.jar"/>
|
|
||||||
<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/>
|
|
||||||
<classpathentry kind="src" path="src"/>
|
|
||||||
<classpathentry kind="src" path="gen"/>
|
|
||||||
<classpathentry kind="output" path="bin/classes"/>
|
|
||||||
</classpath>
|
|
12
.gitignore
vendored
12
.gitignore
vendored
|
@ -14,7 +14,7 @@ default.properties
|
||||||
doc
|
doc
|
||||||
gen
|
gen
|
||||||
liblinphone-junit-report.xml
|
liblinphone-junit-report.xml
|
||||||
liblinphone-sdk
|
liblinphone-sdk/android-*
|
||||||
liblinphonetester_*.zip
|
liblinphonetester_*.zip
|
||||||
libs
|
libs
|
||||||
libs-debug
|
libs-debug
|
||||||
|
@ -29,7 +29,6 @@ proguard-project.txt
|
||||||
project.properties
|
project.properties
|
||||||
res/.DS_Store
|
res/.DS_Store
|
||||||
res/raw/lpconfig.xsd
|
res/raw/lpconfig.xsd
|
||||||
res/raw/rootca.pem
|
|
||||||
submodules/externals/build/cunit/CUnit/
|
submodules/externals/build/cunit/CUnit/
|
||||||
submodules/externals/build/ffmpeg/arm/
|
submodules/externals/build/ffmpeg/arm/
|
||||||
submodules/externals/build/ffmpeg/x86
|
submodules/externals/build/ffmpeg/x86
|
||||||
|
@ -49,7 +48,12 @@ tests/tests.output
|
||||||
WORK
|
WORK
|
||||||
.d
|
.d
|
||||||
google-services.json
|
google-services.json
|
||||||
gradle.properties
|
|
||||||
.*clang*
|
.*clang*
|
||||||
linphone.iml
|
**/*.iml
|
||||||
src/linphone-wrapper
|
src/linphone-wrapper
|
||||||
|
liblinphone_tester/res/raw/
|
||||||
|
**/.classpath
|
||||||
|
**/.project
|
||||||
|
**/*.kdev4
|
||||||
|
liblinphone-sdk/res/
|
||||||
|
**/.vscode
|
||||||
|
|
77
.gitmodules
vendored
77
.gitmodules
vendored
|
@ -1,119 +1,122 @@
|
||||||
[submodule "submodules/linphone"]
|
[submodule "submodules/linphone"]
|
||||||
path = submodules/linphone
|
path = submodules/linphone
|
||||||
url = git://git.linphone.org/linphone.git
|
url = https://gitlab.linphone.org/BC/public/linphone.git
|
||||||
[submodule "submodules/externals/gsm"]
|
[submodule "submodules/externals/gsm"]
|
||||||
path = submodules/externals/gsm
|
path = submodules/externals/gsm
|
||||||
url = git://git.linphone.org/gsm.git
|
url = https://gitlab.linphone.org/BC/public/external/gsm.git
|
||||||
[submodule "submodules/externals/speex"]
|
[submodule "submodules/externals/speex"]
|
||||||
path = submodules/externals/speex
|
path = submodules/externals/speex
|
||||||
url = git://git.linphone.org/speex.git
|
url = https://gitlab.linphone.org/BC/public/external/speex.git
|
||||||
[submodule "submodules/externals/ffmpeg"]
|
[submodule "submodules/externals/ffmpeg"]
|
||||||
path = submodules/externals/ffmpeg
|
path = submodules/externals/ffmpeg
|
||||||
url = git://git.linphone.org/ffmpeg.git
|
url = https://gitlab.linphone.org/BC/public/external/ffmpeg.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/externals/x264"]
|
[submodule "submodules/externals/x264"]
|
||||||
path = submodules/externals/x264
|
path = submodules/externals/x264
|
||||||
url = git://git.linphone.org/x264.git
|
url = https://gitlab.linphone.org/BC/public/external/x264.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/msx264"]
|
[submodule "submodules/msx264"]
|
||||||
path = submodules/msx264
|
path = submodules/msx264
|
||||||
url = git://git.linphone.org/msx264.git
|
url = https://gitlab.linphone.org/BC/public/msx264.git
|
||||||
[submodule "submodules/externals/opencore-amr"]
|
[submodule "submodules/externals/opencore-amr"]
|
||||||
path = submodules/externals/opencore-amr
|
path = submodules/externals/opencore-amr
|
||||||
url = git://git.linphone.org/opencore-amr.git
|
url = https://gitlab.linphone.org/BC/public/external/opencore-amr.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/msamr"]
|
[submodule "submodules/msamr"]
|
||||||
path = submodules/msamr
|
path = submodules/msamr
|
||||||
url = git://git.linphone.org/msamr.git
|
url = https://gitlab.linphone.org/BC/public/msamr.git
|
||||||
[submodule "submodules/externals/libvpx"]
|
[submodule "submodules/externals/libvpx"]
|
||||||
path = submodules/externals/libvpx
|
path = submodules/externals/libvpx
|
||||||
url = git://git.linphone.org/libvpx.git
|
url = https://gitlab.linphone.org/BC/public/external/libvpx.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/bzrtp"]
|
[submodule "submodules/bzrtp"]
|
||||||
path = submodules/bzrtp
|
path = submodules/bzrtp
|
||||||
url = git://git.linphone.org/bzrtp.git
|
url = https://gitlab.linphone.org/BC/public/bzrtp.git
|
||||||
[submodule "submodules/externals/srtp"]
|
[submodule "submodules/externals/srtp"]
|
||||||
path = submodules/externals/srtp
|
path = submodules/externals/srtp
|
||||||
url = git://git.linphone.org/srtp.git
|
url = https://gitlab.linphone.org/BC/public/external/srtp.git
|
||||||
[submodule "submodules/mssilk"]
|
[submodule "submodules/mssilk"]
|
||||||
path = submodules/mssilk
|
path = submodules/mssilk
|
||||||
url = git://git.linphone.org/mssilk.git
|
url = https://gitlab.linphone.org/BC/public/mssilk.git
|
||||||
[submodule "submodules/bcg729"]
|
[submodule "submodules/bcg729"]
|
||||||
path = submodules/bcg729
|
path = submodules/bcg729
|
||||||
url = git://git.linphone.org/bcg729.git
|
url = https://gitlab.linphone.org/BC/public/bcg729.git
|
||||||
[submodule "submodules/belle-sip"]
|
[submodule "submodules/belle-sip"]
|
||||||
path = submodules/belle-sip
|
path = submodules/belle-sip
|
||||||
url = git://git.linphone.org/belle-sip.git
|
url = https://gitlab.linphone.org/BC/public/belle-sip.git
|
||||||
[submodule "submodules/externals/libxml2"]
|
[submodule "submodules/externals/libxml2"]
|
||||||
path = submodules/externals/libxml2
|
path = submodules/externals/libxml2
|
||||||
url = https://github.com/GNOME/libxml2.git
|
url = https://gitlab.linphone.org/BC/public/external/libxml2.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/externals/libupnp"]
|
[submodule "submodules/externals/libupnp"]
|
||||||
path = submodules/externals/libupnp
|
path = submodules/externals/libupnp
|
||||||
url = git://git.linphone.org/libupnp.git
|
url = https://gitlab.linphone.org/BC/public/external/libupnp.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 = https://gitlab.linphone.org/BC/public/external/opus.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/mswebrtc"]
|
[submodule "submodules/mswebrtc"]
|
||||||
path = submodules/mswebrtc
|
path = submodules/mswebrtc
|
||||||
url = git://git.linphone.org/mswebrtc.git
|
url = https://gitlab.linphone.org/BC/public/mswebrtc.git
|
||||||
[submodule "submodules/msopenh264"]
|
[submodule "submodules/msopenh264"]
|
||||||
path = submodules/msopenh264
|
path = submodules/msopenh264
|
||||||
url = git://git.linphone.org/msopenh264.git
|
url = https://gitlab.linphone.org/BC/public/msopenh264.git
|
||||||
[submodule "submodules/externals/openh264"]
|
[submodule "submodules/externals/openh264"]
|
||||||
path = submodules/externals/openh264
|
path = submodules/externals/openh264
|
||||||
url = https://github.com/cisco/openh264
|
url = https://gitlab.linphone.org/BC/public/external/openh264.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/mscodec2"]
|
[submodule "submodules/mscodec2"]
|
||||||
path = submodules/mscodec2
|
path = submodules/mscodec2
|
||||||
url = git://git.linphone.org/mscodec2.git
|
url = https://gitlab.linphone.org/BC/public/mscodec2.git
|
||||||
[submodule "submodules/bctoolbox"]
|
[submodule "submodules/bctoolbox"]
|
||||||
path = submodules/bctoolbox
|
path = submodules/bctoolbox
|
||||||
url = git://git.linphone.org/bctoolbox.git
|
url = https://gitlab.linphone.org/BC/public/bctoolbox.git
|
||||||
[submodule "submodules/externals/mbedtls"]
|
[submodule "submodules/externals/mbedtls"]
|
||||||
path = submodules/externals/mbedtls
|
path = submodules/externals/mbedtls
|
||||||
url = git://git.linphone.org/mbedtls.git
|
url = https://gitlab.linphone.org/BC/public/external/mbedtls.git
|
||||||
ignore = dirty
|
ignore = dirty
|
||||||
[submodule "submodules/cmake-builder"]
|
[submodule "submodules/cmake-builder"]
|
||||||
path = submodules/cmake-builder
|
path = submodules/cmake-builder
|
||||||
url = git://git.linphone.org/linphone-cmake-builder.git
|
url = https://gitlab.linphone.org/BC/public/linphone-cmake-builder.git
|
||||||
[submodule "submodules/externals/bv16-floatingpoint"]
|
[submodule "submodules/externals/bv16-floatingpoint"]
|
||||||
path = submodules/externals/bv16-floatingpoint
|
path = submodules/externals/bv16-floatingpoint
|
||||||
url = git://git.linphone.org/bv16-floatingpoint.git
|
url = https://gitlab.linphone.org/BC/public/external/bv16-floatingpoint.git
|
||||||
[submodule "submodules/belr"]
|
[submodule "submodules/belr"]
|
||||||
path = submodules/belr
|
path = submodules/belr
|
||||||
url = git://git.linphone.org/belr.git
|
url = https://gitlab.linphone.org/BC/public/belr.git
|
||||||
[submodule "submodules/belcard"]
|
[submodule "submodules/belcard"]
|
||||||
path = submodules/belcard
|
path = submodules/belcard
|
||||||
url = git://git.linphone.org/belcard.git
|
url = https://gitlab.linphone.org/BC/public/belcard.git
|
||||||
[submodule "submodules/bcunit"]
|
[submodule "submodules/bcunit"]
|
||||||
path = submodules/bcunit
|
path = submodules/bcunit
|
||||||
url = git://git.linphone.org/bcunit.git
|
url = https://gitlab.linphone.org/BC/public/bcunit.git
|
||||||
[submodule "submodules/externals/vo-amrwbenc"]
|
[submodule "submodules/externals/vo-amrwbenc"]
|
||||||
path = submodules/externals/vo-amrwbenc
|
path = submodules/externals/vo-amrwbenc
|
||||||
url = git://git.linphone.org/vo-amrwbenc.git
|
url = https://gitlab.linphone.org/BC/public/external/vo-amrwbenc.git
|
||||||
[submodule "submodules/externals/codec2"]
|
[submodule "submodules/externals/codec2"]
|
||||||
path = submodules/externals/codec2
|
path = submodules/externals/codec2
|
||||||
url = git://git.linphone.org/codec2
|
url = https://gitlab.linphone.org/BC/public/external/codec2.git
|
||||||
[submodule "submodules/externals/libjpeg-turbo"]
|
[submodule "submodules/externals/libjpeg-turbo"]
|
||||||
path = submodules/externals/libjpeg-turbo
|
path = submodules/externals/libjpeg-turbo
|
||||||
url = git://git.linphone.org/libjpeg-turbo.git
|
url = https://gitlab.linphone.org/BC/public/external/libjpeg-turbo.git
|
||||||
[submodule "submodules/mediastreamer2"]
|
[submodule "submodules/mediastreamer2"]
|
||||||
path = submodules/mediastreamer2
|
path = submodules/mediastreamer2
|
||||||
url = git://git.linphone.org/mediastreamer2.git
|
url = https://gitlab.linphone.org/BC/public/mediastreamer2.git
|
||||||
[submodule "submodules/oRTP"]
|
[submodule "submodules/oRTP"]
|
||||||
path = submodules/oRTP
|
path = submodules/oRTP
|
||||||
url = git://git.linphone.org/ortp.git
|
url = https://gitlab.linphone.org/BC/public/ortp.git
|
||||||
[submodule "submodules/bcmatroska2"]
|
[submodule "submodules/bcmatroska2"]
|
||||||
path = submodules/bcmatroska2
|
path = submodules/bcmatroska2
|
||||||
url = git://git.linphone.org/bcmatroska2.git
|
url = https://gitlab.linphone.org/BC/public/bcmatroska2.git
|
||||||
[submodule "submodules/externals/xerces-c"]
|
[submodule "submodules/externals/xerces-c"]
|
||||||
path = submodules/externals/xerces-c
|
path = submodules/externals/xerces-c
|
||||||
url = git://git.linphone.org/xerces-c.git
|
url = https://gitlab.linphone.org/BC/public/external/xerces-c.git
|
||||||
[submodule "submodules/externals/libxsd"]
|
[submodule "submodules/externals/libxsd"]
|
||||||
path = submodules/externals/libxsd
|
path = submodules/externals/libxsd
|
||||||
url = git://git.linphone.org/libxsd
|
url = https://gitlab.linphone.org/BC/public/external/libxsd.git
|
||||||
[submodule "submodules/externals/soci"]
|
[submodule "submodules/externals/soci"]
|
||||||
path = submodules/externals/soci
|
path = submodules/externals/soci
|
||||||
url = git://git.linphone.org/soci
|
url = https://gitlab.linphone.org/BC/public/external/soci.git
|
||||||
|
[submodule "submodules/externals/zxing-cpp"]
|
||||||
|
path = submodules/externals/zxing-cpp
|
||||||
|
url = https://gitlab.linphone.org/BC/public/external/zxing-cpp.git
|
||||||
|
|
33
.project
33
.project
|
@ -1,33 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<projectDescription>
|
|
||||||
<name>linphone-android</name>
|
|
||||||
<comment></comment>
|
|
||||||
<projects>
|
|
||||||
</projects>
|
|
||||||
<buildSpec>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>org.eclipse.jdt.core.javabuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
<buildCommand>
|
|
||||||
<name>com.android.ide.eclipse.adt.ApkBuilder</name>
|
|
||||||
<arguments>
|
|
||||||
</arguments>
|
|
||||||
</buildCommand>
|
|
||||||
</buildSpec>
|
|
||||||
<natures>
|
|
||||||
<nature>com.android.ide.eclipse.adt.AndroidNature</nature>
|
|
||||||
<nature>org.eclipse.jdt.core.javanature</nature>
|
|
||||||
</natures>
|
|
||||||
</projectDescription>
|
|
|
@ -2,12 +2,12 @@
|
||||||
<manifest package="org.linphone"
|
<manifest package="org.linphone"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="3995"
|
android:versionCode="4002"
|
||||||
android:versionName="3.99.4">
|
android:versionName="4.0.1">
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="16"
|
android:minSdkVersion="16"
|
||||||
android:targetSdkVersion="26"/>
|
android:targetSdkVersion="28"/>
|
||||||
|
|
||||||
<uses-permission android:name="android.permission.INTERNET"/>
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
|
||||||
|
|
11
AndroidManifestSdk.xml
Executable file
11
AndroidManifestSdk.xml
Executable file
|
@ -0,0 +1,11 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest package="org.linphone"
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:installLocation="auto"
|
||||||
|
android:versionCode="4001"
|
||||||
|
android:versionName="4.0.0">
|
||||||
|
|
||||||
|
<uses-sdk
|
||||||
|
android:minSdkVersion="16"
|
||||||
|
android:targetSdkVersion="28"/>
|
||||||
|
</manifest>
|
24
CHANGELOG.md
24
CHANGELOG.md
|
@ -5,12 +5,34 @@ Group changes to describe their impact on the project, as follows:
|
||||||
|
|
||||||
Added for new features.
|
Added for new features.
|
||||||
Changed for changes in existing functionality.
|
Changed for changes in existing functionality.
|
||||||
Deprecated for once-stable features removed in upcoming releases.é
|
Deprecated for once-stable features removed in upcoming releases.
|
||||||
Removed for deprecated features removed in this release.
|
Removed for deprecated features removed in this release.
|
||||||
Fixed for any bug fixes.
|
Fixed for any bug fixes.
|
||||||
Security to invite users to upgrade in case of vulnerabilities.
|
Security to invite users to upgrade in case of vulnerabilities.
|
||||||
|
|
||||||
## [Incomming]
|
## [Incomming]
|
||||||
|
- feature: support of H265 codec.
|
||||||
|
|
||||||
|
## [4.0.1] - 2018-06-26
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- fix loading of plugins
|
||||||
|
- fix issue with video stream, not started when receiving an incoming call just after the app is launched
|
||||||
|
- fix issue with TURN
|
||||||
|
|
||||||
|
## [4.0.0] - 2018-06-15
|
||||||
|
|
||||||
|
### Added
|
||||||
|
- Group chat between linphone.org SIP accounts.
|
||||||
|
- new JAVA/JNI wrapper. This new wrapper is automatically generated from liblinphone C API. It breaks compatibility with previous, hand-made wrapper.
|
||||||
|
(more information about new wrapper [here.](https://wiki.linphone.org/xwiki/wiki/public/view/Lib/Linphone%20%28Android%29%20Java%20wrapper/) )
|
||||||
|
|
||||||
|
### Deprecated
|
||||||
|
- hand-made java API in submodules/linphone/java is deprecated. However it is still possible to use it by checking out the 3.4.x branch of linphone-android.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
- issue with changing push notification token not passed to library, possibly resulting in a loss of incoming calls.
|
||||||
|
|
||||||
|
|
||||||
## [3.3.0] - 2017-10-18
|
## [3.3.0] - 2017-10-18
|
||||||
|
|
||||||
|
|
13
README.md
13
README.md
|
@ -1,14 +1,16 @@
|
||||||
|
[](https://gitlab.linphone.org/BC/public/linphone-android/commits/master)
|
||||||
|
|
||||||
Linphone is a free VoIP and video softphone based on the SIP protocol.
|
Linphone is a free VoIP and video softphone based on the SIP protocol.
|
||||||
|
|
||||||
# COMPILATION INSTRUCTIONS
|
# COMPILATION INSTRUCTIONS
|
||||||
|
|
||||||
## To build liblinphone for Android, you must:
|
## To build liblinphone for Android, you must:
|
||||||
|
|
||||||
1. Download the Android sdk (API 26.0.1 at max) with platform-tools and tools updated to latest revision, then add both 'tools' and 'platform-tools' folders in your path and the android-sdk folder to ANDROID_HOME environment variable.
|
1. Download the Android sdk (API 28.0.0 at max) with platform-tools and tools updated to latest revision, then add both 'tools' and 'platform-tools' folders in your path and the android-sdk folder to ANDROID_HOME environment variable.
|
||||||
|
|
||||||
2. Download the Android ndk (version r11c or 15) from google and add it to your path (no symlink !!!) and ANDROID_NDK environment variable.
|
2. Download the Android ndk (version 16) from google and add it to your path (no symlink !!!) and ANDROID_NDK environment variable.
|
||||||
|
|
||||||
3. Install _yasm_, _nasm_ (For OpenH224 support only), _python_, _pkg_config_ and _cmake(>=3.7)_.
|
3. Install _yasm_, _nasm_ (For OpenH224 support only), _python_, _pkg_config_ and _cmake(>=3.10)_.
|
||||||
* On 64 bits linux systems you'll need the _ia32-libs_ package.
|
* On 64 bits linux systems you'll need the _ia32-libs_ package.
|
||||||
* With the latest Debian (multiarch), you need this:
|
* With the latest Debian (multiarch), you need this:
|
||||||
* `dpkg --add-architecture i386`
|
* `dpkg --add-architecture i386`
|
||||||
|
@ -65,11 +67,6 @@ You can speed up the compilation by using ccache (compiler cache, see [ccache.sa
|
||||||
To enable firebase in Linphone, just add your 'google-service.json' in project root, add your key at 'push_sender_id' and add 'firebase' at 'push_type' in 'res/values/non_localizable_custom.xml'
|
To enable firebase in Linphone, just add your 'google-service.json' in project root, add your key at 'push_sender_id' and add 'firebase' at 'push_type' in 'res/values/non_localizable_custom.xml'
|
||||||
Be sure to have all services for Firebase in your 'AndroidManifest.xml'
|
Be sure to have all services for Firebase in your 'AndroidManifest.xml'
|
||||||
|
|
||||||
## Google
|
|
||||||
|
|
||||||
To enable google push in Linphone, remove 'google-service.json' file if it exist, add your key at 'push_sender_id' and add 'google' at 'push_type' in 'res/values/non_localizable_custom.xml'
|
|
||||||
Be sure to have every permissions and services for GCM in your 'AndroidManifest.xml'
|
|
||||||
|
|
||||||
# TROUBLESHOOTING
|
# TROUBLESHOOTING
|
||||||
|
|
||||||
If you encounter the following issue:
|
If you encounter the following issue:
|
||||||
|
|
48
bsed.sh
48
bsed.sh
|
@ -1,48 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Script found at http://everydaywithlinux.blogspot.fr/2012/11/patch-strings-in-binary-files-with-sed.html
|
|
||||||
|
|
||||||
function patch_strings_in_file() {
|
|
||||||
local FILE="$1"
|
|
||||||
local PATTERN="$2"
|
|
||||||
local REPLACEMENT="$3"
|
|
||||||
|
|
||||||
# Find all unique strings in FILE that contain the pattern
|
|
||||||
STRINGS=$(strings ${FILE} | grep ${PATTERN} | sort -u -r)
|
|
||||||
|
|
||||||
if [ "${STRINGS}" != "" ] ; then
|
|
||||||
echo "File '${FILE}' contain strings with '${PATTERN}' in them:"
|
|
||||||
|
|
||||||
for OLD_STRING in ${STRINGS} ; do
|
|
||||||
# Create the new string with a simple bash-replacement
|
|
||||||
NEW_STRING=${OLD_STRING//${PATTERN}/${REPLACEMENT}}
|
|
||||||
|
|
||||||
# Create null terminated ASCII HEX representations of the strings
|
|
||||||
OLD_STRING_HEX="$(echo -n ${OLD_STRING} | xxd -g 0 -u -ps -c 256)00"
|
|
||||||
NEW_STRING_HEX="$(echo -n ${NEW_STRING} | xxd -g 0 -u -ps -c 256)00"
|
|
||||||
|
|
||||||
if [ ${#NEW_STRING_HEX} -le ${#OLD_STRING_HEX} ] ; then
|
|
||||||
# Pad the replacement string with null terminations so the
|
|
||||||
# length matches the original string
|
|
||||||
while [ ${#NEW_STRING_HEX} -lt ${#OLD_STRING_HEX} ] ; do
|
|
||||||
NEW_STRING_HEX="${NEW_STRING_HEX}00"
|
|
||||||
done
|
|
||||||
|
|
||||||
# Now, replace every occurrence of OLD_STRING with NEW_STRING
|
|
||||||
echo -n "Replacing ${OLD_STRING} with ${NEW_STRING}... "
|
|
||||||
hexdump -ve '1/1 "%.2X"' ${FILE} | \
|
|
||||||
sed "s/${OLD_STRING_HEX}/${NEW_STRING_HEX}/g" | \
|
|
||||||
xxd -r -p > ${FILE}.tmp
|
|
||||||
chmod --reference ${FILE} ${FILE}.tmp
|
|
||||||
mv ${FILE}.tmp ${FILE}
|
|
||||||
echo "Done!"
|
|
||||||
else
|
|
||||||
echo "New string '${NEW_STRING}' is longer than old" \
|
|
||||||
"string '${OLD_STRING}'. Skipping."
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
patch_strings_in_file libs/armeabi-v7a/liblinphone-armeabi-v7a.so "./obj/local/armeabi-v7a/libffmpeg-linphone-arm.so" "libffmpeg-linphone-arm.so"
|
|
||||||
patch_strings_in_file libs/x86/liblinphone-x86.so "./obj/local/x86/libffmpeg-linphone-x86.so" "libffmpeg-linphone-x86.so"
|
|
25
build.gradle
25
build.gradle
|
@ -45,23 +45,19 @@ dependencies {
|
||||||
androidTestImplementation 'junit:junit:4.12'
|
androidTestImplementation 'junit:junit:4.12'
|
||||||
implementation 'org.apache.commons:commons-compress:1.16.1'
|
implementation 'org.apache.commons:commons-compress:1.16.1'
|
||||||
if (firebaseEnable()) {
|
if (firebaseEnable()) {
|
||||||
implementation 'com.google.firebase:firebase-messaging:12.0.1'
|
implementation 'com.google.firebase:firebase-messaging:15.0.2'
|
||||||
}
|
}
|
||||||
implementation 'com.android.support:support-v4:27.1.1'
|
implementation 'com.android.support:support-v4:27.1.1'
|
||||||
implementation 'com.android.support:recyclerview-v7:27.1.1'
|
implementation 'com.android.support:recyclerview-v7:27.1.1'
|
||||||
implementation 'com.android.support:appcompat-v7:27.1.1'
|
implementation 'com.android.support:appcompat-v7:27.1.1'
|
||||||
implementation 'com.android.support:design:27.1.1'
|
implementation 'com.android.support:design:27.1.1'
|
||||||
|
implementation project(':liblinphone-sdk')
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firebaseEnable()) {
|
if (firebaseEnable()) {
|
||||||
apply plugin: 'com.google.gms.google-services'
|
apply plugin: 'com.google.gms.google-services'
|
||||||
}
|
}
|
||||||
|
|
||||||
//// Submodule Dir /////
|
|
||||||
def submoduleDir = ['submodules/mediastreamer2/java/src']
|
|
||||||
////////////////////////
|
|
||||||
|
|
||||||
///// Exclude Files /////
|
///// Exclude Files /////
|
||||||
def excludeFiles = []
|
def excludeFiles = []
|
||||||
// Exclude firebase file if not enable
|
// Exclude firebase file if not enable
|
||||||
|
@ -72,7 +68,7 @@ if (!firebaseEnable()) {
|
||||||
excludeFiles.add('**/gcm*')
|
excludeFiles.add('**/gcm*')
|
||||||
println '[Push Notification] Firebase enabled'
|
println '[Push Notification] Firebase enabled'
|
||||||
}
|
}
|
||||||
excludeFiles.add('**/mediastream/MediastreamerActivity.java')
|
|
||||||
excludeFiles.add('src/android/org/linphone/tutorials/*.java')
|
excludeFiles.add('src/android/org/linphone/tutorials/*.java')
|
||||||
|
|
||||||
def excludePackage = []
|
def excludePackage = []
|
||||||
|
@ -85,7 +81,8 @@ excludePackage.add('**/LICENSE.txt')
|
||||||
|
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
compileSdkVersion 26
|
compileSdkVersion 28
|
||||||
|
buildToolsVersion "28.0.0"
|
||||||
applicationId getPackageName()
|
applicationId getPackageName()
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
|
||||||
|
@ -114,20 +111,19 @@ android {
|
||||||
packaged {
|
packaged {
|
||||||
initWith release
|
initWith release
|
||||||
signingConfig null
|
signingConfig null
|
||||||
|
matchingFallbacks = ['debug', 'release']
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
main {
|
||||||
manifest.srcFile 'AndroidManifest.xml'
|
manifest.srcFile 'AndroidManifest.xml'
|
||||||
def srcDirs = submoduleDir
|
def srcDirs = ['src/android']
|
||||||
srcDirs.addAll(['src/linphone-wrapper', 'src/android'])
|
|
||||||
java.srcDirs = srcDirs
|
java.srcDirs = srcDirs
|
||||||
resources.srcDirs = srcDirs
|
resources.srcDirs = srcDirs
|
||||||
aidl.srcDirs = srcDirs
|
aidl.srcDirs = srcDirs
|
||||||
renderscript.srcDirs = srcDirs
|
renderscript.srcDirs = srcDirs
|
||||||
res.srcDirs = ['res']
|
res.srcDirs = ['res']
|
||||||
assets.srcDirs = ['assets']
|
assets.srcDirs = ['assets']
|
||||||
jniLibs.srcDirs = ['libs']
|
|
||||||
java.excludes = excludeFiles
|
java.excludes = excludeFiles
|
||||||
|
|
||||||
// Exclude some useless files
|
// Exclude some useless files
|
||||||
|
@ -142,16 +138,13 @@ android {
|
||||||
sourceSets {
|
sourceSets {
|
||||||
androidTest {
|
androidTest {
|
||||||
manifest.srcFile 'AndroidManifest.xml'
|
manifest.srcFile 'AndroidManifest.xml'
|
||||||
def srcDirs = submoduleDir
|
def srcDirs = ['src/android', 'src/androidTest']
|
||||||
srcDirs.addAll(['src/android',
|
|
||||||
'src/androidTest'])
|
|
||||||
java.srcDirs = srcDirs
|
java.srcDirs = srcDirs
|
||||||
resources.srcDirs = srcDirs
|
resources.srcDirs = srcDirs
|
||||||
aidl.srcDirs = srcDirs
|
aidl.srcDirs = srcDirs
|
||||||
renderscript.srcDirs = srcDirs
|
renderscript.srcDirs = srcDirs
|
||||||
res.srcDirs = ['res']
|
res.srcDirs = ['res']
|
||||||
assets.srcDirs = ['assets']
|
assets.srcDirs = ['assets']
|
||||||
jniLibs.srcDirs = ['libs']
|
|
||||||
java.excludes = excludeFiles
|
java.excludes = excludeFiles
|
||||||
|
|
||||||
// Exclude some useless files
|
// Exclude some useless files
|
||||||
|
@ -166,7 +159,7 @@ android {
|
||||||
packagingOptions {
|
packagingOptions {
|
||||||
pickFirst 'META-INF/NOTICE'
|
pickFirst 'META-INF/NOTICE'
|
||||||
pickFirst 'META-INF/LICENSE'
|
pickFirst 'META-INF/LICENSE'
|
||||||
pickFirst 'META-INF/MANIFEST.MF'
|
exclude 'META-INF/MANIFEST.MF'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,55 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
error_on_quit=0
|
|
||||||
|
|
||||||
echo_err() {
|
|
||||||
echo "$@" >&2
|
|
||||||
error_on_quit=1
|
|
||||||
}
|
|
||||||
|
|
||||||
check_installed() {
|
|
||||||
if [ -z "$(which $1)" ]; then
|
|
||||||
echo_err "Could not find $1. Please install $2."
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
for prog in automake autoconf pkg-config java ant yasm nasm wget; do
|
|
||||||
check_installed "$prog" "it"
|
|
||||||
done
|
|
||||||
if [ $(uname) = "Darwin" ]; then
|
|
||||||
check_installed "libtool" "libtool"
|
|
||||||
else
|
|
||||||
check_installed "libtoolize" "libtool"
|
|
||||||
fi
|
|
||||||
check_installed "ndk-build" "android NDK"
|
|
||||||
if check_installed "android" "android SDK"; then
|
|
||||||
check_installed "adb" "android SDK platform tools"
|
|
||||||
# check that at least one target is installed
|
|
||||||
if [ -z "$(android list target -c)" ]; then
|
|
||||||
echo_err "Install at least one android target in the android SDK"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if nasm -f elf32 2>&1 | grep -q "fatal: unrecognised output format"; then
|
|
||||||
echo_err "Invalid version of nasm: your version does not support elf32 output format. If you have installed nasm, please check that your PATH env variable is set correctly."
|
|
||||||
fi
|
|
||||||
if ! (find submodules/linphone/mediastreamer2 -mindepth 1 2>/dev/null | grep -q . \
|
|
||||||
|| find submodules/linphone/oRTP -mindepth 1 2>/dev/null | grep -q .); then
|
|
||||||
echo_err "Missing some git submodules. Did you run 'git submodule update --init --recursive'?"
|
|
||||||
fi
|
|
||||||
# Android NDK should NOT be simlinked!
|
|
||||||
if [ -L "$ANDROID_NDK" ] && [ -d "$ANDROID_NDK" ]; then
|
|
||||||
echo_err "ANDROID_NDK=$ANDROID_NDK must NOT be a symbolic link, please modify it accordingly"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $error_on_quit = 0 ]; then
|
|
||||||
rm -f check_tools.mk
|
|
||||||
touch check_tools.mk
|
|
||||||
echo "JAVA=\"$(which java)\"" >> check_tools.mk
|
|
||||||
echo "ANTLR=\"$(which java)\" -jar \"submodules/externals/antlr3/antlr-3.2.jar\"" >> check_tools.mk
|
|
||||||
else
|
|
||||||
echo "Failed to detect required tools, aborting."
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit $error_on_quit
|
|
7
gradle.properties
Normal file
7
gradle.properties
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// Signing APK Release
|
||||||
|
RELEASE_STORE_FILE=""
|
||||||
|
RELEASE_STORE_PASSWORD=
|
||||||
|
RELEASE_KEY_ALIAS=
|
||||||
|
RELEASE_KEY_PASSWORD=
|
||||||
|
source:https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory
|
||||||
|
org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
4
gradle/wrapper/gradle-wrapper.properties
vendored
4
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -1,6 +1,6 @@
|
||||||
#Tue Aug 29 16:02:50 CEST 2017
|
#Wed May 16 15:22:42 CEST 2018
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-4.7-all.zip
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
<manifest package="org.linphone.core"
|
<manifest package="org.linphone.core"
|
||||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:installLocation="auto"
|
android:installLocation="auto"
|
||||||
android:versionCode="3320"
|
android:versionCode="4001"
|
||||||
android:versionName="3.3.2">
|
android:versionName="4.0.0">
|
||||||
|
|
||||||
<uses-sdk
|
<uses-sdk
|
||||||
android:minSdkVersion="16"
|
android:minSdkVersion="16"
|
||||||
android:targetSdkVersion="26"/>
|
android:targetSdkVersion="28"/>
|
||||||
</manifest>
|
</manifest>
|
|
@ -21,18 +21,40 @@ allprojects {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
configurations {
|
configurations {
|
||||||
javadocDeps
|
javadocDeps
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
compile 'org.apache.commons:commons-compress:1.16.1'
|
||||||
javadocDeps group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
javadocDeps 'org.apache.commons:commons-compress:1.16.1'
|
||||||
}
|
}
|
||||||
|
|
||||||
def srcDir = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper']
|
def srcDir = ['../submodules/mediastreamer2/java/src']
|
||||||
|
def rootSdk
|
||||||
|
|
||||||
|
if (file('android-arm64/share/linphonej/java/org/linphone/core/Factory.java').exists() )
|
||||||
|
rootSdk = 'android-arm64'
|
||||||
|
else if (file('android-arm/share/linphonej/java/org/linphone/core/Factory.java').exists() )
|
||||||
|
rootSdk = 'android-arm'
|
||||||
|
else if (file('android-armv7/share/linphonej/java/org/linphone/core/Factory.java').exists() )
|
||||||
|
rootSdk = 'android-armv7'
|
||||||
|
else if (file('android-x86/share/linphonej/java/org/linphone/core/Factory.java').exists() )
|
||||||
|
rootSdk = 'android-x86'
|
||||||
|
else {
|
||||||
|
println ("native sdk not ready yet")
|
||||||
|
rootSdk = ""
|
||||||
|
}
|
||||||
|
|
||||||
|
srcDir += [rootSdk+'/share/linphonej/java/org/linphone/core/']
|
||||||
|
srcDir += ['../submodules/linphone/wrappers/java/classes/']
|
||||||
|
|
||||||
def excludePackage = []
|
def excludePackage = []
|
||||||
|
|
||||||
|
@ -42,9 +64,38 @@ excludePackage.add('**/**tester**')
|
||||||
excludePackage.add('**/LICENSE.txt')
|
excludePackage.add('**/LICENSE.txt')
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|
||||||
|
|
||||||
|
buildTypes {
|
||||||
|
release {}
|
||||||
|
debug {}
|
||||||
|
}
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
compileSdkVersion 26
|
compileSdkVersion 28
|
||||||
|
buildToolsVersion "28.0.0"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
|
setProperty("archivesBaseName", "liblinphone-sdk")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Signing
|
||||||
|
signingConfigs {
|
||||||
|
release {
|
||||||
|
storeFile file(RELEASE_STORE_FILE)
|
||||||
|
storePassword RELEASE_STORE_PASSWORD
|
||||||
|
keyAlias RELEASE_KEY_ALIAS
|
||||||
|
keyPassword RELEASE_KEY_PASSWORD
|
||||||
|
}
|
||||||
|
}
|
||||||
|
buildTypes {
|
||||||
|
release {
|
||||||
|
signingConfig signingConfigs.release
|
||||||
|
}
|
||||||
|
packaged {
|
||||||
|
initWith release
|
||||||
|
signingConfig null
|
||||||
|
//matchingFallbacks = ['debug', 'release']
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
lintOptions {
|
lintOptions {
|
||||||
|
@ -58,10 +109,11 @@ android {
|
||||||
main {
|
main {
|
||||||
manifest.srcFile 'AndroidManifestLibrary.xml'
|
manifest.srcFile 'AndroidManifestLibrary.xml'
|
||||||
java.srcDirs = srcDir
|
java.srcDirs = srcDir
|
||||||
resources.srcDirs = srcDir
|
|
||||||
aidl.srcDirs = srcDir
|
aidl.srcDirs = srcDir
|
||||||
|
assets.srcDirs = ["${buildDir}/sdk-assets/assets/"]
|
||||||
renderscript.srcDirs = srcDir
|
renderscript.srcDirs = srcDir
|
||||||
jniLibs.srcDirs = ['libs']
|
jniLibs.srcDirs = ['../libs']
|
||||||
|
resources.srcDir("res")
|
||||||
|
|
||||||
java.excludes = ['**/mediastream/MediastreamerActivity.java']
|
java.excludes = ['**/mediastream/MediastreamerActivity.java']
|
||||||
|
|
||||||
|
@ -78,7 +130,7 @@ android {
|
||||||
///////////// Task /////////////
|
///////////// Task /////////////
|
||||||
|
|
||||||
task(releaseJavadoc, type: Javadoc, dependsOn: "assembleRelease") {
|
task(releaseJavadoc, type: Javadoc, dependsOn: "assembleRelease") {
|
||||||
source = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper']
|
source = srcDir
|
||||||
excludes = ['**/mediastream/MediastreamerActivity.java',
|
excludes = ['**/mediastream/MediastreamerActivity.java',
|
||||||
'**/**.html',
|
'**/**.html',
|
||||||
'**/**.aidl']
|
'**/**.aidl']
|
||||||
|
@ -108,3 +160,26 @@ task sdkZip(type: Zip) {
|
||||||
include '*'
|
include '*'
|
||||||
archiveName newSdkName
|
archiveName newSdkName
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task copyAssets(type: Sync) {
|
||||||
|
from rootSdk
|
||||||
|
into "${buildDir}/sdk-assets/assets/org.linphone.core"
|
||||||
|
include '**/*.png'
|
||||||
|
include '**/*.pem'
|
||||||
|
include '**/*.mkv'
|
||||||
|
include '**/*.wav'
|
||||||
|
include '**/*_grammar'
|
||||||
|
|
||||||
|
//rename '(.*)', '$1'.toLowerCase()
|
||||||
|
eachFile {
|
||||||
|
path = path.toLowerCase() //to workaround case insensitive fs (macosx)
|
||||||
|
println("Syncing sdk asset ${sourcePath} to ${path}")
|
||||||
|
}
|
||||||
|
doFirst {
|
||||||
|
println("Syncing sdk assets into root dir ${destinationDir}")
|
||||||
|
}
|
||||||
|
// do not copy those
|
||||||
|
includeEmptyDirs = false
|
||||||
|
|
||||||
|
}
|
||||||
|
project.tasks['preBuild'].dependsOn 'copyAssets'
|
|
@ -17,6 +17,9 @@
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
|
||||||
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.WAKE_LOCK"/>
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:allowBackup="true"
|
android:allowBackup="true"
|
||||||
|
|
73
liblinphone_tester/Makefile
Normal file
73
liblinphone_tester/Makefile
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
all: copy-files
|
||||||
|
../gradlew clean
|
||||||
|
../gradlew uninstallDebug
|
||||||
|
|
||||||
|
run-all-tests: copy-files
|
||||||
|
../gradlew :installDebugAndroidTest && \
|
||||||
|
../gradlew :installDebug && \
|
||||||
|
../gradlew :grantDebugPermissions -i && \
|
||||||
|
../gradlew :connectedAndroidTest -i \
|
||||||
|
|
||||||
|
copy-libs:
|
||||||
|
mkdir -p assets && \
|
||||||
|
mkdir -p assets/config_files && \
|
||||||
|
rm -rf libs/arm64-v8a
|
||||||
|
if test -d "../liblinphone-sdk/android-arm64"; then \
|
||||||
|
mkdir -p libs/arm64-v8a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-arm64/lib/*.so libs/arm64-v8a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-arm64/lib/mediastreamer/plugins/*.so libs/arm64-v8a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-arm64/share/linphone/rootca.pem assets/config_files; \
|
||||||
|
fi
|
||||||
|
if test -f "../liblinphone-sdk/android-arm64/bin/gdbserver"; then \
|
||||||
|
cp -f ../liblinphone-sdk/android-arm64/bin/gdbserver libs/arm64-v8a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-arm64/bin/gdb.setup libs/arm64-v8a; \
|
||||||
|
fi
|
||||||
|
rm -rf libs/armeabi-v7a
|
||||||
|
if test -d "../liblinphone-sdk/android-armv7"; then \
|
||||||
|
mkdir -p libs/armeabi-v7a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-armv7/lib/*.so libs/armeabi-v7a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-armv7/lib/mediastreamer/plugins/*.so libs/armeabi-v7a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-armv7/share/linphone/rootca.pem assets/config_files; \
|
||||||
|
fi
|
||||||
|
if test -f "../liblinphone-sdk/android-armv7/bin/gdbserver"; then \
|
||||||
|
cp -f ../liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \
|
||||||
|
cp -f ../liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \
|
||||||
|
fi
|
||||||
|
rm -rf libs/x86
|
||||||
|
if test -d "../liblinphone-sdk/android-x86"; then \
|
||||||
|
mkdir -p libs/x86 && \
|
||||||
|
cp -f ../liblinphone-sdk/android-x86/lib/*.so libs/x86 && \
|
||||||
|
cp -f ../liblinphone-sdk/android-x86/lib/mediastreamer/plugins/*.so libs/x86 && \
|
||||||
|
cp -f ../liblinphone-sdk/android-x86/share/linphone/rootca.pem assets/config_files; \
|
||||||
|
fi
|
||||||
|
if test -f "../liblinphone-sdk/android-x86/bin/gdbserver"; then \
|
||||||
|
cp -f ../liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \
|
||||||
|
cp -f ../liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
copy-files: ../submodules/linphone/tester/tester_hosts
|
||||||
|
$(MAKE) copy-libs
|
||||||
|
rm -rf assets/config_files
|
||||||
|
mkdir -p assets/config_files
|
||||||
|
for file in $^; do \
|
||||||
|
cp -rf $$file assets/config_files/. ; \
|
||||||
|
done
|
||||||
|
cp -rf ../submodules/linphone/tester/certificates assets/config_files
|
||||||
|
cp -rf ../submodules/linphone/tester/images assets/config_files
|
||||||
|
cp -rf ../submodules/linphone/tester/rcfiles assets/config_files
|
||||||
|
cp -rf ../submodules/linphone/tester/sounds assets/config_files
|
||||||
|
cp -rf ../submodules/linphone/tester/vcards assets/config_files
|
||||||
|
cp -rf ../submodules/linphone/tester/db assets/config_files
|
||||||
|
mkdir -p res/raw
|
||||||
|
if test -d "../liblinphone-sdk/android-arm/share/belr/grammars"; then \
|
||||||
|
cp ../liblinphone-sdk/android-arm/share/belr/grammars/*_grammar res/raw/; \
|
||||||
|
fi
|
||||||
|
if test -d "../liblinphone-sdk/android-armv7/share/belr/grammars"; then \
|
||||||
|
cp ../liblinphone-sdk/android-armv7/share/belr/grammars/*_grammar res/raw/; \
|
||||||
|
fi
|
||||||
|
if test -d "../liblinphone-sdk/android-arm64/share/belr/grammars"; then \
|
||||||
|
cp ../liblinphone-sdk/android-arm64/share/belr/grammars/*_grammar res/raw/; \
|
||||||
|
fi
|
||||||
|
if test -d "../liblinphone-sdk/android-x86/share/belr/grammars"; then \
|
||||||
|
cp ../liblinphone-sdk/android-x86/share/belr/grammars/*_grammar res/raw/; \
|
||||||
|
fi
|
|
@ -29,15 +29,15 @@ allprojects {
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
androidTestCompile group: 'org.apache.commons', name: 'commons-compress', version: '+'
|
androidTestCompile 'org.apache.commons:commons-compress:1.16.1'
|
||||||
androidTestCompile group: 'junit', name: 'junit', version: '+'
|
androidTestCompile group: 'junit', name: 'junit', version: '+'
|
||||||
androidTestCompile group: 'com.jayway.android.robotium', name: 'robotium', version: '+'
|
androidTestCompile group: 'com.jayway.android.robotium', name: 'robotium', version: '+'
|
||||||
androidTestCompile fileTree(dir: 'libs', include: 'android-junit-report*.jar')
|
androidTestCompile fileTree(dir: 'libs', include: 'android-junit-report*.jar')
|
||||||
compile group: 'org.apache.commons', name: 'commons-compress', version: '+'
|
compile 'org.apache.commons:commons-compress:1.16.1'
|
||||||
compile group: 'junit', name: 'junit', version: '+'
|
compile group: 'junit', name: 'junit', version: '+'
|
||||||
compile group: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+'
|
compile group: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+'
|
||||||
compile fileTree(dir: 'libs', include: 'android-junit-report*.jar')
|
compile fileTree(dir: 'libs', include: 'android-junit-report*.jar')
|
||||||
compile project(":libLinphoneAndroidSdk")
|
compile project(":liblinphone-sdk")
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|
7
liblinphone_tester/gradle.properties
Normal file
7
liblinphone_tester/gradle.properties
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
// Signing APK Release
|
||||||
|
RELEASE_STORE_FILE=""
|
||||||
|
RELEASE_STORE_PASSWORD=
|
||||||
|
RELEASE_KEY_ALIAS=
|
||||||
|
RELEASE_KEY_PASSWORD=
|
||||||
|
#source:https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory
|
||||||
|
org.gradle.jvmargs=-Xmx2g -XX:MaxPermSize=256m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
|
|
@ -1,3 +1,2 @@
|
||||||
include ':libLinphoneAndroidSdk'
|
include ':liblinphone-sdk'
|
||||||
project(':libLinphoneAndroidSdk').projectDir = new File(rootProject.projectDir,'..')
|
project(':liblinphone-sdk').projectDir = new File(rootProject.projectDir,'../liblinphone-sdk')
|
||||||
project(':libLinphoneAndroidSdk').buildFileName = "libLinphoneAndroidSdk.gradle"
|
|
||||||
|
|
|
@ -23,7 +23,7 @@ public class LogsActivity extends Activity {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
String res_path = mLogsActivity.getFilesDir().getAbsolutePath()+"/config_files";
|
String res_path = mLogsActivity.getFilesDir().getAbsolutePath();
|
||||||
String write_path = mLogsActivity.getCacheDir().getPath();
|
String write_path = mLogsActivity.getCacheDir().getPath();
|
||||||
tester = new TesterLogger(mLogsActivity);
|
tester = new TesterLogger(mLogsActivity);
|
||||||
List<String> list = new LinkedList<String>(Arrays.asList(new String[]{"tester", "--verbose", "--resource-dir", res_path, "--writable-dir", write_path}));
|
List<String> list = new LinkedList<String>(Arrays.asList(new String[]{"tester", "--verbose", "--resource-dir", res_path, "--writable-dir", write_path}));
|
||||||
|
|
|
@ -2,6 +2,7 @@ package org.linphone.tester;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.view.Gravity;
|
import android.view.Gravity;
|
||||||
import android.view.Menu;
|
import android.view.Menu;
|
||||||
|
@ -19,6 +20,7 @@ public class SuitesActivity extends Activity {
|
||||||
if (extras != null) {
|
if (extras != null) {
|
||||||
mSuite = extras.getString("suite");
|
mSuite = extras.getString("suite");
|
||||||
if(mSuite != null) {
|
if(mSuite != null) {
|
||||||
|
Tester.setApplicationContext(getBaseContext());
|
||||||
this.setTitle(this.getResources().getString(R.string.app_name) + " | " + mSuite);
|
this.setTitle(this.getResources().getString(R.string.app_name) + " | " + mSuite);
|
||||||
TesterList suitesTest = new TesterList();
|
TesterList suitesTest = new TesterList();
|
||||||
suitesTest.run(new String[]{"tester", "--list-tests", mSuite});
|
suitesTest.run(new String[]{"tester", "--list-tests", mSuite});
|
||||||
|
@ -59,6 +61,11 @@ public class SuitesActivity extends Activity {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
Tester.removeApplicationContext();
|
||||||
|
super.onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
|
|
@ -26,46 +26,24 @@ public class TestUnit extends AndroidTestCase {
|
||||||
public TestUnit(String name) {
|
public TestUnit(String name) {
|
||||||
String[] tab = name.split("/");
|
String[] tab = name.split("/");
|
||||||
mSuite = tab[0];
|
mSuite = tab[0];
|
||||||
|
if (tab.length == 2)
|
||||||
mTest = tab[1];
|
mTest = tab[1];
|
||||||
setName(name);
|
setName(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
static public void copyAssetsFromPackage(Context ctx) throws IOException {
|
static public void copyAssetsFromPackage(Context ctx) throws IOException {
|
||||||
copyAssetsFromPackage(ctx,"config_files");
|
//copy sdk assets
|
||||||
|
org.linphone.core.tools.AndroidPlatformHelper.copyAssetsFromPackage(ctx,"org.linphone.core",".");
|
||||||
|
//copy tester assets
|
||||||
|
org.linphone.core.tools.AndroidPlatformHelper.copyAssetsFromPackage(ctx,"config_files",".");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static void copyAssetsFromPackage(Context ctx,String fromPath) throws IOException {
|
|
||||||
new File(ctx.getFilesDir().getPath()+"/"+fromPath).mkdir();
|
|
||||||
|
|
||||||
for (String f :ctx.getAssets().list(fromPath)) {
|
|
||||||
String current_name=fromPath+"/"+f;
|
|
||||||
InputStream lInputStream;
|
|
||||||
try {
|
|
||||||
lInputStream = ctx.getAssets().open(current_name);
|
|
||||||
} catch (IOException e) {
|
|
||||||
//probably a dir
|
|
||||||
new File(ctx.getFilesDir().getPath()+"/"+current_name).mkdir();
|
|
||||||
copyAssetsFromPackage(ctx,current_name);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
FileOutputStream lOutputStream = new FileOutputStream(new File(ctx.getFilesDir().getPath()+"/"+current_name));//ctx.openFileOutput (fromPath+"/"+f, 0);
|
|
||||||
|
|
||||||
|
|
||||||
int readByte;
|
|
||||||
byte[] buff = new byte[8048];
|
|
||||||
while (( readByte = lInputStream.read(buff)) != -1) {
|
|
||||||
lOutputStream.write(buff,0, readByte);
|
|
||||||
}
|
|
||||||
lOutputStream.flush();
|
|
||||||
lOutputStream.close();
|
|
||||||
lInputStream.close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@Override
|
@Override
|
||||||
protected void setUp() throws Exception {
|
protected void setUp() throws Exception {
|
||||||
super.setUp();
|
super.setUp();
|
||||||
if (isAssetCopied ==false) {
|
if (isAssetCopied ==false) {
|
||||||
|
Tester.setApplicationContext(getContext());
|
||||||
copyAssetsFromPackage(getContext());
|
copyAssetsFromPackage(getContext());
|
||||||
isAssetCopied=true;
|
isAssetCopied=true;
|
||||||
}
|
}
|
||||||
|
@ -78,7 +56,7 @@ public class TestUnit extends AndroidTestCase {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void runTest() {
|
protected void runTest() {
|
||||||
String res_path = getContext().getFilesDir().getPath()+"/config_files";
|
String res_path = getContext().getFilesDir().getPath();
|
||||||
String write_path = getContext().getCacheDir().getPath();
|
String write_path = getContext().getCacheDir().getPath();
|
||||||
Tester tester = new Tester();
|
Tester tester = new Tester();
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.linphone.core.Factory;
|
||||||
import org.linphone.mediastream.Version;
|
import org.linphone.mediastream.Version;
|
||||||
|
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.content.Context;
|
||||||
|
|
||||||
public class Tester {
|
public class Tester {
|
||||||
public static String TAG = "liblinphone-tester";
|
public static String TAG = "liblinphone-tester";
|
||||||
|
@ -49,6 +50,8 @@ public class Tester {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static native void setApplicationContext(Context ct);
|
||||||
|
public static native void removeApplicationContext();
|
||||||
public native int run(String args[]);
|
public native int run(String args[]);
|
||||||
public static native void keepAccounts(boolean keep);
|
public static native void keepAccounts(boolean keep);
|
||||||
public static native void clearAccounts();
|
public static native void clearAccounts();
|
||||||
|
|
|
@ -1,12 +1,8 @@
|
||||||
// Project information
|
// Project information
|
||||||
buildDir = 'bin'
|
buildDir = 'bin'
|
||||||
def firebaseEnable() {
|
|
||||||
File googleFile = new File('google-services.json')
|
|
||||||
return googleFile.exists()
|
|
||||||
}
|
|
||||||
|
|
||||||
buildscript {
|
buildscript {
|
||||||
File googleFile = new File('google-services.json')
|
|
||||||
repositories {
|
repositories {
|
||||||
jcenter()
|
jcenter()
|
||||||
mavenCentral()
|
mavenCentral()
|
||||||
|
@ -15,9 +11,6 @@ buildscript {
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.1.0'
|
classpath 'com.android.tools.build:gradle:3.1.0'
|
||||||
if (googleFile.exists()) {
|
|
||||||
classpath 'com.google.gms:google-services:3.1.0'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -33,28 +26,17 @@ allprojects {
|
||||||
apply plugin: 'com.android.library'
|
apply plugin: 'com.android.library'
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
compile group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
||||||
if (firebaseEnable()) {
|
compile 'com.android.support:support-v4:26.0.2'
|
||||||
implementation 'com.google.firebase:firebase-messaging:12.0.1'
|
|
||||||
} else {
|
|
||||||
implementation 'com.android.support:support-v4:26.0.1'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (firebaseEnable()) {
|
|
||||||
apply plugin: 'com.google.gms.google-services'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def srcDirs = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper', 'src/android']
|
def srcDirs = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper', 'src/android']
|
||||||
|
|
||||||
def excludeFiles = []
|
def excludeFiles = []
|
||||||
// Exclude firebase file if not enable
|
|
||||||
if (!firebaseEnable()) {
|
|
||||||
excludeFiles.add('**/Firebase*')
|
excludeFiles.add('**/Firebase*')
|
||||||
} else {
|
|
||||||
excludeFiles.add('**/gcm*')
|
excludeFiles.add('**/gcm*')
|
||||||
}
|
|
||||||
excludeFiles.add('**/mediastream/MediastreamerActivity.java')
|
excludeFiles.add('**/mediastream/MediastreamerActivity.java')
|
||||||
|
|
||||||
def excludePackage = []
|
def excludePackage = []
|
||||||
|
@ -67,6 +49,7 @@ excludePackage.add('**/LICENSE.txt')
|
||||||
android {
|
android {
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
compileSdkVersion 26
|
compileSdkVersion 26
|
||||||
|
buildToolsVersion "27.0.3"
|
||||||
multiDexEnabled true
|
multiDexEnabled true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -79,7 +62,7 @@ android {
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
main {
|
main {
|
||||||
manifest.srcFile 'AndroidManifestLibrary.xml'
|
manifest.srcFile 'AndroidManifestSdk.xml'
|
||||||
java.srcDirs = srcDirs
|
java.srcDirs = srcDirs
|
||||||
resources.srcDirs = srcDirs
|
resources.srcDirs = srcDirs
|
||||||
aidl.srcDirs = srcDirs
|
aidl.srcDirs = srcDirs
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
--- submodules/externals/ffmpeg/library.mak.orig 2013-09-26 10:58:19.000000000 +0200
|
|
||||||
+++ submodules/externals/ffmpeg/library.mak 2013-09-26 10:58:13.000000000 +0200
|
|
||||||
@@ -54,7 +54,7 @@
|
|
||||||
|
|
||||||
$(SUBDIR)$(SLIBNAME_WITH_MAJOR): $(OBJS) $(SUBDIR)lib$(NAME).ver
|
|
||||||
$(SLIB_CREATE_DEF_CMD)
|
|
||||||
- $$(LD) $(SHFLAGS) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
|
|
||||||
+ $$(LD) $(subst $$(@F),$(SLIBNAME),$(SHFLAGS)) $(LDFLAGS) $$(LD_O) $$(filter %.o,$$^) $(FFEXTRALIBS)
|
|
||||||
$(SLIB_EXTRA_CMD)
|
|
||||||
|
|
||||||
ifdef SUBDIR
|
|
|
@ -1,37 +0,0 @@
|
||||||
diff --git a/build/make/configure.sh b/build/make/configure.sh
|
|
||||||
index c592b63..e4998d7 100644
|
|
||||||
--- a/build/make/configure.sh
|
|
||||||
+++ b/build/make/configure.sh
|
|
||||||
@@ -1132,6 +1132,32 @@ EOF
|
|
||||||
AS=${AS:-nasm}
|
|
||||||
add_ldflags -Zhigh-mem
|
|
||||||
;;
|
|
||||||
+ android*)
|
|
||||||
+ SDK_PATH=${sdk_path}
|
|
||||||
+ COMPILER_LOCATION=`find "${SDK_PATH}" \
|
|
||||||
+ -name "i686-linux-android-gcc*" -print -quit`
|
|
||||||
+ TOOLCHAIN_PATH=${COMPILER_LOCATION%/*}/i686-linux-android-
|
|
||||||
+ CC=${TOOLCHAIN_PATH}gcc
|
|
||||||
+ CXX=${TOOLCHAIN_PATH}g++
|
|
||||||
+ AR=${TOOLCHAIN_PATH}ar
|
|
||||||
+ LD=${TOOLCHAIN_PATH}gcc
|
|
||||||
+ STRIP=${TOOLCHAIN_PATH}strip
|
|
||||||
+ NM=${TOOLCHAIN_PATH}nm
|
|
||||||
+
|
|
||||||
+ if [ -z "${alt_libc}" ]; then
|
|
||||||
+ alt_libc=`find "${SDK_PATH}" -name arch-x86 -print | \
|
|
||||||
+ awk '{n = split($0,a,"/"); \
|
|
||||||
+ split(a[n-1],b,"-"); \
|
|
||||||
+ print $0 " " b[2]}' | \
|
|
||||||
+ sort -g -k 2 | \
|
|
||||||
+ awk '{ print $1 }' | tail -1`
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
+ add_cflags "--sysroot=${alt_libc}"
|
|
||||||
+ add_ldflags "--sysroot=${alt_libc}"
|
|
||||||
+
|
|
||||||
+ soft_enable realtime_only
|
|
||||||
+ ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
AS="${alt_as:-${AS:-auto}}"
|
|
|
@ -1,40 +0,0 @@
|
||||||
commit 6b3de978d928b6c0baec3305c9803c21a4367d0c
|
|
||||||
Author: Simon Morlat <simon.morlat@linphone.org>
|
|
||||||
Date: Tue Apr 15 15:19:37 2014 +0200
|
|
||||||
|
|
||||||
permissive mode: allow reference frames to be used even if there were lost slices.
|
|
||||||
|
|
||||||
diff --git a/codec/decoder/core/src/manage_dec_ref.cpp b/codec/decoder/core/src/manage_dec_ref.cpp
|
|
||||||
index dcf61ca..5582ec9 100644
|
|
||||||
--- a/codec/decoder/core/src/manage_dec_ref.cpp
|
|
||||||
+++ b/codec/decoder/core/src/manage_dec_ref.cpp
|
|
||||||
@@ -165,6 +165,7 @@ int32_t WelsReorderRefList (PWelsDecoderContext pCtx) {
|
|
||||||
&& (pSliceHeader->iSpsId != ppRefList[i]->iSpsId)) { //check;
|
|
||||||
WelsLog (pCtx, WELS_LOG_WARNING, "WelsReorderRefList()-1::::BASE LAYER::::iSpsId:%d, ref_sps_id:%d\n",
|
|
||||||
pSliceHeader->iSpsId, ppRefList[i]->iSpsId);
|
|
||||||
+ return ERR_NONE;
|
|
||||||
pCtx->iErrorCode = dsNoParamSets; //cross-IDR reference frame selection, SHOULD request IDR.--
|
|
||||||
return ERR_INFO_REFERENCE_PIC_LOST;
|
|
||||||
} else {
|
|
||||||
|
|
||||||
commit a1f3b95ad18d0788c2c803fac80e78d6365673ce
|
|
||||||
Author: Simon Morlat <simon.morlat@linphone.org>
|
|
||||||
Date: Tue Apr 15 17:54:58 2014 +0200
|
|
||||||
|
|
||||||
permissive mode (2)
|
|
||||||
|
|
||||||
diff --git a/codec/decoder/core/src/decoder_core.cpp b/codec/decoder/core/src/decoder_core.cpp
|
|
||||||
index a14e971..e742dbf 100644
|
|
||||||
--- a/codec/decoder/core/src/decoder_core.cpp
|
|
||||||
+++ b/codec/decoder/core/src/decoder_core.cpp
|
|
||||||
@@ -1738,8 +1738,8 @@ int32_t DecodeCurrentAccessUnit (PWelsDecoderContext pCtx, uint8_t** ppDst, int3
|
|
||||||
if ((iLastIdD < 0) || //case 1: first layer
|
|
||||||
(iLastIdD == iCurrIdD)) { //case 2: same uiDId
|
|
||||||
InitDqLayerInfo (dq_cur, &pLayerInfo, pNalCur, pCtx->pDec);
|
|
||||||
-
|
|
||||||
- if (!dq_cur->sLayerInfo.pSps->bGapsInFrameNumValueAllowedFlag) {
|
|
||||||
+ if (0){
|
|
||||||
+ //if (!dq_cur->sLayerInfo.pSps->bGapsInFrameNumValueAllowedFlag) {
|
|
||||||
const bool kbIdrFlag = dq_cur->sLayerInfo.sNalHeaderExt.bIdrFlag
|
|
||||||
|| (dq_cur->sLayerInfo.sNalHeaderExt.sNalUnitHeader.eNalUnitType == NAL_UNIT_CODED_SLICE_IDR);
|
|
||||||
// Subclause 8.2.5.2 Decoding process for gaps in frame_num
|
|
|
@ -1,41 +0,0 @@
|
||||||
diff -urN submodules/externals/x264/common/osdep.h.orig submodules/externals/x264/common/osdep.h
|
|
||||||
--- submodules/externals/x264/common/osdep.h.orig 2014-02-06 13:56:59.243663951 +0100
|
|
||||||
+++ submodules/externals/x264/common/osdep.h 2014-02-06 13:57:17.215685078 +0100
|
|
||||||
@@ -35,11 +35,6 @@
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
-#if !HAVE_LOG2F
|
|
||||||
-#define log2f(x) (logf(x)/0.693147180559945f)
|
|
||||||
-#define log2(x) (log(x)/0.693147180559945)
|
|
||||||
-#endif
|
|
||||||
-
|
|
||||||
#ifdef _WIN32
|
|
||||||
#include <io.h> // _setmode()
|
|
||||||
#include <fcntl.h> // _O_BINARY
|
|
||||||
@@ -55,6 +60,11 @@
|
|
||||||
#include <math.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if !HAVE_LOG2F
|
|
||||||
+#define log2f(x) (logf(x)/0.693147180559945f)
|
|
||||||
+#define log2(x) (log(x)/0.693147180559945)
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
#if (defined(__GNUC__) || defined(__INTEL_COMPILER)) && (ARCH_X86 || ARCH_X86_64)
|
|
||||||
#define HAVE_X86_INLINE_ASM 1
|
|
||||||
#endif
|
|
||||||
diff -urN submodules/externals/x264/configure.orig submodules/externals/x264/configure
|
|
||||||
--- submodules/externals/x264/configure.orig 2014-02-06 13:56:59.231663937 +0100
|
|
||||||
+++ submodules/externals/x264/configure 2014-02-06 13:57:17.219685083 +0100
|
|
||||||
@@ -816,10 +816,6 @@
|
|
||||||
fi
|
|
||||||
[ "$thread" != "no" ] && define HAVE_THREAD
|
|
||||||
|
|
||||||
-if cc_check "math.h" "-Werror" "return log2f(2);" ; then
|
|
||||||
- define HAVE_LOG2F
|
|
||||||
-fi
|
|
||||||
-
|
|
||||||
if [ "$vis" = "yes" ] ; then
|
|
||||||
save_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS -I/usr/X11R6/include"
|
|
74
prepare.py
74
prepare.py
|
@ -104,7 +104,7 @@ class AndroidPreparator(prepare.Preparator):
|
||||||
def __init__(self, targets=android_targets):
|
def __init__(self, targets=android_targets):
|
||||||
prepare.Preparator.__init__(self, targets, default_targets=['armv7', 'arm64'], virtual_targets=android_virtual_targets)
|
prepare.Preparator.__init__(self, targets, default_targets=['armv7', 'arm64'], virtual_targets=android_virtual_targets)
|
||||||
self.min_supported_ndk = 16
|
self.min_supported_ndk = 16
|
||||||
self.max_supported_ndk = 16
|
self.max_supported_ndk = 17
|
||||||
self.unsupported_ndk_version = None
|
self.unsupported_ndk_version = None
|
||||||
self.min_cmake_version = "3.10"
|
self.min_cmake_version = "3.10"
|
||||||
self.release_with_debug_info = True
|
self.release_with_debug_info = True
|
||||||
|
@ -241,19 +241,18 @@ install: install-apk run-linphone
|
||||||
install-test:
|
install-test:
|
||||||
\t$(MAKE) -C liblinphone_tester copy-libs
|
\t$(MAKE) -C liblinphone_tester copy-libs
|
||||||
\t$(MAKE) -C liblinphone_tester copy-files
|
\t$(MAKE) -C liblinphone_tester copy-files
|
||||||
|
\t./gradlew -b liblinphone_tester/build.gradle clean
|
||||||
\t./gradlew -b liblinphone_tester/build.gradle assembleDebug
|
\t./gradlew -b liblinphone_tester/build.gradle assembleDebug
|
||||||
\t./gradlew -b liblinphone_tester/build.gradle installDebug
|
\t./gradlew -b liblinphone_tester/build.gradle installDebug
|
||||||
|
|
||||||
java-clean:
|
java-clean:
|
||||||
\t./gradlew clean
|
\t./gradlew clean
|
||||||
|
|
||||||
$(TOPDIR)/res/raw/rootca.pem:
|
|
||||||
\tcp liblinphone-sdk/android-{first_arch}/share/linphone/rootca.pem $@
|
|
||||||
|
|
||||||
copy-libs:
|
copy-libs:
|
||||||
|
\trm -rf liblinphone-sdk/res
|
||||||
\trm -rf libs-debug/armeabi
|
\trm -rf libs-debug/armeabi
|
||||||
\trm -rf libs/armeabi
|
\trm -rf libs/armeabi
|
||||||
\trm -rf src/linphone-wrapper && mkdir -p src/linphone-wrapper/
|
|
||||||
\tif test -d "liblinphone-sdk/android-arm"; then \\
|
\tif test -d "liblinphone-sdk/android-arm"; then \\
|
||||||
\t\tmkdir -p libs-debug/armeabi && \\
|
\t\tmkdir -p libs-debug/armeabi && \\
|
||||||
\t\tcp -f liblinphone-sdk/android-arm/lib/lib*.so libs-debug/armeabi && \\
|
\t\tcp -f liblinphone-sdk/android-arm/lib/lib*.so libs-debug/armeabi && \\
|
||||||
|
@ -269,6 +268,10 @@ copy-libs:
|
||||||
\t\tcp -f liblinphone-sdk/android-arm/bin/gdbserver libs/armeabi && \\
|
\t\tcp -f liblinphone-sdk/android-arm/bin/gdbserver libs/armeabi && \\
|
||||||
\t\tcp -f liblinphone-sdk/android-arm/bin/gdb.setup libs/armeabi; \\
|
\t\tcp -f liblinphone-sdk/android-arm/bin/gdb.setup libs/armeabi; \\
|
||||||
\tfi
|
\tfi
|
||||||
|
\tif test -f "liblinphone-sdk/android-arm/lib/wrap.sh"; then \\
|
||||||
|
\t\tmkdir -p liblinphone-sdk/res/lib/armeabi && \\
|
||||||
|
\t\tcp -f liblinphone-sdk/android-arm/lib/wrap.sh liblinphone-sdk/res/lib/armeabi; \\
|
||||||
|
\tfi
|
||||||
\trm -rf libs-debug/armeabi-v7a
|
\trm -rf libs-debug/armeabi-v7a
|
||||||
\trm -rf libs/armeabi-v7a
|
\trm -rf libs/armeabi-v7a
|
||||||
\tif test -d "liblinphone-sdk/android-armv7"; then \\
|
\tif test -d "liblinphone-sdk/android-armv7"; then \\
|
||||||
|
@ -286,6 +289,10 @@ copy-libs:
|
||||||
\t\tcp -f liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \\
|
\t\tcp -f liblinphone-sdk/android-armv7/bin/gdbserver libs/armeabi-v7a && \\
|
||||||
\t\tcp -f liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \\
|
\t\tcp -f liblinphone-sdk/android-armv7/bin/gdb.setup libs/armeabi-v7a; \\
|
||||||
\tfi
|
\tfi
|
||||||
|
\tif test -f "liblinphone-sdk/android-armv7/lib/wrap.sh"; then \\
|
||||||
|
\t\tmkdir -p liblinphone-sdk/res/lib/armeabi-v7a && \\
|
||||||
|
\t\tcp -f liblinphone-sdk/android-armv7/lib/wrap.sh liblinphone-sdk/res/lib/armeabi-v7a; \\
|
||||||
|
\tfi
|
||||||
\trm -rf libs-debug/arm64-v8a
|
\trm -rf libs-debug/arm64-v8a
|
||||||
\trm -rf libs/arm64-v8a
|
\trm -rf libs/arm64-v8a
|
||||||
\tif test -d "liblinphone-sdk/android-arm64"; then \\
|
\tif test -d "liblinphone-sdk/android-arm64"; then \\
|
||||||
|
@ -303,6 +310,10 @@ copy-libs:
|
||||||
\t\tcp -f liblinphone-sdk/android-arm64/bin/gdbserver libs/arm64-v8a && \\
|
\t\tcp -f liblinphone-sdk/android-arm64/bin/gdbserver libs/arm64-v8a && \\
|
||||||
\t\tcp -f liblinphone-sdk/android-arm64/bin/gdb.setup libs/arm64-v8a; \\
|
\t\tcp -f liblinphone-sdk/android-arm64/bin/gdb.setup libs/arm64-v8a; \\
|
||||||
\tfi
|
\tfi
|
||||||
|
\tif test -f "liblinphone-sdk/android-arm64/lib/wrap.sh"; then \\
|
||||||
|
\t\tmkdir -p liblinphone-sdk/res/lib/arm64-v8a && \\
|
||||||
|
\t\tcp -f liblinphone-sdk/android-arm64/lib/wrap.sh liblinphone-sdk/res/lib/arm64-v8a; \\
|
||||||
|
\tfi
|
||||||
\trm -rf libs-debug/x86
|
\trm -rf libs-debug/x86
|
||||||
\trm -rf libs/x86
|
\trm -rf libs/x86
|
||||||
\tif test -d "liblinphone-sdk/android-x86"; then \\
|
\tif test -d "liblinphone-sdk/android-x86"; then \\
|
||||||
|
@ -320,29 +331,9 @@ copy-libs:
|
||||||
\t\tcp -f liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \\
|
\t\tcp -f liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \\
|
||||||
\t\tcp -f liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \\
|
\t\tcp -f liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \\
|
||||||
\tfi
|
\tfi
|
||||||
\tif test -d "liblinphone-sdk/android-arm/share/linphonej"; then \\
|
\tif test -f "liblinphone-sdk/android-x86/lib/wrap.sh"; then \\
|
||||||
\t\tcp -R liblinphone-sdk/android-arm/share/linphonej/java/* src/linphone-wrapper; \\
|
\t\tmkdir -p liblinphone-sdk/res/lib/x86 && \\
|
||||||
\tfi
|
\t\tcp -f liblinphone-sdk/android-x86/lib/wrap.sh liblinphone-sdk/res/lib/x86; \\
|
||||||
\tif test -d "liblinphone-sdk/android-armv7/share/linphonej"; then \\
|
|
||||||
\t\tcp -R liblinphone-sdk/android-armv7/share/linphonej/java/* src/linphone-wrapper; \\
|
|
||||||
\tfi
|
|
||||||
\tif test -d "liblinphone-sdk/android-arm64/share/linphonej"; then \\
|
|
||||||
\t\tcp -R liblinphone-sdk/android-arm64/share/linphonej/java/* src/linphone-wrapper; \\
|
|
||||||
\tfi
|
|
||||||
\tif test -d "liblinphone-sdk/android-x86/share/linphonej"; then \\
|
|
||||||
\t\tcp -R liblinphone-sdk/android-x86/share/linphonej/java/* src/linphone-wrapper; \\
|
|
||||||
\tfi
|
|
||||||
\tif test -d "liblinphone-sdk/android-arm/share/belr/grammars"; then \\
|
|
||||||
\t\tcp liblinphone-sdk/android-arm/share/belr/grammars/cpim_grammar res/raw/; \\
|
|
||||||
\tfi
|
|
||||||
\tif test -d "liblinphone-sdk/android-armv7/share/belr/grammars"; then \\
|
|
||||||
\t\tcp liblinphone-sdk/android-armv7/share/belr/grammars/cpim_grammar res/raw/; \\
|
|
||||||
\tfi
|
|
||||||
\tif test -d "liblinphone-sdk/android-arm64/share/belr/grammars"; then \\
|
|
||||||
\t\tcp liblinphone-sdk/android-arm64/share/belr/grammars/cpim_grammar res/raw/; \\
|
|
||||||
\tfi
|
|
||||||
\tif test -d "liblinphone-sdk/android-x86/share/belr/grammars"; then \\
|
|
||||||
\t\tcp liblinphone-sdk/android-x86/share/belr/grammars/cpim_grammar res/raw/; \\
|
|
||||||
\tfi
|
\tfi
|
||||||
|
|
||||||
copy-libs-mediastreamer:
|
copy-libs-mediastreamer:
|
||||||
|
@ -371,7 +362,7 @@ copy-libs-mediastreamer:
|
||||||
\t\tsh WORK/android-x86/strip.sh submodules/mediastreamer2/java/libs/x86/*.so; \\
|
\t\tsh WORK/android-x86/strip.sh submodules/mediastreamer2/java/libs/x86/*.so; \\
|
||||||
\tfi
|
\tfi
|
||||||
|
|
||||||
generate-apk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem
|
generate-apk: java-clean build copy-libs
|
||||||
\t./gradlew assembleDebug
|
\t./gradlew assembleDebug
|
||||||
|
|
||||||
quick: clean install-apk run-linphone
|
quick: clean install-apk run-linphone
|
||||||
|
@ -388,25 +379,32 @@ release: java-clean build copy-libs
|
||||||
unsigned: java-clean build copy-libs
|
unsigned: java-clean build copy-libs
|
||||||
\t./gradlew assemblePackaged
|
\t./gradlew assemblePackaged
|
||||||
|
|
||||||
generate-sdk: liblinphone-android-sdk
|
generate-release-sdk: liblinphone-android-sdk-release
|
||||||
|
|
||||||
|
generate-sdk: liblinphone-android-sdk-debug
|
||||||
|
|
||||||
generate-javadoc:
|
generate-javadoc:
|
||||||
\t./gradlew -b libLinphoneAndroidSdk.gradle androidJavadocsJar
|
\t./gradlew -q androidJavadocsJar
|
||||||
\t./gradlew -b libLinphoneAndroidSdk.gradle sourcesJar
|
\t./gradlew -q sourcesJar
|
||||||
|
|
||||||
liblinphone-android-sdk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem
|
debug-sdk: java-clean build copy-libs generate-javadoc generate-apk
|
||||||
\t./gradlew -b libLinphoneAndroidSdk.gradle androidJavadocsJar
|
\t./gradlew -q sdkZip
|
||||||
\t./gradlew -b libLinphoneAndroidSdk.gradle sourcesJar
|
|
||||||
\t./gradlew -b libLinphoneAndroidSdk.gradle assembleRelease
|
|
||||||
\t@mv $(TOPDIR)/bin/outputs/aar/*.aar $(TOPDIR)/bin/outputs/aar/liblinphone-sdk.aar
|
|
||||||
\t./gradlew -b libLinphoneAndroidSdk.gradle sdkZip
|
|
||||||
|
|
||||||
linphone-android-sdk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem
|
liblinphone-android-sdk: java-clean build copy-libs generate-javadoc release
|
||||||
|
\t./gradlew -q sdkZip
|
||||||
|
|
||||||
|
linphone-android-sdk: java-clean build copy-libs
|
||||||
\t./gradlew -b linphoneAndroidSdk.gradle androidJavadocsJar
|
\t./gradlew -b linphoneAndroidSdk.gradle androidJavadocsJar
|
||||||
\t./gradlew -b linphoneAndroidSdk.gradle sourcesJar
|
\t./gradlew -b linphoneAndroidSdk.gradle sourcesJar
|
||||||
|
|
||||||
|
linphone-android-sdk-release: linphone-android-sdk
|
||||||
\t./gradlew -b linphoneAndroidSdk.gradle assembleRelease
|
\t./gradlew -b linphoneAndroidSdk.gradle assembleRelease
|
||||||
\t./gradlew -b linphoneAndroidSdk.gradle sdkZip
|
\t./gradlew -b linphoneAndroidSdk.gradle sdkZip
|
||||||
|
|
||||||
|
linphone-android-sdk-debug: linphone-android-sdk
|
||||||
|
\t./gradlew -b linphoneAndroidSdk.gradle debugRelease
|
||||||
|
\t./gradlew -b linphoneAndroidSdk.gradle sdkZip
|
||||||
|
|
||||||
mediastreamer2-sdk: build copy-libs-mediastreamer
|
mediastreamer2-sdk: build copy-libs-mediastreamer
|
||||||
\t@cd $(TOPDIR)/submodules/mediastreamer2/java && \\
|
\t@cd $(TOPDIR)/submodules/mediastreamer2/java && \\
|
||||||
\t./gradlew -b mediastreamerSdk.gradle assembleRelease
|
\t./gradlew -b mediastreamerSdk.gradle assembleRelease
|
||||||
|
|
|
@ -140,7 +140,7 @@
|
||||||
android:text="@string/sent"/>
|
android:text="@string/sent"/>
|
||||||
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:visibility="gone"
|
android:visibility="invisible"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:padding="5dp"
|
android:padding="5dp"
|
||||||
|
|
Binary file not shown.
BIN
res/raw/hold.mkv
BIN
res/raw/hold.mkv
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -16,6 +16,7 @@
|
||||||
<string name="sync_account_name">جهات اتصال لِنْفُونْ</string>
|
<string name="sync_account_name">جهات اتصال لِنْفُونْ</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">اسم المستخدم</string>
|
<string name="username">اسم المستخدم</string>
|
||||||
|
<string name="userid">معرِّف المستخدم (اختياري)</string>
|
||||||
<string name="phone_number">رقم الهاتف</string>
|
<string name="phone_number">رقم الهاتف</string>
|
||||||
<string name="display_name">الاسم المعروض</string>
|
<string name="display_name">الاسم المعروض</string>
|
||||||
<string name="password">كلمة السر</string>
|
<string name="password">كلمة السر</string>
|
||||||
|
@ -110,6 +111,7 @@
|
||||||
<string name="use_email_for_validation">استخدم عنوان البريد الإلكتروني لتأكيد الحساب</string>
|
<string name="use_email_for_validation">استخدم عنوان البريد الإلكتروني لتأكيد الحساب</string>
|
||||||
<string name="login_with_username">استعمل اسم المستخدم وكلمة السر عوضا عن رقم هاتفك</string>
|
<string name="login_with_username">استعمل اسم المستخدم وكلمة السر عوضا عن رقم هاتفك</string>
|
||||||
<string name="phone_number_info_title">لأي غرض سيجري استخدام رقم هاتفي ؟</string>
|
<string name="phone_number_info_title">لأي غرض سيجري استخدام رقم هاتفي ؟</string>
|
||||||
|
<string name="phone_number_info_content">\nبفضل رقم هاتفك، يستطيع أصدقاؤك العثور عليك بسهولة.\n\nسوف ترى في دفتر عناوينك من يستخدم لِنْفُونْ كما سيتمكن أصدقاؤك كذلك من الوصول إليك عبر لِنْفُونْ.\n</string>
|
||||||
<string name="phone_number_link_info_content">
|
<string name="phone_number_link_info_content">
|
||||||
\nسيجدك أصدقاؤك بسهولة إن ربطت حسابك برقم هاتفك\\n\nسوف تجد في دفتر عناوينك من يستخدم لِنْفُونْ وسيتمكن أصدقاؤك من الوصول إليك بواسطة لِنْفُونْ كذلك.لِنْفُونْ.\n</string>
|
\nسيجدك أصدقاؤك بسهولة إن ربطت حسابك برقم هاتفك\\n\nسوف تجد في دفتر عناوينك من يستخدم لِنْفُونْ وسيتمكن أصدقاؤك من الوصول إليك بواسطة لِنْفُونْ كذلك.لِنْفُونْ.\n</string>
|
||||||
<string name="phone_number_link_info_content_already_account">يمكنك استخدام رقم هاتفي واحد مع حساب لنفون واحد.\n\nإن ربطت رقم هاتفك مع حساب آخر لكنك تود استخدام هذا الحساب، يمكنك ببساطة ربطه مع رقم هاتفك تلقائيا وسيُنقَل هذا الأخير إلى هذا الحساب.</string>
|
<string name="phone_number_link_info_content_already_account">يمكنك استخدام رقم هاتفي واحد مع حساب لنفون واحد.\n\nإن ربطت رقم هاتفك مع حساب آخر لكنك تود استخدام هذا الحساب، يمكنك ببساطة ربطه مع رقم هاتفك تلقائيا وسيُنقَل هذا الأخير إلى هذا الحساب.</string>
|
||||||
|
@ -178,6 +180,7 @@
|
||||||
<string name="displayed">قُرِأ</string>
|
<string name="displayed">قُرِأ</string>
|
||||||
<string name="delivered">سُلِّم</string>
|
<string name="delivered">سُلِّم</string>
|
||||||
<string name="resend">أعد اﻹرسال</string>
|
<string name="resend">أعد اﻹرسال</string>
|
||||||
|
<string name="error_opening_file">حدث خطأ خلال فتح هذا الملف.</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">مُسجَّل</string>
|
<string name="status_connected">مُسجَّل</string>
|
||||||
<string name="status_not_connected">غير مُسجَّل</string>
|
<string name="status_not_connected">غير مُسجَّل</string>
|
||||||
|
@ -207,9 +210,12 @@
|
||||||
<string name="call_stats_ip">صنف IP :</string>
|
<string name="call_stats_ip">صنف IP :</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_estimated_download">تقدير صبيب التنزيل :</string>
|
||||||
<string name="call_stats_ice">توصيل ICE :</string>
|
<string name="call_stats_ice">توصيل ICE :</string>
|
||||||
<string name="call_stats_video_resolution_sent">دقة الفيديو المُرسَل :</string>
|
<string name="call_stats_video_resolution_sent">دقة الفيديو المُرسَل :</string>
|
||||||
<string name="call_stats_video_resolution_received">دقة الفيديو المُستلَم :</string>
|
<string name="call_stats_video_resolution_received">دقة الفيديو المُستلَم :</string>
|
||||||
|
<string name="call_stats_video_fps_sent">معدل عرض الفيديو المُرسَل :</string>
|
||||||
|
<string name="call_stats_video_fps_received">معدل عرض الفيديو المُستلَم : </string>
|
||||||
<string name="call_stats_sender_loss_rate">معدل ضياع المُرسِل :</string>
|
<string name="call_stats_sender_loss_rate">معدل ضياع المُرسِل :</string>
|
||||||
<string name="call_stats_receiver_loss_rate">معدل ضياع المتلقي :</string>
|
<string name="call_stats_receiver_loss_rate">معدل ضياع المتلقي :</string>
|
||||||
<string name="call_stats_jitter_buffer">صِوان الارتعاش :</string>
|
<string name="call_stats_jitter_buffer">صِوان الارتعاش :</string>
|
||||||
|
@ -330,7 +336,9 @@
|
||||||
<string name="pref_auto_answer_time">مهلة التشغيل التلقائي (بالميلي-ثواني)</string>
|
<string name="pref_auto_answer_time">مهلة التشغيل التلقائي (بالميلي-ثواني)</string>
|
||||||
<string name="pref_rfc2833_dtmf">أرسل DTMF مع التدفق (RFC2833)</string>
|
<string name="pref_rfc2833_dtmf">أرسل DTMF مع التدفق (RFC2833)</string>
|
||||||
<string name="pref_sipinfo_dtmf">أرسل DTMF خارج التدفق (SIP INFO)</string>
|
<string name="pref_sipinfo_dtmf">أرسل DTMF خارج التدفق (SIP INFO)</string>
|
||||||
|
<string name="pref_call_timeout_title">مهلة المكالمة (بالثواني)</string>
|
||||||
<string name="pref_voice_mail">عنوان العلبة الصوتية</string>
|
<string name="pref_voice_mail">عنوان العلبة الصوتية</string>
|
||||||
|
<string name="pref_dialer_call">استخدمْ لِنْفُونْ كتطبيق هاتفك الافتراضي</string>
|
||||||
<!--Chat settings-->
|
<!--Chat settings-->
|
||||||
<string name="pref_chat_title">المحادثة</string>
|
<string name="pref_chat_title">المحادثة</string>
|
||||||
<string name="pref_image_sharing_server_title">خادم المشاركة</string>
|
<string name="pref_image_sharing_server_title">خادم المشاركة</string>
|
||||||
|
|
|
@ -158,6 +158,8 @@ Vos amis pourront vous joindre plus facilement si vous associez votre compte à
|
||||||
<string name="delete_conversation">Voulez-vous supprimer la discussion sélectionnée ?</string>
|
<string name="delete_conversation">Voulez-vous supprimer la discussion sélectionnée ?</string>
|
||||||
<string name="delete_message">Voulez-vous supprimer le message sélectionné ?</string>
|
<string name="delete_message">Voulez-vous supprimer le message sélectionné ?</string>
|
||||||
<string name="remote_composing">Votre correspondant est en train de taper...</string>
|
<string name="remote_composing">Votre correspondant est en train de taper...</string>
|
||||||
|
<string name="remote_composing_single">%s écrit</string>
|
||||||
|
<string name="remote_composing_multiple">%s écrivent</string>
|
||||||
<string name="share_picture_size_small">Petite</string>
|
<string name="share_picture_size_small">Petite</string>
|
||||||
<string name="share_picture_size_medium">Moyenne</string>
|
<string name="share_picture_size_medium">Moyenne</string>
|
||||||
<string name="share_picture_size_large">Grande</string>
|
<string name="share_picture_size_large">Grande</string>
|
||||||
|
@ -176,30 +178,29 @@ Vos amis pourront vous joindre plus facilement si vous associez votre compte à
|
||||||
<string name="processing_image">Traitement de l\'image, cela peut prendre quelques secondes selon sa taille</string>
|
<string name="processing_image">Traitement de l\'image, cela peut prendre quelques secondes selon sa taille</string>
|
||||||
<string name="displayed">Lu</string>
|
<string name="displayed">Lu</string>
|
||||||
<string name="delivered">Reçu</string>
|
<string name="delivered">Reçu</string>
|
||||||
|
<string name="undelivered">Reçu</string>
|
||||||
<string name="sent">Envoyé</string>
|
<string name="sent">Envoyé</string>
|
||||||
<string name="resend">Renvoyer</string>
|
<string name="resend">Renvoyer</string>
|
||||||
<string name="error_opening_file">Une erreur est survenue en tentant d\'ouvrir ce fichier.</string>
|
|
||||||
<string name="conversation_information">Infos</string>
|
<string name="conversation_information">Infos</string>
|
||||||
<string name="administrator">Admin</string>
|
<string name="administrator">Admin</string>
|
||||||
<string name="conversation_subject_hint">Nommez ce groupe</string>
|
<string name="conversation_subject_hint">Nommer le groupe</string>
|
||||||
<string name="chat_room_infos_title">Infos</string>
|
<string name="chat_room_infos_title">Infos</string>
|
||||||
<string name="chat_room_infos_admin">Admin</string>
|
<string name="chat_room_infos_admin">Admin</string>
|
||||||
<string name="chat_room_participants">Participants</string>
|
<string name="chat_room_participants">Participants</string>
|
||||||
<string name="chat_room_leave_group">Quitter le groupe</string>
|
<string name="chat_room_leave_group">Quitter le groupe</string>
|
||||||
<string name="chat_room_creation_filter_hint">Filtrer les contacts</string>
|
<string name="chat_room_creation_filter_hint">Rechercher un contact</string>
|
||||||
<string name="conference_created">groupe créé</string>
|
<string name="conference_created">Vous avez rejoint le groupe</string>
|
||||||
<string name="conference_destroyed">groupe détruit</string>
|
<string name="conference_destroyed">Vous avez quitté le groupe</string>
|
||||||
<string name="participant_added">%s a été ajouté</string>
|
<string name="participant_added">%s a rejoint le groupe</string>
|
||||||
<string name="participant_removed">%s a quitté</string>
|
<string name="participant_removed">%s a quitté le groupe</string>
|
||||||
<string name="device_added">nouvel appareil pour %s</string>
|
<string name="subject_changed">Nouveau sujet : %s</string>
|
||||||
<string name="device_removed">appareil de %s retiré</string>
|
<string name="admin_set">%s est devenu(e) admin</string>
|
||||||
<string name="subject_changed">nouveau sujet : %s</string>
|
|
||||||
<string name="admin_set">%s est admin</string>
|
|
||||||
<string name="admin_unset">%s n\'est plus admin</string>
|
<string name="admin_unset">%s n\'est plus admin</string>
|
||||||
<string name="chat_room_leave_dialog">Souhaitez-vous vraiment quitter ce groupe ?</string>
|
<string name="chat_room_you_are_now_admin">Vous êtes maintenant admin</string>
|
||||||
|
<string name="chat_room_leave_dialog">Voulez vous vraiment quitter cette conversation ?</string>
|
||||||
<string name="chat_room_leave_button">Quitter</string>
|
<string name="chat_room_leave_button">Quitter</string>
|
||||||
<string name="chat_room_delete_dialog">Voulez-vous supprimer et quitter les discussions sélectionnées ?</string>
|
<string name="chat_room_delete_dialog">Voulez vous vraiment quitter et supprimer les conversations selectionnées ?</string>
|
||||||
<string name="separator"> : </string>
|
<string name="imdn_info">Etat du message</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">Enregistré</string>
|
<string name="status_connected">Enregistré</string>
|
||||||
<string name="status_not_connected">Non enregistré</string>
|
<string name="status_not_connected">Non enregistré</string>
|
||||||
|
|
|
@ -11,10 +11,12 @@
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
<string name="about_version">Linphone Android %s</string>
|
<string name="about_version">Linphone Android %s</string>
|
||||||
<string name="about_liblinphone_version">Linphone Core %s</string>
|
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||||
|
<string name="about_text">GNU General Public License V2\n © 2010-2017 Belledonne Communications</string>
|
||||||
<string name="about_link">www.linphone.org</string>
|
<string name="about_link">www.linphone.org</string>
|
||||||
<string name="sync_account_name">linphoneに問い合わせる</string>
|
<string name="sync_account_name">linphoneに問い合わせる</string>
|
||||||
<!--Common-->
|
<!--Common-->
|
||||||
<string name="username">ユーザー名</string>
|
<string name="username">ユーザー名</string>
|
||||||
|
<string name="userid">ユーザID(オプション)</string>
|
||||||
<string name="phone_number">電話番号</string>
|
<string name="phone_number">電話番号</string>
|
||||||
<string name="display_name">表示名</string>
|
<string name="display_name">表示名</string>
|
||||||
<string name="password">パスワード</string>
|
<string name="password">パスワード</string>
|
||||||
|
@ -44,6 +46,7 @@
|
||||||
<string name="maybe_later">また今度</string>
|
<string name="maybe_later">また今度</string>
|
||||||
<string name="later">そのうち</string>
|
<string name="later">そのうち</string>
|
||||||
<string name="no">いいえ</string>
|
<string name="no">いいえ</string>
|
||||||
|
<string name="ok">OK</string>
|
||||||
<string name="yes">はい</string>
|
<string name="yes">はい</string>
|
||||||
<string name="link_account">アカウントをリンクする</string>
|
<string name="link_account">アカウントをリンクする</string>
|
||||||
<!--Launch screen-->
|
<!--Launch screen-->
|
||||||
|
@ -85,6 +88,8 @@
|
||||||
<string name="assistant_error_bad_credentials">ユーザー名かパスワードが異なります</string>
|
<string name="assistant_error_bad_credentials">ユーザー名かパスワードが異なります</string>
|
||||||
<string name="assistant_codec_down_question">Cisco Systems,Incが提供するOpenH264ビデオコーデックをダウンロードしますか?</string>
|
<string name="assistant_codec_down_question">Cisco Systems,Incが提供するOpenH264ビデオコーデックをダウンロードしますか?</string>
|
||||||
<string name="assistant_codec_downloading">Cisco Systems,Incが提供するOpenH264ビデオコーデックをダウンロードします。</string>
|
<string name="assistant_codec_downloading">Cisco Systems,Incが提供するOpenH264ビデオコーデックをダウンロードします。</string>
|
||||||
|
<string name="assistant_openh264_downloading">OpenH264をダウンロードしています。</string>
|
||||||
|
<string name="assistant_openh264_restart">OpenH264コーデックを使うためには再起動する必要があります%s</string>
|
||||||
<string name="assistant_codec_downloaded">Cisco Systems,Incが提供するOpenH264ビデオコーデックがダウンロードされました。</string>
|
<string name="assistant_codec_downloaded">Cisco Systems,Incが提供するOpenH264ビデオコーデックがダウンロードされました。</string>
|
||||||
<string name="wizard_failed">エラーが発生しました。のちほど再試行してください。</string>
|
<string name="wizard_failed">エラーが発生しました。のちほど再試行してください。</string>
|
||||||
<string name="wizard_server_unavailable">ネットワーク接続を確認してください。</string>
|
<string name="wizard_server_unavailable">ネットワーク接続を確認してください。</string>
|
||||||
|
@ -164,7 +169,10 @@
|
||||||
<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">お待ちください...</string>
|
<string name="wait">お待ちください...</string>
|
||||||
|
<string name="message_not_encrypted">このメッセージは暗号化されていません。</string>
|
||||||
|
<string name="message_cant_be_decrypted_notif">このメッセージを復号化することが出来ませんでした。</string>
|
||||||
<string name="processing_image">画像の処理は、ファイルサイズによっては数秒かかることがあります</string>
|
<string name="processing_image">画像の処理は、ファイルサイズによっては数秒かかることがあります</string>
|
||||||
|
<string name="resend">再送信</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">登録済</string>
|
<string name="status_connected">登録済</string>
|
||||||
<string name="status_not_connected">登録なし</string>
|
<string name="status_not_connected">登録なし</string>
|
||||||
|
@ -191,6 +199,8 @@
|
||||||
<string name="call_stats_ice">ICE 接続:</string>
|
<string name="call_stats_ice">ICE 接続:</string>
|
||||||
<string name="call_stats_video_resolution_sent">送信ビデオ解像度:</string>
|
<string name="call_stats_video_resolution_sent">送信ビデオ解像度:</string>
|
||||||
<string name="call_stats_video_resolution_received">受信ビデオ解像度:</string>
|
<string name="call_stats_video_resolution_received">受信ビデオ解像度:</string>
|
||||||
|
<string name="call_stats_video_fps_sent">送信ビデオfps:</string>
|
||||||
|
<string name="call_stats_video_fps_received">受信ビデオfps:</string>
|
||||||
<string name="call_stats_sender_loss_rate">送信ロス:</string>
|
<string name="call_stats_sender_loss_rate">送信ロス:</string>
|
||||||
<string name="call_stats_receiver_loss_rate">受信ロス:</string>
|
<string name="call_stats_receiver_loss_rate">受信ロス:</string>
|
||||||
<string name="call_stats_encoder_name">エンコーダー:</string>
|
<string name="call_stats_encoder_name">エンコーダー:</string>
|
||||||
|
@ -216,6 +226,7 @@
|
||||||
<string name="error_user_busy">ビジーです</string>
|
<string name="error_user_busy">ビジーです</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="error_bad_credentials">不正な証明書です</string>
|
<string name="error_bad_credentials">不正な証明書です</string>
|
||||||
<string name="error_unauthorized">無断</string>
|
<string name="error_unauthorized">無断</string>
|
||||||
|
@ -309,6 +320,7 @@
|
||||||
<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>
|
||||||
|
<string name="pref_dialer_call">Linphoneを標準の電話アプリとして使う</string>
|
||||||
<!--Chat settings-->
|
<!--Chat settings-->
|
||||||
<string name="pref_chat_title">チャット</string>
|
<string name="pref_chat_title">チャット</string>
|
||||||
<string name="pref_image_sharing_server_title">共有サーバー</string>
|
<string name="pref_image_sharing_server_title">共有サーバー</string>
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
<string name="retry">Повторить</string>
|
<string name="retry">Повторить</string>
|
||||||
<string name="cancel">Отменить</string>
|
<string name="cancel">Отменить</string>
|
||||||
<string name="accept">Принять</string>
|
<string name="accept">Принять</string>
|
||||||
|
<string name="open">Открыть</string>
|
||||||
<string name="continue_text">Продолжить</string>
|
<string name="continue_text">Продолжить</string>
|
||||||
<string name="about">О программе</string>
|
<string name="about">О программе</string>
|
||||||
<string name="deny">Отклонить</string>
|
<string name="deny">Отклонить</string>
|
||||||
|
@ -67,19 +68,19 @@
|
||||||
<string name="assistant_remote_provisioning_desc">Укажите URL-адрес конфигурации</string>
|
<string name="assistant_remote_provisioning_desc">Укажите URL-адрес конфигурации</string>
|
||||||
<string name="transport">Транспорт</string>
|
<string name="transport">Транспорт</string>
|
||||||
<string name="assistant_create_account_phone_number_address">Ваш SIP-адрес</string>
|
<string name="assistant_create_account_phone_number_address">Ваш SIP-адрес</string>
|
||||||
<string name="assistant_login_linphone">Использовать учетную запись Linphone</string>
|
<string name="assistant_login_linphone">Использовать аккаунт 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">Подтвердите код страны и введите свой номер телефона</string>
|
<string name="assistant_create_account_part_1">Подтвердите код страны и введите свой номер телефона</string>
|
||||||
<string name="assistant_create_account_part_2">Мы отправили SMS-сообщение с кодом подтверждения на ваш номер телефона:</string>
|
<string name="assistant_create_account_part_2">Мы отправили SMS-сообщение с кодом подтверждения на ваш номер телефона:</string>
|
||||||
<string name="assistant_create_account_part_3">Чтобы завершить проверку номера телефона, введите 4-значный код ниже:\n</string>
|
<string name="assistant_create_account_part_3">Чтобы завершить проверку номера телефона, введите 4-значный код ниже:\n</string>
|
||||||
<string name="assistant_create_account_part_email">Введите имя пользователя, адрес электронной почты и пароль для вашей учетной записи Linphone</string>
|
<string name="assistant_create_account_part_email">Введите имя пользователя, адрес электронной почты и пароль для вашей учетной записи Linphone</string>
|
||||||
<string name="assistant_display_name_optional">Отображаемое имя (необязательно)</string>
|
<string name="assistant_display_name_optional">Отображаемое имя (необязательно)</string>
|
||||||
<string name="assistant_linphone_account">Использовать учетную запись Linphone</string>
|
<string name="assistant_linphone_account">Использовать аккаунт Linphone</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>
|
||||||
<string name="assistant_remote_provisioning_login">Введите имя пользователя</string>
|
<string name="assistant_remote_provisioning_login">Введите имя пользователя</string>
|
||||||
<string name="assistant_account_not_validated">Ваша учетная запись еще не проверена.</string>
|
<string name="assistant_account_not_validated">Ваша учетная запись еще не проверена.</string>
|
||||||
|
@ -111,6 +112,7 @@
|
||||||
<string name="use_email_for_validation">Использовать адрес электронной почты для проверки учетной записи</string>
|
<string name="use_email_for_validation">Использовать адрес электронной почты для проверки учетной записи</string>
|
||||||
<string name="login_with_username">Вместо номера телефона использовать имя пользователя и пароль</string>
|
<string name="login_with_username">Вместо номера телефона использовать имя пользователя и пароль</string>
|
||||||
<string name="phone_number_info_title">Для чего будет использоваться мой номер телефона?</string>
|
<string name="phone_number_info_title">Для чего будет использоваться мой номер телефона?</string>
|
||||||
|
<string name="phone_number_info_content">\nВашим друзьям будет проще связаться с вами, если вы свяжете свою учетную запись со своим номером телефона.\n\n В вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n</string>
|
||||||
<string name="phone_number_link_info_content">\nВашим друзьям будет проще связаться с вами, если вы свяжете свою учетную запись со своим номером телефона.\n\nВ вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n</string>
|
<string name="phone_number_link_info_content">\nВашим друзьям будет проще связаться с вами, если вы свяжете свою учетную запись со своим номером телефона.\n\nВ вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n</string>
|
||||||
<string name="phone_number_link_info_content_already_account">Номер телефона можно использовать только с одной учетной записью Linphone.\n\nЕсли ваш номер уже был связан с другой учетной записью, но вы предпочитаете использовать его, просто свяжите его сейчас, и ваш номер будет автоматически перенесен в эту учетную запись.</string>
|
<string name="phone_number_link_info_content_already_account">Номер телефона можно использовать только с одной учетной записью Linphone.\n\nЕсли ваш номер уже был связан с другой учетной записью, но вы предпочитаете использовать его, просто свяжите его сейчас, и ваш номер будет автоматически перенесен в эту учетную запись.</string>
|
||||||
<!--Status-->
|
<!--Status-->
|
||||||
|
@ -159,6 +161,8 @@
|
||||||
<string name="delete_conversation">Вы действительно хотите удалить выбранный разговор?</string>
|
<string name="delete_conversation">Вы действительно хотите удалить выбранный разговор?</string>
|
||||||
<string name="delete_message">Вы действительно хотите удалить выбранное сообщение?</string>
|
<string name="delete_message">Вы действительно хотите удалить выбранное сообщение?</string>
|
||||||
<string name="remote_composing">Собеседник пишет...</string>
|
<string name="remote_composing">Собеседник пишет...</string>
|
||||||
|
<string name="remote_composing_single">%s печатает...</string>
|
||||||
|
<string name="remote_composing_multiple">%s печатают...</string>
|
||||||
<string name="share_picture_size_small">Маленький</string>
|
<string name="share_picture_size_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>
|
||||||
|
@ -177,7 +181,28 @@
|
||||||
<string name="processing_image">Обработка изображения может занять несколько секунд в зависимости от размера файла</string>
|
<string name="processing_image">Обработка изображения может занять несколько секунд в зависимости от размера файла</string>
|
||||||
<string name="displayed">Прочитано</string>
|
<string name="displayed">Прочитано</string>
|
||||||
<string name="delivered">Доставлено</string>
|
<string name="delivered">Доставлено</string>
|
||||||
|
<string name="undelivered">Не доставлено</string>
|
||||||
|
<string name="sent">Отправлено</string>
|
||||||
<string name="resend">Переслать</string>
|
<string name="resend">Переслать</string>
|
||||||
|
<string name="error_opening_file">При открытии этого файла возникает ошибка.</string>
|
||||||
|
<string name="conversation_information">Информация</string>
|
||||||
|
<string name="administrator">Администратор</string>
|
||||||
|
<string name="chat_room_infos_title">Информация</string>
|
||||||
|
<string name="chat_room_infos_admin">Администратор</string>
|
||||||
|
<string name="chat_room_participants">Участники</string>
|
||||||
|
<string name="chat_room_leave_group">Покинуть группу</string>
|
||||||
|
<string name="device_added">новое устройство для %s</string>
|
||||||
|
<string name="device_removed">устройство для %s удалено</string>
|
||||||
|
<string name="subject_changed">новая тема: %s</string>
|
||||||
|
<string name="admin_set">%s это администратор</string>
|
||||||
|
<string name="admin_unset">%s больше не администратор</string>
|
||||||
|
<string name="group_chat_notif" formatted="false">%1: %2</string>
|
||||||
|
<string name="chat_room_you_are_now_admin">Теперь вы администратор</string>
|
||||||
|
<string name="chat_room_you_are_no_longer_admin">Вы больше не администратор</string>
|
||||||
|
<string name="chat_room_creation_failed">Не удалось создать чат-комнату</string>
|
||||||
|
<string name="chat_room_leave_button">Покинуть</string>
|
||||||
|
<string name="separator">: </string>
|
||||||
|
<string name="imdn_info">Статус доставки</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">Зарегистрирован</string>
|
<string name="status_connected">Зарегистрирован</string>
|
||||||
<string name="status_not_connected">Не зарегистрирован</string>
|
<string name="status_not_connected">Не зарегистрирован</string>
|
||||||
|
@ -233,6 +258,7 @@
|
||||||
<!--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="file_transfer_error">Ошибка передачи файла</string>
|
||||||
<string name="warning_wrong_destination_address">Невозможно создать адрес назначения из %s</string>
|
<string name="warning_wrong_destination_address">Невозможно создать адрес назначения из %s</string>
|
||||||
<string name="error_unknown">Неизвестная ошибка</string>
|
<string name="error_unknown">Неизвестная ошибка</string>
|
||||||
<string name="error_call_declined">Вызов отклонен</string>
|
<string name="error_call_declined">Вызов отклонен</string>
|
||||||
|
@ -245,7 +271,7 @@
|
||||||
<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="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>
|
||||||
<string name="remote_provisioning_again_message">Вы хотите изменить URI конфигурирования?</string>
|
<string name="remote_provisioning_again_message">Вы хотите изменить URI конфигурирования?</string>
|
||||||
<!--Account Settings-->
|
<!--Account Settings-->
|
||||||
|
@ -280,6 +306,7 @@
|
||||||
<string name="pref_change_password">Изменить пароль</string>
|
<string name="pref_change_password">Изменить пароль</string>
|
||||||
<string name="pref_default_account">Использовать по умолчанию</string>
|
<string name="pref_default_account">Использовать по умолчанию</string>
|
||||||
<string name="pref_password_changed">Пароль изменен</string>
|
<string name="pref_password_changed">Пароль изменен</string>
|
||||||
|
<string name="pref_proxy_push_notif">Разрешить push-уведомление</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>
|
||||||
|
@ -335,6 +362,7 @@
|
||||||
<string name="pref_sipinfo_dtmf">Отправить вне потока DTMFs(SIP INFO)</string>
|
<string name="pref_sipinfo_dtmf">Отправить вне потока DTMFs(SIP INFO)</string>
|
||||||
<string name="pref_call_timeout_title">Таймаут вызова(в секундах)</string>
|
<string name="pref_call_timeout_title">Таймаут вызова(в секундах)</string>
|
||||||
<string name="pref_voice_mail">URI голосовой почты</string>
|
<string name="pref_voice_mail">URI голосовой почты</string>
|
||||||
|
<string name="pref_dialer_call">Использовать Linphone в качестве приложения для звонков по умолчанию.</string>
|
||||||
<!--Chat settings-->
|
<!--Chat settings-->
|
||||||
<string name="pref_chat_title">Чат</string>
|
<string name="pref_chat_title">Чат</string>
|
||||||
<string name="pref_image_sharing_server_title">Сервер обмена</string>
|
<string name="pref_image_sharing_server_title">Сервер обмена</string>
|
||||||
|
@ -367,6 +395,7 @@
|
||||||
<string name="pref_advanced_title">Дополнительно</string>
|
<string name="pref_advanced_title">Дополнительно</string>
|
||||||
<string name="pref_debug_title">Отладка</string>
|
<string name="pref_debug_title">Отладка</string>
|
||||||
<string name="pref_debug">Отладка</string>
|
<string name="pref_debug">Отладка</string>
|
||||||
|
<string name="pref_java_debug">Использовать Java-регистратор</string>
|
||||||
<string name="pref_friendlist_subscribe">Подписка</string>
|
<string name="pref_friendlist_subscribe">Подписка</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>
|
||||||
|
@ -458,4 +487,6 @@
|
||||||
<string name="content_description_exit_conference">Выйти из конференции</string>
|
<string name="content_description_exit_conference">Выйти из конференции</string>
|
||||||
<string name="content_title_notification_service">Служба Linphone</string>
|
<string name="content_title_notification_service">Служба Linphone</string>
|
||||||
<string name="content_title_notification">Уведомление Linphone</string>
|
<string name="content_title_notification">Уведомление Linphone</string>
|
||||||
|
<string name="content_description_conversation_subject">Тема группового чата</string>
|
||||||
|
<string name="content_description_conversation_infos">Информация о групповом чате</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -111,6 +111,7 @@
|
||||||
<string name="use_email_for_validation">Använd e-postadress för kontovalidering</string>
|
<string name="use_email_for_validation">Använd e-postadress för kontovalidering</string>
|
||||||
<string name="login_with_username">Använd ditt användarnamn och lösenord istället för ditt telefonnummer</string>
|
<string name="login_with_username">Använd ditt användarnamn och lösenord istället för ditt telefonnummer</string>
|
||||||
<string name="phone_number_info_title">Vad ska mitt telefonnummer användas för?</string>
|
<string name="phone_number_info_title">Vad ska mitt telefonnummer användas för?</string>
|
||||||
|
<string name="phone_number_info_content">\nTack vare ditt telefonnummer kommer dina vänner att hitta dig lättare.\n\n Du kommer att se i din adressbok vem som använder Linphone och dina vänner kommer veta att de kan nå dig på Linphone också.\n</string>
|
||||||
<string name="phone_number_link_info_content">\nDina vänner hittar dig lättare om du kopplar ditt konto till ditt telefonnummer\n\nDu ser i din adressbok vilka som använder Linphone och dina vänner vet att de når dig på Linphone också.\n</string>
|
<string name="phone_number_link_info_content">\nDina vänner hittar dig lättare om du kopplar ditt konto till ditt telefonnummer\n\nDu ser i din adressbok vilka som använder Linphone och dina vänner vet att de når dig på Linphone också.\n</string>
|
||||||
<string name="phone_number_link_info_content_already_account">Du kan bara använda ditt telefonnummer med ett Linphone-konto.\n\nOm du redan har länkat ditt nummer till ett annat konto, men du föredrar att använda det här, kopplar du bara det nu och ditt nummer flyttas automatiskt till det här kontot.</string>
|
<string name="phone_number_link_info_content_already_account">Du kan bara använda ditt telefonnummer med ett Linphone-konto.\n\nOm du redan har länkat ditt nummer till ett annat konto, men du föredrar att använda det här, kopplar du bara det nu och ditt nummer flyttas automatiskt till det här kontot.</string>
|
||||||
<!--Status-->
|
<!--Status-->
|
||||||
|
@ -140,8 +141,8 @@
|
||||||
<!--Dailer-->
|
<!--Dailer-->
|
||||||
<string name="address_bar_hint">Ange ett nummer eller en adress</string>
|
<string name="address_bar_hint">Ange ett nummer eller en adress</string>
|
||||||
<!--History-->
|
<!--History-->
|
||||||
<string name="no_call_history">Inget samtal i din historia</string>
|
<string name="no_call_history">Inga samtal i din historik</string>
|
||||||
<string name="no_missed_call_history">Inget missat samtal i din historia</string>
|
<string name="no_missed_call_history">Inga missade samtal i din historik</string>
|
||||||
<string name="delete_history_log">Vill du ta bort vald samtalslog?</string>
|
<string name="delete_history_log">Vill du ta bort vald samtalslog?</string>
|
||||||
<string name="today">Idag</string>
|
<string name="today">Idag</string>
|
||||||
<string name="yesterday">Igår</string>
|
<string name="yesterday">Igår</string>
|
||||||
|
@ -178,6 +179,7 @@
|
||||||
<string name="displayed">Läs</string>
|
<string name="displayed">Läs</string>
|
||||||
<string name="delivered">Levererades</string>
|
<string name="delivered">Levererades</string>
|
||||||
<string name="resend">Skicka igen</string>
|
<string name="resend">Skicka igen</string>
|
||||||
|
<string name="error_opening_file">Ett fel uppstår när filen öppnas.</string>
|
||||||
<!--Status Bar-->
|
<!--Status Bar-->
|
||||||
<string name="status_connected">Registrerad</string>
|
<string name="status_connected">Registrerad</string>
|
||||||
<string name="status_not_connected">Inte registrerad</string>
|
<string name="status_not_connected">Inte registrerad</string>
|
||||||
|
@ -334,6 +336,7 @@
|
||||||
<string name="pref_rfc2833_dtmf">Skicka in-band DTMF (RFC2833)</string>
|
<string name="pref_rfc2833_dtmf">Skicka in-band DTMF (RFC2833)</string>
|
||||||
<string name="pref_sipinfo_dtmf">Skicka ut-band DTMF (SIP INFO)</string>
|
<string name="pref_sipinfo_dtmf">Skicka ut-band DTMF (SIP INFO)</string>
|
||||||
<string name="pref_voice_mail">Röstbrevlåda URI</string>
|
<string name="pref_voice_mail">Röstbrevlåda URI</string>
|
||||||
|
<string name="pref_dialer_call">Använd Linphone som standard telefonapp</string>
|
||||||
<!--Chat settings-->
|
<!--Chat settings-->
|
||||||
<string name="pref_chat_title">Chatt</string>
|
<string name="pref_chat_title">Chatt</string>
|
||||||
<string name="pref_image_sharing_server_title">Delar server</string>
|
<string name="pref_image_sharing_server_title">Delar server</string>
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
<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="open">Aç</string>
|
||||||
<string name="continue_text">Sürdür</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>
|
||||||
|
@ -111,6 +112,7 @@
|
||||||
<string name="use_email_for_validation">Hesap doğrulama için e-posta adresi kullan</string>
|
<string name="use_email_for_validation">Hesap doğrulama için e-posta adresi kullan</string>
|
||||||
<string name="login_with_username">Telefon numaranız yerine kullanıcı adınızı ve parolanızı kullanın</string>
|
<string name="login_with_username">Telefon numaranız yerine kullanıcı adınızı ve parolanızı kullanın</string>
|
||||||
<string name="phone_number_info_title">Telefon numaram ne için kullanılacak?</string>
|
<string name="phone_number_info_title">Telefon numaram ne için kullanılacak?</string>
|
||||||
|
<string name="phone_number_info_content">\nTelefon numaranız sayesinde arkadaşlarınız sizi daha kolay bulacak.\n\n Adres defterinizde kimlerin Linphone kullandığını göreceksiniz ve arkadaşlarınız da size Linphone\'dan ulaşabileceklerini bilecek.\n</string>
|
||||||
<string name="phone_number_link_info_content">\nEğer hesabını telefon numarana bağlarsan arkadaşların seni daha kolay bulacak\n\nAdres listende kimlerin Linphone kullandığını göreceksin ve arkadaşların da sana Linphone üzerinden ulaşabileceğini bilecek.\n</string>
|
<string name="phone_number_link_info_content">\nEğer hesabını telefon numarana bağlarsan arkadaşların seni daha kolay bulacak\n\nAdres listende kimlerin Linphone kullandığını göreceksin ve arkadaşların da sana Linphone üzerinden ulaşabileceğini bilecek.\n</string>
|
||||||
<string name="phone_number_link_info_content_already_account">Telefon numaranı yalnızca tek Linphone hesabıyla kullanabilirsin.\n\nEğer hesabını zaten başka bir hesaba bağladıysan ama bunu kullanmak istiyorsan, şimdi bağla ve numaran kendiliğinden bu hesaba taşınsın.</string>
|
<string name="phone_number_link_info_content_already_account">Telefon numaranı yalnızca tek Linphone hesabıyla kullanabilirsin.\n\nEğer hesabını zaten başka bir hesaba bağladıysan ama bunu kullanmak istiyorsan, şimdi bağla ve numaran kendiliğinden bu hesaba taşınsın.</string>
|
||||||
<!--Status-->
|
<!--Status-->
|
||||||
|
@ -159,6 +161,8 @@
|
||||||
<string name="delete_conversation">Seçilen görüşmeyi silmek ister misiniz?</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="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="remote_composing_single">%s yazıyor...</string>
|
||||||
|
<string name="remote_composing_multiple">%s yazı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>
|
||||||
<string name="share_picture_size_large">Büyük</string>
|
<string name="share_picture_size_large">Büyük</string>
|
||||||
|
@ -177,7 +181,24 @@
|
||||||
<string name="processing_image">Görüntü işleniyor, dosyanın boyutuna bağlı olarak bir kaç saniye sürebilir</string>
|
<string name="processing_image">Görüntü işleniyor, dosyanın boyutuna bağlı olarak bir kaç saniye sürebilir</string>
|
||||||
<string name="displayed">Okundu</string>
|
<string name="displayed">Okundu</string>
|
||||||
<string name="delivered">Ulaştırıldı</string>
|
<string name="delivered">Ulaştırıldı</string>
|
||||||
|
<string name="sent">Gönderildi</string>
|
||||||
<string name="resend">Yeniden gönder</string>
|
<string name="resend">Yeniden gönder</string>
|
||||||
|
<string name="error_opening_file">Bu dosya açılırken bir hata oluştu.</string>
|
||||||
|
<string name="administrator">Yönetici</string>
|
||||||
|
<string name="chat_room_infos_admin">Yönetici</string>
|
||||||
|
<string name="chat_room_participants">Katılımcılar</string>
|
||||||
|
<string name="chat_room_leave_group">Kümeden ayrıl</string>
|
||||||
|
<string name="device_added">%s için yeni aygıt</string>
|
||||||
|
<string name="device_removed">%s için aygıt kaldırıldı</string>
|
||||||
|
<string name="subject_changed">yeni konu: %s</string>
|
||||||
|
<string name="admin_set">%s yöneticidir</string>
|
||||||
|
<string name="admin_unset">%s artık yönetici değildir</string>
|
||||||
|
<string name="group_chat_notif" formatted="false">%1: %2</string>
|
||||||
|
<string name="chat_room_you_are_now_admin">Şimdi yöneticisiniz</string>
|
||||||
|
<string name="chat_room_you_are_no_longer_admin">Artık yönetici değilsiniz</string>
|
||||||
|
<string name="chat_room_creation_failed">Konuşma odası oluşturma başarısız</string>
|
||||||
|
<string name="chat_room_leave_button">Ayrıl</string>
|
||||||
|
<string name="separator">: </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_not_connected">Kayıtsız</string>
|
||||||
|
@ -233,6 +254,7 @@
|
||||||
<!--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="file_transfer_error">Dosya aktarım hatası</string>
|
||||||
<string name="warning_wrong_destination_address">%s dan gidilecek adres inşa edilemiyor</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>
|
||||||
|
@ -335,6 +357,7 @@
|
||||||
<string name="pref_sipinfo_dtmf">Bant dışı DTMF(SIP INFO) gönder</string>
|
<string name="pref_sipinfo_dtmf">Bant dışı DTMF(SIP INFO) gönder</string>
|
||||||
<string name="pref_call_timeout_title">Çağrı zaman aşımı (saniye türünde)</string>
|
<string name="pref_call_timeout_title">Çağrı zaman aşımı (saniye türünde)</string>
|
||||||
<string name="pref_voice_mail">Sesli posta adresi</string>
|
<string name="pref_voice_mail">Sesli posta adresi</string>
|
||||||
|
<string name="pref_dialer_call">Linphone\'u öntanımlı telefon uygulaması olarak kullan</string>
|
||||||
<!--Chat settings-->
|
<!--Chat settings-->
|
||||||
<string name="pref_chat_title">Konuşma</string>
|
<string name="pref_chat_title">Konuşma</string>
|
||||||
<string name="pref_image_sharing_server_title">Paylaşım sunucusu</string>
|
<string name="pref_image_sharing_server_title">Paylaşım sunucusu</string>
|
||||||
|
@ -458,4 +481,5 @@
|
||||||
<string name="content_description_exit_conference">Görüşmeden çık</string>
|
<string name="content_description_exit_conference">Görüşmeden çık</string>
|
||||||
<string name="content_title_notification_service">Linphone Hizmeti</string>
|
<string name="content_title_notification_service">Linphone Hizmeti</string>
|
||||||
<string name="content_title_notification">Linphone Bildirimi</string>
|
<string name="content_title_notification">Linphone Bildirimi</string>
|
||||||
|
<string name="content_description_conversation_subject">Küme konuşma odası konusu</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -12,7 +12,7 @@
|
||||||
<string name="tunnel_host"></string>
|
<string name="tunnel_host"></string>
|
||||||
<string name="about_version">Linphone Android %s</string>
|
<string name="about_version">Linphone Android %s</string>
|
||||||
<string name="about_liblinphone_version">Linphone Core %s</string>
|
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||||
<string name="about_text">GNU General Public License V2\n © 2010-2017 Belledonne Communications</string>
|
<string name="about_text">GNU General Public License V2\n © 2010-2018 Belledonne Communications</string>
|
||||||
<string name="about_link">www.linphone.org</string>
|
<string name="about_link">www.linphone.org</string>
|
||||||
<string name="sync_account_name">linphone contacts</string>
|
<string name="sync_account_name">linphone contacts</string>
|
||||||
|
|
||||||
|
@ -197,16 +197,16 @@
|
||||||
<string name="error_opening_file">An error occurs when opening this file.</string>
|
<string name="error_opening_file">An error occurs when opening this file.</string>
|
||||||
<string name="conversation_information">Info</string>
|
<string name="conversation_information">Info</string>
|
||||||
<string name="administrator">Admin</string>
|
<string name="administrator">Admin</string>
|
||||||
<string name="conversation_subject_hint">Name your group</string>
|
<string name="conversation_subject_hint">Name the group</string>
|
||||||
<string name="chat_room_infos_title">Info</string>
|
<string name="chat_room_infos_title">Info</string>
|
||||||
<string name="chat_room_infos_admin">Admin</string>
|
<string name="chat_room_infos_admin">Admin</string>
|
||||||
<string name="chat_room_participants">Participants</string>
|
<string name="chat_room_participants">Participants</string>
|
||||||
<string name="chat_room_leave_group">Leave the group</string>
|
<string name="chat_room_leave_group">Leave the group</string>
|
||||||
<string name="chat_room_creation_filter_hint">Contact filter</string>
|
<string name="chat_room_creation_filter_hint">Search a contact</string>
|
||||||
<string name="conference_created">group created</string>
|
<string name="conference_created">You have joined the group</string>
|
||||||
<string name="conference_destroyed">group destroyed</string>
|
<string name="conference_destroyed">You have left the group</string>
|
||||||
<string name="participant_added">%s added</string>
|
<string name="participant_added">%s has joined</string>
|
||||||
<string name="participant_removed">%s leaved</string>
|
<string name="participant_removed">%s has left</string>
|
||||||
<string name="device_added">new device for %s</string>
|
<string name="device_added">new device for %s</string>
|
||||||
<string name="device_removed">device for %s removed</string>
|
<string name="device_removed">device for %s removed</string>
|
||||||
<string name="subject_changed">new subject: %s</string>
|
<string name="subject_changed">new subject: %s</string>
|
||||||
|
@ -216,9 +216,9 @@
|
||||||
<string name="chat_room_you_are_now_admin">You are now admin</string>
|
<string name="chat_room_you_are_now_admin">You are now admin</string>
|
||||||
<string name="chat_room_you_are_no_longer_admin">You are no longer admin</string>
|
<string name="chat_room_you_are_no_longer_admin">You are no longer admin</string>
|
||||||
<string name="chat_room_creation_failed">Chat room creation failed</string>
|
<string name="chat_room_creation_failed">Chat room creation failed</string>
|
||||||
<string name="chat_room_leave_dialog">Do you really want to leave this group?</string>
|
<string name="chat_room_leave_dialog">Do you really want to leave this conversation?</string>
|
||||||
<string name="chat_room_leave_button">Leave</string>
|
<string name="chat_room_leave_button">Leave</string>
|
||||||
<string name="chat_room_delete_dialog">Do you want to delete and leave the selected conversations?</string>
|
<string name="chat_room_delete_dialog">Do you really want to delete and leave the selected conversations?</string>
|
||||||
<string name="separator">: </string>
|
<string name="separator">: </string>
|
||||||
<string name="imdn_info">Delivery status</string>
|
<string name="imdn_info">Delivery status</string>
|
||||||
|
|
||||||
|
|
1
settings.gradle
Normal file
1
settings.gradle
Normal file
|
@ -0,0 +1 @@
|
||||||
|
include 'liblinphone-sdk'
|
|
@ -1,26 +1,8 @@
|
||||||
/*
|
|
||||||
LinphoneManager.java
|
|
||||||
Copyright (C) 2010 Belledonne Communications, Grenoble, France
|
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
|
||||||
modify it under the terms of the GNU General Public License
|
|
||||||
as published by the Free Software Foundation; either version 2
|
|
||||||
of the License, or (at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
||||||
*/
|
|
||||||
package org.linphone;
|
package org.linphone;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
LinphoneManager.java
|
LinphoneManager.java
|
||||||
Copyright (C) 2017 Belledonne Communications, Grenoble, France
|
Copyright (C) 2018 Belledonne Communications, Grenoble, France
|
||||||
|
|
||||||
This program is free software; you can redistribute it and/or
|
This program is free software; you can redistribute it and/or
|
||||||
modify it under the terms of the GNU General Public License
|
modify it under the terms of the GNU General Public License
|
||||||
|
@ -584,7 +566,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
BluetoothManagerDestroy();
|
BluetoothManagerDestroy();
|
||||||
try {
|
try {
|
||||||
mTimer.cancel();
|
mTimer.cancel();
|
||||||
mLc = null;
|
destroyLinphoneCore();
|
||||||
}
|
}
|
||||||
catch (RuntimeException e) {
|
catch (RuntimeException e) {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
|
@ -623,6 +605,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public void restartCore() {
|
public void restartCore() {
|
||||||
destroyCore();
|
destroyCore();
|
||||||
startLibLinphone(mServiceContext);
|
startLibLinphone(mServiceContext);
|
||||||
|
@ -906,50 +889,15 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
private void destroyLinphoneCore() {
|
||||||
private void doDestroy() {
|
if (LinphonePreferences.instance() != null) {
|
||||||
ContactsManagerDestroy();
|
// We set network reachable at false before destroy LC to not send register with expires at 0
|
||||||
BluetoothManagerDestroy();
|
if (LinphonePreferences.instance().isPushNotificationEnabled()
|
||||||
try {
|
|| LinphonePreferences.instance().isBackgroundModeEnabled()) {
|
||||||
mTimer.cancel();
|
mLc.setNetworkReachable(false);
|
||||||
mLc = null;
|
|
||||||
}
|
}
|
||||||
catch (RuntimeException e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
try {
|
|
||||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
|
|
||||||
mServiceContext.unregisterReceiver(mNetworkReceiver);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mServiceContext.unregisterReceiver(mHookReceiver);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mServiceContext.unregisterReceiver(mKeepAliveReceiver);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
mServiceContext.unregisterReceiver(mCallReceiver);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
|
||||||
try {
|
|
||||||
dozeManager(false);
|
|
||||||
} catch (IllegalArgumentException iae) {
|
|
||||||
Log.e(iae);
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(e);
|
|
||||||
}
|
}
|
||||||
mLc = null;
|
mLc = null;
|
||||||
instance = null;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void dozeManager(boolean enable) {
|
public void dozeManager(boolean enable) {
|
||||||
|
@ -1035,7 +983,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
if (instance == null) return;
|
if (instance == null) return;
|
||||||
getInstance().changeStatusToOffline();
|
getInstance().changeStatusToOffline();
|
||||||
sExited = true;
|
sExited = true;
|
||||||
instance.doDestroy();
|
instance.destroyCore();
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getString(int key) {
|
private String getString(int key) {
|
||||||
|
@ -1620,6 +1568,12 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
Log.d("Notify received for event "+eventName);
|
Log.d("Notify received for event "+eventName);
|
||||||
if (content!=null) Log.d("with content "+content.getType()+"/"+content.getSubtype()+" data:"+content.getStringBuffer());
|
if (content!=null) Log.d("with content "+content.getType()+"/"+content.getSubtype()+" data:"+content.getStringBuffer());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSubscribeReceived(Core lc, Event lev, String subscribeEvent, Content body) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onPublishStateChanged(Core lc, Event ev, PublishState state) {
|
public void onPublishStateChanged(Core lc, Event ev, PublishState state) {
|
||||||
Log.d("Publish state changed to " + state + " for event name " + ev.getName());
|
Log.d("Publish state changed to " + state + " for event name " + ev.getName());
|
||||||
|
@ -1798,4 +1752,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
||||||
mUnreadChatsPerRoom.put(key, 1);
|
mUnreadChatsPerRoom.put(key, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void onQrcodeFound(Core lc, String something){
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -370,6 +370,13 @@ public class LinphonePreferences {
|
||||||
prxCfg.setQualityReportingCollector(tempQualityReportingCollector);
|
prxCfg.setQualityReportingCollector(tempQualityReportingCollector);
|
||||||
prxCfg.setQualityReportingInterval(tempQualityReportingInterval);
|
prxCfg.setQualityReportingInterval(tempQualityReportingInterval);
|
||||||
|
|
||||||
|
String regId = LinphonePreferences.instance().getPushNotificationRegistrationID();
|
||||||
|
String appId = LinphonePreferences.instance().getString(R.string.push_sender_id);
|
||||||
|
if (regId != null && LinphonePreferences.instance().isPushNotificationEnabled()) {
|
||||||
|
String contactInfos = "app-id=" + appId + ";pn-type=" + LinphonePreferences.instance().getString(R.string.push_type) + ";pn-tok=" + regId + ";pn-silent=1";
|
||||||
|
prxCfg.setContactUriParameters(contactInfos);
|
||||||
|
}
|
||||||
|
|
||||||
if(tempPrefix != null){
|
if(tempPrefix != null){
|
||||||
prxCfg.setDialPrefix(tempPrefix);
|
prxCfg.setDialPrefix(tempPrefix);
|
||||||
}
|
}
|
||||||
|
|
|
@ -264,6 +264,9 @@ public final class LinphoneService extends Service {
|
||||||
if (LinphoneManager.isInstanciated())
|
if (LinphoneManager.isInstanciated())
|
||||||
LinphoneManager.getInstance().subscribeFriendList(false);
|
LinphoneManager.getInstance().subscribeFriendList(false);
|
||||||
}
|
}
|
||||||
|
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
|
||||||
|
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enterBackground();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void onForegroundMode() {
|
protected void onForegroundMode() {
|
||||||
|
@ -272,6 +275,9 @@ public final class LinphoneService extends Service {
|
||||||
if (LinphoneManager.isInstanciated())
|
if (LinphoneManager.isInstanciated())
|
||||||
LinphoneManager.getInstance().subscribeFriendList(true);
|
LinphoneManager.getInstance().subscribeFriendList(true);
|
||||||
}
|
}
|
||||||
|
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
|
||||||
|
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enterForeground();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setupActivityMonitor(){
|
private void setupActivityMonitor(){
|
||||||
|
|
|
@ -415,7 +415,7 @@ public final class LinphoneUtils {
|
||||||
String extension = LinphoneUtils.getExtensionFromFileName(path);
|
String extension = LinphoneUtils.getExtensionFromFileName(path);
|
||||||
if(extension != null)
|
if(extension != null)
|
||||||
extension = extension.toLowerCase();
|
extension = extension.toLowerCase();
|
||||||
return (extension != null && extension.matches(".*(png|jpg|jpeg|bmp|gif).*"));
|
return (extension != null && extension.matches("(png|jpg|jpeg|bmp|gif)"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void recursiveFileRemoval(File root) {
|
public static void recursiveFileRemoval(File root) {
|
||||||
|
@ -609,11 +609,7 @@ public final class LinphoneUtils {
|
||||||
if ("com.android.externalstorage.documents".equals(uri.getAuthority())) {
|
if ("com.android.externalstorage.documents".equals(uri.getAuthority())) {
|
||||||
final String docId = DocumentsContract.getDocumentId(uri);
|
final String docId = DocumentsContract.getDocumentId(uri);
|
||||||
final String[] split = docId.split(":");
|
final String[] split = docId.split(":");
|
||||||
final String type = split[0];
|
if (split.length >= 1) return Environment.getExternalStorageDirectory() + "/" + split[1];
|
||||||
|
|
||||||
if ("primary".equalsIgnoreCase(type)) {
|
|
||||||
return Environment.getExternalStorageDirectory() + "/" + split[1];
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO handle non-primary volumes
|
// TODO handle non-primary volumes
|
||||||
}// Docs storage
|
}// Docs storage
|
||||||
|
|
|
@ -371,7 +371,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
}
|
}
|
||||||
|
|
||||||
private void changeCurrentFragment(FragmentsAvailable newFragmentType, Bundle extras, boolean withoutAnimation) {
|
private void changeCurrentFragment(FragmentsAvailable newFragmentType, Bundle extras, boolean withoutAnimation) {
|
||||||
if (newFragmentType == currentFragment && newFragmentType != FragmentsAvailable.CHAT) {
|
if (newFragmentType == currentFragment && newFragmentType != FragmentsAvailable.CHAT
|
||||||
|
&& newFragmentType != FragmentsAvailable.GROUP_CHAT) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -424,6 +425,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
fragment = new ChatListFragment();
|
fragment = new ChatListFragment();
|
||||||
break;
|
break;
|
||||||
case CREATE_CHAT:
|
case CREATE_CHAT:
|
||||||
|
checkAndRequestWriteContactsPermission();
|
||||||
fragment = new ChatCreationFragment();
|
fragment = new ChatCreationFragment();
|
||||||
break;
|
break;
|
||||||
case INFO_GROUP_CHAT:
|
case INFO_GROUP_CHAT:
|
||||||
|
@ -685,6 +687,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
private void displayChat(String sipUri, String message, String fileUri, String pictureUri, String thumbnailUri, String displayName, Address lAddress) {
|
private void displayChat(String sipUri, String message, String fileUri, String pictureUri, String thumbnailUri, String displayName, Address lAddress) {
|
||||||
Bundle extras = new Bundle();
|
Bundle extras = new Bundle();
|
||||||
extras.putString("SipUri", sipUri);
|
extras.putString("SipUri", sipUri);
|
||||||
|
|
||||||
if (message != null)
|
if (message != null)
|
||||||
extras.putString("messageDraft", message);
|
extras.putString("messageDraft", message);
|
||||||
if (fileUri != null)
|
if (fileUri != null)
|
||||||
|
@ -694,14 +697,15 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
extras.putString("PictureUri", pictureUri);
|
extras.putString("PictureUri", pictureUri);
|
||||||
extras.putString("ThumbnailUri", thumbnailUri);
|
extras.putString("ThumbnailUri", thumbnailUri);
|
||||||
}
|
}
|
||||||
if (sipUri == null && message == null && fileUri == null) {
|
|
||||||
|
if (sipUri == null) {
|
||||||
changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras);
|
changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras);
|
||||||
} else {
|
} else {
|
||||||
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void goToChatCreator(String address, ArrayList<ContactAddress> selectedContacts, String subject, boolean isGoBack) {
|
public void goToChatCreator(String address, ArrayList<ContactAddress> selectedContacts, String subject, boolean isGoBack, Bundle shareInfos) {
|
||||||
if (currentFragment == FragmentsAvailable.INFO_GROUP_CHAT && isGoBack) {
|
if (currentFragment == FragmentsAvailable.INFO_GROUP_CHAT && isGoBack) {
|
||||||
getFragmentManager().popBackStackImmediate();
|
getFragmentManager().popBackStackImmediate();
|
||||||
getFragmentManager().popBackStackImmediate();
|
getFragmentManager().popBackStackImmediate();
|
||||||
|
@ -710,23 +714,37 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
extras.putSerializable("selectedContacts", selectedContacts);
|
extras.putSerializable("selectedContacts", selectedContacts);
|
||||||
extras.putString("subject", subject);
|
extras.putString("subject", subject);
|
||||||
extras.putString("groupChatRoomAddress", address);
|
extras.putString("groupChatRoomAddress", address);
|
||||||
|
|
||||||
|
if (shareInfos != null) {
|
||||||
|
if (shareInfos.getString("fileSharedUri") != null)
|
||||||
|
extras.putString("fileSharedUri", shareInfos.getString("fileSharedUri"));
|
||||||
|
if (shareInfos.getString("messageDraft") != null)
|
||||||
|
extras.putString("messageDraft", shareInfos.getString("messageDraft"));
|
||||||
|
}
|
||||||
|
|
||||||
changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras);
|
changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void goToChat(String sipUri) {
|
public void goToChat(String sipUri, Bundle shareInfos) {
|
||||||
|
Bundle extras = new Bundle();
|
||||||
|
extras.putString("SipUri", sipUri);
|
||||||
|
|
||||||
|
if (shareInfos != null) {
|
||||||
|
if (shareInfos.getString("fileSharedUri") != null)
|
||||||
|
extras.putString("fileSharedUri", shareInfos.getString("fileSharedUri"));
|
||||||
|
if (shareInfos.getString("messageDraft") != null)
|
||||||
|
extras.putString("messageDraft", shareInfos.getString("messageDraft"));
|
||||||
|
}
|
||||||
|
|
||||||
if (isTablet()) {
|
if (isTablet()) {
|
||||||
Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2);
|
Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2);
|
||||||
if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.GROUP_CHAT && !emptyFragment) {
|
if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.GROUP_CHAT && !emptyFragment) {
|
||||||
GroupChatFragment chatFragment = (GroupChatFragment) fragment2;
|
GroupChatFragment chatFragment = (GroupChatFragment) fragment2;
|
||||||
chatFragment.changeDisplayedChat(sipUri);
|
chatFragment.changeDisplayedChat(sipUri);
|
||||||
} else {
|
} else {
|
||||||
Bundle extras = new Bundle();
|
|
||||||
extras.putString("SipUri", sipUri);
|
|
||||||
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Bundle extras = new Bundle();
|
|
||||||
extras.putString("SipUri", sipUri);
|
|
||||||
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -734,7 +752,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
displayMissedChats(LinphoneManager.getInstance().getUnreadMessageCount());
|
displayMissedChats(LinphoneManager.getInstance().getUnreadMessageCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
public void goToChatGroupInfos(String address, ArrayList<ContactAddress> contacts, String subject, boolean isEditionEnabled, boolean isGoBack) {
|
public void goToChatGroupInfos(String address, ArrayList<ContactAddress> contacts, String subject, boolean isEditionEnabled, boolean isGoBack, Bundle shareInfos) {
|
||||||
if (currentFragment == FragmentsAvailable.CREATE_CHAT && isGoBack) {
|
if (currentFragment == FragmentsAvailable.CREATE_CHAT && isGoBack) {
|
||||||
getFragmentManager().popBackStackImmediate();
|
getFragmentManager().popBackStackImmediate();
|
||||||
getFragmentManager().popBackStackImmediate();
|
getFragmentManager().popBackStackImmediate();
|
||||||
|
@ -744,6 +762,14 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
extras.putBoolean("isEditionEnabled", isEditionEnabled);
|
extras.putBoolean("isEditionEnabled", isEditionEnabled);
|
||||||
extras.putSerializable("ContactAddress", contacts);
|
extras.putSerializable("ContactAddress", contacts);
|
||||||
extras.putString("subject", subject);
|
extras.putString("subject", subject);
|
||||||
|
|
||||||
|
if (shareInfos != null) {
|
||||||
|
if (shareInfos.getString("fileSharedUri") != null)
|
||||||
|
extras.putString("fileSharedUri", shareInfos.getString("fileSharedUri"));
|
||||||
|
if (shareInfos.getString("messageDraft") != null)
|
||||||
|
extras.putString("messageDraft", shareInfos.getString("messageDraft"));
|
||||||
|
}
|
||||||
|
|
||||||
changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras);
|
changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1255,7 +1281,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
int readContactsI = -1;
|
int readContactsI = -1;
|
||||||
for (int i = 0; i < permissions.length; i++) {
|
for (int i = 0; i < permissions.length; i++) {
|
||||||
Log.i("[Permission] " + permissions[i] + " is " + (grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
Log.i("[Permission] " + permissions[i] + " is " + (grantResults[i] == PackageManager.PERMISSION_GRANTED ? "granted" : "denied"));
|
||||||
if (permissions[i].compareTo(Manifest.permission.READ_CONTACTS) == 0)
|
if (permissions[i].compareTo(Manifest.permission.READ_CONTACTS) == 0 ||
|
||||||
|
permissions[i].compareTo(Manifest.permission.WRITE_CONTACTS) == 0)
|
||||||
readContactsI = i;
|
readContactsI = i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1528,10 +1555,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
|
|
||||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||||
if (currentFragment == FragmentsAvailable.DIALER
|
switch(currentFragment) {
|
||||||
|| currentFragment == FragmentsAvailable.CONTACTS_LIST
|
case DIALER :
|
||||||
|| currentFragment == FragmentsAvailable.HISTORY_LIST
|
case CONTACTS_LIST:
|
||||||
|| currentFragment == FragmentsAvailable.CHAT_LIST) {
|
case HISTORY_LIST:
|
||||||
|
case CHAT_LIST:
|
||||||
boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled();
|
boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled();
|
||||||
if (!isBackgroundModeActive) {
|
if (!isBackgroundModeActive) {
|
||||||
stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
|
stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||||
|
@ -1539,6 +1567,12 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
||||||
} else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) {
|
} else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
case GROUP_CHAT:
|
||||||
|
LinphoneActivity.instance().goToChatList();
|
||||||
|
return true;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return super.onKeyDown(keyCode, event);
|
return super.onKeyDown(keyCode, event);
|
||||||
|
|
|
@ -677,7 +677,7 @@ private static AssistantActivity instance;
|
||||||
|
|
||||||
private void goToLinphoneActivity() {
|
private void goToLinphoneActivity() {
|
||||||
mPrefs.firstLaunchSuccessful();
|
mPrefs.firstLaunchSuccessful();
|
||||||
setResult(Activity.RESULT_OK, new Intent().putExtra("isNewProxyConfig", true));
|
startActivity(new Intent().setClass(this, LinphoneActivity.class).putExtra("isNewProxyConfig", true));
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -60,6 +60,7 @@ public class RemoteProvisioningFragment extends Fragment implements OnClickListe
|
||||||
String url = remoteProvisioningUrl.getText().toString();
|
String url = remoteProvisioningUrl.getText().toString();
|
||||||
AssistantActivity.instance().displayRemoteProvisioningInProgressDialog();
|
AssistantActivity.instance().displayRemoteProvisioningInProgressDialog();
|
||||||
LinphonePreferences.instance().setRemoteProvisioningUrl(url);
|
LinphonePreferences.instance().setRemoteProvisioningUrl(url);
|
||||||
|
LinphoneManager.getLc().getConfig().sync();
|
||||||
LinphoneManager.getInstance().restartCore();
|
LinphoneManager.getInstance().restartCore();
|
||||||
AssistantActivity.instance().setCoreListener();
|
AssistantActivity.instance().setCoreListener();
|
||||||
}
|
}
|
||||||
|
|
|
@ -71,6 +71,7 @@ import org.linphone.activities.LinphoneActivity;
|
||||||
import org.linphone.activities.LinphoneGenericActivity;
|
import org.linphone.activities.LinphoneGenericActivity;
|
||||||
import org.linphone.core.Address;
|
import org.linphone.core.Address;
|
||||||
import org.linphone.core.Call;
|
import org.linphone.core.Call;
|
||||||
|
import org.linphone.core.CallListenerStub;
|
||||||
import org.linphone.core.Call.State;
|
import org.linphone.core.Call.State;
|
||||||
import org.linphone.core.CallParams;
|
import org.linphone.core.CallParams;
|
||||||
import org.linphone.core.CallStats;
|
import org.linphone.core.CallStats;
|
||||||
|
@ -138,6 +139,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
private TimerTask mTask;
|
private TimerTask mTask;
|
||||||
private HashMap<String, String> mEncoderTexts;
|
private HashMap<String, String> mEncoderTexts;
|
||||||
private HashMap<String, String> mDecoderTexts;
|
private HashMap<String, String> mDecoderTexts;
|
||||||
|
private CallListenerStub mCallListener;
|
||||||
|
private Call mCallDisplayedInStats;
|
||||||
|
|
||||||
private boolean oldIsSpeakerEnabled = false;
|
private boolean oldIsSpeakerEnabled = false;
|
||||||
|
|
||||||
|
@ -229,7 +232,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
boolean remoteVideo = call.getRemoteParams().videoEnabled();
|
boolean remoteVideo = call.getRemoteParams().videoEnabled();
|
||||||
boolean localVideo = call.getCurrentParams().videoEnabled();
|
boolean localVideo = call.getCurrentParams().videoEnabled();
|
||||||
boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests();
|
boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests();
|
||||||
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !(LinphoneManager.getLc().getConference() != null)) {
|
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) {
|
||||||
showAcceptCallUpdateDialog();
|
showAcceptCallUpdateDialog();
|
||||||
createTimerForDialog(SECONDS_BEFORE_DENYING_CALL_UPDATE);
|
createTimerForDialog(SECONDS_BEFORE_DENYING_CALL_UPDATE);
|
||||||
}
|
}
|
||||||
|
@ -591,7 +594,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
private void enableAndRefreshInCallActions() {
|
private void enableAndRefreshInCallActions() {
|
||||||
int confsize = 0;
|
int confsize = 0;
|
||||||
|
|
||||||
if( LinphoneManager.getLc().getConference() != null) {
|
if(LinphoneManager.getLc().isInConference()) {
|
||||||
confsize = LinphoneManager.getLc().getConferenceSize() - (LinphoneManager.getLc().getConference() != null ? 1 : 0);
|
confsize = LinphoneManager.getLc().getConferenceSize() - (LinphoneManager.getLc().getConference() != null ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -951,7 +954,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
|
|
||||||
if (currentCall != null) {
|
if (currentCall != null) {
|
||||||
lc.terminateCall(currentCall);
|
lc.terminateCall(currentCall);
|
||||||
} else if (lc.getConference() != null) {
|
} else if (lc.isInConference()) {
|
||||||
lc.terminateConference();
|
lc.terminateConference();
|
||||||
} else {
|
} else {
|
||||||
lc.terminateAllCalls();
|
lc.terminateAllCalls();
|
||||||
|
@ -1143,6 +1146,9 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
private void showAcceptCallUpdateDialog() {
|
private void showAcceptCallUpdateDialog() {
|
||||||
dialog = new Dialog(this);
|
dialog = new Dialog(this);
|
||||||
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
|
||||||
|
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
||||||
|
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||||
Drawable d = new ColorDrawable(ContextCompat.getColor(this, 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);
|
||||||
|
@ -1409,7 +1415,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
}
|
}
|
||||||
|
|
||||||
public void refreshCallList(Resources resources) {
|
public void refreshCallList(Resources resources) {
|
||||||
isConferenceRunning = LinphoneManager.getLc().getConference() != null;
|
isConferenceRunning = LinphoneManager.getLc().isInConference();
|
||||||
List<Call> pausedCalls = LinphoneUtils.getCallsInState(LinphoneManager.getLc(), Arrays.asList(State.PausedByRemote));
|
List<Call> pausedCalls = LinphoneUtils.getCallsInState(LinphoneManager.getLc(), Arrays.asList(State.PausedByRemote));
|
||||||
|
|
||||||
//MultiCalls
|
//MultiCalls
|
||||||
|
@ -1486,7 +1492,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
private void exitConference(final Call call){
|
private void exitConference(final Call call){
|
||||||
Core lc = LinphoneManager.getLc();
|
Core lc = LinphoneManager.getLc();
|
||||||
|
|
||||||
if (call.getConference() != null) {
|
if (lc.isInConference()) {
|
||||||
lc.removeFromConference(call);
|
lc.removeFromConference(call);
|
||||||
if (lc.getConferenceSize() <= 1) {
|
if (lc.getConferenceSize() <= 1) {
|
||||||
lc.leaveConference();
|
lc.leaveConference();
|
||||||
|
@ -1503,7 +1509,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
Core lc = LinphoneManager.getLc();
|
Core lc = LinphoneManager.getLc();
|
||||||
conferenceStatus = (ImageView) findViewById(R.id.conference_pause);
|
conferenceStatus = (ImageView) findViewById(R.id.conference_pause);
|
||||||
if(conferenceStatus != null) {
|
if(conferenceStatus != null) {
|
||||||
if (lc.getConference() != null) {
|
if (lc.isInConference()) {
|
||||||
conferenceStatus.setImageResource(R.drawable.pause_big_over_selected);
|
conferenceStatus.setImageResource(R.drawable.pause_big_over_selected);
|
||||||
lc.leaveConference();
|
lc.leaveConference();
|
||||||
} else {
|
} else {
|
||||||
|
@ -1670,9 +1676,16 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initCallStatsRefresher(final Call call, final View view) {
|
public void initCallStatsRefresher(final Call call, final View view) {
|
||||||
|
if (mCallDisplayedInStats == call) return;
|
||||||
|
|
||||||
if (mTimer != null && mTask != null) {
|
if (mTimer != null && mTask != null) {
|
||||||
return;
|
mTimer.cancel();
|
||||||
|
mTimer = null;
|
||||||
|
mTask = null;
|
||||||
}
|
}
|
||||||
|
mCallDisplayedInStats = call;
|
||||||
|
|
||||||
|
if (call == null) return;
|
||||||
|
|
||||||
final TextView titleAudio = (TextView) view.findViewById(R.id.call_stats_audio);
|
final TextView titleAudio = (TextView) view.findViewById(R.id.call_stats_audio);
|
||||||
final TextView titleVideo = (TextView) view.findViewById(R.id.call_stats_video);
|
final TextView titleVideo = (TextView) view.findViewById(R.id.call_stats_video);
|
||||||
|
@ -1703,6 +1716,16 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
final View videoLayout = view.findViewById(R.id.callStatsVideo);
|
final View videoLayout = view.findViewById(R.id.callStatsVideo);
|
||||||
final View audioLayout = view.findViewById(R.id.callStatsAudio);
|
final View audioLayout = view.findViewById(R.id.callStatsAudio);
|
||||||
|
|
||||||
|
mCallListener = new CallListenerStub(){
|
||||||
|
public void onStateChanged(Call call, Call.State cstate, String message){
|
||||||
|
if (cstate == Call.State.End || cstate == Call.State.Error){
|
||||||
|
if (mTimer != null) {
|
||||||
|
Log.i("Call is terminated, stopping timer in charge of stats refreshing.");
|
||||||
|
mTimer.cancel();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
mTimer = new Timer();
|
mTimer = new Timer();
|
||||||
mTask = new TimerTask() {
|
mTask = new TimerTask() {
|
||||||
|
@ -1727,7 +1750,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
public void run() {
|
public void run() {
|
||||||
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() == null) return;
|
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() == null) return;
|
||||||
synchronized(LinphoneManager.getLc()) {
|
synchronized(LinphoneManager.getLc()) {
|
||||||
if (LinphoneActivity.isInstanciated()) {
|
if (LinphoneActivity.isInstanciated() && call.getState() != Call.State.Released) {
|
||||||
CallParams params = call.getCurrentParams();
|
CallParams params = call.getCurrentParams();
|
||||||
if (params != null) {
|
if (params != null) {
|
||||||
CallStats audioStats = call.getStats(StreamType.Audio);
|
CallStats audioStats = call.getStats(StreamType.Audio);
|
||||||
|
@ -1759,6 +1782,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
call.addListener(mCallListener);
|
||||||
mTimer.scheduleAtFixedRate(mTask, 0, 1000);
|
mTimer.scheduleAtFixedRate(mTask, 0, 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,11 +41,13 @@ import org.linphone.LinphoneManager;
|
||||||
import org.linphone.LinphonePreferences;
|
import org.linphone.LinphonePreferences;
|
||||||
import org.linphone.contacts.ContactAddress;
|
import org.linphone.contacts.ContactAddress;
|
||||||
import org.linphone.contacts.ContactsManager;
|
import org.linphone.contacts.ContactsManager;
|
||||||
|
import org.linphone.contacts.LinphoneNumberOrAddress;
|
||||||
import org.linphone.contacts.SearchContactsListAdapter;
|
import org.linphone.contacts.SearchContactsListAdapter;
|
||||||
import org.linphone.core.Address;
|
import org.linphone.core.Address;
|
||||||
import org.linphone.core.ChatRoom;
|
import org.linphone.core.ChatRoom;
|
||||||
import org.linphone.core.ChatRoomListenerStub;
|
import org.linphone.core.ChatRoomListenerStub;
|
||||||
import org.linphone.core.Core;
|
import org.linphone.core.Core;
|
||||||
|
import org.linphone.core.Factory;
|
||||||
import org.linphone.core.ProxyConfig;
|
import org.linphone.core.ProxyConfig;
|
||||||
import org.linphone.mediastream.Log;
|
import org.linphone.mediastream.Log;
|
||||||
import org.linphone.ui.ContactSelectView;
|
import org.linphone.ui.ContactSelectView;
|
||||||
|
@ -74,6 +76,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
private String mChatRoomSubject, mChatRoomAddress;
|
private String mChatRoomSubject, mChatRoomAddress;
|
||||||
private ChatRoom mChatRoom;
|
private ChatRoom mChatRoom;
|
||||||
private ChatRoomListenerStub mChatRoomCreationListener;
|
private ChatRoomListenerStub mChatRoomCreationListener;
|
||||||
|
private Bundle mShareInfos;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -175,7 +178,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
||||||
if (newState == ChatRoom.State.Created) {
|
if (newState == ChatRoom.State.Created) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().displayChatRoomError();
|
LinphoneActivity.instance().displayChatRoomError();
|
||||||
|
@ -184,11 +187,28 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
if (getArguments() != null) {
|
||||||
|
String fileSharedUri = getArguments().getString("fileSharedUri");
|
||||||
|
String messageDraft = getArguments().getString("messageDraft");
|
||||||
|
|
||||||
|
if (fileSharedUri != null || messageDraft != null)
|
||||||
|
mShareInfos = new Bundle();
|
||||||
|
|
||||||
|
if (fileSharedUri != null) {
|
||||||
|
LinphoneActivity.instance().checkAndRequestPermissionsToSendImage();
|
||||||
|
mShareInfos.putString("fileSharedUri", fileSharedUri);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (messageDraft != null)
|
||||||
|
mShareInfos.putString("messageDraft", messageDraft);
|
||||||
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onResume() {
|
public void onResume() {
|
||||||
|
ContactsManager.addContactsListener(this);
|
||||||
super.onResume();
|
super.onResume();
|
||||||
|
|
||||||
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE);
|
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE);
|
||||||
|
@ -202,6 +222,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
if (mChatRoom != null) {
|
if (mChatRoom != null) {
|
||||||
mChatRoom.removeListener(mChatRoomCreationListener);
|
mChatRoom.removeListener(mChatRoomCreationListener);
|
||||||
}
|
}
|
||||||
|
ContactsManager.removeContactsListener(this);
|
||||||
super.onPause();
|
super.onPause();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -249,16 +270,30 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
|
|
||||||
private int getIndexOfCa(ContactAddress ca, List<ContactAddress> caList) {
|
private int getIndexOfCa(ContactAddress ca, List<ContactAddress> caList) {
|
||||||
for (int i = 0 ; i < caList.size() ; i++) {
|
for (int i = 0 ; i < caList.size() ; i++) {
|
||||||
|
if (ca.getAddress() != null && ca.getAddress().getUsername() != null) {
|
||||||
if (caList.get(i).getAddressAsDisplayableString().compareTo(ca.getAddressAsDisplayableString()) == 0)
|
if (caList.get(i).getAddressAsDisplayableString().compareTo(ca.getAddressAsDisplayableString()) == 0)
|
||||||
return i;
|
return i;
|
||||||
|
} else if (ca.getPhoneNumber() != null && caList.get(i).getPhoneNumber() !=null) {
|
||||||
|
if (ca.getPhoneNumber().compareTo(caList.get(i).getPhoneNumber()) == 0)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void resetAndResearch() {
|
||||||
|
ContactsManager.getInstance().getMagicSearch().resetSearchCache();
|
||||||
|
mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList);
|
||||||
|
}
|
||||||
|
|
||||||
private void addSelectedContactAddress(ContactAddress ca) {
|
private void addSelectedContactAddress(ContactAddress ca) {
|
||||||
View viewContact = LayoutInflater.from(LinphoneActivity.instance()).inflate(R.layout.contact_selected, null);
|
View viewContact = LayoutInflater.from(LinphoneActivity.instance()).inflate(R.layout.contact_selected, null);
|
||||||
if (ca.getContact() != null) {
|
if (ca.getContact() != null) {
|
||||||
((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getContact().getFullName());
|
String name = (ca.getContact().getFullName() != null && !ca.getContact().getFullName().isEmpty()) ?
|
||||||
|
ca.getContact().getFullName() : (ca.getDisplayName() != null) ?
|
||||||
|
ca.getDisplayName() : (ca.getUsername() != null) ?
|
||||||
|
ca.getUsername() : "";
|
||||||
|
((TextView) viewContact.findViewById(R.id.sipUri)).setText(name);
|
||||||
} else {
|
} else {
|
||||||
((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddressAsDisplayableString());
|
((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddressAsDisplayableString());
|
||||||
}
|
}
|
||||||
|
@ -323,6 +358,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
mLinphoneContactsButton.setEnabled(true);
|
mLinphoneContactsButton.setEnabled(true);
|
||||||
mLinphoneContactsSelected.setVisibility(View.INVISIBLE);
|
mLinphoneContactsSelected.setVisibility(View.INVISIBLE);
|
||||||
updateList();
|
updateList();
|
||||||
|
resetAndResearch();
|
||||||
} else if (id == R.id.linphone_contacts) {
|
} else if (id == R.id.linphone_contacts) {
|
||||||
mSearchAdapter.setOnlySipContact(true);
|
mSearchAdapter.setOnlySipContact(true);
|
||||||
mLinphoneContactsSelected.setVisibility(View.VISIBLE);
|
mLinphoneContactsSelected.setVisibility(View.VISIBLE);
|
||||||
|
@ -330,6 +366,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
mAllContactsButton.setEnabled(mOnlyDisplayLinphoneContacts = true);
|
mAllContactsButton.setEnabled(mOnlyDisplayLinphoneContacts = true);
|
||||||
mAllContactsSelected.setVisibility(View.INVISIBLE);
|
mAllContactsSelected.setVisibility(View.INVISIBLE);
|
||||||
updateList();
|
updateList();
|
||||||
|
resetAndResearch();
|
||||||
} else if (id == R.id.back) {
|
} else if (id == R.id.back) {
|
||||||
if (LinphoneActivity.instance().isTablet()) {
|
if (LinphoneActivity.instance().isTablet()) {
|
||||||
LinphoneActivity.instance().goToChatList();
|
LinphoneActivity.instance().goToChatList();
|
||||||
|
@ -353,17 +390,17 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
mChatRoom.addParticipant(participant);
|
mChatRoom.addParticipant(participant);
|
||||||
} else {
|
} else {
|
||||||
chatRoom = lc.getChatRoom(participant);
|
chatRoom = lc.getChatRoom(participant);
|
||||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
mContactsSelectedLayout.removeAllViews();
|
mContactsSelectedLayout.removeAllViews();
|
||||||
LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false);
|
LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false, mShareInfos);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true);
|
LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true, mShareInfos);
|
||||||
}
|
}
|
||||||
} else if (id == R.id.clearSearchField) {
|
} else if (id == R.id.clearSearchField) {
|
||||||
mSearchField.setText("");
|
mSearchField.setText("");
|
||||||
|
@ -381,7 +418,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||||
if (lpc == null || lpc.getConferenceFactoryUri() == null) {
|
if (lpc == null || lpc.getConferenceFactoryUri() == null) {
|
||||||
ChatRoom chatRoom = lc.getChatRoom(ca.getAddress());
|
ChatRoom chatRoom = lc.getChatRoom(ca.getAddress());
|
||||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||||
} else {
|
} else {
|
||||||
removeContactFromSelection(ca);
|
removeContactFromSelection(ca);
|
||||||
}
|
}
|
||||||
|
@ -389,6 +426,6 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onContactsUpdated() {
|
public void onContactsUpdated() {
|
||||||
mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList);
|
updateList();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,7 +156,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene
|
||||||
mNewDiscussionButton.setOnClickListener(new View.OnClickListener() {
|
mNewDiscussionButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
LinphoneActivity.instance().goToChatCreator(null, null, null, false);
|
LinphoneActivity.instance().goToChatCreator(null, null, null, false, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -211,7 +211,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene
|
||||||
toggleSelection(position);
|
toggleSelection(position);
|
||||||
}else{
|
}else{
|
||||||
ChatRoom room = (ChatRoom) mChatRoomsAdapter.getItem(position);
|
ChatRoom room = (ChatRoom) mChatRoomsAdapter.getItem(position);
|
||||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asString());
|
LinphoneActivity.instance().goToChat(room.getPeerAddress().asString(),null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -366,7 +366,7 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene
|
||||||
ChatRoomsAdapter adapter = (ChatRoomsAdapter)mChatRoomsList.getAdapter();
|
ChatRoomsAdapter adapter = (ChatRoomsAdapter)mChatRoomsList.getAdapter();
|
||||||
if (adapter != null && adapter.getItemCount() > 0) {
|
if (adapter != null && adapter.getItemCount() > 0) {
|
||||||
ChatRoom room = (ChatRoom) adapter.getItem(0);
|
ChatRoom room = (ChatRoom) adapter.getItem(0);
|
||||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().displayEmptyFragment();
|
LinphoneActivity.instance().displayEmptyFragment();
|
||||||
}
|
}
|
||||||
|
@ -403,11 +403,9 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene
|
||||||
lc.removeListener(mListener);
|
lc.removeListener(mListener);
|
||||||
}
|
}
|
||||||
ContactsManager.removeContactsListener(this);
|
ContactsManager.removeContactsListener(this);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
mChatRoomsAdapter.clear();
|
mChatRoomsAdapter.clear();
|
||||||
super.onPause();
|
super.onPause();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -320,13 +320,6 @@ public class ChatRoomsAdapter extends SelectableAdapter<ChatRoomsAdapter.ChatRoo
|
||||||
* Adapter's methods
|
* Adapter's methods
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// oldVersion, kept in case of calls from other classes
|
|
||||||
// @Override
|
|
||||||
// public int getCount() {
|
|
||||||
// return mRooms.size();
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getItemCount() {
|
public int getItemCount() {
|
||||||
|
@ -340,5 +333,6 @@ public class ChatRoomsAdapter extends SelectableAdapter<ChatRoomsAdapter.ChatRoo
|
||||||
@Override
|
@Override
|
||||||
public long getItemId(int position) {
|
public long getItemId(int position) {
|
||||||
return position;
|
return position;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,7 +69,6 @@ import org.linphone.core.ChatRoomCapabilities;
|
||||||
import org.linphone.core.ChatRoomListener;
|
import org.linphone.core.ChatRoomListener;
|
||||||
import org.linphone.core.Content;
|
import org.linphone.core.Content;
|
||||||
import org.linphone.core.Core;
|
import org.linphone.core.Core;
|
||||||
import org.linphone.core.Event;
|
|
||||||
import org.linphone.core.EventLog;
|
import org.linphone.core.EventLog;
|
||||||
import org.linphone.core.Factory;
|
import org.linphone.core.Factory;
|
||||||
import org.linphone.core.LimeState;
|
import org.linphone.core.LimeState;
|
||||||
|
@ -160,10 +159,10 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
String displayName = LinphoneUtils.getAddressDisplayName(a);
|
String displayName = LinphoneUtils.getAddressDisplayName(a);
|
||||||
c.setFullName(displayName);
|
c.setFullName(displayName);
|
||||||
}
|
}
|
||||||
ContactAddress ca = new ContactAddress(c, a.asString(), c.isFriend(), p.isAdmin());
|
ContactAddress ca = new ContactAddress(c, a.asString(), "", c.isFriend(), p.isAdmin());
|
||||||
participants.add(ca);
|
participants.add(ca);
|
||||||
}
|
}
|
||||||
LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(), mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false, false);
|
LinphoneActivity.instance().goToChatGroupInfos(mRemoteSipAddress.asString(), participants, mChatRoom.getSubject(), mChatRoom.getMe() != null ? mChatRoom.getMe().isAdmin() : false, false, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -216,6 +215,25 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
mChatEventsList = view.findViewById(R.id.chat_message_list);
|
mChatEventsList = view.findViewById(R.id.chat_message_list);
|
||||||
registerForContextMenu(mChatEventsList);
|
registerForContextMenu(mChatEventsList);
|
||||||
|
|
||||||
|
if (getArguments() != null) {
|
||||||
|
String fileSharedUri = getArguments().getString("fileSharedUri");
|
||||||
|
if (fileSharedUri != null) {
|
||||||
|
if (LinphoneUtils.isExtensionImage(fileSharedUri)) {
|
||||||
|
addImageToPendingList(fileSharedUri);
|
||||||
|
} else {
|
||||||
|
if (fileSharedUri.startsWith("content://") || fileSharedUri.startsWith("file://")) {
|
||||||
|
fileSharedUri = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileSharedUri));
|
||||||
|
} else if (fileSharedUri.contains("com.android.contacts/contacts/")) {
|
||||||
|
fileSharedUri = LinphoneUtils.getCVSPathFromLookupUri(fileSharedUri).toString();
|
||||||
|
}
|
||||||
|
addFileToPendingList(fileSharedUri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getArguments().getString("messageDraft") != null)
|
||||||
|
mMessageTextToSend.setText(getArguments().getString("messageDraft"));
|
||||||
|
}
|
||||||
|
|
||||||
return view;
|
return view;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -290,7 +308,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
if (LinphoneUtils.isExtensionImage(fileToUploadPath)) {
|
if (LinphoneUtils.isExtensionImage(fileToUploadPath)) {
|
||||||
addImageToPendingList(fileToUploadPath);
|
addImageToPendingList(fileToUploadPath);
|
||||||
} else {
|
} else {
|
||||||
if (fileToUploadPath.startsWith("content://")) {
|
if (fileToUploadPath.startsWith("content://") || fileToUploadPath.startsWith("file://")) {
|
||||||
fileToUploadPath = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileToUploadPath));
|
fileToUploadPath = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileToUploadPath));
|
||||||
} else if (fileToUploadPath.contains("com.android.contacts/contacts/")) {
|
} else if (fileToUploadPath.contains("com.android.contacts/contacts/")) {
|
||||||
fileToUploadPath = LinphoneUtils.getCVSPathFromLookupUri(fileToUploadPath).toString();
|
fileToUploadPath = LinphoneUtils.getCVSPathFromLookupUri(fileToUploadPath).toString();
|
||||||
|
@ -369,28 +387,29 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
ChatMessage message = event.getChatMessage();
|
ChatMessage message = event.getChatMessage();
|
||||||
String messageId = message.getMessageId();
|
String messageId = message.getMessageId();
|
||||||
|
|
||||||
switch(item.getItemId()) {
|
if (item.getItemId() == R.id.resend) {
|
||||||
case R.id.resend:
|
|
||||||
mEventsAdapter.removeItem(info.position);
|
mEventsAdapter.removeItem(info.position);
|
||||||
message.resend();
|
message.resend();
|
||||||
return true;
|
return true;
|
||||||
case R.id.imdn_infos:
|
}
|
||||||
|
if (item.getItemId() == R.id.imdn_infos) {
|
||||||
LinphoneActivity.instance().goToChatMessageImdnInfos(getRemoteSipUri(), messageId);
|
LinphoneActivity.instance().goToChatMessageImdnInfos(getRemoteSipUri(), messageId);
|
||||||
return true;
|
return true;
|
||||||
case R.id.copy_text:
|
}
|
||||||
|
if (item.getItemId() == R.id.copy_text) {
|
||||||
if (message.hasTextContent()) {
|
if (message.hasTextContent()) {
|
||||||
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
|
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||||
ClipData clip = ClipData.newPlainText("Message", message.getTextContent());
|
ClipData clip = ClipData.newPlainText("Message", message.getTextContent());
|
||||||
clipboard.setPrimaryClip(clip);
|
clipboard.setPrimaryClip(clip);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
case R.id.delete_message:
|
}
|
||||||
|
if (item.getItemId() == R.id.delete_message) {
|
||||||
mChatRoom.deleteMessage(message);
|
mChatRoom.deleteMessage(message);
|
||||||
mEventsAdapter.removeItem(info.position);
|
mEventsAdapter.removeItem(info.position);
|
||||||
return true;
|
return true;
|
||||||
default:
|
|
||||||
return super.onContextItemSelected(item);
|
|
||||||
}
|
}
|
||||||
|
return super.onContextItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -473,7 +492,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
//TODO error
|
//TODO error
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
Address proxyConfigContact = core.getDefaultProxyConfig().getContact();
|
Address proxyConfigContact = (core.getDefaultProxyConfig() != null) ? core.getDefaultProxyConfig().getContact() : null;
|
||||||
if (proxyConfigContact != null) {
|
if (proxyConfigContact != null) {
|
||||||
mChatRoom = core.findOneToOneChatRoom(proxyConfigContact, mRemoteSipAddress);
|
mChatRoom = core.findOneToOneChatRoom(proxyConfigContact, mRemoteSipAddress);
|
||||||
}
|
}
|
||||||
|
@ -752,19 +771,6 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAllInformationReceived(ChatRoom cr) {
|
|
||||||
// Currently flexisip doesn't send the participants list in the INVITE
|
|
||||||
// So we have to refresh the display when information is available
|
|
||||||
// In the meantime header will be chatroom-xxxxxxx
|
|
||||||
if (mChatRoom == null) mChatRoom = cr;
|
|
||||||
if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && mChatRoom.getParticipants().length > 0) {
|
|
||||||
mRemoteParticipantAddress = mChatRoom.getParticipants()[0].getAddress();
|
|
||||||
}
|
|
||||||
getContactsForParticipants();
|
|
||||||
displayChatRoomHeader();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onChatMessageReceived(ChatRoom cr, EventLog event) {
|
public void onChatMessageReceived(ChatRoom cr, EventLog event) {
|
||||||
cr.markAsRead();
|
cr.markAsRead();
|
||||||
|
@ -843,6 +849,26 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConferenceJoined(ChatRoom cr, EventLog event) {
|
||||||
|
// Currently flexisip doesn't send the participants list in the INVITE
|
||||||
|
// So we have to refresh the display when information is available
|
||||||
|
// In the meantime header will be chatroom-xxxxxxx
|
||||||
|
if (mChatRoom == null) mChatRoom = cr;
|
||||||
|
if (mChatRoom.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) && mChatRoom.getParticipants().length > 0) {
|
||||||
|
mRemoteParticipantAddress = mChatRoom.getParticipants()[0].getAddress();
|
||||||
|
}
|
||||||
|
getContactsForParticipants();
|
||||||
|
displayChatRoomHeader();
|
||||||
|
|
||||||
|
mEventsAdapter.addToHistory(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConferenceLeft(ChatRoom cr, EventLog event) {
|
||||||
|
mEventsAdapter.addToHistory(event);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onParticipantAdminStatusChanged(ChatRoom cr, EventLog event) {
|
public void onParticipantAdminStatusChanged(ChatRoom cr, EventLog event) {
|
||||||
mEventsAdapter.addToHistory(event);
|
mEventsAdapter.addToHistory(event);
|
||||||
|
|
|
@ -85,7 +85,8 @@ public class GroupInfoAdapter extends BaseAdapter {
|
||||||
final LinearLayout isAdmin = view.findViewById(R.id.isAdminLayout);
|
final LinearLayout isAdmin = view.findViewById(R.id.isAdminLayout);
|
||||||
final LinearLayout isNotAdmin = view.findViewById(R.id.isNotAdminLayout);
|
final LinearLayout isNotAdmin = view.findViewById(R.id.isNotAdminLayout);
|
||||||
|
|
||||||
name.setText(c.getFullName());
|
name.setText((c.getFullName() != null) ? c.getFullName() :
|
||||||
|
(ca.getDisplayName() != null) ? ca.getDisplayName() : ca.getUsername());
|
||||||
if (c.hasPhoto()) {
|
if (c.hasPhoto()) {
|
||||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri());
|
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri());
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
private ChatRoom mChatRoom, mTempChatRoom;
|
private ChatRoom mChatRoom, mTempChatRoom;
|
||||||
private Dialog mAdminStateChangedDialog;
|
private Dialog mAdminStateChangedDialog;
|
||||||
private ChatRoomListenerStub mChatRoomCreationListener;
|
private ChatRoomListenerStub mChatRoomCreationListener;
|
||||||
|
private Bundle mShareInfos;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
|
@ -118,18 +119,30 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
mParticipantsList.setAdapter(mAdapter);
|
mParticipantsList.setAdapter(mAdapter);
|
||||||
mAdapter.setChatRoom(mChatRoom);
|
mAdapter.setChatRoom(mChatRoom);
|
||||||
|
|
||||||
|
String fileSharedUri = getArguments().getString("fileSharedUri");
|
||||||
|
String messageDraft = getArguments().getString("messageDraft");
|
||||||
|
|
||||||
|
if (fileSharedUri != null || messageDraft != null)
|
||||||
|
mShareInfos = new Bundle();
|
||||||
|
|
||||||
|
if (fileSharedUri != null)
|
||||||
|
mShareInfos.putString("fileSharedUri", fileSharedUri);
|
||||||
|
|
||||||
|
if (messageDraft != null)
|
||||||
|
mShareInfos.putString("messageDraft", messageDraft);
|
||||||
|
|
||||||
mBackButton = view.findViewById(R.id.back);
|
mBackButton = view.findViewById(R.id.back);
|
||||||
mBackButton.setOnClickListener(new View.OnClickListener() {
|
mBackButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if (mIsAlreadyCreatedGroup) {
|
if (mIsAlreadyCreatedGroup) {
|
||||||
if (LinphoneActivity.instance().isTablet()) {
|
if (LinphoneActivity.instance().isTablet()) {
|
||||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly());
|
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly(), mShareInfos);
|
||||||
} else {
|
} else {
|
||||||
getFragmentManager().popBackStack();
|
getFragmentManager().popBackStack();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true);
|
LinphoneActivity.instance().goToChatCreator(null, mParticipants, null, true, mShareInfos);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -150,7 +163,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if (mChatRoom != null) {
|
if (mChatRoom != null) {
|
||||||
mChatRoom.leave();
|
mChatRoom.leave();
|
||||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString());
|
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString(), null);
|
||||||
} else {
|
} else {
|
||||||
Log.e("Can't leave, chatRoom for address " + mGroupChatRoomAddress.asString() + " is null...");
|
Log.e("Can't leave, chatRoom for address " + mGroupChatRoomAddress.asString() + " is null...");
|
||||||
}
|
}
|
||||||
|
@ -174,7 +187,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if (mIsEditionEnabled) {
|
if (mIsEditionEnabled) {
|
||||||
LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup);
|
LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -182,7 +195,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
mAddParticipantsButton.setOnClickListener(new View.OnClickListener() {
|
mAddParticipantsButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup);
|
LinphoneActivity.instance().goToChatCreator(mGroupChatRoomAddress != null ? mGroupChatRoomAddress.asString() : null, mParticipants, mSubject, !mIsAlreadyCreatedGroup, null);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -213,7 +226,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
// This will remove both the creation fragment and the group info fragment from the back stack
|
// This will remove both the creation fragment and the group info fragment from the back stack
|
||||||
getFragmentManager().popBackStack();
|
getFragmentManager().popBackStack();
|
||||||
getFragmentManager().popBackStack();
|
getFragmentManager().popBackStack();
|
||||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().displayChatRoomError();
|
LinphoneActivity.instance().displayChatRoomError();
|
||||||
|
@ -289,7 +302,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
toAdd.toArray(participantsToAdd);
|
toAdd.toArray(participantsToAdd);
|
||||||
mChatRoom.addParticipants(participantsToAdd);
|
mChatRoom.addParticipants(participantsToAdd);
|
||||||
|
|
||||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString());
|
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString(), null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -348,7 +361,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
String displayName = LinphoneUtils.getAddressDisplayName(a);
|
String displayName = LinphoneUtils.getAddressDisplayName(a);
|
||||||
c.setFullName(displayName);
|
c.setFullName(displayName);
|
||||||
}
|
}
|
||||||
ContactAddress ca = new ContactAddress(c, a.asString(), c.isFriend(), p.isAdmin());
|
ContactAddress ca = new ContactAddress(c, a.asString(), "", c.isFriend(), p.isAdmin());
|
||||||
mParticipants.add(ca);
|
mParticipants.add(ca);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -382,6 +395,14 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
mAdminStateChangedDialog.show();
|
mAdminStateChangedDialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConferenceJoined(ChatRoom cr, EventLog event_log) {
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConferenceLeft(ChatRoom cr, EventLog event_log) {
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onParticipantAdded(ChatRoom cr, EventLog event_log) {
|
public void onParticipantAdded(ChatRoom cr, EventLog event_log) {
|
||||||
refreshParticipantsList();
|
refreshParticipantsList();
|
||||||
|
@ -458,11 +479,6 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onAllInformationReceived(ChatRoom cr) {
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,7 @@ public class ImdnFragment extends Fragment {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View view) {
|
public void onClick(View view) {
|
||||||
if (LinphoneActivity.instance().isTablet()) {
|
if (LinphoneActivity.instance().isTablet()) {
|
||||||
LinphoneActivity.instance().goToChat(mRoomUri);
|
LinphoneActivity.instance().goToChat(mRoomUri, null);
|
||||||
} else {
|
} else {
|
||||||
LinphoneActivity.instance().onBackPressed();
|
LinphoneActivity.instance().onBackPressed();
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ public class ContactAddress implements Serializable {
|
||||||
private LinphoneContact contact;
|
private LinphoneContact contact;
|
||||||
private SearchResult result;
|
private SearchResult result;
|
||||||
private String address;
|
private String address;
|
||||||
|
private String phoneNumber;
|
||||||
private boolean isLinphoneContact;
|
private boolean isLinphoneContact;
|
||||||
private boolean isSelect = false;
|
private boolean isSelect = false;
|
||||||
private boolean isAdmin = false;
|
private boolean isAdmin = false;
|
||||||
|
@ -69,11 +70,13 @@ public class ContactAddress implements Serializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getAddressAsDisplayableString() {
|
public String getAddressAsDisplayableString() {
|
||||||
|
Address addr = getAddress();
|
||||||
|
if (addr != null && addr.getUsername() != null) return addr.asStringUriOnly();
|
||||||
return address;
|
return address;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Address getAddress() {
|
public Address getAddress() {
|
||||||
String presence = contact.getPresenceModelForUriOrTel(address);
|
String presence = contact.getPresenceModelForUriOrTel((phoneNumber != null && !phoneNumber.isEmpty()) ? phoneNumber: address);
|
||||||
Address addr = Factory.instance().createAddress(presence != null ? presence : address);
|
Address addr = Factory.instance().createAddress(presence != null ? presence : address);
|
||||||
// Remove the user=phone URI param if existing, it will break everything otherwise
|
// Remove the user=phone URI param if existing, it will break everything otherwise
|
||||||
if (addr.hasUriParam("user")) {
|
if (addr.hasUriParam("user")) {
|
||||||
|
@ -82,6 +85,30 @@ public class ContactAddress implements Serializable {
|
||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
if (address != null) {
|
||||||
|
Address addr = Factory.instance().createAddress(address);
|
||||||
|
if (addr != null) {
|
||||||
|
return addr.getDisplayName();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUsername() {
|
||||||
|
if (address != null) {
|
||||||
|
Address addr = Factory.instance().createAddress(address);
|
||||||
|
if (addr != null) {
|
||||||
|
return addr.getUsername();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPhoneNumber() {
|
||||||
|
return phoneNumber;
|
||||||
|
}
|
||||||
|
|
||||||
public void setSelect(boolean select) {
|
public void setSelect(boolean select) {
|
||||||
isSelect = select;
|
isSelect = select;
|
||||||
}
|
}
|
||||||
|
@ -90,16 +117,19 @@ public class ContactAddress implements Serializable {
|
||||||
return isLinphoneContact;
|
return isLinphoneContact;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContactAddress(LinphoneContact c, String a, boolean isLC){
|
private void init(LinphoneContact c, String a, String pn, boolean isLC) {
|
||||||
this.contact = c;
|
this.contact = c;
|
||||||
this.address = a;
|
this.address = a;
|
||||||
|
this.phoneNumber = pn;
|
||||||
this.isLinphoneContact = isLC;
|
this.isLinphoneContact = isLC;
|
||||||
}
|
}
|
||||||
|
|
||||||
public ContactAddress(LinphoneContact c, String a, boolean isLC, boolean isAdmin){
|
public ContactAddress(LinphoneContact c, String a, String pn, boolean isLC) {
|
||||||
this.contact = c;
|
init(c, a, pn, isLC);
|
||||||
this.address = a;
|
}
|
||||||
this.isLinphoneContact = isLC;
|
|
||||||
|
public ContactAddress(LinphoneContact c, String a, String pn, boolean isLC, boolean isAdmin) {
|
||||||
|
init(c, a, pn, isLC);
|
||||||
this.isAdmin = isAdmin;
|
this.isAdmin = isAdmin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
Address participant = Factory.instance().createAddress(tag);
|
Address participant = Factory.instance().createAddress(tag);
|
||||||
ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
|
ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
|
||||||
if (room != null) {
|
if (room != null) {
|
||||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||||
} else {
|
} else {
|
||||||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||||
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
|
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
|
||||||
|
@ -87,7 +87,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
mChatRoom.addParticipant(participant);
|
mChatRoom.addParticipant(participant);
|
||||||
} else {
|
} else {
|
||||||
room = lc.getChatRoom(participant);
|
room = lc.getChatRoom(participant);
|
||||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -134,7 +134,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
||||||
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
||||||
if (newState == ChatRoom.State.Created) {
|
if (newState == ChatRoom.State.Created) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), null);
|
||||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().displayChatRoomError();
|
LinphoneActivity.instance().displayChatRoomError();
|
||||||
|
|
|
@ -264,11 +264,20 @@ public class ContactsManager extends ContentObserver {
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setContacts(List<LinphoneContact> c) {
|
public synchronized void setContacts(List<LinphoneContact> c) {
|
||||||
|
if (contacts.isEmpty() || contacts.size() > c.size()) {
|
||||||
contacts = c;
|
contacts = c;
|
||||||
|
} else {
|
||||||
|
for (LinphoneContact contact : c) {
|
||||||
|
if (!contacts.contains(contact)) {
|
||||||
|
contacts.add(contact);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Collections.sort(contacts);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void setSipContacts(List<LinphoneContact> c) {
|
public synchronized void setSipContacts(List<LinphoneContact> c) {
|
||||||
if (sipContacts.isEmpty()) {
|
if (sipContacts.isEmpty() || sipContacts.size() > c.size()) {
|
||||||
sipContacts = c;
|
sipContacts = c;
|
||||||
} else {
|
} else {
|
||||||
for (LinphoneContact contact : c) {
|
for (LinphoneContact contact : c) {
|
||||||
|
@ -277,6 +286,7 @@ public class ContactsManager extends ContentObserver {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Collections.sort(sipContacts);
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void refreshSipContact(Friend lf) {
|
public synchronized void refreshSipContact(Friend lf) {
|
||||||
|
@ -458,8 +468,6 @@ public class ContactsManager extends ContentObserver {
|
||||||
Log.w("[Permission] Read contacts permission wasn't granted, only fetch Friends");
|
Log.w("[Permission] Read contacts permission wasn't granted, only fetch Friends");
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(contacts);
|
|
||||||
Collections.sort(sipContacts);
|
|
||||||
setContacts(contacts);
|
setContacts(contacts);
|
||||||
setSipContacts(sipContacts);
|
setSipContacts(sipContacts);
|
||||||
|
|
||||||
|
|
|
@ -75,6 +75,13 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
return fullName.compareTo(contactFullName);
|
return fullName.compareTo(contactFullName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj.getClass() != LinphoneContact.class) return false;
|
||||||
|
LinphoneContact contact = (LinphoneContact) obj;
|
||||||
|
return (this.compareTo(contact) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
public void setFullName(String name) {
|
public void setFullName(String name) {
|
||||||
fullName = name;
|
fullName = name;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,13 +40,20 @@ public class LinphoneNumberOrAddress implements Serializable, Comparable<Linphon
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(LinphoneNumberOrAddress noa) {
|
public int compareTo(LinphoneNumberOrAddress noa) {
|
||||||
if (noa.isSIPAddress() == isSIPAddress()) {
|
if (noa.isSIPAddress() == isSIPAddress() && noa.getValue() != null) {
|
||||||
return noa.getValue().compareTo(getValue());
|
return noa.getValue().compareTo(getValue());
|
||||||
} else {
|
} else {
|
||||||
return isSIPAddress() ? -1 : 1;
|
return isSIPAddress() ? -1 : 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object obj) {
|
||||||
|
if (obj.getClass() != LinphoneNumberOrAddress.class) return false;
|
||||||
|
LinphoneNumberOrAddress noa = (LinphoneNumberOrAddress) obj;
|
||||||
|
return (this != null && this.compareTo(noa) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean isSIPAddress() {
|
public boolean isSIPAddress() {
|
||||||
return isSIPAddress;
|
return isSIPAddress;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,6 +33,8 @@ import org.linphone.LinphoneUtils;
|
||||||
import org.linphone.R;
|
import org.linphone.R;
|
||||||
import org.linphone.activities.LinphoneActivity;
|
import org.linphone.activities.LinphoneActivity;
|
||||||
import org.linphone.core.Address;
|
import org.linphone.core.Address;
|
||||||
|
import org.linphone.core.Factory;
|
||||||
|
import org.linphone.core.ProxyConfig;
|
||||||
import org.linphone.core.SearchResult;
|
import org.linphone.core.SearchResult;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
@ -62,7 +64,6 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
private boolean mOnlySipContact = false;
|
private boolean mOnlySipContact = false;
|
||||||
private View.OnClickListener listener;
|
private View.OnClickListener listener;
|
||||||
private int oldSize;
|
|
||||||
|
|
||||||
public List<ContactAddress> getContacts() {
|
public List<ContactAddress> getContacts() {
|
||||||
return contacts;
|
return contacts;
|
||||||
|
@ -81,14 +82,18 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
progressBar = pB;
|
progressBar = pB;
|
||||||
setContactsSelectedList(null);
|
setContactsSelectedList(null);
|
||||||
setContactsList(contactsList);
|
setContactsList(contactsList);
|
||||||
oldSize = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean contactIsSelected(ContactAddress ca) {
|
private boolean contactIsSelected(ContactAddress ca) {
|
||||||
for (ContactAddress c : contactsSelected) {
|
for (ContactAddress c : contactsSelected) {
|
||||||
Address addr = c.getAddress();
|
Address addr = c.getAddress();
|
||||||
if (addr == null) continue;
|
if (addr.getUsername() != null && ca.getAddress() != null) {
|
||||||
if (addr.asStringUriOnly().compareTo(ca.getAddress().asStringUriOnly()) == 0) return true;
|
if (addr.asStringUriOnly().compareTo(ca.getAddress().asStringUriOnly()) == 0) return true;
|
||||||
|
} else {
|
||||||
|
if (c.getPhoneNumber() != null && ca.getPhoneNumber() != null) {
|
||||||
|
if (c.getPhoneNumber().compareTo(ca.getPhoneNumber()) == 0) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -122,11 +127,18 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
for (LinphoneContact contact : contacts) {
|
for (LinphoneContact contact : contacts) {
|
||||||
for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) {
|
for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) {
|
||||||
if (!mOnlySipContact || (mOnlySipContact && (noa.isSIPAddress() || contact.getPresenceModelForUriOrTel(noa.getValue()) != null))) {
|
if (!mOnlySipContact || (mOnlySipContact && (noa.isSIPAddress() || contact.getPresenceModelForUriOrTel(noa.getValue()) != null))) {
|
||||||
|
ContactAddress ca = null;
|
||||||
|
if (noa.isSIPAddress()) {
|
||||||
Address address = LinphoneManager.getLc().interpretUrl(noa.getValue());
|
Address address = LinphoneManager.getLc().interpretUrl(noa.getValue());
|
||||||
if (address != null) {
|
if (address != null) {
|
||||||
ContactAddress ca = new ContactAddress(contact, address.asString(), contact.isFriend());
|
ca = new ContactAddress(contact, address.asString(), "", contact.isFriend());
|
||||||
list.add(ca);
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig();
|
||||||
|
String number = (prx != null) ? prx.normalizePhoneNumber(noa.getValue()) : noa.getValue();
|
||||||
|
ca = new ContactAddress(contact, "", number, contact.isFriend());
|
||||||
|
}
|
||||||
|
if (ca != null) list.add(ca);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -153,21 +165,14 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void searchContacts(String search, ListView resultContactsSearch) {
|
public void searchContacts(String search, ListView resultContactsSearch) {
|
||||||
if (search == null || search.length() == 0 || search.trim().length() == 0) {
|
|
||||||
contacts = getContactsList();
|
|
||||||
resultContactsSearch.setAdapter(this);
|
|
||||||
if (ContactsManager.getInstance() != null) {
|
|
||||||
ContactsManager.getInstance().getMagicSearch().resetSearchCache();
|
|
||||||
}
|
|
||||||
oldSize = 0;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
search = search.trim();
|
|
||||||
List<ContactAddress> result = new ArrayList<>();
|
List<ContactAddress> result = new ArrayList<>();
|
||||||
|
|
||||||
SearchResult[] results = ContactsManager.getInstance().getMagicSearch().getContactListFromFilter(search, "");
|
String domain = "";
|
||||||
|
ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig();
|
||||||
|
if (prx != null) domain = prx.getDomain();
|
||||||
|
SearchResult[] results = ContactsManager.getInstance().getMagicSearch().getContactListFromFilter(search, mOnlySipContact ? domain :"");
|
||||||
for (SearchResult sr : results) {
|
for (SearchResult sr : results) {
|
||||||
|
boolean found = false;
|
||||||
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(sr.getAddress());
|
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(sr.getAddress());
|
||||||
if (contact == null) {
|
if (contact == null) {
|
||||||
contact = new LinphoneContact();
|
contact = new LinphoneContact();
|
||||||
|
@ -176,25 +181,26 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
contact.refresh();
|
contact.refresh();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (sr.getAddress() != null) {
|
if (sr.getAddress() != null || sr.getPhoneNumber() != null) {
|
||||||
if (contact.getFullName() == null) {
|
|
||||||
contact.setFullName(search);
|
|
||||||
}
|
|
||||||
|
|
||||||
boolean found = false;
|
|
||||||
for (ContactAddress ca : result) {
|
for (ContactAddress ca : result) {
|
||||||
if (ca.getAddress().asStringUriOnly().equals(sr.getAddress().asStringUriOnly())) {
|
String normalizedPhoneNumber = (ca.getPhoneNumber() != null) ? prx.normalizePhoneNumber(ca.getPhoneNumber()) : null;
|
||||||
|
if ((sr.getAddress() != null && ca.getAddress() != null
|
||||||
|
&& ca.getAddress().asStringUriOnly().equals(sr.getAddress().asStringUriOnly()))
|
||||||
|
|| (sr.getPhoneNumber() != null && normalizedPhoneNumber != null
|
||||||
|
&& sr.getPhoneNumber().equals(normalizedPhoneNumber))) {
|
||||||
found = true;
|
found = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!found) {
|
|
||||||
result.add(new ContactAddress(contact, sr.getAddress().asStringUriOnly(), contact.isFriend()));
|
|
||||||
}
|
}
|
||||||
|
if (!found) {
|
||||||
|
result.add(new ContactAddress(contact,
|
||||||
|
(sr.getAddress() != null) ? sr.getAddress().asStringUriOnly() : "",
|
||||||
|
sr.getPhoneNumber(),
|
||||||
|
contact.isFriend()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
oldSize = search.length();
|
|
||||||
contacts = result;
|
contacts = result;
|
||||||
resultContactsSearch.setAdapter(this);
|
resultContactsSearch.setAdapter(this);
|
||||||
this.notifyDataSetChanged();
|
this.notifyDataSetChanged();
|
||||||
|
@ -215,7 +221,7 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
}
|
}
|
||||||
|
|
||||||
ContactAddress contact = getItem(position);
|
ContactAddress contact = getItem(position);
|
||||||
final String a = contact.getAddressAsDisplayableString();
|
final String a = (contact.getAddressAsDisplayableString().isEmpty()) ? contact.getPhoneNumber() : contact.getAddressAsDisplayableString();
|
||||||
LinphoneContact c = contact.getContact();
|
LinphoneContact c = contact.getContact();
|
||||||
|
|
||||||
holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||||
|
@ -223,11 +229,24 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
||||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.avatar, c.getThumbnailUri());
|
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.avatar, c.getThumbnailUri());
|
||||||
}
|
}
|
||||||
|
|
||||||
String address = null;
|
String address = contact.getAddressAsDisplayableString();
|
||||||
if (c != null && c.getFullName() != null) {
|
if (c != null && c.getFullName() != null) {
|
||||||
|
if (address == null)
|
||||||
address = c.getPresenceModelForUriOrTel(a);
|
address = c.getPresenceModelForUriOrTel(a);
|
||||||
holder.name.setVisibility(View.VISIBLE);
|
holder.name.setVisibility(View.VISIBLE);
|
||||||
holder.name.setText(c.getFullName());
|
holder.name.setText(c.getFullName());
|
||||||
|
} else if (contact.getAddress() != null) {
|
||||||
|
if (contact.getAddress().getUsername() != null) {
|
||||||
|
holder.name.setVisibility(View.VISIBLE);
|
||||||
|
holder.name.setText(contact.getAddress().getUsername());
|
||||||
|
} else if (contact.getAddress().getDisplayName() != null) {
|
||||||
|
holder.name.setVisibility(View.VISIBLE);
|
||||||
|
holder.name.setText(contact.getAddress().getDisplayName());
|
||||||
|
}
|
||||||
|
} else if (address != null) {
|
||||||
|
Address tmpAddr = Factory.instance().createAddress(address);
|
||||||
|
holder.name.setVisibility(View.VISIBLE);
|
||||||
|
holder.name.setText((tmpAddr.getDisplayName() != null) ? tmpAddr.getDisplayName() : tmpAddr.getUsername()) ;
|
||||||
} else {
|
} else {
|
||||||
holder.name.setVisibility(View.GONE);
|
holder.name.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,6 +39,7 @@ public class FirebaseMessaging extends FirebaseMessagingService {
|
||||||
android.util.Log.i("FirebaseMessaging","[Push Notification] Received");
|
android.util.Log.i("FirebaseMessaging","[Push Notification] Received");
|
||||||
|
|
||||||
if (!LinphoneService.isReady()) {
|
if (!LinphoneService.isReady()) {
|
||||||
|
android.util.Log.i("FirebaseMessaging","[Push Notification] Starting Service");
|
||||||
startService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class));
|
startService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||||
} else if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() == 0) {
|
} else if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() == 0) {
|
||||||
LinphoneUtils.dispatchOnUIThread(new Runnable(){
|
LinphoneUtils.dispatchOnUIThread(new Runnable(){
|
||||||
|
|
|
@ -40,6 +40,8 @@ import android.app.AlertDialog;
|
||||||
import android.app.ProgressDialog;
|
import android.app.ProgressDialog;
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.graphics.drawable.ColorDrawable;
|
||||||
|
import android.graphics.drawable.Drawable;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.CheckBoxPreference;
|
import android.preference.CheckBoxPreference;
|
||||||
import android.preference.EditTextPreference;
|
import android.preference.EditTextPreference;
|
||||||
|
@ -49,6 +51,7 @@ 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.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.WindowManager;
|
||||||
|
@ -350,7 +353,7 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
||||||
accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl());
|
accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl());
|
||||||
accountCreator.setListener(this);
|
accountCreator.setListener(this);
|
||||||
|
|
||||||
PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key));
|
final PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key));
|
||||||
EditTextPreference username = (EditTextPreference) account.getPreference(0);
|
EditTextPreference username = (EditTextPreference) account.getPreference(0);
|
||||||
username.setOnPreferenceChangeListener(usernameChangedListener);
|
username.setOnPreferenceChangeListener(usernameChangedListener);
|
||||||
if (!isNewAccount){
|
if (!isNewAccount){
|
||||||
|
@ -485,8 +488,10 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
||||||
mainAccount.setEnabled(!mainAccount.isChecked());
|
mainAccount.setEnabled(!mainAccount.isChecked());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//final AccountCreatorListener fragment = this;
|
||||||
|
|
||||||
final Preference changePassword = manage.getPreference(2);
|
final Preference changePassword = manage.getPreference(2);
|
||||||
if (mPrefs.getAccountDomain(n).compareTo(getString(R.string.default_domain)) == 0) {
|
/*if (mPrefs.getAccountDomain(n).compareTo(getString(R.string.default_domain)) == 0) {
|
||||||
changePassword.setEnabled(!isNewAccount);
|
changePassword.setEnabled(!isNewAccount);
|
||||||
changePassword.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
changePassword.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
public boolean onPreferenceClick(Preference preference) {
|
||||||
|
@ -501,15 +506,19 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
||||||
dialog.dismiss();
|
dialog.dismiss();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
/*alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
|
||||||
|
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
AccountCreator.PasswordStatus status = accountCreator.setPassword(pass1.getText().toString());
|
AccountCreator.PasswordStatus status = accountCreator.setPassword(pass1.getText().toString());
|
||||||
if (status.equals(AccountCreator.PasswordStatus.Ok)) {
|
if (status.equals(AccountCreator.PasswordStatus.Ok)) {
|
||||||
if (pass1.getText().toString().compareTo(pass2.getText().toString()) == 0) {
|
if (pass1.getText().toString().compareTo(pass2.getText().toString()) == 0) {
|
||||||
accountCreator.setUsername(mPrefs.getAccountUsername(n));
|
accountCreator.setUsername(mPrefs.getAccountUsername(n));
|
||||||
|
accountCreator.setDomain(mPrefs.getAccountDomain(n));
|
||||||
accountCreator.setHa1(mPrefs.getAccountHa1(n));
|
accountCreator.setHa1(mPrefs.getAccountHa1(n));
|
||||||
AccountCreator.Status req_status = accountCreator.updatePassword(pass1.getText().toString());
|
accountCreator.setListener(fragment);
|
||||||
|
accountCreator.setPassword(pass1.getText().toString());
|
||||||
|
AccountCreator.Status req_status = accountCreator.updateAccount();
|
||||||
if (!req_status.equals(AccountCreator.Status.RequestOk)) {
|
if (!req_status.equals(AccountCreator.Status.RequestOk)) {
|
||||||
LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(req_status)
|
LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(req_status)
|
||||||
, LinphoneActivity.instance());
|
, LinphoneActivity.instance());
|
||||||
|
@ -532,14 +541,14 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
||||||
}
|
}
|
||||||
});*/ // TODO FIXME
|
});*/ // TODO FIXME
|
||||||
|
|
||||||
alert.setView(layout);
|
/*alert.setView(layout);
|
||||||
alert.show();
|
alert.show();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else {
|
} else {*/
|
||||||
changePassword.setEnabled(false);
|
changePassword.setEnabled(false);
|
||||||
}
|
//}
|
||||||
|
|
||||||
final Preference delete = manage.getPreference(3);
|
final Preference delete = manage.getPreference(3);
|
||||||
delete.setEnabled(!isNewAccount);
|
delete.setEnabled(!isNewAccount);
|
||||||
|
|
|
@ -109,7 +109,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
||||||
if (newState == ChatRoom.State.Created) {
|
if (newState == ChatRoom.State.Created) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), null);
|
||||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||||
mWaitLayout.setVisibility(View.GONE);
|
mWaitLayout.setVisibility(View.GONE);
|
||||||
LinphoneActivity.instance().displayChatRoomError();
|
LinphoneActivity.instance().displayChatRoomError();
|
||||||
|
@ -199,7 +199,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
Address participant = Factory.instance().createAddress(sipUri);
|
Address participant = Factory.instance().createAddress(sipUri);
|
||||||
ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
|
ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
|
||||||
if (room != null) {
|
if (room != null) {
|
||||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||||
} else {
|
} else {
|
||||||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||||
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
|
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
|
||||||
|
@ -209,7 +209,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
||||||
mChatRoom.addParticipant(participant);
|
mChatRoom.addParticipant(participant);
|
||||||
} else {
|
} else {
|
||||||
room = lc.getChatRoom(participant);
|
room = lc.getChatRoom(participant);
|
||||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (id == R.id.add_contact) {
|
} else if (id == R.id.add_contact) {
|
||||||
|
|
|
@ -476,7 +476,7 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On
|
||||||
|
|
||||||
LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(address);
|
LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(address);
|
||||||
String displayName = null;
|
String displayName = null;
|
||||||
final String sipUri = address.asString();
|
final String sipUri = (address != null) ? address.asString() : "";
|
||||||
if (c != null) {
|
if (c != null) {
|
||||||
displayName = c.getFullName();
|
displayName = c.getFullName();
|
||||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, c.getThumbnailUri());
|
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, c.getThumbnailUri());
|
||||||
|
|
|
@ -840,6 +840,12 @@ public class SettingsFragment extends PreferencesListFragment {
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||||
boolean enable = (Boolean) newValue;
|
boolean enable = (Boolean) newValue;
|
||||||
mPrefs.enableVideo(enable);
|
mPrefs.enableVideo(enable);
|
||||||
|
if (!enable) {
|
||||||
|
mPrefs.setInitiateVideoCall(false);
|
||||||
|
mPrefs.setAutomaticallyAcceptVideoRequests(false);
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_initiate_call_with_video_key))).setChecked(mPrefs.shouldInitiateVideoCall());
|
||||||
|
((CheckBoxPreference) findPreference(getString(R.string.pref_video_automatically_accept_video_key))).setChecked(mPrefs.shouldAutomaticallyAcceptVideoRequests());
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -402,6 +402,9 @@ public class StatusFragment extends Fragment {
|
||||||
|
|
||||||
ZRTPdialog = new Dialog(getActivity());
|
ZRTPdialog = new Dialog(getActivity());
|
||||||
ZRTPdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
ZRTPdialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
|
||||||
|
ZRTPdialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
|
||||||
|
ZRTPdialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
|
||||||
|
ZRTPdialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||||
Drawable d = new ColorDrawable(ContextCompat.getColor(getActivity(), 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);
|
||||||
|
|
|
@ -64,10 +64,12 @@ public class ListSelectionHelper {
|
||||||
mEditButton.setOnClickListener(new View.OnClickListener() {
|
mEditButton.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
|
if (mAdapter.getCount() > 0) {
|
||||||
mAdapter.enableEdition(true);
|
mAdapter.enableEdition(true);
|
||||||
mTopBar.setVisibility(View.GONE);
|
mTopBar.setVisibility(View.GONE);
|
||||||
mEditTopBar.setVisibility(View.VISIBLE);
|
mEditTopBar.setVisibility(View.VISIBLE);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
mSelectAllButton = view.findViewById(R.id.select_all);
|
mSelectAllButton = view.findViewById(R.id.select_all);
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit f4b87c521a513b540f34a72ef82a52364929d0be
|
Subproject commit ca4a89930dd8db94a60ae4a1dbf44a3710497429
|
|
@ -1 +1 @@
|
||||||
Subproject commit acf7727002fa4837a25582b5c798516b6b288fac
|
Subproject commit ed53ae3c9da4fb15c13454153383014b3257939a
|
|
@ -1 +1 @@
|
||||||
Subproject commit 7376c8ba975617c8b2a7232c3acc428513a4ae8f
|
Subproject commit ab5416d66620f32ff6882b6e29dec63203dbca41
|
|
@ -1 +1 @@
|
||||||
Subproject commit cbb4ab4c2a58e4fa1954043f6b17266e1685c887
|
Subproject commit 0f999ecc3d304923b6338d3f48d44ac8ddfd9be8
|
|
@ -1 +1 @@
|
||||||
Subproject commit 8e841b047641b1812a83880a90e89d702747ca5b
|
Subproject commit cfad8fcc28c7cdba69684c8e35846711aaa16775
|
|
@ -1 +1 @@
|
||||||
Subproject commit d389b30b6c417d8bc7a79f561075a5c58871e3bc
|
Subproject commit 456993eddd5f4724ff2b59487fb57aa5a85d782a
|
2
submodules/externals/mbedtls
vendored
2
submodules/externals/mbedtls
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit d9385339a5c2979786cfc844c0527593c14662c5
|
Subproject commit 83d21d543c26a31943b2bd08c66b029f2ef742be
|
2
submodules/externals/openh264
vendored
2
submodules/externals/openh264
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 9e75838c8638c48a32b15c73c9da7b1fe942fd5f
|
Subproject commit 852d23c72acd537b75e4b95af93b866925d31bda
|
8906
submodules/externals/sqlite3/shell.c
vendored
8906
submodules/externals/sqlite3/shell.c
vendored
File diff suppressed because it is too large
Load diff
11591
submodules/externals/sqlite3/sqlite3.c
vendored
11591
submodules/externals/sqlite3/sqlite3.c
vendored
File diff suppressed because it is too large
Load diff
656
submodules/externals/sqlite3/sqlite3.h
vendored
656
submodules/externals/sqlite3/sqlite3.h
vendored
File diff suppressed because it is too large
Load diff
7
submodules/externals/sqlite3/sqlite3ext.h
vendored
7
submodules/externals/sqlite3/sqlite3ext.h
vendored
|
@ -292,6 +292,9 @@ struct sqlite3_api_routines {
|
||||||
int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*));
|
int (*bind_pointer)(sqlite3_stmt*,int,void*,const char*,void(*)(void*));
|
||||||
void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*));
|
void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*));
|
||||||
void *(*value_pointer)(sqlite3_value*,const char*);
|
void *(*value_pointer)(sqlite3_value*,const char*);
|
||||||
|
int (*vtab_nochange)(sqlite3_context*);
|
||||||
|
int (*value_nochange)(sqlite3_value*);
|
||||||
|
const char *(*vtab_collation)(sqlite3_index_info*,int);
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -558,6 +561,10 @@ typedef int (*sqlite3_loadext_entry)(
|
||||||
#define sqlite3_bind_pointer sqlite3_api->bind_pointer
|
#define sqlite3_bind_pointer sqlite3_api->bind_pointer
|
||||||
#define sqlite3_result_pointer sqlite3_api->result_pointer
|
#define sqlite3_result_pointer sqlite3_api->result_pointer
|
||||||
#define sqlite3_value_pointer sqlite3_api->value_pointer
|
#define sqlite3_value_pointer sqlite3_api->value_pointer
|
||||||
|
/* Version 3.22.0 and later */
|
||||||
|
#define sqlite3_vtab_nochange sqlite3_api->vtab_nochange
|
||||||
|
#define sqlite3_value_nochange sqlite3_api->value_nochange
|
||||||
|
#define sqlite3_vtab_collation sqlite3_api->vtab_collation
|
||||||
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
#endif /* !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION) */
|
||||||
|
|
||||||
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
#if !defined(SQLITE_CORE) && !defined(SQLITE_OMIT_LOAD_EXTENSION)
|
||||||
|
|
2
submodules/externals/srtp
vendored
2
submodules/externals/srtp
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 4a5ea6a64043038f4a4ac0f18d54db02a08d9b92
|
Subproject commit a1e31c958811b2a03571f5d824913be940288e93
|
1
submodules/externals/zxing-cpp
vendored
Submodule
1
submodules/externals/zxing-cpp
vendored
Submodule
|
@ -0,0 +1 @@
|
||||||
|
Subproject commit 0f267e5fb66d45b32fba302bef0028dcf0dda84f
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1f5c297c224816abf90e621b909f4cb7ab60ac09
|
Subproject commit d1a8d275b553c82b56a21ebb32d34024b0adbb99
|
|
@ -1 +1 @@
|
||||||
Subproject commit ad4cdb240e553654f87438fb4519754e90d1773d
|
Subproject commit 75a86196030bb6efd9d67d42c0b25f17b4ec4e25
|
|
@ -1 +1 @@
|
||||||
Subproject commit 1fcd6fd1558f26255ae9dac687191ddf988bfd5b
|
Subproject commit a88be02b93e2274ae3fcf80e1e0032adc43c0448
|
23
test.patch
23
test.patch
|
@ -1,23 +0,0 @@
|
||||||
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
|
|
||||||
index 9ee95b62..bb763a24 100755
|
|
||||||
--- a/AndroidManifest.xml
|
|
||||||
+++ b/AndroidManifest.xml
|
|
||||||
@@ -287,15 +287,15 @@
|
|
||||||
</intent-filter>
|
|
||||||
</service>
|
|
||||||
|
|
||||||
- <provider
|
|
||||||
+ <!--<provider
|
|
||||||
android:name="android.support.v4.content.FileProvider"
|
|
||||||
- android:authorities="org.linphone.provider"
|
|
||||||
+ android:authorities="org.linphone.provider${linphone_app_id}"
|
|
||||||
android:exported="false"
|
|
||||||
android:grantUriPermissions="true">
|
|
||||||
<meta-data
|
|
||||||
android:name="android.support.FILE_PROVIDER_PATHS"
|
|
||||||
android:resource="@xml/provider_paths"/>
|
|
||||||
- </provider>
|
|
||||||
+ </provider>-->
|
|
||||||
|
|
||||||
<activity
|
|
||||||
android:name=".tutorials.TutorialLauncherActivity"
|
|
Loading…
Reference in a new issue