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
|
||||
gen
|
||||
liblinphone-junit-report.xml
|
||||
liblinphone-sdk
|
||||
liblinphone-sdk/android-*
|
||||
liblinphonetester_*.zip
|
||||
libs
|
||||
libs-debug
|
||||
|
@ -29,7 +29,6 @@ proguard-project.txt
|
|||
project.properties
|
||||
res/.DS_Store
|
||||
res/raw/lpconfig.xsd
|
||||
res/raw/rootca.pem
|
||||
submodules/externals/build/cunit/CUnit/
|
||||
submodules/externals/build/ffmpeg/arm/
|
||||
submodules/externals/build/ffmpeg/x86
|
||||
|
@ -49,7 +48,12 @@ tests/tests.output
|
|||
WORK
|
||||
.d
|
||||
google-services.json
|
||||
gradle.properties
|
||||
.*clang*
|
||||
linphone.iml
|
||||
**/*.iml
|
||||
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"]
|
||||
path = submodules/linphone
|
||||
url = git://git.linphone.org/linphone.git
|
||||
url = https://gitlab.linphone.org/BC/public/linphone.git
|
||||
[submodule "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"]
|
||||
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"]
|
||||
path = submodules/externals/ffmpeg
|
||||
url = git://git.linphone.org/ffmpeg.git
|
||||
url = https://gitlab.linphone.org/BC/public/external/ffmpeg.git
|
||||
ignore = dirty
|
||||
[submodule "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
|
||||
[submodule "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"]
|
||||
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
|
||||
[submodule "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"]
|
||||
path = submodules/externals/libvpx
|
||||
url = git://git.linphone.org/libvpx.git
|
||||
url = https://gitlab.linphone.org/BC/public/external/libvpx.git
|
||||
ignore = dirty
|
||||
[submodule "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"]
|
||||
path = submodules/externals/srtp
|
||||
url = git://git.linphone.org/srtp.git
|
||||
url = https://gitlab.linphone.org/BC/public/external/srtp.git
|
||||
[submodule "submodules/mssilk"]
|
||||
path = submodules/mssilk
|
||||
url = git://git.linphone.org/mssilk.git
|
||||
url = https://gitlab.linphone.org/BC/public/mssilk.git
|
||||
[submodule "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"]
|
||||
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"]
|
||||
path = submodules/externals/libxml2
|
||||
url = https://github.com/GNOME/libxml2.git
|
||||
url = https://gitlab.linphone.org/BC/public/external/libxml2.git
|
||||
ignore = dirty
|
||||
[submodule "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"]
|
||||
path = submodules/externals/opus
|
||||
url = git://git.linphone.org/opus.git
|
||||
url = https://gitlab.linphone.org/BC/public/external/opus.git
|
||||
ignore = dirty
|
||||
[submodule "submodules/mswebrtc"]
|
||||
path = submodules/mswebrtc
|
||||
url = git://git.linphone.org/mswebrtc.git
|
||||
url = https://gitlab.linphone.org/BC/public/mswebrtc.git
|
||||
[submodule "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"]
|
||||
path = submodules/externals/openh264
|
||||
url = https://github.com/cisco/openh264
|
||||
url = https://gitlab.linphone.org/BC/public/external/openh264.git
|
||||
ignore = dirty
|
||||
[submodule "submodules/mscodec2"]
|
||||
path = submodules/mscodec2
|
||||
url = git://git.linphone.org/mscodec2.git
|
||||
url = https://gitlab.linphone.org/BC/public/mscodec2.git
|
||||
[submodule "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"]
|
||||
path = submodules/externals/mbedtls
|
||||
url = git://git.linphone.org/mbedtls.git
|
||||
url = https://gitlab.linphone.org/BC/public/external/mbedtls.git
|
||||
ignore = dirty
|
||||
[submodule "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"]
|
||||
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"]
|
||||
path = submodules/belr
|
||||
url = git://git.linphone.org/belr.git
|
||||
url = https://gitlab.linphone.org/BC/public/belr.git
|
||||
[submodule "submodules/belcard"]
|
||||
path = submodules/belcard
|
||||
url = git://git.linphone.org/belcard.git
|
||||
url = https://gitlab.linphone.org/BC/public/belcard.git
|
||||
[submodule "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"]
|
||||
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"]
|
||||
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"]
|
||||
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"]
|
||||
path = submodules/mediastreamer2
|
||||
url = git://git.linphone.org/mediastreamer2.git
|
||||
url = https://gitlab.linphone.org/BC/public/mediastreamer2.git
|
||||
[submodule "submodules/oRTP"]
|
||||
path = submodules/oRTP
|
||||
url = git://git.linphone.org/ortp.git
|
||||
url = https://gitlab.linphone.org/BC/public/ortp.git
|
||||
[submodule "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"]
|
||||
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"]
|
||||
path = submodules/externals/libxsd
|
||||
url = git://git.linphone.org/libxsd
|
||||
url = https://gitlab.linphone.org/BC/public/external/libxsd.git
|
||||
[submodule "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"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="3995"
|
||||
android:versionName="3.99.4">
|
||||
android:versionCode="4002"
|
||||
android:versionName="4.0.1">
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="16"
|
||||
android:targetSdkVersion="26"/>
|
||||
android:targetSdkVersion="28"/>
|
||||
|
||||
<uses-permission android:name="android.permission.INTERNET"/>
|
||||
<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.
|
||||
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.
|
||||
Fixed for any bug fixes.
|
||||
Security to invite users to upgrade in case of vulnerabilities.
|
||||
|
||||
## [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
|
||||
|
||||
|
|
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.
|
||||
|
||||
# COMPILATION INSTRUCTIONS
|
||||
|
||||
## 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.
|
||||
* With the latest Debian (multiarch), you need this:
|
||||
* `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'
|
||||
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
|
||||
|
||||
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'
|
||||
implementation 'org.apache.commons:commons-compress:1.16.1'
|
||||
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:recyclerview-v7:27.1.1'
|
||||
implementation 'com.android.support:appcompat-v7:27.1.1'
|
||||
implementation 'com.android.support:design:27.1.1'
|
||||
|
||||
implementation project(':liblinphone-sdk')
|
||||
}
|
||||
|
||||
if (firebaseEnable()) {
|
||||
apply plugin: 'com.google.gms.google-services'
|
||||
}
|
||||
|
||||
//// Submodule Dir /////
|
||||
def submoduleDir = ['submodules/mediastreamer2/java/src']
|
||||
////////////////////////
|
||||
|
||||
///// Exclude Files /////
|
||||
def excludeFiles = []
|
||||
// Exclude firebase file if not enable
|
||||
|
@ -72,7 +68,7 @@ if (!firebaseEnable()) {
|
|||
excludeFiles.add('**/gcm*')
|
||||
println '[Push Notification] Firebase enabled'
|
||||
}
|
||||
excludeFiles.add('**/mediastream/MediastreamerActivity.java')
|
||||
|
||||
excludeFiles.add('src/android/org/linphone/tutorials/*.java')
|
||||
|
||||
def excludePackage = []
|
||||
|
@ -85,7 +81,8 @@ excludePackage.add('**/LICENSE.txt')
|
|||
|
||||
android {
|
||||
defaultConfig {
|
||||
compileSdkVersion 26
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion "28.0.0"
|
||||
applicationId getPackageName()
|
||||
multiDexEnabled true
|
||||
|
||||
|
@ -114,20 +111,19 @@ android {
|
|||
packaged {
|
||||
initWith release
|
||||
signingConfig null
|
||||
matchingFallbacks = ['debug', 'release']
|
||||
}
|
||||
}
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
def srcDirs = submoduleDir
|
||||
srcDirs.addAll(['src/linphone-wrapper', 'src/android'])
|
||||
def srcDirs = ['src/android']
|
||||
java.srcDirs = srcDirs
|
||||
resources.srcDirs = srcDirs
|
||||
aidl.srcDirs = srcDirs
|
||||
renderscript.srcDirs = srcDirs
|
||||
res.srcDirs = ['res']
|
||||
assets.srcDirs = ['assets']
|
||||
jniLibs.srcDirs = ['libs']
|
||||
java.excludes = excludeFiles
|
||||
|
||||
// Exclude some useless files
|
||||
|
@ -142,16 +138,13 @@ android {
|
|||
sourceSets {
|
||||
androidTest {
|
||||
manifest.srcFile 'AndroidManifest.xml'
|
||||
def srcDirs = submoduleDir
|
||||
srcDirs.addAll(['src/android',
|
||||
'src/androidTest'])
|
||||
def srcDirs = ['src/android', 'src/androidTest']
|
||||
java.srcDirs = srcDirs
|
||||
resources.srcDirs = srcDirs
|
||||
aidl.srcDirs = srcDirs
|
||||
renderscript.srcDirs = srcDirs
|
||||
res.srcDirs = ['res']
|
||||
assets.srcDirs = ['assets']
|
||||
jniLibs.srcDirs = ['libs']
|
||||
java.excludes = excludeFiles
|
||||
|
||||
// Exclude some useless files
|
||||
|
@ -166,7 +159,7 @@ android {
|
|||
packagingOptions {
|
||||
pickFirst 'META-INF/NOTICE'
|
||||
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
|
||||
distributionPath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
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"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:installLocation="auto"
|
||||
android:versionCode="3320"
|
||||
android:versionName="3.3.2">
|
||||
android:versionCode="4001"
|
||||
android:versionName="4.0.0">
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="16"
|
||||
android:targetSdkVersion="26"/>
|
||||
android:targetSdkVersion="28"/>
|
||||
</manifest>
|
|
@ -21,18 +21,40 @@ allprojects {
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
configurations {
|
||||
javadocDeps
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
|
||||
dependencies {
|
||||
implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
||||
javadocDeps group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
||||
compile 'org.apache.commons:commons-compress: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 = []
|
||||
|
||||
|
@ -42,9 +64,38 @@ excludePackage.add('**/**tester**')
|
|||
excludePackage.add('**/LICENSE.txt')
|
||||
|
||||
android {
|
||||
|
||||
|
||||
buildTypes {
|
||||
release {}
|
||||
debug {}
|
||||
}
|
||||
|
||||
defaultConfig {
|
||||
compileSdkVersion 26
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion "28.0.0"
|
||||
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 {
|
||||
|
@ -58,10 +109,11 @@ android {
|
|||
main {
|
||||
manifest.srcFile 'AndroidManifestLibrary.xml'
|
||||
java.srcDirs = srcDir
|
||||
resources.srcDirs = srcDir
|
||||
aidl.srcDirs = srcDir
|
||||
assets.srcDirs = ["${buildDir}/sdk-assets/assets/"]
|
||||
renderscript.srcDirs = srcDir
|
||||
jniLibs.srcDirs = ['libs']
|
||||
jniLibs.srcDirs = ['../libs']
|
||||
resources.srcDir("res")
|
||||
|
||||
java.excludes = ['**/mediastream/MediastreamerActivity.java']
|
||||
|
||||
|
@ -78,7 +130,7 @@ android {
|
|||
///////////// Task /////////////
|
||||
|
||||
task(releaseJavadoc, type: Javadoc, dependsOn: "assembleRelease") {
|
||||
source = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper']
|
||||
source = srcDir
|
||||
excludes = ['**/mediastream/MediastreamerActivity.java',
|
||||
'**/**.html',
|
||||
'**/**.aidl']
|
||||
|
@ -108,3 +160,26 @@ task sdkZip(type: Zip) {
|
|||
include '*'
|
||||
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.MODIFY_AUDIO_SETTINGS" />
|
||||
<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
|
||||
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'
|
||||
|
||||
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: 'com.jayway.android.robotium', name: 'robotium', version: '+'
|
||||
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: 'com.jayway.android.robotium', name: 'robotium-solo', version: '+'
|
||||
compile fileTree(dir: 'libs', include: 'android-junit-report*.jar')
|
||||
compile project(":libLinphoneAndroidSdk")
|
||||
compile project(":liblinphone-sdk")
|
||||
}
|
||||
|
||||
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
|
6
liblinphone_tester/gradlew
vendored
6
liblinphone_tester/gradlew
vendored
|
@ -33,11 +33,11 @@ DEFAULT_JVM_OPTS=""
|
|||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||
MAX_FD="maximum"
|
||||
|
||||
warn ( ) {
|
||||
warn () {
|
||||
echo "$*"
|
||||
}
|
||||
|
||||
die ( ) {
|
||||
die () {
|
||||
echo
|
||||
echo "$*"
|
||||
echo
|
||||
|
@ -155,7 +155,7 @@ if $cygwin ; then
|
|||
fi
|
||||
|
||||
# Escape application args
|
||||
save ( ) {
|
||||
save () {
|
||||
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
|
||||
echo " "
|
||||
}
|
||||
|
|
|
@ -1,3 +1,2 @@
|
|||
include ':libLinphoneAndroidSdk'
|
||||
project(':libLinphoneAndroidSdk').projectDir = new File(rootProject.projectDir,'..')
|
||||
project(':libLinphoneAndroidSdk').buildFileName = "libLinphoneAndroidSdk.gradle"
|
||||
include ':liblinphone-sdk'
|
||||
project(':liblinphone-sdk').projectDir = new File(rootProject.projectDir,'../liblinphone-sdk')
|
||||
|
|
|
@ -23,7 +23,7 @@ public class LogsActivity extends Activity {
|
|||
|
||||
@Override
|
||||
public void run() {
|
||||
String res_path = mLogsActivity.getFilesDir().getAbsolutePath()+"/config_files";
|
||||
String res_path = mLogsActivity.getFilesDir().getAbsolutePath();
|
||||
String write_path = mLogsActivity.getCacheDir().getPath();
|
||||
tester = new TesterLogger(mLogsActivity);
|
||||
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.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.view.Gravity;
|
||||
import android.view.Menu;
|
||||
|
@ -19,6 +20,7 @@ public class SuitesActivity extends Activity {
|
|||
if (extras != null) {
|
||||
mSuite = extras.getString("suite");
|
||||
if(mSuite != null) {
|
||||
Tester.setApplicationContext(getBaseContext());
|
||||
this.setTitle(this.getResources().getString(R.string.app_name) + " | " + mSuite);
|
||||
TesterList suitesTest = new TesterList();
|
||||
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
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
|
|
|
@ -26,46 +26,24 @@ public class TestUnit extends AndroidTestCase {
|
|||
public TestUnit(String name) {
|
||||
String[] tab = name.split("/");
|
||||
mSuite = tab[0];
|
||||
mTest = tab[1];
|
||||
if (tab.length == 2)
|
||||
mTest = tab[1];
|
||||
setName(name);
|
||||
}
|
||||
|
||||
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
|
||||
protected void setUp() throws Exception {
|
||||
super.setUp();
|
||||
if (isAssetCopied ==false) {
|
||||
Tester.setApplicationContext(getContext());
|
||||
copyAssetsFromPackage(getContext());
|
||||
isAssetCopied=true;
|
||||
}
|
||||
|
@ -78,7 +56,7 @@ public class TestUnit extends AndroidTestCase {
|
|||
|
||||
@Override
|
||||
protected void runTest() {
|
||||
String res_path = getContext().getFilesDir().getPath()+"/config_files";
|
||||
String res_path = getContext().getFilesDir().getPath();
|
||||
String write_path = getContext().getCacheDir().getPath();
|
||||
Tester tester = new Tester();
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import org.linphone.core.Factory;
|
|||
import org.linphone.mediastream.Version;
|
||||
|
||||
import android.util.Log;
|
||||
import android.content.Context;
|
||||
|
||||
public class 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 static native void keepAccounts(boolean keep);
|
||||
public static native void clearAccounts();
|
||||
|
|
|
@ -1,12 +1,8 @@
|
|||
// Project information
|
||||
buildDir = 'bin'
|
||||
def firebaseEnable() {
|
||||
File googleFile = new File('google-services.json')
|
||||
return googleFile.exists()
|
||||
}
|
||||
|
||||
|
||||
buildscript {
|
||||
File googleFile = new File('google-services.json')
|
||||
repositories {
|
||||
jcenter()
|
||||
mavenCentral()
|
||||
|
@ -15,9 +11,6 @@ buildscript {
|
|||
}
|
||||
dependencies {
|
||||
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'
|
||||
|
||||
dependencies {
|
||||
implementation group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
||||
if (firebaseEnable()) {
|
||||
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'
|
||||
compile group: 'org.apache.commons', name: 'commons-compress', version: '1.16.1'
|
||||
compile 'com.android.support:support-v4:26.0.2'
|
||||
}
|
||||
|
||||
|
||||
def srcDirs = ['submodules/mediastreamer2/java/src', 'src/linphone-wrapper', 'src/android']
|
||||
|
||||
def excludeFiles = []
|
||||
// Exclude firebase file if not enable
|
||||
if (!firebaseEnable()) {
|
||||
excludeFiles.add('**/Firebase*')
|
||||
} else {
|
||||
excludeFiles.add('**/gcm*')
|
||||
}
|
||||
|
||||
excludeFiles.add('**/Firebase*')
|
||||
excludeFiles.add('**/gcm*')
|
||||
excludeFiles.add('**/mediastream/MediastreamerActivity.java')
|
||||
|
||||
def excludePackage = []
|
||||
|
@ -67,6 +49,7 @@ excludePackage.add('**/LICENSE.txt')
|
|||
android {
|
||||
defaultConfig {
|
||||
compileSdkVersion 26
|
||||
buildToolsVersion "27.0.3"
|
||||
multiDexEnabled true
|
||||
}
|
||||
|
||||
|
@ -79,7 +62,7 @@ android {
|
|||
|
||||
sourceSets {
|
||||
main {
|
||||
manifest.srcFile 'AndroidManifestLibrary.xml'
|
||||
manifest.srcFile 'AndroidManifestSdk.xml'
|
||||
java.srcDirs = srcDirs
|
||||
resources.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"
|
76
prepare.py
76
prepare.py
|
@ -104,7 +104,7 @@ class AndroidPreparator(prepare.Preparator):
|
|||
def __init__(self, targets=android_targets):
|
||||
prepare.Preparator.__init__(self, targets, default_targets=['armv7', 'arm64'], virtual_targets=android_virtual_targets)
|
||||
self.min_supported_ndk = 16
|
||||
self.max_supported_ndk = 16
|
||||
self.max_supported_ndk = 17
|
||||
self.unsupported_ndk_version = None
|
||||
self.min_cmake_version = "3.10"
|
||||
self.release_with_debug_info = True
|
||||
|
@ -144,7 +144,7 @@ class AndroidPreparator(prepare.Preparator):
|
|||
retval = True
|
||||
ndk_build = find_executable('ndk-build')
|
||||
ndk_path = os.path.dirname(ndk_build)
|
||||
# NDK prior to r11 had a RELEASE.TXT file holding the version number
|
||||
# NDK prior to r11 had a RELEASE.TXT file holding the version number
|
||||
release_file = os.path.join(ndk_path, 'RELEASE.TXT')
|
||||
if os.path.isfile(release_file):
|
||||
version = open(release_file).read().strip()
|
||||
|
@ -241,19 +241,18 @@ install: install-apk run-linphone
|
|||
install-test:
|
||||
\t$(MAKE) -C liblinphone_tester copy-libs
|
||||
\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 installDebug
|
||||
|
||||
java-clean:
|
||||
\t./gradlew clean
|
||||
|
||||
$(TOPDIR)/res/raw/rootca.pem:
|
||||
\tcp liblinphone-sdk/android-{first_arch}/share/linphone/rootca.pem $@
|
||||
|
||||
copy-libs:
|
||||
\trm -rf liblinphone-sdk/res
|
||||
\trm -rf libs-debug/armeabi
|
||||
\trm -rf libs/armeabi
|
||||
\trm -rf src/linphone-wrapper && mkdir -p src/linphone-wrapper/
|
||||
\tif test -d "liblinphone-sdk/android-arm"; then \\
|
||||
\t\tmkdir -p 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/gdb.setup libs/armeabi; \\
|
||||
\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/armeabi-v7a
|
||||
\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/gdb.setup libs/armeabi-v7a; \\
|
||||
\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/arm64-v8a
|
||||
\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/gdb.setup libs/arm64-v8a; \\
|
||||
\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/x86
|
||||
\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/gdb.setup libs/x86; \\
|
||||
\tfi
|
||||
\tif test -d "liblinphone-sdk/android-arm/share/linphonej"; then \\
|
||||
\t\tcp -R liblinphone-sdk/android-arm/share/linphonej/java/* src/linphone-wrapper; \\
|
||||
\tfi
|
||||
\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/; \\
|
||||
\tif test -f "liblinphone-sdk/android-x86/lib/wrap.sh"; then \\
|
||||
\t\tmkdir -p liblinphone-sdk/res/lib/x86 && \\
|
||||
\t\tcp -f liblinphone-sdk/android-x86/lib/wrap.sh liblinphone-sdk/res/lib/x86; \\
|
||||
\tfi
|
||||
|
||||
copy-libs-mediastreamer:
|
||||
|
@ -371,7 +362,7 @@ copy-libs-mediastreamer:
|
|||
\t\tsh WORK/android-x86/strip.sh submodules/mediastreamer2/java/libs/x86/*.so; \\
|
||||
\tfi
|
||||
|
||||
generate-apk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem
|
||||
generate-apk: java-clean build copy-libs
|
||||
\t./gradlew assembleDebug
|
||||
|
||||
quick: clean install-apk run-linphone
|
||||
|
@ -388,25 +379,32 @@ release: java-clean build copy-libs
|
|||
unsigned: java-clean build copy-libs
|
||||
\t./gradlew assemblePackaged
|
||||
|
||||
generate-sdk: liblinphone-android-sdk
|
||||
generate-release-sdk: liblinphone-android-sdk-release
|
||||
|
||||
generate-sdk: liblinphone-android-sdk-debug
|
||||
|
||||
generate-javadoc:
|
||||
\t./gradlew -b libLinphoneAndroidSdk.gradle androidJavadocsJar
|
||||
\t./gradlew -b libLinphoneAndroidSdk.gradle sourcesJar
|
||||
\t./gradlew -q androidJavadocsJar
|
||||
\t./gradlew -q sourcesJar
|
||||
|
||||
liblinphone-android-sdk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem
|
||||
\t./gradlew -b libLinphoneAndroidSdk.gradle androidJavadocsJar
|
||||
\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
|
||||
debug-sdk: java-clean build copy-libs generate-javadoc generate-apk
|
||||
\t./gradlew -q 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 sourcesJar
|
||||
|
||||
linphone-android-sdk-release: linphone-android-sdk
|
||||
\t./gradlew -b linphoneAndroidSdk.gradle assembleRelease
|
||||
\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
|
||||
\t@cd $(TOPDIR)/submodules/mediastreamer2/java && \\
|
||||
\t./gradlew -b mediastreamerSdk.gradle assembleRelease
|
||||
|
|
|
@ -140,7 +140,7 @@
|
|||
android:text="@string/sent"/>
|
||||
|
||||
<ImageView
|
||||
android:visibility="gone"
|
||||
android:visibility="invisible"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
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>
|
||||
<!--Common-->
|
||||
<string name="username">اسم المستخدم</string>
|
||||
<string name="userid">معرِّف المستخدم (اختياري)</string>
|
||||
<string name="phone_number">رقم الهاتف</string>
|
||||
<string name="display_name">الاسم المعروض</string>
|
||||
<string name="password">كلمة السر</string>
|
||||
|
@ -110,6 +111,7 @@
|
|||
<string name="use_email_for_validation">استخدم عنوان البريد الإلكتروني لتأكيد الحساب</string>
|
||||
<string name="login_with_username">استعمل اسم المستخدم وكلمة السر عوضا عن رقم هاتفك</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">
|
||||
\nسيجدك أصدقاؤك بسهولة إن ربطت حسابك برقم هاتفك\\n\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="delivered">سُلِّم</string>
|
||||
<string name="resend">أعد اﻹرسال</string>
|
||||
<string name="error_opening_file">حدث خطأ خلال فتح هذا الملف.</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">مُسجَّل</string>
|
||||
<string name="status_not_connected">غير مُسجَّل</string>
|
||||
|
@ -207,9 +210,12 @@
|
|||
<string name="call_stats_ip">صنف IP :</string>
|
||||
<string name="call_stats_upload">صبيب الرفع :</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_video_resolution_sent">دقة الفيديو المُرسَل :</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_receiver_loss_rate">معدل ضياع المتلقي :</string>
|
||||
<string name="call_stats_jitter_buffer">صِوان الارتعاش :</string>
|
||||
|
@ -330,7 +336,9 @@
|
|||
<string name="pref_auto_answer_time">مهلة التشغيل التلقائي (بالميلي-ثواني)</string>
|
||||
<string name="pref_rfc2833_dtmf">أرسل DTMF مع التدفق (RFC2833)</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_dialer_call">استخدمْ لِنْفُونْ كتطبيق هاتفك الافتراضي</string>
|
||||
<!--Chat settings-->
|
||||
<string name="pref_chat_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_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_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_medium">Moyenne</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="displayed">Lu</string>
|
||||
<string name="delivered">Reçu</string>
|
||||
<string name="undelivered">Reçu</string>
|
||||
<string name="sent">Envoyé</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="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_admin">Admin</string>
|
||||
<string name="chat_room_participants">Participants</string>
|
||||
<string name="chat_room_leave_group">Quitter le groupe</string>
|
||||
<string name="chat_room_creation_filter_hint">Filtrer les contacts</string>
|
||||
<string name="conference_created">groupe créé</string>
|
||||
<string name="conference_destroyed">groupe détruit</string>
|
||||
<string name="participant_added">%s a été ajouté</string>
|
||||
<string name="participant_removed">%s a quitté</string>
|
||||
<string name="device_added">nouvel appareil pour %s</string>
|
||||
<string name="device_removed">appareil de %s retiré</string>
|
||||
<string name="subject_changed">nouveau sujet : %s</string>
|
||||
<string name="admin_set">%s est admin</string>
|
||||
<string name="chat_room_creation_filter_hint">Rechercher un contact</string>
|
||||
<string name="conference_created">Vous avez rejoint le groupe</string>
|
||||
<string name="conference_destroyed">Vous avez quitté le groupe</string>
|
||||
<string name="participant_added">%s a rejoint le groupe</string>
|
||||
<string name="participant_removed">%s a quitté le groupe</string>
|
||||
<string name="subject_changed">Nouveau sujet : %s</string>
|
||||
<string name="admin_set">%s est devenu(e) 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_delete_dialog">Voulez-vous supprimer et quitter les discussions sélectionnées ?</string>
|
||||
<string name="separator"> : </string>
|
||||
<string name="chat_room_delete_dialog">Voulez vous vraiment quitter et supprimer les conversations selectionnées ?</string>
|
||||
<string name="imdn_info">Etat du message</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">Enregistré</string>
|
||||
<string name="status_not_connected">Non enregistré</string>
|
||||
|
|
|
@ -11,10 +11,12 @@
|
|||
<string name="tunnel_host"></string>
|
||||
<string name="about_version">Linphone Android %s</string>
|
||||
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||
<string name="about_text">GNU General Public License V2\n © 2010-2017 Belledonne Communications</string>
|
||||
<string name="about_link">www.linphone.org</string>
|
||||
<string name="sync_account_name">linphoneに問い合わせる</string>
|
||||
<!--Common-->
|
||||
<string name="username">ユーザー名</string>
|
||||
<string name="userid">ユーザID(オプション)</string>
|
||||
<string name="phone_number">電話番号</string>
|
||||
<string name="display_name">表示名</string>
|
||||
<string name="password">パスワード</string>
|
||||
|
@ -44,6 +46,7 @@
|
|||
<string name="maybe_later">また今度</string>
|
||||
<string name="later">そのうち</string>
|
||||
<string name="no">いいえ</string>
|
||||
<string name="ok">OK</string>
|
||||
<string name="yes">はい</string>
|
||||
<string name="link_account">アカウントをリンクする</string>
|
||||
<!--Launch screen-->
|
||||
|
@ -85,6 +88,8 @@
|
|||
<string name="assistant_error_bad_credentials">ユーザー名かパスワードが異なります</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_openh264_downloading">OpenH264をダウンロードしています。</string>
|
||||
<string name="assistant_openh264_restart">OpenH264コーデックを使うためには再起動する必要があります%s</string>
|
||||
<string name="assistant_codec_downloaded">Cisco Systems,Incが提供するOpenH264ビデオコーデックがダウンロードされました。</string>
|
||||
<string name="wizard_failed">エラーが発生しました。のちほど再試行してください。</string>
|
||||
<string name="wizard_server_unavailable">ネットワーク接続を確認してください。</string>
|
||||
|
@ -164,7 +169,10 @@
|
|||
<string name="image_saved">保存した画像</string>
|
||||
<string name="image_not_saved">エラー、画像が保存できません。</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="resend">再送信</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">登録済</string>
|
||||
<string name="status_not_connected">登録なし</string>
|
||||
|
@ -191,6 +199,8 @@
|
|||
<string name="call_stats_ice">ICE 接続:</string>
|
||||
<string name="call_stats_video_resolution_sent">送信ビデオ解像度:</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_receiver_loss_rate">受信ロス:</string>
|
||||
<string name="call_stats_encoder_name">エンコーダー:</string>
|
||||
|
@ -216,6 +226,7 @@
|
|||
<string name="error_user_busy">ビジーです</string>
|
||||
<string name="error_user_not_found">ユーザーがおりません</string>
|
||||
<string name="error_incompatible_media">互換性のないメディアパラメーター</string>
|
||||
<string name="error_low_bandwidth">あなたの相手の通信幅が狭いのでビデオが使えません</string>
|
||||
<string name="error_network_unreachable">ネットワークに到達できません</string>
|
||||
<string name="error_bad_credentials">不正な証明書です</string>
|
||||
<string name="error_unauthorized">無断</string>
|
||||
|
@ -309,6 +320,7 @@
|
|||
<string name="pref_rfc2833_dtmf">DTMFをインバンド(RFC2833)で送信する</string>
|
||||
<string name="pref_sipinfo_dtmf">DTMFをSIP(情報)で送信する</string>
|
||||
<string name="pref_voice_mail">音声メールのURI</string>
|
||||
<string name="pref_dialer_call">Linphoneを標準の電話アプリとして使う</string>
|
||||
<!--Chat settings-->
|
||||
<string name="pref_chat_title">チャット</string>
|
||||
<string name="pref_image_sharing_server_title">共有サーバー</string>
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
<string name="retry">Повторить</string>
|
||||
<string name="cancel">Отменить</string>
|
||||
<string name="accept">Принять</string>
|
||||
<string name="open">Открыть</string>
|
||||
<string name="continue_text">Продолжить</string>
|
||||
<string name="about">О программе</string>
|
||||
<string name="deny">Отклонить</string>
|
||||
|
@ -67,19 +68,19 @@
|
|||
<string name="assistant_remote_provisioning_desc">Укажите URL-адрес конфигурации</string>
|
||||
<string name="transport">Транспорт</string>
|
||||
<string name="assistant_create_account_phone_number_address">Ваш SIP-адрес</string>
|
||||
<string name="assistant_login_linphone">Использовать учетную запись Linphone</string>
|
||||
<string name="assistant_login_generic">Использовать учетную запись SIP</string>
|
||||
<string name="assistant_remote_provisioning">Выбор удаленной конфигурации</string>
|
||||
<string name="assistant_login_linphone">Использовать аккаунт Linphone</string>
|
||||
<string name="assistant_login_generic">Использовать SIP-аккаунт</string>
|
||||
<string name="assistant_remote_provisioning">Удаленная конфигурация</string>
|
||||
<string name="assistant_create_account_part_1">Подтвердите код страны и введите свой номер телефона</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_email">Введите имя пользователя, адрес электронной почты и пароль для вашей учетной записи Linphone</string>
|
||||
<string name="assistant_display_name_optional">Отображаемое имя (необязательно)</string>
|
||||
<string name="assistant_linphone_account">Использовать учетную запись Linphone</string>
|
||||
<string name="assistant_generic_account">Использовать учетную запись SIP</string>
|
||||
<string name="assistant_remote_provisioning_title">Выбор удаленной конфигурации</string>
|
||||
<string name="assistant_linphone_account">Использовать аккаунт Linphone</string>
|
||||
<string name="assistant_generic_account">Использовать SIP-аккаунт</string>
|
||||
<string name="assistant_remote_provisioning_title">Удаленная конфигурация</string>
|
||||
<string name="assistant_fetch_apply">Получить и применить</string>
|
||||
<string name="assistant_login">Имя пользователя</string>
|
||||
<string name="assistant_login">Авторизация</string>
|
||||
<string name="assistant_ec_calibration">Выполняется калибровка эхоподавления</string>
|
||||
<string name="assistant_remote_provisioning_login">Введите имя пользователя</string>
|
||||
<string name="assistant_account_not_validated">Ваша учетная запись еще не проверена.</string>
|
||||
|
@ -111,6 +112,7 @@
|
|||
<string name="use_email_for_validation">Использовать адрес электронной почты для проверки учетной записи</string>
|
||||
<string name="login_with_username">Вместо номера телефона использовать имя пользователя и пароль</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_already_account">Номер телефона можно использовать только с одной учетной записью Linphone.\n\nЕсли ваш номер уже был связан с другой учетной записью, но вы предпочитаете использовать его, просто свяжите его сейчас, и ваш номер будет автоматически перенесен в эту учетную запись.</string>
|
||||
<!--Status-->
|
||||
|
@ -159,6 +161,8 @@
|
|||
<string name="delete_conversation">Вы действительно хотите удалить выбранный разговор?</string>
|
||||
<string name="delete_message">Вы действительно хотите удалить выбранное сообщение?</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_medium">Средний</string>
|
||||
<string name="share_picture_size_large">Большой</string>
|
||||
|
@ -177,7 +181,28 @@
|
|||
<string name="processing_image">Обработка изображения может занять несколько секунд в зависимости от размера файла</string>
|
||||
<string name="displayed">Прочитано</string>
|
||||
<string name="delivered">Доставлено</string>
|
||||
<string name="undelivered">Не доставлено</string>
|
||||
<string name="sent">Отправлено</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-->
|
||||
<string name="status_connected">Зарегистрирован</string>
|
||||
<string name="status_not_connected">Не зарегистрирован</string>
|
||||
|
@ -233,6 +258,7 @@
|
|||
<!--Errors-->
|
||||
<string name="skipable_error_service_not_ready">Предупреждение: служба не готова</string>
|
||||
<string name="error">Ошибка</string>
|
||||
<string name="file_transfer_error">Ошибка передачи файла</string>
|
||||
<string name="warning_wrong_destination_address">Невозможно создать адрес назначения из %s</string>
|
||||
<string name="error_unknown">Неизвестная ошибка</string>
|
||||
<string name="error_call_declined">Вызов отклонен</string>
|
||||
|
@ -245,7 +271,7 @@
|
|||
<string name="error_unauthorized">Неавторизован</string>
|
||||
<string name="error_io_error">Ошибка сети</string>
|
||||
<string name="download_image_failed">Загрузка не удалась. Проверьте сетевое подключение или повторите попытку позже.</string>
|
||||
<string name="remote_provisioning_failure">Не удалось загрузить или применить профиль удаленного конфигурирования...</string>
|
||||
<string name="remote_provisioning_failure">Не удалось загрузить или применить профиль удаленной конфигурации...</string>
|
||||
<string name="remote_provisioning_again_title">Удаленное конфигурирование</string>
|
||||
<string name="remote_provisioning_again_message">Вы хотите изменить URI конфигурирования?</string>
|
||||
<!--Account Settings-->
|
||||
|
@ -280,6 +306,7 @@
|
|||
<string name="pref_change_password">Изменить пароль</string>
|
||||
<string name="pref_default_account">Использовать по умолчанию</string>
|
||||
<string name="pref_password_changed">Пароль изменен</string>
|
||||
<string name="pref_proxy_push_notif">Разрешить push-уведомление</string>
|
||||
<!--Settings-->
|
||||
<string name="pref_sipaccounts">Учетные записи SIP</string>
|
||||
<string name="default_account_flag">Учетная запись по умолчанию</string>
|
||||
|
@ -335,6 +362,7 @@
|
|||
<string name="pref_sipinfo_dtmf">Отправить вне потока DTMFs(SIP INFO)</string>
|
||||
<string name="pref_call_timeout_title">Таймаут вызова(в секундах)</string>
|
||||
<string name="pref_voice_mail">URI голосовой почты</string>
|
||||
<string name="pref_dialer_call">Использовать Linphone в качестве приложения для звонков по умолчанию.</string>
|
||||
<!--Chat settings-->
|
||||
<string name="pref_chat_title">Чат</string>
|
||||
<string name="pref_image_sharing_server_title">Сервер обмена</string>
|
||||
|
@ -367,6 +395,7 @@
|
|||
<string name="pref_advanced_title">Дополнительно</string>
|
||||
<string name="pref_debug_title">Отладка</string>
|
||||
<string name="pref_debug">Отладка</string>
|
||||
<string name="pref_java_debug">Использовать Java-регистратор</string>
|
||||
<string name="pref_friendlist_subscribe">Подписка</string>
|
||||
<string name="pref_background_mode">Фоновый режим</string>
|
||||
<string name="pref_animation_enable_title">Включить анимацию</string>
|
||||
|
@ -458,4 +487,6 @@
|
|||
<string name="content_description_exit_conference">Выйти из конференции</string>
|
||||
<string name="content_title_notification_service">Служба Linphone</string>
|
||||
<string name="content_title_notification">Уведомление Linphone</string>
|
||||
<string name="content_description_conversation_subject">Тема группового чата</string>
|
||||
<string name="content_description_conversation_infos">Информация о групповом чате</string>
|
||||
</resources>
|
||||
|
|
|
@ -111,6 +111,7 @@
|
|||
<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="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_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-->
|
||||
|
@ -140,8 +141,8 @@
|
|||
<!--Dailer-->
|
||||
<string name="address_bar_hint">Ange ett nummer eller en adress</string>
|
||||
<!--History-->
|
||||
<string name="no_call_history">Inget samtal i din historia</string>
|
||||
<string name="no_missed_call_history">Inget missat samtal i din historia</string>
|
||||
<string name="no_call_history">Inga samtal i din historik</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="today">Idag</string>
|
||||
<string name="yesterday">Igår</string>
|
||||
|
@ -178,6 +179,7 @@
|
|||
<string name="displayed">Läs</string>
|
||||
<string name="delivered">Levererades</string>
|
||||
<string name="resend">Skicka igen</string>
|
||||
<string name="error_opening_file">Ett fel uppstår när filen öppnas.</string>
|
||||
<!--Status Bar-->
|
||||
<string name="status_connected">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_sipinfo_dtmf">Skicka ut-band DTMF (SIP INFO)</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-->
|
||||
<string name="pref_chat_title">Chatt</string>
|
||||
<string name="pref_image_sharing_server_title">Delar server</string>
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
<string name="retry">Yeniden dene</string>
|
||||
<string name="cancel">İptal</string>
|
||||
<string name="accept">Kabul et</string>
|
||||
<string name="open">Aç</string>
|
||||
<string name="continue_text">Sürdür</string>
|
||||
<string name="about">Hakkında</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="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_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_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-->
|
||||
|
@ -159,6 +161,8 @@
|
|||
<string name="delete_conversation">Seçilen görüşmeyi silmek ister misiniz?</string>
|
||||
<string name="delete_message">Seçilen iletiyi silmek ister misiniz?</string>
|
||||
<string name="remote_composing">Karşıdan yazılıyor...</string>
|
||||
<string name="remote_composing_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_medium">Orta</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="displayed">Okundu</string>
|
||||
<string name="delivered">Ulaştırıldı</string>
|
||||
<string name="sent">Gönderildi</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-->
|
||||
<string name="status_connected">Kayıtlı</string>
|
||||
<string name="status_not_connected">Kayıtsız</string>
|
||||
|
@ -233,6 +254,7 @@
|
|||
<!--Errors-->
|
||||
<string name="skipable_error_service_not_ready">Uyarı: hizmet hazır değil</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="error_unknown">Tanımlanmayan hata</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_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_dialer_call">Linphone\'u öntanımlı telefon uygulaması olarak kullan</string>
|
||||
<!--Chat settings-->
|
||||
<string name="pref_chat_title">Konuşma</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_title_notification_service">Linphone Hizmeti</string>
|
||||
<string name="content_title_notification">Linphone Bildirimi</string>
|
||||
<string name="content_description_conversation_subject">Küme konuşma odası konusu</string>
|
||||
</resources>
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
<string name="tunnel_host"></string>
|
||||
<string name="about_version">Linphone Android %s</string>
|
||||
<string name="about_liblinphone_version">Linphone Core %s</string>
|
||||
<string name="about_text">GNU General Public License V2\n © 2010-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="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="conversation_information">Info</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_admin">Admin</string>
|
||||
<string name="chat_room_participants">Participants</string>
|
||||
<string name="chat_room_leave_group">Leave the group</string>
|
||||
<string name="chat_room_creation_filter_hint">Contact filter</string>
|
||||
<string name="conference_created">group created</string>
|
||||
<string name="conference_destroyed">group destroyed</string>
|
||||
<string name="participant_added">%s added</string>
|
||||
<string name="participant_removed">%s leaved</string>
|
||||
<string name="chat_room_creation_filter_hint">Search a contact</string>
|
||||
<string name="conference_created">You have joined the group</string>
|
||||
<string name="conference_destroyed">You have left the group</string>
|
||||
<string name="participant_added">%s has joined</string>
|
||||
<string name="participant_removed">%s has left</string>
|
||||
<string name="device_added">new device for %s</string>
|
||||
<string name="device_removed">device for %s removed</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_no_longer_admin">You are no longer admin</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_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="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;
|
||||
|
||||
/*
|
||||
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
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
@ -373,7 +355,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
public void changeStatusToOnThePhone() {
|
||||
Core lc = getLcIfManagerNotDestroyedOrNull();
|
||||
if (lc == null) return;
|
||||
|
||||
|
||||
if (isInstanciated() && isPresenceModelActivitySet() && lc.getPresenceModel().getActivity().getType() != PresenceActivity.Type.OnThePhone) {
|
||||
lc.getPresenceModel().getActivity().setType(PresenceActivity.Type.OnThePhone);
|
||||
} else if (isInstanciated() && !isPresenceModelActivitySet()) {
|
||||
|
@ -584,7 +566,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
BluetoothManagerDestroy();
|
||||
try {
|
||||
mTimer.cancel();
|
||||
mLc = null;
|
||||
destroyLinphoneCore();
|
||||
}
|
||||
catch (RuntimeException e) {
|
||||
Log.e(e);
|
||||
|
@ -623,6 +605,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
public void restartCore() {
|
||||
destroyCore();
|
||||
startLibLinphone(mServiceContext);
|
||||
|
@ -687,7 +670,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
Class<?> firebaseClass = Class.forName("com.google.firebase.iid.FirebaseInstanceId");
|
||||
Object firebaseInstance = firebaseClass.getMethod("getInstance").invoke(null);
|
||||
final String refreshedToken = (String)firebaseClass.getMethod("getToken").invoke(firebaseInstance);
|
||||
|
||||
|
||||
//final String refreshedToken = com.google.firebase.iid.FirebaseInstanceId.getInstance().getToken();
|
||||
if (refreshedToken != null) {
|
||||
Log.i("[Push Notification] current token is: " + refreshedToken);
|
||||
|
@ -906,50 +889,15 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
||||
private void doDestroy() {
|
||||
ContactsManagerDestroy();
|
||||
BluetoothManagerDestroy();
|
||||
try {
|
||||
mTimer.cancel();
|
||||
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;
|
||||
instance = null;
|
||||
private void destroyLinphoneCore() {
|
||||
if (LinphonePreferences.instance() != null) {
|
||||
// We set network reachable at false before destroy LC to not send register with expires at 0
|
||||
if (LinphonePreferences.instance().isPushNotificationEnabled()
|
||||
|| LinphonePreferences.instance().isBackgroundModeEnabled()) {
|
||||
mLc.setNetworkReachable(false);
|
||||
}
|
||||
}
|
||||
mLc = null;
|
||||
}
|
||||
|
||||
public void dozeManager(boolean enable) {
|
||||
|
@ -1035,7 +983,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
if (instance == null) return;
|
||||
getInstance().changeStatusToOffline();
|
||||
sExited = true;
|
||||
instance.doDestroy();
|
||||
instance.destroyCore();
|
||||
}
|
||||
|
||||
private String getString(int key) {
|
||||
|
@ -1620,6 +1568,12 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou
|
|||
Log.d("Notify received for event "+eventName);
|
||||
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
|
||||
public void onPublishStateChanged(Core lc, Event ev, PublishState state) {
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
public void onQrcodeFound(Core lc, String something){
|
||||
}
|
||||
}
|
||||
|
|
|
@ -370,6 +370,13 @@ public class LinphonePreferences {
|
|||
prxCfg.setQualityReportingCollector(tempQualityReportingCollector);
|
||||
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){
|
||||
prxCfg.setDialPrefix(tempPrefix);
|
||||
}
|
||||
|
|
|
@ -264,6 +264,9 @@ public final class LinphoneService extends Service {
|
|||
if (LinphoneManager.isInstanciated())
|
||||
LinphoneManager.getInstance().subscribeFriendList(false);
|
||||
}
|
||||
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
|
||||
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enterBackground();
|
||||
}
|
||||
}
|
||||
|
||||
protected void onForegroundMode() {
|
||||
|
@ -272,6 +275,9 @@ public final class LinphoneService extends Service {
|
|||
if (LinphoneManager.isInstanciated())
|
||||
LinphoneManager.getInstance().subscribeFriendList(true);
|
||||
}
|
||||
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) {
|
||||
LinphoneManager.getLcIfManagerNotDestroyedOrNull().enterForeground();
|
||||
}
|
||||
}
|
||||
|
||||
private void setupActivityMonitor(){
|
||||
|
|
|
@ -415,7 +415,7 @@ public final class LinphoneUtils {
|
|||
String extension = LinphoneUtils.getExtensionFromFileName(path);
|
||||
if(extension != null)
|
||||
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) {
|
||||
|
@ -609,11 +609,7 @@ public final class LinphoneUtils {
|
|||
if ("com.android.externalstorage.documents".equals(uri.getAuthority())) {
|
||||
final String docId = DocumentsContract.getDocumentId(uri);
|
||||
final String[] split = docId.split(":");
|
||||
final String type = split[0];
|
||||
|
||||
if ("primary".equalsIgnoreCase(type)) {
|
||||
return Environment.getExternalStorageDirectory() + "/" + split[1];
|
||||
}
|
||||
if (split.length >= 1) return Environment.getExternalStorageDirectory() + "/" + split[1];
|
||||
|
||||
// TODO handle non-primary volumes
|
||||
}// Docs storage
|
||||
|
|
|
@ -240,7 +240,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
@Override
|
||||
public void onRegistrationStateChanged(Core lc, ProxyConfig proxy, RegistrationState state, String smessage) {
|
||||
AuthInfo authInfo = lc.findAuthInfo(proxy.getRealm(), proxy.getIdentityAddress().getUsername(), proxy.getDomain());
|
||||
|
||||
|
||||
refreshAccounts();
|
||||
|
||||
if(getResources().getBoolean(R.bool.use_phone_number_validation)
|
||||
|
@ -371,7 +371,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -424,6 +425,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
fragment = new ChatListFragment();
|
||||
break;
|
||||
case CREATE_CHAT:
|
||||
checkAndRequestWriteContactsPermission();
|
||||
fragment = new ChatCreationFragment();
|
||||
break;
|
||||
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) {
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString("SipUri", sipUri);
|
||||
|
||||
if (message != null)
|
||||
extras.putString("messageDraft", message);
|
||||
if (fileUri != null)
|
||||
|
@ -694,14 +697,15 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
extras.putString("PictureUri", pictureUri);
|
||||
extras.putString("ThumbnailUri", thumbnailUri);
|
||||
}
|
||||
if (sipUri == null && message == null && fileUri == null) {
|
||||
|
||||
if (sipUri == null) {
|
||||
changeCurrentFragment(FragmentsAvailable.CREATE_CHAT, extras);
|
||||
} else {
|
||||
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) {
|
||||
getFragmentManager().popBackStackImmediate();
|
||||
getFragmentManager().popBackStackImmediate();
|
||||
|
@ -710,23 +714,37 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
extras.putSerializable("selectedContacts", selectedContacts);
|
||||
extras.putString("subject", subject);
|
||||
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);
|
||||
}
|
||||
|
||||
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()) {
|
||||
Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2);
|
||||
if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.GROUP_CHAT && !emptyFragment) {
|
||||
GroupChatFragment chatFragment = (GroupChatFragment) fragment2;
|
||||
chatFragment.changeDisplayedChat(sipUri);
|
||||
} else {
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString("SipUri", sipUri);
|
||||
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
||||
}
|
||||
} else {
|
||||
Bundle extras = new Bundle();
|
||||
extras.putString("SipUri", sipUri);
|
||||
changeCurrentFragment(FragmentsAvailable.GROUP_CHAT, extras);
|
||||
}
|
||||
|
||||
|
@ -734,7 +752,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
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) {
|
||||
getFragmentManager().popBackStackImmediate();
|
||||
getFragmentManager().popBackStackImmediate();
|
||||
|
@ -744,6 +762,14 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
extras.putBoolean("isEditionEnabled", isEditionEnabled);
|
||||
extras.putSerializable("ContactAddress", contacts);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -1255,7 +1281,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
int readContactsI = -1;
|
||||
for (int i = 0; i < permissions.length; i++) {
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -1528,17 +1555,24 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
|
|||
|
||||
public boolean onKeyDown(int keyCode, KeyEvent event) {
|
||||
if (keyCode == KeyEvent.KEYCODE_BACK) {
|
||||
if (currentFragment == FragmentsAvailable.DIALER
|
||||
|| currentFragment == FragmentsAvailable.CONTACTS_LIST
|
||||
|| currentFragment == FragmentsAvailable.HISTORY_LIST
|
||||
|| currentFragment == FragmentsAvailable.CHAT_LIST) {
|
||||
boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled();
|
||||
if (!isBackgroundModeActive) {
|
||||
stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||
finish();
|
||||
} else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) {
|
||||
switch(currentFragment) {
|
||||
case DIALER :
|
||||
case CONTACTS_LIST:
|
||||
case HISTORY_LIST:
|
||||
case CHAT_LIST:
|
||||
boolean isBackgroundModeActive = LinphonePreferences.instance().isBackgroundModeEnabled();
|
||||
if (!isBackgroundModeActive) {
|
||||
stopService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||
finish();
|
||||
} else if (LinphoneUtils.onKeyBackGoHome(this, keyCode, event)) {
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
case GROUP_CHAT:
|
||||
LinphoneActivity.instance().goToChatList();
|
||||
return true;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onKeyDown(keyCode, event);
|
||||
|
|
|
@ -677,7 +677,7 @@ private static AssistantActivity instance;
|
|||
|
||||
private void goToLinphoneActivity() {
|
||||
mPrefs.firstLaunchSuccessful();
|
||||
setResult(Activity.RESULT_OK, new Intent().putExtra("isNewProxyConfig", true));
|
||||
startActivity(new Intent().setClass(this, LinphoneActivity.class).putExtra("isNewProxyConfig", true));
|
||||
finish();
|
||||
}
|
||||
|
||||
|
|
|
@ -60,6 +60,7 @@ public class RemoteProvisioningFragment extends Fragment implements OnClickListe
|
|||
String url = remoteProvisioningUrl.getText().toString();
|
||||
AssistantActivity.instance().displayRemoteProvisioningInProgressDialog();
|
||||
LinphonePreferences.instance().setRemoteProvisioningUrl(url);
|
||||
LinphoneManager.getLc().getConfig().sync();
|
||||
LinphoneManager.getInstance().restartCore();
|
||||
AssistantActivity.instance().setCoreListener();
|
||||
}
|
||||
|
|
|
@ -71,6 +71,7 @@ import org.linphone.activities.LinphoneActivity;
|
|||
import org.linphone.activities.LinphoneGenericActivity;
|
||||
import org.linphone.core.Address;
|
||||
import org.linphone.core.Call;
|
||||
import org.linphone.core.CallListenerStub;
|
||||
import org.linphone.core.Call.State;
|
||||
import org.linphone.core.CallParams;
|
||||
import org.linphone.core.CallStats;
|
||||
|
@ -138,6 +139,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
private TimerTask mTask;
|
||||
private HashMap<String, String> mEncoderTexts;
|
||||
private HashMap<String, String> mDecoderTexts;
|
||||
private CallListenerStub mCallListener;
|
||||
private Call mCallDisplayedInStats;
|
||||
|
||||
private boolean oldIsSpeakerEnabled = false;
|
||||
|
||||
|
@ -229,7 +232,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
boolean remoteVideo = call.getRemoteParams().videoEnabled();
|
||||
boolean localVideo = call.getCurrentParams().videoEnabled();
|
||||
boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests();
|
||||
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !(LinphoneManager.getLc().getConference() != null)) {
|
||||
if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) {
|
||||
showAcceptCallUpdateDialog();
|
||||
createTimerForDialog(SECONDS_BEFORE_DENYING_CALL_UPDATE);
|
||||
}
|
||||
|
@ -591,7 +594,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
private void enableAndRefreshInCallActions() {
|
||||
int confsize = 0;
|
||||
|
||||
if( LinphoneManager.getLc().getConference() != null) {
|
||||
if(LinphoneManager.getLc().isInConference()) {
|
||||
confsize = LinphoneManager.getLc().getConferenceSize() - (LinphoneManager.getLc().getConference() != null ? 1 : 0);
|
||||
}
|
||||
|
||||
|
@ -951,7 +954,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
|
||||
if (currentCall != null) {
|
||||
lc.terminateCall(currentCall);
|
||||
} else if (lc.getConference() != null) {
|
||||
} else if (lc.isInConference()) {
|
||||
lc.terminateConference();
|
||||
} else {
|
||||
lc.terminateAllCalls();
|
||||
|
@ -1143,6 +1146,9 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
private void showAcceptCallUpdateDialog() {
|
||||
dialog = new Dialog(this);
|
||||
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));
|
||||
d.setAlpha(200);
|
||||
dialog.setContentView(R.layout.dialog);
|
||||
|
@ -1409,7 +1415,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
}
|
||||
|
||||
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));
|
||||
|
||||
//MultiCalls
|
||||
|
@ -1486,7 +1492,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
private void exitConference(final Call call){
|
||||
Core lc = LinphoneManager.getLc();
|
||||
|
||||
if (call.getConference() != null) {
|
||||
if (lc.isInConference()) {
|
||||
lc.removeFromConference(call);
|
||||
if (lc.getConferenceSize() <= 1) {
|
||||
lc.leaveConference();
|
||||
|
@ -1503,7 +1509,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
Core lc = LinphoneManager.getLc();
|
||||
conferenceStatus = (ImageView) findViewById(R.id.conference_pause);
|
||||
if(conferenceStatus != null) {
|
||||
if (lc.getConference() != null) {
|
||||
if (lc.isInConference()) {
|
||||
conferenceStatus.setImageResource(R.drawable.pause_big_over_selected);
|
||||
lc.leaveConference();
|
||||
} else {
|
||||
|
@ -1670,9 +1676,16 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
}
|
||||
|
||||
public void initCallStatsRefresher(final Call call, final View view) {
|
||||
if (mCallDisplayedInStats == call) return;
|
||||
|
||||
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 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 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();
|
||||
mTask = new TimerTask() {
|
||||
|
@ -1727,7 +1750,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList
|
|||
public void run() {
|
||||
if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() == null) return;
|
||||
synchronized(LinphoneManager.getLc()) {
|
||||
if (LinphoneActivity.isInstanciated()) {
|
||||
if (LinphoneActivity.isInstanciated() && call.getState() != Call.State.Released) {
|
||||
CallParams params = call.getCurrentParams();
|
||||
if (params != null) {
|
||||
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);
|
||||
}
|
||||
|
||||
|
|
|
@ -41,11 +41,13 @@ import org.linphone.LinphoneManager;
|
|||
import org.linphone.LinphonePreferences;
|
||||
import org.linphone.contacts.ContactAddress;
|
||||
import org.linphone.contacts.ContactsManager;
|
||||
import org.linphone.contacts.LinphoneNumberOrAddress;
|
||||
import org.linphone.contacts.SearchContactsListAdapter;
|
||||
import org.linphone.core.Address;
|
||||
import org.linphone.core.ChatRoom;
|
||||
import org.linphone.core.ChatRoomListenerStub;
|
||||
import org.linphone.core.Core;
|
||||
import org.linphone.core.Factory;
|
||||
import org.linphone.core.ProxyConfig;
|
||||
import org.linphone.mediastream.Log;
|
||||
import org.linphone.ui.ContactSelectView;
|
||||
|
@ -74,6 +76,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
private String mChatRoomSubject, mChatRoomAddress;
|
||||
private ChatRoom mChatRoom;
|
||||
private ChatRoomListenerStub mChatRoomCreationListener;
|
||||
private Bundle mShareInfos;
|
||||
|
||||
@Override
|
||||
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) {
|
||||
if (newState == ChatRoom.State.Created) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
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;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResume() {
|
||||
ContactsManager.addContactsListener(this);
|
||||
super.onResume();
|
||||
|
||||
InputMethodManager inputMethodManager = (InputMethodManager) getActivity().getSystemService(INPUT_METHOD_SERVICE);
|
||||
|
@ -202,6 +222,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
if (mChatRoom != null) {
|
||||
mChatRoom.removeListener(mChatRoomCreationListener);
|
||||
}
|
||||
ContactsManager.removeContactsListener(this);
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
@ -249,16 +270,30 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
|
||||
private int getIndexOfCa(ContactAddress ca, List<ContactAddress> caList) {
|
||||
for (int i = 0 ; i < caList.size() ; i++) {
|
||||
if (caList.get(i).getAddressAsDisplayableString().compareTo(ca.getAddressAsDisplayableString()) == 0)
|
||||
return i;
|
||||
if (ca.getAddress() != null && ca.getAddress().getUsername() != null) {
|
||||
if (caList.get(i).getAddressAsDisplayableString().compareTo(ca.getAddressAsDisplayableString()) == 0)
|
||||
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;
|
||||
}
|
||||
|
||||
private void resetAndResearch() {
|
||||
ContactsManager.getInstance().getMagicSearch().resetSearchCache();
|
||||
mSearchAdapter.searchContacts(mSearchField.getText().toString(), mContactsList);
|
||||
}
|
||||
|
||||
private void addSelectedContactAddress(ContactAddress ca) {
|
||||
View viewContact = LayoutInflater.from(LinphoneActivity.instance()).inflate(R.layout.contact_selected, 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 {
|
||||
((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddressAsDisplayableString());
|
||||
}
|
||||
|
@ -323,6 +358,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
mLinphoneContactsButton.setEnabled(true);
|
||||
mLinphoneContactsSelected.setVisibility(View.INVISIBLE);
|
||||
updateList();
|
||||
resetAndResearch();
|
||||
} else if (id == R.id.linphone_contacts) {
|
||||
mSearchAdapter.setOnlySipContact(true);
|
||||
mLinphoneContactsSelected.setVisibility(View.VISIBLE);
|
||||
|
@ -330,6 +366,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
mAllContactsButton.setEnabled(mOnlyDisplayLinphoneContacts = true);
|
||||
mAllContactsSelected.setVisibility(View.INVISIBLE);
|
||||
updateList();
|
||||
resetAndResearch();
|
||||
} else if (id == R.id.back) {
|
||||
if (LinphoneActivity.instance().isTablet()) {
|
||||
LinphoneActivity.instance().goToChatList();
|
||||
|
@ -353,17 +390,17 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
mChatRoom.addParticipant(participant);
|
||||
} else {
|
||||
chatRoom = lc.getChatRoom(participant);
|
||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||
}
|
||||
} else {
|
||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||
}
|
||||
} else {
|
||||
mContactsSelectedLayout.removeAllViews();
|
||||
LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false);
|
||||
LinphoneActivity.instance().goToChatGroupInfos(null, mContactsSelected, null, true, false, mShareInfos);
|
||||
}
|
||||
} else {
|
||||
LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true);
|
||||
LinphoneActivity.instance().goToChatGroupInfos(mChatRoomAddress, mContactsSelected, mChatRoomSubject, true, true, mShareInfos);
|
||||
}
|
||||
} else if (id == R.id.clearSearchField) {
|
||||
mSearchField.setText("");
|
||||
|
@ -381,7 +418,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||
if (lpc == null || lpc.getConferenceFactoryUri() == null) {
|
||||
ChatRoom chatRoom = lc.getChatRoom(ca.getAddress());
|
||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||
} else {
|
||||
removeContactFromSelection(ca);
|
||||
}
|
||||
|
@ -389,6 +426,6 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
|
|||
|
||||
@Override
|
||||
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() {
|
||||
@Override
|
||||
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);
|
||||
}else{
|
||||
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();
|
||||
if (adapter != null && adapter.getItemCount() > 0) {
|
||||
ChatRoom room = (ChatRoom) adapter.getItem(0);
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||
} else {
|
||||
LinphoneActivity.instance().displayEmptyFragment();
|
||||
}
|
||||
|
@ -403,11 +403,9 @@ public class ChatListFragment extends Fragment implements ContactsUpdatedListene
|
|||
lc.removeListener(mListener);
|
||||
}
|
||||
ContactsManager.removeContactsListener(this);
|
||||
|
||||
|
||||
|
||||
mChatRoomsAdapter.clear();
|
||||
super.onPause();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -320,13 +320,6 @@ public class ChatRoomsAdapter extends SelectableAdapter<ChatRoomsAdapter.ChatRoo
|
|||
* Adapter's methods
|
||||
*/
|
||||
|
||||
// oldVersion, kept in case of calls from other classes
|
||||
// @Override
|
||||
// public int getCount() {
|
||||
// return mRooms.size();
|
||||
// }
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
|
@ -340,5 +333,6 @@ public class ChatRoomsAdapter extends SelectableAdapter<ChatRoomsAdapter.ChatRoo
|
|||
@Override
|
||||
public long getItemId(int position) {
|
||||
return position;
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -69,7 +69,6 @@ import org.linphone.core.ChatRoomCapabilities;
|
|||
import org.linphone.core.ChatRoomListener;
|
||||
import org.linphone.core.Content;
|
||||
import org.linphone.core.Core;
|
||||
import org.linphone.core.Event;
|
||||
import org.linphone.core.EventLog;
|
||||
import org.linphone.core.Factory;
|
||||
import org.linphone.core.LimeState;
|
||||
|
@ -160,10 +159,10 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
|||
String displayName = LinphoneUtils.getAddressDisplayName(a);
|
||||
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);
|
||||
}
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
||||
|
@ -290,7 +308,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
|||
if (LinphoneUtils.isExtensionImage(fileToUploadPath)) {
|
||||
addImageToPendingList(fileToUploadPath);
|
||||
} else {
|
||||
if (fileToUploadPath.startsWith("content://")) {
|
||||
if (fileToUploadPath.startsWith("content://") || fileToUploadPath.startsWith("file://")) {
|
||||
fileToUploadPath = LinphoneUtils.getFilePath(this.getActivity().getApplicationContext(), Uri.parse(fileToUploadPath));
|
||||
} else if (fileToUploadPath.contains("com.android.contacts/contacts/")) {
|
||||
fileToUploadPath = LinphoneUtils.getCVSPathFromLookupUri(fileToUploadPath).toString();
|
||||
|
@ -369,28 +387,29 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
|||
ChatMessage message = event.getChatMessage();
|
||||
String messageId = message.getMessageId();
|
||||
|
||||
switch(item.getItemId()) {
|
||||
case R.id.resend:
|
||||
mEventsAdapter.removeItem(info.position);
|
||||
message.resend();
|
||||
return true;
|
||||
case R.id.imdn_infos:
|
||||
LinphoneActivity.instance().goToChatMessageImdnInfos(getRemoteSipUri(), messageId);
|
||||
return true;
|
||||
case R.id.copy_text:
|
||||
if (message.hasTextContent()) {
|
||||
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
ClipData clip = ClipData.newPlainText("Message", message.getTextContent());
|
||||
clipboard.setPrimaryClip(clip);
|
||||
}
|
||||
return true;
|
||||
case R.id.delete_message:
|
||||
mChatRoom.deleteMessage(message);
|
||||
mEventsAdapter.removeItem(info.position);
|
||||
return true;
|
||||
default:
|
||||
return super.onContextItemSelected(item);
|
||||
if (item.getItemId() == R.id.resend) {
|
||||
mEventsAdapter.removeItem(info.position);
|
||||
message.resend();
|
||||
return true;
|
||||
}
|
||||
if (item.getItemId() == R.id.imdn_infos) {
|
||||
LinphoneActivity.instance().goToChatMessageImdnInfos(getRemoteSipUri(), messageId);
|
||||
return true;
|
||||
}
|
||||
if (item.getItemId() == R.id.copy_text) {
|
||||
if (message.hasTextContent()) {
|
||||
ClipboardManager clipboard = (ClipboardManager) getActivity().getSystemService(Context.CLIPBOARD_SERVICE);
|
||||
ClipData clip = ClipData.newPlainText("Message", message.getTextContent());
|
||||
clipboard.setPrimaryClip(clip);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
if (item.getItemId() == R.id.delete_message) {
|
||||
mChatRoom.deleteMessage(message);
|
||||
mEventsAdapter.removeItem(info.position);
|
||||
return true;
|
||||
}
|
||||
return super.onContextItemSelected(item);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -473,7 +492,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
|||
//TODO error
|
||||
return;
|
||||
}
|
||||
Address proxyConfigContact = core.getDefaultProxyConfig().getContact();
|
||||
Address proxyConfigContact = (core.getDefaultProxyConfig() != null) ? core.getDefaultProxyConfig().getContact() : null;
|
||||
if (proxyConfigContact != null) {
|
||||
mChatRoom = core.findOneToOneChatRoom(proxyConfigContact, mRemoteSipAddress);
|
||||
}
|
||||
|
@ -697,7 +716,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
|||
public void onConferenceAddressGeneration(ChatRoom cr) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onParticipantDeviceFetchRequested(ChatRoom cr, Address addr) {
|
||||
|
||||
|
@ -705,7 +724,7 @@ public class GroupChatFragment extends Fragment implements ChatRoomListener, Con
|
|||
@Override
|
||||
public void onParticipantRegistrationSubscriptionRequested(ChatRoom cr, Address participantAddr){
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onParticipantRegistrationUnsubscriptionRequested(ChatRoom cr, Address participantAddr){
|
||||
}
|
||||
|
@ -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
|
||||
public void onChatMessageReceived(ChatRoom cr, EventLog event) {
|
||||
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
|
||||
public void onParticipantAdminStatusChanged(ChatRoom cr, EventLog event) {
|
||||
mEventsAdapter.addToHistory(event);
|
||||
|
|
|
@ -85,7 +85,8 @@ public class GroupInfoAdapter extends BaseAdapter {
|
|||
final LinearLayout isAdmin = view.findViewById(R.id.isAdminLayout);
|
||||
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()) {
|
||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), avatar, c.getThumbnailUri());
|
||||
}
|
||||
|
|
|
@ -72,6 +72,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
private ChatRoom mChatRoom, mTempChatRoom;
|
||||
private Dialog mAdminStateChangedDialog;
|
||||
private ChatRoomListenerStub mChatRoomCreationListener;
|
||||
private Bundle mShareInfos;
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||
|
@ -118,18 +119,30 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
mParticipantsList.setAdapter(mAdapter);
|
||||
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.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View view) {
|
||||
if (mIsAlreadyCreatedGroup) {
|
||||
if (LinphoneActivity.instance().isTablet()) {
|
||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asStringUriOnly(), mShareInfos);
|
||||
} else {
|
||||
getFragmentManager().popBackStack();
|
||||
}
|
||||
} 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) {
|
||||
if (mChatRoom != null) {
|
||||
mChatRoom.leave();
|
||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString());
|
||||
LinphoneActivity.instance().goToChat(mGroupChatRoomAddress.asString(), null);
|
||||
} else {
|
||||
Log.e("Can't leave, chatRoom for address " + mGroupChatRoomAddress.asString() + " is null...");
|
||||
}
|
||||
|
@ -174,7 +187,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
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() {
|
||||
@Override
|
||||
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
|
||||
getFragmentManager().popBackStack();
|
||||
getFragmentManager().popBackStack();
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), mShareInfos);
|
||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
LinphoneActivity.instance().displayChatRoomError();
|
||||
|
@ -289,7 +302,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
toAdd.toArray(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);
|
||||
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);
|
||||
}
|
||||
|
||||
|
@ -382,6 +395,14 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
mAdminStateChangedDialog.show();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConferenceJoined(ChatRoom cr, EventLog event_log) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConferenceLeft(ChatRoom cr, EventLog event_log) {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onParticipantAdded(ChatRoom cr, EventLog event_log) {
|
||||
refreshParticipantsList();
|
||||
|
@ -458,16 +479,11 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAllInformationReceived(ChatRoom cr) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onParticipantDeviceFetchRequested(ChatRoom cr, Address addr) {
|
||||
|
||||
|
@ -475,7 +491,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
|
|||
@Override
|
||||
public void onParticipantRegistrationSubscriptionRequested(ChatRoom cr, Address participantAddr){
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onParticipantRegistrationUnsubscriptionRequested(ChatRoom cr, Address participantAddr){
|
||||
}
|
||||
|
|
|
@ -88,7 +88,7 @@ public class ImdnFragment extends Fragment {
|
|||
@Override
|
||||
public void onClick(View view) {
|
||||
if (LinphoneActivity.instance().isTablet()) {
|
||||
LinphoneActivity.instance().goToChat(mRoomUri);
|
||||
LinphoneActivity.instance().goToChat(mRoomUri, null);
|
||||
} else {
|
||||
LinphoneActivity.instance().onBackPressed();
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ public class ContactAddress implements Serializable {
|
|||
private LinphoneContact contact;
|
||||
private SearchResult result;
|
||||
private String address;
|
||||
private String phoneNumber;
|
||||
private boolean isLinphoneContact;
|
||||
private boolean isSelect = false;
|
||||
private boolean isAdmin = false;
|
||||
|
@ -69,11 +70,13 @@ public class ContactAddress implements Serializable {
|
|||
}
|
||||
|
||||
public String getAddressAsDisplayableString() {
|
||||
Address addr = getAddress();
|
||||
if (addr != null && addr.getUsername() != null) return addr.asStringUriOnly();
|
||||
return address;
|
||||
}
|
||||
|
||||
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);
|
||||
// Remove the user=phone URI param if existing, it will break everything otherwise
|
||||
if (addr.hasUriParam("user")) {
|
||||
|
@ -82,6 +85,30 @@ public class ContactAddress implements Serializable {
|
|||
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) {
|
||||
isSelect = select;
|
||||
}
|
||||
|
@ -90,16 +117,19 @@ public class ContactAddress implements Serializable {
|
|||
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.address = a;
|
||||
this.phoneNumber = pn;
|
||||
this.isLinphoneContact = isLC;
|
||||
}
|
||||
|
||||
public ContactAddress(LinphoneContact c, String a, boolean isLC, boolean isAdmin){
|
||||
this.contact = c;
|
||||
this.address = a;
|
||||
this.isLinphoneContact = isLC;
|
||||
public ContactAddress(LinphoneContact c, String a, String pn, boolean isLC) {
|
||||
init(c, a, pn, isLC);
|
||||
}
|
||||
|
||||
public ContactAddress(LinphoneContact c, String a, String pn, boolean isLC, boolean isAdmin) {
|
||||
init(c, a, pn, isLC);
|
||||
this.isAdmin = isAdmin;
|
||||
}
|
||||
|
||||
|
|
|
@ -77,7 +77,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
|||
Address participant = Factory.instance().createAddress(tag);
|
||||
ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
|
||||
if (room != null) {
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||
} else {
|
||||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
|
||||
|
@ -87,7 +87,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener
|
|||
mChatRoom.addParticipant(participant);
|
||||
} else {
|
||||
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) {
|
||||
if (newState == ChatRoom.State.Created) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), null);
|
||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
LinphoneActivity.instance().displayChatRoomError();
|
||||
|
|
|
@ -264,11 +264,20 @@ public class ContactsManager extends ContentObserver {
|
|||
}
|
||||
|
||||
public synchronized void setContacts(List<LinphoneContact> c) {
|
||||
contacts = c;
|
||||
if (contacts.isEmpty() || contacts.size() > c.size()) {
|
||||
contacts = c;
|
||||
} else {
|
||||
for (LinphoneContact contact : c) {
|
||||
if (!contacts.contains(contact)) {
|
||||
contacts.add(contact);
|
||||
}
|
||||
}
|
||||
}
|
||||
Collections.sort(contacts);
|
||||
}
|
||||
|
||||
public synchronized void setSipContacts(List<LinphoneContact> c) {
|
||||
if (sipContacts.isEmpty()) {
|
||||
if (sipContacts.isEmpty() || sipContacts.size() > c.size()) {
|
||||
sipContacts = c;
|
||||
} else {
|
||||
for (LinphoneContact contact : c) {
|
||||
|
@ -277,6 +286,7 @@ public class ContactsManager extends ContentObserver {
|
|||
}
|
||||
}
|
||||
}
|
||||
Collections.sort(sipContacts);
|
||||
}
|
||||
|
||||
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");
|
||||
}
|
||||
|
||||
Collections.sort(contacts);
|
||||
Collections.sort(sipContacts);
|
||||
setContacts(contacts);
|
||||
setSipContacts(sipContacts);
|
||||
|
||||
|
|
|
@ -75,6 +75,13 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
|||
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) {
|
||||
fullName = name;
|
||||
}
|
||||
|
|
|
@ -40,13 +40,20 @@ public class LinphoneNumberOrAddress implements Serializable, Comparable<Linphon
|
|||
|
||||
@Override
|
||||
public int compareTo(LinphoneNumberOrAddress noa) {
|
||||
if (noa.isSIPAddress() == isSIPAddress()) {
|
||||
if (noa.isSIPAddress() == isSIPAddress() && noa.getValue() != null) {
|
||||
return noa.getValue().compareTo(getValue());
|
||||
} else {
|
||||
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() {
|
||||
return isSIPAddress;
|
||||
}
|
||||
|
|
|
@ -33,6 +33,8 @@ import org.linphone.LinphoneUtils;
|
|||
import org.linphone.R;
|
||||
import org.linphone.activities.LinphoneActivity;
|
||||
import org.linphone.core.Address;
|
||||
import org.linphone.core.Factory;
|
||||
import org.linphone.core.ProxyConfig;
|
||||
import org.linphone.core.SearchResult;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
@ -62,7 +64,6 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
private ProgressBar progressBar;
|
||||
private boolean mOnlySipContact = false;
|
||||
private View.OnClickListener listener;
|
||||
private int oldSize;
|
||||
|
||||
public List<ContactAddress> getContacts() {
|
||||
return contacts;
|
||||
|
@ -81,14 +82,18 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
progressBar = pB;
|
||||
setContactsSelectedList(null);
|
||||
setContactsList(contactsList);
|
||||
oldSize = 0;
|
||||
}
|
||||
|
||||
private boolean contactIsSelected(ContactAddress ca) {
|
||||
for (ContactAddress c : contactsSelected) {
|
||||
Address addr = c.getAddress();
|
||||
if (addr == null) continue;
|
||||
if (addr.asStringUriOnly().compareTo(ca.getAddress().asStringUriOnly()) == 0) return true;
|
||||
if (addr.getUsername() != null && ca.getAddress() != null) {
|
||||
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;
|
||||
}
|
||||
|
@ -122,11 +127,18 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
for (LinphoneContact contact : contacts) {
|
||||
for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) {
|
||||
if (!mOnlySipContact || (mOnlySipContact && (noa.isSIPAddress() || contact.getPresenceModelForUriOrTel(noa.getValue()) != null))) {
|
||||
Address address = LinphoneManager.getLc().interpretUrl(noa.getValue());
|
||||
if (address != null) {
|
||||
ContactAddress ca = new ContactAddress(contact, address.asString(), contact.isFriend());
|
||||
list.add(ca);
|
||||
ContactAddress ca = null;
|
||||
if (noa.isSIPAddress()) {
|
||||
Address address = LinphoneManager.getLc().interpretUrl(noa.getValue());
|
||||
if (address != null) {
|
||||
ca = new ContactAddress(contact, address.asString(), "", contact.isFriend());
|
||||
}
|
||||
} 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) {
|
||||
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<>();
|
||||
|
||||
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) {
|
||||
boolean found = false;
|
||||
LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(sr.getAddress());
|
||||
if (contact == null) {
|
||||
contact = new LinphoneContact();
|
||||
|
@ -176,25 +181,26 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
contact.refresh();
|
||||
}
|
||||
}
|
||||
if (sr.getAddress() != null) {
|
||||
if (contact.getFullName() == null) {
|
||||
contact.setFullName(search);
|
||||
}
|
||||
|
||||
boolean found = false;
|
||||
if (sr.getAddress() != null || sr.getPhoneNumber() != null) {
|
||||
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;
|
||||
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;
|
||||
resultContactsSearch.setAdapter(this);
|
||||
this.notifyDataSetChanged();
|
||||
|
@ -215,7 +221,7 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
}
|
||||
|
||||
ContactAddress contact = getItem(position);
|
||||
final String a = contact.getAddressAsDisplayableString();
|
||||
final String a = (contact.getAddressAsDisplayableString().isEmpty()) ? contact.getPhoneNumber() : contact.getAddressAsDisplayableString();
|
||||
LinphoneContact c = contact.getContact();
|
||||
|
||||
holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());
|
||||
|
@ -223,11 +229,24 @@ public class SearchContactsListAdapter extends BaseAdapter {
|
|||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.avatar, c.getThumbnailUri());
|
||||
}
|
||||
|
||||
String address = null;
|
||||
String address = contact.getAddressAsDisplayableString();
|
||||
if (c != null && c.getFullName() != null) {
|
||||
address = c.getPresenceModelForUriOrTel(a);
|
||||
if (address == null)
|
||||
address = c.getPresenceModelForUriOrTel(a);
|
||||
holder.name.setVisibility(View.VISIBLE);
|
||||
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 {
|
||||
holder.name.setVisibility(View.GONE);
|
||||
}
|
||||
|
|
|
@ -39,6 +39,7 @@ public class FirebaseMessaging extends FirebaseMessagingService {
|
|||
android.util.Log.i("FirebaseMessaging","[Push Notification] Received");
|
||||
|
||||
if (!LinphoneService.isReady()) {
|
||||
android.util.Log.i("FirebaseMessaging","[Push Notification] Starting Service");
|
||||
startService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class));
|
||||
} else if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() == 0) {
|
||||
LinphoneUtils.dispatchOnUIThread(new Runnable(){
|
||||
|
|
|
@ -40,6 +40,8 @@ import android.app.AlertDialog;
|
|||
import android.app.ProgressDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.graphics.drawable.ColorDrawable;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
import android.preference.CheckBoxPreference;
|
||||
import android.preference.EditTextPreference;
|
||||
|
@ -49,6 +51,7 @@ import android.preference.Preference.OnPreferenceChangeListener;
|
|||
import android.preference.Preference.OnPreferenceClickListener;
|
||||
import android.preference.PreferenceCategory;
|
||||
import android.preference.PreferenceScreen;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.WindowManager;
|
||||
|
@ -350,7 +353,7 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
|||
accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl());
|
||||
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);
|
||||
username.setOnPreferenceChangeListener(usernameChangedListener);
|
||||
if (!isNewAccount){
|
||||
|
@ -485,8 +488,10 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
|||
mainAccount.setEnabled(!mainAccount.isChecked());
|
||||
}
|
||||
|
||||
//final AccountCreatorListener fragment = this;
|
||||
|
||||
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.setOnPreferenceClickListener(new OnPreferenceClickListener() {
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
|
@ -501,15 +506,19 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
|||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
/*alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
|
||||
alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
AccountCreator.PasswordStatus status = accountCreator.setPassword(pass1.getText().toString());
|
||||
if (status.equals(AccountCreator.PasswordStatus.Ok)) {
|
||||
if (pass1.getText().toString().compareTo(pass2.getText().toString()) == 0) {
|
||||
accountCreator.setUsername(mPrefs.getAccountUsername(n));
|
||||
accountCreator.setDomain(mPrefs.getAccountDomain(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)) {
|
||||
LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(req_status)
|
||||
, LinphoneActivity.instance());
|
||||
|
@ -532,14 +541,14 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen
|
|||
}
|
||||
});*/ // TODO FIXME
|
||||
|
||||
alert.setView(layout);
|
||||
/*alert.setView(layout);
|
||||
alert.show();
|
||||
return true;
|
||||
}
|
||||
});
|
||||
} else {
|
||||
} else {*/
|
||||
changePassword.setEnabled(false);
|
||||
}
|
||||
//}
|
||||
|
||||
final Preference delete = manage.getPreference(3);
|
||||
delete.setEnabled(!isNewAccount);
|
||||
|
|
|
@ -109,7 +109,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
|||
public void onStateChanged(ChatRoom cr, ChatRoom.State newState) {
|
||||
if (newState == ChatRoom.State.Created) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(cr.getPeerAddress().asStringUriOnly(), null);
|
||||
} else if (newState == ChatRoom.State.CreationFailed) {
|
||||
mWaitLayout.setVisibility(View.GONE);
|
||||
LinphoneActivity.instance().displayChatRoomError();
|
||||
|
@ -199,7 +199,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
|||
Address participant = Factory.instance().createAddress(sipUri);
|
||||
ChatRoom room = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
|
||||
if (room != null) {
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||
} else {
|
||||
ProxyConfig lpc = lc.getDefaultProxyConfig();
|
||||
if (lpc != null && lpc.getConferenceFactoryUri() != null && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) {
|
||||
|
@ -209,7 +209,7 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
|
|||
mChatRoom.addParticipant(participant);
|
||||
} else {
|
||||
room = lc.getChatRoom(participant);
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly());
|
||||
LinphoneActivity.instance().goToChat(room.getPeerAddress().asStringUriOnly(), null);
|
||||
}
|
||||
}
|
||||
} 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);
|
||||
String displayName = null;
|
||||
final String sipUri = address.asString();
|
||||
final String sipUri = (address != null) ? address.asString() : "";
|
||||
if (c != null) {
|
||||
displayName = c.getFullName();
|
||||
LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, c.getThumbnailUri());
|
||||
|
|
|
@ -840,6 +840,12 @@ public class SettingsFragment extends PreferencesListFragment {
|
|||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
boolean enable = (Boolean) newValue;
|
||||
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;
|
||||
}
|
||||
});
|
||||
|
|
|
@ -402,6 +402,9 @@ public class StatusFragment extends Fragment {
|
|||
|
||||
ZRTPdialog = new Dialog(getActivity());
|
||||
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));
|
||||
d.setAlpha(200);
|
||||
ZRTPdialog.setContentView(R.layout.dialog);
|
||||
|
|
|
@ -64,9 +64,11 @@ public class ListSelectionHelper {
|
|||
mEditButton.setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
mAdapter.enableEdition(true);
|
||||
mTopBar.setVisibility(View.GONE);
|
||||
mEditTopBar.setVisibility(View.VISIBLE);
|
||||
if (mAdapter.getCount() > 0) {
|
||||
mAdapter.enableEdition(true);
|
||||
mTopBar.setVisibility(View.GONE);
|
||||
mEditTopBar.setVisibility(View.VISIBLE);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -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
|
9050
submodules/externals/sqlite3/shell.c
vendored
9050
submodules/externals/sqlite3/shell.c
vendored
File diff suppressed because it is too large
Load diff
12299
submodules/externals/sqlite3/sqlite3.c
vendored
12299
submodules/externals/sqlite3/sqlite3.c
vendored
File diff suppressed because it is too large
Load diff
658
submodules/externals/sqlite3/sqlite3.h
vendored
658
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*));
|
||||
void (*result_pointer)(sqlite3_context*,void*,const char*,void(*)(void*));
|
||||
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_result_pointer sqlite3_api->result_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) */
|
||||
|
||||
#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