Merge remote-tracking branch 'public/master' into obiane

This commit is contained in:
Brieuc Viel 2016-04-11 16:25:40 +02:00
commit 79cac9f3cd
176 changed files with 8008 additions and 2644 deletions

3
.gitignore vendored
View file

@ -14,6 +14,7 @@ default.properties
doc
gen
liblinphone-junit-report.xml
liblinphone-sdk
liblinphonetester_*.zip
libs
linphone-android.iml
@ -21,6 +22,7 @@ linphone-junit-report*.xml
linphonetester_*.zip
lint.xml
local.properties
Makefile
obj
proguard-project.txt
project.properties
@ -42,3 +44,4 @@ liblinphone_tester/liblinphonetester_*
liblinphone_tester/tests.output
tests/linphonetester_*
tests/tests.output
WORK

20
.gitmodules vendored
View file

@ -62,9 +62,6 @@
[submodule "submodules/externals/axmlrpc"]
path = submodules/externals/axmlrpc
url = git://git.linphone.org/axmlrpc.git
[submodule "submodules/externals/polarssl"]
path = submodules/externals/polarssl
url = git://git.linphone.org/polarssl.git
[submodule "submodules/externals/opus"]
path = submodules/externals/opus
url = git://git.linphone.org/opus.git
@ -86,4 +83,19 @@
url = git://git.linphone.org/bctoolbox.git
[submodule "submodules/externals/mbedtls"]
path = submodules/externals/mbedtls
url = https://github.com/ARMmbed/mbedtls.git
url = git://git.linphone.org/mbedtls.git
[submodule "submodules/cmake-builder"]
path = submodules/cmake-builder
url = git://git.linphone.org/linphone-cmake-builder.git
[submodule "submodules/externals/bv16-floatingpoint"]
path = submodules/externals/bv16-floatingpoint
url = git://git.linphone.org/bv16-floatingpoint.git
[submodule "submodules/belr"]
path = submodules/belr
url = git://git.linphone.org/belr.git
[submodule "submodules/belcard"]
path = submodules/belcard
url = git://git.linphone.org/belcard.git
[submodule "submodules/externals/libmatroska-c"]
path = submodules/externals/libmatroska-c
url = git://git.linphone.org/libmatroska-c

View file

@ -2,7 +2,7 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.linphone"
android:versionCode="1002" android:installLocation="auto">
android:versionCode="3100" android:installLocation="auto">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="23"/>
<!-- Permissions for Push Notification -->
@ -109,7 +109,6 @@
<activity android:name=".CallActivity"
android:theme="@style/FullScreen"
android:noHistory="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@ -221,6 +220,13 @@
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
<activity android:name="org.linphone.tutorials.TutorialCardDavSync"
android:theme="@style/NoTitle">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
</intent-filter>
</activity>
</application>

534
Makefile
View file

