Merge remote-tracking branch 'linphone/master' into 3.0.X

Conflicts:
	AndroidManifest.xml
	res/layout/chat_bubble_alt_incoming.xml
	res/layout/chat_bubble_alt_outgoing.xml
	res/layout/chat_bubble_incoming.xml
	res/layout/chat_bubble_outgoing.xml
	res/values/strings.xml
	src/org/linphone/ContactsManager.java
	src/org/linphone/compatibility/ApiFivePlus.java
	src/org/linphone/ui/BubbleChat.java
This commit is contained in:
Margaux Clerc 2015-09-10 18:58:01 +02:00
commit c3dc710337
111 changed files with 1965 additions and 2342 deletions

3
.gitmodules vendored
View file

@ -91,3 +91,6 @@
[submodule "submodules/externals/webrtc"]
path = submodules/externals/webrtc
url = git://git.linphone.org/webrtc.git
[submodule "submodules/mscodec2"]
path = submodules/mscodec2
url = git://git.linphone.org/mscodec2.git

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.linphone"
android:versionCode="2500" android:installLocation="auto">
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="22"/>
android:versionCode="2510" android:installLocation="auto">
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="22"/>
<!-- Permissions for Push Notification -->
<permission android:name="org.linphone.permission.C2D_MESSAGE" android:protectionLevel="signature" /> <!-- Change package ! -->

View file

@ -60,6 +60,7 @@ BUILD_CONTACT_HEADER=0
BUILD_RTP_MAP=0
BUILD_DONT_CHECK_HEADERS_IN_MESSAGE=0
BUILD_ILBC=1
BUILD_CODEC2=0
LIBLINPHONE_EXTENDED_SRC_FILES=
LIBLINPHONE_EXTENDED_C_INCLUDES=
LIBLINPHONE_EXTENDED_CFLAGS=
@ -255,6 +256,29 @@ 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)
@ -318,13 +342,13 @@ LIBVPX_BUILD_DIR=$(TOPDIR)/submodules/externals/build/libvpx
LIBVPX_CONFIGURE_OPTIONS=--disable-vp9 --disable-examples --disable-unit-tests --disable-postproc --enable-error-concealment --enable-debug
$(LIBVPX_SRC_DIR)/configure_android_x86_patch_applied.txt:
@patch -p1 < $(TOPDIR)/patches/libvpx_configure_android_x86.patch
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 --sdk-path=$(NDK_PATH) $(LIBVPX_CONFIGURE_OPTIONS) && \
$(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 )
@ -409,10 +433,10 @@ $(MATROSKA_SRC_DIR)/patch_applied.txt: $(MATROSKA_BUILD_DIR)/fix_libmatroska2.pa
cd $(MATROSKA_SRC_DIR); patch -p1 < $<; touch $@
#Build targets
prepare-sources: build-ffmpeg build-x264 build-openh264 prepare-ilbc build-vpx prepare-srtp prepare-mediastreamer2 prepare-antlr3 prepare-belle-sip $(TOPDIR)/res/raw/rootca.pem prepare-matroska2
prepare-sources: build-ffmpeg build-x264 build-openh264 prepare-ilbc 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_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)
@ -471,9 +495,10 @@ install-apk:
ant installd
release: update-project
$(ANT) clean
$(MAKE) java-clean
patch -p1 < release.patch
cat ant.properties | grep version.name > default.properties
$(MAKE) generate-libs
$(ANT) release
patch -Rp1 < release.patch
@ -505,8 +530,10 @@ 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
veryclean: clean
.PHONY: clean install-apk run-linphone
@ -526,4 +553,4 @@ pull-transifex:
tx pull -af
push-transifex:
tx push -s -t -f --no-interactive
tx push -s -f --no-interactive

3
README
View file

@ -144,3 +144,6 @@ BUILD_MATROSKA
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

View file

@ -86,6 +86,11 @@ ifeq ($(BUILD_ILBC), 1)
include $(linphone-root-dir)/submodules/msilbc/Android.mk
endif
ifeq ($(BUILD_CODEC2), 1)
include $(linphone-root-dir)/submodules/mscodec2/Android.mk
include $(linphone-root-dir)/submodules/externals/build/codec2/Android.mk
endif
ifeq ($(_BUILD_VIDEO),1)
ifeq ($(_BUILD_X264),1)

View file

@ -36,6 +36,10 @@ ifeq ($(BUILD_G729),)
BUILD_G729=0
endif
ifeq ($(BUILD_CODEC2),)
BUILD_CODEC2=0
endif
ifeq ($(BUILD_VIDEO),)
BUILD_VIDEO=1
endif
@ -127,6 +131,10 @@ ifeq ($(BUILD_ZRTP), 1)
APP_MODULES += libbzrtp
endif
ifeq ($(BUILD_CODEC2), 1)
APP_MODULES +=libcodec2 libmscodec2
endif
ifeq ($(BUILD_ILBC), 1)
APP_MODULES +=libmsilbc
endif

View file

@ -1,6 +1,8 @@
--- a/submodules/externals/libvpx/build/make/configure.sh
+++ b/submodules/externals/libvpx/build/make/configure.sh
@@ -1037,6 +1037,33 @@ EOF
diff --git a/build/make/configure.sh b/build/make/configure.sh
index 25c9f80..336b006 100644
--- a/build/make/configure.sh
+++ b/build/make/configure.sh
@@ -1082,6 +1082,33 @@ EOF
os2)
AS=${AS:-nasm}
;;

View file

@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_enabled="false" android:color="@android:color/darker_gray" />
<item android:color="@android:color/black"/>
</selector>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

After

Width:  |  Height:  |  Size: 1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 586 B

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 B

After

Width:  |  Height:  |  Size: 101 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 877 B

After

Width:  |  Height:  |  Size: 1,009 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 775 B

After

Width:  |  Height:  |  Size: 877 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 717 B

After

Width:  |  Height:  |  Size: 882 B

View file

@ -1,8 +0,0 @@
<?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/conference_over" />
<item
android:drawable="@drawable/conference_default" />
</selector>

View file

@ -1,10 +0,0 @@
<?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/dialer_alt_over" />
<item android:state_enabled="false"
android:drawable="@drawable/dialer_alt_disabled" />
<item
android:drawable="@drawable/dialer_alt_default" />
</selector>

View file

@ -1,8 +0,0 @@
<?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/dialer_alt_back_over" />
<item
android:drawable="@drawable/dialer_alt_back_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/history_over" />
<item android:state_selected="true"
android:drawable="@drawable/history_selected" />
<item
android:drawable="@drawable/history_default" />
</selector>

View file

@ -1,14 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<corners
android:radius="25dp" />
<stroke
android:color="@color/missed_calls_background" />
<solid
android:color="@color/missed_calls_background" />
</shape>

View file

@ -1,11 +0,0 @@
<?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/options_over" />
<item android:state_enabled="false"
android:drawable="@drawable/options_disabled" />
<item android:state_selected="true"
android:drawable="@drawable/options_selected" />
<item
android:drawable="@drawable/options_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/options_add_over" />
<item android:state_enabled="false"
android:drawable="@drawable/options_add_disabled" />
<item
android:drawable="@drawable/options_add_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/options_add_over_alt" />
<item android:state_enabled="false"
android:drawable="@drawable/options_add_disabled_alt" />
<item
android:drawable="@drawable/options_add_default_alt" />
</selector>

View file

@ -1,11 +0,0 @@
<?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/options_over_alt" />
<item android:state_enabled="false"
android:drawable="@drawable/options_disabled_alt" />
<item android:state_selected="true"
android:drawable="@drawable/options_selected_alt" />
<item
android:drawable="@drawable/options_default_alt" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/options_transfer_over" />
<item android:state_enabled="false"
android:drawable="@drawable/options_transfer_disabled" />
<item
android:drawable="@drawable/options_transfer_default" />
</selector>

View file

@ -1,10 +0,0 @@
<?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/pause_off_over" />
<item android:state_enabled="false"
android:drawable="@drawable/pause_off_disabled" />
<item
android:drawable="@drawable/pause_off_default" />
</selector>

View file

@ -1,8 +0,0 @@
<?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/pause_on_over" />
<item
android:drawable="@drawable/pause_on_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/settings_over" />
<item android:state_selected="true"
android:drawable="@drawable/settings_selected" />
<item
android:drawable="@drawable/settings_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/setup_back_over" />
<item android:state_enabled="false"
android:drawable="@drawable/setup_back_disabled" />
<item
android:drawable="@drawable/setup_back_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/setup_cancel_over" />
<item android:state_enabled="false"
android:drawable="@drawable/setup_cancel_disabled" />
<item
android:drawable="@drawable/setup_cancel_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/setup_start_over" />
<item android:state_enabled="false"
android:drawable="@drawable/setup_start_disabled" />
<item
android:drawable="@drawable/setup_start_default" />
</selector>

View file

@ -1,9 +0,0 @@
<?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/video_on_over" />
<item android:state_enabled="false"
android:drawable="@drawable/video_on_disabled" />
<item
android:drawable="@drawable/video_on_default" />
</selector>

View file

@ -1,61 +0,0 @@
<?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:background="@color/colorH"
android:orientation="vertical">
<org.linphone.ui.AddressText
android:id="@+id/Adress"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.35"
android:textColor="@android:color/white"
android:background="@drawable/dialer_address_background"
android:inputType="textEmailAddress"
android:hint="@string/addressHint"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:layout_gravity="center" />
<org.linphone.ui.Numpad
android:id="@+id/Dialer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.15" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.35" >
<ImageView
android:contentDescription="@string/content_description_add_contact"
android:id="@+id/addContact"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/toolbar_button" />
<org.linphone.ui.CallButton
android:id="@+id/Call"
android:contentDescription="@string/content_description_call"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/call" />
<org.linphone.ui.EraseButton
android:id="@+id/Erase"
android:contentDescription="@string/content_description_backspace"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/backspace" />
</LinearLayout>
</LinearLayout>

View file

@ -1,162 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/topLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Hack to adjust perfectly on every screen the bottom of the fragment with the curved menu -->
<LinearLayout
android:id="@+id/mark"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:adjustViewBounds="true"
android:scaleType="fitXY"
android:src="@drawable/mark"
android:visibility="invisible" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@id/mark"
android:layout_alignParentTop="true">
<LinearLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="20dp" />
<fragment
android:id="@+id/status"
android:name="org.linphone.StatusFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout="@layout/status" />
</FrameLayout>
<LinearLayout
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2">
<include layout="@layout/menu_history_button" />
<TextView
android:id="@+id/missedCalls"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/missed_calls_bg"
android:gravity="center"
android:textSize="20dp"
android:visibility="gone" />
</RelativeLayout>
<include layout="@layout/menu_contact_button" />
<ImageView
android:id="@+id/dialer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.2"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_dialer"
android:scaleType="fitXY"
android:src="@drawable/dialer" />
<RelativeLayout
android:id="@+id/completeChat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2">
<include layout="@layout/menu_chat_button" />
<TextView
android:id="@+id/missedChats"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/missed_calls_bg"
android:gravity="center"
android:textSize="20dp"
android:visibility="gone" />
</RelativeLayout>
<include layout="@layout/menu_settings_button" />
</LinearLayout>
<LinearLayout
android:id="@+id/fragmentContainer2"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
</LinearLayout>
</RelativeLayout>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/chat"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_chat_button"
android:scaleType="fitXY"
android:src="@drawable/chat" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@id/image"
android:paddingBottom="5dp"
android:textColor="@drawable/text_color"
android:text="@string/button_chat"
android:textSize="12sp" />
</RelativeLayout>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/contacts"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight="0.2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_contacts"
android:scaleType="fitXY"
android:src="@drawable/contacts" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@id/image"
android:paddingBottom="5dp"
android:textColor="@drawable/text_color"
android:text="@string/button_contacts"
android:textSize="12sp" />
</RelativeLayout>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/history"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_history"
android:scaleType="fitXY"
android:src="@drawable/history" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@id/image"
android:paddingBottom="5dp"
android:textColor="@drawable/text_color"
android:text="@string/button_history"
android:textSize="12sp" />
</RelativeLayout>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/settings"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight="0.2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_settings"
android:scaleType="fitXY"
android:src="@drawable/settings" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignBottom="@id/image"
android:paddingBottom="5dp"
android:textColor="@drawable/text_color"
android:text="@string/button_settings"
android:textSize="12sp" />
</RelativeLayout>

View file

@ -1,275 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:linphone="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<org.linphone.ui.SlidingDrawer
android:id="@+id/statusBar"
linphone:direction="topToBottom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
linphone:handle="@+id/handle"
linphone:content="@+id/content">
<RelativeLayout
android:id="@id/content"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TableLayout
android:id="@+id/callStats"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:paddingBottom="10dp"
android:paddingLeft="5dp"
android:paddingRight="5dp"
android:background="@android:color/black">
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:id="@+id/call_stats_title"
android:textStyle="bold"
android:textColor="@color/text_default"
android:textSize="18sp"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:text="@string/call_stats_codec"
android:textStyle="bold"
android:textColor="@android:color/white"
android:textSize="12sp"/>
<TextView
android:id="@+id/codec"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:gravity="right|center_vertical"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:text="@string/call_stats_upload"
android:textStyle="bold"
android:textColor="@android:color/white"
android:textSize="12sp"/>
<TextView
android:id="@+id/uploadBandwith"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:gravity="right|center_vertical"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:text="@string/call_stats_download"
android:textColor="@android:color/white"
android:textStyle="bold"
android:textSize="12sp"/>
<TextView
android:id="@+id/downloadBandwith"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:gravity="right|center_vertical"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</TableRow>
<TableRow
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:text="@string/call_stats_ice"
android:textStyle="bold"
android:textColor="@android:color/white"
android:textSize="12sp"/>
<TextView
android:id="@+id/ice"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:gravity="right|center_vertical"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</TableRow>
<TableRow
android:id="@+id/video_resolution_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left|center_vertical"
android:text="@string/call_stats_video_resolution"
android:textStyle="bold"
android:textColor="@android:color/white"
android:textSize="12sp"/>
<TextView
android:id="@+id/video_resolution"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="5dp"
android:gravity="right|center_vertical"
android:textColor="@android:color/white"
android:textSize="12sp"/>
</TableRow>
</TableLayout>
<ListView
android:id="@+id/accounts"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:stackFromBottom="true"
android:paddingBottom="10dp"
android:background="@android:color/black"/>
</RelativeLayout>
<RelativeLayout
android:id="@id/handle"
android:layout_width="match_parent"
android:layout_height="20dp"
android:layout_marginBottom="10dp">
<ImageView
android:id="@+id/background"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitXY"
android:src="@drawable/statebar_background"/>
<ImageView
android:contentDescription="@string/content_description_led"
android:id="@+id/statusLed"
android:paddingLeft="5dp"
android:src="@drawable/led_error"
android:adjustViewBounds="true"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="match_parent" />
<TextView
android:id="@+id/statusText"
android:text="@string/status_not_connected"
android:textColor="@android:color/white"
android:textSize="14sp"
android:paddingLeft="5dp"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_toRightOf="@id/statusLed" />
<LinearLayout
android:id="@+id/moreStatusLed"
android:layout_width="wrap_content"
android:layout_height="10dp"
android:orientation="horizontal"
android:layout_toRightOf="@id/statusLed"/>
<ImageView
android:contentDescription="@string/content_description_call_quality"
android:id="@+id/callQuality"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/call_quality_indicator_0"
android:adjustViewBounds="true"
android:layout_centerHorizontal="true"
android:visibility="gone" />
<ImageView
android:contentDescription="@string/content_description_encryption"
android:id="@+id/encryption"
android:paddingRight="5dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:src="@drawable/security_pending"
android:adjustViewBounds="true"
android:visibility="gone"
android:layout_alignParentRight="true" />
<TextView
android:id="@+id/voicemailCount"
android:textColor="@android:color/white"
android:layout_alignParentRight="true"
android:textSize="18sp"
android:paddingLeft="5dp"
android:paddingRight="10dp"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:visibility="gone" />
<TextView
android:id="@+id/exit"
android:text="@string/menu_exit"
android:textColor="@android:color/white"
android:textSize="14sp"
android:layout_centerVertical="true"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_alignParentRight="true"
android:visibility="gone"
android:paddingRight="10dp" />
</RelativeLayout>
</org.linphone.ui.SlidingDrawer>
</RelativeLayout>

View file

@ -1,20 +0,0 @@
<?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">
<org.linphone.mediastream.video.display.GL2JNIView
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="90dp"
android:layout_height="120dp"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" />
</RelativeLayout>

View file

@ -1,7 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorH">
</ScrollView>

View file

@ -1,158 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:linphone="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/top_layout"
android:background="@color/colorH" >
<LinearLayout
android:id="@+id/header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:gravity="center"
android:orientation="horizontal"
android:layout_centerHorizontal="true">
<org.linphone.ui.AvatarWithShadow
android:id="@+id/contactPicture"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
linphone:picture="@drawable/unknown_small" />
<TextView
android:id="@+id/contactName"
android:paddingLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/text_contrast" />
</LinearLayout>
<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/messageLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/sendPicture"
android:text="@string/button_send_picture"
android:gravity="center"
android:textColor="@drawable/text_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
android:drawableTop="@drawable/chat_send_picture"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
<TextView
android:id="@+id/sendMessage"
android:text="@string/button_send_message"
android:gravity="center"
android:textColor="@drawable/text_color"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_alignParentRight="true"
android:drawableTop="@drawable/chat_send_message"
android:paddingRight="10dp"
android:paddingLeft="10dp" />
<EditText
android:imeOptions="flagNoExtractUi"
android:textCursorDrawable="@null"
android:id="@+id/message"
android:inputType="textMultiLine"
android:maxLines="3"
android:textColor="@android:color/black"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/sendPicture"
android:layout_toLeftOf="@id/sendMessage"
android:background="@drawable/resizable_textfield"
android:layout_centerVertical="true"/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/uploadLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:contentDescription="@string/content_description_cancel"
android:id="@+id/cancelUpload"
android:src="@drawable/list_delete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_alignParentRight="true"
android:padding="20dp" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignBottom="@id/cancelUpload"
android:layout_toLeftOf="@id/cancelUpload"
android:paddingBottom="20dp"
android:orientation="vertical"
android:gravity="center">
<TextView
android:id="@+id/progressBarText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/uploading_image"
android:textColor="@android:color/black"/>
<ProgressBar
android:id="@+id/progressbar"
android:layout_width="match_parent"
android:layout_height="15dp"
style="@android:style/Widget.ProgressBar.Horizontal"
android:paddingTop="2dp"
android:paddingLeft="2dp"
android:paddingRight="2dp" />
</LinearLayout>
</RelativeLayout>
</LinearLayout>
<TextView
android:id="@+id/remoteComposing"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/text_contrast"
android:text="@string/remote_composing"
android:layout_above="@id/footer"/>
<ListView
android:id="@+id/chatMessageList"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@android:color/transparent"
android:stackFromBottom="true"
android:cacheColorHint="@color/transparent"
android:dividerHeight="1dp"
android:layout_above="@id/remoteComposing"
android:layout_below="@id/header"/>
</RelativeLayout>

View file

