diff --git a/.gitmodules b/.gitmodules
index 366481017..d7a3256b5 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -101,3 +101,6 @@
[submodule "submodules/externals/vo-amrwbenc"]
path = submodules/externals/vo-amrwbenc
url = git://git.linphone.org/vo-amrwbenc.git
+[submodule "submodules/externals/codec2"]
+ path = submodules/externals/codec2
+ url = git://git.linphone.org/codec2
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 6d9035ed2..988b7fa32 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -247,7 +247,6 @@
الشبكة
استخدم WiFi فقط
- خادم STUN
تشغيل ICE
تشغيل UPnP
استخدم منافذ عشوائية
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index bb698323b..1de2040ab 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -73,6 +73,9 @@
Ihr Konto wurde noch nicht überprüft.
Ihr Konto wurde überprüft.
Falscher Benutzername oder Passwort
+ Sind Sie mit dem Herunterladen des OpenH264-Videocodecs, bereitgestellt von Cisco Systems, Inc., einverstanden?
+ OpenH264-Videocodec, bereitgestellt von Cisco Systems, Inc., wird heruntergeladen.
+ OpenH264-Videocodec, bereitgestellt von Cisco Systems, Inc., heruntergeladen.
Es ist ein Fehler aufgetreten, versuchen Sie es später nochmal
Server nicht erreichbar, überprüfen Sie Ihre Netzwerkverbindung.
Der Benutzername wird bereits verwendet.
@@ -100,6 +103,7 @@
Telefonnummer
Vorname
Nachname
+ Organisation
Keine Gespräche
Möchten Sie das ausgewählte Gespräch löschen?
@@ -246,6 +250,8 @@
Codecs
Anruf
+ Geräteklingelton verwenden
+ Eingehende Anrufe automatisch beantworten
RFC2833 DTMFs senden
SIP INFO DTMFs senden
Sprachnachricht-URI
@@ -260,8 +266,8 @@
Netzwerk
Nur WiFi verwenden
- Stun-Server
ICE aktivieren
+ TURN aktivieren
UPNP aktivieren
Zufällige Ports verwenden
Zu benutzender SIP-Port
@@ -281,6 +287,7 @@
Beim Einschalten starten
Auflegen bei eingehendem Anruf (in Sekunden)
Fernbereitstellung
+ Android-App-Einstellungen
Primäres Konto
Anzeigename
Benutzername
@@ -347,6 +354,7 @@
Auswahl löschen
Vorname
Nachname
+ Organisation
Zurück zum Anruf
Datei senden
Nachricht
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index f0b79081c..a0da56384 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -150,7 +150,6 @@
Chat
Red
- Servidor STUN
Activar ICE
Usar puertos aleatorios
Puerto SIP a usar
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index cef47c494..69c54a224 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -244,7 +244,6 @@
Verkko
Käytä vain wifiä
- Stun-palvelin eli \'osoitteenmuunoksen takaisin haku\'-palvelin
Salli ICE
Salli UPNP
Käytä satunnaista porttia
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 4dc80e8ca..5aa8c3d23 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -74,6 +74,9 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Votre compte n\'a pas encore été validé.
Votre compte à été validé.
Nom d\'utilisateur ou mot de passe invalide
+ Voulez-vous télécharger le codec vidéo OpenH264 fourni par Cisco Systems, Inc. ?
+ Téléchargement du codec vidéo OpenH264 fourni par Cisco Systems, Inc.
+ Téléchargement du codec vidéo OpenH264 fourni par Cisco Systems, Inc effectué.
Une erreur est survenue, réessayez plus tard.
Serveur indisponible, veuillez vérifier votre connexion réseau.
Ce nom d\'utilisateur est déjà pris.
@@ -101,6 +104,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Numéro de téléphone
Prénom
Nom
+ Société
Aucune conversation
Voulez-vous supprimer la discussion sélectionnée ?
@@ -154,6 +158,8 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Appel vidéo en cours
démarré
%i messages non lus
+ Appel manqué
+ %i appels manqués
Attention : le service n\'est pas prêt
Erreur
@@ -225,6 +231,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Annulateur d\'écho
Supprime l\'écho entendu de l\'autre côté
Calibration de l\'annulateur d\'écho
+ Tester l\'écho
Calibration…
Calibré en %s ms
Pas d\'écho
@@ -264,8 +271,11 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Réseau
Utiliser WiFi uniquement
- Serveur Stun
+ Serveur STUN / TURN
Activer ICE
+ Activer TURN
+ Identifiant STUN / TURN (optionnel)
+ Mot de passe STUN / TURN (optionnel)
Activer UPNP
Utiliser des ports aléatoires
Port SIP à utiliser si port aléatoire désactivé
@@ -285,6 +295,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Démarrer au lancement du téléphone
Ignorer les appels entrants après (en secondes)
Configuration distante
+ Infos appli Android
Compte principal
Nom d\'affichage
Nom d\'utilisateur
@@ -351,6 +362,7 @@ Lorsque cela est fait, cliquez sur le bouton pour continuer.
Supprimer la sélection
Prénom
Nom
+ Société
Retour à l\'appel
Envoi d\'un fichier
Message
diff --git a/res/values-he/strings.xml b/res/values-he/strings.xml
index e5cd6517f..7092176ea 100644
--- a/res/values-he/strings.xml
+++ b/res/values-he/strings.xml
@@ -71,7 +71,6 @@
שיחה
רשת
- שרת Stun
אפשר ICE
אפשר UPNP
הצפנת מדיה
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 112d9524b..f58665a85 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -243,7 +243,6 @@
ネットワーク
WiFiのみ
- Stunサーバー
ICEを有効にする
UPNPを使う
ランダムポートを使用する
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index d113654d2..9551dd30f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -99,7 +99,6 @@
Chat
Netwerk
- Stun-server
ICE inschakelen
UPNP inschakelen
Willekeurige poorten gebruiken
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
new file mode 100644
index 000000000..1a184aa86
--- /dev/null
+++ b/res/values-pl/strings.xml
@@ -0,0 +1,364 @@
+
+
+
+ Linphone
+ Linphone Service
+ Linphone
+ Linphone
+ Uruchamianie
+ %s zarejestrowany
+ %s nie udało się zarejestrować
+
+ Linphone Android %s
+ Linphone Core %s
+ GNU General Public License V2\n © 2010-2016 Belledonne Communications
+ www.linphone.org
+ kontakt linphone
+ EEE, d MMM
+ yyyy/MM/dd - HH:mm -
+ dd/MM, HH:mm
+ dd/MM
+ HH:mm
+
+ Nazwa użytkownika
+ Nazwa wyświetlana
+ Hasło
+ Potwierdź hasło
+ Domena
+ URL
+ Email
+ Czy na pewno chcesz skasować dokonany wybór?
+ Usuń
+ Spróbuj ponownie
+ Anuluj
+ Akceptuj
+ Kontynuuj
+ O nas
+ Zaprzeczać
+ Konto nie zostało skonfigurowane
+ Szukaj
+ Wyjście
+ Przychodzące
+ Nieodebrane
+ Ustawienia
+ Połączenie
+ Utracone
+ Konferencja
+
+ libre klient SIP
+
+ Witam
+ Asystent
+ Stwórz konto
+ Zakończ konfigurację
+ Konto zostało utworzone. Proszę sprawdzić pocztę, aby zweryfikować konto. Po weryfikacji proszę wrócić tutaj i kliknąć przycisk.
+ Ten asystent pomoże Ci używać konta połączeń SIP.
+ Wprowadź swoją nazwę użytkownika i hasło konta Linphone
+ Wprowadź swoją nazwę użytkownika i hasło w domenie SIP
+ Proszę podać swoje zastrzeganie URL
+ Transport
+ Użyj konta Linphone
+ Użyj konta SIP
+ Pobierz zdalną konfigurację
+ 1/2
+ 2/2
+ Wyświetl nazwę (opcjonalnie)
+ Skonfiguruj konto Linphone
+ Skonfiguruj konto SIP
+ Pobierz zdalną konfigurację
+ Pobierz i zastosuj
+ Login
+ Anulacja kalibracji echo w trakcie
+ Podaj login
+ Twoje konto nie zostało jeszcze zatwierdzone.
+ Twoje konto zostało zatwierdzone.
+ Niepoprawna nazwa użytkownika lub hasło
+ Czy zgadzają się Państwo na pobranie OpenH264 Video Codec dostarczonego przez Cisco Systems, Inc.?
+ Pobieranie OpenH264 Video Codec dostarczane przez Cisco Systems, Inc.
+ OpenH264 Video Codec dostarczane przez Cisco Systems, Inc. Zostało pobrane.
+ Wystąpił błąd, spróbuj ponownie później.
+ Serwer niedostępny, sprawdź swoje połączenie sieciowe.
+ Nazwa użytkownika zajęta.
+ Twoja nazwa użytkownika jest nieprawidłowa.
+ Twój email jest niepoprawny.
+ Twoje hasło jest nieprawidłowe
+ Hasła nie pasują do siebie.
+ Twoja nazwa użytkownika będzie %s.\r\n\r\nIt może różnić się od danych wejściowych w celu dopasowania wymagań. \ Czy akceptujesz?
+ Podaj swój login i hasło
+ Zapomniałeś hasła ?
+
+ Wprowadź numer lub adres
+
+ Brak połączeń w historii
+ Brak nieodebranego połączenia w historii
+ Czy chcesz usunąć zaznaczony rejestr połączeń?
+ Dzisiaj
+ Wczoraj
+
+ Brak kontaktu w książce adresowej.
+ Brak kontaktu SIP w książce adresowej.
+ Czy chcesz usunąć wybrane kontakty?
+ Czy chcesz usunąć wybrany kontakt?
+ Adres SIP
+ Numer telefonu
+ Imię
+ Nazwisko
+ Organizacja
+
+ Brak rozmów
+ Czy chcesz usunąć wybraną rozmowę?
+ Czy chcesz usunąć zaznaczoną wiadomość?
+ Zdalne pisanie ...
+ Mały
+ Średni
+ Duży
+ Rzeczywisty rozmiar
+ Tekst skopiowany do schowka
+ Kopiowanie tekstu
+ Wybierz źródło
+ Obraz zapisany
+ Błąd, obraz nie został zapisany
+ Proszę czekać...
+ Przetwarzania obrazu, może potrwać nawet do kilku sekund w zależności od rozmiaru pliku
+
+ Zarejestrowany
+ Nie zarejestrowany
+ Rejestracja w trakcie
+ Rejestracja nie powiodła się
+ Nieprzeczytane wiadomości
+
+ Asystent
+ Ustawienia
+ O nas
+ Zamknij
+
+ Połączenie przychodzące
+ Połączenia wychodzące
+ Twój rozmówca chciałby włączyć wideo
+ Brak aktywnego połączenia
+ Twój rozmówca przerwał połączenie
+ Wystąpił błąd podczas odebrania
+ Znak ZRTP %s\n należy zaakceptować tylko jeśli mają ten sam znak, jak rozmówcy
+ Nieznany
+ Audio
+ Wideo
+ Codec:
+ Prześlij przepustowość:
+ Pobierz przepustowość:
+ Łączność ICE:
+ Rozmiar filmu:
+ Połączenie
+
+ Wyślij rejestr
+ Resetuj rejestr
+
+ Rozmowa audio w toku
+ Pauza rozmowy w toku
+ Przechwytywanie wideo rozmowy w toku
+ Rozpoczęty
+ %i nieprzeczytane wiadomości
+
+ Ostrzeżenie: usługa nie jest gotowa
+ Błąd
+ Nie można zbudować adresu docelowego z %s
+ Nieznany błąd
+ Spadek połaczeń
+ Użytkownik nie znaleziony
+ Parametry nośników niekompatybilne
+ Twój rozmówca ma niską przepustowość, nie można uruchomić wideo
+ Sieć jest niedostępna
+ Złe poświadczenia
+ Nieautoryzowany
+ Błąd sieci
+ Pobieranie nie udane. Proszę sprawdzić swoje połączenie sieciowe lub spróbuj ponownie później.
+ Nie udało się pobrać lub zastosować profil zdalnego zastrzegania ...
+ Zdalne zastrzeganie
+ Chcesz zmienić zastrzeganie URI?
+
+ Konto SIP
+ Zarządzanie
+ Wyłączyć
+ Proxy
+ Domena*
+ Hasło*
+ Nazwa użytkownika*
+ Outbound proxy
+ Nazwa hosta proxy SIP lub adres IP (opcja)
+ Droga wszystkich połączeń przez proxy SIP
+ Przykład: Jeśli konto jest john@sip.example.org
+ sip.example.org jeśli konto jest john@sip.example.org
+ Musisz ponownie wprowadzić hasło, jeśli edytowałeś swój login i / lub domenę
+ Expire
+ AVPF
+ AVPF regularny odstęp RTCP w sekundach (pomiędzy 1 i 5)
+ Wymień + przez 00
+ Przyjazne subskrybowanie
+ Autoryzuj ID użytkownika
+ Wprowadź ID użytkownika uwierzytelniania (opcjonalnie)
+ Nazwa wyświetlana
+
+Wpisz wyświetlaną nazwę (opcjonalnie)
+ Prefix
+ Transport
+ UDP
+ TCP
+ TLS
+ Usuń to konto
+ Użyj jako domyślny
+
+ Konta SIP
+ Domyślne konto
+ Dodaj konto
+ W aplikacji Store
+ Tunel
+ Nazwa hosta
+ Port
+ Tryb
+
+ Żaden
+ Preferencje
+ Włącz wideo
+
+ Audio
+ Redukcja szumów
+ Usuwa usłyszane echo od drugiego końca
+ Anulowanie kalibracji echo
+ Kalibracja ...
+ Kalibrowane w %s ms
+ Brak echa
+ Nie powiodło się
+ Adaptacyjne sterowanie prędkością
+ Limit szybkości transmisji kodeka
+ Kodeki
+
+ Wideo
+ Nakładka wideo
+ Wywołanie wyświetlania wideo w nakładce, gdy poza aplikacją
+ Użyj przednią kamerę
+ Inicjowanie połączeń wideo
+ Zawsze wysyłaj żądania wideo
+ Akceptuj nadchodzące żądania wideo
+ Zawsze akceptuj żądania wideo
+ Ustawienie wideo
+ Preferowany rozmiar wideo
+ Preferowany FPS
+ Limit przepustowości w kbits/s
+ Kodeki
+
+ Połączenie
+ Zastosowanie urządzenia dzwonka
+ Auto odbieranie przychodzących połączeń
+ Wyślij RFC2833 DTMFs
+ Wyślij SIP INFO DTMFs
+ Poczta głosowa URI
+
+ Czat
+ Udostępnianie serwera
+ Nie edytuj, chyba że wiesz co robisz!
+ Używaj szyfrowania LIME
+ Nieaktywny
+ Obowiązkowy
+ Preferowany
+
+ Sieć
+ Używaj tylko WiFi
+ Włącz ICE
+ Włącz TURN
+ Włącz UPNP
+ Użyj losowych portów
+ Port SIP w użyciu
+ Port wideo lub zakres portów
+ Port audio lub zakres portów
+ Port wideo lub zakres portów (minport-maxport)
+ Port audio lub zakres portów (minport-maxport)
+ Szyfrowanie mediów
+ Włącz powiadomienia push
+ Zezwól IPv6
+
+ Zaawansowany
+ Debug
+ Tryb tła
+ Włącz animacje
+ Włącz powiadomienie usług
+ Uruchom przy starcie systemu
+ Rozłączanie połączeń przychodzących (w sekundach)
+ Zdalne zastrzeganie
+ Ustawienia aplikacji Android
+ Pierwotne konto
+ Nazwa wyświetlana
+ Nazwa użytkownika
+
+ Hacki audio
+ Użyj szczególnego trybu Hack
+ 0=MODE_NORMAL (domyślnie), 2=MODE_IN_CALL
+ Użyj routing API Hack
+ Użyj Galaxy S audio hack
+
+ Powrót
+ Komunikator
+ Menu
+ Toggle micro
+ Toggle speaker
+ Utrata
+ Odłożyć słuchawkę
+ Akceptuj
+ Edytować
+ Edycja listy
+ Ważny
+ Dodaj do kontaktów
+ Nowy kontakt
+ Połączenie
+ Backspace
+ Czat
+ Wybieranie z powrotem
+ Powrót do rozmówcy
+ Zdjęcie kontaktu
+ Wyślij wiadomość
+ Szczegóły
+ Usuń
+ Dodaj połączenie
+ Nowa dyskusja
+ Szukaj
+ Wyszukiwanie kontaktu
+ Wszystkie kontakty
+ Kontakty Linphone
+ Kierunek połączeń
+ Wszystkie połączenia
+ Nieodebrane połączenie
+ Przełącznik wideo
+ Dodaj połączenie
+ Pauza
+ Numpad
+ History button
+ Chat button
+ Przycisk kontaktów
+ Jakość rozmów
+ Szyfrowanie
+ Przełącz kamerę
+ Przycisk anuluj
+ Stan wiadomości
+ Konferencja
+ Nazwa pola
+ Wyświetlana nazwa pola
+ Pole domeny
+ Pole zdalnego zastrzegania
+ Potwierdź pole hasła
+ Pole email
+ Domyślne konto
+ Odznacz wszystko
+ Zaznacz wszystko
+ Usuń wybrane
+ Pierwsze imię
+ Nazwisko
+ Organizacja
+ Wróć aby połączyć
+ Wyślij plik
+ Wiadomość
+ Nieprzeczytane wiadomości czatu
+ Transfer
+ Słuchawki
+ Bluetooth
+ Opcje połączeń
+ Przesyłanie audio
+ Wyjście konferencji
+
diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml
index 6445c8332..42295bebe 100644
--- a/res/values-pt-rBR/strings.xml
+++ b/res/values-pt-rBR/strings.xml
@@ -166,7 +166,6 @@
Servidor de compartilhamento
Network
- Servidor Stun
Habilitar ICE
Habilitar UPNP
Use portas aleatórias
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 96a0910d8..53fe03310 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -240,7 +240,6 @@
Сеть
Использовать только WiFi
- Сервер Stun
Включить ICE
Включить UPNP
Использовать случайный порт
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 6da76c63d..f8115080d 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -174,7 +174,6 @@
Сервер дељења
Мрежа
- Стун сервер
Укључи ИЦЕ
Укључи УПНП
Користи насумичне прикључнике
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 340d48e6e..393af657d 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -138,7 +138,6 @@
Delar server
Nätverk
- Stun-server
Aktivera ICE
Aktivera UPNP
Använd slumpade portar
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index d709cec2c..7fb62494e 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -243,7 +243,6 @@
Ağ
Sadece WİFİ kullan
- Stun sunucusu
İCE Etkin
UPNP Etkin
Rastgele bağlanma noktası kullan
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 8f70ad4a9..b6a58fedb 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -9,6 +9,10 @@
%s 已註冊
%s 無法註冊
+ Linphone Android %s
+ GNU General Public License V2\n © 2010-2016 Belledonne Communications
+ www.linphone.org
+ Linphone 聯絡人
使用者名稱
顯示名稱
@@ -53,6 +57,7 @@
設定 SIP 帳號
登入
正在進行回音消除器校正
+ 輸入你的使用者名稱和密碼
你的帳號還沒被驗證。
你的帳號已經被驗證。
不正確的使用者名稱或密碼
@@ -63,11 +68,14 @@
你的電子郵件無效。
你的密碼無效。
密碼不相符
+ 你的使用者名稱將會是 %s。\r\n\r\n它可能與你輸入的不同來符合需求。\r\n你接受嗎?
+ 請輸入你的使用者名稱和密碼
+ 忘記密碼?
輸入號碼或位址
- 歷史中沒有通話
- 歷史中沒有未接來電
+ 記錄中沒有通話
+ 記錄中沒有未接來電
你想要刪除選取的通話紀錄嗎?
今天
昨天
@@ -115,7 +123,7 @@
未知
音訊
視訊
- 編碼:
+ 編解碼器:
上傳頻寬:
下載頻寬:
視訊大小:
@@ -131,6 +139,7 @@
錯誤
未知錯誤
找不到使用者
+ 不相容的媒體參數
對方的頻寬過低,視訊無法啟動
無法連接網路
網路錯誤
@@ -178,8 +187,8 @@
校正中...
沒有回音
失敗
- 編碼位元率限制
- 編碼
+ 編解碼器位元率限制
+ 編解碼器
視訊
使用前攝影機
@@ -190,16 +199,20 @@
視訊預設
偏好的視訊大小
偏好的 FPS
- 編碼
+ 編解碼器
通話
+ 使用裝置鈴聲
聊天
+ 不要編輯除非你知道你在做什麼!
+ 停用
+ 強制
網路
只使用 WiFi
- Stun 伺服器
啟用 ICE
+ 啟用 TURN
啟用 UPNP
使用隨機連接埠
要使用的連接埠
@@ -251,7 +264,7 @@
切換視訊
暫停
數字鍵盤
- 歷史按鈕
+ 記錄按鈕
聊天按鈕
聯絡人按鈕
通話品質
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 399b24e36..dc501c5b9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -217,6 +217,8 @@
Video capturing call ongoing
started
%i unread messages
+ Missed call
+ %i missed calls
Warning: service is not ready
@@ -338,7 +340,7 @@
Network
Use WiFi only
- STUN server
+ STUN / TURN server
Enable ICE
Enable TURN
STUN / TURN username (optional)
diff --git a/src/org/linphone/ContactsListFragment.java b/src/org/linphone/ContactsListFragment.java
index 66984af71..22dd4256c 100644
--- a/src/org/linphone/ContactsListFragment.java
+++ b/src/org/linphone/ContactsListFragment.java
@@ -146,6 +146,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
});
contactsFetchInProgress = (ProgressBar) view.findViewById(R.id.contactsFetchInProgress);
+ contactsFetchInProgress.setVisibility(View.VISIBLE);
return view;
}
@@ -333,17 +334,23 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O
noSipContact.setVisibility(View.GONE);
noContact.setVisibility(View.GONE);
contactsList.setVisibility(View.VISIBLE);
- contactsFetchInProgress.setVisibility(View.GONE);
+ ContactsListAdapter adapter;
if (onlyDisplayLinphoneContacts) {
contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getSIPContacts()));
+ adapter = new ContactsListAdapter(ContactsManager.getInstance().getSIPContacts());
+ contactsList.setAdapter(adapter);
edit.setEnabled(true);
} else {
contactsList.setChoiceMode(AbsListView.CHOICE_MODE_MULTIPLE);
- contactsList.setAdapter(new ContactsListAdapter(ContactsManager.getInstance().getContacts()));
+ adapter = new ContactsListAdapter(ContactsManager.getInstance().getContacts());
+ contactsList.setAdapter(adapter);
edit.setEnabled(true);
}
+
+ if (adapter.getCount() > 0) {
+ contactsFetchInProgress.setVisibility(View.GONE);
+ }
ContactsManager.getInstance().setLinphoneContactsPrefered(onlyDisplayLinphoneContacts);
}
diff --git a/src/org/linphone/DialerFragment.java b/src/org/linphone/DialerFragment.java
index 32c54c3ed..6a760dd3f 100644
--- a/src/org/linphone/DialerFragment.java
+++ b/src/org/linphone/DialerFragment.java
@@ -122,13 +122,15 @@ public class DialerFragment extends Fragment {
}
}
+ instance = this;
+
return view;
}
/**
* @return null if not ready yet
*/
- public static DialerFragment instance() {
+ public static DialerFragment instance() {
return instance;
}
@@ -166,7 +168,7 @@ public class DialerFragment extends Fragment {
}
public void resetLayout(boolean callTransfer) {
- isCallTransferOngoing = callTransfer;
+ isCallTransferOngoing = LinphoneActivity.instance().isCallTransfer();
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
if (lc == null) {
return;
diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java
index 9733e90b2..12fba1141 100644
--- a/src/org/linphone/LinphoneActivity.java
+++ b/src/org/linphone/LinphoneActivity.java
@@ -141,7 +141,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
private boolean fetchedContactsOnce = false;
private boolean doNotGoToCallActivity = false;
private List sideMenuItems;
-
+ private boolean callTransfer = false;
static final boolean isInstanciated() {
return instance != null;
@@ -1026,7 +1026,11 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
}
- private void initInCallMenuLayout(boolean callTransfer) {
+ public Boolean isCallTransfer(){
+ return callTransfer;
+ }
+
+ private void initInCallMenuLayout(final boolean callTransfer) {
selectMenu(FragmentsAvailable.DIALER);
DialerFragment dialerFragment = DialerFragment.instance();
if (dialerFragment != null) {
@@ -1037,7 +1041,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
public void resetClassicMenuLayoutAndGoBackToCallIfStillRunning() {
DialerFragment dialerFragment = DialerFragment.instance();
if (dialerFragment != null) {
- ((DialerFragment) dialerFragment).resetLayout(false);
+ ((DialerFragment) dialerFragment).resetLayout(true);
}
if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() > 0) {
@@ -1101,7 +1105,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
}
} else if (resultCode == Activity.RESULT_FIRST_USER && requestCode == CALL_ACTIVITY) {
getIntent().putExtra("PreviousActivity", CALL_ACTIVITY);
- boolean callTransfer = data == null ? false : data.getBooleanExtra("Transfer", false);
+ callTransfer = data == null ? false : data.getBooleanExtra("Transfer", false);
boolean chat = data == null ? false : data.getBooleanExtra("chat", false);
if(chat){
pendingFragmentTransaction = FragmentsAvailable.CHAT_LIST;
@@ -1128,9 +1132,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
if (lc != null) {
lc.removeListener(mListener);
}
-
+ callTransfer = false;
+
super.onPause();
-
}
public boolean checkAndRequestOverlayPermission() {
@@ -1401,6 +1405,9 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta
String sipUri = extras.getString("ChatContactSipUri");
doNotGoToCallActivity = true;
displayChat(sipUri);
+ } else if (extras != null && extras.getBoolean("GoToHistory", false)) {
+ doNotGoToCallActivity = true;
+ changeCurrentFragment(FragmentsAvailable.HISTORY_LIST, null);
} else if (extras != null && extras.getBoolean("GoToInapp", false)) {
LinphoneService.instance().removeMessageNotification();
doNotGoToCallActivity = true;
diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java
index fefd737c9..7997fc807 100644
--- a/src/org/linphone/LinphoneService.java
+++ b/src/org/linphone/LinphoneService.java
@@ -92,6 +92,7 @@ public final class LinphoneService extends Service {
private final static int INCALL_NOTIF_ID=2;
private final static int MESSAGE_NOTIF_ID=3;
private final static int CUSTOM_NOTIF_ID=4;
+ private final static int MISSED_NOTIF_ID=5;
public static boolean isReady() {
return instance != null && instance.mTestDelayElapsed;
@@ -117,7 +118,7 @@ public final class LinphoneService extends Service {
private Notification mMsgNotif;
private Notification mCustomNotif;
private int mMsgNotifCount;
- private PendingIntent mNotifContentIntent;
+ private PendingIntent mNotifContentIntent, mMissedCallsNotifContentIntent;
private String mNotificationTitle;
private boolean mDisableRegistrationStatus;
private LinphoneCoreListenerBase mListener;
@@ -310,6 +311,10 @@ public final class LinphoneService extends Service {
Intent notifIntent = new Intent(this, incomingReceivedActivity);
notifIntent.putExtra("Notification", true);
mNotifContentIntent = PendingIntent.getActivity(this, 0, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+
+ Intent missedCallNotifIntent = new Intent(this, incomingReceivedActivity);
+ missedCallNotifIntent.putExtra("GoToHistory", true);
+ mMissedCallsNotifContentIntent = PendingIntent.getActivity(this, 0, missedCallNotifIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Bitmap bm = null;
try {
@@ -344,11 +349,26 @@ public final class LinphoneService extends Service {
destroyOverlay();
}
- // Enable the following to have missed call notifications
- /*if (state == State.CallEnd && call.getCallLog().getStatus() == CallStatus.Missed) {
- Notification notif = Compatibility.createSimpleNotification(instance, "Missed call", LinphoneManager.getLc().getMissedCallsCount() + " missed call", mNotifContentIntent);
- notifyWrapper(CUSTOM_NOTIF_ID, notif);
- }*/
+ if (state == State.CallEnd && call.getCallLog().getStatus() == CallStatus.Missed) {
+ int missedCallCount = LinphoneManager.getLcIfManagerNotDestroyedOrNull().getMissedCallsCount();
+ String body;
+ if (missedCallCount > 1) {
+ body = getString(R.string.missed_calls_notif_body).replace("%i", String.valueOf(missedCallCount));
+ } else {
+ LinphoneAddress address = call.getRemoteAddress();
+ LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(address);
+ if (c != null) {
+ body = c.getFullName();
+ } else {
+ body = address.getDisplayName();
+ if (body == null) {
+ body = address.asStringUriOnly();
+ }
+ }
+ }
+ Notification notif = Compatibility.createMissedCallNotification(instance, getString(R.string.missed_calls_notif_title), body, mMissedCallsNotifContentIntent);
+ notifyWrapper(MISSED_NOTIF_ID, notif);
+ }
if (state == State.StreamsRunning) {
// Workaround bug current call seems to be updated after state changed to streams running
diff --git a/src/org/linphone/compatibility/ApiElevenPlus.java b/src/org/linphone/compatibility/ApiElevenPlus.java
index 6fa46d519..9dda22251 100644
--- a/src/org/linphone/compatibility/ApiElevenPlus.java
+++ b/src/org/linphone/compatibility/ApiElevenPlus.java
@@ -151,6 +151,20 @@ public class ApiElevenPlus {
return intent;
}
+ @SuppressWarnings("deprecation")
+ public static Notification createMissedCallNotification(Context context, String title, String text, PendingIntent intent) {
+ Notification notif = new Notification.Builder(context)
+ .setContentTitle(title)
+ .setContentText(text)
+ .setContentIntent(intent)
+ .setSmallIcon(R.drawable.call_status_missed)
+ .setAutoCancel(true)
+ .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)
+ .setWhen(System.currentTimeMillis()).getNotification();
+
+ return notif;
+ }
+
@SuppressWarnings("deprecation")
public static Notification createSimpleNotification(Context context, String title, String text, PendingIntent intent) {
Notification notif = new Notification.Builder(context)
diff --git a/src/org/linphone/compatibility/ApiSixteenPlus.java b/src/org/linphone/compatibility/ApiSixteenPlus.java
index f7fff7d2f..1bee2257e 100644
--- a/src/org/linphone/compatibility/ApiSixteenPlus.java
+++ b/src/org/linphone/compatibility/ApiSixteenPlus.java
@@ -112,6 +112,20 @@ public class ApiSixteenPlus {
viewTreeObserver.removeOnGlobalLayoutListener(keyboardListener);
}
+ public static Notification createMissedCallNotification(Context context, String title, String text, PendingIntent intent) {
+ Notification notif = new Notification.Builder(context)
+ .setContentTitle(title)
+ .setContentText(text)
+ .setSmallIcon(R.drawable.call_status_missed)
+ .setAutoCancel(true)
+ .setContentIntent(intent)
+ .setDefaults(Notification.DEFAULT_LIGHTS | Notification.DEFAULT_SOUND | Notification.DEFAULT_VIBRATE)
+ .setWhen(System.currentTimeMillis())
+ .build();
+
+ return notif;
+ }
+
public static Notification createSimpleNotification(Context context, String title, String text, PendingIntent intent) {
Notification notif = new Notification.Builder(context)
.setContentTitle(title)
diff --git a/src/org/linphone/compatibility/ApiTwentyOnePlus.java b/src/org/linphone/compatibility/ApiTwentyOnePlus.java
index 66d0a37b6..ff6431a5b 100644
--- a/src/org/linphone/compatibility/ApiTwentyOnePlus.java
+++ b/src/org/linphone/compatibility/ApiTwentyOnePlus.java
@@ -112,6 +112,22 @@ public class ApiTwentyOnePlus {
viewTreeObserver.removeOnGlobalLayoutListener(keyboardListener);
}
+ public static Notification createMissedCallNotification(Context context, String title, String text, PendingIntent intent) {
+ Notification notif = new Notification.Builder(context)
+ .setContentTitle(title)
+ .setContentText(text)
+ .setSmallIcon(R.drawable.call_status_missed)
+ .setAutoCancel(true)
+ .setContentIntent(intent)
+ .setDefaults(Notification.DEFAULT_ALL)
+ .setCategory(Notification.CATEGORY_MESSAGE)
+ .setVisibility(Notification.VISIBILITY_PRIVATE)
+ .setPriority(Notification.PRIORITY_HIGH)
+ .build();
+
+ return notif;
+ }
+
public static Notification createSimpleNotification(Context context, String title, String text, PendingIntent intent) {
Notification notif = new Notification.Builder(context)
.setContentTitle(title)
diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java
index 2cb9336c0..574cf485b 100644
--- a/src/org/linphone/compatibility/Compatibility.java
+++ b/src/org/linphone/compatibility/Compatibility.java
@@ -46,6 +46,17 @@ public class Compatibility {
}
return notif;
}
+ public static Notification createMissedCallNotification(Context context, String title, String text, PendingIntent intent) {
+ Notification notif = null;
+ if (Version.sdkAboveOrEqual(Version.API21_LOLLIPOP_50)) {
+ return ApiTwentyOnePlus.createMissedCallNotification(context, title, text, intent);
+ } else if (Version.sdkAboveOrEqual(Version.API16_JELLY_BEAN_41)) {
+ notif = ApiSixteenPlus.createMissedCallNotification(context, title, text, intent);
+ } else {
+ notif = ApiElevenPlus.createMissedCallNotification(context, title, text, intent);
+ }
+ return notif;
+ }
public static Notification createMessageNotification(Context context, int msgCount, String msgSender, String msg, Bitmap contactIcon, PendingIntent intent) {
Notification notif = null;
diff --git a/submodules/externals/codec2 b/submodules/externals/codec2
new file mode 160000
index 000000000..4e154e6bb
--- /dev/null
+++ b/submodules/externals/codec2
@@ -0,0 +1 @@
+Subproject commit 4e154e6bbbe92cc76e333a0b4acb365b5c042ec6
diff --git a/submodules/linphone b/submodules/linphone
index 510e9d92d..a6e7eec3b 160000
--- a/submodules/linphone
+++ b/submodules/linphone
@@ -1 +1 @@
-Subproject commit 510e9d92d051c0bedc2803669f6aa81bda7c3cb9
+Subproject commit a6e7eec3b3ec268e7d86f85ae268b53eca5c10de
diff --git a/tests/src/org/linphone/test/CallsAudio.java b/tests/src/org/linphone/test/CallsAudio.java
index 4d2238c60..e65c2f468 100644
--- a/tests/src/org/linphone/test/CallsAudio.java
+++ b/tests/src/org/linphone/test/CallsAudio.java
@@ -31,6 +31,7 @@ public class CallsAudio extends SampleTest {
goToSettings();
selectItemInListOnUIThread(3);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_title));
solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title));
solo.sleep(500);
diff --git a/tests/src/org/linphone/test/CallsVideo.java b/tests/src/org/linphone/test/CallsVideo.java
index f4f258242..177c3974c 100644
--- a/tests/src/org/linphone/test/CallsVideo.java
+++ b/tests/src/org/linphone/test/CallsVideo.java
@@ -31,13 +31,10 @@ public class CallsVideo extends SampleTest {
//Enable video
goToSettings();
- selectItemInListOnUIThread(3);
- solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title));
- solo.sleep(500);
-
// enable auto accept and auto share video
goToVideoCodecsSettings();
solo.sleep(500);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title));
solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_initiate_call_with_video_title));
solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_automatically_accept_video_title));
solo.sleep(500);
@@ -61,6 +58,7 @@ public class CallsVideo extends SampleTest {
solo.clickOnView(solo.getView(org.linphone.R.id.call));
assertOutgoingCallIsCorrectlyRunning();
+ assertCallIsCorrectlyRunning();
assertCallIsRunningWithVideo();
solo.clickOnView(solo.getView(org.linphone.R.id.video_frame));
diff --git a/tests/src/org/linphone/test/ConferenceAndMultiCall.java b/tests/src/org/linphone/test/ConferenceAndMultiCall.java
index 076640ac8..7f2c32d0a 100644
--- a/tests/src/org/linphone/test/ConferenceAndMultiCall.java
+++ b/tests/src/org/linphone/test/ConferenceAndMultiCall.java
@@ -33,6 +33,7 @@ public class ConferenceAndMultiCall extends SampleTest {
goToSettings();
selectItemInListOnUIThread(3);
+ solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_title));
solo.clickOnText(aContext.getString(org.linphone.R.string.pref_video_enable_title));
solo.sleep(500);