@ -1,534 +0,0 @@
NDK_PATH=$(shell dirname `which ndk-build`)
NDK_MAJOR_VERSION=$(shell cat $(NDK_PATH)/RELEASE.TXT | sed "s/r\([0-9]\{1,2\}\).*/\1/")
SDK_PATH=$(shell dirname `which android`)
SDK_PLATFORM_TOOLS_PATH=$(shell dirname `which adb`)
ARM_COMPILER_PATH=`find "$(NDK_PATH)" -name "arm-linux-androideabi-gcc-4*" -print | tail -1`
ARM_TOOLCHAIN_PATH=$(shell dirname $(ARM_COMPILER_PATH))/arm-linux-androideabi-
X86_COMPILER_PATH=`find "$(NDK_PATH)" -name "i686-linux-android-gcc-4*" -print | tail -1`
X86_TOOLCHAIN_PATH=$(shell dirname $(X86_COMPILER_PATH))/i686-linux-android-
NUMCPUS=$(shell grep -c '^processor' /proc/cpuinfo 2>/dev/null || echo "4" )
TOPDIR=$(shell pwd)
LIBLINPHONE_VERSION=$(shell cd submodules/linphone && git describe --always)
LINPHONE_ANDROID_DEBUG_VERSION=$(shell git describe --always)
BELLESIP_VERSION_SCRIPT:=cat submodules/belle-sip/configure.ac | grep "AC_INIT(" | sed -e "s/.*belle-sip\]//" | sed -e "s/].*//" | sed -e "s/.*\[//"
BELLESIP_VERSION=$(shell $(BELLESIP_VERSION_SCRIPT))
ANDROID_MOST_RECENT_TARGET=$(shell android list target -c | grep -E 'android-[0-9]+' | tail -n1)
#We force target 19 because 21 creates binaries incompatible with older versions due to rand() function no longer inline (congrats to Google's developers)
NDKBUILD_TARGET=android-19
#The NDK target used to compile external third parties (ffmpeg, x264)
EXTERNAL_MAKE_TARGET=14
ARM_SYSROOT=${NDK_PATH}/platforms/android-$(EXTERNAL_MAKE_TARGET)/arch-arm
X86_SYSROOT=${NDK_PATH}/platforms/android-$(EXTERNAL_MAKE_TARGET)/arch-x86
SQLITE_VERSION=3071700
SQLITE_BASENAME=sqlite-amalgamation-$(SQLITE_VERSION)
SQLITE_URL=http://www.sqlite.org/2013/$(SQLITE_BASENAME).zip
ENABLE_GPL_THIRD_PARTIES=1
#override CC variable to disable compiler specific FLAGS in configure using the system compiler instead of the android one
CC=
PACKAGE_NAME=$(shell sed -nE 's|<property name="linphone.package.name" value="(.*)" />|\1|p' custom_rules.xml)
#default options, can be overidden using make OPTION=value .
ifeq ($(ENABLE_GPL_THIRD_PARTIES),1)
BUILD_G729=1
else
#x264 and g729 requires additional licensing agreements.
BUILD_X264=0
BUILD_G729=0
endif
NDK_DEBUG=0
BUILD_VIDEO=1
BUILD_OPENH264=1
BUILD_NON_FREE_CODECS=1
ENABLE_OPENH264_DECODER=1
BUILD_UPNP=1
BUILD_AMRNB=full # 0, light or full
BUILD_AMRWB=0 # Has text relocation issue, don't use when targetting API 23 for now
BUILD_ZRTP=1
BUILD_SILK=1
BUILD_TUNNEL=0
BUILD_WEBRTC_AECM=1
BUILD_OPUS=1
BUILD_MATROSKA=1
BUILD_WEBRTC_ISAC=1
BUILD_FOR_X86=1
BUILD_FOR_ARM=1
USE_JAVAH=1
BUILD_TLS=1
BUILD_SQLITE=1
BUILD_CONTACT_HEADER=0
BUILD_RTP_MAP=0
BUILD_DONT_CHECK_HEADERS_IN_MESSAGE=0
BUILD_ILBC=1
BUILD_CODEC2=0
BUILD_BCTOOLBOX_MBEDTLS=0
LIBLINPHONE_EXTENDED_SRC_FILES=
LIBLINPHONE_EXTENDED_C_INCLUDES=
LIBLINPHONE_EXTENDED_CFLAGS=
APP_STL=stlport_static
ANT_SILENT=$(shell ant -h | grep -q -- -S && echo 1 || echo 0)
# Checks
CHECK_MSG=$(shell ./check_tools.sh)
ifneq ($(CHECK_MSG),)
$(error Some tools are missing.)
else
ifeq ($(BUILD_OPENH264),1)
ifneq ($(shell echo $(NDK_MAJOR_VERSION)\>=10 | bc),1)
$(error ndk version [$(NDK_MAJOR_VERSION)] not compatible with openh264.)
endif
endif
include check_tools.mk
endif
OPENSSL_DIR=$(shell openssl version -d | sed "s/OPENSSLDIR: \"\(.*\)\"/\1/")
ifneq ($(shell ls $(OPENSSL_DIR)/certs),)
HTTPS_CA_DIR=$(OPENSSL_DIR)/certs
else
HTTPS_CA_DIR=$(OPENSSL_DIR)
endif
ifeq ($(ANT_SILENT), 1)
ANT=ant -e -S
else
ANT=ant -e
endif
# Temporary check: in case of MediastreamActivity.java file existing while it should not anymore, print an error message
# and abort build since otherwise java compilation will fail.
ifneq ($(shell ls ./submodules/linphone/mediastreamer2/java/src/org/linphone/mediastream/MediastreamerActivity.java 2>/dev/null),)
$(error ./submodules/linphone/mediastreamer2/java/src/org/linphone/mediastream/MediastreamerActivity.java found: please either remove it or move it to MediastreamActivity.java.ignored before continuing.)
endif
ifeq ($(BUILD_NON_FREE_CODECS), 0)
BUILD_OPENH264=0
ENABLE_OPENH264_DECODER=0
BUILD_AMRNB=0
BUILD_AMRWB=0
BUILD_G729=0
BUILD_X264=0
endif
all: update-project generate-apk
ifeq ($(ENABLE_GPL_THIRD_PARTIES),1)
@echo "***************************************************************************"
@echo "***** CAUTION, this liblinphone SDK is built using 3rd party GPL code *****"
@echo "***** Even if you acquired a proprietary license from Belledonne *****"
@echo "***** Communications, this SDK is GPL and GPL only. *****"
@echo "***** To disable 3rd party gpl code, please use: *****"
@echo "***** $$ make ENABLE_GPL_THIRD_PARTIES=0 *****"
@echo "***************************************************************************"
else
@echo
@echo "*****************************************************************"
@echo "***** Linphone SDK without 3rd party GPL software *****"
@echo "***** If you acquired a proprietary license from Belledonne *****"
@echo "***** Communications, this SDK can be used to create *****"
@echo "***** a proprietary linphone-based application. *****"
@echo "*****************************************************************"
endif
install: install-apk run-linphone
#ffmpeg
ifeq ($(BUILD_VIDEO),1)
BUILD_FFMPEG_DEPS=$(FFMPEG_SRC_DIR)/non_versioned_soname_patch_applied.txt $(FFMPEG_BUILD_DIR)/arm/libffmpeg-linphone-arm.so
ifeq ($(BUILD_FOR_X86), 1)
BUILD_FFMPEG_DEPS+=$(FFMPEG_BUILD_DIR)/x86/libffmpeg-linphone-x86.so
endif
endif
FFMPEG_SRC_DIR=$(TOPDIR)/submodules/externals/ffmpeg
FFMPEG_BUILD_DIR=$(TOPDIR)/submodules/externals/build/ffmpeg
FFMPEG_CONFIGURE_OPTIONS=--target-os=linux --enable-cross-compile --enable-runtime-cpudetect \
--disable-everything --disable-doc --disable-ffplay --disable-ffmpeg --disable-ffprobe --disable-ffserver \
--disable-avdevice --disable-avfilter --disable-avformat --disable-swresample --disable-network \
--enable-decoder=mjpeg --enable-encoder=mjpeg --enable-decoder=mpeg4 --enable-encoder=mpeg4 --enable-decoder=h264 \
--enable-decoder=h263p --enable-encoder=h263p --enable-decoder=h263 --enable-encoder=h263 --extra-cflags="-w" \
--disable-static --enable-shared --disable-symver
FFMPEG_ARM_CONFIGURE_OPTIONS=--build-suffix=-linphone-arm --arch=arm --sysroot=$(ARM_SYSROOT) --cross-prefix=$(ARM_TOOLCHAIN_PATH) --enable-pic
FFMPEG_X86_CONFIGURE_OPTIONS=--build-suffix=-linphone-x86 --arch=x86 --sysroot=$(X86_SYSROOT) --cross-prefix=$(X86_TOOLCHAIN_PATH) --disable-mmx --disable-sse2 --disable-ssse3 --extra-cflags='-O3'
$(FFMPEG_SRC_DIR)/non_versioned_soname_patch_applied.txt:
@patch -p0 < $(TOPDIR)/patches/ffmpeg_non_versioned_soname.patch
touch $@
$(FFMPEG_BUILD_DIR)/arm/config.h:
mkdir -p $(FFMPEG_BUILD_DIR)/arm && \
cd $(FFMPEG_BUILD_DIR)/arm && \
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_ARM_CONFIGURE_OPTIONS)
sed -i.bak 's/#define HAVE_SYSCTL 1/#define HAVE_SYSCTL 0/g' $(FFMPEG_BUILD_DIR)/arm/config.h
sed -i.bak 's/#define HAVE_GETHRTIME 1/#define HAVE_GETHRTIME 0/g' $(FFMPEG_BUILD_DIR)/arm/config.h
$(FFMPEG_BUILD_DIR)/arm/libavcodec/libavcodec-linphone-arm.so: $(FFMPEG_BUILD_DIR)/arm/config.h
cd $(FFMPEG_BUILD_DIR)/arm && \
make -j${NUMCPUS} \
|| ( echo "Build of ffmpeg for arm failed." ; exit 1 )
$(FFMPEG_BUILD_DIR)/arm/libffmpeg-linphone-arm.so: $(FFMPEG_BUILD_DIR)/arm/libavcodec/libavcodec-linphone-arm.so
cd $(FFMPEG_BUILD_DIR)/arm && \
rm libavcodec/log2_tab.o && \
$(ARM_TOOLCHAIN_PATH)gcc -lm -lz --sysroot=$(ARM_SYSROOT) -Wl,-soname,libffmpeg-linphone-arm.so,--no-undefined -Wl,-z,noexecstack -shared libavutil/*.o libavutil/arm/*.o libavcodec/*.o libavcodec/arm/*.o libswscale/*.o -o libffmpeg-linphone-arm.so
$(FFMPEG_BUILD_DIR)/x86/config.h:
mkdir -p $(FFMPEG_BUILD_DIR)/x86 && \
cd $(FFMPEG_BUILD_DIR)/x86 && \
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_X86_CONFIGURE_OPTIONS)
sed -i.bak 's/#define HAVE_SYSCTL 1/#define HAVE_SYSCTL 0/g' $(FFMPEG_BUILD_DIR)/x86/config.h
sed -i.bak 's/#define HAVE_GETHRTIME 1/#define HAVE_GETHRTIME 0/g' $(FFMPEG_BUILD_DIR)/x86/config.h
$(FFMPEG_BUILD_DIR)/x86/libavcodec/libavcodec-linphone-x86.so: $(FFMPEG_BUILD_DIR)/x86/config.h
cd $(FFMPEG_BUILD_DIR)/x86 && \
make -j${NUMCPUS} \
|| ( echo "Build of ffmpeg for x86 failed." ; exit 1 )
$(FFMPEG_BUILD_DIR)/x86/libffmpeg-linphone-x86.so: $(FFMPEG_BUILD_DIR)/x86/libavcodec/libavcodec-linphone-x86.so
cd $(FFMPEG_BUILD_DIR)/x86 && \
rm libavcodec/log2_tab.o && \
$(X86_TOOLCHAIN_PATH)gcc -lm -lz --sysroot=$(X86_SYSROOT) -Wl,-soname,libffmpeg-linphone-x86.so,--no-undefined -Wl,-z,noexecstack -shared libavutil/*.o libavutil/x86/*.o libavcodec/*.o libavcodec/x86/*.o libswscale/*.o -o libffmpeg-linphone-x86.so
build-ffmpeg: $(BUILD_FFMPEG_DEPS)
clean-ffmpeg:
rm -rf $(FFMPEG_BUILD_DIR)/arm && \
rm -rf $(FFMPEG_BUILD_DIR)/x86
#x264
ifeq ($(BUILD_VIDEO),1)
ifeq ($(BUILD_X264), 1)
BUILD_X264_DEPS=$(X264_SRC_DIR)/log2f_fix_patch_applied.txt $(X264_BUILD_DIR)/arm/libx264.a
ifeq ($(BUILD_FOR_X86), 1)
BUILD_X264_DEPS+=$(X264_BUILD_DIR)/x86/libx264.a
endif
endif
X264_SRC_DIR=$(TOPDIR)/submodules/externals/x264
X264_BUILD_DIR=$(TOPDIR)/submodules/externals/build/x264
X264_CONFIGURE_OPTIONS=--enable-static
X264_ARM_CONFIGURE_OPTIONS=--host=arm-none-linux-gnueabi --sysroot=$(ARM_SYSROOT) --cross-prefix=$(ARM_TOOLCHAIN_PATH) --enable-pic
X264_X86_CONFIGURE_OPTIONS=--host=i686-linux-gnueabi --sysroot=$(X86_SYSROOT) --cross-prefix=$(X86_TOOLCHAIN_PATH)
$(X264_SRC_DIR)/log2f_fix_patch_applied.txt:
@patch -p0 < $(TOPDIR)/patches/x264_log2f_fix.patch
touch $@
$(X264_BUILD_DIR)/arm/libx264.a:
mkdir -p $(X264_BUILD_DIR)/arm && \
cd $(X264_SRC_DIR) && \
$(X264_SRC_DIR)/configure $(X264_CONFIGURE_OPTIONS) $(X264_ARM_CONFIGURE_OPTIONS) && \
make -j$(NUMCPUS) STRIP= && \
cp libx264.a $(X264_BUILD_DIR)/arm/libx264.a && \
make clean \
|| ( echo "Build of x264 for arm failed." ; exit 1 )
$(X264_BUILD_DIR)/x86/libx264.a:
mkdir -p $(X264_BUILD_DIR)/x86 && \
cd $(X264_SRC_DIR) && \
$(X264_SRC_DIR)/configure $(X264_CONFIGURE_OPTIONS) $(X264_X86_CONFIGURE_OPTIONS) && \
make -j$(NUMCPUS) STRIP= && \
cp libx264.a $(X264_BUILD_DIR)/x86/libx264.a && \
make clean \
|| ( echo "Build of x264 for x86 failed." ; exit 1 )
endif
build-x264: $(BUILD_X264_DEPS)
clean-x264:
rm -rf $(X264_BUILD_DIR)/arm && \
rm -rf $(X264_BUILD_DIR)/x86
#codec2
ifeq ($(BUILD_CODEC2),1)
CODEC2_SRC_DIR=$(TOPDIR)/submodules/externals/codec2
CODEC2_BUILD_DIR=$(TOPDIR)/submodules/externals/build/codec2
PREPARE_CODEC2_DEPS=codec2-install-headers
endif
fetch-codec2:
ifneq "$(wildcard $(CODEC2_SRC_DIR) )" ""
# source directory for codec2 already exists, update it
svn up $(CODEC2_SRC_DIR)
else
#source directory for codec2 doesn't exist, create it and fetch the source from svn depot
mkdir $(CODEC2_SRC_DIR)
svn co https://svn.code.sf.net/p/freetel/code/codec2/branches/0.3/ $(CODEC2_SRC_DIR)
endif
codec2-install-headers: fetch-codec2
mkdir -p $(CODEC2_SRC_DIR)/include/codec2
rsync -rvLpgoc $(CODEC2_SRC_DIR)/src/codec2.h $(CODEC2_SRC_DIR)/include/codec2/codec2.h
prepare-codec2: $(PREPARE_CODEC2_DEPS)
#openh264
ifeq ($(BUILD_VIDEO),1)
ifeq ($(BUILD_OPENH264), 1)
BUILD_OPENH264_DEPS=build-openh264-arm
ifeq ($(BUILD_FOR_X86), 1)
BUILD_OPENH264_DEPS+=build-openh264-x86
endif
endif
endif
OPENH264_SRC_DIR=$(TOPDIR)/submodules/externals/openh264
OPENH264_BUILD_DIR=$(TOPDIR)/submodules/externals/build/openh264
OPENH264_BUILD_DIR_ARM=$(OPENH264_BUILD_DIR)/arm
OPENH264_BUILD_DIR_X86=$(OPENH264_BUILD_DIR)/x86
$(OPENH264_SRC_DIR)/patch.stamp: $(TOPDIR)/patches/openh264-permissive.patch
cd $(OPENH264_SRC_DIR) && patch -p1 < $(TOPDIR)/patches/openh264-permissive.patch && touch $(OPENH264_SRC_DIR)/patch.stamp
openh264-patch: $(OPENH264_SRC_DIR)/patch.stamp
openh264-install-headers:
mkdir -p $(OPENH264_SRC_DIR)/include/wels
rsync -rvLpgoc --exclude ".git" $(OPENH264_SRC_DIR)/codec/api/svc/* $(OPENH264_SRC_DIR)/include/wels/.
copy-openh264-x86: openh264-install-headers
mkdir -p $(OPENH264_BUILD_DIR)
mkdir -p $(OPENH264_BUILD_DIR_X86)
cd $(OPENH264_BUILD_DIR_X86) \
&& rsync -rvLpgoc --exclude ".git" $(OPENH264_SRC_DIR)/* .
copy-openh264-arm: openh264-install-headers
mkdir -p $(OPENH264_BUILD_DIR)
mkdir -p $(OPENH264_BUILD_DIR_ARM)
cd $(OPENH264_BUILD_DIR_ARM) \
&& rsync -rvLpgoc --exclude ".git" $(OPENH264_SRC_DIR)/* .
build-openh264-x86: copy-openh264-x86
cd $(OPENH264_BUILD_DIR_X86) && \
make libraries -j$(NUMCPUS) OS=android ARCH=x86 NDKROOT=$(NDK_PATH) TARGET=$(NDKBUILD_TARGET)
build-openh264-arm: copy-openh264-arm
cd $(OPENH264_BUILD_DIR_ARM) && \
make libraries -j$(NUMCPUS) OS=android ARCH=arm NDKROOT=$(NDK_PATH) TARGET=$(NDKBUILD_TARGET)
build-openh264: $(BUILD_OPENH264_DEPS)
clean-openh264:
cd $(OPENH264_SRC_DIR) && git clean -dfx && git reset --hard
rm -rf $(OPENH264_BUILD_DIR_ARM)
rm -rf $(OPENH264_BUILD_DIR_X86)
#libvpx
ifeq ($(BUILD_VIDEO),1)
BUILD_VPX_DEPS=$(LIBVPX_SRC_DIR)/configure_android_x86_patch_applied.txt $(LIBVPX_BUILD_DIR)/arm/libvpx.a
ifeq ($(BUILD_FOR_X86), 1)
BUILD_VPX_DEPS+=$(LIBVPX_BUILD_DIR)/x86/libvpx.a
endif
endif
LIBVPX_SRC_DIR=$(TOPDIR)/submodules/externals/libvpx
LIBVPX_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libvpx
LIBVPX_CONFIGURE_OPTIONS=--disable-vp9 --disable-examples --disable-unit-tests --disable-postproc --enable-error-concealment --enable-pic
$(LIBVPX_SRC_DIR)/configure_android_x86_patch_applied.txt:
cd $(LIBVPX_SRC_DIR) && patch -p1 < $(TOPDIR)/patches/libvpx_configure_android_x86.patch
touch $@
$(LIBVPX_BUILD_DIR)/arm/libvpx.a:
mkdir -p $(LIBVPX_BUILD_DIR)/arm && \
cd $(LIBVPX_BUILD_DIR)/arm && \
$(LIBVPX_SRC_DIR)/configure --target=armv7-android-gcc --extra-cflags="-mfloat-abi=softfp -mfpu=neon" --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) && \
make -j${NUMCPUS} \
|| ( echo "Build of libvpx for arm failed." ; exit 1 )
$(LIBVPX_BUILD_DIR)/x86/libvpx.a:
mkdir -p $(LIBVPX_BUILD_DIR)/x86 && \
cd $(LIBVPX_BUILD_DIR)/x86 && \
$(LIBVPX_SRC_DIR)/configure --target=x86-android-gcc --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) && \
make -j${NUMCPUS} \
|| ( echo "Build of libvpx for x86 failed." ; exit 1 )
build-vpx: $(BUILD_VPX_DEPS)
clean-vpx:
cd $(LIBVPX_SRC_DIR) && git clean -dfx && git reset --hard
rm -rf submodules/externals/build/libvpx/arm && \
rm -rf submodules/externals/build/libvpx/x86
#srtp
$(TOPDIR)/submodules/externals/srtp/config.h : $(TOPDIR)/submodules/externals/build/srtp/config.h
@cd $(TOPDIR)/submodules/externals/srtp/ && \
cp ../build/srtp/config.h . \
|| ( echo "SRTP prepare state failed." ; exit 1 )
prepare-srtp: $(TOPDIR)/submodules/externals/srtp/config.h
#ms2
prepare-mediastreamer2:
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/src/ && \
eval `cat Makefile.am | grep xxd | grep yuv2rgb.vs | sed 's/\$$(abs_builddir)/./'` && \
eval `cat Makefile.am | grep xxd | grep yuv2rgb.fs | sed 's/\$$(abs_builddir)/./'` && \
if ! [ -e yuv2rgb.vs.h ]; then echo "yuv2rgb.vs.h creation error (do you have 'xxd' application installed ?)"; exit 1; fi && \
if ! [ -e yuv2rgb.fs.h ]; then echo "yuv2rgb.fs.h creation error (do you have 'xxd' application installed ?)"; exit 1; fi
#antlr3
ANLTR3_SRC_DIR=$(TOPDIR)/submodules/externals/antlr3/runtime/C/include/
ANTLR3_BUILD_DIR=$(ANTLR3_SRC_DIR)
$(ANLTR3_SRC_DIR)/antlr3config.h: $(TOPDIR)/submodules/externals/build/antlr3/antlr3config.h
cp $(TOPDIR)/submodules/externals/build/antlr3/antlr3config.h $(ANLTR3_SRC_DIR)
prepare-antlr3: $(ANLTR3_SRC_DIR)/antlr3config.h
%.tokens: %.g
$(ANTLR) -make -fo $(dir $^) $^
#Belle-sip
BELLESIP_SRC_DIR=$(TOPDIR)/submodules/belle-sip
BELLESIP_BUILD_DIR=$(BELLESIP_SRC_DIR)
prepare-belle-sip: $(BELLESIP_SRC_DIR)/src/grammars/belle_sip_message.tokens $(BELLESIP_SRC_DIR)/src/grammars/belle_sdp.tokens
#CUnit
prepare-cunit: $(TOPDIR)/submodules/externals/cunit/CUnit/Headers/*.h
[ -d $(TOPDIR)/submodules/externals/build/cunit/CUnit ] || mkdir $(TOPDIR)/submodules/externals/build/cunit/CUnit
cp $^ $(TOPDIR)/submodules/externals/build/cunit/CUnit
$(TOPDIR)/res/raw/rootca.pem:
HTTPS_CA_DIR=$(HTTPS_CA_DIR) $(TOPDIR)/submodules/linphone/scripts/mk-ca-bundle.pl $@
prepare-liblinphone_tester: $(TOPDIR)/submodules/linphone/tester/tester_hosts $(TOPDIR)/res/raw/rootca.pem $(TOPDIR)/submodules/linphone/tester/messages.db
rm -rf liblinphone_tester/assets/config_files
mkdir -p liblinphone_tester/assets/config_files
for file in $^; do \
cp -rf $$file $(TOPDIR)/liblinphone_tester/assets/config_files/. \
;done
cp -rf $(TOPDIR)/submodules/linphone/tester/certificates $(TOPDIR)/liblinphone_tester/assets/config_files
cp -rf $(TOPDIR)/submodules/linphone/tester/sounds $(TOPDIR)/liblinphone_tester/assets/config_files
cp -rf $(TOPDIR)/submodules/linphone/tester/images $(TOPDIR)/liblinphone_tester/assets/config_files
cp -rf $(TOPDIR)/submodules/linphone/tester/rcfiles $(TOPDIR)/liblinphone_tester/assets/config_files
#Matroska2
MATROSKA_SRC_DIR=$(TOPDIR)/submodules/externals/libmatroska-c
MATROSKA_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libmatroska-c
ifeq ($(BUILD_MATROSKA), 1)
prepare-matroska2: $(MATROSKA_SRC_DIR)/patch_applied.txt
else
prepare-matroska2:
endif
$(MATROSKA_SRC_DIR)/patch_applied.txt: $(MATROSKA_BUILD_DIR)/fix_libmatroska2.patch
cd $(MATROSKA_SRC_DIR); patch -p1 < $<; touch $@
#Build targets
prepare-sources: build-ffmpeg build-x264 build-openh264 build-vpx prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-matroska2 prepare-codec2
GENERATE_OPTIONS = NDK_DEBUG=$(NDK_DEBUG) BUILD_FOR_X86=$(BUILD_FOR_X86) \
BUILD_AMRNB=$(BUILD_AMRNB) BUILD_AMRWB=$(BUILD_AMRWB) BUILD_SILK=$(BUILD_SILK) BUILD_G729=$(BUILD_G729) BUILD_OPUS=$(BUILD_OPUS) BUILD_CODEC2=$(BUILD_CODEC2)\
BUILD_VIDEO=$(BUILD_VIDEO) BUILD_X264=$(BUILD_X264) BUILD_OPENH264=$(BUILD_OPENH264) ENABLE_OPENH264_DECODER=$(ENABLE_OPENH264_DECODER) BUILD_MATROSKA=$(BUILD_MATROSKA) \
BUILD_UPNP=$(BUILD_UPNP) BUILD_ZRTP=$(BUILD_ZRTP) BUILD_WEBRTC_AECM=$(BUILD_WEBRTC_AECM) BUILD_WEBRTC_ISAC=$(BUILD_WEBRTC_ISAC) BUILD_ILBC=$(BUILD_ILBC) \
BUILD_FOR_ARM=$(BUILD_FOR_ARM) BUILD_NON_FREE_CODECS=$(BUILD_NON_FREE_CODECS)
LIBLINPHONE_OPTIONS = $(GENERATE_OPTIONS) \
LIBLINPHONE_VERSION=$(LIBLINPHONE_VERSION) BELLESIP_VERSION=$(BELLESIP_VERSION) USE_JAVAH=$(USE_JAVAH) \
BUILD_TUNNEL=$(BUILD_TUNNEL) BUILD_TLS=$(BUILD_TLS) BUILD_SQLITE=$(BUILD_SQLITE) \
BUILD_CONTACT_HEADER=$(BUILD_CONTACT_HEADER) BUILD_RTP_MAP=$(BUILD_RTP_MAP) \
LIBLINPHONE_EXTENDED_SRC_FILES="$(LIBLINPHONE_EXTENDED_SRC_FILES)" \
LIBLINPHONE_EXTENDED_C_INCLUDES="$(LIBLINPHONE_EXTENDED_C_INCLUDES)" \
LIBLINPHONE_EXTENDED_CFLAGS="$(LIBLINPHONE_EXTENDED_CFLAGS)" \
APP_STL="$(APP_STL)" \
BUILD_DONT_CHECK_HEADERS_IN_MESSAGE=$(BUILD_DONT_CHECK_HEADERS_IN_MESSAGE)
MEDIASTREAMER2_OPTIONS = $(GENERATE_OPTIONS) BUILD_MEDIASTREAMER2_SDK=1
generate-libs: prepare-sources javah
$(NDK_PATH)/ndk-build $(LIBLINPHONE_OPTIONS) -j$(NUMCPUS) TARGET_PLATFORM=$(NDKBUILD_TARGET)
generate-mediastreamer2-libs: prepare-sources
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
$(NDK_PATH)/ndk-build $(MEDIASTREAMER2_OPTIONS) -j$(NUMCPUS) TARGET_PLATFORM=$(NDKBUILD_TARGET)
update-project: $(TOPDIR)/res/raw/rootca.pem
$(SDK_PATH)/android update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
$(SDK_PATH)/android update test-project --path tests -m .
$(SDK_PATH)/android update project --path liblinphone_tester --target $(ANDROID_MOST_RECENT_TARGET)
update-mediastreamer2-project:
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
$(SDK_PATH)/android update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
liblinphone_tester: update-project prepare-sources prepare-cunit prepare-liblinphone_tester javah
$(NDK_PATH)/ndk-build -C liblinphone_tester $(LIBLINPHONE_OPTIONS) -j$(NUMCPUS) TARGET_PLATFORM=$(NDKBUILD_TARGET)
$(MAKE) -C liblinphone_tester
javah:
$(ANT) javah
generate-apk: java-clean generate-libs
echo "version.name=$(LINPHONE_ANDROID_DEBUG_VERSION)" > default.properties
$(ANT) debug
generate-mediastreamer2-apk: java-clean generate-mediastreamer2-libs
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
echo "version.name=$(LINPHONE_ANDROID_DEBUG_VERSION)" > default.properties && \
$(ANT) debug
uninstall:
adb uninstall $(PACKAGE_NAME)
install-apk:
ant installd
release: update-project
$(MAKE) java-clean
patch -p1 < release.patch
cat ant.properties | grep version.name > default.properties
$(MAKE) generate-libs
$(ANT) release
patch -Rp1 < release.patch
run-linphone:
ant run
run-liblinphone-tests: liblinphone_tester
$(MAKE) -C liblinphone_tester run-all-tests
run-basic-tests: update-project
$(ANT) partial-clean
$(MAKE) -C tests run-basic-tests ANT_SILENT=$(ANT_SILENT)
run-all-tests: update-project
$(ANT) partial-clean
$(MAKE) -C tests run-all-tests ANT_SILENT=$(ANT_SILENT)
clean-ndk-build:
- $(NDK_PATH)/ndk-build clean $(LIBLINPHONE_OPTIONS)
$(ANT) clean
@if [ -f $(TOPDIR)/submodules/linphone/mediastreamer2/java/project.properties ]; then \
cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && $(ANT) clean; \
fi
.NOTPARALLEL clean-native: clean-ndk-build clean-ffmpeg clean-x264 clean-openh264 clean-vpx
java-clean:
$(ANT) clean
clean: clean-native java-clean
patch -Rp1 -f < release.patch || echo "patch already cleaned"
rm -f AndroidManifest.xml.rej
rm -f AndroidManifest.xml.orig
.PHONY: clean install-apk run-linphone
generate-sdk: liblinphone-android-sdk
liblinphone-android-sdk: generate-apk
$(ANT) liblinphone-android-sdk
linphone-android-sdk: generate-apk
$(ANT) linphone-android-sdk
mediastreamer2-sdk: update-mediastreamer2-project generate-mediastreamer2-apk
@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \
$(ANT) mediastreamer2-sdk
pull-transifex:
tx pull -af
push-transifex:
tx push -s -f --no-interactive

93
README
View file

@ -9,21 +9,23 @@ To build liblinphone for Android, you must:
-------------------------------------------
0) download the Android sdk with platform-tools and tools updated to latest revision (at least API 16 is needed), then add both 'tools' and 'platform-tools' folders in your path.
1) download the Android ndk (=r10c) from google and add it to your path (no symlink !!!).
2) install yasm, nasm, curl, ant, rsync, autoconf, automake, aclocal, libtool, pkgconfig, bc, perl-LWP-Protocol-https, patch, vim-common
2) install yasm, nasm, ant, python, cmake
On 64 bits linux systems you'll need the ia32-libs package
With the latest Debian (multiarch), you need this:
dpkg --add-architecture i386
aptitude update
aptitude install libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386
3) run the Makefile script in the top level directory. This will download iLBC source files and convert some assembly files in VP8 project.
3) run `./prepare.py` in the top level directory. This will configure the build and generate a Makefile in the top level directory.
Some options can be passed to choose what you want to include in the build and the platforms for which you want to build. Use `./prepare.py --help` to see what these options are.
4) run the Makefile script in the top level directory.
$ make
4) (Optional) To install the generated apk into a plugged device, run
5) (Optional) To install the generated apk into a plugged device, run
$ make install
5) (Optional) To generate a liblinphone SDK zip containing a full jar and native libraries, run
6) (Optional) To generate a liblinphone SDK zip containing a full jar and native libraries, run
$ make liblinphone-android-sdk
6) (Optional) To generate a libmediastreamer2 SDK zip containing a full jar and native libraries, run
7) (Optional) To generate a libmediastreamer2 SDK zip containing a full jar and native libraries, run
$ make mediastreamer2-sdk
7) (Optional) To generate a signed apk to publish on the Google Play, run
8) (Optional) To generate a signed apk to publish on the Google Play, run
$ make release
Make sure you filled the ant.properties values for version.name, key.store and key.alias in order to correctly sign the generated apk.
You also may want to create a file name ant_password.properties with the following:
@ -51,8 +53,7 @@ Simply run
$ make liblinphone_tester
This will be build everything, generate an apk, and install it on the connected device if any.
You can speed up the compilation by using ccache (compiler cache, see https://ccache.samba.org/). Simply export:
export NDK_CCACHE=ccache
You can speed up the compilation by using ccache (compiler cache, see https://ccache.samba.org/). Give the "-DCMAKE_C_COMPILER_LAUNCHER=ccache -DCMAKE_CXX_COMPILER_LAUNCHER=ccache" options to the prepare.py script.
TROUBLESHOOTING
***************
@ -73,77 +74,7 @@ Caused by: java.lang.UnsatisfiedLinkError: Couldn't load linphone-armeabi-v7a: f
BUILD OPTIONS
*************
Some options can be passed to make, like "make SOME_OPTION=SOME_VALUE".
The build options are to be passed to the prepare.py script.
For example to enable the x264 encoder give the "-DENABLE_X264=YES" to prepare.py.
ENABLE_GPL_THIRD_PARTIES
values: 0 (GPL third parties disabled) or 1 (GPL third parties enabled), default value: 1
GPL third parties are: X264 and G729
BUILD_VIDEO
values: 0 (no video) or 1 (video enabled), default value: 1
BUILD_OPENH264
values: 0 (don't build openH264) or 1 (build openH264), default value: 1
ENABLE_OPENH264_DECODER
values: 0 (disable openh264 decoder) or 1 (enable openh264 decoder), default value: 1
BUILD_X264
values: 0 (don't build x264) or 1 (build x264), default value: 0
BUILD_AMRNB
values: 0 (don't build amrnb codec), light (try to use amrnb codec from android), full (build your own amrnb codec), default value: full
BUILD_AMRWB
values: 0 (don't build amrwb codec), 1 (build your own amrwb codec): default value: 1
BUILD_ZRTP
values: 0 (don't support ZRTP), 1 (support ZRTP), default value: 1
BUILD_SILK
values: 0 (don't build silk plugin), 1 (build silk) [silk is Skype nonfree patented audio codec], default value: 1
BUILD_G729
values: 0 (don't build g729 plugin), 1 (build g729) [g729 is nonfree patented audio codec, contact Sipro lab for more details]
default value: 1
BUILD_TUNNEL
values: 0 (don't build tunnel), 1 (build tunnel) [requires a non-free tunnel implementation in submodules/linphone/tunnel]
default value: 0
BUILD_WEBRTC_AECM
values: 0 (don't build echo canceler), 1 (build echo canceler)
default value: 1
USE_JAVAH
values: 0 (don't generate header), 1 (generate header for linphone_core_jni) [used to check errors at liblinphone compilation]
default value: 1
BUILD_FOR_X86
values: 0 (don't generate liblinphone libraries for x86 architecture), 1 (build liblinphone libraries for x86 architecture)
default value: 1
BUILD_SQLITE
values: 0 (don't build sqlite3), 1 (build sqlite3) [used to store chat messages inside liblinphone]
default value: 1
BUILD_TLS
values: 0 (don't build tls), 1 (do build tls), default value: 1
BUILD_WEBRTC_ISAC
values: 0 (don't build isac), 1 (do build isac), default value: 1
BUILD_OPUS
values: 0 (don't build opus), 1 (do build opus), default value: 1
BUILD_UPNP
values: 0 (don't build upnp), 1 (do build upnp), default value: 1
BUILD_MATROSKA
values: 0 (don't build matroska and ebml), 1 (do build matroska and ebml), default value: 0
BUILD_ILBC
values: 0 (don't build iLBC), 1 (do build iLBC), default value: 1
BUILD_CODEC2
values: 0 (don't build codec2 support), 1 (do build codec2 support), default value: 0
The available options can be listed with the `./prepare.py --list-features`

View file

@ -13,7 +13,7 @@ dependencies {
}
android {
compileSdkVersion 22
compileSdkVersion 23
buildToolsVersion "20.0.0"
sourceSets {

View file

@ -65,6 +65,8 @@ include $(linphone-root-dir)/submodules/externals/build/polarssl/Android.mk
include $(linphone-root-dir)/submodules/bctoolbox/build/android/Android-polarssl.mk
endif
include $(linphone-root-dir)/submodules/bctoolbox/build/android/Android-tester.mk
ifeq ($(BUILD_MEDIASTREAMER2_SDK), 0)
include $(linphone-root-dir)/submodules/externals/build/antlr3/Android.mk
include $(linphone-root-dir)/submodules/belle-sip/build/android/Android.mk

View file

@ -55,7 +55,7 @@ ifeq ($(BUILD_UPNP),1)
APP_MODULES += libupnp
endif
APP_MODULES +=bctoolbox
APP_MODULES +=bctoolbox bctoolbox_tester
ifeq ($(BUILD_TLS),1)
ifeq ($(BUILD_BCTOOLBOX_MBEDTLS),1)
APP_MODULES +=mbedtls

View file

@ -1,5 +1,59 @@
all:
ANDROID_MOST_RECENT_TARGET=$(shell android list target -c | grep -E 'android-[0-9]+' | tail -n1)
all: update-project copy-files
ant debug install
run-all-tests: all
ant test
update-project:
android update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
copy-libs:
rm -rf libs/armeabi
mkdir -p assets/config_files
if test -d "../liblinphone-sdk/android-arm"; then \
mkdir -p libs/armeabi && \
cp -f ../liblinphone-sdk/android-arm/lib/lib*-armeabi.so libs/armeabi && \
cp -f ../liblinphone-sdk/android-arm/lib/mediastreamer/plugins/*.so libs/armeabi && \
cp -f ../liblinphone-sdk/android-arm/share/linphone/rootca.pem assets/config_files; \
fi
if test -f "../liblinphone-sdk/android-arm/bin/gdbserver"; then \
cp -f ../liblinphone-sdk/android-arm/bin/gdbserver libs/armeabi && \
cp -f ../liblinphone-sdk/android-arm/bin/gdb.setup libs/armeabi; \
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/lib*-armeabi-v7a.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/lib*-x86.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 ../submodules/linphone/tester/messages.db
$(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

View file

@ -25,23 +25,22 @@ public class Tester {
}
static {
System.loadLibrary("cunit");
List<String> cpuabis=Version.getCpuAbis();
String ffmpegAbi;
boolean libLoaded=false;
Throwable firstException=null;
for (String abi : cpuabis){
Log.i("LinphoneCoreFactoryImpl","Trying to load liblinphone for " + abi);
ffmpegAbi=abi;
// FFMPEG (audio/video)
if (abi.startsWith("armeabi")) {
ffmpegAbi="arm";
}
loadOptionalLibrary("ffmpeg-linphone-"+ffmpegAbi);
loadOptionalLibrary("ffmpeg-linphone-" + abi);
//Main library
try {
System.loadLibrary("bctoolbox-" + abi);
System.loadLibrary("bctoolbox-tester-" + abi);
System.loadLibrary("ortp-" + abi);
System.loadLibrary("mediastreamer_base-" + abi);
System.loadLibrary("mediastreamer_voip-" + abi);
System.loadLibrary("linphone-" + abi);
System.loadLibrary("linphone_tester-" + abi);
System.loadLibrary("linphonetester-" + abi);
Log.i("LinphoneCoreFactoryImpl","Loading done with " + abi);
libLoaded=true;

View file

@ -7,6 +7,7 @@ import org.linphone.core.LinphoneCoreListenerBase;
import org.linphone.core.LinphoneFriend;
import org.linphone.core.PayloadType;
import org.linphone.mediastream.MediastreamerAndroidContext;
import org.linphone.mediastream.Factory;
import android.test.AndroidTestCase;
import junit.framework.Assert;
@ -87,16 +88,19 @@ public class WrapperTester extends AndroidTestCase {
friend.setRefKey(key);
Assert.assertEquals(friend.getRefKey(),key);
MediastreamerAndroidContext.enableFilterFromName("MSUlawEnc", false);
Assert.assertFalse(MediastreamerAndroidContext.filterFromNameEnabled("MSUlawEnc"));
MediastreamerAndroidContext.enableFilterFromName("MSUlawEnc", true);
//Test filter enablement
Factory factory = mCore.getMSFactory();
factory.enableFilterFromName("MSUlawEnc", false);
Assert.assertFalse(factory.filterFromNameEnabled("MSUlawEnc"));
factory.enableFilterFromName("MSUlawEnc", true);
}
@Override
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
mCore = LinphoneCoreFactory.instance().createLinphoneCore(new LinphoneCoreListenerBase(),null);
LinphoneCoreFactory.instance().setDebugMode(true, "WrapperTester");
mCore = LinphoneCoreFactory.instance().createLinphoneCore(new LinphoneCoreListenerBase(),getContext());
}
@Override

Binary file not shown.

View file

@ -0,0 +1,92 @@
<?xml version="1.0" encoding="UTF-8"?>
<module external.linked.project.id="linphone-android-obiane" external.linked.project.path="$MODULE_DIR$" external.root.project.path="$MODULE_DIR$" external.system.id="GRADLE" external.system.module.group="" external.system.module.version="unspecified" type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="android-gradle" name="Android-Gradle">
<configuration>
<option name="GRADLE_PROJECT_PATH" value=":" />
</configuration>
</facet>
<facet type="android" name="Android">
<configuration>
<option name="SELECTED_BUILD_VARIANT" value="debug" />
<option name="SELECTED_TEST_ARTIFACT" value="_android_test_" />
<option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
<option name="COMPILE_JAVA_TASK_NAME" value="compileDebugSources" />
<option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugAndroidTest" />
<option name="COMPILE_JAVA_TEST_TASK_NAME" value="compileDebugAndroidTestSources" />
<afterSyncTasks>
<task>generateDebugAndroidTestSources</task>
<task>generateDebugSources</task>
</afterSyncTasks>
<option name="ALLOW_USER_CONFIGURATION" value="false" />
<option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/res" />
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_7" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/build/intermediates/classes/debug" />
<output-test url="file://$MODULE_DIR$/build/intermediates/classes/androidTest/debug" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/debug" isTestSource="false" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/debug" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/r/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/aidl/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/buildConfig/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/source/rs/androidTest/debug" isTestSource="true" generated="true" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/rs/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build/generated/res/resValues/androidTest/debug" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/aidl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/build-types/debug/rs" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/mediastreamer2/java/src" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/java/j2se" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/java/common" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/java/impl" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/externals/axmlrpc/src/main/java" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/coreapi/help/java" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/assets" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/mediastreamer2/java/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/java/j2se" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/java/common" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/java/impl" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/submodules/externals/axmlrpc/src/main/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/submodules/linphone/coreapi/help/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/javaResources" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
</content>
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" exported="" name="android-support-v4" level="project" />
<orderEntry type="library" exported="" name="gcm" level="project" />
<orderEntry type="library" exported="" name="android-android-23" level="project" />
</component>
</module>

498
prepare.py Executable file
View file

@ -0,0 +1,498 @@
#!/usr/bin/env python
############################################################################
# prepare.py
# Copyright (C) 2016 Belledonne Communications, Grenoble France
#
############################################################################
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
############################################################################
import argparse
import os
import platform
import re
import shutil
import sys
import tempfile
from logging import error, warning, info, INFO, basicConfig
from subprocess import Popen, PIPE
from distutils.spawn import find_executable
sys.dont_write_bytecode = True
sys.path.insert(0, 'submodules/cmake-builder')
try:
import prepare
except Exception as e:
error(
"Could not find prepare module: {}, probably missing submodules/cmake-builder? Try running:\ngit submodule update --init --recursive".format(e))
exit(1)
class AndroidTarget(prepare.Target):
def __init__(self, arch):
prepare.Target.__init__(self, 'android-' + arch)
current_path = os.path.dirname(os.path.realpath(__file__))
self.config_file = 'configs/config-android.cmake'
self.toolchain_file = 'toolchains/toolchain-android-' + arch + '.cmake'
self.output = 'liblinphone-sdk/android-' + arch
self.additional_args = [
'-DCMAKE_INSTALL_MESSAGE=LAZY',
'-DLINPHONE_BUILDER_EXTERNAL_SOURCE_PATH=' + current_path + '/submodules'
]
def clean(self):
if os.path.isdir('WORK'):
shutil.rmtree('WORK', ignore_errors=False, onerror=self.handle_remove_read_only)
if os.path.isdir('liblinphone-sdk'):
shutil.rmtree('liblinphone-sdk', ignore_errors=False, onerror=self.handle_remove_read_only)
class AndroidArmTarget(AndroidTarget):
def __init__(self):
AndroidTarget.__init__(self, 'arm')
self.additional_args += [ '-DENABLE_VIDEO=NO' ]
class AndroidArmv7Target(AndroidTarget):
def __init__(self):
AndroidTarget.__init__(self, 'armv7')
class AndroidX86Target(AndroidTarget):
def __init__(self):
AndroidTarget.__init__(self, 'x86')
targets = {
'arm': AndroidArmTarget(),
'armv7': AndroidArmv7Target(),
'x86': AndroidX86Target()
}
platforms = ['all', 'arm', 'armv7', 'x86']
class PlatformListAction(argparse.Action):
def __call__(self, parser, namespace, values, option_string=None):
if values:
for value in values:
if value not in platforms:
message = ("invalid platform: {0!r} (choose from {1})".format(value, ', '.join([repr(platform) for platform in platforms])))
raise argparse.ArgumentError(self, message)
setattr(namespace, self.dest, values)
def gpl_disclaimer(platforms):
cmakecache = 'WORK/android-{arch}/cmake/CMakeCache.txt'.format(arch=platforms[0])
gpl_third_parties_enabled = "ENABLE_GPL_THIRD_PARTIES:BOOL=YES" in open(
cmakecache).read() or "ENABLE_GPL_THIRD_PARTIES:BOOL=ON" in open(cmakecache).read()
if gpl_third_parties_enabled:
warning("\n***************************************************************************"
"\n***************************************************************************"
"\n***** CAUTION, this liblinphone SDK is built using 3rd party GPL code *****"
"\n***** Even if you acquired a proprietary license from Belledonne *****"
"\n***** Communications, this SDK is GPL and GPL only. *****"
"\n***** To disable 3rd party gpl code, please use: *****"
"\n***** $ ./prepare.py -DENABLE_GPL_THIRD_PARTIES=NO *****"
"\n***************************************************************************"
"\n***************************************************************************")
else:
warning("\n***************************************************************************"
"\n***************************************************************************"
"\n***** Linphone SDK without 3rd party GPL software *****"
"\n***** If you acquired a proprietary license from Belledonne *****"
"\n***** Communications, this SDK can be used to create *****"
"\n***** a proprietary linphone-based application. *****"
"\n***************************************************************************"
"\n***************************************************************************")
def check_is_installed(binary, prog='it', warn=True):
if not find_executable(binary):
if warn:
error("Could not find {}. Please install {}.".format(binary, prog))
return False
return True
def check_tools():
ret = 0
#at least FFmpeg requires no whitespace in sources path...
if " " in os.path.dirname(os.path.realpath(__file__)):
error("Invalid location: path should not contain any spaces.")
ret = 1
ret |= not check_is_installed('cmake')
if not os.path.isdir("submodules/linphone/mediastreamer2/src") or not os.path.isdir("submodules/linphone/oRTP/src"):
error("Missing some git submodules. Did you run:\n\tgit submodule update --init --recursive")
ret = 1
return ret
def generate_makefile(platforms, generator):
arch_targets = ""
for arch in platforms:
arch_targets += """
{arch}: {arch}-build
{arch}-build:
\t{generator} WORK/android-{arch}/cmake
\t@echo "Done"
""".format(arch=arch, generator=generator)
makefile = """
archs={archs}
TOPDIR=$(shell pwd)
LINPHONE_ANDROID_VERSION=$(shell git describe --always)
ANDROID_MOST_RECENT_TARGET=$(shell android list target -c | grep -E 'android-[0-9]+' | tail -n1)
ANT_SILENT=$(shell ant -h | grep -q -- -S && echo 1 || echo 0)
PACKAGE_NAME=$(shell sed -nE 's|<property name="linphone.package.name" value="(.*)" />|\\1|p' custom_rules.xml)
.PHONY: all
.NOTPARALLEL: all generate-apk generate-mediastreamer2-apk install release
all: update-project generate-apk
build: $(addsuffix -build, $(archs))
clean: java-clean
install: install-apk run-linphone
java-clean:
\tant clean
$(TOPDIR)/res/raw/rootca.pem:
\tcp liblinphone-sdk/android-{first_arch}/share/linphone/rootca.pem $@
copy-libs:
\trm -rf libs/armeabi
\tif test -d "liblinphone-sdk/android-arm"; then \\
\t\tmkdir -p libs/armeabi && \\
\t\tcp -f liblinphone-sdk/android-arm/lib/lib*-armeabi.so libs/armeabi && \\
\t\tcp -f liblinphone-sdk/android-arm/lib/mediastreamer/plugins/*.so libs/armeabi; \\
\tfi
\tif test -f "liblinphone-sdk/android-arm/bin/gdbserver"; then \\
\t\tcp -f liblinphone-sdk/android-arm/bin/gdbserver libs/armeabi && \\
\t\tcp -f liblinphone-sdk/android-arm/bin/gdb.setup libs/armeabi; \\
\tfi
\trm -rf libs/armeabi-v7a
\tif test -d "liblinphone-sdk/android-armv7"; then \\
\t\tmkdir -p libs/armeabi-v7a && \\
\t\tcp -f liblinphone-sdk/android-armv7/lib/lib*-armeabi-v7a.so libs/armeabi-v7a && \\
\t\tcp -f liblinphone-sdk/android-armv7/lib/mediastreamer/plugins/*.so libs/armeabi-v7a; \\
\tfi
\tif test -f "liblinphone-sdk/android-armv7/bin/gdbserver"; then \\
\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
\trm -rf libs/x86
\tif test -d "liblinphone-sdk/android-x86"; then \\
\t\tmkdir -p libs/x86 && \\
\t\tcp -f liblinphone-sdk/android-x86/lib/lib*-x86.so libs/x86 && \\
\t\tcp -f liblinphone-sdk/android-x86/lib/mediastreamer/plugins/*.so libs/x86; \\
\tfi
\tif test -f "liblinphone-sdk/android-x86/bin/gdbserver"; then \\
\t\tcp -f liblinphone-sdk/android-x86/bin/gdbserver libs/x86 && \\
\t\tcp -f liblinphone-sdk/android-x86/bin/gdb.setup libs/x86; \\
\tfi
update-project:
\tandroid update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
\tandroid update test-project --path tests -m .
update-mediastreamer2-project:
\t@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \\
\tandroid update project --path . --target $(ANDROID_MOST_RECENT_TARGET)
generate-apk: java-clean build copy-libs $(TOPDIR)/res/raw/rootca.pem update-project
\techo "version.name=$(LINPHONE_ANDROID_VERSION)" > default.properties && \\
\tant debug
generate-mediastreamer2-apk: java-clean build copy-libs update-mediastreamer2-project
\t@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \\
\techo "version.name=$(LINPHONE_ANDROID_VERSION)" > default.properties && \\
\tant debug
install-apk:
\tant installd
uninstall:
\tadb uninstall $(PACKAGE_NAME)
release: java-clean build copy-libs update-project
\tpatch -p1 < release.patch
\tcat ant.properties | grep version.name > default.properties
\tant release
\tpatch -Rp1 < release.patch
generate-sdk: liblinphone-android-sdk
liblinphone-android-sdk: generate-apk
\tant liblinphone-android-sdk
linphone-android-sdk: generate-apk
\tant linphone-android-sdk
mediastreamer2-sdk: generate-mediastreamer2-apk
\t@cd $(TOPDIR)/submodules/linphone/mediastreamer2/java && \\
\tant mediastreamer2-sdk
liblinphone_tester:
\t$(MAKE) -C liblinphone_tester
run-linphone:
\tant run
run-liblinphone-tests:
\t$(MAKE) -C liblinphone_tester run-all-tests
run-basic-tests: update-project
\tant partial-clean
\t$(MAKE) -C tests run-basic-tests ANT_SILENT=$(ANT_SILENT)
run-all-tests: update-project
\tant partial-clean
\t$(MAKE) -C tests run-all-tests ANT_SILENT=$(ANT_SILENT)
pull-transifex:
\ttx pull -af
push-transifex:
\ttx push -s -f --no-interactive
{arch_targets}
help-prepare-options:
\t@echo "prepare.py was previously executed with the following options:"
\t@echo " {options}"
help: help-prepare-options
\t@echo ""
\t@echo "(please read the README.md file first)"
\t@echo ""
\t@echo "Available architectures: {archs}"
\t@echo ""
\t@echo "Available targets:"
\t@echo ""
\t@echo " * all or generate-apk: builds all architectures and creates the linphone application APK"
\t@echo " * generate-sdk: builds all architectures and creates the liblinphone SDK"
\t@echo " * install: install the linphone application APK (run this only after generate-apk)"
\t@echo " * uninstall: uninstall the linphone application"
\t@echo ""
""".format(archs=' '.join(platforms), arch_opts='|'.join(platforms),
first_arch=platforms[0], options=' '.join(sys.argv),
arch_targets=arch_targets, generator=generator)
f = open('Makefile', 'w')
f.write(makefile)
f.close()
gpl_disclaimer(platforms)
def list_features_with_args(debug, additional_args):
tmpdir = tempfile.mkdtemp(prefix="linphone-android")
tmptarget = AndroidArmv7Target()
tmptarget.abs_cmake_dir = tmpdir
option_regex = re.compile("ENABLE_(.*):(.*)=(.*)")
options = {}
ended = True
build_type = 'Debug' if debug else 'Release'
for line in Popen(tmptarget.cmake_command(build_type, False, True, additional_args, verbose=False),
cwd=tmpdir, shell=False, stdout=PIPE).stdout.readlines():
match = option_regex.match(line)
if match is not None:
(name, typeof, value) = match.groups()
options["ENABLE_{}".format(name)] = value
ended &= (value == 'ON')
shutil.rmtree(tmpdir)
return (options, ended)
def list_features(debug, args):
additional_args = args
options = {}
info("Searching for available features...")
# We have to iterate multiple times to activate ALL options, so that options depending
# of others are also listed (cmake_dependent_option macro will not output options if
# prerequisite is not met)
while True:
(options, ended) = list_features_with_args(debug, additional_args)
if ended:
break
else:
additional_args = []
# Activate ALL available options
for k in options.keys():
additional_args.append("-D{}=ON".format(k))
# Now that we got the list of ALL available options, we must correct default values
# Step 1: all options are turned off by default
for x in options.keys():
options[x] = 'OFF'
# Step 2: except options enabled when running with default args
(options_tmp, ended) = list_features_with_args(debug, args)
final_dict = dict(options.items() + options_tmp.items())
notice_features = "Here are available features:"
for k, v in final_dict.items():
notice_features += "\n\t{}={}".format(k, v)
info(notice_features)
info("To enable some feature, please use -DENABLE_SOMEOPTION=ON (example: -DENABLE_OPUS=ON)")
info("Similarly, to disable some feature, please use -DENABLE_SOMEOPTION=OFF (example: -DENABLE_OPUS=OFF)")
def main(argv=None):
basicConfig(format="%(levelname)s: %(message)s", level=INFO)
if argv is None:
argv = sys.argv
argparser = argparse.ArgumentParser(
description="Prepare build of Linphone and its dependencies.")
argparser.add_argument(
'-ac', '--all-codecs', help="Enable all codecs, including the non-free ones", action='store_true')
argparser.add_argument(
'-c', '-C', '--clean', help="Clean a previous build instead of preparing a build.", action='store_true')
argparser.add_argument(
'-d', '--debug', help="Prepare a debug build, eg. add debug symbols and use no optimizations.", action='store_true')
argparser.add_argument(
'-dv', '--debug-verbose', help="Activate ms_debug logs.", action='store_true')
argparser.add_argument(
'--disable-gpl-third-parties', help="Disable GPL third parties such as FFMpeg, x264.", action='store_true')
argparser.add_argument(
'--enable-non-free-codecs', help="Enable non-free codecs such as OpenH264, MPEG4, etc.. Final application must comply with their respective license (see README.md).", action='store_true')
argparser.add_argument(
'-f', '--force', help="Force preparation, even if working directory already exist.", action='store_true')
argparser.add_argument(
'-G', '--generator', help="CMake build system generator (default: Unix Makefiles, use cmake -h to get the complete list).", default='Unix Makefiles', dest='generator')
argparser.add_argument(
'-L', '--list-cmake-variables', help="List non-advanced CMake cache variables.", action='store_true', dest='list_cmake_variables')
argparser.add_argument(
'-lf', '--list-features', help="List optional features and their default values.", action='store_true', dest='list_features')
argparser.add_argument(
'-t', '--tunnel', help="Enable Tunnel.", action='store_true')
argparser.add_argument('platform', nargs='*', action=PlatformListAction, default=[
'arm', 'armv7', 'x86'], help="The platform to build for (default is 'arm armv7 x86'). Space separated architectures in list: {0}.".format(', '.join([repr(platform) for platform in platforms])))
args, additional_args2 = argparser.parse_known_args()
additional_args = ["-G", args.generator]
if check_tools() != 0:
return 1
if args.debug_verbose is True:
additional_args += ["-DENABLE_DEBUG_LOGS=YES"]
if args.enable_non_free_codecs is True:
additional_args += ["-DENABLE_NON_FREE_CODECS=YES"]
if args.all_codecs is True:
additional_args += ["-DENABLE_GPL_THIRD_PARTIES=YES"]
additional_args += ["-DENABLE_NON_FREE_CODECS=YES"]
additional_args += ["-DENABLE_AMRNB=YES"]
additional_args += ["-DENABLE_AMRWB=YES"]
additional_args += ["-DENABLE_BV16=YES"]
additional_args += ["-DENABLE_CODEC2=YES"]
additional_args += ["-DENABLE_G729=YES"]
additional_args += ["-DENABLE_GSM=YES"]
additional_args += ["-DENABLE_ILBC=YES"]
additional_args += ["-DENABLE_ISAC=YES"]
additional_args += ["-DENABLE_OPUS=YES"]
additional_args += ["-DENABLE_SILK=YES"]
additional_args += ["-DENABLE_SPEEX=YES"]
additional_args += ["-DENABLE_FFMPEG=YES"]
additional_args += ["-DENABLE_H263=YES"]
additional_args += ["-DENABLE_H263P=YES"]
additional_args += ["-DENABLE_MPEG4=YES"]
additional_args += ["-DENABLE_OPENH264=YES"]
additional_args += ["-DENABLE_VPX=YES"]
#additional_args += ["-DENABLE_X264=YES"] # Do not activate x264 because it has text relocation issues
if args.disable_gpl_third_parties is True:
additional_args += ["-DENABLE_GPL_THIRD_PARTIES=NO"]
if args.tunnel or os.path.isdir("submodules/tunnel"):
if not os.path.isdir("submodules/tunnel"):
info("Tunnel wanted but not found yet, trying to clone it...")
p = Popen("git clone gitosis@git.linphone.org:tunnel.git submodules/tunnel".split(" "))
p.wait()
if p.returncode != 0:
error("Could not clone tunnel. Please see http://www.belledonne-communications.com/voiptunnel.html")
return 1
warning("Tunnel enabled, disabling GPL third parties.")
additional_args += ["-DENABLE_TUNNEL=YES", "-DENABLE_GPL_THIRD_PARTIES=OFF"]
# User's options are priority upon all automatic options
additional_args += additional_args2
if args.list_features:
list_features(args.debug, additional_args)
return 0
selected_platforms_dup = []
for platform in args.platform:
if platform == 'all':
selected_platforms_dup += ['arm', 'armv7', 'x86']
else:
selected_platforms_dup += [platform]
# unify platforms but keep provided order
selected_platforms = []
for x in selected_platforms_dup:
if x not in selected_platforms:
selected_platforms.append(x)
if os.path.isdir('WORK') and not args.clean and not args.force:
warning("Working directory WORK already exists. Please remove it (option -C or -c) before re-executing CMake "
"to avoid conflicts between executions, or force execution (option -f) if you are aware of consequences.")
if os.path.isfile('Makefile'):
Popen("make help-prepare-options".split(" "))
return 0
for platform in selected_platforms:
target = targets[platform]
if args.clean:
target.clean()
else:
retcode = prepare.run(target, args.debug, False, args.list_cmake_variables, args.force, additional_args)
if retcode != 0:
return retcode
if args.clean:
if os.path.isfile('Makefile'):
os.remove('Makefile')
elif selected_platforms:
# only generated makefile if we are using Ninja or Makefile
if args.generator.endswith('Ninja'):
if not check_is_installed("ninja", "it"):
return 1
generate_makefile(selected_platforms, 'ninja -C')
info("You can now run 'make' to build.")
elif args.generator.endswith("Unix Makefiles"):
generate_makefile(selected_platforms, '$(MAKE) -C')
info("You can now run 'make' to build.")
else:
warning("Not generating meta-makefile for generator {}.".format(target.generator))
return 0
if __name__ == "__main__":
sys.exit(main())

View file

@ -6,8 +6,8 @@ index 5ef1374..86e13be 100644
<supports-screens android:smallScreens="true" android:normalScreens="true" android:largeScreens="true" android:xlargeScreens="true" android:anyDensity="true"/>
- <application android:label="@string/app_name" android:icon="@drawable/linphone_logo" android:largeHeap="true" android:allowBackup="true">
+ <application android:label="@string/app_name" android:icon="@drawable/linphone_logo" android:largeHeap="true" android:allowBackup="true" android:debuggable="false">
- <application android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:largeHeap="true" android:allowBackup="true">
+ <application android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:largeHeap="true" android:allowBackup="true" android:debuggable="false">
<activity android:name="org.linphone.LinphoneLauncherActivity"
android:label="@string/app_name"

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 326 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 605 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 419 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View file

@ -3,7 +3,7 @@
<item android:state_pressed="true"
android:drawable="@drawable/resizable_cancel_button_over" />
<item android:state_enabled="false"
android:drawable="@drawable/resizable_cancel_button_over" />
android:drawable="@drawable/resizable_assistant_button_disabled" />
<item
android:drawable="@drawable/resizable_cancel_button" />
</selector>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/camera_disabled" />
<item
android:drawable="@drawable/camera_default" />
</selector>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/edit_list"
android:alpha="0.2" />

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/fast_scroll_over" />
<item android:drawable="@drawable/fast_scroll_default" />
</selector>

View file

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape android:shape="rectangle">
<size android:width="70dp" android:height="70dp"/>
<solid android:color="@color/colorA" />
</shape>
</item>
</layer-list>

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<bitmap
xmlns:android="http://schemas.android.com/apk/res/android"
android:src="@drawable/menu"
android:alpha="0.3" />

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/options_add_call_disabled" />
<item
android:drawable="@drawable/options_add_call" />
</selector>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/options_start_conference_disabled" />
<item
android:drawable="@drawable/options_start_conference" />
</selector>

View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false"
android:drawable="@drawable/options_transfer_call_disabled" />
<item
android:drawable="@drawable/options_transfer_call" />
</selector>

167
res/layout-land/about.xml Normal file
View file

@ -0,0 +1,167 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:id="@+id/top_bar"
android:orientation="horizontal"
android:background="@color/colorF"
android:layout_width="match_parent"
android:layout_height="60dp">
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"/>
<TextView
android:id="@+id/menu_name"
android:text="@string/about"
style="@style/font1"
android:singleLine="true"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.4"
android:gravity="center"
android:padding="15dp"/>
<ImageView
android:id="@+id/cancel"
android:src="@drawable/dialer_back"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:padding="15dp"/>
</LinearLayout>
<LinearLayout
android:background="@color/colorC"
android:orientation="horizontal"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center">
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:layout_gravity="center">
<ImageView
android:src="@drawable/splashscreen"
android:layout_width="wrap_content"
android:layout_height="60dp"
android:layout_gravity="center"/>
<TextView
android:text="@string/app_name"
style="@style/font15"
android:paddingTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<TextView
android:text="@string/app_description"
style="@style/font3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:layout_gravity="center">
<TextView
android:id="@+id/about_android_version"
android:text="@string/about_version"
style="@style/font12"
android:layout_gravity="left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/about_liblinphone_version"
android:text="@string/about_liblinphone_version"
style="@style/font12"
android:layout_gravity="left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
<LinearLayout
android:background="@color/colorH"
android:orientation="vertical"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_gravity="center">
<TextView
android:id="@+id/about_link"
android:text="@string/about_link"
android:autoLink="web"
style="@style/font2"
android:textColorLink="@color/colorA"
android:layout_gravity="center"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/about_text"
android:text="@string/about_text"
style="@style/font23"
android:layout_gravity="center"
android:gravity="center"
android:textSize="18sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<View
android:background="@color/colorE"
android:layout_width="match_parent"
android:layout_height="1dp"/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center">
<Button
android:id="@+id/send_log"
android:background="@drawable/button_background"
android:layout_margin="5dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/menu_send_log" />
<Button
android:id="@+id/reset_log"
android:background="@drawable/button_background"
android:layout_margin="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/menu_reset_log" />
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -212,32 +212,27 @@
android:layout_weight="0.8"
android:padding="15dp" />
<ImageView
android:id="@+id/hang_up"
android:src="@drawable/call_hangup"
android:background="@drawable/hangup"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.4"
android:padding="12dp"/>
<ImageView
android:id="@+id/chat"
android:src="@drawable/chat"
android:background="@color/colorC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:padding="15dp"/>
</LinearLayout>
<ImageView
android:id="@+id/hang_up"
android:src="@drawable/call_hangup"
android:background="@drawable/hangup"
android:contentDescription="@string/content_description_hang_up"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:padding="12dp"/>
<LinearLayout
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="60dp"
android:orientation="vertical">
<ImageView
android:id="@+id/chat"
android:src="@drawable/footer_chat"
android:background="@color/colorC"
android:contentDescription="@string/content_description_chat_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="15dp"/>
</LinearLayout>
<LinearLayout
android:background="@color/colorF"
@ -251,22 +246,19 @@
android:layout_height="wrap_content"
android:layout_weight="1">
<ImageView
android:id="@+id/video"
android:src="@drawable/camera_default"
android:background="@drawable/button_background"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1">
<ProgressBar
android:id="@+id/video_in_progress"
style="?android:attr/progressBarStyle"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/video"
android:src="@drawable/camera_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_switch_video"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
@ -279,37 +271,46 @@
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:id="@+id/speaker"
android:src="@drawable/speaker_default"
android:background="@drawable/button_background"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/micro"
android:src="@drawable/micro_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_toggle_micro"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:id="@+id/audio_route"
android:src="@drawable/routes"
android:background="@drawable/button_background"
android:visibility="gone"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/speaker"
android:src="@drawable/speaker_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_toggle_speaker"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/options"
android:src="@drawable/options_default"
android:background="@drawable/button_background"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<ImageView
android:id="@+id/audio_route"
android:src="@drawable/routes_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_audio_route"
android:visibility="gone"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>
<ImageView
android:id="@+id/options"
android:src="@drawable/options_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_call_options"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/menu_bottom"
@ -330,25 +331,27 @@
android:visibility="invisible"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/route_bluetooth"
android:src="@drawable/route_bluetooth"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/route_bluetooth"
android:src="@drawable/route_bluetooth"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_bluetooth"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4" />
<ImageView
android:id="@+id/add_call"
android:src="@drawable/options_add_call"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/add_call"
android:src="@drawable/options_add_call"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_add_call"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4" />
</LinearLayout>
@ -371,25 +374,27 @@
android:visibility="invisible"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/route_earpiece"
android:src="@drawable/route_earpiece"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/route_earpiece"
android:src="@drawable/route_earpiece"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_earpiece"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"/>
<ImageView
android:id="@+id/transfer"
android:src="@drawable/options_transfer_call"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/transfer"
android:src="@drawable/options_transfer_call"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_transfer"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"/>
</LinearLayout>
@ -414,7 +419,8 @@
<ImageView
android:id="@+id/route_speaker"
android:src="@drawable/route_speaker"
android:background="@drawable/button_call_background"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_toggle_speaker"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"
@ -424,7 +430,8 @@
<ImageView
android:id="@+id/conference"
android:src="@drawable/options_start_conference"
android:background="@drawable/button_call_background"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_conference"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"

View file

@ -52,9 +52,9 @@
android:id="@+id/contact_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/top_bar"
android:paddingTop="10dp"
android:layout_above="@+id/menu">
android:layout_above="@+id/menu"
android:layout_below="@+id/top_bar">
<LinearLayout
android:background="@color/colorG"

View file

@ -53,8 +53,8 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/menu"
android:layout_below="@id/top_bar"
android:paddingTop="10dp">
android:paddingTop="10dp"
android:layout_below="@+id/top_bar">
<LinearLayout
android:background="@color/colorG"
@ -107,7 +107,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="12dp"/>
android:padding="10dp"/>
<ImageView
android:id="@+id/speaker"

View file

@ -0,0 +1,113 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:background="@drawable/list_selector">
<CheckBox
android:id="@+id/delete_chatroom"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:paddingRight="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:visibility="invisible" android:layout_alignParentTop="true"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center">
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true">
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:contentDescription="@string/content_description_contact_picture"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:contentDescription="@string/content_description_contact_picture"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"/>
</RelativeLayout>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp">
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:singleLine="true"
android:layout_alignBottom="@id/sipUri"
style="@style/font2"/>
<TextView
android:id="@+id/sipUri"
android:lines="1"
android:ellipsize="end"
android:singleLine="true"
style="@style/font6"
android:paddingLeft="10dp"
android:layout_marginTop="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/date"
android:layout_marginRight="30dp"/>
<TextView
android:id="@+id/unreadMessages"
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@drawable/chat_list_indicator"
android:contentDescription="@string/content_description_unread_chat_message"
style="@style/font18"
android:gravity="center"
android:singleLine="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"
android:layout_alignParentTop="true"/>
<TextView
android:id="@+id/lastMessage"
android:maxLines="2"
android:ellipsize="end"
android:layout_below="@id/sipUri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/font11"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>

View file

@ -0,0 +1,96 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RelativeLayout
android:id="@+id/address_bar"
android:background="@color/colorF"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginBottom="10dp"
android:layout_alignParentTop="true">
<org.linphone.ui.EraseButton
android:id="@+id/erase"
android:src="@drawable/backspace"
android:contentDescription="@string/content_description_backspace"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:layout_marginRight="10dp"
android:layout_marginLeft="10dp" />
<org.linphone.ui.AddressText
android:id="@+id/address"
android:background="@color/colorF"
android:textColorHint="@color/colorE"
style="@style/font5"
android:ellipsize="start"
android:inputType="textEmailAddress"
android:hint="@string/address_bar_hint"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:paddingLeft="20dp"
android:paddingRight="5dp"
android:layout_toLeftOf="@id/erase"
android:layout_centerVertical="true"/>
</RelativeLayout>
<org.linphone.ui.Numpad
android:id="@+id/numpad"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:visibility="gone"
android:layout_above="@id/controls"
android:layout_below="@id/address_bar"
android:layout_centerInParent="true"/>
<ImageView
android:src="@drawable/dialer_background"
android:layout_centerHorizontal="true"
android:layout_width="100dp"
android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/controls"
android:layout_alignParentBottom="true"
android:layout_width="match_parent"
android:layout_height="60dp">
<RelativeLayout
android:focusable="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:adjustViewBounds="true">
<ImageView
android:id="@+id/add_contact"
android:src="@drawable/contact_add_button"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_add_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
<org.linphone.ui.CallButton
android:id="@+id/call"
android:src="@drawable/call_audio_start"
android:background="@drawable/call"
android:contentDescription="@string/content_description_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"
android:layout_weight="0.5"/>
</LinearLayout>
</RelativeLayout>

View file

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@color/colorC"
android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:layout_marginBottom="20dp"
android:orientation="vertical">
<ImageView
android:src="@drawable/splashscreen"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"/>
<TextView
android:text="@string/app_name"
style="@style/font21"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:layout_gravity="center"/>
<TextView
android:text="@string/app_description"
android:textSize="28sp"
android:textColor="@color/colorA"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
</LinearLayout>
<ProgressBar
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginBottom="20dp"
android:layout_gravity="center_horizontal|bottom" />
<View
android:background="@color/colorA"
android:layout_height="10dp"
android:layout_width="100dp"
android:layout_gravity="center_horizontal|bottom" />
</FrameLayout>

View file

@ -42,6 +42,7 @@
<ImageView
android:id="@+id/cancel"
android:src="@drawable/dialer_back"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="15dp"
@ -88,6 +89,7 @@
<ImageView
android:id="@+id/history_image"
android:layout_width="match_parent"
android:contentDescription="@string/content_description_history"
android:layout_height="match_parent"
android:padding="18dp"
android:layout_centerInParent="true"
@ -97,14 +99,14 @@
<TextView
android:id="@+id/missed_calls"
style="@style/font7"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_margin="12dp"
android:background="@drawable/history_chat_indicator"
android:visibility="gone"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>
android:visibility="gone"
android:layout_marginTop="15dp"
android:layout_marginRight="5dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
@ -119,7 +121,24 @@
android:padding="18dp"
android:layout_centerInParent="true" />
<ImageView
<ImageView
android:src="@drawable/footer_contacts"
android:contentDescription="@string/content_description_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/contacts_select"
android:background="@color/colorA"
android:layout_width="5dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:visibility="gone"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/dialer"
android:src="@drawable/footer_dialer"
android:background="@drawable/footer_button"
@ -130,6 +149,23 @@
android:padding="18dp"
android:layout_centerInParent="true"/>
<ImageView
android:src="@drawable/footer_dialer"
android:contentDescription="@string/content_description_dialer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/dialer_select"
android:background="@color/colorA"
android:layout_width="5dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/chat"
android:background="@drawable/footer_button"
@ -140,6 +176,7 @@
<ImageView
android:id="@+id/chat_image"
android:src="@drawable/footer_chat"
android:contentDescription="@string/content_description_chat_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="18dp"
@ -148,14 +185,14 @@
<TextView
android:id="@+id/missed_chats"
style="@style/font7"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_margin="12dp"
android:background="@drawable/history_chat_indicator"
android:visibility="gone"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>
android:visibility="gone"
android:layout_marginTop="15dp"
android:layout_marginRight="5dp"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
</LinearLayout>
@ -186,7 +223,7 @@
<ListView
android:id="@+id/accounts_list"
android:background="@color/colorG"
android:background="@color/colorB"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
@ -196,12 +233,12 @@
<ListView
android:id="@+id/item_list"
android:background="@color/colorG"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@color/colorE"
android:listSelector="@color/colorG"
android:listSelector="@color/colorH"
android:dividerHeight="1dp"/>
</LinearLayout>
@ -232,9 +269,44 @@
android:layout_toRightOf="@id/quit_button"
android:gravity="center_vertical"
android:layout_centerInParent="true"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorH"
android:layout_above="@id/side_menu_quit"
android:orientation="vertical">
<include layout="@layout/side_menu_main_account"/>
<ListView
android:id="@+id/accounts_list"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:cacheColorHint="@color/transparent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"/>
<ListView
android:id="@+id/item_list"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:divider="@color/colorE"
android:listSelector="@color/colorH"
android:footerDividersEnabled="true"
android:dividerHeight="1dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorE"/>
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>

View file

@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout"
android:background="@drawable/list_selector"
android:layout_width="match_parent"
android:layout_height="40dp"
android:padding="5dp"
android:gravity="center_vertical"
android:orientation="horizontal" >
<TextView
android:id="@+id/contact_name"
style="@style/font6"
android:lines="1"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/contact_address"
style="@style/font2"
android:lines="1"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/video_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView
android:visibility="visible"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/videoSurface" />
<SurfaceView
android:id="@+id/videoCaptureSurface"
android:layout_width="145dp"
android:layout_height="120dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>

View file

@ -56,6 +56,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_username_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -132,6 +133,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textPassword"
android:contentDescription="@string/content_description_confirm_password_field"
android:textCursorDrawable="@null"
android:layout_width="match_parent"
android:layout_height="40dp"
@ -169,6 +171,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_email_field"
android:textCursorDrawable="@null"
android:layout_width="match_parent"
android:layout_height="40dp"

View file

@ -50,6 +50,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_username_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -103,6 +104,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textEmailAddress"
android:contentDescription="@string/content_description_display_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>

View file

@ -54,6 +54,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_username_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -107,6 +108,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textEmailAddress"
android:contentDescription="@string/content_description_display_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -131,6 +133,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textEmailAddress"
android:contentDescription="@string/content_description_domain_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>

View file

@ -185,17 +185,36 @@
</LinearLayout>
<ImageView
android:id="@+id/dialer"
android:src="@drawable/footer_dialer"
android:background="@color/colorC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="15dp"
android:contentDescription="@string/content_description_numpad"/>
</RelativeLayout>
</FrameLayout>
<ImageView
android:id="@+id/hang_up"
android:src="@drawable/call_hangup"
android:background="@drawable/hangup"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"
android:padding="12dp"
android:contentDescription="@string/content_description_hang_up"/>
<LinearLayout
android:id="@+id/call_bar"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:layout_gravity="center"
android:orientation="horizontal" >
<ImageView
android:id="@+id/chat"
android:src="@drawable/footer_chat"
android:background="@color/colorC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="15dp"
android:contentDescription="@string/content_description_chat_button"/>
</LinearLayout>
<LinearLayout
android:id="@+id/main_bar"
@ -231,7 +250,14 @@
android:layout_weight="0.2"
android:padding="12dp"/>
</LinearLayout>
<ImageView
android:id="@+id/video"
android:src="@drawable/camera_default"
android:background="@drawable/button_background"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/content_description_switch_video"/>
<LinearLayout
android:id="@+id/menu"
@ -246,30 +272,46 @@
android:layout_height="60dp"
android:orientation="horizontal">
<RelativeLayout
android:background="@drawable/button_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<ImageView
android:id="@+id/micro"
android:src="@drawable/micro_default"
android:background="@drawable/button_background"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/content_description_toggle_micro"/>
<ImageView
android:id="@+id/video"
android:src="@drawable/camera_default"
android:background="@drawable/button_background"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/speaker"
android:src="@drawable/speaker_default"
android:background="@drawable/button_background"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:contentDescription="@string/content_description_toggle_speaker"/>
<ProgressBar
android:id="@+id/video_in_progress"
style="?android:attr/progressBarStyle"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/audio_route"
android:src="@drawable/routes_default"
android:background="@drawable/button_background"
android:visibility="gone"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:contentDescription="@string/content_description_audio_route"/>
</RelativeLayout>
<ImageView
android:id="@+id/options"
android:src="@drawable/options_default"
android:background="@drawable/button_background"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:contentDescription="@string/content_description_call_options"/>
<ImageView
android:id="@+id/micro"
@ -289,15 +331,14 @@
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/audio_route"
android:src="@drawable/routes"
android:background="@drawable/button_background"
android:visibility="gone"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<LinearLayout
android:id="@+id/menu_bottom"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_above="@id/menu"
android:orientation="horizontal"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true">
<ImageView
android:id="@+id/options"
@ -312,18 +353,27 @@
</LinearLayout>
</LinearLayout>
<LinearLayout
android:id="@+id/menu_bottom"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_above="@id/call_bar"
android:orientation="horizontal" >
<ImageView
android:id="@+id/route_bluetooth"
android:src="@drawable/route_bluetooth"
android:background="@drawable/button_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"
android:contentDescription="@string/content_description_bluetooth"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.2"/>
<ImageView
android:id="@+id/add_call"
android:src="@drawable/options_add_call"
android:background="@drawable/button_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"
android:contentDescription="@string/content_description_add_call"/>
<ImageView
android:id="@+id/route_bluetooth"
@ -354,21 +404,27 @@
android:layout_above="@id/menu_bottom"
android:orientation="horizontal" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.2"/>
<ImageView
android:id="@+id/route_earpiece"
android:src="@drawable/route_earpiece"
android:background="@drawable/button_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"
android:contentDescription="@string/content_description_earpiece"/>
<ImageView
android:id="@+id/route_earpiece"
android:src="@drawable/route_earpiece"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.22" />
<ImageView
android:id="@+id/transfer"
android:src="@drawable/options_transfer_call"
android:background="@drawable/button_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"
android:contentDescription="@string/content_description_transfer"/>
<ImageView
android:id="@+id/transfer"
@ -394,26 +450,27 @@
android:visibility="invisible"
android:layout_weight="0.2"/>
<ImageView
android:id="@+id/route_speaker"
android:src="@drawable/route_speaker"
android:background="@drawable/button_call_background"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.22" />
<ImageView
android:id="@+id/route_speaker"
android:src="@drawable/route_speaker"
android:background="@drawable/button_background"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"
android:contentDescription="@string/content_description_toggle_speaker"/>
<ImageView
android:id="@+id/conference"
android:src="@drawable/options_start_conference"
android:background="@drawable/button_call_background"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.22" />
</LinearLayout>
<ImageView
android:id="@+id/conference"
android:src="@drawable/options_start_conference"
android:background="@drawable/button_background"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1.4"
android:contentDescription="@string/content_description_conference"/>
<org.linphone.ui.Numpad
android:id="@+id/numpad"

View file

@ -161,7 +161,6 @@
android:layout_height="wrap_content"
android:alpha="0.2"/>
<ImageView
android:src="@drawable/arrow_hangup"
android:layout_width="wrap_content"

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_height="80dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp"
@ -12,13 +12,13 @@
android:id="@+id/delete_chatroom"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:paddingRight="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:visibility="invisible" />
android:visibility="invisible"
android:layout_alignParentTop="true"/>
<LinearLayout
android:layout_width="match_parent"
@ -38,6 +38,15 @@
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"/>
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/avatar_layout"
android:layout_marginTop="5dp"
android:singleLine="true"
style="@style/font2"/>
</RelativeLayout>
<RelativeLayout
@ -45,28 +54,14 @@
android:layout_height="match_parent"
android:paddingLeft="10dp">
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
android:singleLine="true"
style="@style/font2"/>
<TextView
android:id="@+id/sipUri"
android:lines="1"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:fadingEdge="horizontal"
android:ellipsize="end"
android:singleLine="true"
style="@style/font2"
android:paddingLeft="10dp"
android:layout_marginTop="5dp"
style="@style/font6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/date"
android:layout_marginRight="30dp"/>
<TextView
@ -74,7 +69,8 @@
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@drawable/chat_list_indicator"
style="@style/font7"
android:contentDescription="@string/content_description_unread_chat_message"
style="@style/font18"
android:gravity="center"
android:singleLine="true"
android:layout_alignParentRight="true"
@ -88,6 +84,7 @@
android:layout_below="@id/sipUri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="30dp"
style="@style/font11"/>
</RelativeLayout>

View file

@ -24,6 +24,7 @@
<org.linphone.ui.EraseButton
android:id="@+id/erase"
android:src="@drawable/backspace"
android:contentDescription="@string/content_description_backspace"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
@ -69,12 +70,23 @@
android:background="@drawable/button_back_background"
android:layout_width="102dp"
android:layout_height="wrap_content"
android:padding="20dp"
android:visibility="gone"/>
android:layout_weight="1"
android:adjustViewBounds="true">
<ImageView
android:id="@+id/add_contact"
android:src="@drawable/contact_add_button"
android:contentDescription="@string/content_description_add_contact"
android:background="@drawable/toolbar_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_alignParentBottom="true"/>
<org.linphone.ui.CallButton
android:id="@+id/call"
android:src="@drawable/call_audio_start"
android:contentDescription="@string/content_description_call"
android:background="@drawable/call"
android:layout_width="match_parent"
android:layout_height="wrap_content"

View file

@ -42,6 +42,7 @@
<ImageView
android:id="@+id/cancel"
android:src="@drawable/dialer_back"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="15dp"
@ -71,7 +72,7 @@
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.63"
android:layout_weight="1"
android:orientation="horizontal" />
<LinearLayout
@ -79,7 +80,7 @@
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.37"
android:layout_weight="1"
android:orientation="horizontal">
<View
@ -110,6 +111,7 @@
<ImageView
android:id="@+id/history_image"
android:src="@drawable/footer_history"
android:contentDescription="@string/content_description_history"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
@ -119,13 +121,14 @@
android:id="@+id/missed_calls"
android:background="@drawable/history_chat_indicator"
style="@style/font7"
android:layout_width="25dp"
android:layout_height="25dp"
android:visibility="gone"
android:layout_marginBottom="10dp"
android:layout_alignBottom="@+id/history_image"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:layout_alignParentRight="true"/>
android:layout_marginRight="5dp"
android:visibility="gone"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
@ -139,16 +142,39 @@
android:padding="15dp"
android:layout_centerInParent="true" />
<ImageView
<ImageView
android:src="@drawable/footer_contacts"
android:contentDescription="@string/content_description_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/contacts_select"
android:background="@color/colorA"
android:layout_width="5dp"
android:layout_height="match_parent"
android:layout_alignParentLeft="true"
android:visibility="gone"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/dialer"
android:src="@drawable/footer_dialer"
android:background="@drawable/footer_button"
android:contentDescription="@string/content_description_dialer"
android:layout_weight="1"
android:layout_width="60dp"
android:layout_height="0dp"
android:padding="15dp"
android:layout_centerInParent="true"/>
android:layout_height="0dp">
<ImageView
android:src="@drawable/footer_dialer"
android:contentDescription="@string/content_description_dialer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<RelativeLayout
android:id="@+id/chat"
@ -160,6 +186,7 @@
<ImageView
android:id="@+id/chat_image"
android:src="@drawable/footer_chat"
android:contentDescription="@string/content_description_chat_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
@ -169,12 +196,12 @@
android:id="@+id/missed_chats"
android:background="@drawable/history_chat_indicator"
style="@style/font7"
android:layout_width="25dp"
android:layout_height="25dp"
android:visibility="gone"
android:layout_alignBottom="@+id/chat_image"
android:layout_marginBottom="10dp"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:layout_marginRight="5dp"
android:visibility="gone"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/video_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView
android:visibility="visible"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/videoSurface" />
<SurfaceView
android:id="@+id/videoCaptureSurface"
android:layout_width="218dp"
android:layout_height="160dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>

View file

@ -0,0 +1,111 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="5dp"
android:background="@drawable/list_selector">
<CheckBox
android:id="@+id/delete_chatroom"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:visibility="invisible"
android:layout_alignParentTop="true"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerVertical="true"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center">
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true">
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:contentDescription="@string/content_description_contact_picture"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"/>
</RelativeLayout>
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/avatar_layout"
android:layout_marginTop="5dp"
android:singleLine="true"
style="@style/font2"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp">
<TextView
android:id="@+id/sipUri"
android:lines="1"
android:ellipsize="end"
android:fadingEdge="horizontal"
android:singleLine="true"
style="@style/font6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="30dp"/>
<TextView
android:id="@+id/unreadMessages"
android:layout_width="20dp"
android:layout_height="20dp"
android:background="@drawable/chat_list_indicator"
android:contentDescription="@string/content_description_unread_chat_message"
style="@style/font18"
android:gravity="center"
android:singleLine="true"
android:layout_above="@+id/lastMessage"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true"/>
<TextView
android:id="@+id/lastMessage"
android:maxLines="3"
android:ellipsize="end"
android:layout_below="@id/sipUri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="30dp"
style="@style/font11"/>
</RelativeLayout>
</LinearLayout>
</RelativeLayout>

View file

@ -24,6 +24,7 @@
<org.linphone.ui.EraseButton
android:id="@+id/erase"
android:src="@drawable/backspace"
android:contentDescription="@string/content_description_backspace"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
@ -72,10 +73,23 @@
android:padding="20dp"
android:visibility="gone"/>
<ImageView
android:id="@+id/add_contact"
android:src="@drawable/contact_add_button"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_add_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
<org.linphone.ui.CallButton
android:id="@+id/call"
android:src="@drawable/call_audio_start"
android:background="@drawable/call"
android:contentDescription="@string/content_description_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"

View file

@ -42,6 +42,7 @@
<ImageView
android:id="@+id/cancel"
android:src="@drawable/dialer_back"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="15dp"
@ -88,7 +89,6 @@
android:layout_height="match_parent"/>
</LinearLayout>
</LinearLayout>
</FrameLayout>
@ -109,7 +109,9 @@
android:layout_height="match_parent">
<ImageView
android:id="@+id/history_image"
android:id="@+id/footer_history"
android:src="@drawable/footer_history"
android:contentDescription="@string/content_description_history"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="18dp"
@ -124,10 +126,14 @@
android:layout_height="25dp"
android:layout_margin="12dp"
android:background="@drawable/history_chat_indicator"
android:visibility="gone"
style="@style/font18"
android:layout_width="20dp"
android:layout_height="20dp"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>
android:layout_margin="20dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:visibility="visible"/>
</RelativeLayout>
@ -142,16 +148,39 @@
android:padding="18dp"
android:layout_centerInParent="true" />
<ImageView
<ImageView
android:src="@drawable/footer_contacts"
android:contentDescription="@string/content_description_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/contacts_select"
android:background="@color/colorA"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"
android:visibility="gone"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/dialer"
android:src="@drawable/footer_dialer"
android:background="@drawable/footer_button"
android:contentDescription="@string/content_description_dialer"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent"
android:padding="18dp"
android:layout_centerInParent="true"/>
android:layout_height="match_parent">
<ImageView
android:src="@drawable/footer_dialer"
android:contentDescription="@string/content_description_dialer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<RelativeLayout
android:id="@+id/chat"
@ -163,6 +192,7 @@
<ImageView
android:id="@+id/chat_image"
android:src="@drawable/footer_chat"
android:contentDescription="@string/content_description_chat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="18dp"
@ -175,10 +205,14 @@
android:layout_height="25dp"
android:layout_margin="12dp"
android:background="@drawable/history_chat_indicator"
android:visibility="gone"
style="@style/font18"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_margin="20dp"
android:gravity="center"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
android:visibility="gone"/>
</RelativeLayout>
</LinearLayout>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/video_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView
android:visibility="visible"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/videoSurface" />
<SurfaceView
android:id="@+id/videoCaptureSurface"
android:layout_width="290dp"
android:layout_height="240dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>

View file

@ -31,7 +31,7 @@
<ImageView
android:id="@+id/cancel"
android:src="@drawable/footer_dialer"
android:contentDescription="@string/content_description_edit"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"

View file

@ -49,6 +49,7 @@
android:id="@+id/username"
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:contentDescription="@string/content_description_username_field"
android:inputType="text|textEmailAddress"
android:layout_width="match_parent"
android:layout_height="40dp"
@ -117,6 +118,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textPassword"
android:contentDescription="@string/content_description_confirm_password_field"
android:textCursorDrawable="@null"
android:layout_width="match_parent"
android:layout_height="40dp"
@ -152,6 +154,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_email_field"
android:textCursorDrawable="@null"
android:layout_width="match_parent"
android:layout_height="40dp"
@ -175,7 +178,6 @@
android:background="@drawable/assistant_button"
android:textColor="@drawable/assistant_button_text_color"
style="@style/font8"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:paddingLeft="10dp"

View file

@ -1,44 +1,49 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="30dp"
android:gravity="center_horizontal"
android:orientation="vertical" >
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:text="@string/assistant_create_account"
style="@style/font6"
android:textAllCaps="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="30dp"
android:gravity="center_horizontal"
android:orientation="vertical" >
<TextView
android:text="@string/assistant_create_account_part_2"
style="@style/font11"
android:paddingTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@string/assistant_create_account"
style="@style/font6"
android:textAllCaps="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@string/assistant_validate_account"
style="@style/font11"
android:paddingTop="10dp"
android:gravity="center"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:text="@string/assistant_create_account_part_2"
style="@style/font11"
android:paddingTop="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+id/assistant_check"
android:text="@string/assistant_create_account"
android:background="@drawable/assistant_button"
style="@style/font8"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_margin="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"/>
<TextView
android:text="@string/assistant_validate_account"
style="@style/font11"
android:paddingTop="10dp"
android:gravity="center"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
<Button
android:id="@+id/assistant_check"
android:text="@string/assistant_finish"
android:background="@drawable/assistant_button"
android:textColor="@drawable/assistant_button_text_color"
style="@style/font8"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_margin="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"/>
</LinearLayout>
</ScrollView>

View file

@ -46,6 +46,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_username_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -80,6 +81,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textEmailAddress"
android:contentDescription="@string/content_description_username_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>

View file

@ -46,6 +46,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="text|textEmailAddress"
android:contentDescription="@string/content_description_username_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -80,6 +81,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textEmailAddress"
android:contentDescription="@string/content_description_domain_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>
@ -97,6 +99,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textEmailAddress"
android:contentDescription="@string/content_description_display_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>

View file

@ -42,6 +42,7 @@
android:background="@drawable/resizable_textfield"
android:textColor="@color/colorB"
android:inputType="textUri"
android:contentDescription="@string/content_description_url_field"
android:layout_width="match_parent"
android:layout_height="40dp"
android:singleLine="true"/>

View file

@ -27,10 +27,10 @@
<ImageView
android:id="@+id/assistant_cancel"
android:src="@drawable/dialer_back"
android:contentDescription="@string/content_description_dialer"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:padding="15dp"/>
</LinearLayout>
</LinearLayout>

View file

@ -70,14 +70,15 @@
android:layout_alignParentBottom="true"
android:orientation="vertical">
<TextView
android:id="@+id/current_contact_name"
style="@style/font13"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:layout_alignParentTop="true"
android:layout_gravity="center"/>
<TextView
android:id="@+id/current_contact_name"
style="@style/font5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingTop="5dp"
android:gravity="center"
android:layout_alignParentTop="true"
android:layout_gravity="center"/>
<Chronometer
android:id="@+id/current_call_timer"
@ -193,25 +194,19 @@
android:layout_weight="0.8"
android:padding="15dp" />
<ImageView
android:id="@+id/hang_up"
android:src="@drawable/call_hangup"
android:background="@drawable/hangup"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.4"
android:padding="12dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<ImageView
android:id="@+id/chat"
android:src="@drawable/chat"
android:background="@color/colorC"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:padding="15dp"/>
</LinearLayout>
<ImageView
android:id="@+id/video"
android:src="@drawable/camera_button"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_switch_video"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<LinearLayout
android:id="@+id/menu"
@ -226,30 +221,47 @@
android:layout_height="60dp"
android:orientation="horizontal">
<RelativeLayout
android:background="@drawable/button_background"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<ImageView
android:id="@+id/micro"
android:src="@drawable/micro_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_toggle_micro"
android:padding="10dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:id="@+id/video"
android:src="@drawable/camera_default"
android:background="@drawable/button_background"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/speaker"
android:src="@drawable/speaker_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_toggle_speaker"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ProgressBar
android:id="@+id/video_in_progress"
style="?android:attr/progressBarStyle"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/audio_route"
android:src="@drawable/routes_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_audio_route"
android:visibility="gone"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
</RelativeLayout>
<ImageView
android:id="@+id/options"
android:src="@drawable/options_default"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_call_options"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<ImageView
android:id="@+id/micro"
@ -260,34 +272,37 @@
android:layout_height="wrap_content"
android:layout_weight="1" />
<ImageView
android:id="@+id/speaker"
android:src="@drawable/speaker_default"
android:background="@drawable/button_background"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/dialer"
android:src="@drawable/footer_dialer"
android:background="@color/colorC"
android:contentDescription="@string/content_description_numpad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:padding="15dp" />
<ImageView
android:id="@+id/audio_route"
android:src="@drawable/routes"
android:background="@drawable/button_background"
android:visibility="gone"
android:padding="20dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1" />
<ImageView
android:id="@+id/hang_up"
android:src="@drawable/call_hangup"
android:background="@drawable/hangup"
android:contentDescription="@string/content_description_hang_up"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.4"
android:padding="12dp"/>
<ImageView
android:id="@+id/options"
android:src="@drawable/options_default"
android:background="@drawable/button_background"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
<ImageView
android:id="@+id/chat"
android:src="@drawable/footer_chat"
android:background="@color/colorC"
android:contentDescription="@string/content_description_chat_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.8"
android:padding="15dp"/>
</LinearLayout>
</LinearLayout>
@ -310,25 +325,27 @@
android:visibility="invisible"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/route_bluetooth"
android:src="@drawable/route_bluetooth"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/route_bluetooth"
android:src="@drawable/route_bluetooth"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_bluetooth"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/add_call"
android:src="@drawable/options_add_call"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/add_call"
android:src="@drawable/options_add_call_button"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_add_call"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
</LinearLayout>
@ -351,25 +368,27 @@
android:visibility="invisible"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/route_earpiece"
android:src="@drawable/route_earpiece"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/route_earpiece"
android:src="@drawable/route_earpiece"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_earpiece"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/transfer"
android:src="@drawable/options_transfer_call"
android:background="@drawable/button_call_background"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
<ImageView
android:id="@+id/transfer"
android:src="@drawable/options_transfer_call_button"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_transfer"
android:padding="15dp"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
</LinearLayout>
@ -394,7 +413,8 @@
<ImageView
android:id="@+id/route_speaker"
android:src="@drawable/route_speaker"
android:background="@drawable/button_call_background"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_toggle_speaker"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"
@ -403,8 +423,9 @@
<ImageView
android:id="@+id/conference"
android:src="@drawable/options_start_conference"
android:background="@drawable/button_call_background"
android:src="@drawable/options_start_conference_button"
android:background="@drawable/button_background"
android:contentDescription="@string/content_description_conference"
android:visibility="invisible"
android:padding="15dp"
android:layout_width="match_parent"

View file

@ -56,9 +56,28 @@
android:paddingTop="10dp"
android:layout_above="@+id/menu">
<LinearLayout
android:background="@color/colorG"
android:layout_alignParentBottom="true"
<TextView
android:id="@+id/contact_name"
style="@style/font5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:gravity="center"
android:paddingTop="5dp"/>
<TextView
android:id="@+id/contact_number"
style="@style/font2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/contact_name"
android:layout_gravity="center"
android:layout_centerHorizontal="true"
android:paddingBottom="10dp"/>
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"

View file

@ -56,9 +56,28 @@
android:layout_below="@id/top_bar"
android:paddingTop="10dp">
<LinearLayout
android:background="@color/colorG"
android:layout_alignParentBottom="true"
<TextView
android:id="@+id/contact_name"
style="@style/font5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:gravity="center"
android:layout_centerHorizontal="true"
android:paddingTop="5dp"/>
<TextView
android:id="@+id/contact_number"
style="@style/font2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/contact_name"
android:layout_gravity="center"
android:layout_centerHorizontal="true"
android:paddingBottom="10dp"/>
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
@ -106,7 +125,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:padding="12dp"/>
android:padding="10dp"/>
<ImageView
android:id="@+id/speaker"

View file

@ -41,7 +41,9 @@
<ImageView
android:id="@+id/back_to_call"
android:src="@drawable/call_back_button"
android:src="@drawable/call_back"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_back_call"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -51,6 +53,8 @@
<ImageView
android:id="@+id/edit"
android:src="@drawable/edit_list_button"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_edit_list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -65,25 +69,33 @@
android:layout_width="match_parent"
android:layout_height="1dp"/>
<LinearLayout
android:id="@+id/footer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:background="@color/colorD">
<RelativeLayout
android:id="@+id/message_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/send_picture"
android:padding="15dp"
android:scaleType="center"
<LinearLayout
android:id="@+id/message_layout"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/send_picture"
android:src="@drawable/chat_send_file"
android:contentDescription="@string/content_description_send_file"
android:padding="5dp"
android:layout_weight="0.1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<EditText
android:id="@+id/message"
android:textColor="@color/colorB"
android:imeOptions="flagNoExtractUi"
android:textCursorDrawable="@null"
android:inputType="textMultiLine"
android:contentDescription="@string/content_description_message"
android:maxLines="3"
android:padding="5dp"
android:layout_margin="5dp"
android:layout_weight="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
@ -97,9 +109,11 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/chat_send_message"
android:layout_alignTop="@+id/message"
android:layout_alignParentRight="true"/>
android:contentDescription="@string/content_description_send_message"
android:padding="5dp"
android:layout_weight="0.1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<EditText
android:id="@+id/message"

View file

@ -1,86 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bubble"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/resizable_chat_bubble_incoming"
android:orientation="horizontal" >
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp"
android:paddingRight="10dp">
<TextView
android:id="@+id/contact_header"
style="@style/font12"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/message"
style="@style/font14"
android:linksClickable="true"
android:autoLink="web"
android:layout_gravity="left"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<ImageView
android:id="@+id/image"
android:visibility="gone"
android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="centerInside"
android:maxWidth="250dp"
android:maxHeight="250dp" />
<RelativeLayout
android:id="@+id/file_transfer_layout"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
android:paddingRight="5dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="150dp"
android:layout_height="5dp"/>
<Button
android:id="@+id/accept_download"
android:text="@string/download"
android:background="@drawable/resizable_confirm_delete_button"
style="@style/font7"
android:textAllCaps="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_below="@id/progress_bar"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bubble"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="left"
android:orientation="horizontal">
<CheckBox
android:id="@+id/delete"
android:id="@+id/delete_message"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:layout_marginLeft="5dp"
@ -91,5 +18,95 @@
android:layout_alignParentRight="true"
android:visibility="gone" />
<LinearLayout
android:id="@+id/message_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
</LinearLayout>
<LinearLayout
android:background="@drawable/resizable_chat_bubble_incoming"
android:layout_height="wrap_content"
android:padding="10dp"
android:orientation="horizontal">
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:contentDescription="@string/content_description_contact_picture"
android:layout_width="40dp"
android:layout_height="40dp"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_chat_mask"
android:layout_width="40dp"
android:layout_height="40dp"/>
</RelativeLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp">
<TextView
android:id="@+id/contact_header"
style="@style/font9"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/message"
style="@style/font11"
android:linksClickable="true"
android:autoLink="web"
android:visibility="gone"
android:maxHeight="250dp" />
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/image"
android:layout_width="150dp"
android:layout_height="150dp"
android:scaleType="centerInside"
android:visibility="gone"
android:maxWidth="250dp"
android:maxHeight="250dp"/>
<RelativeLayout
android:id="@+id/file_transfer_layout"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ProgressBar
android:id="@+id/progress_bar"
style="@android:style/Widget.ProgressBar.Horizontal"
android:paddingRight="5dp"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:layout_width="150dp"
android:layout_height="5dp"/>
<Button
android:id="@+id/accept_download"
android:text="@string/accept"
android:background="@drawable/resizable_assistant_button"
style="@style/font8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/progress_bar"/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>

View file

@ -6,7 +6,7 @@
android:orientation="horizontal">
<CheckBox
android:id="@+id/delete"
android:id="@+id/delete_message"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:layout_marginLeft="5dp"
@ -21,7 +21,7 @@
android:background="@drawable/resizable_chat_bubble_outgoing"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/delete"
android:layout_toLeftOf="@id/delete_message"
android:orientation="horizontal">

View file

@ -24,7 +24,7 @@
<ImageView
android:id="@+id/back_in_call"
android:src="@drawable/call_back_button"
android:contentDescription="@string/content_description_call"
android:contentDescription="@string/content_description_back_call"
android:visibility="invisible"
android:layout_width="0dp"
android:layout_height="match_parent"
@ -39,7 +39,7 @@
<ImageView
android:id="@+id/edit"
android:src="@drawable/edit_list_button"
android:contentDescription="@string/content_description_edit"
android:contentDescription="@string/content_description_edit_list"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"

View file

@ -11,13 +11,11 @@
android:id="@+id/delete_chatroom"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:paddingRight="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:visibility="gone" />
<LinearLayout
android:layout_width="match_parent"
@ -44,6 +42,13 @@
android:layout_height="35dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"/>
</RelativeLayout>
<TextView
@ -65,10 +70,8 @@
<TextView
android:id="@+id/sipUri"
android:lines="1"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="end"
android:scrollHorizontally="true"
android:fadingEdge="horizontal"
android:singleLine="true"
style="@style/font2"
android:layout_width="wrap_content"
@ -79,6 +82,7 @@
android:id="@+id/unreadMessages"
android:layout_width="20dp"
android:layout_height="20dp"
android:contentDescription="@string/content_description_unread_chat_message"
android:background="@drawable/chat_list_indicator"
style="@style/font7"
android:gravity="center"
@ -94,7 +98,8 @@
android:layout_below="@id/sipUri"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/font9"/>
android:layout_marginRight="30dp"
style="@style/font11"/>
</RelativeLayout>

View file

@ -49,9 +49,9 @@
<ImageView
android:id="@+id/quitConference"
android:src="@drawable/conference_exit_default"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="20dp"
android:contentDescription="@string/content_description_exit_conference"
android:layout_width="30dp"
android:layout_height="30dp"
android:gravity="center_vertical"
android:scaleType="fitCenter"
android:adjustViewBounds="true" />

View file

@ -69,12 +69,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/contact_function"
style="@style/font2"
android:singleLine="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:layout_width="100dp"
android:layout_height="100dp"
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
</LinearLayout>
</LinearLayout>

View file

@ -33,6 +33,29 @@
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
</RelativeLayout>
<CheckBox
android:id="@+id/delete"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:visibility="gone"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
<TextView
android:id="@+id/name"
android:lines="1"
@ -56,18 +79,6 @@
android:scaleType="centerInside"
android:src="@drawable/led_connected" />
<CheckBox
android:id="@+id/delete"
android:button="@drawable/checkbox"
android:contentDescription="@string/content_description_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_centerInParent="true"
android:visibility="gone"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
</RelativeLayout>
</LinearLayout>

View file

@ -32,7 +32,7 @@
<ImageView
android:id="@+id/contact_call"
android:src="@drawable/call_start_button"
android:contentDescription="@string/content_description_dial_back"
android:contentDescription="@string/content_description_call"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="10dp"

View file

@ -14,7 +14,7 @@
<ImageView
android:id="@+id/back"
android:src="@drawable/back"
android:contentDescription="@string/content_description_back"
android:contentDescription="@string/content_description_cancel_button"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -37,7 +37,7 @@
<ImageView
android:id="@+id/ok"
android:src="@drawable/valid"
android:contentDescription="@string/content_description_edit"
android:contentDescription="@string/content_description_valid"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -74,6 +74,19 @@
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:contentDescription="@string/content_description_contact_picture"
android:layout_width="100dp"
android:layout_height="100dp"
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
</RelativeLayout>
<TextView
android:text="@string/contact_last_name"
style="@style/font13"
@ -86,6 +99,7 @@
android:id="@+id/contactLastName"
android:background="@drawable/resizable_textfield"
style="@style/font6"
android:contentDescription="@string/content_description_contact_last_name"
android:textCursorDrawable="@null"
android:layout_width="match_parent"
android:layout_height="40dp"
@ -106,6 +120,7 @@
android:textCursorDrawable="@null"
android:background="@drawable/resizable_textfield"
style="@style/font6"
android:contentDescription="@string/content_description_contact_first_name"
android:layout_width="match_parent"
android:layout_height="40dp"
android:gravity="left"
@ -115,6 +130,7 @@
</LinearLayout>
<LinearLayout
android:id="@+id/sip_addresses"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
@ -152,8 +168,8 @@
</LinearLayout>
<LinearLayout
android:id="@+id/phone_numbers"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"

View file

@ -18,7 +18,8 @@
android:layout_toStartOf="@+id/delete"/>
<ImageView
android:id="@+id/delete"
android:id="@+id/delete_field"
android:src="@drawable/delete_field_default"
android:contentDescription="@string/content_description_add"
android:layout_gravity="center"
android:layout_width="30dp"

View file

@ -6,13 +6,91 @@
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="60dp">
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2">
<ImageView
android:id="@+id/all_contacts"
android:src="@drawable/contacts_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_all_contacts"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<View
android:id="@+id/all_contacts_select"
android:background="@color/colorA"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2">
<ImageView
android:id="@+id/linphone_contacts"
android:src="@drawable/contacts_sip"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_linphone_contacts"
android:gravity="center"
android:padding="15dp"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<View
android:id="@+id/linphone_contacts_select"
android:background="@color/colorA"
android:layout_width="match_parent"
android:layout_height="5dp"
android:visibility="gone"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"/>
<ImageView
android:id="@+id/newContact"
android:src="@drawable/contact_add"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_edit"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:padding="15dp"/>
<ImageView
android:id="@+id/edit"
android:src="@drawable/edit_list_button"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_edit"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:padding="15dp"/>
</LinearLayout>
<include layout="@layout/edit_list"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_margin="10dp">
<EditText
android:contentDescription="@string/content_description_search"
android:contentDescription="@string/content_description_search_contact"
android:textCursorDrawable="@null"
android:id="@+id/searchField"
android:layout_weight="0.15"
@ -44,9 +122,8 @@
android:id="@+id/contactsList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/colorF"
android:divider="@color/colorE"
android:fastScrollAlwaysVisible="true"
android:fastScrollEnabled="true"
android:dividerHeight="1dp" />
<TextView

View file

@ -15,7 +15,12 @@
<org.linphone.ui.EraseButton
android:id="@+id/erase"
<<<<<<< HEAD
android:src="@drawable/erase_button"
=======
android:src="@drawable/backspace"
android:contentDescription="@string/content_description_backspace"
>>>>>>> public/master
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
@ -61,13 +66,31 @@
android:background="@drawable/button_back_background"
android:layout_width="102dp"
android:layout_height="wrap_content"
<<<<<<< HEAD
android:padding="20dp"
android:visibility="gone"/>
=======
android:layout_weight="1"
android:adjustViewBounds="true">
<ImageView
android:id="@+id/add_contact"
android:src="@drawable/contact_add_button"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_add_contact"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
>>>>>>> public/master
<org.linphone.ui.CallButton
android:id="@+id/call"
android:src="@drawable/call_audio_start"
android:background="@drawable/call"
android:contentDescription="@string/content_description_call"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="12dp"

View file

@ -9,7 +9,13 @@
<ImageView
android:id="@+id/cancel"
<<<<<<< HEAD
android:src="@drawable/cancel_button"
=======
android:src="@drawable/cancel_edit"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_cancel_button"
>>>>>>> public/master
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -22,7 +28,13 @@
<ImageView
android:id="@+id/select_all"
<<<<<<< HEAD
android:src="@drawable/select_all_button"
=======
android:src="@drawable/select_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_select_all"
>>>>>>> public/master
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -30,7 +42,13 @@
<ImageView
android:id="@+id/deselect_all"
<<<<<<< HEAD
android:src="@drawable/deselect_all_button"
=======
android:src="@drawable/deselect_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_deselect_all"
>>>>>>> public/master
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
@ -40,6 +58,11 @@
<ImageView
android:id="@+id/delete"
android:src="@drawable/delete_button"
<<<<<<< HEAD
=======
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_delete_selection"
>>>>>>> public/master
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"

View file

@ -38,7 +38,12 @@
<ImageView
android:id="@+id/edit"
android:src="@drawable/edit_list_button"
<<<<<<< HEAD
android:contentDescription="@string/content_description_edit"
=======
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_edit_list"
>>>>>>> public/master
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"

View file

@ -22,6 +22,7 @@
android:layout_margin="5dp"
android:gravity="center_vertical">
<<<<<<< HEAD
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
@ -31,6 +32,34 @@
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
=======
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center">
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:contentDescription="@string/content_description_contact_picture"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
<ImageView
android:id="@+id/mask"
android:src="@drawable/avatar_mask"
android:layout_width="35dp"
android:layout_height="35dp"
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
</RelativeLayout>
>>>>>>> public/master
<ImageView
android:id="@+id/icon"
@ -69,10 +98,7 @@
android:id="@+id/sip_uri"
style="@style/font2"
android:lines="1"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:fadingEdge="horizontal"
android:ellipsize="end"
android:singleLine="true"
android:gravity="center_vertical"
android:layout_width="wrap_content"

View file

@ -1,9 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
<<<<<<< HEAD
android:background="@color/colorG"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
=======
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
>>>>>>> public/master
<LinearLayout
android:id="@+id/top_bar"
@ -14,7 +21,12 @@
<ImageView
android:id="@+id/back"
<<<<<<< HEAD
android:src="@drawable/back_button"
=======
android:src="@drawable/back"
android:background="@drawable/toolbar_button"
>>>>>>> public/master
android:contentDescription="@string/content_description_back"
android:layout_width="0dp"
android:layout_height="match_parent"
@ -39,6 +51,7 @@
android:orientation="horizontal">
<ImageView
<<<<<<< HEAD
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:contentDescription="@string/content_description_contact_picture"
@ -70,6 +83,16 @@
</LinearLayout>
=======
android:id="@+id/add_contact"
android:src="@drawable/contact_add"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_add_contact"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:padding="15dp"/>
>>>>>>> public/master
</LinearLayout>
<ScrollView
@ -151,8 +174,14 @@
android:padding="10dp">
<TextView
<<<<<<< HEAD
android:id="@+id/date"
style="@style/font2"
=======
android:id="@+id/contact_name"
style="@style/font5"
android:gravity="center_horizontal"
>>>>>>> public/master
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
@ -162,6 +191,83 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<<<<<<< HEAD
=======
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp"
android:gravity="center"
android:orientation="horizontal">
<ImageView
android:id="@+id/call"
android:src="@drawable/call_start_body_default"
android:contentDescription="@string/content_description_call"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="10dp"/>
<ImageView
android:id="@+id/chat"
android:src="@drawable/chat_start_body_default"
android:contentDescription="@string/content_description_chat"
android:layout_width="60dp"
android:layout_height="60dp"
android:layout_margin="10dp"/>
</LinearLayout>
<LinearLayout
android:id="@+id/log_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<View
android:background="@color/colorE"
android:layout_width="wrap_content"
android:layout_height="1dp"/>
<TextView
android:text="@string/call"
style="@style/font13"
android:textAllCaps="true"
android:layout_marginTop="2dp"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:gravity="center"
android:padding="10dp">
<ImageView
android:id="@+id/direction"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/date"
style="@style/font10"
android:paddingRight="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/time"
style="@style/font10"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
>>>>>>> public/master
</LinearLayout>
</LinearLayout>
</LinearLayout>

View file

@ -42,6 +42,7 @@
<ImageView
android:id="@+id/cancel"
android:src="@drawable/dialer_back"
android:contentDescription="@string/content_description_dialer_back"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:padding="15dp"
@ -88,11 +89,26 @@
<ImageView
android:id="@+id/history_image"
android:layout_width="match_parent"
<<<<<<< HEAD
android:layout_height="match_parent"
android:padding="18dp"
android:layout_centerInParent="true"
android:contentDescription="@string/content_description_history"
android:src="@drawable/footer_history"/>
=======
android:layout_height="wrap_content"
android:contentDescription="@string/content_description_history"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/history_select"
android:background="@color/colorA"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"
android:visibility="gone"/>
>>>>>>> public/master
<TextView
android:id="@+id/missed_calls"
@ -115,9 +131,30 @@
android:contentDescription="@string/content_description_contacts"
android:layout_weight="1"
android:layout_width="0dp"
<<<<<<< HEAD
android:layout_height="match_parent"
android:padding="18dp"
android:layout_centerInParent="true" />
=======
android:layout_height="match_parent">
<ImageView
android:src="@drawable/footer_contacts"
android:contentDescription="@string/content_description_contacts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/contacts_select"
android:background="@color/colorA"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"
android:visibility="gone"/>
</RelativeLayout>
>>>>>>> public/master
<ImageView
android:id="@+id/dialer"
@ -126,9 +163,30 @@
android:contentDescription="@string/content_description_dialer"
android:layout_weight="1"
android:layout_width="0dp"
<<<<<<< HEAD
android:layout_height="match_parent"
android:padding="18dp"
android:layout_centerInParent="true"/>
=======
android:layout_height="match_parent">
<ImageView
android:src="@drawable/footer_dialer"
android:contentDescription="@string/content_description_dialer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_centerInParent="true"/>
<View
android:id="@+id/dialer_select"
android:background="@color/colorA"
android:layout_width="match_parent"
android:layout_height="5dp"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
>>>>>>> public/master
<RelativeLayout
android:id="@+id/chat"
@ -140,6 +198,7 @@
<ImageView
android:id="@+id/chat_image"
android:src="@drawable/footer_chat"
android:contentDescription="@string/content_description_chat_button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="18dp"
@ -177,6 +236,7 @@
android:layout_height="match_parent"
android:layout_gravity="left">
<<<<<<< HEAD
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
@ -205,6 +265,8 @@
android:dividerHeight="1dp"/>
</LinearLayout>
=======
>>>>>>> public/master
<RelativeLayout
android:id="@+id/side_menu_quit"
android:background="@color/colorA"
@ -232,9 +294,44 @@
android:layout_toRightOf="@id/quit_button"
android:gravity="center_vertical"
android:layout_centerInParent="true"/>
</RelativeLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorH"
android:layout_above="@id/side_menu_quit"
android:orientation="vertical">
<include layout="@layout/side_menu_main_account"/>
<ListView
android:id="@+id/accounts_list"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:cacheColorHint="@color/transparent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"/>
<ListView
android:id="@+id/item_list"
android:background="@color/colorH"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:divider="@color/colorE"
android:listSelector="@color/colorH"
android:footerDividersEnabled="true"
android:dividerHeight="1dp"/>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:background="@color/colorE"/>
</LinearLayout>
</RelativeLayout>
</android.support.v4.widget.DrawerLayout>

View file

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<ProgressBar
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_marginBottom="20dp"/>
</LinearLayout>

View file

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/default_account"
android:contentDescription="@string/content_description_default_account"
android:background="@color/colorF"
android:layout_width="match_parent"
android:layout_height="70dp">
@ -42,8 +43,15 @@
android:src="@drawable/led_connected"
android:layout_width="25dp"
android:layout_height="25dp"
<<<<<<< HEAD
android:layout_alignParentRight="true"
android:padding="7dp"
android:layout_marginTop="10dp"/>
=======
android:padding="5dp"
android:layout_marginTop="10dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"/>
>>>>>>> public/master
</RelativeLayout>

View file

@ -14,6 +14,7 @@
<ImageView
android:id="@+id/side_menu_button"
android:src="@drawable/menu_burger"
android:contentDescription="@string/content_description_menu"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"

View file

@ -0,0 +1,54 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:gravity="top|center_horizontal"
android:orientation="vertical">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="horizontal">
<EditText
android:id="@+id/carddav_username"
android:hint="Username"
android:text="sylvain"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<EditText
android:id="@+id/carddav_pwd"
android:hint="Pwd"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<EditText
android:id="@+id/carddav_ha1"
android:hint="HA1"
android:text="4747ce2517a985f2fc20234a38f068b6"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
</LinearLayout>
<EditText
android:id="@+id/carddav_server"
android:hint="Server URL"
android:text="http://192.168.0.230/sabredav/addressbookserver.php/addressbooks/sylvain/default"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<Button
android:id="@+id/carddav_synchronize"
android:text="Synchronize"
android:layout_height="wrap_content"
android:layout_width="wrap_content"/>
<TextView
android:id="@+id/carddav_events"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:layout_weight="1"/>
</LinearLayout>

View file

@ -29,5 +29,11 @@
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:onClick="startBuddyStatusTutorial" />
<Button android:text="CardDAV Sync"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:onClick="startCardDavSyncTutorial"/>
</LinearLayout>

View file

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/video_frame"
android:layout_width="match_parent"
android:layout_height="match_parent">
<SurfaceView
android:visibility="visible"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:id="@+id/videoSurface" />
<SurfaceView
android:id="@+id/videoCaptureSurface"
android:layout_width="120dp"
android:layout_height="145dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>

BIN
res/raw/hold.mkv Normal file

Binary file not shown.

View file

@ -15,6 +15,7 @@ size=qvga
sharing_server=https://www.linphone.org:444/lft.php
tunnel=disabled
push_notification=1
auto_start=1
[tunnel]
host=

View file

@ -5,6 +5,7 @@
[net]
mtu=1300
<<<<<<< HEAD
[app]
animations=0
show_login_view=1
@ -12,6 +13,8 @@ debug_popup_magic=#1234
debug=1
server_url=http://85.233.205.218:443/xmlrpc
=======
>>>>>>> public/master
[sip]
guess_hostname=1
inc_timeout=15
@ -37,7 +40,6 @@ dtmf_player_amp=0.1
#remove this property for any application that is not Linphone public version itself
ec_calibrator_cool_tones=1
[misc]
max_calls=10
log_collection_upload_server_url=https://www.linphone.org:444/lft.php

Binary file not shown.

314
res/values-ar/strings.xml Normal file
View file

@ -0,0 +1,314 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--Custom-->
<string name="app_name">لِنْفُونْ</string>
<string name="service_name">خدمة لِنْفُونْ</string>
<string name="addressbook_label">لِنْفُونْ</string>
<string name="notification_title">لِنْفُونْ</string>
<string name="wait_dialog_text">يجري التشغيل</string>
<string name="notification_registered">%s مُسجَّل‬</string>
<string name="notification_register_failure">‫فشل %s في التسجيل‬</string>
<string name="tunnel_host"></string>
<!--Common-->
<string name="username">إسم المستخدم</string>
<string name="display_name">الإسم المعروض</string>
<string name="password">كلمة السر</string>
<string name="confirm_password">تأكيد كلمة السر</string>
<string name="domain">النطاق</string>
<string name="remote_provisioning_url">عنوان الموقع</string>
<string name="email">البريد الإلكتروني</string>
<string name="delete_text">أأنت متأكد من حذف تحديدك ؟</string>
<string name="delete">حذف</string>
<string name="retry">إعادة المحاولة</string>
<string name="cancel">إلغاء</string>
<string name="accept">قبول</string>
<string name="continue_text">استمرار</string>
<string name="about">حول</string>
<string name="deny">رفض</string>
<string name="no_account">لم يُهيَّأ أي حساب</string>
<string name="search">بحث</string>
<string name="outgoing">الصادرة</string>
<string name="incoming">الواردة</string>
<string name="missed">الفائتة</string>
<string name="settings">اﻹعدادات</string>
<string name="connect">الاتصال</string>
<string name="decline">رفض</string>
<string name="conference">اجتماع</string>
<!--Launch screen-->
<string name="app_description">‫الزبون SIP <i>الحر</i></string>
<!--Assistant-->
<string name="welcome">مرحبا</string>
<string name="assistant">المرشد</string>
<string name="assistant_create_account">إنشاء الحساب</string>
<string name="assistant_finish">أنهِ التهئية</string>
<string name="assistant_validate_account">لقد أُنشِيء حسابك. يُرجى الاطلاع على رسائل بريدك الإلكتروني لتأكيد حسابك. حالما تنتهي من ذلك، عُد إلى هنا واضغط على الزر.</string>
<string name="assistant_welcome_desc">سيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات.</string>
<string name="assistant_linphone_login_desc">أدخِل اسم المستخدم وكلمة السر لحساب لِنْفُونْ</string>
<string name="assistant_login_desc">‫أدخِل اسم المستخدم وكلمة السر الحساب مع نطاق SIP</string>
<string name="assistant_remote_provisioning_desc">يٌرجى إدخال عنوان التهئية البعيدة</string>
<string name="transport">النقل</string>
<string name="assistant_login_linphone">استخدم حساب لِنْفُونْ</string>
<string name="assistant_login_generic">استخدم حساب SIP</string>
<string name="assistant_remote_provisioning">اجذب التهئية البعيدة</string>
<string name="assistant_create_account_part_1">1/2</string>
<string name="assistant_create_account_part_2">2/2</string>
<string name="assistant_display_name_optional">الاسم المعروض (اختياري)</string>
<string name="assistant_linphone_account">هيِّءْ حساب لِنْفُونْ</string>
<string name="assistant_generic_account">هيِّءْ حساب SIP</string>
<string name="assistant_remote_provisioning_title">اجذب التهئية البعيدة</string>
<string name="assistant_fetch_apply">اجذبْ وطبِّق</string>
<string name="assistant_login">الولوج</string>
<string name="assistant_ec_calibration">معايرة مزيل الصدى في طور الإنجاز</string>
<string name="assistant_remote_provisioning_login">أدخل اسم الولوج</string>
<string name="assistant_account_not_validated">لم يتم تأكيد حسابك بعد.</string>
<string name="assistant_account_validated">تم تأكيد حسابك.</string>
<string name="assistant_error_bad_credentials">اسم المسخدم أو كلمة السر غير صحيحة</string>
<string name="wizard_failed">حدث خطأ، حاول لاحقا.</string>
<string name="wizard_server_unavailable">انعدام الوصول للخادم، تأكد من اتصالك بالشبكة.</string>
<string name="wizard_username_unavailable">إن إسم المستخدم هذا مُستعمَل.</string>
<string name="wizard_username_incorrect">اسم المستخدم غير صحيح.</string>
<string name="wizard_email_incorrect">عنوانك الإلكتروني غير صحيح.</string>
<string name="wizard_password_incorrect">كلمة السر غير صحيحة.</string>
<string name="wizard_passwords_unmatched">كلمتا السر غير متطابقتين.</string>
<string name="setup_confirm_username">سيكون اسم المستخدم هو %s.\r\n\r\nقد يختلف عما أدخلته ليوافق المعايير.\r\nأتقبل ذلك ؟</string>
<string name="first_launch_no_login_password">يُرجى إدخال إسم المستخدم وكلمة السر</string>
<!--Dailer-->
<string name="address_bar_hint">أدخل رقما أو عنوانا</string>
<!--History-->
<string name="no_call_history">لا وجود للمكالمات في تاريخك</string>
<string name="no_missed_call_history">لا وجود للمكالمات الفائتة في تاريخك</string>
<string name="delete_history_log">أتود حذف سجل المكالمات المحددة ؟</string>
<string name="today">اليوم</string>
<string name="yesterday">اﻷمس</string>
<!--Contacts-->
<string name="no_contact">لا وجود لأي جهة اتصال في دفتر عناوينك.</string>
<string name="no_sip_contact">لا وجود لأي جهة اتصال SIP في دفتر عناوينك.</string>
<string name="delete_contacts">أتود حذف جهات الاتصال المحددة ؟</string>
<string name="delete_contact">أتود حذف جهة الاتصال المحددة ؟</string>
<string name="sip_address">عنوان SIP</string>
<string name="phone_number">رقم الهاتف</string>
<string name="contact_first_name">اﻹسم</string>
<string name="contact_last_name">اللقب</string>
<!--Chat-->
<string name="no_chat_history">لا وجود لأي محادثة</string>
<string name="delete_conversation">أتود حذف المحادثات المحددة ؟</string>
<string name="delete_message">أتود حذف الرسالة المحددة ؟</string>
<string name="remote_composing">المُراسِل يكتب...</string>
<string name="share_picture_size_small">صغيرة</string>
<string name="share_picture_size_medium">متوسطة</string>
<string name="share_picture_size_large">كبيرة</string>
<string name="share_picture_size_real">الحجم الحقيقي</string>
<string name="text_copied_to_clipboard">نُسخ النص في الحافظة</string>
<string name="copy_text">نسخ النص</string>
<string name="image_picker_title">اختر المصدر</string>
<string name="image_saved">حُفظَت الصورة</string>
<string name="image_not_saved">خطأ، لم تُحفَظ الصورة</string>
<string name="wait">يُرجى الانتظار...</string>
<string name="processing_image">قد تستلزم معالجة الصور بضع ثوان حسب حجم الملف.</string>
<!--Status Bar-->
<string name="status_connected">مُسجَّل</string>
<string name="status_not_connected">غير مُسجَّل</string>
<string name="status_in_progress">يجري التسجيل</string>
<string name="status_error">فشِل التسجيل</string>
<string name="voicemail_unread">الرسائل غير المقروءة</string>
<!--Side Menu-->
<string name="menu_assistant">المرشد</string>
<string name="menu_settings">اﻹعدادات</string>
<string name="menu_about">حول</string>
<string name="quit">غادِرْ</string>
<!--Call-->
<string name="incoming_call">مكالمة واردة</string>
<string name="outgoing_call">مكالمة صادرة</string>
<string name="add_video_dialog">يود مخاطبك تشغيل الفيديو</string>
<string name="no_current_call">لا وجود لأي مكالمة نشيطة</string>
<string name="call_paused_by_remote">أوقف مخاطبك المكالمة مؤقتا</string>
<string name="couldnt_accept_call">حدث خطأ خلال قبول المكالمة</string>
<string name="zrtp_dialog">رمز ZRTP هو %s\nيُفترَض عليك قبوله فقط إذا كان مخاطبك قد أخبرك برؤيته لنفس الرمز الذي تراه</string>
<string name="unknown_incoming_call_name">مجهول</string>
<string name="call_stats_audio">الصوت</string>
<string name="call_stats_video">الفيديو</string>
<string name="call_stats_codec">المِرماز :</string>
<string name="call_stats_upload">صبيب الرفع :</string>
<string name="call_stats_download">صبيب التنزيل :</string>
<string name="call_stats_ice">توصيل ICE :</string>
<string name="call_stats_video_resolution">مقاس الفيديو :</string>
<string name="call">مكالمة</string>
<!--About-->
<string name="menu_send_log">إرسال السجل</string>
<string name="menu_reset_log">إعادة تعيين السجل</string>
<!--Service-->
<string name="incall_notif_active">المكالمة الصوتية الجارية</string>
<string name="incall_notif_paused">المكالمة الموقَّفة مؤقتا الجارية</string>
<string name="incall_notif_video">المكالمة المرئية الجارية</string>
<string name="notification_started">بدَأ</string>
<string name="unread_messages">%i رسائل غير مقروءة</string>
<!--Errors-->
<string name="skipable_error_service_not_ready">تحذير : الخدمة غير جاهزة</string>
<string name="error">خطأ</string>
<string name="warning_wrong_destination_address">لا يمكن تركيب عنوان الوجهة انطلاقا من %s</string>
<string name="error_unknown">خطأ مجهول</string>
<string name="error_call_declined">مكالمة مرفوضة</string>
<string name="error_user_not_found">لم يعثر على المستخدم</string>
<string name="error_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>
<string name="error_io_error">خطأ في الشبكة</string>
<string name="download_image_failed">فشل التنزيل. يُرجى التحقق من اتصالك بالشبكة أو الإعادة لاحقا.</string>
<string name="remote_provisioning_failure">فشِل تنزيل أو تطبيق تشكيلة التهيئة عن بعد</string>
<string name="remote_provisioning_again_title">التهيئة عن بعد</string>
<string name="remote_provisioning_again_message">أتود تغيير عنوان التهئية البعيدة ؟</string>
<!--Account Settings-->
<string name="pref_sipaccount">حساب SIP</string>
<string name="pref_manage_title">الإدارة</string>
<string name="pref_disable_account">إيقاف</string>
<string name="pref_proxy">الوسيط</string>
<string name="pref_domain">النطاق*</string>
<string name="pref_passwd">كلمة السر*</string>
<string name="pref_username">إسم المستخدم*</string>
<string name="pref_enable_outbound_proxy">وسيط التوجُّه</string>
<string name="pref_help_proxy">إسم مضيف وسيط SIP أو عنوان IP (اختياري)</string>
<string name="pref_help_outbound_proxy">توجيه كل المكالمات عبر وسيط SIP</string>
<string name="pref_help_username">مثلا : john إذا كان حسابك john@sip.example.org</string>
<string name="pref_help_domain">sip.example.org إذا كان حسابك john@sip.example.org</string>
<string name="pref_help_password">يجب عليك إدخال كلمة السر مرة أخرى إذا أردت تحرير إسم المستخدم أو النطاق</string>
<string name="pref_expire_title">انتهاء الصلاحية</string>
<string name="pref_avpf">AVPF</string>
<string name="pref_avpf_rr_interval">نطاق RTCP الاعتيادي لـ AVPF بالثواني (ما بين 1 و 5)</string>
<string name="pref_escape_plus">استبدال + بـ 00</string>
<string name="pref_auth_userid">مُعرِّف استيثاق المستخدم</string>
<string name="pref_help_auth_userid">ادخل مُعرِّف استيثاق المستخدم (اختياري)</string>
<string name="pref_display_name">الإسم المعروض</string>
<string name="pref_help_display_name">ادخل الاسم المعروض (اختياري)</string>
<string name="pref_prefix">البادِئة</string>
<string name="pref_transport">النقل</string>
<string name="pref_transport_udp">UDP</string>
<string name="pref_transport_tcp">TCP</string>
<string name="pref_transport_tls">TLS</string>
<string name="pref_delete_account">حذف هذا الحساب</string>
<string name="pref_default_account">استخدام كافتراضي</string>
<!--Settings-->
<string name="pref_sipaccounts">حسابات SIP</string>
<string name="default_account_flag">الحساب الافتراضي</string>
<string name="pref_add_account">إضافة حساب</string>
<string name="pref_tunnel">النفق</string>
<string name="pref_tunnel_host">إسم المضيف</string>
<string name="pref_tunnel_port">المنفذ</string>
<string name="pref_tunnel_mode">الوضع</string>
<!--do not change order without changing corresponding entry_values in non_localizable_strings.xml-->
<string-array name="tunnel_mode_entries">
<item>غير مُشغَّل</item>
<item>3G فقط</item>
<item>دائما</item>
<item>تلقائي</item>
</string-array>
<string name="pref_none">بدون</string>
<string name="pref_preferences_title">التفضيلات</string>
<string name="pref_video_enable_title">تشغيل الفيديو</string>
<!--Audio settings-->
<string name="pref_audio_title">الصوت</string>
<string name="pref_echo_cancellation">إزالة الصدى</string>
<string name="pref_echo_cancellation_summary">إزالة الصدى المسموع من الطرف الآخر</string>
<string name="pref_echo_canceller_calibration">معايرة مزيل الصدى</string>
<string name="ec_calibrating">يُعايِر...</string>
<string name="no_echo">لا وجود لصدى</string>
<string name="failed">فشِل</string>
<string name="pref_adaptive_rate_control">التحكم في ملائمة الصبيب</string>
<string name="pref_codec_bitrate_limit">حد صبيب المِرماز</string>
<string name="pref_codecs">المراميز</string>
<!--Video settings-->
<string name="pref_video_title">الفيديو</string>
<string name="pref_video_use_front_camera_title">استخدام الكاميرا الأمامية</string>
<string name="pref_video_initiate_call_with_video_title">بدء اتصالات بالصورة</string>
<string name="pref_video_initiate_call_with_video">أرسِل دائما طلبات الفيديو</string>
<string name="pref_video_automatically_accept_video_title">قبول طلبات الفيديو الواردة</string>
<string name="pref_video_automatically_accept_video">قبول طلبات الفيديو دائما</string>
<string name="pref_preferred_video_size">حجم الفيديو المفضل</string>
<string name="pref_preferred_fps">معدل الإطارات المفضل</string>
<string name="pref_bandwidth_limit">حد سعة القناة بـ ك.بِتْ/ثانية</string>
<string name="pref_video_codecs_title">المراميز</string>
<!--Call settings-->
<string name="pref_call_title">مكالمة</string>
<string name="pref_rfc2833_dtmf">إرسال RFC2833 DTMFs</string>
<string name="pref_sipinfo_dtmf">إرسال SIP INFO DTMFs</string>
<string name="pref_voice_mail">عنوان العلبة الصوتية</string>
<!--Network settings-->
<string name="pref_network_title">الشبكة</string>
<string name="pref_wifi_only">استخدم WiFi فقط</string>
<string name="pref_stun_server">خادم STUN</string>
<string name="pref_ice_enable">تشغيل ICE</string>
<string name="pref_upnp_enable">تشغيل UPnP</string>
<string name="pref_transport_use_random_ports">استخدم منافذ عشوائية</string>
<string name="pref_sip_port_title">منفذ SIP المُراد استخدامه</string>
<string name="pref_video_port_title">منفذ الفيديو أو نطاق المنفذ</string>
<string name="pref_audio_port_title">منفذ الصوت أو نطاق المنفذ</string>
<string name="pref_video_port_description">منفذ الفيديو أو نطاق المنفذ (الأدنى الأقصى)</string>
<string name="pref_audio_port_description">منفذ الصوت أو نطاق المنفذ (الأدنى الأقصى)</string>
<string name="pref_media_encryption">وسيط التعمية</string>
<string name="pref_push_notification">تشغيل إشعارات التنبيه</string>
<string name="pref_ipv6_title">رخِّصْ IPv6</string>
<!--Advanced settings-->
<string name="pref_advanced_title">متقدم</string>
<string name="pref_debug">التنقيح</string>
<string name="pref_background_mode">وضع الخلفية</string>
<string name="pref_animation_enable_title">تشغيل التحريكات</string>
<string name="pref_autostart">البدء خلال الإقلاع</string>
<string name="pref_incoming_call_timeout_title">مهلة الانتظار قبل رفض المكالمة (بالثواني)</string>
<string name="pref_image_sharing_server_title">خادم المشاركة</string>
<string name="pref_remote_provisioning_title">التهيئة عن بعد</string>
<string name="pref_primary_account_title">الحساب اﻷوَّلي</string>
<string name="pref_display_name_title">الإسم المعروض</string>
<string name="pref_user_name_title">إسم المستخدم</string>
<!--Audio hack settings-->
<string name="pref_audio_hacks_title">تطويعات الصوت</string>
<string name="pref_audio_use_specific_mode_title">استخدم وضع محددا للتطويع</string>
<string name="pref_audio_use_specific_mode_summary">0=MODE_NORMAL (افتراضي)، 2=MODE_IN_CALL</string>
<string name="pref_audio_hacks_use_routing_api_title">استخدم تطويعات API التوجيه</string>
<string name="pref_audio_hacks_use_galaxys_hack_title">استخدم تطويعات الصوت لـ Galaxy S</string>
<!--Content description-->
<string name="content_description_back">الرجوع</string>
<string name="content_description_dialer">لوحة المفاتيح</string>
<string name="content_description_toggle_micro">تبديل الميكروفون</string>
<string name="content_description_toggle_speaker">تبديل مكبر الصوت</string>
<string name="content_description_decline">رفض</string>
<string name="content_description_hang_up">ضع السماعة</string>
<string name="content_description_accept">قبول</string>
<string name="content_description_edit">تحرير</string>
<string name="content_description_add_contact">إضافة إلى جهات الاتصال</string>
<string name="content_description_new_contact">جهة اتصال جديدة</string>
<string name="content_description_call">مكالمة</string>
<string name="content_description_backspace">مسافة</string>
<string name="content_description_chat">المحادثة</string>
<string name="content_description_dial_back">إعادة الاتصال</string>
<string name="content_description_contact_picture">صورة جهة الاتصال</string>
<string name="content_description_send_message">إرسال رسالة</string>
<string name="content_description_detail">التفاصيل</string>
<string name="content_description_delete">حذف</string>
<string name="content_description_add">إضافة مكالمة</string>
<string name="content_description_new_discussion">محادثة جديدة</string>
<string name="content_description_search">بحث</string>
<string name="content_description_all_contacts">كل جهات الاتصال</string>
<string name="content_description_linphone_contacts">جهات اتصال Linphone</string>
<string name="content_description_call_direction">اتجاه الاتصال</string>
<string name="content_description_all_calls">كل المكالمات</string>
<string name="content_description_missed_calls">المكالمات الفائتة</string>
<string name="content_description_switch_video">تبديل الفيديو</string>
<string name="content_description_add_call">إضافة مكالمة</string>
<string name="content_description_pause">توقيف مؤقت</string>
<string name="content_description_numpad">لوحة الأرقام</string>
<string name="content_description_history">زر التاريخ</string>
<string name="content_description_chat_button">زر المحادثات</string>
<string name="content_description_contacts">رز جهات الاتصال</string>
<string name="content_description_call_quality">جودة المكالمة</string>
<string name="content_description_encryption">التعمية</string>
<string name="content_description_switch_camera">تبديل الكاميرا</string>
<string name="content_description_cancel_button">زر الإلغاء</string>
<string name="content_description_message_status">حالة الرسالة</string>
<string name="content_description_conference">اجتماع</string>
<string name="content_description_default_account">الحساب الافتراضي</string>
<string name="content_description_contact_first_name">اﻹسم</string>
<string name="content_description_contact_last_name">اللقب</string>
<string name="content_description_transfer">تحويل</string>
<string name="content_description_bluetooth">بلوتوث</string>
</resources>

243
res/values-de/strings.xml Normal file
View file

@ -0,0 +1,243 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<!--Custom-->
<string name="app_name">Linphone</string>
<string name="service_name">Linphone-Dienst</string>
<string name="addressbook_label">Linphone</string>
<string name="notification_title">Linphone</string>
<string name="wait_dialog_text">Startvorgang</string>
<string name="tunnel_host"></string>
<!--Common-->
<string name="username">Benutzername</string>
<string name="display_name">Anzeigename</string>
<string name="password">Passwort</string>
<string name="delete">Löschen</string>
<string name="retry">Erneut versuchen</string>
<string name="cancel">Abbrechen</string>
<string name="accept">Annehmen</string>
<string name="continue_text">Fortsetzen</string>
<string name="about">Über</string>
<string name="deny">Verweigern</string>
<string name="search">Suchen</string>
<string name="outgoing">Ausgehend</string>
<string name="incoming">Eingehend</string>
<string name="missed">Verpasst</string>
<string name="settings">Einstellungen</string>
<string name="decline">Ablehnen</string>
<string name="conference">Konferenz</string>
<!--Launch screen-->
<!--Assistant-->
<string name="assistant_welcome_desc">Dieser Assistent wird Ihnen dabei helfen, ein SIP-Konto für Ihre Anrufe zu verwenden.</string>
<string name="transport">Transport</string>
<string name="assistant_account_not_validated">Ihr Konto wurde noch nicht überprüft.</string>
<string name="assistant_account_validated">Ihr Konto wurde überprüft.</string>
<string name="wizard_failed">Es ist ein Fehler aufgetreten, versuchen Sie es später nochmal</string>
<string name="wizard_username_unavailable">Der Benutzername wird bereits verwendet.</string>
<string name="first_launch_no_login_password">Bitte geben Sie Ihren Benutzername und Ihr Passwort ein</string>
<!--Dailer-->
<!--History-->
<string name="today">Heute</string>
<string name="yesterday">Gestern</string>
<!--Contacts-->
<string name="no_contact">Kein Kontakt in Ihrem Adressbuch.</string>
<string name="no_sip_contact">Kein SIP-Kontakt in Ihrem Adressbuch.</string>
<string name="sip_address">SIP-Adresse</string>
<string name="phone_number">Telefonnummer</string>
<string name="contact_first_name">Vorname</string>
<string name="contact_last_name">Nachname</string>
<!--Chat-->
<string name="remote_composing">Partner schreibt...</string>
<string name="share_picture_size_small">Klein</string>
<string name="share_picture_size_medium">Mittel</string>
<string name="share_picture_size_large">Groß</string>
<string name="share_picture_size_real">Echte Größe</string>
<string name="text_copied_to_clipboard">Text in die Zwischenablage kopiert</string>
<string name="copy_text">Kopiere Text</string>
<string name="image_picker_title">Wähle Quelle</string>
<string name="image_saved">Bild gespeichert</string>
<string name="image_not_saved">Fehler, Bild nicht gespeichert</string>
<string name="wait">Bitte warten...</string>
<string name="processing_image">Bild wird verarbeitet. Je nach Größe der Datei kann dies mehrere Sekunden in Anspruch nehmen</string>
<!--Status Bar-->
<string name="status_connected">Registriert</string>
<string name="status_in_progress">Registrierung in Arbeit</string>
<string name="status_error">Registierung fehlgeschlagen</string>
<string name="voicemail_unread">ungelesene Nachrichten</string>
<!--Side Menu-->
<string name="menu_settings">Einstellungen</string>
<string name="menu_about">Über</string>
<!--Call-->
<string name="unknown_incoming_call_name">Unbekannt</string>
<string name="call_stats_audio">Audio</string>
<string name="call_stats_video">Video</string>
<string name="call_stats_codec">Codec:</string>
<string name="call_stats_upload">Upload-Bandbreite:</string>
<string name="call_stats_download">Download-Bandbreite:</string>
<string name="call_stats_ice">ICE-Konnektivität:</string>
<string name="call_stats_video_resolution">Videogröße:</string>
<string name="call">Anruf</string>
<!--About-->
<string name="menu_send_log">Protokoll senden</string>
<string name="menu_reset_log">Protokoll zurücksetzen</string>
<!--Service-->
<string name="incall_notif_active">Anruf fortsetzen</string>
<string name="incall_notif_paused">Pausierten Anruf fortsetzen</string>
<string name="incall_notif_video">Video-Anruf fortsetzen</string>
<string name="notification_started">begonnen</string>
<string name="unread_messages">%i ungelesene Nachrichten</string>
<!--Errors-->
<string name="skipable_error_service_not_ready">Warnung: Dienst ist nicht bereit</string>
<string name="error">Fehler</string>
<string name="error_unknown">Unbekannter Fehler</string>
<string name="error_call_declined">Anruf abgelehnt</string>
<string name="error_user_not_found">Benutzer nicht gefunden</string>
<string name="error_incompatible_media">Inkompatible Medienparameter</string>
<string name="error_network_unreachable">Netzwerk ist nicht erreichbar</string>
<string name="error_bad_credentials">Falsche Anmeldedaten</string>
<string name="error_unauthorized">Unzulässig</string>
<string name="error_io_error">Netzwerkfehler</string>
<string name="remote_provisioning_failure">Fehler beim Herunterladen oder Anwenden des Fernbereitstellungsprofils...</string>
<string name="remote_provisioning_again_title">Fernbereitstellung</string>
<!--Account Settings-->
<string name="pref_sipaccount">SIP-Konto</string>
<string name="pref_manage_title">Verwalten</string>
<string name="pref_disable_account">Deaktivieren</string>
<string name="pref_proxy">Proxy</string>
<string name="pref_domain">Domain*</string>
<string name="pref_passwd">Passwort*</string>
<string name="pref_username">Benutzername*</string>
<string name="pref_enable_outbound_proxy">Ausgehender Proxy</string>
<string name="pref_help_proxy">SIP-Proxy-Hostname oder IP-Adresse (optional)</string>
<string name="pref_help_outbound_proxy">Alle Anrufe üder einen SIP Proxy leiten</string>
<string name="pref_help_username">Beispiel: John, wenn ihr Konto john@sip.example.org ist</string>
<string name="pref_help_domain">sip.example.org, wenn Ihr Konto john@sip.example.org ist</string>
<string name="pref_help_password">Sie müssen Ihr Passwort erneut eingeben, wenn Sie Ihren Benutzernamen und/oder Domain ändern</string>
<string name="pref_expire_title">Ablaufen</string>
<string name="pref_avpf">AVPF</string>
<string name="pref_avpf_rr_interval"> AVPF Standard RTCP Interval in Sekunden (zwischen 1 und 5)</string>
<string name="pref_escape_plus">Ersetzen + durch 00</string>
<string name="pref_auth_userid">Authentifizierungs-Benutzerkennung</string>
<string name="pref_display_name">Anzeigename</string>
<string name="pref_prefix">Präfix</string>
<string name="pref_transport">Transport</string>
<string name="pref_transport_udp">UDP</string>
<string name="pref_transport_tcp">TCP</string>
<string name="pref_transport_tls">TLS</string>
<string name="pref_delete_account">Konto löschen</string>
<string name="pref_default_account">Als Standard benutzen</string>
<!--Settings-->
<string name="pref_sipaccounts">SIP-Konten</string>
<string name="default_account_flag">Standardkonto</string>
<string name="pref_add_account">Konto hinzufügen</string>
<string name="pref_tunnel">Tunnel</string>
<string name="pref_tunnel_host">Hostname</string>
<string name="pref_tunnel_port">Port</string>
<string name="pref_tunnel_mode">Modus</string>
<!--do not change order without changing corresponding entry_values in non_localizable_strings.xml-->
<string-array name="tunnel_mode_entries">
<item>deaktiviert</item>
<item>nur 3G</item>
<item>immer</item>
<item>auto</item>
</string-array>
<string name="pref_none">Keine</string>
<string name="pref_preferences_title">Einstellungen</string>
<string name="pref_video_enable_title">Video aktivieren</string>
<!--Audio settings-->
<string name="pref_audio_title">Audio</string>
<string name="pref_echo_cancellation">Echounterdrückung</string>
<string name="pref_echo_cancellation_summary">Entfernt das Echo, das am anderen Ende gehört wird</string>
<string name="ec_calibrating">Kalibrierung...</string>
<string name="no_echo">Kein Echo</string>
<string name="failed">fehlgeschlagen</string>
<string name="pref_adaptive_rate_control">Adaptive Ratenregelung</string>
<string name="pref_codec_bitrate_limit">Codec-Bitratenbegrenzung</string>
<string name="pref_codecs">Codecs</string>
<!--Video settings-->
<string name="pref_video_title">Video</string>
<string name="pref_video_use_front_camera_title">Frontkamera benutzen</string>
<string name="pref_video_initiate_call_with_video_title">Videoanrufe starten</string>
<string name="pref_video_initiate_call_with_video">Immer Videoanfragen senden</string>
<string name="pref_video_automatically_accept_video_title">Eingehende Videoanfragen annehmen</string>
<string name="pref_video_automatically_accept_video">Videoanfragen immer annehmen</string>
<string name="pref_preferred_video_size">Bevorzugte Videogröße</string>
<string name="pref_bandwidth_limit">Bandbreitenbegrenzung in kbits/s</string>
<string name="pref_video_codecs_title">Codecs</string>
<!--Call settings-->
<string name="pref_call_title">Anruf</string>
<string name="pref_rfc2833_dtmf">RFC2833 DTMFs senden</string>
<string name="pref_sipinfo_dtmf">SIP INFO DTMFs senden</string>
<!--Network settings-->
<string name="pref_network_title">Netzwerk</string>
<string name="pref_stun_server">Stun-Server</string>
<string name="pref_ice_enable">ICE aktivieren</string>
<string name="pref_upnp_enable">UPNP aktivieren</string>
<string name="pref_transport_use_random_ports">Zufällige Ports verwenden</string>
<string name="pref_sip_port_title">Zu benutzender SIP-Port</string>
<string name="pref_video_port_title">Videoport oder Portbereich</string>
<string name="pref_audio_port_title">Audioport oder Portbereich</string>
<string name="pref_video_port_description">Videoport oder Portbereich (Min.Port-Max.Port)</string>
<string name="pref_audio_port_description">Audioport oder Portbereich (Min.Port-Max.Port)</string>
<string name="pref_media_encryption">Medienverschlüsselung</string>
<string name="pref_push_notification">Push-Benachrichtigungen aktivieren</string>
<!--Advanced settings-->
<string name="pref_advanced_title">Erweitert</string>
<string name="pref_debug">Debug</string>
<string name="pref_background_mode">Hintergrundmodus</string>
<string name="pref_animation_enable_title">Animationen aktivieren</string>
<string name="pref_autostart">Beim Einschalten starten</string>
<string name="pref_remote_provisioning_title">Fernbereitstellung</string>
<string name="pref_primary_account_title">Primäres Konto</string>
<string name="pref_display_name_title">Anzeigename</string>
<string name="pref_user_name_title">Benutzername</string>
<!--Audio hack settings-->
<string name="pref_audio_hacks_title">Audio Hacks</string>
<string name="pref_audio_use_specific_mode_title">Speziellen Modus Hack verwenden</string>
<string name="pref_audio_use_specific_mode_summary">0=MODE_NORMAL (Standard), 2=MODE_IN_CALL</string>
<string name="pref_audio_hacks_use_routing_api_title">Routing-API-Hack verwenden</string>
<string name="pref_audio_hacks_use_galaxys_hack_title">Galaxy-S-Audio-Hack verwenden</string>
<!--Content description-->
<string name="content_description_back">Zurück</string>
<string name="content_description_dialer">Wählgerät</string>
<string name="content_description_toggle_micro">Mikrofon umschalten</string>
<string name="content_description_toggle_speaker">Lautsprecher umschalten</string>
<string name="content_description_decline">Ablehnen</string>
<string name="content_description_hang_up">Auflegen</string>
<string name="content_description_accept">Annehmen</string>
<string name="content_description_edit">Ändern</string>
<string name="content_description_add_contact">Zu Kontakten hinzufügen</string>
<string name="content_description_new_contact">Neuer Kontakt</string>
<string name="content_description_call">Call</string>
<string name="content_description_backspace">Zurückschalten</string>
<string name="content_description_chat">Nachrichten</string>
<string name="content_description_dial_back">Zurückrufen</string>
<string name="content_description_contact_picture">Kontaktbild</string>
<string name="content_description_send_message">Nachricht senden</string>
<string name="content_description_delete">Löschen</string>
<string name="content_description_add">Anruf hinzufügen</string>
<string name="content_description_new_discussion">Neue Diskussion</string>
<string name="content_description_search">Suchen</string>
<string name="content_description_all_contacts">Alle Kontakte</string>
<string name="content_description_linphone_contacts">Linphone-Kontakte</string>
<string name="content_description_call_direction">Anrufrichtung</string>
<string name="content_description_all_calls">Alle Anrufe</string>
<string name="content_description_missed_calls">Verpasste Anrufe</string>
<string name="content_description_switch_video">Video umschalten</string>
<string name="content_description_add_call">Anruf hinzufügen</string>
<string name="content_description_pause">Pause</string>
<string name="content_description_numpad">Nummernblock</string>
<string name="content_description_history">Schaltfläche Verlauf</string>
<string name="content_description_chat_button">Schaltfläche Chat</string>
<string name="content_description_contacts">Schaltfläche Kontakte</string>
<string name="content_description_call_quality">Anrufqualität</string>
<string name="content_description_encryption">Verschlüsselung</string>
<string name="content_description_switch_camera">Kamera umschalten</string>
<string name="content_description_cancel_button">Schaltfläche Abbrechen</string>
<string name="content_description_message_status">Nachrichtenstatus</string>
<string name="content_description_conference">Konferenz</string>
<string name="content_description_default_account">Standardkonto</string>
<string name="content_description_contact_first_name">Vorname</string>
<string name="content_description_contact_last_name">Nachname</string>
<string name="content_description_transfer">Weiterleiten</string>
<string name="content_description_bluetooth">Bluetooth</string>
</resources>

Some files were not shown because too many files have changed in this diff Show more