@ -1,89 +0,0 @@
<?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="match_parent">
<RelativeLayout
android:id="@+id/addressbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:background="@drawable/dialer_address_background"
android:layout_gravity="center">
<!-- focusable/focusableInTouchMode are set to true to prevent the keyboard to be displayed automatically -->
<org.linphone.ui.AddressText
android:id="@+id/Adress"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@android:color/white"
android:layout_toLeftOf="@+id/Erase"
android:background="@color/transparent"
android:textSize="30dp"
android:paddingLeft="20dp"
android:paddingRight="20dp"
android:gravity="center"
android:inputType="textEmailAddress"
android:hint="@string/addressHint" />
<org.linphone.ui.EraseButton
android:id="@id/Erase"
android:contentDescription="@string/content_description_backspace"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="10dp"
android:layout_alignParentRight="true"
android:layout_centerVertical="true"
android:adjustViewBounds="true"
android:src="@drawable/backspace" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="10dp">
<org.linphone.ui.Numpad
android:id="@+id/Dialer"
android:contentDescription="@string/content_description_numpad"
android:background="@drawable/background_alt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentLeft="true" />
<LinearLayout
android:orientation="horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true">
<ImageView
android:id="@+id/addContact"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="1"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_add_contact"
android:scaleType="fitXY"
android:src="@drawable/contact_add" />
<org.linphone.ui.CallButton
android:id="@+id/Call"
android:contentDescription="@string/content_description_call"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
android:layout_weight="1"
android:scaleType="fitXY"
android:src="@drawable/call" />
</LinearLayout>
</RelativeLayout>
</RelativeLayout>

View file

@ -1,180 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/landscape_background">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:layout_centerInParent="true"
android:src="@drawable/background_logo"/>
<!-- Hack to adjust perfectly on every screen the bottom of the fragment with the curved menu -->
<LinearLayout
android:id="@+id/mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:gravity="bottom"
android:orientation="horizontal">
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.24"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/mark"
android:visibility="invisible" />
<ImageView
android:contentDescription="@string/content_description_mark"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2"
android:scaleType="fitXY"
android:adjustViewBounds="true"
android:src="@drawable/mark"
android:visibility="invisible" />
</LinearLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_above="@id/mark"
android:layout_alignParentTop="true" >
<LinearLayout
android:baselineAligned="false"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
android:paddingTop="40dp">
<LinearLayout
android:id="@+id/fragmentContainer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.67"
android:orientation="horizontal" />
<LinearLayout
android:id="@+id/fragmentContainer2"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.33"
android:orientation="horizontal"/>
</LinearLayout>
<fragment
android:id="@+id/status"
android:name="org.linphone.StatusFragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:layout="@layout/status" />
</FrameLayout>
<LinearLayout
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="horizontal">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2">
<include layout="@layout/menu_history_button" />
<TextView
android:id="@+id/missedCalls"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/missed_calls_bg"
android:gravity="center"
android:textSize="20dp"
android:visibility="gone" />
</RelativeLayout>
<include layout="@layout/menu_contact_button" />
<ImageView
android:id="@+id/dialer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.24"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_dialer"
android:scaleType="fitXY"
android:src="@drawable/dialer" />
<RelativeLayout
android:id="@+id/completeChat"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.2">
<include layout="@layout/menu_chat_button" />
<TextView
android:id="@+id/missedChats"
android:layout_width="25dp"
android:layout_height="25dp"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:background="@drawable/missed_calls_bg"
android:gravity="center"
android:textSize="20dp"
android:visibility="gone" />
</RelativeLayout>
<include layout="@layout/menu_settings_button" />
</LinearLayout>
</RelativeLayout>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/chat"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_chat_button"
android:scaleType="fitXY"
android:src="@drawable/chat" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:paddingLeft="20dp"
android:textColor="@drawable/text_color"
android:text="@string/button_chat"
android:textSize="18dp" />
</RelativeLayout>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/contacts"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight="0.2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_contacts"
android:scaleType="fitXY"
android:src="@drawable/contacts" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:paddingLeft="40dp"
android:textColor="@drawable/text_color"
android:text="@string/button_contacts"
android:textSize="18dp" />
</RelativeLayout>

View file

@ -1,28 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/history"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_history"
android:scaleType="fitXY"
android:src="@drawable/history" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:paddingLeft="60dp"
android:textColor="@drawable/text_color"
android:text="@string/button_history"
android:textSize="18dp" />
</RelativeLayout>

View file

@ -1,29 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
android:id="@+id/settings"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_weight="0.2"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:contentDescription="@string/content_description_settings"
android:scaleType="fitXY"
android:src="@drawable/settings" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:paddingLeft="60dp"
android:textColor="@drawable/text_color"
android:text="@string/button_settings"
android:textSize="18dp" />
</RelativeLayout>

View file

@ -1,16 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/topLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/black">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:drawSelectorOnTop="false"
android:cacheColorHint="@color/transparent"
android:scrollbarAlwaysDrawVerticalTrack="true" />
</RelativeLayout>

View file

@ -1,37 +1,31 @@
<?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="wrap_content">
<CheckBox
android:id="@+id/Default"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
android:background="@color/colorG"
android:layout_height="30dp">
<LinearLayout
android:layout_toLeftOf="@id/Default"
android:layout_centerVertical="true"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/address"
style="@style/font13"
android:paddingLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"/>
<ImageView
android:contentDescription="@string/content_description_led"
android:id="@+id/State"
android:id="@+id/statusLed"
android:src="@drawable/led_disconnected"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/Identity"
android:paddingLeft="10dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:textColor="@android:color/white"/>
</LinearLayout>
</RelativeLayout>

View file

@ -7,6 +7,7 @@
android:gravity="center_vertical"
android:orientation="horizontal"
android:background="@color/colorA"
android:alpha="0.5"
android:padding="2dp">
<ImageView

View file

@ -47,7 +47,6 @@
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:singleLine="true"
android:textColor="@color/edittextcolor"
android:background="@drawable/resizable_textfield" />
<EditText
@ -61,7 +60,6 @@
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:singleLine="true"
android:textColor="@color/edittextcolor"
android:background="@drawable/resizable_textfield" />
<EditText
@ -75,7 +73,6 @@
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:singleLine="true"
android:textColor="@color/edittextcolor"
android:background="@drawable/resizable_textfield" />
</LinearLayout>

View file

@ -2,16 +2,14 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/top_layout"
android:background="@color/colorH" >
<RelativeLayout
android:id="@+id/topBar"
android:id="@+id/top_bar"
android:background="@color/colorF"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_gravity="bottom"
android:background="@color/colorF">
android:layout_gravity="bottom">
<ImageView
android:id="@+id/back"
@ -24,34 +22,11 @@
android:padding="10dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/edit"
android:contentDescription="@string/content_description_edit"
android:layout_alignParentRight="true"
android:padding="10dp"
android:src="@drawable/edit_list"
android:background="@drawable/toolbar_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/start_call"
android:contentDescription="@string/content_description_call"
android:layout_toLeftOf="@id/edit"
android:padding="10dp"
android:src="@drawable/call_alt_start"
android:background="@drawable/toolbar_button"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
<ImageView
android:id="@+id/delete"
android:contentDescription="@string/content_description_valid"
android:src="@drawable/delete"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
@ -61,9 +36,9 @@
<ImageView
android:id="@+id/select_all"
android:contentDescription="@string/content_description_valid"
android:src="@drawable/select_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/delete"
@ -73,9 +48,9 @@
<ImageView
android:id="@+id/deselect_all"
android:contentDescription="@string/content_description_valid"
android:src="@drawable/deselect_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/delete"
@ -83,10 +58,33 @@
android:adjustViewBounds="true"
android:visibility="gone"/>
<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="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:padding="10dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/start_call"
android:src="@drawable/call_alt_start"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_call"
android:layout_toLeftOf="@id/edit"
android:padding="10dp"
android:gravity="center"
android:layout_width="wrap_content"
android:layout_height="match_parent"/>
<TextView
android:id="@+id/contact_name"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/text_contrast"
style="@style/font6"
android:ellipsize="end"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_toRightOf="@id/back"
@ -94,7 +92,6 @@
android:paddingLeft="10dp"
android:gravity="center"/>
</RelativeLayout>
<LinearLayout
@ -218,7 +215,7 @@
android:layout_marginLeft="10dp"
android:layout_marginRight="10dp"
android:layout_marginBottom="10dp"
android:layout_below="@+id/topBar"/>
android:layout_below="@+id/top_bar"/>
<AutoCompleteTextView
android:contentDescription="@string/content_description_search"
@ -232,7 +229,7 @@
android:background="@drawable/resizable_textfield"
android:gravity="center"
android:completionThreshold="1"
android:layout_below="@+id/topBar"
android:layout_below="@+id/top_bar"
android:paddingRight="5dp"
android:inputType="textPersonName"/>

View file

@ -13,4 +13,6 @@
android:layout_height="40dp"
tools:layout="@layout/status" />
</LinearLayout>

View file

@ -1,43 +1,40 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bubble"
android:background="@drawable/resizable_chat_bubble_incoming"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="left"
android:background="@drawable/resizable_chat_bubble_incoming"
android:orientation="horizontal" >
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:layout_width="50dp"
android:layout_height="50dp"
android:paddingTop="10dp"
android:paddingLeft="10dp"
android:src="@drawable/avatar"/>
android:paddingLeft="10dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp">
android:padding="12dp">
<TextView
android:id="@+id/contact_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/font9"
android:singleLine="true"
android:paddingRight="5dp"
android:paddingTop="10dp"
style="@style/font3"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/message"
android:layout_gravity="left"
android:visibility="gone"
style="@style/font11"
android:linksClickable="true"
android:autoLink="web"
android:paddingBottom="10dp"
android:textColor="@android:color/black"
android:layout_gravity="left"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
@ -52,31 +49,19 @@
<Button
android:id="@+id/download"
android:visibility="gone"
android:text="@string/download_image"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
<ProgressBar
android:id="@+id/spinner"
style="@android:style/Widget.ProgressBar.Horizontal"
android:visibility="gone"
android:layout_marginTop="20dp"
style="@android:style/Widget.ProgressBar.Horizontal"
android:layout_width="wrap_content"
android:layout_height="5dp"/>
<TextView
android:id="@+id/time"
android:textColor="@android:color/darker_gray"
android:textSize="12sp"
android:singleLine="true"
android:paddingLeft="5dp"
android:linksClickable="true"
android:autoLink="web"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

View file

@ -1,41 +1,38 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/bubble"
android:background="@drawable/resizable_chat_bubble_outgoing"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/resizable_chat_bubble_outgoing"
android:orientation="horizontal" >
<ImageView
android:id="@+id/contact_picture"
android:src="@drawable/avatar"
android:layout_width="50dp"
android:layout_height="50dp"
android:paddingTop="10dp"
android:paddingLeft="10dp"
android:src="@drawable/avatar"/>
android:paddingLeft="10dp"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingLeft="10dp">
android:padding="12dp">
<TextView
android:id="@+id/contact_header"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/font3"
android:singleLine="true"
android:paddingRight="5dp"
android:paddingTop="10dp"
style="@style/font3"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/message"
android:visibility="gone"
android:linksClickable="true"
style="@style/font11"
android:autoLink="web"
android:paddingBottom="10dp"
android:textColor="@android:color/black"
android:linksClickable="true"
android:visibility="gone"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
@ -50,14 +47,25 @@
</LinearLayout>
<ImageView
android:contentDescription="@string/content_description_message_status"
android:id="@+id/status"
android:visibility="gone"
android:layout_gravity="bottom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/content_description_message_status"
android:visibility="invisible"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:layout_gravity="top|right"
android:layout_width="20dp"
android:layout_height="20dp"
android:adjustViewBounds="true" />
<ProgressBar
android:id="@+id/inprogress"
android:visibility="gone"
android:paddingRight="5dp"
android:paddingTop="5dp"
android:layout_gravity="top|right"
android:layout_width="20dp"
android:layout_height="20dp"/>
<Button
android:id="@+id/download"
android:text="@string/download_image"

View file

@ -22,22 +22,11 @@
android:padding="10dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/edit"
android:contentDescription="@string/content_description_edit"
android:src="@drawable/edit_list"
android:background="@drawable/toolbar_button"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:padding="10dp"
android:adjustViewBounds="true"/>
<ImageView
android:id="@+id/delete"
android:contentDescription="@string/content_description_valid"
android:src="@drawable/delete"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
@ -47,9 +36,9 @@
<ImageView
android:id="@+id/select_all"
android:contentDescription="@string/content_description_valid"
android:src="@drawable/select_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/delete"
@ -59,9 +48,9 @@
<ImageView
android:id="@+id/deselect_all"
android:contentDescription="@string/content_description_valid"
android:src="@drawable/deselect_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/delete"
@ -69,6 +58,18 @@
android:adjustViewBounds="true"
android:visibility="gone"/>
<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="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:padding="10dp"
android:adjustViewBounds="true"/>
</RelativeLayout>
<ListView

View file

@ -8,17 +8,17 @@
android:paddingTop="5dp"
android:background="@drawable/list_selector">
<ImageView
android:contentDescription="@string/content_description_delete"
<CheckBox
android:id="@+id/delete"
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:src="@drawable/list_delete" />
android:visibility="invisible" />
<TextView
android:id="@+id/draft"

54
res/layout/conference.xml Normal file
View file

@ -0,0 +1,54 @@
<?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="match_parent"
android:id="@+id/top_layout"
android:background="@color/colorH" >
<LinearLayout
android:id="@+id/conferenceHeader"
android:layout_width="match_parent"
android:layout_height="75dp"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="@color/colorF">
<TextView
android:layout_width="0dip"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center_vertical|left"
android:paddingLeft="20dp"
android:paddingRight="10dp"
android:textStyle="bold"
android:textColor="@color/text_header"
android:text="@string/conference"
android:textSize="26dp" />
<ImageView
android:contentDescription="@string/content_description_pause"
android:id="@+id/conferenceStatus"
android:layout_width="30dp"
android:layout_height="30dp"
android:scaleType="fitCenter"
android:adjustViewBounds="true"
android:src="@drawable/pause" />
<Chronometer
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="20dp"
android:gravity="center_vertical|right"
android:textColor="@android:color/white"
android:textSize="22dp" />
</LinearLayout>
<TableLayout
android:id="@+id/calls"
android:layout_below="@id/conferenceHeader"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RelativeLayout>

View file

@ -24,24 +24,39 @@
android:layout_height="40dp"
android:orientation="horizontal">
<ImageView
android:contentDescription="@string/content_description_contact_picture"
android:id="@+id/icon"
<RelativeLayout
android:id="@+id/avatar_layout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"
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"
android:adjustViewBounds="true"
android:layout_marginLeft="10dp"
android:scaleType="centerInside"
android:src="@drawable/avatar" />
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="40dp"
android:layout_height="40dp"
android:adjustViewBounds="true"
android:layout_alignParentLeft="true"
android:layout_marginLeft="5dp"/>
</RelativeLayout>
<TextView
android:id="@+id/name"
android:lines="1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/icon"
android:layout_toRightOf="@id/avatar_layout"
android:layout_centerVertical="true"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="@color/text_contrast"
@ -59,6 +74,17 @@
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:visibility="gone"
android:paddingLeft="5dp"
android:paddingRight="5dp" />
</RelativeLayout>
</LinearLayout>

View file

@ -78,25 +78,51 @@
android:scaleType="center"/>
<ImageView
android:contentDescription="@string/content_description_edit"
android:id="@+id/edit"
android:layout_alignParentRight="true"
android:padding="10dp"
android:src="@drawable/edit_list"
android:id="@+id/delete"
android:src="@drawable/delete"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:adjustViewBounds="true"/>
android:layout_alignParentRight="true"
android:padding="10dp"
android:adjustViewBounds="true"
android:visibility="gone"/>
<ImageView
android:id="@+id/select_all"
android:src="@drawable/select_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:id="@+id/ok"
android:background="@drawable/valid"
android:gravity="center"
android:paddingTop="20dp"
android:visibility="gone"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:scaleType="centerCrop"
android:layout_toLeftOf="@id/delete"
android:padding="10dp"
android:adjustViewBounds="true"
android:visibility="gone"/>
<ImageView
android:id="@+id/deselect_all"
android:src="@drawable/deselect_all"
android:background="@drawable/toolbar_button"
android:contentDescription="@string/content_description_valid"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toLeftOf="@id/delete"
android:padding="10dp"
android:adjustViewBounds="true"
android:visibility="gone"/>
<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="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentRight="true"
android:padding="10dp"
android:adjustViewBounds="true"/>
</RelativeLayout>
@ -142,7 +168,6 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:divider="@color/colorE"
android:cacheColorHint="@color/transparent"
android:fastScrollAlwaysVisible="true"
android:fastScrollEnabled="true"
android:dividerHeight="1dp" />

View file

@ -2,7 +2,7 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_height="fill_parent"
android:gravity="center">
<TextView

View file

@ -65,7 +65,6 @@
android:gravity="center"
android:orientation="vertical">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
@ -156,11 +155,6 @@
android:layout_height="wrap_content"
android:paddingTop="20dp">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
</TableRow>
</TableLayout>
</LinearLayout>
@ -200,11 +194,6 @@
android:layout_height="wrap_content"
android:paddingTop="20dp">
<TableRow
android:layout_width="match_parent"
android:layout_height="match_parent">
</TableRow>
</TableLayout>
</LinearLayout>

View file

@ -15,7 +15,8 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/status">
android:layout_below="@id/status"
android:layout_above="@id/menu">
<LinearLayout
android:id="@+id/fragmentContainer"
@ -23,19 +24,13 @@
android:layout_height="match_parent"
android:orientation="horizontal" />
<RelativeLayout
android:id="@+id/callsList"
android:paddingBottom="140dp"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<RelativeLayout
android:id="@+id/activeCallHeader"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:layout_gravity="center_vertical">
android:layout_gravity="center_vertical"
android:visibility="visible">
<ImageView
android:id="@+id/contactPicture"
@ -75,15 +70,15 @@
</RelativeLayout>
<TableLayout
android:id="@+id/calls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/activeCallHeader"
android:layout_alignParentBottom="true"
android:layout_gravity="bottom"/>
</RelativeLayout>
</FrameLayout>
<ImageView
@ -109,130 +104,11 @@
<LinearLayout
android:id="@+id/menu"
android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:orientation="vertical" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:id="@+id/routeBluetooth"
android:visibility="invisible"
android:text="@string/button_bluetooth"
android:gravity="center"
android:textColor="@drawable/text_incall_button_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/conference"
android:src="@drawable/options_start_conference"
android:background="@drawable/button_background"
android:adjustViewBounds="true"
android:scaleType="center"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:id="@+id/routeReceiver"
android:visibility="invisible"
android:gravity="center"
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:adjustViewBounds="true"
android:scaleType="center"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:id="@+id/routeSpeaker"
android:visibility="invisible"
android:gravity="center"
android:paddingTop="40dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/addCall"
android:src="@drawable/options_add_call"
android:background="@drawable/button_background"
android:adjustViewBounds="true"
android:scaleType="center"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="70dp"
@ -347,4 +223,127 @@
</LinearLayout>
<LinearLayout
android:id="@+id/menu_bottom"
android:layout_width="match_parent"
android:layout_height="70dp"
android:layout_above="@id/menu"
android:orientation="horizontal" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:id="@+id/routeBluetooth"
android:visibility="invisible"
android:text="@string/button_bluetooth"
android:gravity="center"
android:textColor="@drawable/text_incall_button_color"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/conference"
android:src="@drawable/options_start_conference"
android:background="@drawable/button_background"
android:adjustViewBounds="true"
android:scaleType="center"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
</LinearLayout>
<LinearLayout
android:id="@+id/menu_middle"
android:layout_width="match_parent"
android:layout_height="70dp"
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.5"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:id="@+id/routeReceiver"
android:visibility="invisible"
android:gravity="center"
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:adjustViewBounds="true"
android:scaleType="center"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5"/>
</LinearLayout>
<LinearLayout
android:layout_above="@id/menu_middle"
android:layout_width="match_parent"
android:layout_height="70dp"
android:orientation="horizontal" >
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:visibility="invisible"
android:layout_weight="0.5"/>
<TextView
android:id="@+id/routeSpeaker"
android:visibility="invisible"
android:gravity="center"
android:paddingTop="40dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
<ImageView
android:id="@+id/addCall"
android:src="@drawable/options_add_call"
android:background="@drawable/button_background"
android:adjustViewBounds="true"
android:scaleType="center"
android:visibility="invisible"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="0.5" />
</LinearLayout>
</RelativeLayout>

View file

@ -1,16 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:tools="http://schemas.android.com/tools"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/status" android:id="@+id/statusBar" />
<fragment
android:id="@+id/status"
android:name="org.linphone.StatusFragment"
android:layout_width="match_parent"
android:layout_height="40dp"
tools:layout="@layout/status" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@id/statusBar">
android:background="@color/transparent"
android:layout_below="@id/status">
<!-- The main content view -->
<RelativeLayout
@ -192,60 +199,33 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/left_drawer"
android:layout_gravity="start">
<RelativeLayout
android:id="@+id/headerLayout"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@color/colorF">
<ImageView
android:id="@+id/icon"
android:layout_width="30dp"
android:layout_height="30dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:src="@drawable/avatar"
android:layout_centerVertical="true" />
android:layout_gravity="left">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_centerVertical="true"
android:layout_toRightOf="@+id/icon">
<TextView
android:id="@+id/display_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/font7"
android:gravity="bottom"
android:editable="false"/>
<TextView
android:id="@+id/address"
android:gravity="top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@id/icon"
style="@style/font3"
android:editable="false"/>
</LinearLayout>
</RelativeLayout>
<ListView android:id="@+id/list_drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_below="@id/headerLayout"
android:orientation="vertical">
<ListView android:id="@+id/accounts_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:choiceMode="singleChoice"
android:cacheColorHint="@color/transparent"
android:divider="@android:color/transparent"
android:dividerHeight="0dp"
android:background="@color/colorB"/>
<ListView android:id="@+id/list_drawer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:choiceMode="singleChoice"
android:divider="@color/colorE"
android:cacheColorHint="@color/transparent"
android:dividerHeight="1dp"
android:background="@color/colorH"/>
</LinearLayout>
<RelativeLayout

View file

@ -170,11 +170,11 @@
android:layout_height="match_parent">
<ImageView
android:id="@+id/menu_bar"
android:id="@+id/menu_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dp"
android:src="@drawable/menu"
android:src="@drawable/menu_burger"
android:layout_centerVertical="true"
android:layout_centerInParent="true"
android:layout_alignParentLeft="true"/>
@ -188,8 +188,7 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_toRightOf="@+id/menu_bar"
android:layout_toEndOf="@+id/menu_bar"/>
android:layout_toRightOf="@+id/menu_icon"/>
<TextView
android:id="@+id/statusText"

View file

@ -13,7 +13,6 @@
<string name="notification_registered">مُسجَّل في %s</string>
<string name="notification_register_failure">فشِل التسجيل في %s</string>
<string name="about_text">لِنْفُونْ %s الهاتف الموافق لـ SIP (rfc 3261) برخصة جْنُو العمومية الإصدار 2</string>
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
<string name="setup_welcome">سيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات.</string>
<string name="setup_create_account">إنشاء حساب في linphone.org</string>
<string name="setup_login_linphone">أتوفر على حساب في linphone.org</string>
@ -21,5 +20,6 @@
<string name="setup_linphone_account_hint">ادخل إسم المستخدم وكلمة السر لحسابك في linphone.org</string>
<string name="setup_general_account_hint">ادخل إسم المستخدم وكلمة السر وكذا نطاق SIP.</string>
<string name="setup_username_hint">إسم المستخدم</string>
<string name="button_sip_contacts">SIP</string>
<string name="tunnel_host"></string>
</resources>

View file

@ -311,7 +311,6 @@
<string name="button_ok">حسنا</string>
<string name="button_back">الرجوع</string>
<string name="button_all_contacts">الكل</string>
<string name="button_sip_contacts">SIP</string>
<string name="button_add_contact">جهة اتصال جديدة</string>
<string name="button_all_call">الكل</string>
<string name="button_missed_call">الفائتة</string>
@ -344,7 +343,6 @@
<string name="image_not_saved">خطأ، لم تُحفَظ الصورة</string>
<string name="pref_linphone_friend_title">الأصدقاء</string>
<string name="pref_auto_accept_friends_title">أصدقاء جدد</string>
<string name="pref_auto_accept_friends_desc">اقبل تلقائيا طلبات الأصدقاء الجدد</string>
<string name="linphone_friend_new_request_title">طلب صديق</string>
<string name="linphone_friend_new_request_desc">يريد مشاركة حالة حضوره معك ويريد كذلك أن يكون مطَّلعا على حالة حضورك.</string>
<string name="setup_ec_calibration">تجري معايرة مزيل الصدى</string>
@ -393,7 +391,6 @@
<string name="setup_remote_provisioning_hint">سينزِّل هذا المرشد تهيئة موجودة</string>
<string name="setup_remote_provisioning_url_hint">عنوان التهيئة</string>
<string name="setup_remote_provisioning_login_hint">لا تتضمن التهيئة التي نزَّلت هذا الحساب. يُرجى ملؤه فيها.</string>
<string name="setup_confirm_username">سيكون إسم المستخدم الخاص بك هو %s (الأحرف الكبيرة غير مسموح بها). هل أنت موافق ؟</string>
<string name="setup_title_assistant">مرشد تهيئة الحساب</string>
<string name="zrtp_accept">قبول</string>
<string name="zrtp_deny">رفض</string>

22
res/values-de/custom.xml Normal file
View file

@ -0,0 +1,22 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="history_date_format">t MMM</string>
<string name="messages_date_format">HH:mm t MMM</string>
<string name="today_date_format">HH:mm</string>
<string name="picture_name_format">linphone-mms-%s.jpg</string>
<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="notification_registered">Registriert auf %s </string>
<string name="about_text">Linphone %s SIP-kompatibles Telefon (RFC 3261) unter der GNU Public License V2</string>
<string name="setup_create_account">Erstellen Sie ein Konto auf linphone.org</string>
<string name="setup_login_linphone">Ich habe bereits ein linphone.org-Konto</string>
<string name="setup_login_generic">Ich habe bereits ein SIP-Konto</string>
<string name="setup_linphone_account_hint">Geben Sie Ihren Benutzernamen und Passwort für linphone.org ein</string>
<string name="setup_general_account_hint">Geben Sie den Benutzernamen, das Passwort und die Domäne Ihres SIP-Kontos ein</string>
<string name="setup_username_hint">Benutzername</string>
<string name="button_sip_contacts">SIP</string>
<string name="tunnel_host"></string>
</resources>

View file

@ -18,9 +18,9 @@
<string name="not_ready_to_make_new_call">Nicht bereit für einen neuen Anruf</string>
<string name="bad_target_uri">Falscher Kontakt: %s</string>
<string name="reset_sas_fmt">Geprüfte %s zurücksetzen</string>
<string name="verify_sas_fmt">Überprüfe %s</string>
<string name="communication_encrypted">verschlüsselt</string>
<string name="waiting_for_startup">Starte...</string>
<string name="verify_sas_fmt">%s überprüfen</string>
<string name="communication_encrypted">Verschlüsselt</string>
<string name="waiting_for_startup">Startvorgang...</string>
<string name="couldnt_accept_call">Beim Annehmen des Anrufs ist ein Fehler aufgetreten</string>
<string name="error_adding_new_call">Fehler beim Hinzufügen eines neuen Anrufs</string>
<string name="transfer_started">Übertragung gestartet</string>
@ -28,8 +28,8 @@
<string name="transfer_to_new_call">Neuer Anruf</string>
<string name="resume_dialog_title">Anruf fortsetzen</string>
<string name="cannot_resume_paused_by_remote_call">Kann pausierten Anruf nicht fortsetzen</string>
<string name="conf_show_details_text">Zeige Details</string>
<string name="skipable_error_service_not_ready">Warnung: Dienst ist nicht verfügbar</string>
<string name="conf_show_details_text">Details anzeigen</string>
<string name="skipable_error_service_not_ready">Warnung: Dienst ist nicht bereit</string>
<string name="close_button_text">Schließen</string>
<string name="status_conf_call">conf</string>
<string name="status_active_call">Aktiv</string>
@ -62,12 +62,12 @@
<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>
<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>
<string name="pref_audio_soft_volume_title">Software-Lautstärke verwenden</string>
<string name="pref_ipv6_title">IPv6 anstatt Ipv4 verwenden</string>
<string name="pref_ipv6_title">IPv6 anstatt IPv4 verwenden</string>
<string name="error_while_accepting_pending_call">Fehler beim Annehmen des wartenden Anrufs</string>
<string name="incoming_call_dialog_title">%s ruft an</string>
<string name="incoming_call_dialog_title">%s ruft Sie an</string>
<string name="accept">Annehmen</string>
<string name="decline">Ablehnen</string>
<string name="unknown_incoming_call_name">Unbekannt</string>
@ -76,58 +76,60 @@
<string name="pref_transport_udp">UDP</string>
<string name="pref_transport_tcp">TCP</string>
<string name="pref_transport_tls">TLS</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_transport_use_random_ports">Zufällige Ports verwenden</string>
<string name="pref_sip_port_title">Zu benutzender SIP-Port</string>
<string name="at_least_a_protocol">Es wird mindestens ein Element benötigt</string>
<string name="first_launch_ok">Registrierung erfolgreich</string>
<string name="error">Fehler</string>
<string name="click_to_show_first_login_view">Start</string>
<string name="dialer_null_on_new_intent">Anwendung nicht bereit</string>
<string name="pref_add_account">Konto hinzufügen</string>
<string name="no_phone_numbers">Keine Telefonummern gefunden für %s</string>
<string name="no_phone_numbers">Keine Telefonummern für %s gefunden</string>
<string name="filter_contacts">Kontakte filtern</string>
<string name="title_numbers_dialog">%s\'s Telefonnummer</string>
<string name="title_numbers_dialog">Telefonnummern von %s</string>
<string name="pref_delete_account">Konto löschen</string>
<string name="pref_default_account">als Standard benutzen</string>
<string name="pref_default_account">Als Standard benutzen</string>
<string name="pref_echo_canceller_calibration">Echounterdrückung kalibrieren</string>
<string name="pref_video_use_front_camera_title">Frontkamera benutzen</string>
<string name="pref_video">Video</string>
<string name="pref_preferences">Einstellungen</string>
<string name="pref_video_codecs_title">Codecs</string>
<string name="pref_preferred_video_size">bevorzugte Video-Größe</string>
<string name="menu_videocall_back_to_dialer_title">Zeige Wählgerät</string>
<string name="pref_preferred_video_size">Bevorzugte Videogröße</string>
<string name="menu_videocall_back_to_dialer_title">Wählgerät anzeigen</string>
<string name="menu_videocall_switch_camera_title">Vorder-/Rück-Kamera</string>
<string name="menu_videocall_change_resolution_when_low_resolution">Hohe Auflösung benutzen</string>
<string name="menu_videocall_change_resolution_when_high_resolution">geringe Auflösung</string>
<string name="menu_videocall_change_resolution_when_high_resolution">Geringe Auflösung</string>
<string name="menu_videocall_change_resolution_title">Auflösung ändern</string>
<string name="menu_videocall_toggle_camera_title">De-/Aktiviere Kamera</string>
<string name="menu_videocall_toggle_camera_disable">Deaktiviere Kamera</string>
<string name="menu_videocall_toggle_camera_enable">Aktiviere Kamera</string>
<string name="menu_videocall_toggle_camera_title">Kamera de-/aktivieren</string>
<string name="menu_videocall_toggle_camera_disable">Kamera deaktivieren</string>
<string name="menu_videocall_toggle_camera_enable">Kamera aktivieren</string>
<string name="menu_videocall_terminate_call_title">Anruf beenden</string>
<string name="pref_video_settings_title">Video-Einstellungen</string>
<string name="pref_video_settings_title">Videoeinstellungen</string>
<string name="pref_video_automatically_share_my_video_title">Aktiviere meine Kamera</string>
<string name="pref_video_automatically_accept_video_title">Nehme eingehende Video-Anfragen an</string>
<string name="pref_video_automatically_share_my_video">Aktiviere meine Kamera automatisch</string>
<string name="pref_video_automatically_accept_video">Nehme Video-Anfragen immer an</string>
<string name="pref_video_initiate_call_with_video_title">starte Video-Anrufe</string>
<string name="pref_video_initiate_call_with_video">Sende immer Video-Anfragen</string>
<string name="pref_video_enable_title">Aktiviere Video</string>
<string name="pref_animation_enable_title">Aktiviere Animationen</string>
<string name="pref_escape_plus">Ersetze + durch 00</string>
<string name="pref_ilbc_summary">iLBC ist möglicherweise nicht verfügbar, abhängig vom ARM Prozessor und Android Version.</string>
<string name="pref_video_automatically_accept_video_title">Eingehende Videoanfragen annehmen</string>
<string name="pref_video_automatically_share_my_video">Meine Kamera automatisch aktivieren</string>
<string name="pref_video_automatically_accept_video">Videoanfragen immer annehmen</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_enable_title">Video aktivieren</string>
<string name="pref_animation_enable_title">Animationen aktivieren</string>
<string name="pref_escape_plus">Ersetzen + durch 00</string>
<string name="pref_ilbc_summary">iLBC ist möglicherweise nicht verfügbar, abhängig vom ARM-Prozessor und der Android-Betriebssystemversion.</string>
<string name="pref_echo_cancellation">Echounterdrückung</string>
<string name="pref_autostart">Starte beim Einschalten</string>
<string name="pref_autostart">Beim Einschalten starten</string>
<string name="pref_enable_outbound_proxy">Ausgehender Proxy</string>
<string name="pref_codecs">Codecs</string>
<string name="pref_communication_expire_title">Zeitüberschreitung der Kommunikation</string>
<string name="pref_incoming_expire_title">Zeitüberschreitung bei eingehendem Anruf</string>
<string name="pref_video_port_title">Video-Port oder Port-Bereich</string>
<string name="pref_audio_port_title">Audio-Port oder Port-Bereich</string>
<string name="pref_video_port_description">Video-Port oder Port-Bereich (Min.Port-Max.Port)</string>
<string name="pref_audio_port_description">Audio-Port oder Port-Bereich (Min.Port-Max.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_incoming_call_timeout_title">Zeitüberschreitung bei eingehendem Anruf (in Sekunden)</string>
<string name="place_call_chooser">Anrufen</string>
<string name="pref_adaptive_rate_control">Starte Kalibrierung der Echounterdrückung </string>
<string name="pref_adaptive_rate_control">Adaptive Ratenregelung</string>
<string name="pref_adaptive_rate_algorithm">Adaptiver Ratenalgorithmus</string>
<string name="pref_codec_bitrate_limit">Codec-Bitratenbegrenzung</string>
<string-array name="limit_bitrate_entries">
<item>10 kbits/s</item>
<item>15 kbits/s</item>
@ -138,16 +140,17 @@
</string-array>
<string name="pref_debug">Debug</string>
<string name="about_report_issue">Problembeschreibung</string>
<string name="about_bugreport_email_text">Problembeschreibung</string>
<string name="about_bugreport_email_text">Problem hier beschreiben</string>
<string name="about_error_generating_bugreport_attachement">Fehler beim Erstellen des Fehlerberichts</string>
<string name="about_logs_not_found">Protokolle nicht gefunden.</string>
<string name="about_reading_logs">Protokolle laden, kann etwas Zeit in Anspruch nehmen...</string>
<string name="about_mailer_chooser_text">Sende Fehlerbericht per...</string>
<string name="about_mailer_chooser_text">Fehlerbericht senden per...</string>
<string name="menu_about">Über</string>
<string name="menu_send_log">Sende Protokoll</string>
<string name="menu_send_log">Protokoll senden</string>
<string name="menu_reset_log">Protokoll zurücksetzen</string>
<string name="pref_audio">Audio</string>
<string name="menu_exit">Ausgang</string>
<string name="pref_prefix">Prefix</string>
<string name="pref_prefix">Präfix</string>
<string name="pref_advanced">Erweitert</string>
<string name="menu_settings">Einstellungen</string>
<string name="pref_proxy">Proxy</string>
@ -168,14 +171,14 @@
<string name="never_remind">Niemals erinnern</string>
<string name="config_error">%s. Wollen Sie zu den Einstellungen wechseln?</string>
<string name="ec_calibration_launch_message">Starte Kalibrierung der Echounterdrückung</string>
<string name="tab_history">Historie</string>
<string name="tab_history">Chronik</string>
<string name="menu_clear_history">Leeren</string>
<string name="error_cannot_get_call_parameters">Kann Anrufparameter nicht empfangen</string>
<string name="error_cannot_create_default_parameters">Kann Standard-Anrufparameter nicht erstellen</string>
<string name="error_cannot_invite_address">Kann Zieladresse [%s] nicht einladen</string>
<string name="notification_started">begonnen</string>
<string name="pref_stun_server">Stun-Server</string>
<string name="pref_ice_enable">aktiviere ICE</string>
<string name="pref_ice_enable">ICE aktivieren</string>
<string name="pref_ice_enable_summary">aktiviere ICE</string>
<string name="ec_calibrating">Kalibrierung...</string>
<string name="ec_calibrated">Kalibriert [%s ms]</string>
@ -185,62 +188,97 @@
<string name="first_login_username">Benutzername</string>
<string name="first_login_password">Passwort</string>
<string name="first_login_connect">Verbinden</string>
<string name="first_launch_no_login_password">Bitte Benutzername und Passwort eingeben</string>
<string name="first_launch_no_login_password">Bitte geben Sie Ihren Benutzername und Ihr Passwort ein</string>
<string name="first_launch_bad_login_password">Verbindung nicht möglich; Prüfen Sie Ihre Zugangsdaten und versuchen Sie es erneut</string>
<string name="pref_amr_summary">AMR Codec ist möglicherweise nicht auf Ihrem Telefon vorhanden</string>
<string name="pref_media_encryption">Medien-Verschlüsselung</string>
<string name="pref_media_encryption">Medienverschlüsselung</string>
<string name="media_encryption_none">Keine</string>
<string name="pref_video_codec_h264_unavailable">Codec deaktiviert, Erstellen Sie die App aus dem Source-Code, um Ihn zu aktivieren.</string>
<string name="pref_video_codec_mpeg4_unavailable">Codec deaktiviert, Erstellen Sie die App aus dem Source-Code, um Ihn zu aktivieren.</string>
<string name="pref_sipaccounts">SIP-Konten</string>
<string name="pref_wifi_only">nur WLAN verwenden</string>
<string name="pref_push_notification">Aktiviere Push-Benachrichtigungen</string>
<string name="pref_push_notification">Push-Benachrichtigungen aktivieren</string>
<string name="wizard_failed">Es ist ein Fehler aufgetreten, versuchen Sie es später nochmal</string>
<string name="wizard_server_unavailable">Server nicht erreichbar, prüfen Sie Ihre Internetverbindung</string>
<string name="wizard_username_unavailable">Der Benutzername wird bereits verwendet.</string>
<string name="wizard_username_incorrect">Ihr Benutzername ist nicht gültig</string>
<string name="wizard_email_incorrect">Ihre E-Mailadresse ist nicht gültig</string>
<string name="wizard_password_incorrect">Ihr Passwort ist nicht gültig (min. 6 Zeichen)</string>
<string name="wizard_username_incorrect">Ihr Benutzername ist nicht gültig.</string>
<string name="wizard_email_incorrect">Ihre E-Mail-Adresse ist nicht gültig.</string>
<string name="wizard_password_incorrect">Ihr Passwort ist nicht gültig (min. 6 Zeichen).</string>
<string name="wizard_passwords_unmatched">Passwörter stimmen nicht überein.</string>
<string name="pref_help_proxy">SIP Proxy Hostname oder IP-Adresse (optional)</string>
<string name="pref_help_outbound_proxy">Leite alle Anrufe üder einen SIP 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="delete">Löschen</string>
<string name="chat">Nachrichten</string>
<string name="call">Call</string>
<string name="add_to_contacts">zu Kontakten hinzufügen</string>
<string name="status_connected">registriert</string>
<string name="status_not_connected">nicht registriert</string>
<string name="call">Anruf</string>
<string name="add_to_contacts">Zu Kontakten hinzufügen</string>
<string name="status_connected">Registriert</string>
<string name="status_not_connected">Nicht registriert</string>
<string name="status_in_progress">Registrierung in Arbeit</string>
<string name="status_error">Registierung fehlgeschlagen</string>
<string name="addressHint">Nummer oder Adresse</string>
<string name="conference">Konferenz</string>
<string name="incoming">Eingehender Anruf</string>
<string name="draft">Entwurf</string>
<string name="no_call_history">Kein Anruf in Ihrer Historie.</string>
<string name="no_missed_call_history">Kein verpasster Anruf in Ihrer Historie.</string>
<string name="no_call_history">Kein Anruf in Ihrer Chronik.</string>
<string name="no_missed_call_history">Kein verpasster Anruf in Ihrer Chronik.</string>
<string name="no_contact">Kein Kontakt in Ihrem Adressbuch.</string>
<string name="no_sip_contact">Kein SIP-Kontakt in Ihrem Adressbuch.</string>
<string name="no_chat_history">Keine Nachrichtenhistorie.</string>
<string name="no_chat_history">Keine Nachrichtenchronik.</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">Video-Größe:</string>
<string name="call_stats_video_resolution">Videogröße:</string>
<!--Used by Android to help blind people by describing them images-->
<string name="content_description_add_contact">zu Kontakten hinzufügen</string>
<string name="content_description_add_contact">Zu Kontakten hinzufügen</string>
<string name="content_description_new_contact">Neuer Kontakt</string>
<string name="content_description_call">Call</string>
<string name="content_description_backspace">Zurückschalten</string>
<string name="content_description_about">Seite Über</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_detail">Detail</string>
<string name="content_description_delete">Schaltfläche löschen</string>
<string name="content_description_add">Schaltfläche hinzufügen</string>
<string name="content_description_new_discussion">Neue Diskussion</string>
<string name="content_description_edit">Schaltfläche bearbeiten</string>
<string name="content_description_validate">Schaltfläche Bestätigen</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_toggle_speaker">Lautsprecher umschalten</string>
<string name="content_description_toggle_micro">Mikrofon umschalten</string>
<string name="content_description_add_call">Anruf hinzufügen</string>
<string name="content_description_pause">Pause</string>
<string name="content_description_hang_up">Auflegen</string>
<string name="content_description_numpad">Nummernblock</string>
<string name="content_description_settings">Schaltfläche Einstellungen</string>
<string name="content_description_dialer">Wählgerät</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_led"></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_welcome">Willkommen beim Kontoeinrichtungsassistent</string>
<string name="content_description_cancel">Abbrechen</string>
<string name="content_description_cancel_button">Schaltfläche Abbrechen</string>
<string name="content_description_next">Schaltfläche Weiter</string>
<string name="content_description_back">Schaltfläche Zurück</string>
<string name="content_description_setup_ok">OK</string>
<string name="content_description_message_status">Nachrichtenstatus</string>
<string name="content_description_conference">Konferenz</string>
<string name="content_description_mark"></string>
<string name="setup_title">Kontoeinrichtungsassistent</string>
@ -250,10 +288,10 @@
<string name="setup_password_confirm_hint">Passwort bestätigen</string>
<string name="setup_email_hint">E-Mail</string>
<string name="setup_create">Konto erstellen</string>
<string name="setup_check_account_validation">Prüfe</string>
<string name="setup_check_account_validation">Prüfen</string>
<string name="setup_account_not_validated">Ihr Konto wurde noch nicht überprüft.</string>
<string name="setup_account_validated">Ihr Konto wurde überprüft.</string>
<string name="button_history">Historie</string>
<string name="button_history">Chronik</string>
<string name="button_contacts">Kontakte</string>
<string name="button_settings">Einstellungen</string>
<string name="button_chat">Nachrichten</string>
@ -267,7 +305,6 @@
<string name="button_ok">OK</string>
<string name="button_back">Zurück</string>
<string name="button_all_contacts">Alle</string>
<string name="button_sip_contacts">SIP</string>
<string name="button_add_contact">Neuer Kontakt</string>
<string name="button_all_call">Alle</string>
<string name="button_missed_call">Verpasst</string>
@ -299,9 +336,9 @@
<string name="image_not_saved">Fehler, Bild nicht gespeichert</string>
<string name="pref_linphone_friend_title">Freunde</string>
<string name="pref_auto_accept_friends_title">Neue Freunde</string>
<string name="pref_auto_accept_friends_desc">Neue Freundschaftsanfragen automatisch annehmen</string>
<string name="linphone_friend_new_request_title">Freundschaftsanfrage</string>
<string name="setup_ec_calibration">Echounterdrückung kalibrieren in Arbeit</string>
<string name="pref_remote_provisioning_title">Fernbereitstellung</string>
<string name="delete_contact">Löschen</string>
<string name="sip_address">SIP-Adresse</string>
<string name="phone_number">Telefonnummer</string>
@ -313,12 +350,14 @@
<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_rfc2833_dtmf">Sende RFC2833 DTMFs</string>
<string name="pref_sipinfo_dtmf">Sende SIP INFO DTMFs</string>
<string name="pref_voice_mail">Sprachnachricht uri</string>
<string name="pref_rfc2833_dtmf">RFC2833 DTMFs senden</string>
<string name="pref_sipinfo_dtmf">SIP INFO DTMFs senden</string>
<string name="pref_voice_mail">Sprachnachricht-URI</string>
<string name="voicemail_unread">ungelesene Nachrichten</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 Medien-Parameter</string>
<string name="error_incompatible_media">Inkompatible Medienparameter</string>
<string name="error_low_bandwidth">Ihr Partner hat eine geringe Bandbreite, Video kann nicht gestartet werden</string>
<string name="error_network_unreachable">Netzwerk ist nicht erreichbar</string>
<string name="today">Heute</string>
@ -327,20 +366,20 @@
<string name="call_state_outgoing">Ausgehend</string>
<string name="call_state_incoming">Eingehend</string>
<string name="pref_background_mode">Hintergrundmodus</string>
<string name="show_image">Zeige</string>
<string name="show_image">Anzeigen</string>
<string name="download_image">Herunterladen</string>
<string name="download_image_failed">Herunterladen fehlgeschlagen. Bitte prüfen Sie Ihre Internetverbindung oder versuchen Sie es später nochmal.</string>
<string name="pref_auth_userid">Auth Benutzer-ID</string>
<string name="pref_help_auth_userid">Benutzer-ID eingeben (optional)</string>
<string name="pref_auth_userid">Authentifizierungs-Benutzerkennung</string>
<string name="pref_help_auth_userid">Authentifizierungs-Benutzerkennung eingeben (optional)</string>
<string name="pref_display_name">Anzeigename</string>
<string name="pref_help_display_name">Anzeigename eingeben (optional)</string>
<string name="pref_upnp_enable">Aktiviere UPNP</string>
<string name="pref_upnp_enable">UPNP aktivieren</string>
<string name="pref_manage">Verwalten</string>
<string name="wait">Bitte warten...</string>
<string name="importing_messages">Aktualisiere Nachrichtendatenbank</string>
<string name="importing_messages">Nachrichtendatenbank wird aktualisiert</string>
<string name="default_account_flag">Standardkonto</string>
<string name="setup_remote_provisioning_hint">Dieser Assistent lädt eine existierende Konfiguration herunter.</string>
<string name="setup_confirm_username">Ihr Benutzername lautet %s (Großbuchstaben sind nicht zuläßig). Sind Sie einverstanden?</string>
<string name="setup_remote_provisioning_url_hint">Bereitstellungs-URL</string>
<string name="setup_title_assistant">Kontoeinrichtungsassistent</string>
<string name="zrtp_accept">Annehmen</string>
<string name="zrtp_deny">Verweigern</string>
@ -348,4 +387,6 @@
<string name="remote_composing">Partner schreibt...</string>
<string name="unread_messages">%i ungelesene Nachrichten</string>
<string name="retry">Erneut versuchen</string>
<string name="remote_provisioning_again_title">Fernbereitstellung</string>
<string name="remote_provisioning_again_message">Möchten Sie die Bereitstellungs-URI ändern?</string>
</resources>

View file

@ -8,6 +8,9 @@
<string name="app_name">Linphone</string>
<string name="service_name">Linphone Service</string>
<string name="addressbook_label">Linphone</string>
<string name="sync_account_type">org.linphone</string>
<string name="sync_account_name">contacts linphone</string>
<string name="sync_mimetype">vnd.android.cursor.item/org.linphone.profile</string>
<string name="notification_title">Linphone</string>
<string name="wait_dialog_text">Démarrage</string>
<string name="notification_registered">Enregistré sur %s</string>
@ -21,5 +24,6 @@
<string name="setup_linphone_account_hint">Entrez votre nom d\'utilisateur et mot de passe de linphone.org</string>
<string name="setup_general_account_hint">Entrez votre nom d\'utilisateur, mot de passe et nom de domaine de votre compte SIP</string>
<string name="setup_username_hint">nom d\'utilisateur</string>
<string name="button_sip_contacts">SIP</string>
<string name="tunnel_host"></string>
</resources>

View file

@ -112,6 +112,7 @@
<string name="pref_video_initiate_call_with_video_title">Initier les appels en vidéo</string>
<string name="pref_video_initiate_call_with_video">Toujours envoyer des demandes d\'appels vidéo</string>
<string name="pref_video_enable_title">Activer la vidéo</string>
<string name="pref_bandwidth_limit">Bande passante maximale en kb/s</string>
<string name="pref_animation_enable_title">Activer les animations</string>
<string name="pref_escape_plus">Remplacer + par 00</string>
<string name="pref_ilbc_summary">iLBC peut être indisponible suivant le processeur ARM et la version d\'Android.</string>
@ -311,7 +312,6 @@
<string name="button_ok">Valider</string>
<string name="button_back">Retour</string>
<string name="button_all_contacts">Tous</string>
<string name="button_sip_contacts">SIP</string>
<string name="button_add_contact">+ Contact</string>
<string name="button_all_call">Tous</string>
<string name="button_missed_call">Manqués</string>
@ -344,13 +344,14 @@
<string name="image_not_saved">Erreur, image non sauvegardée</string>
<string name="pref_linphone_friend_title">Amis</string>
<string name="pref_auto_accept_friends_title">Nouveaux amis</string>
<string name="pref_auto_accept_friends_desc">Toujours accepter les nouvelles demandes d\'amis</string>
<string name="pref_auto_accept_friends_desc">Toujours accepter les demandes d\'amis</string>
<string name="linphone_friend_new_request_title">Requête d\'ami</string>
<string name="linphone_friend_new_request_desc">voudrait être partager son status avec vous et voir le votre.</string>
<string name="setup_ec_calibration">Calibration de l\'annulateur d\'écho en cours</string>
<string name="pref_image_sharing_server_title">Serveur de partage</string>
<string name="pref_remote_provisioning_title">Configuration distante</string>
<string name="delete_contact">Supprimer</string>
<string name="delete_contact_dialog">Ce contact va être supprimé.</string>
<string name="sip_address">Adresse SIP</string>
<string name="phone_number">Numéro de téléphone</string>
<string name="contact_first_name">Prénom</string>
@ -371,6 +372,9 @@
<string name="error_incompatible_media">Paramètres média incompatibles</string>
<string name="error_low_bandwidth">Votre correspondant à un débit faible, la vidéo ne peut démarrer</string>
<string name="error_network_unreachable">Le réseau n\'est pas joignable</string>
<string name="error_bad_credentials">Nom d\'utilisateur ou mot de passe incorrect.</string>
<string name="error_unauthorized">Non autorisé</string>
<string name="error_io_error">Erreur réseau</string>
<string name="today">Aujourd\'hui</string>
<string name="yesterday">Hier</string>
<string name="call_state_missed">Manqué</string>
@ -393,7 +397,7 @@
<string name="setup_remote_provisioning_hint">Cet assistant va télécharger une configuration existante.</string>
<string name="setup_remote_provisioning_url_hint">addresse où télécharger la configuration</string>
<string name="setup_remote_provisioning_login_hint">La configuration téléchargée ne contient pas votre compte. Veuillez le remplir.</string>
<string name="setup_confirm_username">Votre nom d\'utilisateur sera %s.\r\n\r\nIl peut différer de celui que vous avez choisi afin de remplir certains critères nécessaires.\r\nAcceptez-vous ?</string>
<string name="setup_confirm_username">Votre nom d\'utilisateur sera %s.\r\n\r\nIl peut être différent de celui que vous aviez entré.\r\nAcceptez-vous ce nom d\'utilisateur ?</string>
<string name="setup_title_assistant">Assistant de création de compte</string>
<string name="zrtp_accept">Accepter</string>
<string name="zrtp_deny">Refuser</string>
@ -404,4 +408,5 @@
<string name="remote_provisioning_failure">Erreur durant le téléchargement ou l\'application de la configuration distante...</string>
<string name="remote_provisioning_again_title">Configuration distante</string>
<string name="remote_provisioning_again_message">Souhaitez-vous changer l\'URI de configuration ?</string>
<string name="processing_image">Traitement de l\'image, cela peut prendre quelques secondes selon sa taille</string>
</resources>

View file

@ -13,7 +13,6 @@
<string name="notification_registered">%s に登録しました</string>
<string name="notification_register_failure">%s への登録に失敗しました</string>
<string name="about_text">Linphone %s SIP (rfc 3261) compatible phone under GNU Public License V2</string>
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
<string name="setup_welcome">アシスタントがSIPアカウントを使ってあなたの通話を助けます。</string>
<string name="setup_create_account">linphone.orgのアカウントを作成する</string>
<string name="setup_login_linphone">linphone.orgのアカウントをすでに持っている</string>
@ -21,5 +20,6 @@
<string name="setup_linphone_account_hint">linphone.orgのユーザー名とパスワードを入力してください</string>
<string name="setup_general_account_hint">SIPアカウントのユーザー名とパスワードとドメインを入力してください</string>
<string name="setup_username_hint">ユーザー名</string>
<string name="button_sip_contacts">SIP</string>
<string name="tunnel_host"></string>
</resources>

View file

@ -311,7 +311,6 @@
<string name="button_ok">はい</string>
<string name="button_back">戻る</string>
<string name="button_all_contacts">すべて</string>
<string name="button_sip_contacts">SIP</string>
<string name="button_add_contact">新しい連絡先</string>
<string name="button_all_call">すべて</string>
<string name="button_missed_call">ミス</string>
@ -344,7 +343,6 @@
<string name="image_not_saved">エラー、画像が保存できません。</string>
<string name="pref_linphone_friend_title">友だち</string>
<string name="pref_auto_accept_friends_title">新しい友だち</string>
<string name="pref_auto_accept_friends_desc">utomaticallyで新しい友だちリクエストを受け入れる</string>
<string name="linphone_friend_new_request_title">友だちリクエスト</string>
<string name="linphone_friend_new_request_desc">あなたとプレゼンス状態のシェアをしたいと考えています。</string>
<string name="setup_ec_calibration">エコーキャンセラーの調整進行中</string>
@ -393,7 +391,6 @@
<string name="setup_remote_provisioning_hint">このアシスタントは、既存の設定をダウンロードします。</string>
<string name="setup_remote_provisioning_url_hint">プロビジョニングのURL</string>
<string name="setup_remote_provisioning_login_hint">ダウンロードした設定にはあなたのアカウント情報が含まれていませんのでそれを記入してください。</string>
<string name="setup_confirm_username">あなたのユーザー名は %s のになります(大文字は使用できません)。こちらでよろしいですか?</string>
<string name="setup_title_assistant">アカウント設定アシスタント</string>
<string name="zrtp_accept">受理</string>
<string name="zrtp_deny">拒否</string>

View file

@ -13,7 +13,6 @@
<string name="notification_registered">Geregistreerd naar %s</string>
<string name="notification_register_failure">Het registreren naar %s is mislukt</string>
<string name="about_text">Linphone %s SIP (rfc 3261)-compatibele telefoonapp onder de licentie van GNU Public License V2</string>
<string name="about_link">http://www.linphone.org\n\nGebruikershandleidingen\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
<string name="setup_welcome">Deze wizard zal u helpen bij het gebruiken van een SIP-account voor uw oproepen.</string>
<string name="setup_create_account">Creëer een account op linphone.org</string>
<string name="setup_login_linphone">Ik heb al een linphone.org-account</string>
@ -21,5 +20,6 @@
<string name="setup_linphone_account_hint">Vul uw linphone.org-gebruikersnaam en -wachtwoord in</string>
<string name="setup_general_account_hint">Vul uw SIP-account-gebruikersnaam, -wachtwoord en -domeinnaam in</string>
<string name="setup_username_hint">gebruikersnaam</string>
<string name="button_sip_contacts">SIP</string>
<string name="tunnel_host"></string>
</resources>

View file

@ -133,7 +133,6 @@
<string name="button_setup_cancel">Annuleren</string>
<string name="button_cancel">Annuleren</string>
<string name="button_all_contacts">Alle</string>
<string name="button_sip_contacts">SIP</string>
<string name="button_add_contact">Nieuw contact</string>
<string name="button_all_call">Alle</string>
<string name="button_missed_call">Gemist</string>

View file

@ -8,12 +8,12 @@
<string name="notification_registered">Зарегистрирован в %s </string>
<string name="notification_register_failure">Ошибка регистрации в %s</string>
<string name="about_text">Linphone %s SIP (rfc 3261) совместимый телефон под GPL V2 лицензией</string>
<string name="about_link">http://www.linphone.org\n\nИнструкции\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
<string name="setup_welcome">Этот помощник поможет Вам настроить учётную запись SIP для звонков.</string>
<string name="setup_create_account">Создать учётную запись на linphone.org</string>
<string name="setup_login_linphone">Уже есть учётная запись на linphone.org</string>
<string name="setup_login_generic">Уже есть учётная запись SIP</string>
<string name="setup_linphone_account_hint">Введите имя пользователя и пароль учётной записи linphone.org</string>
<string name="setup_general_account_hint">Введите имя пользователя, пароль и сервер учётной записи SIP</string>
<string name="button_sip_contacts">SIP</string>
<string name="tunnel_host"></string>
</resources>

View file

@ -263,7 +263,6 @@
<string name="button_ok">ОК</string>
<string name="button_back">Назад</string>
<string name="button_all_contacts">Все</string>
<string name="button_sip_contacts">SIP</string>
<string name="button_add_contact">Новый контакт</string>
<string name="button_all_call">Все</string>
<string name="button_missed_call">Пропущенные</string>
@ -296,7 +295,6 @@
<string name="image_not_saved">Ошибка, картинка не сохранена</string>
<string name="pref_linphone_friend_title">Друзья</string>
<string name="pref_auto_accept_friends_title">Новые друзья</string>
<string name="pref_auto_accept_friends_desc">Автоматически принимать запросы дружбы</string>
<string name="linphone_friend_new_request_title">Запрос дружбы</string>
<string name="linphone_friend_new_request_desc">хочет поделиться своим статусом с Вами и получать обновления Вашего статуса.</string>
<string name="setup_ec_calibration">Идёт настройка шумоподавления</string>
@ -339,7 +337,6 @@
<string name="setup_remote_provisioning">Download provisioning</string>
<string name="setup_remote_provisioning_hint">This assistant will download an existing configuration.</string>
<string name="setup_remote_provisioning_url_hint">provisioning url</string>
<string name="setup_confirm_username">Your username will be %s (uppercase characters are not allowed). Do you accept ?</string>
<string name="setup_title_assistant">Account setup assistant</string>
<string name="zrtp_accept">Accept</string>
<string name="zrtp_deny">Deny</string>

View file

@ -13,7 +13,6 @@
<string name="notification_registered">Уписан на „%s“ </string>
<string name="notification_register_failure">Нисам успео да се упишем на „%s“</string>
<string name="about_text">Линфон %s телефон сагласан са СИП-ом (rfc 3261) под Гнуовом Јавном Лиценцом и2</string>
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
<string name="setup_welcome">Овај помоћник ће вам помоћи да користите СИП налог за ваше позиве.</string>
<string name="setup_create_account">Направи налог на линфон.орг-у</string>
<string name="setup_login_linphone">Већ имам налог линфон.орг-а</string>

17
res/values-tr/custom.xml Normal file
View file

@ -0,0 +1,17 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="today_date_format">SS:dd</string>
<string name="app_name">Linphone</string>
<string name="service_name">Linphone Hizmeti</string>
<string name="addressbook_label">Linphone</string>
<string name="notification_title">Linphone</string>
<string name="wait_dialog_text">Başlatılıyor</string>
<string name="setup_welcome">Bu yardımcı, aramalarınız için bir SİP hesabı kullanmanıza yardım edecek.</string>
<string name="setup_create_account">linphone.org\'da bir hesap oluşturun</string>
<string name="setup_login_linphone">Zaten bir linphone.org hesabım var</string>
<string name="setup_login_generic">Zaten bir SİP hesabım var</string>
<string name="setup_linphone_account_hint">linphone.org kullanıcı adını ve parolasını girin</string>
<string name="setup_general_account_hint">SİP hesabınızın kullanıcı adını,parolasını ve alan adını girin</string>
<string name="setup_username_hint">kullanıcı adı</string>
<string name="tunnel_host"></string>
</resources>

190
res/values-tr/strings.xml Normal file
View file

@ -0,0 +1,190 @@
<?xml version='1.0' encoding='UTF-8'?>
<resources>
<string name="pref_disable_account">Etkin değil</string>
<string name="pref_tunnel_host">Makine Adı</string>
<string name="pref_tunnel_port">Bağlanma Noktası</string>
<string name="pref_tunnel_mode">Kip</string>
<!--do not change order without changing corresponding entry_values in non_localizable_strings.xml-->
<string name="incall_notif_active">Sesli arama sürüyor</string>
<string name="not_ready_to_make_new_call">Yeni arama için hazır değil</string>
<string name="communication_encrypted">Şifreli</string>
<string name="waiting_for_startup">Başlatılıyor...</string>
<string name="couldnt_accept_call">Çağrı kabul edilirken bir hata oluştu</string>
<string name="error_adding_new_call">Yeni çağrı ekleme hatası</string>
<string name="transfer_started">Aktarma başlatıldı</string>
<string name="transfer_to_new_call">Yeni arama</string>
<string name="conf_show_details_text">Ayrıntıları göster</string>
<string name="close_button_text">Kapalı</string>
<string name="status_active_call">Etkin</string>
<string name="state_paused">Duraklatıldı</string>
<string name="state_streams_running"></string>
<string name="state_incoming_received">gelen</string>
<string name="mutemic_button_txt">Sessiz</string>
<string name="speaker_button_txt">Hoparlör</string>
<string name="bluetooth_button_txt">Bluetooth</string>
<string name="CancelButtonText">İptal</string>
<string name="AddCallButtonText">Arama ekle</string>
<string name="conf_admin_choice_enter">Çoklu görüşme giriş</string>
<string name="conf_admin_choice_leave">Çoklu görüşmeden geçici olarak ayrıl</string>
<string name="conf_admin_choice_terminate">Çoklu görüşmeyi sonlandır</string>
<string name="hangup">Telefonu kapat</string>
<string name="conf_simple_merge_bt_txt">Birleştirme</string>
<string name="conf_simple_transfer_bt_txt">Aktarma</string>
<string name="conf_simple_video_bt_txt">görüntü</string>
<!--<string name="conf_simple_no_current_call">No active call</string>-->
<string name="show_send_dtmfs_button">Tuş takımı</string>
<string name="conf_conference">Çoklu görüşme</string>
<string name="in_conf_leave">Dışarı çık</string>
<string name="accept">Kabul et</string>
<string name="decline">Reddet</string>
<string name="unknown_incoming_call_name">Bilinmeyen</string>
<string name="pref_network_title"></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_transport_use_random_ports">Rastgele bağlanma noktası kullan</string>
<string name="first_launch_ok">Kayıt başarılı</string>
<string name="error">Hata</string>
<string name="click_to_show_first_login_view">Başla</string>
<string name="dialer_null_on_new_intent">Uygulama hazır değil</string>
<string name="pref_add_account">Hesap ekle</string>
<string name="filter_contacts">Bağlantı süzgeci</string>
<string name="pref_delete_account">Bu hesabı sil</string>
<string name="pref_default_account">Öntanımlıyı kullan</string>
<string name="pref_video_use_front_camera_title">Ön kamerayı kullan</string>
<string name="pref_video">Görüntü</string>
<string name="pref_preferences">Yeğlenenler</string>
<string name="pref_video_codecs_title">Çözücüler</string>
<string name="pref_preferred_video_size">Yeğlenen görüntü boyutu</string>
<string name="menu_videocall_switch_camera_title">Ön/Arka Kamera</string>
<string name="menu_videocall_change_resolution_when_low_resolution">Yüksek Çözünürlüğü Dene</string>
<string name="menu_videocall_change_resolution_when_high_resolution">Düşük Çözünürlük</string>
<string name="menu_videocall_change_resolution_title">Çözünürlüğü değiştir</string>
<string name="menu_videocall_toggle_camera_disable">Kamera devre dışı</string>
<string name="menu_videocall_toggle_camera_enable">Kamera etkin</string>
<string name="menu_videocall_terminate_call_title">Çağrıyı sonlandır</string>
<string name="pref_video_settings_title">Görüntü ayarları</string>
<string name="pref_video_automatically_share_my_video_title">Kameramı paylaş</string>
<string name="pref_video_enable_title">Görüntü etkin</string>
<string name="pref_codecs">Çözücüler</string>
<string name="pref_communication_expire_title">İletişim zaman aşımına uğradı</string>
<string name="pref_incoming_expire_title">Gelen çağrı zaman aşımına uğradı</string>
<string name="pref_video_port_title">Görüntü bağlantı noktası veya bağlantı noktası aralığı</string>
<string name="pref_debug">Hata ayıklama</string>
<string name="about_report_issue">Sorun bildirimi</string>
<string name="about_logs_not_found">Kayıtlar bulunamadı.</string>
<string name="menu_about">Hakkında</string>
<string name="pref_audio">Ses</string>
<string name="menu_exit">Çıkış</string>
<string name="pref_prefix">Önek</string>
<string name="pref_advanced">Gelişmiş</string>
<string name="menu_settings">Ayarlar</string>
<string name="pref_proxy">Vekil</string>
<string name="pref_domain">Alan adı*</string>
<string name="pref_passwd">Parola*</string>
<string name="pref_username">Kullanıcı adı*</string>
<string name="pref_sipaccount">SİP Hesabı</string>
<string name="wrong_username">yanlış kullanıcı adı</string>
<string name="wrong_passwd">yanlış parola</string>
<string name="wrong_domain">Yanlış alan adı</string>
<string name="wrong_settings">Yanlış ayarlar</string>
<string name="tab_dialer">Telefon numarası çevirici</string>
<string name="tab_contact">Bağlantı</string>
<string name="yes">Evet</string>
<string name="no">Hayır</string>
<string name="dismiss">Reddet</string>
<string name="cont">Sürdürmek</string>
<string name="never_remind">Beni asla anımsama</string>
<string name="tab_history">Geçmiş</string>
<string name="menu_clear_history">Temizle</string>
<string name="pref_ice_enable">İCE Etkin</string>
<string name="ec_calibrating">Ayarlama...</string>
<string name="no_echo">Eko yok</string>
<string name="failed">başarısız</string>
<string name="first_login_username">Kullanıcı adı</string>
<string name="first_login_password">Parola</string>
<string name="first_login_connect">Bağlamak</string>
<string name="pref_media_encryption">Ortam şifreleme</string>
<string name="pref_sipaccounts">SİP Hesabı</string>
<string name="pref_wifi_only">Sadece wifi kullan</string>
<string name="wizard_failed">Bir hata oluştu,daha sonra tekrar deneyin.</string>
<string name="wizard_username_unavailable">Bu kullanıcı adı zaten kullanılıyor.</string>
<string name="wizard_username_incorrect">Kullanıcı adınız geçersizdir.</string>
<string name="wizard_email_incorrect">E-posta adresiniz geçersizdir.</string>
<string name="wizard_password_incorrect">Parolanız geçersiz (en az 6 karakter).</string>
<string name="wizard_passwords_unmatched">Girdiğiniz parolalar farklı.</string>
<string name="delete">Sil</string>
<string name="chat">Sohbet</string>
<string name="call">Çağrı</string>
<string name="add_to_contacts">Bağlantı ekle</string>
<string name="status_connected">Kayıtlı</string>
<string name="status_not_connected">Kayıtlı değil</string>
<string name="status_in_progress">Kayıt sürüyor</string>
<string name="status_error">Kayıt başarısız</string>
<string name="addressHint">Numara veya adres</string>
<string name="conference">Çoklu görüşme</string>
<string name="incoming">Gelen çağrı</string>
<string name="draft">Taslak</string>
<string name="call_stats_audio">Ses</string>
<string name="call_stats_video">Görüntü</string>
<string name="call_stats_codec">Çözücü:</string>
<string name="call_stats_video_resolution">Görüntü boyutu:</string>
<!--Used by Android to help blind people by describing them images-->
<string name="content_description_add_contact">Bağlantılara ekle</string>
<string name="content_description_new_contact">Yeni bağlantı</string>
<string name="content_description_call">Çağrı</string>
<string name="content_description_backspace">Geri alma</string>
<string name="content_description_chat">Sohbet</string>
<string name="content_description_send_message">İleti gönder</string>
<string name="content_description_detail">Ayrıntı</string>
<string name="content_description_delete">Düğmeyi sil</string>
<string name="content_description_add">Düğme ekle</string>
<string name="content_description_new_discussion">Yeni tartışma</string>
<string name="content_description_search">Arama</string>
<string name="content_description_all_contacts">Tüm bağlantılar</string>
<string name="content_description_linphone_contacts">Linphone bağlantıları</string>
<string name="content_description_call_direction">Çağrı yönlendirme</string>
<string name="content_description_all_calls">Tüm çağrılar</string>
<string name="content_description_missed_calls">Yanıtsız çağrılar</string>
<string name="content_description_add_call">Arama ekle</string>
<string name="content_description_pause">Duraklat</string>
<string name="content_description_hang_up">Telefonu kapat</string>
<string name="content_description_numpad">Sayısal tuş takımı</string>
<string name="content_description_settings">Ayarlar düğmesi</string>
<string name="content_description_dialer">Telefon numarası çevirici</string>
<string name="content_description_history">Geçmiş düğmesi</string>
<string name="content_description_chat_button">Sohbet düğmesi</string>
<string name="content_description_contacts">Bağlantılar düğmesi</string>
<string name="content_description_led"></string>
<string name="content_description_call_quality">Çağrı kalitesi</string>
<string name="content_description_encryption">Şifreleme</string>
<string name="content_description_cancel">İptal</string>
<string name="content_description_cancel_button">İptal düğmesi</string>
<string name="content_description_setup_ok">Tamam</string>
<string name="content_description_conference">Çoklu görüşme</string>
<string name="content_description_mark"></string>
<string name="setup_title">Hesap Ayar Yardımcısı</string>
<string name="setup_apply">Uygulamak</string>
<string name="setup_password_hint">parola</string>
<string name="setup_domain_hint">alan adı</string>
<string name="setup_password_confirm_hint">parolayı onayla</string>
<string name="setup_email_hint">eposta</string>
<string name="button_history">Geçmiş</string>
<string name="button_settings">Ayarlar</string>
<string name="button_chat">Sohbet</string>
<string name="button_about">Hakkında</string>
<string name="button_setup_cancel">İptal</string>
<string name="button_cancel">İptal</string>
<string name="button_add_contact">Yeni bağlantı</string>
<string name="button_delete_all">Sil</string>
<string name="button_transfer">Aktarma</string>
<string name="button_add_call">Arama ekle</string>
<string name="button_video">Görüntü</string>
<string name="button_speaker">Hoparlör</string>
<string name="button_bluetooth">Bluetooth</string>
<string name="call_update_yes">Kabul et</string>
<string name="call_update_no">Reddet</string>
<string name="delete_contact">Sil</string>
<string name="pref_user_name_title">Kullanıcı adı</string>
<string name="zrtp_accept">Kabul et</string>
</resources>

View file

@ -2,7 +2,7 @@
<resources>
<string name="history_date_format">EEE, d MMM</string>
<string name="history_detail_date_format">yyyy/MM/dd - HH:mm - </string>
<string name="messages_date_format">HH:mm d MMM</string>
<string name="messages_date_format">dd/MM, HH:mm </string>
<string name="messages_list_date_format">dd/MM</string>
<string name="today_date_format">HH:mm</string>
<string name="picture_name_format">linphone-mms-%s.jpg</string>

View file

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- New settings -->
<bool name="setup_use_linphone_as_first_fragment">false</bool>
<bool name="assistant_use_linphone_login_as_first_fragment">false</bool>
<string name="default_domain">sip.linphone.org</string>
@ -15,7 +15,7 @@
<bool name="enable_push_id">true</bool>
<string name="push_sender_id">622464153529</string>
<string name="default_domain">sip.linphone.org</string>
<string name="default_stun">stun.linphone.org</string>
<bool name="override_domain_using_default_one">false</bool> <!-- Replace the domain for outgoing calls by the one above -->
<string name="wizard_url">https://www.linphone.org/wizard.php</string>

View file

@ -46,9 +46,8 @@
<!-- Left Menu -->
<string-array name="menu_entry">
<item>Account</item>
<item>Settings</item>
<item>Wizard</item>
<item>Assistant</item>
<item>About</item>
</string-array>
@ -456,7 +455,7 @@
<string name="setup_remote_provisioning_hint">This assistant will download an existing configuration.</string>
<string name="setup_remote_provisioning_url_hint">provisioning url</string>
<string name="setup_remote_provisioning_login_hint">The configuration you downloaded doesn\'t include your account. Please fill it in.</string>
<string name="setup_confirm_username">Your username will be %s.\r\n\r\nIt may differ from what you entered to match some requierements.\r\nDo you accept ?</string>
<string name="setup_confirm_username">Your username will be %s.\r\n\r\nIt may differ from what you entered to match some requirements.\r\nDo you accept ?</string>
<string name="zrtp_accept">Accept</string>
<string name="zrtp_deny">Deny</string>

View file

@ -17,9 +17,9 @@
<item name="android:textSize">20sp</item>
</style>
<style name="font3" parent="@android:style/TextAppearance.Medium">
<style name="font3" parent="@android:style/TextAppearance.Small">
<item name="android:textColor">@color/colorA</item>
<item name="android:textSize">18sp</item>
<item name="android:textSize">16sp</item>
</style>
<style name="font4" parent="@android:style/TextAppearance.Medium">
@ -53,7 +53,7 @@
<style name="font9" parent="@android:style/TextAppearance.Small">
<item name="android:textColor">@color/colorC</item>
<item name="android:textSize">20sp</item>
<item name="android:textSize">16sp</item>
</style>
<style name="font10" parent="@android:style/TextAppearance.Medium">
@ -61,9 +61,9 @@
<item name="android:textSize">24sp</item>
</style>
<style name="font11" parent="@android:style/TextAppearance.Small">
<style name="font11" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/colorD</item>
<item name="android:textSize">15sp</item>
<item name="android:textSize">16sp</item>
</style>
<style name="font12" parent="@android:style/TextAppearance.Small">
@ -71,7 +71,7 @@
<item name="android:textSize">25sp</item>
</style>
<style name="font13" parent="@android:style/TextAppearance.Small">
<style name="font13" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/colorE</item>
<item name="android:textSize">18sp</item>
</style>

View file

@ -81,6 +81,7 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.ArrayAdapter;
import android.widget.AutoCompleteTextView;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.Filterable;
@ -98,8 +99,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private static final int ADD_PHOTO = 1337;
private static final int MENU_DELETE_MESSAGE = 0;
private static final int MENU_PICTURE_SMALL = 2;
private static final int MENU_PICTURE_MEDIUM = 3;
private static final int MENU_PICTURE_LARGE = 4;
private static final int MENU_PICTURE_REAL = 5;
private static final int MENU_COPY_TEXT = 6;
private static final int MENU_RESEND_MESSAGE = 7;
private static final int SIZE_SMALL = 500;
private static final int SIZE_MEDIUM = 1000;
private static final int SIZE_LARGE = 1500;
private static final int SIZE_MAX = 2048;
private LinphoneChatRoom chatRoom;
@ -116,6 +124,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
private ProgressBar progressBar;
private Uri imageToUploadUri;
private String filePathToUpload;
private TextWatcher textWatcher;
private ViewTreeObserver.OnGlobalLayoutListener keyboardListener;
private ChatMessageAdapter adapter;
@ -156,7 +165,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
textLayout = (RelativeLayout) view.findViewById(R.id.messageLayout);
progressBar = (ProgressBar) view.findViewById(R.id.progressbar);
topBar = (RelativeLayout) view.findViewById(R.id.topBar);
topBar = (RelativeLayout) view.findViewById(R.id.top_bar);
sendMessage = (ImageView) view.findViewById(R.id.sendMessage);
sendMessage.setOnClickListener(this);
@ -212,6 +221,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
pickImage();
}
});
//registerForContextMenu(sendImage);
} else {
sendImage.setEnabled(false);
}
@ -379,7 +389,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
v.setLayoutParams(layoutParams);
}
rlayout.addView(v);
return rlayout;
}
}
@ -451,8 +460,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
if (v.getId() == R.id.sendPicture) {
menu.add(0, MENU_PICTURE_SMALL, 0, getString(R.string.share_picture_size_small));
menu.add(0, MENU_PICTURE_MEDIUM, 0, getString(R.string.share_picture_size_medium));
menu.add(0, MENU_PICTURE_LARGE, 0, getString(R.string.share_picture_size_large));
// Not a good idea, very big pictures cause Out of Memory exceptions, slow display, ...
// menu.add(0, MENU_PICTURE_REAL, 0, getString(R.string.share_picture_size_real));
} else {
menu.add(v.getId(), MENU_DELETE_MESSAGE, 0, getString(R.string.delete));
menu.add(v.getId(), MENU_COPY_TEXT, 0, getString(R.string.copy_text));
}
LinphoneChatMessage msg = getMessageForId(v.getId());
if (msg != null && msg.getStatus() == LinphoneChatMessage.State.NotDelivered) {
@ -478,6 +495,18 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
case MENU_RESEND_MESSAGE:
resendMessage(item.getGroupId());
break;
case MENU_PICTURE_SMALL:
sendImageMessage(filePathToUpload, SIZE_SMALL);
break;
case MENU_PICTURE_MEDIUM:
sendImageMessage(filePathToUpload, SIZE_MEDIUM);
break;
case MENU_PICTURE_LARGE:
sendImageMessage(filePathToUpload, SIZE_LARGE);
break;
case MENU_PICTURE_REAL:
sendImageMessage(filePathToUpload, SIZE_MAX);
break;
}
return true;
}
@ -660,18 +689,22 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
}
private void sendImageMessage(String path) {
private void sendImageMessage(String path, int imageSize) {
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable();
if (chatRoom != null && path != null && path.length() > 0 && isNetworkReachable) {
try {
Bitmap bm = BitmapFactory.decodeFile(path);
if (bm != null) {
FileUploadPrepareTask task = new FileUploadPrepareTask(getActivity(), path);
FileUploadPrepareTask task = new FileUploadPrepareTask(getActivity(), path, imageSize);
task.execute(bm);
} else {
Log.e("Error, bitmap factory can't read " + path);
}
} catch (RuntimeException e) {
Log.e("Error, not enough memory to create the bitmap");
}
} else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) {
LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG);
}
@ -679,11 +712,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
class FileUploadPrepareTask extends AsyncTask<Bitmap, Void, byte[]> {
private String path;
private int imageSize;
private ProgressDialog progressDialog;
public FileUploadPrepareTask(Context context, String fileToUploadPath) {
public FileUploadPrepareTask(Context context, String fileToUploadPath, int size) {
path = fileToUploadPath;
imageSize = size;
uploadLayout.setVisibility(View.VISIBLE);
textLayout.setVisibility(View.GONE);
@ -779,7 +813,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
if (message.getText() != null && message.getText().length() > 0) {
sendTextMessage(message.getText());
} else {
sendImageMessage(message.getAppData());
sendImageMessage(message.getAppData(),0);
}
}
@ -826,6 +860,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
return null;
}
private void showPopupMenuAskingImageSize(final String filePath) {
filePathToUpload = filePath;
try {
sendImage.showContextMenu();
} catch (Exception e) {
e.printStackTrace();
};
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) {
@ -838,7 +881,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
}
if (fileToUploadPath != null) {
sendImageMessage(fileToUploadPath);
//showPopupMenuAskingImageSize(fileToUploadPath);
sendImageMessage(fileToUploadPath,0);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
@ -891,9 +935,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
if (results.count > 0) {
Log.w(results.count);
contacts.clear();
contacts = (List<ContactAddress>) results.values;
notifyDataSetChanged();
} else {
} else {;
contacts.clear();
contacts = getContactsList();
notifyDataSetInvalidated();
}
}
@ -901,12 +951,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<ContactAddress> result = new ArrayList<ContactAddress>();
Log.w(constraint);
if(constraint != null) {
for (ContactAddress c : contacts) {
Log.w(c.mAddress);
Log.w(constraint.toString());
Log.w(c.mContact.getName());
if (c.mContact.getName().startsWith(constraint.toString()) || c.mAddress.startsWith(constraint.toString())) {
Log.w(c.mAddress);
if (c.mContact.getName().toLowerCase().startsWith(constraint.toString()) || c.mAddress.startsWith(constraint.toString())) {
result.add(c);
}
}
@ -919,6 +969,17 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
};
}
public List<ContactAddress> getContactsList(){
List<ContactAddress> contacts = new ArrayList<ContactAddress>();
contacts = new ArrayList<ContactAddress>();
for(Contact con: ContactsManager.getInstance().getAllContacts()){
for(String numberOrAddress : con.getNumbersOrAddresses()){
contacts.add(new ContactAddress(con,numberOrAddress));
}
}
return contacts;
}
class ContactAddress {
public Contact mContact;
public String mAddress;
@ -935,13 +996,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public Object getItem(int position) {
if (contacts == null || position >= contacts.size()) {
List<ContactAddress> contacts_list = new ArrayList<ContactAddress>();
for(Contact c: ContactsManager.getInstance().getAllContacts()){
for(String numberOrAddress : c.getNumbersOrAddresses()){
contacts_list.add(new ContactAddress(c,numberOrAddress));
}
}
return contacts_list;
return getContactsList().get(position);
} else {
return contacts.get(position);
}
@ -953,7 +1008,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
public View getView(int position, View convertView, ViewGroup parent) {
View view = null;
ContactAddress contact = null;
ContactAddress contact;
do {
contact = (ContactAddress) getItem(position);
} while (contact == null);
@ -967,9 +1022,21 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
TextView name = (TextView) view.findViewById(R.id.Contact_name);
name.setText(contact.mContact.getName());
TextView address = (TextView) view.findViewById(R.id.contact_address);
final TextView address = (TextView) view.findViewById(R.id.contact_address);
address.setText(contact.mAddress);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
searchContactField.setVisibility(View.GONE);
sipUri = address.getText().toString();
messagesList.setVisibility(View.VISIBLE);
newChatConversation = false;
chatRoom = LinphoneManager.getLc().getOrCreateChatRoom(address.getText().toString());
dispayMessageList();
}
});
return view;
}
}

View file

@ -31,6 +31,7 @@ import org.linphone.core.LinphoneCoreException;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Log;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.SharedPreferences;
@ -48,10 +49,14 @@ import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
@ -80,7 +85,6 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
noChatHistory = (TextView) view.findViewById(R.id.noChatHistory);
edit = (ImageView) view.findViewById(R.id.edit);
edit.setOnClickListener(this);
@ -95,17 +99,52 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
delete = (ImageView) view.findViewById(R.id.delete);
delete.setOnClickListener(this);
delete.setVisibility(View.INVISIBLE);
return view;
}
private void selectAllList(boolean isSelectAll){
int size = chatList.getAdapter().getCount();
for(int i=0; i<size; i++) {
chatList.setItemChecked(i,isSelectAll);
}
}
private void removeChatsConversation(){
int size = chatList.getAdapter().getCount();
for(int i=0; i<size; i++) {
if(chatList.isItemChecked(i)){
View item = chatList.getAdapter().getView(i, null, null);
if(item != null) {
LinphoneChatRoom chatroom = LinphoneManager.getLc().getOrCreateChatRoom(item.getTag().toString());
if (chatroom != null)
chatroom.deleteHistory();
}
}
}
}
public void quitEditMode(){
isEditMode = false;
selectAll.setVisibility(View.GONE);
deselectAll.setVisibility(View.GONE);
delete.setVisibility(View.GONE);
edit.setVisibility(View.VISIBLE);
refresh();
}
private void hideAndDisplayMessageIfNoChat() {
if (mConversations.size() == 0 && mDrafts.size() == 0) {
noChatHistory.setVisibility(View.VISIBLE);
chatList.setVisibility(View.GONE);
edit.setEnabled(false);
} else {
noChatHistory.setVisibility(View.GONE);
chatList.setVisibility(View.VISIBLE);
chatList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
chatList.setAdapter(new ChatListAdapter(useLinphoneStorage));
edit.setEnabled(true);
}
}
@ -205,26 +244,42 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
public void onClick(View v) {
int id = v.getId();
/*if (id == R.id.clearFastChatField) {
fastNewChat.setText("");
}*/
if (id == R.id.delete) {
edit.setVisibility(View.VISIBLE);
selectAll.setVisibility(View.GONE);
deselectAll.setVisibility(View.GONE);
delete.setVisibility(View.GONE);
isEditMode = false;
hideAndDisplayMessageIfNoChat();
}
else if (id == R.id.select_all) {
if (id == R.id.select_all) {
deselectAll.setVisibility(View.VISIBLE);
selectAll.setVisibility(View.GONE);
//TODO select all chatrooms
selectAllList(true);
return;
}
else if (id == R.id.deselect_all) {
if (id == R.id.deselect_all) {
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
//TODO deselect all chatrooms
selectAllList(false);
return;
}
if (id == R.id.delete) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = (Button) dialog.findViewById(R.id.delete);
Button cancel = (Button) dialog.findViewById(R.id.cancel);
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
removeChatsConversation();
dialog.dismiss();
quitEditMode();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
quitEditMode();
}
});
dialog.show();
return;
}
else if (id == R.id.edit) {
edit.setVisibility(View.GONE);
@ -376,7 +431,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView != null) {
@ -407,22 +462,25 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
String message = "";
Long time = null;
TextView lastMessageView = (TextView) view.findViewById(R.id.lastMessage);
LinphoneChatRoom chatRoom = LinphoneManager.getLc().getOrCreateChatRoom(contact);
LinphoneChatMessage[] history = chatRoom.getHistory(20);
if (history != null && history.length > 0) {
for (int i = history.length - 1; i >= 0; i--) {
LinphoneChatMessage msg = history[i];
if (msg.getText() != null && msg.getText().length() > 0 && msg.getFileTransferInformation() == null) {
LinphoneChatMessage[] history = chatRoom.getHistory(1);
LinphoneChatMessage msg = history[0];
if (msg.getText() != null && msg.getText().length() > 0) {
message = msg.getText();
time = msg.getTime();
break;
}
}
}
TextView date = (TextView) view.findViewById(R.id.date);
date.setText(timestampToHumanDate(time));
TextView lastMessageView = (TextView) view.findViewById(R.id.lastMessage);
lastMessageView.setText(message);
} else {
if(msg.getFileTransferInformation() != null || msg.getExternalBodyUrl() != null){
lastMessageView.setBackgroundResource(R.drawable.chat_file_message);
time = msg.getTime();
}
}
TextView date = (TextView) view.findViewById(R.id.date);
if(time != null)
date.setText(timestampToHumanDate(time));
TextView sipUri = (TextView) view.findViewById(R.id.sipUri);
sipUri.setSelected(true); // For animation
@ -437,8 +495,24 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
view.findViewById(R.id.draft).setVisibility(View.VISIBLE);
}
CheckBox select = (CheckBox) view.findViewById(R.id.delete);
if (isEditMode) {
select.setVisibility(View.VISIBLE);
select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
chatList.setItemChecked(position, b);
}
});
if(chatList.isItemChecked(position)) {
select.setChecked(true);
} else {
select.setChecked(false);
}
} else {
delete.setVisibility(View.GONE);
}
ImageView delete = (ImageView) view.findViewById(R.id.delete);
TextView unreadMessages = (TextView) view.findViewById(R.id.unreadMessages);
if (unreadMessagesCount > 0) {
@ -448,12 +522,6 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
unreadMessages.setVisibility(View.GONE);
}
if (isEditMode) {
delete.setVisibility(View.VISIBLE);
} else {
delete.setVisibility(View.INVISIBLE);
}
return view;
}
}

View file

@ -121,10 +121,10 @@ public class ContactFragment extends Fragment implements OnClickListener {
private void displayContact(LayoutInflater inflater, View view) {
ImageView contactPicture = (ImageView) view.findViewById(R.id.contactPicture);
if (contact.getPhotoUri() != null) {
//InputStream input = Compatibility.getContactPictureInputStream(LinphoneActivity.instance().getContentResolver(), contact.getID());
//contactPicture.setImageBitmap(BitmapFactory.decodeStream(input));
InputStream input = Compatibility.getContactPictureInputStream(LinphoneActivity.instance().getContentResolver(), contact.getID());
contactPicture.setImageBitmap(BitmapFactory.decodeStream(input));
} else {
//contactPicture.setImageResource(R.drawable.unknown_small);
contactPicture.setImageResource(R.drawable.avatar);
}
TextView contactName = (TextView) view.findViewById(R.id.contactName);

View file

@ -17,13 +17,16 @@ You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
import java.util.ArrayList;
import java.util.List;
import org.linphone.compatibility.Compatibility;
import org.linphone.core.LinphoneCallLog;
import org.linphone.core.LinphoneFriend;
import org.linphone.core.PresenceActivityType;
import android.annotation.SuppressLint;
import android.app.Dialog;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
@ -35,10 +38,14 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AlphabetIndexer;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
@ -55,8 +62,8 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
private LayoutInflater mInflater;
private ListView contactsList;
private TextView noSipContact, noContact;
private ImageView allContacts, linphoneContacts, newContact;
private boolean onlyDisplayLinphoneContacts;
private ImageView allContacts, linphoneContacts, newContact, edit, selectAll, deselectAll, delete;
private boolean onlyDisplayLinphoneContacts, isEditMode;
private RelativeLayout allContactsSelected, linphoneContactsSelected;
private int lastKnownPosition;
private AlphabetIndexer indexer;
@ -114,6 +121,18 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
allContacts.setEnabled(onlyDisplayLinphoneContacts);
linphoneContacts.setEnabled(!allContacts.isEnabled());
selectAll = (ImageView) view.findViewById(R.id.select_all);
selectAll.setOnClickListener(this);
deselectAll = (ImageView) view.findViewById(R.id.deselect_all);
deselectAll.setOnClickListener(this);
delete = (ImageView) view.findViewById(R.id.delete);
delete.setOnClickListener(this);
delete.setVisibility(View.INVISIBLE);
edit = (ImageView) view.findViewById(R.id.edit);
edit.setOnClickListener(this);
clearSearchField = (ImageView) view.findViewById(R.id.clearSearchField);
clearSearchField.setOnClickListener(this);
@ -144,6 +163,52 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
public void onClick(View v) {
int id = v.getId();
if (id == R.id.select_all) {
deselectAll.setVisibility(View.VISIBLE);
selectAll.setVisibility(View.GONE);
selectAllList(true);
return;
}
if (id == R.id.deselect_all) {
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
selectAllList(false);
return;
}
if (id == R.id.delete) {
final Dialog dialog = LinphoneActivity.instance().displayDialog(getString(R.string.delete_text));
Button delete = (Button) dialog.findViewById(R.id.delete);
Button cancel = (Button) dialog.findViewById(R.id.cancel);
delete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
removeContacts();
dialog.dismiss();
quitEditMode();
}
});
cancel.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
dialog.dismiss();
quitEditMode();
}
});
dialog.show();
return;
}
if (id == R.id.edit) {
edit.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
delete.setVisibility(View.VISIBLE);
newContact.setVisibility(View.GONE);
isEditMode = true;
}
if (id == R.id.all_contacts) {
onlyDisplayLinphoneContacts = false;
allContactsSelected.setVisibility(View.VISIBLE);
@ -168,6 +233,12 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
changeContactsAdapter();
}
}
if(isEditMode){
deselectAll.setVisibility(View.GONE);
selectAll.setVisibility(View.VISIBLE);
}
else if (id == R.id.newContact) {
editConsumed = true;
LinphoneActivity.instance().addContact(null, sipAddressToAdd);
@ -177,6 +248,31 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
}
}
private void selectAllList(boolean isSelectAll){
int size = contactsList.getAdapter().getCount();
for(int i=0; i<size; i++) {
contactsList.setItemChecked(i,isSelectAll);
}
}
private void removeContacts(){
int size = contactsList.getAdapter().getCount();
for(int i=0; i<size; i++) {
if(contactsList.isItemChecked(i)){
//TODO remove contacts
}
}
}
public void quitEditMode(){
isEditMode = false;
selectAll.setVisibility(View.GONE);
deselectAll.setVisibility(View.GONE);
delete.setVisibility(View.GONE);
edit.setVisibility(View.VISIBLE);
invalidate();
}
private void searchContacts() {
searchContacts(searchField.getText().toString());
}
@ -329,7 +425,7 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
return position;
}
public View getView(int position, View convertView, ViewGroup parent) {
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
Contact contact = null;
do {
@ -342,6 +438,8 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
view = mInflater.inflate(R.layout.contact_cell, parent, false);
}
CheckBox delete = (CheckBox) view.findViewById(R.id.delete);
TextView name = (TextView) view.findViewById(R.id.name);
name.setText(contact.getName());
@ -356,7 +454,7 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
layout.setPadding(0, 0, 0, margin);
}
ImageView icon = (ImageView) view.findViewById(R.id.icon);
ImageView icon = (ImageView) view.findViewById(R.id.contact_picture);
if (contact.getPhoto() != null) {
icon.setImageBitmap(contact.getPhoto());
} else if (contact.getPhotoUri() != null) {
@ -365,6 +463,23 @@ public class ContactsFragment extends Fragment implements OnClickListener, OnIte
icon.setImageResource(R.drawable.avatar);
}
if (isEditMode) {
delete.setVisibility(View.VISIBLE);
delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
contactsList.setItemChecked(position, b);
}
});
if(contactsList.isItemChecked(position)) {
delete.setChecked(true);
} else {
delete.setChecked(false);
}
} else {
delete.setVisibility(View.GONE);
}
ImageView friendStatus = (ImageView) view.findViewById(R.id.friendStatus);
LinphoneFriend[] friends = LinphoneManager.getLc().getFriendList();
if (!ContactsManager.getInstance().isContactPresenceDisabled() && friends != null) {

View file

@ -89,16 +89,17 @@ public class ContactsManager {
}
public void initializeSyncAccount(Context context, ContentResolver contentResolver) {
initializeContactManager(context,contentResolver);
AccountManager accountManager = (AccountManager) context.getSystemService(context.ACCOUNT_SERVICE);
Account[] accounts = accountManager.getAccountsByType(context.getPackageName());
if(accounts != null && accounts.length == 0) {
Account newAccount = new Account(context.getString(R.string.sync_account_name), context.getString(R.string.sync_account_type));
Account newAccount = new Account(context.getString(R.string.sync_account_name), context.getPackageName());
try {
accountManager.addAccountExplicitly(newAccount, null, null);
mAccount = newAccount;
} catch (Exception e) {
Log.w("Catch " + e);
mAccount = null;
}
} else {
@ -157,6 +158,19 @@ public class ContactsManager {
}
}
public void updateExistingContactPicture(ArrayList<ContentProviderOperation> ops, Contact contact, String path){
String select = ContactsContract.Data.CONTACT_ID + "=? AND " + ContactsContract.Data.MIMETYPE + "='" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE + "'";
String[] args =new String[]{String.valueOf(contact.getID())};
ops.add(ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI)
.withSelection(select, args)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID, path)
//.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO_FILE_ID, )
.build()
);
}
//Manage Linphone Friend if we cannot use Sip address
public boolean createNewFriend(Contact contact, String sipUri) {
if (!sipUri.startsWith("sip:")) {
@ -353,6 +367,22 @@ public class ContactsManager {
return null;
}
public Contact findContactWithAddress(LinphoneAddress address) {
String sipUri = address.asStringUriOnly();
if (sipUri.startsWith("sip:"))
sipUri = sipUri.substring(4);
for(Contact c: getAllContacts()){
for(String a: c.getNumbersOrAddresses()){
Log.w(a);
Log.w(address.asStringUriOnly());
if(a.equals(sipUri))
return c;
}
}
return null;
}
public Contact findContactWithAddress(ContentResolver contentResolver, LinphoneAddress address){
String sipUri = address.asStringUriOnly();
if (sipUri.startsWith("sip:"))

View file

@ -1,5 +1,7 @@
package org.linphone;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
@ -8,13 +10,27 @@ import org.linphone.core.LinphoneProxyConfig;
import org.linphone.mediastream.Version;
import org.linphone.mediastream.Log;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentProviderOperation;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.BitmapShader;
import android.graphics.Canvas;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.Shader;
import android.media.ExifInterface;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Parcelable;
import android.provider.ContactsContract;
import android.app.Fragment;
import android.provider.MediaStore;
import android.support.v4.content.CursorLoader;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
@ -30,9 +46,11 @@ import android.widget.TableLayout;
public class EditContactFragment extends Fragment {
private View view;
private ImageView back, edit, ok;
private ImageView addNumber, addSipAddress;
private ImageView addNumber, addSipAddress, contactPicture;
private EditText firstName, lastName;
private LayoutInflater inflater;
private Uri imageToUploadUri;
private static final int ADD_PHOTO = 1337;
private boolean isNewContact = true;
private Contact contact;
@ -181,14 +199,21 @@ public class EditContactFragment extends Fragment {
}
}
ImageView contactPicture = (ImageView) view.findViewById(R.id.contactPicture);
contactPicture = (ImageView) view.findViewById(R.id.contactPicture);
if (contact != null && contact.getPhotoUri() != null) {
InputStream input = Compatibility.getContactPictureInputStream(getActivity().getContentResolver(), contact.getID());
contactPicture.setImageBitmap(BitmapFactory.decodeStream(input));
} else {
//contactPicture.setImageResource(R.drawable.unknown_small);
contactPicture.setImageResource(R.drawable.avatar);
}
contactPicture.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
pickImage();
}
});
numbers = initNumbersFields(contact);
sipAddresses = initSipAddressFields(contact);
@ -224,6 +249,76 @@ public class EditContactFragment extends Fragment {
}
}
private void pickImage() {
List<Intent> cameraIntents = new ArrayList<Intent>();
Intent captureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
File file = new File(Environment.getExternalStorageDirectory(), getString(R.string.temp_photo_name_with_date).replace("%s", String.valueOf(System.currentTimeMillis())));
imageToUploadUri = Uri.fromFile(file);
captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, imageToUploadUri);
cameraIntents.add(captureIntent);
Intent galleryIntent = new Intent();
galleryIntent.setType("image/*");
galleryIntent.setAction(Intent.ACTION_PICK);
Intent chooserIntent = Intent.createChooser(galleryIntent, getString(R.string.image_picker_title));
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[]{}));
startActivityForResult(chooserIntent, ADD_PHOTO);
}
public String getRealPathFromURI(Uri contentUri) {
String[] proj = {MediaStore.Images.Media.DATA};
CursorLoader loader = new CursorLoader(getActivity(), contentUri, proj, null, null, null);
Cursor cursor = loader.loadInBackground();
if (cursor != null && cursor.moveToFirst()) {
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
String result = cursor.getString(column_index);
cursor.close();
return result;
}
return null;
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == ADD_PHOTO && resultCode == Activity.RESULT_OK) {
String filePicturePath = null;
if (data != null && data.getData() != null) {
filePicturePath = getRealPathFromURI(data.getData());
} else if (imageToUploadUri != null) {
filePicturePath = imageToUploadUri.getPath();
}
if (filePicturePath != null) {
int SIZE_SMALL = 256;
int COMPRESSOR_QUALITY = 100;
/*Bitmap bm = null;
int pixelsMax = SIZE_SMALL;
//Resize image
BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 1;
bm = BitmapFactory.decodeFile(filePicturePath,options);
if (bm != null) {
if (bm.getWidth() > bm.getHeight() && bm.getWidth() > pixelsMax) {
bm = Bitmap.createScaledBitmap(bm, 256, 256, false);
}
}
ByteArrayOutputStream bstream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG , 100, bstream);
byte[] bArray = bstream.toByteArray();
contactPicture.setImageBitmap(bm);*/
contactsManager.updateExistingContactPicture(ops, contact, filePicturePath);
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
private TableLayout initNumbersFields(final Contact contact) {
TableLayout controls = (TableLayout) view.findViewById(R.id.controls_numbers);
controls.removeAllViews();

View file

@ -224,6 +224,7 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
delete.setVisibility(View.VISIBLE);
isEditMode = true;
}
if (id == R.id.all_calls) {
allCalls.setEnabled(false);
allCallsSelected.setVisibility(View.VISIBLE);
@ -405,7 +406,7 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
holder = new ViewHolder();
holder.contact = (TextView) view.findViewById(R.id.sip_uri);
holder.detail = (ImageView) view.findViewById(R.id.detail);
holder.delete = (CheckBox) view.findViewById(R.id.delete);
holder.select = (CheckBox) view.findViewById(R.id.delete);
holder.callDirection = (ImageView) view.findViewById(R.id.icon);
holder.contactPicture = (ImageView) view.findViewById(R.id.contact_picture);
}
@ -475,8 +476,8 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
//view.setTag(sipUri);
if (isEditMode) {
holder.delete.setVisibility(View.VISIBLE);
holder.delete.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
holder.select.setVisibility(View.VISIBLE);
holder.select.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
historyList.setItemChecked(position, b);
@ -484,12 +485,12 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
});
holder.detail.setVisibility(View.GONE);
if(historyList.isItemChecked(position)) {
holder.delete.setChecked(true);
holder.select.setChecked(true);
} else {
holder.delete.setChecked(false);
holder.select.setChecked(false);
}
} else {
holder.delete.setVisibility(View.GONE);
holder.select.setVisibility(View.GONE);
holder.detail.setVisibility(View.VISIBLE);
holder.detail.setOnClickListener(new OnClickListener() {
@Override
@ -508,7 +509,7 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
static class ViewHolder {
TextView contact;
ImageView detail;
CheckBox delete;
CheckBox select;
ImageView callDirection;
ImageView contactPicture;
}

View file

@ -86,6 +86,7 @@ public class InCallActivity extends Activity implements OnClickListener {
private StatusFragment status;
private AudioCallFragment audioCallFragment;
private VideoCallFragment videoCallFragment;
private ConferenceCallFragment conferenceCallFragment;
private boolean isSpeakerEnabled = false, isMicMuted = false, isTransferAllowed, isAnimationDisabled;
private LinearLayout mControlsLayout;
private Numpad numpad;
@ -640,6 +641,12 @@ public class InCallActivity extends Activity implements OnClickListener {
setCallControlsVisibleAndRemoveCallbacks();
}
private void showConferenceView() {
LinphoneManager.startProximitySensorForActivity(InCallActivity.this);
replaceFragmentByConference();
displayConference();
}
private void showVideoView() {
if (!BluetoothManager.getInstance().isBluetoothHeadsetAvailable()) {
Log.w("Bluetooth not available, using speaker");
@ -653,6 +660,18 @@ public class InCallActivity extends Activity implements OnClickListener {
displayVideoCallControlsIfHidden();
}
private void replaceFragmentByConference() {
mControlsLayout.setVisibility(View.GONE);
switchCamera.setVisibility(View.INVISIBLE);
conferenceCallFragment = new ConferenceCallFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
transaction.replace(R.id.fragmentContainer, conferenceCallFragment);
try {
transaction.commitAllowingStateLoss();
} catch (Exception e) {
}
}
private void replaceFragmentVideoByAudio() {
audioCallFragment = new AudioCallFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
@ -763,6 +782,12 @@ public class InCallActivity extends Activity implements OnClickListener {
}
}
private void displayConference(){
mControlsLayout.setVisibility(View.VISIBLE);
callsList.setVisibility(View.GONE);
mActiveCallHeader.setVisibility(View.GONE);
}
public void displayVideoCallControlsIfHidden() {
if (mControlsLayout != null) {
if (mControlsLayout.getVisibility() != View.VISIBLE) {
@ -1033,7 +1058,7 @@ public class InCallActivity extends Activity implements OnClickListener {
@Override
public void onAnimationEnd(Animation animation) {
options.setBackgroundResource(R.drawable.options_alt);
options.setBackgroundResource(R.drawable.options_default);
if (isTransferAllowed) {
transfer.setVisibility(View.VISIBLE);
}
@ -1061,7 +1086,7 @@ public class InCallActivity extends Activity implements OnClickListener {
@Override
public void onAnimationEnd(Animation animation) {
addCall.setAnimation(null);
options.setBackgroundResource(R.drawable.options_alt);
options.setBackgroundResource(R.drawable.options_default);
addCall.setVisibility(View.VISIBLE);
if (isTransferAllowed) {
animation.setAnimationListener(new AnimationListener() {
@ -1194,6 +1219,8 @@ public class InCallActivity extends Activity implements OnClickListener {
if (isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) {
displayVideoCallControlsIfHidden();
} else if(isConferenceRunning) {
displayConference();
} else {
LinphoneManager.startProximitySensorForActivity(this);
setCallControlsVisibleAndRemoveCallbacks();
@ -1206,10 +1233,7 @@ public class InCallActivity extends Activity implements OnClickListener {
lc.addListener(mListener);
}
displayActiveCall(LinphoneManager.getLc().getCurrentCall());
if (LinphoneManager.getLc().getCalls().length > 1) {
refreshCallList(getResources());
}
handleViewIntent();
}
@ -1310,18 +1334,8 @@ public class InCallActivity extends Activity implements OnClickListener {
videoCallFragment = fragment;
}
private void displayConferenceHeader() {
LinearLayout conferenceHeader = (LinearLayout) inflater.inflate(R.layout.conference_header, container, false);
ImageView conferenceState = (ImageView) conferenceHeader.findViewById(R.id.conferenceStatus);
conferenceState.setOnClickListener(this);
if (LinphoneManager.getLc().isInConference()) {
conferenceState.setImageResource(R.drawable.pause);
} else {
conferenceState.setImageResource(R.drawable.pause);
}
callsList.addView(conferenceHeader);
public void bindConferenceFragment(ConferenceCallFragment fragment) {
conferenceCallFragment = fragment;
}
private void displayActiveCall(LinphoneCall call){
@ -1364,6 +1378,7 @@ public class InCallActivity extends Activity implements OnClickListener {
}
private void displayOtherCalls(Resources resources, LinphoneCall call, int index) {
Log.w("Display other calls");
String sipUri = call.getRemoteAddress().asStringUriOnly();
LinphoneAddress lAddress;
try {
@ -1499,12 +1514,23 @@ public class InCallActivity extends Activity implements OnClickListener {
}
public void refreshCallList(Resources resources) {
isConferenceRunning = LinphoneManager.getLc().isInConference();
if (isConferenceRunning) {
callsList.removeAllViews();
callsList.setVisibility(View.GONE);
showConferenceView();
return;
}
if(LinphoneManager.getLc().getCalls().length == 1) {
Log.w(LinphoneManager.getLc().getCalls()[0].getRemoteContact());
displayActiveCall(LinphoneManager.getLc().getCalls()[0]);
return;
}
Log.w("Plusieurs call");
if(callsList != null) {
callsList.setVisibility(View.VISIBLE);
callsList.removeAllViews();
int index = 0;
@ -1513,11 +1539,6 @@ public class InCallActivity extends Activity implements OnClickListener {
return;
}
isConferenceRunning = LinphoneManager.getLc().getConferenceSize() > 1;
if (isConferenceRunning) {
displayConferenceHeader();
index++;
}
for (LinphoneCall call : LinphoneManager.getLc().getCalls()) {
if (call != LinphoneManager.getLc().getCurrentCall()) {
displayOtherCalls(resources, call, index);

View file

@ -22,6 +22,7 @@ import static android.content.Intent.ACTION_MAIN;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Collection;
import java.util.List;
@ -48,8 +49,10 @@ import org.linphone.core.Reason;
import org.linphone.mediastream.Log;
import org.linphone.assistant.RemoteProvisioningLoginActivity;
import org.linphone.ui.AddressText;
import org.linphone.ui.LedPreference;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@ -67,6 +70,7 @@ import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Bundle;
import android.text.Layout;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
@ -80,10 +84,13 @@ import android.view.WindowManager;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TableLayout;
import android.widget.TextView;
import android.widget.Toast;
import android.support.v4.widget.DrawerLayout;
@ -102,7 +109,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private static LinphoneActivity instance;
//private StatusFragment statusFragment;
private StatusFragment statusFragment;
private TextView missedCalls, missedChats;
private LinearLayout menu, mark;
private RelativeLayout contacts, history, dialer, chat;
@ -140,7 +147,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
if (isTablet() && getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
} else if (!isTablet() && getRequestedOrientation() != ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
//setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
if (!LinphoneManager.isInstanciated()) {
@ -224,6 +231,8 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
displayCustomToast(getString(R.string.error_io_error), Toast.LENGTH_LONG);
}
}
//initAccounts();
}
@Override
@ -290,12 +299,18 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
mDrawerListB.setAdapter(new ArrayAdapter<String>(this,R.layout.drawer_list_item, mParams));
mDrawerListB.setOnItemClickListener(new DrawerItemClickListener());
ImageView menubar = (ImageView) findViewById(R.id.menu_bar);
initAccounts();
ImageView menubar = (ImageView) findViewById(R.id.menu_icon);
menubar.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
if(mDrawerLayout.isDrawerVisible(Gravity.LEFT)){
mDrawerLayout.closeDrawer(mDrawerList);
} else {
mDrawerLayout.openDrawer(mDrawerList);
}
}
});
exitLayout = (RelativeLayout) findViewById(R.id.exitLayout);
@ -306,76 +321,168 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
});
headerLayout = (RelativeLayout) findViewById(R.id.headerLayout);
LinphoneProxyConfig proxy = LinphoneManager.getLc().getDefaultProxyConfig();
if(proxy != null){
try {
LinphoneAddress identity = LinphoneCoreFactory.instance().createLinphoneAddress(proxy.getIdentity());
TextView address = (TextView) findViewById(R.id.address);
address.setText(identity.asStringUriOnly());
TextView displayName = (TextView) findViewById(R.id.display_name);
if(identity.getDisplayName() != null)
displayName.setText(identity.getDisplayName());
else
displayName.setText(identity.getUserName());
} catch (Exception e) {
e.printStackTrace();
}
} else {
headerLayout.setVisibility(View.GONE);
}
headerLayout.setOnClickListener(new OnClickListener() {
public void initAccounts() {
ListView accounts = (ListView) findViewById(R.id.accounts_list);
//accounts.setVisibility(View.VISIBLE);
accounts.setAdapter(new AccountsListAdapter());
accounts.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onClick(View view) {
displayAccountSettings(0);
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Log.w("Tag " + i);
int position = (int) view.getTag();
displayAccountSettings(position);
mDrawerLayout.closeDrawer(mDrawerList);
}
});
}
private int getStatusIconResource(LinphoneCore.RegistrationState state, boolean isDefaultAccount) {
try {
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
boolean defaultAccountConnected = (isDefaultAccount && lc != null && lc.getDefaultProxyConfig() != null && lc.getDefaultProxyConfig().isRegistered()) || !isDefaultAccount;
if (state == RegistrationState.RegistrationOk && defaultAccountConnected) {
return R.drawable.led_connected;
} else if (state == RegistrationState.RegistrationProgress) {
return R.drawable.led_inprogress;
} else if (state == RegistrationState.RegistrationFailed) {
return R.drawable.led_error;
} else {
return R.drawable.led_disconnected;
}
} catch (Exception e) {
e.printStackTrace();
}
return R.drawable.led_disconnected;
}
class AccountsListAdapter extends BaseAdapter {
List<LinphoneProxyConfig> proxy_list;
AccountsListAdapter() {
proxy_list = new ArrayList<LinphoneProxyConfig>();
refresh();
}
public void refresh(){
proxy_list = new ArrayList<LinphoneProxyConfig>();
proxy_list.add(LinphoneManager.getLc().getDefaultProxyConfig());
for(LinphoneProxyConfig proxyConfig : LinphoneManager.getLc().getProxyConfigList()){
if(proxyConfig != LinphoneManager.getLc().getDefaultProxyConfig()){
proxy_list.add(proxyConfig);
}
}
}
public int getCount() {
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (proxy_list != null) {
return proxy_list.size();
} else {
return 0;
}
}
public Object getItem(int position) {
return proxy_list.get(position);
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
refresh();
boolean isDefaultAccount = false;
View view = null;
Log.w(position);
LinphoneProxyConfig lpc = (LinphoneProxyConfig) getItem(position);
//if (convertView != null) {
// view = convertView;
//} else {
if(lpc == LinphoneManager.getLc().getDefaultProxyConfig()) {
isDefaultAccount = true;
view = getLayoutInflater().inflate(R.layout.main_account, parent, false);
Log.w("Default account");
} else {
view = getLayoutInflater().inflate(R.layout.accounts, parent, false);
}
//}
ImageView status = (ImageView) view.findViewById(R.id.statusLed);
TextView address = (TextView) view.findViewById(R.id.address);
String sipAddress = (lpc.getIdentity() != null && lpc.getIdentity().startsWith("sip:")) ? lpc.getIdentity().split("sip:")[1] : lpc.getIdentity();
//identity.setText(sipAddress);
try {
LinphoneAddress identity = LinphoneCoreFactory.instance().createLinphoneAddress(lpc.getIdentity());
address.setText(identity.asStringUriOnly());
if(isDefaultAccount) {
TextView displayName = (TextView) findViewById(R.id.display_name);
if (identity.getDisplayName() != null)
displayName.setText(identity.getDisplayName());
else
displayName.setText(identity.getUserName());
}
} catch (Exception e) {
e.printStackTrace();
}
int nbAccounts = LinphonePreferences.instance().getAccountCount();
int accountIndex = 0;
for (int i = 0; i < nbAccounts; i++) {
String username = LinphonePreferences.instance().getAccountUsername(i);
String domain = LinphonePreferences.instance().getAccountDomain(i);
String id = username + "@" + domain;
if (id.equals(address)) {
accountIndex = i;
view.setTag(accountIndex);
break;
}
}
status.setImageResource(getStatusIconResource(lpc.getState(),isDefaultAccount));
view.setTag(accountIndex);
return view;
}
}
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
selectItem(view,position);
}
}
private void selectItem(int position) {
// update the main content by replacing fragments
/*Fragment fragment = new PlanetFragment();
Bundle args = new Bundle();
args.putInt(PlanetFragment.ARG_PLANET_NUMBER, position);
fragment.setArguments(args);
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();
// update selected item and title, then close the drawer*/
Log.w("position " + position);
switch(position) {
case 0:
break;
case 1:
displaySettings();
break;
case 2:
displayAssistant();
break;
case 3:
displayAbout();
break;
default:
break;
}
private void selectItem(View view,int position) {
Log.w(mDrawerListB.getAdapter().getItem(position).toString());
mDrawerListB.setItemChecked(position, true);
//
if(mDrawerListB.getAdapter().getItem(position).toString().equals("Settings")){
displaySettings();
}
if(mDrawerListB.getAdapter().getItem(position).toString().equals("About")){
displayAbout();
}
if(mDrawerListB.getAdapter().getItem(position).toString().equals("Assistant")){
displayAssistant();
}
mDrawerLayout.closeDrawer(mDrawerList);
}
@ -407,7 +514,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private void initButtons() {
menu = (LinearLayout) findViewById(R.id.menu);
mark = (LinearLayout) findViewById(R.id.mark);
history = (RelativeLayout) findViewById(R.id.history);
history.setOnClickListener(this);
@ -423,16 +529,6 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
dialer_selected = (RelativeLayout) findViewById(R.id.dialer_select);
chat_selected = (RelativeLayout) findViewById(R.id.chat_select);
if (getResources().getBoolean(R.bool.replace_chat_by_about)) {
chat.setVisibility(View.GONE);
chat.setOnClickListener(null);
findViewById(R.id.completeChat).setVisibility(View.GONE);
}
if (getResources().getBoolean(R.bool.replace_settings_by_about)) {
//settings.setVisibility(View.GONE);
//settings.setOnClickListener(null);
}
missedCalls = (TextView) findViewById(R.id.missedCalls);
missedChats = (TextView) findViewById(R.id.missedChats);
}
@ -767,6 +863,11 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
return;
}
if(sipUri == null) {
Intent intent = new Intent(this, ChatActivity.class);
startOrientationSensor();
startActivityForResult(intent, CHAT_ACTIVITY);
} else {
LinphoneAddress lAddress;
try {
lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri);
@ -784,8 +885,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
thumbnailUri = contact.getThumbnailUri().toString();
}
if (isTablet()){
if (currentFragment == FragmentsAvailable.CHATLIST || currentFragment == FragmentsAvailable.CHAT){
if (isTablet()){
Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2);
if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.CHAT) {
ChatFragment chatFragment = (ChatFragment) fragment2;
@ -801,28 +903,25 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
changeCurrentFragment(FragmentsAvailable.CHAT, extras);
}
} else {
changeCurrentFragment(FragmentsAvailable.CHATLIST, null);
displayChat(sipUri);
Bundle extras = new Bundle();
extras.putString("SipUri", sipUri);
if (lAddress.getDisplayName() != null) {
extras.putString("DisplayName", contact.getName());
extras.putString("PictureUri", pictureUri);
extras.putString("ThumbnailUri", thumbnailUri);
}
changeCurrentFragment(FragmentsAvailable.CHAT, extras);
}
if (messageListFragment != null && messageListFragment.isVisible()) {
((ChatListFragment) messageListFragment).refresh();
}
} else {
Intent intent = new Intent(this, ChatActivity.class);
intent.putExtra("SipUri", sipUri);
if (contact != null) {
intent.putExtra("DisplayName", contact.getName());
intent.putExtra("PictureUri", pictureUri);
intent.putExtra("ThumbnailUri", thumbnailUri);
}
startOrientationSensor();
startActivityForResult(intent, CHAT_ACTIVITY);
}
LinphoneService.instance().resetMessageNotifCount();
LinphoneService.instance().removeMessageNotification();
displayMissedChats(getChatStorage().getUnreadMessageCount());
}
}
@Override
public void onClick(View v) {
@ -906,7 +1005,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
public void updateStatusFragment(StatusFragment fragment) {
//statusFragment = fragment;
statusFragment = fragment;
}
public void displaySettings() {
@ -928,8 +1027,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
public StatusFragment getStatusFragment() {
//return statusFragment;
return null;
return statusFragment;
}
public List<String> getChatList() {
@ -1028,10 +1126,12 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
public Dialog displayDialog(String text){
Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
Drawable d = new ColorDrawable(Color.BLACK);
d.setAlpha(0);
dialog.getWindow().setBackgroundDrawable(d);
Drawable d = new ColorDrawable(R.color.colorC);
d.setAlpha(200);
dialog.setContentView(R.layout.dialog);
dialog.getWindow().setLayout(WindowManager.LayoutParams.MATCH_PARENT,WindowManager.LayoutParams.MATCH_PARENT);
dialog.getWindow().setBackgroundDrawable(d);
TextView customText = (TextView) dialog.findViewById(R.id.customText);
customText.setText(text);
return dialog;

View file

@ -168,6 +168,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
mPauseSoundFile = basePath + "/toy_mono.wav";
mChatDatabaseFile = basePath + "/linphone-history.db";
mErrorToneFile = basePath + "/error.wav";
mConfigFile = basePath + "/configrc";
mPrefs = LinphonePreferences.instance();
mAudioManager = ((AudioManager) c.getSystemService(Context.AUDIO_SERVICE));
@ -190,6 +191,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
private final String mPauseSoundFile;
private final String mChatDatabaseFile;
private final String mErrorToneFile;
private final String mConfigFile;
private ByteArrayInputStream mUploadingImageStream;
private Timer mTimer;
@ -221,6 +223,21 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
routeAudioToSpeakerHelper(false);
}
public synchronized final void destroyLinphoneCore(Context c) {
BluetoothManager.getInstance().destroy();
try {
mTimer.cancel();
mLc.destroy();
}
catch (RuntimeException e) {
e.printStackTrace();
}
finally {
mServiceContext.unregisterReceiver(instance.mKeepAliveReceiver);
mLc = null;
}
}
public synchronized static final LinphoneManager createAndStart(Context c) {
if (instance != null)
throw new RuntimeException("Linphone Manager is already initialized");
@ -284,9 +301,9 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
mUploadPendingFileMessage = null;
mUploadingImageStream = null;
} else {
File file = new File(Environment.getExternalStorageDirectory(), msg.getFileTransferInformation().getName());
File file = new File(Environment.getExternalStorageDirectory(), msg.getAppData());
try {
String url = MediaStore.Images.Media.insertImage(getContext().getContentResolver(), file.getPath(), msg.getFileTransferInformation().getName(), null);
String url = MediaStore.Images.Media.insertImage(getContext().getContentResolver(), file.getPath(), file.getName(), null);
msg.setAppData(url);
file.delete();
} catch (FileNotFoundException e) {
@ -550,6 +567,11 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
}
}
public void resetLinphoneCore(Context c){
destroyLinphoneCore(c);
startLibLinphone(c);
}
private synchronized void startLibLinphone(Context c) {
try {
copyAssetsFromPackage();
@ -653,8 +675,8 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
if (Version.sdkAboveOrEqual(Version.API11_HONEYCOMB_30)) {
BluetoothManager.getInstance().initBluetooth();
}
resetCameraFromPreferences();
resetCameraFromPreferences();
mLc.setFileTransferServer(LinphonePreferences.instance().getSharingPictureServerUrl());
}
@ -689,6 +711,17 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag
lInputStream.close();
}
public void loadConfig(int config_rc){
try {
copyIfNotExist(config_rc, mConfigFile);
} catch (Exception e){
Log.w(e);
}
LinphonePreferences.instance().setRemoteProvisioningUrl("file://" + mConfigFile);
getLc().getConfig().setInt("misc","transient_provisioning",1);
}
public boolean detectVideoCodec(String mime) {
for (PayloadType videoCodec : mLc.getVideoCodecs()) {
if (mime.equals(videoCodec.getMime())) return true;

View file

@ -289,7 +289,7 @@ public final class LinphoneService extends Service {
mNM.cancel(INCALL_NOTIF_ID);
return;
case INCALL:
inconId = R.drawable.conf_unhook;
inconId = R.drawable.topbar_call_notification;
notificationTextId = R.string.incall_notif_active;
break;
case PAUSE:
@ -321,7 +321,7 @@ public final class LinphoneService extends Service {
try {
bm = MediaStore.Images.Media.getBitmap(getContentResolver(), pictureUri);
} catch (Exception e) {
bm = BitmapFactory.decodeResource(getResources(), R.drawable.unknown_small);
bm = BitmapFactory.decodeResource(getResources(), R.drawable.avatar);
}
String name = address.getDisplayName() == null ? address.getUserName() : address.getDisplayName();
mIncallNotif = Compatibility.createInCallNotification(getApplicationContext(), mNotificationTitle, getString(notificationTextId), inconId, bm, name, mNotifContentIntent);

View file

@ -159,32 +159,53 @@ public final class LinphoneUtils {
}
public static void setImagePictureFromUri(Context c, ImageView view, Uri uri, Uri tUri, int notFoundResource) {
public static void setImagePictureFromUri(Context c, ImageView view, Uri uri, Uri tUri) {
if (uri == null) {
view.setImageResource(notFoundResource);
view.setImageResource(R.drawable.avatar);
return;
}
if (uri.getScheme().startsWith("http")) {
Bitmap bm = downloadBitmap(uri);
if (bm == null) view.setImageResource(notFoundResource);
if (bm == null) view.setImageResource(R.drawable.avatar);
view.setImageBitmap(bm);
} else {
if (Version.sdkAboveOrEqual(Version.API06_ECLAIR_201)) {
Bitmap bm = null;
try {
bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(),uri);
} catch (IOException e) {
if(tUri != null){
try {
bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(),tUri);
} catch (IOException ie) {
view.setImageURI(tUri);
}
}
}
if(bm != null) {
view.setImageBitmap(bm);
}
}
}
public static void setThumbnailPictureFromUri(Context c, ImageView view, Uri tUri) {
if (tUri == null) {
view.setImageResource(R.drawable.avatar);
return;
}
if (tUri.getScheme().startsWith("http")) {
Bitmap bm = downloadBitmap(tUri);
if (bm == null) view.setImageResource(R.drawable.avatar);
view.setImageBitmap(bm);
} else {
@SuppressWarnings("deprecation")
Bitmap bitmap = android.provider.Contacts.People.loadContactPhoto(c, uri, notFoundResource, null);
view.setImageBitmap(bitmap);
Bitmap bm = null;
try {
bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(),tUri);
} catch (IOException e) {
view.setImageURI(tUri);
}
if(bm != null) {
view.setImageBitmap(bm);
}
}
}

View file

@ -22,6 +22,7 @@ import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import org.linphone.assistant.AssistantActivity;
import org.linphone.core.LinphoneCall;
import org.linphone.core.LinphoneCallParams;
import org.linphone.core.LinphoneCallStats;
@ -62,7 +63,7 @@ public class StatusFragment extends Fragment {
private Handler mHandler = new Handler();
private Handler refreshHandler = new Handler();
private TextView statusText, exit, voicemailCount;
private ImageView statusLed, callQuality, encryption, background;
private ImageView statusLed, callQuality, encryption, menu;
// private LinearLayout allAccountsLed;
private Runnable mCallQualityUpdater;
private boolean isInCall, isAttached = false;
@ -79,7 +80,7 @@ public class StatusFragment extends Fragment {
statusLed = (ImageView) view.findViewById(R.id.statusLed);
callQuality = (ImageView) view.findViewById(R.id.callQuality);
encryption = (ImageView) view.findViewById(R.id.encryption);
background = (ImageView) view.findViewById(R.id.background);
menu = (ImageView) view.findViewById(R.id.menu_icon);
// allAccountsLed = (LinearLayout) view.findViewById(R.id.moreStatusLed);
voicemailCount = (TextView) view.findViewById(R.id.voicemailCount);
@ -106,6 +107,11 @@ public class StatusFragment extends Fragment {
return;
}
if(lc.getProxyConfigList() == null){
statusLed.setVisibility(View.INVISIBLE);
statusText.setText("");
}
if (lc.getDefaultProxyConfig() != null && lc.getDefaultProxyConfig().equals(proxy)) {
statusLed.setImageResource(getStatusIconResource(state, true));
statusText.setText(getStatusIconText(state));
@ -174,6 +180,12 @@ public class StatusFragment extends Fragment {
} else if (activity instanceof InCallActivity) {
((InCallActivity) activity).updateStatusFragment(this);
isInCall = true;
} else if (activity instanceof ChatActivity) {
((ChatActivity) activity).updateStatusFragment(this);
isInCall = false;
} else if (activity instanceof AssistantActivity) {
((AssistantActivity) activity).updateStatusFragment(this);
isInCall = false;
}
}
@ -210,8 +222,17 @@ public class StatusFragment extends Fragment {
} else if (!isInCall) {
voicemailCount.setVisibility(View.VISIBLE);
}
if(LinphoneManager.getLc().getProxyConfigList().length == 0){
statusLed.setVisibility(View.INVISIBLE);
statusText.setText("");
}
}
}
public void enableLeftMenu(boolean enabled) {
menu.setEnabled(enabled);
}
// private void setMiniLedsForEachAccount() {
// if (allAccountsLed == null)
@ -338,18 +359,13 @@ public class StatusFragment extends Fragment {
statusText.setVisibility(View.GONE);
encryption.setVisibility(View.VISIBLE);
exit.setVisibility(View.GONE);
// We are obviously connected
statusLed.setImageResource(R.drawable.led_connected);
statusText.setText(getString(R.string.status_connected));
} else {
statusText.setVisibility(View.VISIBLE);
background.setVisibility(View.VISIBLE);
encryption.setVisibility(View.GONE);
if (getResources().getBoolean(R.bool.exit_button_on_dialer))
exit.setVisibility(View.VISIBLE);
}
}
@ -379,9 +395,9 @@ public class StatusFragment extends Fragment {
MediaEncryption mediaEncryption = call.getCurrentParamsCopy().getMediaEncryption();
if (isVideoEnabled) {
background.setVisibility(View.GONE);
//background.setVisibility(View.GONE);
} else {
background.setVisibility(View.VISIBLE);
//background.setVisibility(View.VISIBLE);
}
if (mediaEncryption == MediaEncryption.SRTP || (mediaEncryption == MediaEncryption.ZRTP && call.isAuthenticationTokenVerified()) || mediaEncryption == MediaEncryption.DTLS) {
@ -439,7 +455,7 @@ public class StatusFragment extends Fragment {
return;
}
mTimer = new Timer();
/* mTimer = new Timer();
mTask = new TimerTask() {
@Override
public void run() {
@ -503,136 +519,9 @@ public class StatusFragment extends Fragment {
});
}
};
mTimer.scheduleAtFixedRate(mTask, 0, 1000);
mTimer.scheduleAtFixedRate(mTask, 0, 1000);*/
}
class AccountsListAdapter extends BaseAdapter {
private List<CheckBox> checkboxes;
AccountsListAdapter() {
checkboxes = new ArrayList<CheckBox>();
}
private OnClickListener defaultListener = new OnClickListener() {
@Override
public void onClick(View v) {
CheckBox checkBox = (CheckBox) v;
if (checkBox.isChecked()) {
String tag = (String) checkBox.getTag();
if(tag.startsWith("sip:")) {
tag = tag.substring(4);
}
String sipAddress = tag.split(":")[0];
int accountPosition = Integer.parseInt(tag.split(":")[1]);
int nbAccounts = LinphonePreferences.instance().getAccountCount();
int accountIndex = 0;
for (int i = 0; i < nbAccounts; i++)
{
String username = LinphonePreferences.instance().getAccountUsername(i);
String domain = LinphonePreferences.instance().getAccountDomain(i);
String identity = username + "@" + domain;
if (identity.equals(sipAddress)) {
accountIndex = i;
break;
}
}
LinphonePreferences.instance().setDefaultAccount(accountIndex);
for (CheckBox cb : checkboxes) {
cb.setChecked(false);
cb.setEnabled(true);
}
checkBox.setChecked(true);
checkBox.setEnabled(false);
LinphoneCore lc = LinphoneManager.getLc();
lc.setDefaultProxyConfig((LinphoneProxyConfig) getItem(accountPosition));
if (lc.isNetworkReachable()) {
lc.refreshRegisters();
}
}
}
};
public int getCount() {
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (lc != null) {
return lc.getProxyConfigList().length;
} else {
return 0;
}
}
public Object getItem(int position) {
return LinphoneManager.getLc().getProxyConfigList()[position];
}
public long getItemId(int position) {
return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView != null) {
view = convertView;
} else {
view = LayoutInflater.from(getActivity()).inflate(R.layout.accounts, parent, false);
}
LinphoneProxyConfig lpc = (LinphoneProxyConfig) getItem(position);
ImageView status = (ImageView) view.findViewById(R.id.State);
TextView identity = (TextView) view.findViewById(R.id.Identity);
String sipAddress = (lpc.getIdentity() != null && lpc.getIdentity().startsWith("sip:")) ? lpc.getIdentity().split("sip:")[1] : lpc.getIdentity();
identity.setText(sipAddress);
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LinphoneManager.getLc().refreshRegisters();
}
});
CheckBox isDefault = (CheckBox) view.findViewById(R.id.Default);
checkboxes.add(isDefault);
isDefault.setTag(sipAddress + ":" + position);
isDefault.setChecked(false);
isDefault.setEnabled(true);
int nbAccounts = LinphonePreferences.instance().getAccountCount();
int accountIndex = 0;
for (int i = 0; i < nbAccounts; i++)
{
String username = LinphonePreferences.instance().getAccountUsername(i);
String domain = LinphonePreferences.instance().getAccountDomain(i);
String id = username + "@" + domain;
if (id.equals(sipAddress)) {
accountIndex = i;
break;
}
}
// Force led if account is disabled
if (!LinphonePreferences.instance().isAccountEnabled(accountIndex)) {
status.setImageResource(getStatusIconResource(RegistrationState.RegistrationNone, false));
} else {
if (LinphonePreferences.instance().getDefaultAccountIndex() == accountIndex) {
isDefault.setChecked(true);
isDefault.setEnabled(false);
status.setImageResource(getStatusIconResource(lpc.getState(), true));
} else {
status.setImageResource(getStatusIconResource(lpc.getState(), false));
}
}
isDefault.setOnClickListener(defaultListener);
return view;
}
}
}

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