diff --git a/.gitmodules b/.gitmodules index 55cee76e4..6a06d889f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -112,3 +112,9 @@ [submodule "submodules/bcmatroska2"] path = submodules/bcmatroska2 url = git://git.linphone.org/bcmatroska2.git +[submodule "submodules/externals/xerces-c"] + path = submodules/externals/xerces-c + url = git://git.linphone.org/xerces-c.git +[submodule "submodules/externals/libxsd"] + path = submodules/externals/libxsd + url = git://git.linphone.org/libxsd diff --git a/AndroidManifest.xml b/AndroidManifest.xml index b69c4f80a..ae3a76605 100755 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -2,7 +2,7 @@ + + + + + + + + + @@ -176,6 +177,9 @@ تعذر عليك فك تعمية هذه الرسالة. إنك تحاول إرسال رسالة عبر LIME لجهة اتصال لم تتحقق منها بواسطة ZRTP.\nيُرجى الاتصال بجهة الاتصال هذه والتحقق من مفتاحها ZRTP قبل إرسال رسائلك. قد تستلزم معالجة الصور بضع ثوان حسب حجم الملف. + قُرِأ + سُلِّم + أعد اﻹرسال مُسجَّل غير مُسجَّل @@ -190,9 +194,14 @@ مكالمة واردة مكالمة صادرة + يود مخاطبك تشغيل الفيديو لا وجود لأي مكالمة نشيطة + أوقف مخاطبك المكالمة مؤقتا حدث خطأ خلال قبول المكالمة أكد رمز الاستيثاق مع نظيرك :\nقل : %s + \nمخاطبك يجب أن يقول : %s + رمز الاستيثاق + قم بتأكيد رمز الاستيثاق السابق مع مخاطبك مجهول الصوت الفيديو @@ -229,6 +238,7 @@ المستخدم مشغول لم يعثر على المستخدم مُعامِلات الوسائط غير متوافقة + لمخاطبك سعة قناة ضيقة، لا يمكن بدء الفيديو تعذر الوصول إلى الشبكة الاعتمادات غير صحيحة غير مُصرَّح @@ -319,6 +329,7 @@ المكالمة استخدم رنة الجهاز رد تلقائيا على المكالمات الواردة + مهلة التشغيل التلقائي (بالميلي-ثواني) أرسل DTMF مع التدفق (RFC2833) أرسل DTMF خارج التدفق (SIP INFO) عنوان العلبة الصوتية @@ -443,4 +454,5 @@ خيارات المكالمة توجيه الصوت مغادرة الاجتماع + إشعارات لِنْفُونْ diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 46582d79c..e64a4e312 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -16,6 +16,7 @@ Linphone-Kontakte Benutzername + Benutzerkennung (optional) Telefonnummer Anzeigename Passwort @@ -45,6 +46,7 @@ Vielleicht später Später Nein + OK Ja Verknüpfen Sie Ihr Konto @@ -170,6 +172,7 @@ Sie können diese Nachricht nicht entschlüsseln. Bild wird verarbeitet. Je nach Größe der Datei kann dies mehrere Sekunden in Anspruch nehmen Lesen + Ausgeliefert Erneut senden Registriert @@ -185,9 +188,13 @@ eingehender Anruf ausgehender Anruf + Ihr Anrufer möchte Video einschalten Kein aktiver Anruf Ihr Anrufer hat den Anruf pausiert Beim Annehmen des Anrufs ist ein Fehler aufgetreten + \nIhr Anrufer sollte sagen: %s + SAS + Bestätigen Sie den vorherigen SAS-Code mit Ihrem Korrespondenten Unbekannt Audio Video @@ -224,6 +231,7 @@ Benutzer beschäftigt Benutzer nicht gefunden Inkompatible Medienparameter + Ihr Anrufer hat eine geringe Bandbreite, Video kann nicht gestartet werden Netzwerk ist nicht erreichbar Falsche Anmeldedaten Unzulässig @@ -327,6 +335,7 @@ Netzwerk Nur WiFi verwenden + Schlummermodus STUN / TURN-Server ICE aktivieren TURN aktivieren @@ -435,4 +444,5 @@ Anrufoptionen Audioroute Konferenz beenden + Linphone-Benachrichtigung diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 3bc524924..a076c2d2d 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -16,6 +16,7 @@ linphone კონტაქტები მომხმარებლის სახელი + User-id (არასავალდებულო) ტელეფონის ნომერი სახელი პაროლი @@ -45,6 +46,7 @@ შესაძლოა მოგვიანებით მოგვიანებით არა + OK დიახ ანგარიშის მიბმა @@ -197,6 +199,8 @@ ზარის მიღებისას მოხდა შეცდომა დაადასტურეთ შემდეგი SAS მომხმარებელთან:\nთქვით: %s \nთქვენმა მხმობელმა უნდა თქვას: %s + SAS + დაადასტურეთ წინა SAS კოდი თქვენს მოკავშირესთან უცნობი ხმა ვიდეო @@ -207,6 +211,8 @@ ICE კავშირი: გაგზავნილი ვიდეოს გაფართოება: მიღებული ვიდეოს გაფართოება: + გაგზავნილი ვიდეოს კადრი/წმ: + მიღებული ვიდეოს კადრი/წმ: გამგზავნის დაკარგვის სიხშირე: მიმღების დაკარგვის სიხშირე: ჯიტერის ბუფერი: @@ -324,8 +330,10 @@ ზარი მოწყობილობის რეკვის ხმის გამოყენება შემომავალ პასუხებზე ავტო-პასუხი + ავტო პასუხის დრო (მილიწამებში) არხის-შიდა DTMF-ების გაგზავნა(RFC2833) არხის-გარე DTMF-ების გაგზავნა(SIP INFO) + ზარის ტაიმაუტი (წამებში) ხმოვანი ფოსტის URI ჩატი @@ -448,4 +456,5 @@ ზარის პარამეტრები ხმის მარშრუტი კონფერენციიდან გამოსვლა + Linphone-ის შეტყობინება diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index 70ddd03f4..bdfe085f8 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -9,16 +9,22 @@ %s зарегистрирован %s зарегистрировать не удалось + Linphone Android %s + Linphone ядро %s + GNU General Public License V2\n © 2010-2017 Belledonne Communications + www.linphone.org + контакты linphone Имя пользователя + Идентификатор пользователя (необязательно) Номер телефона Отображаемое имя Пароль Подтверждение пароля Домен - URL + URL-адрес Электронная почта - Вы уверены, что хотите удалить выбранное? + Вы действительно хотите удалить выбранное? Удалить Повторить Отменить @@ -35,41 +41,103 @@ Подключение Отклонить Конференция + Ссылка + Вы хотите связать учетную запись %s с вашим номером телефона? + Может быть позже + Позже Нет + OK Да + Связать свою учетную запись + это бесплатный SIP-клиент Добро пожаловать Ассистент Создать аккаунт + Связать учетную запись Продолжить + Активировать учетную запись Завершить настройку - Пожалуйста, введите URL конфигурирования + Ваша учетная запись создана. Для подтверждения учетной записи проверьте свою почту: + После этого вернитесь и нажмите кнопку. + Этот помощник поможет вам настроить и использовать свой SIP-аккаунт. + Введите имя пользователя и пароль учетной записи Linphone + Введите имя пользователя и пароль вашего домена SIP + Укажите URL-адрес конфигурации Транспорт - Исп. аккаунт Linphone - Исп. SIP-аккаунт - Удалённое конфигурирование + Ваш SIP-адрес + Использовать учетную запись Linphone + Использовать учетную запись SIP + Выбор удаленной конфигурации + Подтвердите код страны и введите свой номер телефона + Мы отправили SMS-сообщение с кодом подтверждения на ваш номер телефона: + Чтобы завершить проверку номера телефона, введите 4-значный код ниже:\n + Введите имя пользователя, адрес электронной почты и пароль для вашей учетной записи Linphone Отображаемое имя (необязательно) - Исп. SIP-аккаунт - Удалённое конфигурирование - Извлечь и применить - Логин + Использовать учетную запись Linphone + Использовать учетную запись SIP + Выбор удаленной конфигурации + Получить и применить + Имя пользователя Выполняется калибровка эхоподавления - Введите логин - Ваша учётная запись ещё не подтверждена. - Ваша учётная запись подтверждена. + Введите имя пользователя + Ваша учетная запись еще не проверена. + Недопустимый код подтверждения.\r\nПожалуйста, повторите попытку. + Ваша учетная запись проверена. Неверное имя пользователя или пароль + Вы согласны загрузить OpenH264 Video Codec, предоставленный компанией Cisco Systems, Inc.? + Загрузка OpenH264 Video Codec, предоставленного компанией Cisco Systems, Inc. + Загрузка OpenH264 + Перед использованием кодека OpenH264 необходимо перезапустить %s. + Извините, произошла ошибка. + OpenH264 Video Codec, предоставленный компанией Cisco Systems, Inc. загружен. Произошла ошибка, повторите попытку позже. - Сервер недоступен, проверьте подключение к сети. + Сервер недоступен, проверьте сетевое подключение. Это имя пользователя уже используется. - Неверное имя пользователя. - Неверный адрес эл. почты. - Неверный пароль + Этот номер телефона уже используется.\r\nВведите другой номер.\r\nВы можете удалить свою существующую учетную запись, если хотите повторно использовать свой номер телефона. + Недопустимое имя пользователя. + Недопустимый номер телефона. + Недопустимый адрес электронной почты. + Недопустимый пароль Пароли не совпадают. - Ваше имя пользователя будет %s.\r\n\r\nОно может отличаться от введённого для соответствия требованиям.\r\nВы согласны? - Пожалуйста, введите имя пользователя и пароль + Ваше имя пользователя будет %s.\r\n\r\nОно может отличаться от выбранного вами для соответствия требованиям.\r\nВы согласны? + Введите имя пользователя и пароль + Забыли пароль ? + Выберите страну + Выберите свою страну + (%s) + Использовать имя пользователя (необязательно) + Использовать адрес электронной почты для проверки учетной записи + Вместо номера телефона использовать имя пользователя и пароль + Для чего будет использоваться мой номер телефона? + \nБлагодаря номеру телефона вашим друзьям будет проще вас найти.\n\n В вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n + \nВашим друзьям будет проще связаться с вами, если вы свяжете свою учетную запись со своим номером телефона.\n\nВ вашей адресной книге вы увидите, кто использует Linphone, а ваши друзья смогут узнать, что вы также зарегистрированы в Linphone.\n + Номер телефона можно использовать только с одной учетной записью Linphone.\n\nЕсли ваш номер уже был связан с другой учетной записью, но вы предпочитаете использовать его, просто свяжите его сейчас, и ваш номер будет автоматически перенесен в эту учетную запись. + Недопустимый адрес электронной почты + Учетная запись уже существует + Эта учетная запись не существует + Неверное имя пользователя + Недопустимый домен + Недопустимый маршрут + Недопустимое имя + Слишком короткое имя пользователя + Слишком длинное имя пользователя + Недопустимая длина имени пользователя + Слишком длинный номер телефона + Слишком короткий номер телефона + Недопустимый номер телефона + Слишком короткий пароль + Слишком длинный пароль + Не удалось запросить сервер. Повторите попытку позже + Неподдерживаемый транспорт + Недопустимый код страны + В приложении + Покупка в приложении + Пробный период истекает %s + Срок действия подписки истекает %s Введите номер или адрес @@ -86,10 +154,11 @@ Адрес SIP Имя Фамилия + Организация Нет разговоров Вы действительно хотите удалить выбранный разговор? - Вы действительно хотите удалить выбранные сообщения? + Вы действительно хотите удалить выбранное сообщение? Собеседник пишет... Маленький Средний @@ -100,13 +169,21 @@ Выбрать источник Картинка сохранена Ошибка, картинка не сохранена - Пожалуйста, подождите... + Подождите... + При передаче файла произошла ошибка + Это сообщение не зашифровано + От %s получено зашифрованное сообщение, которое вы не можете расшифровать.\nВы должны позвонить своему собеседнику для обмена ключами ZRTP. Это необходимо для расшифровки будущих сообщений, которые вы получите. + Вы не можете расшифровать это сообщение. + Вы пытаетесь отправить сообщение при помощи LIME с неверифицированными ключом ZRTP.\nПожалуйста, позвоните этому контакту и подтвердите его ключ ZRTP перед отправкой сообщений. Обработка изображения может занять несколько секунд в зависимости от размера файла + Прочитано + Доставлено + Переслать Зарегистрирован Не зарегистрирован - В процессе регистрации - Ошибка регистрации + Выполняется регистрация + Регистрация не удалась непрочитанных сообщений Ассистент @@ -116,41 +193,62 @@ входящий вызов исходящий вызов + Ваш собеседник хотел бы включить видео Нет активного вызова + Ваш собеседник поставил вызов на удержание Произошла ошибка во время принятия вызова + Подтвердите следующие SAS с одноранговым узлом:\nСкажите: %s + \nВаш собеседник должен сказать: %s + SAS + Подтвердить предыдущий код SAS с вашим собеседником Неизвестный Аудио Видео Кодек: - Полоса пропускания загрузки: - Полоса пропускания скачивания: - Подключение ICE: + Семейство IP: + Пропускная способность передачи: + Пропускная способность приема: + Предполагаемая пропускная способность на прием: + ICE-соединение: + Разрешение передаваемого видео: + Разрешение принимаемого видео: + fps передаваемого видео: + fps принимаемого видео: + Коэффициент потерь отправителя: + Коэффициент потерь приемника: + Буфер джиттера: + Кодер: + Декодер Вызов Отправить журнал Сброс журнала - Идёт аудиозвонок - Звонок на паузе - Идёт видеозвонок + Установлено аудиосоединение + Вызов на удержании + Установлено видеосоединение начат %i непрочитанных сообщений + Пропущенный вызов + %i пропущенных вызовов - Внимание: сервис не готов + Предупреждение: служба не готова Ошибка - Невозможно установить адрес назначения из %s + Невозможно создать адрес назначения из %s Неизвестная ошибка - Вызов сброшен - Пользователь не найден + Вызов отклонен + Абонент занят + Абонент не найден Несовместимые параметры потока + У вашего собеседника низкая пропускная способность, видео не может быть запущено Сеть недоступна Неверные учетные данные Неавторизован Ошибка сети - Скачать не удалось. Пожалуйста, проверьте сетевое подключение или повторите попытку позже. - Не удалось скачать или применить профиль удалённого конфигурирования... + Загрузка не удалась. Проверьте сетевое подключение или повторите попытку позже. + Не удалось загрузить или применить профиль удаленного конфигурирования... Удаленное конфигурирование - Вы действительно хотите изменить URI конфигурирования? + Вы хотите изменить URI конфигурирования? SIP-аккаунт Управление @@ -160,15 +258,16 @@ Пароль* Имя пользователя* Исходящий прокси - Имя сервера SIP прокси или ip адрес (необязательно) - Отправлять все вызовы через SIP прокси + Имя прокси-сервера SIP или ip адрес (необязательно) + Маршрутизация всех вызовов через SIP-прокси Например: john если ваш адрес john@sip.example.org sip.example.org если ваш адрес john@sip.example.org - Вы должны повторно ввести ваш пароль, если вы измените имя пользователя и/или домен + Необходимо повторно ввести пароль, если вы измените имя пользователя и/или домен Истекает AVPF AVPF регулярный интервал RTCP в секундах (от 1 до 5) Заменить + на 00 + Связать свою учетную запись Имя для аутентификации Введите имя для аутентификации (необязательно) Отображаемое имя @@ -179,11 +278,14 @@ TCP TLS Удалить аккаунт + Изменить пароль Использовать по умолчанию + Пароль изменен - SIP-аккаунты - Аккаунт по умолчанию - Добавить аккаунт + Учетные записи SIP + Учетная запись по умолчанию + Добавить учетную запись + In-app Store Туннель Сервер Порт @@ -196,42 +298,62 @@ авто Нет - Настройки + Предпочтения Включить видео Аудио Эхоподавление Устраняет эхо, слышимое другой стороной Калибровка эхоподавления + Тест эхо Калибровка… Откалибровано в %s мс Нет эха не удалось - Адаптивное управление скорость - Ограничение битрейта кодека + Адаптивный контроль скорости + Предельная скорость кодека Кодеки Видео + Наложение видео + Отображать видеовызов наложением на стороннем приложении Использовать фронтальную камеру - Начинать видеозвонки - Всегда посылать видео запросы - Принимать входящие видеозвонки - Всегда принимать видео запросы - Предустановка видео - Предпочтительный размер видео - Предпочтительный FPS - Ограничение пропускной способности в Кбит/с + Инициирование видеозвонков + Всегда отправлять запросы на видео + Принимать входящие запросы на видео + Всегда принимать запросы на видео + Параметры видео + Предпочитаемый размер видео + Предпочитаемый FPS + Ограничение пропускной способности в кбит/с Кодеки Вызов + Использовать мелодию звонка устройства + Автоматический ответ на входящие звонки + Время автоматического ответа (в миллисекундах) + Отправить в потоке DTMFs(RFC2833) + Отправить вне потока DTMFs(SIP INFO) + Таймаут вызова(в секундах) URI голосовой почты Чат Сервер обмена + Не изменяйте, если вы не знаете, что делаете! + Использовать шифрование LIME + Отключено + Обязательно + Предпочтительно + LIME требует шифрования ZRTP.\nПри активации LIME вы автоматически активируете шифрование ZRTP. Сеть Использовать только WiFi + Режим Doze + Сервер STUN / TURN Включить ICE + Включить TURN + Имя пользователя STUN / TURN (необязательно) + Пароль STUN / TURN (необязательно) Включить UPNP Использовать случайный порт SIP порт занят @@ -246,17 +368,20 @@ Дополнительно Отладка Отладка + Подписка Фоновый режим Включить анимацию - Запуск при загрузке + Включить сервисное уведомление + Запуск во время загрузки Отклонение входящего вызова (в секундах) - Удалённое конфигурирование + Удаленное конфигурирование + Параметры приложения в Android Основной аккаунт Отображаемое имя Имя пользователя - Audio хаки - Использовать хаки спец. режима + Аудио хаки + Использовать хаки определенного режима 0=MODE_NORMAL (по умолчанию), 2=MODE_IN_CALL Использовать хак API маршрутизации Использовать аудио хак Galaxy S @@ -267,14 +392,17 @@ Переключить микрофон Переключить динамик Отклонить - Положить трубку + Завершить вызов Принять Редактировать Редактировать список + Действительный Добавить в контакты Новый контакт Вызов + Возврат Чат + Перезвонить Вернуться к номеронабирателю Изображение контакта Отправить сообщение @@ -284,6 +412,7 @@ Новая дискуссия Поиск Поиск контакта + Поиск страны Все контакты Контакты Linphone Направление вызова @@ -304,24 +433,29 @@ Конференция Поле имени пользователя Поле имени пользователя + Поле номера телефона Поле отображаемого имени Поле домена - Поле удалённого конфигурирования + Поле удаленного конфигурирования Поле подтверждения пароля Поле электронной почты - Аккаунт по умолчанию + Учетная запись по умолчанию Отменить выбор - Выбрать всё + Выбрать все Удалить выбранное Имя Фамилия + Организация Вернуться к вызову Отправить файл + Входящий файл Сообщение Непрочитанное сообщение чата - Перевести + Перевод Наушник Bluetooth Параметры вызова + Аудио маршрут Выйти из конференции + Уведомление Linphone diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 1e39e7c83..31e779931 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -6,13 +6,25 @@ Linphone Linphone Startar upp + %s registrerad + %s misslyckades med att registrera sig + Linphone Android %s + Linphone Core %s + GNU General Public License V2\n © 2010-2017 Belledonne Communications + www.linphone.org linphone-kontakter Användarnamn + Användar-ID (valfritt) Telefonnummer Visningsnamn Lösenord + Lösenordsbekräftelse + Domän + Webbadress + E-post + Är du säker på att du vill radera ta bort val? Ta bort Försök igen Avbryt @@ -20,57 +32,193 @@ Fortsätt Om Neka + Inget konto konfigurerat Sök Utgående Inkommande Missade Inställningar + Anslutning Avvisa Konferens + Länk + Vill du länka kontot%s med ditt telefonnummer ? + Kanske senare + Senare Nej + OK Ja + Länka ditt konto + libre SIP-klient + Välkommen + Assistent + Skapa konto + Länka konto Fortsätt + Aktivera ditt konto + Slutför konfiguration + Ditt konto har skapats. Kontrollera dina mejl för att validera ditt konto: + När det är klart, kom tillbaka hit och klicka på knappen. + Den här assistenten hjälper dig att konfigurera och använda ditt SIP-konto. + Ange ditt användarnamn och lösenord för Linphone-kontot + Ange ditt användarnamn och lösenord med din SIP-domän + Ange din provisioneringsadress + Transport + Din SIP-adress är + Använd Linphone-konto + Använd SIP-konto + Hämta fjärrkonfiguration + Bekräfta landskoden och ange ditt telefonnummer + Vi har skickat ett SMS med en validerings kod till ditt telefonnummer: + För att slutföra ditt telefonnummer verifiering ange den 4-siffriga koden nedan:\n + Ange ett användarnamn, e-postadress och lösenord för ditt Linphone-konto + Visningsnamn (valfritt) + Använd ditt Linphone-konto + Använd SIP-konto + Hämta fjärrkonfiguration + Hämta och tillämpa + Logga in + Ekoeliminerare kalibrering pågår + Ange din inloggning + Ditt konto har ännu inte validerats. + Bekräftelsekoden är ogiltig.\r\nFörsök igen. + Ditt konto har validerats. + Felaktigt användarnamn eller lösenord + Vill du hämta OpenH264 video kodek tillhandahållen av Cisco Systems, Inc.? + Hämtar OpenH264 video kodek tillhandahållen av Cisco Systems, Inc. + Hämtar OpenH264 + Innan du använder OpenH264 kodek måste du starta om %s. + Tyvärr har ett fel inträffat. + OpenH264 video kodek tillhandahållen av Cisco Systems, Inc. hämtad. + Ett fel inträffade, försök igen senare. + Server onåbar, verifiera din nätverksanslutning. Detta användarnamn används redan. + Det här telefonnumret är redan i bruk.\r\nAnge ett annat nummer.\r\nDu kan ta bort ditt befintliga konto om du vill återanvända ditt telefonnummer. + Ditt användarnamn är ogiltigt. + Ditt telefonnummer är ogiltigt. + Din e-postadress är ogiltig. + Ditt lösenord är ogiltigt + Lösenorden matchar inte. + Your username will be %s.\r\n\r\nDet kan skilja sig från din inmatning för att matcha kraven.\r\nVill du acceptera? Ange din inloggning och lösenord + Glömt lösenord ? + Välj ett land + Välj ditt land + (%s) + Använd ett användarnamn (valfritt) + Använd e-postadress för kontovalidering + Använd ditt användarnamn och lösenord istället för ditt telefonnummer + Vad ska mitt telefonnummer användas för? + \nTack vare ditt telefonnummer kommer dina vänner att hitta dig lättare.\n\nDu kommer att se i din adressbok vem som använder Linphone och dina vänner kommer att veta att de även kan nå dig på Linphone.\n + \nDina vänner hittar dig lättare om du kopplar ditt konto till ditt telefonnummer\n\nDu ser i din adressbok vilka som använder Linphone och dina vänner vet att de når dig på Linphone också.\n + Du kan bara använda ditt telefonnummer med ett Linphone-konto.\n\nOm du redan har länkat ditt nummer till ett annat konto, men du föredrar att använda det här, kopplar du bara det nu och ditt nummer flyttas automatiskt till det här kontot. + Ogiltig e-post + Konto finns redan + Det här kontot finns inte + Ogiltigt användarnamn + Ogiltig domän + Ogiltig rutt + Ogiltigt visningsnamn + Användarnamn för kort + Användarnamn för långt + Användarnamnslängd ogiltig + Telefonnummer för långt + Telefonnummer för kort + Ogiltigt telefonnummer + Lösenordet för kort + Lösenord för långt + Misslyckades med att fråga servern. Vänligen försök igen senare + Transport stöds inte + Landskod är ogiltig + Inom appen + Köp inom appen + Försöksperioden löper ut den %s + Teckningsperioden löper ut den %s + Ange ett nummer eller en adress + Inget samtal i din historia + Inget missat samtal i din historia + Vill du ta bort vald samtalslog? Idag Igår Inga kontakter i din adressbok. Inga SIP-kontakter i din adressbok. + Vill du ta bort valda kontakter? + Vill du ta bort vald kontakt? SIP-adress Förnamn Efternamn + Organisation + Inga konversationer + Vill du ta bort vald konversation? + Vill du ta bort valt meddelande? + Fjärr skriver... Liten Mellan Stor Riktig storlek + Text kopierades till urklipp Kopiera text Välj källa Bild sparad Fel, bild ej sparad Vänta... + Ett fel inträffade under filöverföringen + Detta meddelande är inte krypterat + Du har fått ett krypterat meddelande som du inte kan dekryptera från %s\nDu behöver ringa din korrespondent för att utbyta dina ZRTP-nycklar om du vill dekryptera de framtida meddelanden som du kommer att få. + Du behöver ringa din korrespondent för att utbyta dina ZRTP-nycklar om du vill dekryptera de framtida meddelanden som du kommer att få. + Du försöker skicka ett meddelande med hjälp av LIME till en kontakt som inte verifierats av ZRTP.\nRing den här kontakten och verifiera hans ZRTP-nyckel innan du skickar dina meddelanden. + Bearbetning av bild kan ta upp till några sekunder beroende på filens storlek + Läs + Levererades + Skicka igen Registrerad + Inte registrerad Registrering pågår Registrering misslyckades olästa meddelanden + Assistent Inställningar Om + Avsluta + inkommande samtal + utgående samtal + Din uppringare vill slå på video + Inget aktivt samtal + Din uppringare pausade samtalet + Ett fel uppstod när du accepterade samtalet + Bekräfta följande SAS med jämlike:\nSäg:%s + \Din uppringare bör säga: %s + SAS + Bekräfta tidigare SAS-kod med din korrespondent Okänd Ljud Video + Kodek: + IP-familj: Uppladdningsbandbredd: Nerladdningsbandbredd: + Beräknad hämtningsbandbredd: ICE-anslutning: + Skickad videoupplösning: + Mottagen videoupplösning: + Skickade video fps: + Mottagna video fps: + Avsändare förlustfrekvens: + Mottagare förlustfrekvens: + Jitterbuffert: + Kodare: + Avkodare: Ring Skicka logg @@ -78,18 +226,29 @@ Ljudsamtal pågår Pausat samtal pågår + Videofångstsamtal pågående startad %i olästa meddelanden + Missat samtal + %i missat samtal Varning: tjänst inte redo Fel + Kan inte bygga destinationsadress från %s Okänt fel Samtal avvisat + Användare upptagen Användare ej funnen Okompatibla mediaparametrar + Din uppringare har låg bandbredd, video kan inte startas Nätverk otillgängligt Felaktigt inloggningsuppgifter + Obehörig Nätverksfel + Hämtning misslyckad. Kontrollera din nätverksanslutning eller försök igen senare. + Misslyckades med att ladda ner eller tillämpa fjärrleveransprofil... + Fjärrleverans + Vill du ändra leverans-URI? SIP-konto Hantera @@ -99,85 +258,162 @@ Lösenord* Användarnamn* Utgående proxy + SIP proxy värdnamn eller ip-adress (valfritt) + Dirigera alla samtal via SIP-proxy + Exempel: john om ditt konto är john@sip.exempel.org + sip.exempel.org om ditt konto är john@sip.exempel.org + Du måste skriva in ditt lösenord igen om du redigerar ditt användarnamn och/eller domänen + Upphör AVPF + AVPF-regelbundet RTCP-intervall i sekunder (mellan 1 och 5) Ersätt + med 00 + Länka ditt konto + Auth userid + Ange autentisering userid (valfritt) Visningsnamn + Ange visningsnamn (valfritt) Prefix + Transport UDP TCP TLS Ta bort detta konto + Ändra lösenord Använd som standard + Lösenordet ändrat SIP-konton Standardkonto Lägg till konto + Butik inom app Tunnel Värdnamn Port Läge + + inaktiverad + Endast 3G + alltid + automatisk + Ingen Inställningar Aktivera video Ljud + Ekoeliminering + Ta bort ekot som hörs av andra änden + Ekoeliminerarkalibrering + Testa eko Kalibrerar... + Kalibrerad om %s ms Inget eko misslyckades + Adaptiv hastighetskontroll + Kodek bithastighetsgräns + Kodek Video + Videoöverlagring + Visningsvideo i överlagring när det är utanför applikationen Använd front-kamera Initiera videosamtal Skicka alltid videoförfrågningar Acceptera inkommande videoförfrågningar Acceptera alltid videoförfrågningar + Förinställd video Föredragen videostorlek + Föredragen FPS Bandbreddsgräns i kbit/s + Kodek Ring + Använd enhetens ringsignal + Automatiskt svara på inkommande samtal + Automatisk svarstid (i millisekunder) + Skicka in-band DTMF (RFC2833) + Skicka ut-band DTMF (SIP INFO) + Röstbrevlåda URI Chatt Delar server + Redigera inte om du inte vet vad du gör! + Använd LIME-kryptering + Inaktiverad + Obligatorisk + Föredragen + LIME kräver ZRTP-kryptering.\nGenom att aktivera LIME aktiverar du automatiskt ZRTP-mediekryptering. Nätverk + Använd endast wifi + Doze-läge + STUN / TURN-server Aktivera ICE + Aktivera TURN + STUN / TURN användarnamn (valfritt) + STUN / TURN lösenord (valfritt) Aktivera UPNP Använd slumpade portar SIP-port att använda + Videoport eller portintervall + Ljudport eller portintervall + Videoport eller portintervall (minport-maxport) + Ljudport eller portintervall (minport-maxport) Media-kryptering + Aktivera push-meddelanden + Tillåt IPv6 Avancerat + Felsök + Felsök + Prenumerera på vänlista Bakgrundsläge Aktivera animeringar + Aktivera serviceanmälan Starta vid uppstart + Fjärrleverans + Android-appinställningar Primärt konto Visningsnamn Användarnamn Ljud-hacks + Använd specifikt läge hack + 0=MODE_NORMAL (standard), 2=MODE_IN_CALL + Använd rutt API hack Använd Galaxy S-ljudhack Tillbaka + Uppringare + Meny Växla micro Växla högtalare Avvisa Lägg på Acceptera Redigera + Redigera lista + Giltig Lägg till kontakter Ny kontakt Ring + Baksteg Chatt Ring tillbaka + Återgå till uppringare Kontakt-bild Skicka meddelande + Detaljer Ta bort Lägg till samtal Ny diskussion Sök + Sök kontakt + Sök land Alla kontakter Linphone-kontakter + Samtalsriktning Alla samtal Missade samtal Växla video @@ -192,9 +428,31 @@ Avbryt-knapp Meddelandestatus Konferens + Användarnamn fält + Användarnamn fält + Telefonnummerfält + Visningsnamn fält + Domänfält + Fjärrleverans fält + Bekräfta lösenordsfält + E-postfält Standardkonto + Avmarkera alla + Markera alla + Ta bort markering Förnamn Efternamn + Organisation + Tillbaka till samtal + Skicka en fil + Inkommande fil + Meddelande + Oläst chattmeddelande Överför + Hörlur Bluetooth + Samtalsalternativ + Ljudväg + Avsluta konferens + Linphone-avisering diff --git a/res/values/non_localizable_strings.xml b/res/values/non_localizable_strings.xml index d42ecd3ae..70111a918 100644 --- a/res/values/non_localizable_strings.xml +++ b/res/values/non_localizable_strings.xml @@ -135,6 +135,7 @@ pref_rfc2833_dtmf_key pref_sipinfo_dtmf_key pref_voice_mail_key + pref_dialer_call_key pref_upnp_enable_key pref_first_time_linphone_chat_storage diff --git a/res/values/strings.xml b/res/values/strings.xml index 696f651a4..459fd769b 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -223,6 +223,7 @@ IP Family: Upload bandwidth: Download bandwidth: + Estimated download bandwidth: ICE connectivity: Sent video resolution: Received video resolution: @@ -359,6 +360,7 @@ Send out-band DTMFs(SIP INFO) Call timeout(in seconds) Voice mail URI + Use Linphone as default phone app Chat diff --git a/res/xml/preferences.xml b/res/xml/preferences.xml index 5fab85a1f..60dc49a79 100644 --- a/res/xml/preferences.xml +++ b/res/xml/preferences.xml @@ -225,6 +225,12 @@ android:key="@string/pref_voice_mail_key" android:persistent="false"/> + + + @@ -264,11 +270,6 @@ android:key="@string/pref_wifi_only_key" android:persistent="false"/> - - n) { - LinphoneProxyConfig proxy = LinphoneManager.getLc().getProxyConfigList()[n]; + ProxyConfig proxy = LinphoneManager.getLc().getProxyConfigList()[n]; natPolicy = proxy.getNatPolicy(); if (natPolicy == null) { natPolicy = LinphoneManager.getLc().createNatPolicy(); @@ -337,8 +335,7 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen } } - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc() - , LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key)); @@ -433,8 +430,8 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen EditTextPreference avpfRRInterval = (EditTextPreference) advanced.getPreference(8); avpfRRInterval.setOnPreferenceChangeListener(avpfRRIntervalChangedListener); if (!isNewAccount){ - avpfRRInterval.setText(mPrefs.getAvpfRRInterval(n)); - avpfRRInterval.setSummary(mPrefs.getAvpfRRInterval(n)); + avpfRRInterval.setText(mPrefs.getAvpfRrInterval(n)); + avpfRRInterval.setSummary(mPrefs.getAvpfRrInterval(n)); } CheckBoxPreference escape = (CheckBoxPreference) advanced.getPreference(9); @@ -486,17 +483,17 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen dialog.dismiss(); } }); - alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { + /*alert.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - LinphoneAccountCreator.PasswordCheck status = accountCreator.setPassword(pass1.getText().toString()); - if (status.equals(LinphoneAccountCreator.PasswordCheck.Ok)) { + AccountCreator.PasswordStatus status = accountCreator.setPassword(pass1.getText().toString()); + if (status.equals(AccountCreator.PasswordStatus.Ok)) { if (pass1.getText().toString().compareTo(pass2.getText().toString()) == 0) { accountCreator.setUsername(mPrefs.getAccountUsername(n)); accountCreator.setHa1(mPrefs.getAccountHa1(n)); - LinphoneAccountCreator.RequestStatus req_status = accountCreator.updatePassword(pass1.getText().toString()); - if (!req_status.equals(LinphoneAccountCreator.RequestStatus.Ok)) { - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(req_status) + AccountCreator.Status req_status = accountCreator.updatePassword(pass1.getText().toString()); + if (!req_status.equals(AccountCreator.Status.RequestOk)) { + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(req_status) , LinphoneActivity.instance()); } else { progress = ProgressDialog.show(LinphoneActivity.instance(), null, null); @@ -515,7 +512,7 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen } LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForPasswordStatus(status), LinphoneActivity.instance()); } - }); + });*/ // TODO FIXME alert.setView(layout); alert.show(); @@ -590,7 +587,7 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen if(isNewAccount){ builder.saveNewAccount(); } - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } LinphoneActivity.instance().isNewProxyConfig(); @@ -600,58 +597,58 @@ public class AccountPreferencesFragment extends PreferencesListFragment implemen } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountExist(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onCreateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onLinkAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAlias(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountActivated(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onRecoverAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountLinked(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAliasUsed(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (progress != null) progress.dismiss(); - if (status.equals(LinphoneAccountCreator.RequestStatus.Ok)) { + if (status.equals(AccountCreator.Status.RequestOk)) { mPrefs.setAccountPassword(n, accountCreator.getPassword()); PreferenceCategory account = (PreferenceCategory) getPreferenceScreen().findPreference(getString(R.string.pref_sipaccount_key)); ((EditTextPreference) account.getPreference(2)).setText(mPrefs.getAccountPassword(n)); LinphoneUtils.displayErrorAlert(getString(R.string.pref_password_changed), LinphoneActivity.instance()); } else { - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status), LinphoneActivity.instance()); + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status), LinphoneActivity.instance()); } } } diff --git a/src/android/org/linphone/BandwidthManager.java b/src/android/org/linphone/BandwidthManager.java index 706052617..95be52c00 100644 --- a/src/android/org/linphone/BandwidthManager.java +++ b/src/android/org/linphone/BandwidthManager.java @@ -1,6 +1,8 @@ +package org.linphone; + /* BandwithManager.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,10 +18,9 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCore; +import org.linphone.core.CallParams; +import org.linphone.core.Core; public class BandwidthManager { @@ -28,7 +29,7 @@ public class BandwidthManager { public static final int LOW_BANDWIDTH = 2; private static BandwidthManager instance; - + private int currentProfile = HIGH_RESOLUTION; public int getCurrentProfile() {return currentProfile;} @@ -41,20 +42,20 @@ public class BandwidthManager { private BandwidthManager() { // FIXME register a listener on NetworkManager to get notified of network state // FIXME register a listener on Preference to get notified of change in video enable value - + // FIXME initially get those values } - public void updateWithProfileSettings(LinphoneCore lc, LinphoneCallParams callParams) { + public void updateWithProfileSettings(Core lc, CallParams callParams) { if (callParams != null) { // in call // Update video parm if if (!isVideoPossible()) { // NO VIDEO - callParams.setVideoEnabled(false); - callParams.setAudioBandwidth(40); + callParams.enableVideo(false); + callParams.setAudioBandwidthLimit(40); } else { - callParams.setVideoEnabled(true); - callParams.setAudioBandwidth(0); // disable limitation + callParams.enableVideo(true); + callParams.setAudioBandwidthLimit(0); // disable limitation } } } diff --git a/src/android/org/linphone/BluetoothManager.java b/src/android/org/linphone/BluetoothManager.java index b41a3aea9..414c9813c 100644 --- a/src/android/org/linphone/BluetoothManager.java +++ b/src/android/org/linphone/BluetoothManager.java @@ -1,7 +1,7 @@ package org.linphone; /* BluetoothManager.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,6 +17,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import java.util.List; import org.linphone.mediastream.Log; @@ -34,9 +35,6 @@ import android.content.IntentFilter; import android.media.AudioManager; import android.os.Build; -/** - * @author Sylvain Berfini - */ @TargetApi(Build.VERSION_CODES.HONEYCOMB) public class BluetoothManager extends BroadcastReceiver { public int PLANTRONICS_BUTTON_PRESS = 1; diff --git a/src/android/org/linphone/BootReceiver.java b/src/android/org/linphone/BootReceiver.java index 51f1b8282..adbc15718 100644 --- a/src/android/org/linphone/BootReceiver.java +++ b/src/android/org/linphone/BootReceiver.java @@ -1,6 +1,8 @@ +package org.linphone; + /* BootReceiver.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,10 +18,9 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LpConfig; +import org.linphone.core.Factory; +import org.linphone.core.Config; import org.linphone.mediastream.Log; import android.content.BroadcastReceiver; @@ -31,12 +32,10 @@ public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equalsIgnoreCase(Intent.ACTION_SHUTDOWN)) { - android.util.Log.d("LinphoneBootReceiver", "Device is shutting down, destroying LinphoneCore to unregister"); + android.util.Log.d("LinphoneBootReceiver", "Device is shutting down, destroying Core to unregister"); LinphoneManager.destroy(); } else { - String path = context.getFilesDir().getAbsolutePath() + "/.linphonerc"; - LpConfig lpConfig = LinphoneCoreFactory.instance().createLpConfig(path); - boolean autostart = lpConfig.getBool("app", "auto_start", false); + boolean autostart = LinphonePreferences.instance().isAutoStartEnabled(); android.util.Log.i("LinphoneBootReceiver", "Device is starting, auto_start is " + autostart); if (autostart) { Intent lLinphoneServiceIntent = new Intent(Intent.ACTION_MAIN); diff --git a/src/android/org/linphone/CallActivity.java b/src/android/org/linphone/CallActivity.java index 8dfadd1e7..e02625378 100644 --- a/src/android/org/linphone/CallActivity.java +++ b/src/android/org/linphone/CallActivity.java @@ -1,7 +1,8 @@ package org.linphone; + /* CallActivity.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,6 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import android.Manifest; import android.app.Activity; import android.app.Dialog; @@ -60,19 +62,20 @@ import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCallStats; -import org.linphone.core.LinphoneCallStats.LinphoneAddressFamily; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphonePlayer; +import org.linphone.core.Address; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.CallParams; +import org.linphone.core.CallStats; +import org.linphone.core.CallStats.AddressFamily; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatRoom; +import org.linphone.core.Core; +import org.linphone.core.CoreException; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.Player; import org.linphone.core.PayloadType; +import org.linphone.core.StreamType; import org.linphone.mediastream.Log; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.ui.Numpad; @@ -84,9 +87,6 @@ import java.util.List; import java.util.Timer; import java.util.TimerTask; -/** - * @author Sylvain Berfini - */ public class CallActivity extends LinphoneGenericActivity implements OnClickListener, ActivityCompat.OnRequestPermissionsResultCallback { private final static int SECONDS_BEFORE_HIDING_CONTROLS = 4000; private final static int SECONDS_BEFORE_DENYING_CALL_UPDATE = 30000; @@ -121,7 +121,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private LayoutInflater inflater; private ViewGroup container; private boolean isConferenceRunning = false; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; private DrawerLayout sideMenu; private Handler mHandler = new Handler(); @@ -157,14 +157,14 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList mEncoderTexts = new HashMap(); mDecoderTexts = new HashMap(); - mListener = new LinphoneCoreListenerBase() { + mListener = new CoreListenerStub() { @Override - public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { + public void onMessageReceived(Core lc, ChatRoom cr, ChatMessage message) { displayMissedChats(); } @Override - public void callState(LinphoneCore lc, final LinphoneCall call, LinphoneCall.State state, String message) { + public void onCallStateChanged(Core lc, final Call call, Call.State state, String message) { if (LinphoneManager.getLc().getCallsNb() == 0) { if (status != null) { LinphoneService.instance().removeSasNotification(); @@ -187,7 +187,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } else if (state == State.Resuming) { if(LinphonePreferences.instance().isVideoEnabled()){ status.refreshStatusItems(call, isVideoEnabled(call)); - if(call.getCurrentParams().getVideoEnabled()){ + if(call.getCurrentParams().videoEnabled()){ showVideoView(); } } @@ -202,21 +202,21 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList videoProgress.setVisibility(View.GONE); status.refreshStatusItems(call, isVideoEnabled(call)); } - } else if (state == State.CallUpdatedByRemote) { + } else if (state == State.UpdatedByRemote) { // If the correspondent proposes video while audio call boolean videoEnabled = LinphonePreferences.instance().isVideoEnabled(); if (!videoEnabled) { acceptCallUpdate(false); } - boolean remoteVideo = call.getRemoteParams().getVideoEnabled(); - boolean localVideo = call.getCurrentParams().getVideoEnabled(); + boolean remoteVideo = call.getRemoteParams().videoEnabled(); + boolean localVideo = call.getCurrentParams().videoEnabled(); boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests(); - if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) { + if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !(LinphoneManager.getLc().getConference() != null)) { showAcceptCallUpdateDialog(); createTimerForDialog(SECONDS_BEFORE_DENYING_CALL_UPDATE); } -// else if (remoteVideo && !LinphoneManager.getLc().isInConference() && autoAcceptCameraPolicy) { +// else if (remoteVideo && !LinphoneManager.getLc().(getConference() != null) && autoAcceptCameraPolicy) { // mHandler.post(new Runnable() { // @Override // public void run() { @@ -231,12 +231,12 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } @Override - public void callEncryptionChanged(LinphoneCore lc, final LinphoneCall call, boolean encrypted, String authenticationToken) { + public void onCallEncryptionChanged(Core lc, final Call call, boolean encrypted, String authenticationToken) { if (status != null) { - if(call.getCurrentParams().getMediaEncryption().equals(LinphoneCore.MediaEncryption.ZRTP) && !call.isAuthenticationTokenVerified()){ + if(call.getCurrentParams().getMediaEncryption().equals(Core.MediaEncryption.ZRTP) && !call.getAuthenticationTokenVerified()){ status.showZRTPDialog(call); } - status.refreshStatusItems(call, call.getCurrentParams().getVideoEnabled()); + status.refreshStatusItems(call, call.getCurrentParams().videoEnabled()); } } @@ -246,7 +246,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList initUI(); if (LinphoneManager.getLc().getCallsNb() > 0) { - LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; + Call call = LinphoneManager.getLc().getCalls()[0]; if (LinphoneUtils.isCallEstablished(call)) { enableAndRefreshInCallActions(); @@ -268,8 +268,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList refreshInCallActions(); return; } else { - isSpeakerEnabled = LinphoneManager.getLc().isSpeakerEnabled(); - isMicMuted = LinphoneManager.getLc().isMicMuted(); + isSpeakerEnabled = LinphoneManager.getInstance().isSpeakerEnabled(); + isMicMuted = !LinphoneManager.getLc().micEnabled(); } Fragment callFragment; @@ -308,17 +308,17 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList }.start(); } - private boolean isVideoEnabled(LinphoneCall call) { + private boolean isVideoEnabled(Call call) { if(call != null){ - return call.getCurrentParams().getVideoEnabled(); + return call.getCurrentParams().videoEnabled(); } return false; } @Override protected void onSaveInstanceState(Bundle outState) { - outState.putBoolean("Speaker", LinphoneManager.getLc().isSpeakerEnabled()); - outState.putBoolean("Mic", LinphoneManager.getLc().isMicMuted()); + outState.putBoolean("Speaker", LinphoneManager.getInstance().isSpeakerEnabled()); + outState.putBoolean("Mic", !LinphoneManager.getLc().micEnabled()); outState.putBoolean("VideoCallPaused", isVideoCallPaused); outState.putBoolean("AskingVideo", isVideoAsk); outState.putLong("TimeRemind", TimeRemind); @@ -574,8 +574,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private void enableAndRefreshInCallActions() { int confsize = 0; - if(LinphoneManager.getLc().isInConference()) { - confsize = LinphoneManager.getLc().getConferenceSize() - (LinphoneManager.getLc().isInConference() ? 1 : 0); + if( LinphoneManager.getLc().getConference() != null) { + confsize = LinphoneManager.getLc().getConferenceSize() - (LinphoneManager.getLc().getConference() != null ? 1 : 0); } //Enabled transfer button @@ -707,7 +707,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } else if (id == R.id.call_pause) { - LinphoneCall call = (LinphoneCall) v.getTag(); + Call call = (Call) v.getTag(); pauseOrResumeCall(call); } else if (id == R.id.conference_pause) { @@ -750,18 +750,18 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } private void disableVideo(final boolean videoDisabled) { - final LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); + final Call call = LinphoneManager.getLc().getCurrentCall(); if (call == null) { return; } if (videoDisabled) { - LinphoneCallParams params = LinphoneManager.getLc().createCallParams(call); - params.setVideoEnabled(false); + CallParams params = LinphoneManager.getLc().createCallParams(call); + params.enableVideo(false); LinphoneManager.getLc().updateCall(call, params); } else { videoProgress.setVisibility(View.VISIBLE); - if (call.getRemoteParams() != null && !call.getRemoteParams().isLowBandwidthEnabled()) { + if (call.getRemoteParams() != null && !call.getRemoteParams().lowBandwidthEnabled()) { LinphoneManager.getInstance().addVideo(); } else { displayCustomToast(getString(R.string.error_low_bandwidth), Toast.LENGTH_LONG); @@ -784,18 +784,18 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } private void switchVideo(final boolean displayVideo) { - final LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); + final Call call = LinphoneManager.getLc().getCurrentCall(); if (call == null) { return; } //Check if the call is not terminated - if(call.getState() == State.CallEnd || call.getState() == State.CallReleased) return; + if(call.getState() == State.End || call.getState() == State.Released) return; if (!displayVideo) { showAudioView(); } else { - if (!call.getRemoteParams().isLowBandwidthEnabled()) { + if (!call.getRemoteParams().lowBandwidthEnabled()) { LinphoneManager.getInstance().addVideo(); if (videoCallFragment == null || !videoCallFragment.isVisible()) showVideoView(); @@ -880,9 +880,9 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } private void toggleMicro() { - LinphoneCore lc = LinphoneManager.getLc(); + Core lc = LinphoneManager.getLc(); isMicMuted = !isMicMuted; - lc.muteMic(isMicMuted); + lc.enableMic(!isMicMuted); if (isMicMuted) { micro.setImageResource(R.drawable.micro_selected); } else { @@ -898,7 +898,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList if (isSpeakerEnabled) { LinphoneManager.getInstance().routeAudioToSpeaker(); speaker.setImageResource(R.drawable.speaker_selected); - LinphoneManager.getLc().enableSpeaker(isSpeakerEnabled); + LinphoneManager.getInstance().enableSpeaker(isSpeakerEnabled); } else { Log.d("Toggle speaker off, routing back to earpiece"); LinphoneManager.getInstance().routeAudioToReceiver(); @@ -906,8 +906,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } } - public void pauseOrResumeCall(LinphoneCall call) { - LinphoneCore lc = LinphoneManager.getLc(); + public void pauseOrResumeCall(Call call) { + Core lc = LinphoneManager.getLc(); if (call != null && LinphoneManager.getLc().getCurrentCall() == call) { lc.pauseCall(call); if (isVideoEnabled(LinphoneManager.getLc().getCurrentCall())) { @@ -926,12 +926,12 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } private void hangUp() { - LinphoneCore lc = LinphoneManager.getLc(); - LinphoneCall currentCall = lc.getCurrentCall(); + Core lc = LinphoneManager.getLc(); + Call currentCall = lc.getCurrentCall(); if (currentCall != null) { lc.terminateCall(currentCall); - } else if (lc.isInConference()) { + } else if (lc.getConference() != null) { lc.terminateConference(); } else { lc.terminateAllCalls(); @@ -1077,22 +1077,19 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList timer.cancel(); } - LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); + Call call = LinphoneManager.getLc().getCurrentCall(); if (call == null) { return; } - LinphoneCallParams params = LinphoneManager.getLc().createCallParams(call); + CallParams params = LinphoneManager.getLc().createCallParams(call); if (accept) { - params.setVideoEnabled(true); - LinphoneManager.getLc().enableVideo(true, true); + params.enableVideo(true); + LinphoneManager.getLc().enableVideoCapture(true); + LinphoneManager.getLc().enableVideoDisplay(true); } - try { - LinphoneManager.getLc().acceptCallUpdate(call, params); - } catch (LinphoneCoreException e) { - Log.e(e); - } + LinphoneManager.getLc().acceptCallUpdate(call, params); } public void startIncomingCallActivity() { @@ -1177,11 +1174,11 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList instance = this; super.onResume(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } - isSpeakerEnabled = LinphoneManager.getLc().isSpeakerEnabled(); + isSpeakerEnabled = LinphoneManager.getInstance().isSpeakerEnabled(); refreshIncallUi(); handleViewIntent(); @@ -1201,32 +1198,32 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private void handleViewIntent() { Intent intent = getIntent(); if(intent != null && intent.getAction() == "android.intent.action.VIEW") { - LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); + Call call = LinphoneManager.getLc().getCurrentCall(); if(call != null && isVideoEnabled(call)) { - LinphonePlayer player = call.getPlayer(); + Player player = call.getPlayer(); String path = intent.getData().getPath(); Log.i("Openning " + path); - int openRes = player.open(path); - if(openRes == -1) { + /*int openRes = */player.open(path); + /*if(openRes == -1) { String message = "Could not open " + path; Log.e(message); Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); return; - } + }*/ Log.i("Start playing"); - if(player.start() == -1) { - player.close(); + /*if(*/player.start()/* == -1) {*/; + /*player.close(); String message = "Could not start playing " + path; Log.e(message); Toast.makeText(getApplicationContext(), message, Toast.LENGTH_SHORT).show(); - } + }*/ } } } @Override protected void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -1301,14 +1298,14 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList //CALL INFORMATION - private void displayCurrentCall(LinphoneCall call){ - LinphoneAddress lAddress = call.getRemoteAddress(); + private void displayCurrentCall(Call call){ + Address lAddress = call.getRemoteAddress(); TextView contactName = (TextView) findViewById(R.id.current_contact_name); setContactInformation(contactName, contactPicture, lAddress); registerCallDurationTimer(null, call); } - private void displayPausedCalls(Resources resources, final LinphoneCall call, int index) { + private void displayPausedCalls(Resources resources, final Call call, int index) { // Control Row LinearLayout callView; @@ -1328,7 +1325,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList TextView contactName = (TextView) callView.findViewById(R.id.contact_name); ImageView contactImage = (ImageView) callView.findViewById(R.id.contact_picture); - LinphoneAddress lAddress = call.getRemoteAddress(); + Address lAddress = call.getRemoteAddress(); setContactInformation(contactName, contactImage, lAddress); displayCallStatusIconAndReturnCallPaused(callView, call); registerCallDurationTimer(callView, call); @@ -1336,7 +1333,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList callsList.addView(callView); } - private void setContactInformation(TextView contactName, ImageView contactPicture, LinphoneAddress lAddress) { + private void setContactInformation(TextView contactName, ImageView contactPicture, Address lAddress) { LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(lAddress); if (lContact == null) { contactName.setText(LinphoneUtils.getAddressDisplayName(lAddress)); @@ -1347,28 +1344,28 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } } - private boolean displayCallStatusIconAndReturnCallPaused(LinearLayout callView, LinphoneCall call) { + private boolean displayCallStatusIconAndReturnCallPaused(LinearLayout callView, Call call) { boolean isCallPaused, isInConference; - ImageView callState = (ImageView) callView.findViewById(R.id.call_pause); - callState.setTag(call); - callState.setOnClickListener(this); + ImageView onCallStateChanged = (ImageView) callView.findViewById(R.id.call_pause); + onCallStateChanged.setTag(call); + onCallStateChanged.setOnClickListener(this); if (call.getState() == State.Paused || call.getState() == State.PausedByRemote || call.getState() == State.Pausing) { - callState.setImageResource(R.drawable.pause); + onCallStateChanged.setImageResource(R.drawable.pause); isCallPaused = true; isInConference = false; } else if (call.getState() == State.OutgoingInit || call.getState() == State.OutgoingProgress || call.getState() == State.OutgoingRinging) { isCallPaused = false; isInConference = false; } else { - isInConference = isConferenceRunning && call.isInConference(); + isInConference = isConferenceRunning && call.getConference() != null; isCallPaused = false; } return isCallPaused || isInConference; } - private void registerCallDurationTimer(View v, LinphoneCall call) { + private void registerCallDurationTimer(View v, Call call) { int callDuration = call.getDuration(); if (callDuration == 0 && call.getState() != State.StreamsRunning) { return; @@ -1390,8 +1387,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } public void refreshCallList(Resources resources) { - isConferenceRunning = LinphoneManager.getLc().isInConference(); - List pausedCalls = LinphoneUtils.getCallsInState(LinphoneManager.getLc(), Arrays.asList(State.PausedByRemote)); + isConferenceRunning = LinphoneManager.getLc().getConference() != null; + List pausedCalls = LinphoneUtils.getCallsInState(LinphoneManager.getLc(), Arrays.asList(State.PausedByRemote)); //MultiCalls if(LinphoneManager.getLc().getCallsNb() > 1){ @@ -1431,12 +1428,12 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } boolean isConfPaused = false; - for (LinphoneCall call : LinphoneManager.getLc().getCalls()) { - if (call.isInConference() && !isConferenceRunning) { + for (Call call : LinphoneManager.getLc().getCalls()) { + if (call.getConference() != null && !isConferenceRunning) { isConfPaused = true; index++; } else { - if (call != LinphoneManager.getLc().getCurrentCall() && !call.isInConference()) { + if (call != LinphoneManager.getLc().getCurrentCall() && !(call.getConference() != null)) { displayPausedCalls(resources, call, index); index++; } else { @@ -1464,10 +1461,10 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } //Conference - private void exitConference(final LinphoneCall call){ - LinphoneCore lc = LinphoneManager.getLc(); + private void exitConference(final Call call){ + Core lc = LinphoneManager.getLc(); - if (call.isInConference()) { + if (call.getConference() != null) { lc.removeFromConference(call); if (lc.getConferenceSize() <= 1) { lc.leaveConference(); @@ -1481,10 +1478,10 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } public void pauseOrResumeConference() { - LinphoneCore lc = LinphoneManager.getLc(); + Core lc = LinphoneManager.getLc(); conferenceStatus = (ImageView) findViewById(R.id.conference_pause); if(conferenceStatus != null) { - if (lc.isInConference()) { + if (lc.getConference() != null) { conferenceStatus.setImageResource(R.drawable.pause_big_over_selected); lc.leaveConference(); } else { @@ -1495,14 +1492,14 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList refreshCallList(getResources()); } - private void displayConferenceParticipant(int index, final LinphoneCall call){ + private void displayConferenceParticipant(int index, final Call call){ LinearLayout confView = (LinearLayout) inflater.inflate(R.layout.conf_call_control_row, container, false); conferenceList.setId(index + 1); TextView contact = (TextView) confView.findViewById(R.id.contactNameOrNumber); LinphoneContact lContact = ContactsManager.getInstance().findContactFromAddress(call.getRemoteAddress()); if (lContact == null) { - contact.setText(call.getRemoteAddress().getUserName()); + contact.setText(call.getRemoteAddress().getUsername()); } else { contact.setText(lContact.getFullName()); } @@ -1541,8 +1538,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList //Conference participant int index = 1; - for (LinphoneCall call : LinphoneManager.getLc().getCalls()) { - if (call.isInConference()) { + for (Call call : LinphoneManager.getLc().getCalls()) { + if (call.getConference() != null) { displayConferenceParticipant(index, call); index++; } @@ -1555,8 +1552,8 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private void displayMissedChats() { int count = 0; - LinphoneChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); - for (LinphoneChatRoom chatroom : chats) { + ChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); + for (ChatRoom chatroom : chats) { count += chatroom.getUnreadMessagesCount(); } @@ -1577,7 +1574,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private String getEncoderText(String mime){ String ret = mEncoderTexts.get(mime); if (ret == null){ - org.linphone.mediastream.Factory msfactory = LinphoneManager.getLc().getMSFactory(); + org.linphone.mediastream.Factory msfactory = LinphoneManager.getLc().getMediastreamerFactory(); ret = msfactory.getEncoderText(mime); mEncoderTexts.put(mime, ret); } @@ -1586,16 +1583,16 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList private String getDecoderText(String mime){ String ret = mDecoderTexts.get(mime); if (ret == null){ - org.linphone.mediastream.Factory msfactory = LinphoneManager.getLc().getMSFactory(); + org.linphone.mediastream.Factory msfactory = LinphoneManager.getLc().getMediastreamerFactory(); ret = msfactory.getDecoderText(mime); mDecoderTexts.put(mime, ret); } return ret; } - private void displayMediaStats(LinphoneCallParams params, LinphoneCallStats stats + private void displayMediaStats(CallParams params, CallStats stats , PayloadType media , View layout, TextView title, TextView codec, TextView dl - , TextView ul, TextView ice, TextView ip, TextView senderLossRate + , TextView ul, TextView edl, TextView ice, TextView ip, TextView senderLossRate , TextView receiverLossRate, TextView enc, TextView dec, TextView videoResolutionSent , TextView videoResolutionReceived, TextView videoFpsSent, TextView videoFpsReceived , boolean isVideo, TextView jitterBuffer) { @@ -1605,9 +1602,9 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList layout.setVisibility(View.VISIBLE); title.setVisibility(TextView.VISIBLE); if (media != null) { - mime = media.getMime(); + mime = media.getMimeType(); formatText(codec, getString(R.string.call_stats_codec), - mime + " / " + (media.getRate() / 1000) + "kHz"); + mime + " / " + (media.getClockRate() / 1000) + "kHz"); } if (mime != null ){ formatText(enc, getString(R.string.call_stats_encoder_name), getEncoderText(mime)); @@ -1617,11 +1614,15 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList String.valueOf((int) stats.getDownloadBandwidth()) + " kbits/s"); formatText(ul, getString(R.string.call_stats_upload), String.valueOf((int) stats.getUploadBandwidth()) + " kbits/s"); + if (isVideo) { + formatText(edl, getString(R.string.call_stats_estimated_download), + String.valueOf(0/*(int) stats.getEstimatedDownloadBandwidth()*/) + " kbits/s"); + } formatText(ice, getString(R.string.call_stats_ice), stats.getIceState().toString()); formatText(ip, getString(R.string.call_stats_ip), - (stats.getIpFamilyOfRemote() == LinphoneAddressFamily.INET_6.getInt()) ? - "IpV6" : (stats.getIpFamilyOfRemote() == LinphoneAddressFamily.INET.getInt()) ? + (stats.getIpFamilyOfRemote() == AddressFamily.Inet6) ? + "IpV6" : (stats.getIpFamilyOfRemote() == AddressFamily.Inet) ? "IpV4" : "Unknown"); formatText(senderLossRate, getString(R.string.call_stats_sender_loss_rate), new DecimalFormat("##.##").format(stats.getSenderLossRate()) + "%"); @@ -1630,10 +1631,10 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList if (isVideo) { formatText(videoResolutionSent, getString(R.string.call_stats_video_resolution_sent), - "\u2191 " + params.getSentVideoSize().toDisplayableString()); + "\u2191 " + params.getSentVideoDefinition().getName()); formatText(videoResolutionReceived, getString(R.string.call_stats_video_resolution_received), - "\u2193 " + params.getReceivedVideoSize().toDisplayableString()); + "\u2193 " + params.getReceivedVideoDefinition().getName()); formatText(videoFpsSent, getString(R.string.call_stats_video_fps_sent), "\u2191 " + params.getSentFramerate()); @@ -1642,7 +1643,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList "\u2193 " + params.getReceivedFramerate()); } else { formatText(jitterBuffer, getString(R.string.call_stats_jitter_buffer), - new DecimalFormat("##.##").format(stats.getJitterBufferSize()) + " ms"); + new DecimalFormat("##.##").format(stats.getJitterBufferSizeMs()) + " ms"); } } else { layout.setVisibility(View.GONE); @@ -1650,7 +1651,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList } } - public void initCallStatsRefresher(final LinphoneCall call, final View view) { + public void initCallStatsRefresher(final Call call, final View view) { if (mTimer != null && mTask != null) { return; } @@ -1667,6 +1668,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList final TextView ulAudio = (TextView) view.findViewById(R.id.uploadBandwith_audio); final TextView dlVideo = (TextView) view.findViewById(R.id.downloadBandwith_video); final TextView ulVideo = (TextView) view.findViewById(R.id.uploadBandwith_video); + final TextView edlVideo = (TextView) view.findViewById(R.id.estimatedDownloadBandwidth_video); final TextView iceAudio = (TextView) view.findViewById(R.id.ice_audio); final TextView iceVideo = (TextView) view.findViewById(R.id.ice_video); final TextView videoResolutionSent = (TextView) view.findViewById(R.id.video_resolution_sent); @@ -1693,7 +1695,7 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList return; } - if (titleAudio == null || codecAudio == null || dlVideo == null || iceAudio == null + if (titleAudio == null || codecAudio == null || dlVideo == null || edlVideo == null || iceAudio == null || videoResolutionSent == null || videoLayout == null || titleVideo == null || ipVideo == null || ipAudio == null || codecVideo == null || dlAudio == null || ulAudio == null || ulVideo == null || iceVideo == null @@ -1708,25 +1710,25 @@ public class CallActivity extends LinphoneGenericActivity implements OnClickList if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() == null) return; synchronized(LinphoneManager.getLc()) { if (LinphoneActivity.isInstanciated()) { - LinphoneCallParams params = call.getCurrentParams(); + CallParams params = call.getCurrentParams(); if (params != null) { - LinphoneCallStats audioStats = call.getAudioStats(); - LinphoneCallStats videoStats = null; + CallStats audioStats = call.getStats(StreamType.Audio); + CallStats videoStats = null; - if (params.getVideoEnabled()) - videoStats = call.getVideoStats(); + if (params.videoEnabled()) + videoStats = call.getStats(StreamType.Video); - PayloadType payloadAudio = params.getUsedAudioCodec(); - PayloadType payloadVideo = params.getUsedVideoCodec(); + PayloadType payloadAudio = params.getUsedAudioPayloadType(); + PayloadType payloadVideo = params.getUsedVideoPayloadType(); displayMediaStats(params, audioStats, payloadAudio, audioLayout - , titleAudio, codecAudio, dlAudio, ulAudio, iceAudio + , titleAudio, codecAudio, dlAudio, ulAudio, null, iceAudio , ipAudio, senderLossRateAudio, receiverLossRateAudio , encoderAudio, decoderAudio, null, null, null, null , false, jitterBufferAudio); displayMediaStats(params, videoStats, payloadVideo, videoLayout - , titleVideo, codecVideo, dlVideo, ulVideo, iceVideo + , titleVideo, codecVideo, dlVideo, ulVideo, edlVideo, iceVideo , ipVideo, senderLossRateVideo, receiverLossRateVideo , encoderVideo, decoderVideo , videoResolutionSent, videoResolutionReceived diff --git a/src/android/org/linphone/CallAudioFragment.java b/src/android/org/linphone/CallAudioFragment.java index edadd57ea..1c9fefe13 100644 --- a/src/android/org/linphone/CallAudioFragment.java +++ b/src/android/org/linphone/CallAudioFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* CallAudioFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -25,9 +26,6 @@ import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewGroup; -/** - * @author Sylvain Berfini - */ public class CallAudioFragment extends Fragment { private CallActivity incallActvityInstance; diff --git a/src/android/org/linphone/CallIncomingActivity.java b/src/android/org/linphone/CallIncomingActivity.java index aa519650c..3b8db3f3e 100644 --- a/src/android/org/linphone/CallIncomingActivity.java +++ b/src/android/org/linphone/CallIncomingActivity.java @@ -1,6 +1,8 @@ +package org.linphone; + /* CallIncomingActivity.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import android.Manifest; import android.content.pm.ActivityInfo; @@ -32,12 +33,12 @@ import android.widget.LinearLayout; import android.widget.TextView; import android.widget.Toast; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.Address; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.CallParams; +import org.linphone.core.Core; +import org.linphone.core.CoreListenerStub; import org.linphone.mediastream.Log; import org.linphone.ui.LinphoneSliders.LinphoneSliderTriggered; @@ -49,8 +50,8 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin private TextView name, number; private ImageView contactPicture, accept, decline, arrow; - private LinphoneCall mCall; - private LinphoneCoreListenerBase mListener; + private Call mCall; + private CoreListenerStub mListener; private LinearLayout acceptUnlock; private LinearLayout declineUnlock; private boolean alreadyAcceptedOrDeniedCall, begin; @@ -93,7 +94,7 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin lookupCurrentCall(); if (LinphonePreferences.instance() != null && mCall != null && mCall.getRemoteParams() != null && LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests() && - mCall.getRemoteParams().getVideoEnabled()) { + mCall.getRemoteParams().videoEnabled()) { accept.setImageResource(R.drawable.call_video_start); } decline = (ImageView) findViewById(R.id.decline); @@ -181,16 +182,16 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin } }); - mListener = new LinphoneCoreListenerBase(){ + mListener = new CoreListenerStub(){ @Override - public void callState(LinphoneCore lc, LinphoneCall call, State state, String message) { - if (call == mCall && State.CallEnd == state) { + public void onCallStateChanged(Core lc, Call call, State state, String message) { + if (call == mCall && State.End == state) { finish(); } if (state == State.StreamsRunning) { - Log.e("CallIncommingActivity - onCreate - State.StreamsRunning - speaker = "+LinphoneManager.getLc().isSpeakerEnabled()); + Log.e("CallIncommingActivity - onCreate - State.StreamsRunning - speaker = "+LinphoneManager.getInstance().isSpeakerEnabled()); // The following should not be needed except some devices need it (e.g. Galaxy S). - LinphoneManager.getLc().enableSpeaker(LinphoneManager.getLc().isSpeakerEnabled()); + LinphoneManager.getInstance().enableSpeaker(LinphoneManager.getInstance().isSpeakerEnabled()); } } }; @@ -203,7 +204,7 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin protected void onResume() { super.onResume(); instance = this; - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } @@ -221,7 +222,7 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin } - LinphoneAddress address = mCall.getRemoteAddress(); + Address address = mCall.getRemoteAddress(); LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address); if (contact != null) { LinphoneUtils.setImagePictureFromUri(this, contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); @@ -240,7 +241,7 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin @Override protected void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -264,8 +265,8 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin private void lookupCurrentCall() { if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) { - List calls = LinphoneUtils.getLinphoneCalls(LinphoneManager.getLc()); - for (LinphoneCall call : calls) { + List calls = LinphoneUtils.getCalls(LinphoneManager.getLc()); + for (Call call : calls) { if (State.IncomingReceived == call.getState()) { mCall = call; break; @@ -290,7 +291,7 @@ public class CallIncomingActivity extends LinphoneGenericActivity implements Lin } alreadyAcceptedOrDeniedCall = true; - LinphoneCallParams params = LinphoneManager.getLc().createCallParams(mCall); + CallParams params = LinphoneManager.getLc().createCallParams(mCall); boolean isLowBandwidthConnection = !LinphoneUtils.isHighBandwidthConnection(LinphoneService.instance().getApplicationContext()); diff --git a/src/android/org/linphone/CallManager.java b/src/android/org/linphone/CallManager.java index f095cb9d3..1af123396 100644 --- a/src/android/org/linphone/CallManager.java +++ b/src/android/org/linphone/CallManager.java @@ -1,6 +1,8 @@ +package org.linphone; + /* CallManager.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,51 +18,47 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; +import org.linphone.core.Address; +import org.linphone.core.Call; +import org.linphone.core.CallParams; +import org.linphone.core.Core; +import org.linphone.core.CoreException; import org.linphone.mediastream.Log; /** * Handle call updating, reinvites. - * - * @author Guillaume Beraudo - * */ public class CallManager { private static CallManager instance; - + private CallManager() {} public static final synchronized CallManager getInstance() { if (instance == null) instance = new CallManager(); return instance; } - + private BandwidthManager bm() { return BandwidthManager.getInstance(); } - - - - public void inviteAddress(LinphoneAddress lAddress, boolean videoEnabled, boolean lowBandwidth) throws LinphoneCoreException { - LinphoneCore lc = LinphoneManager.getLc(); - - LinphoneCallParams params = lc.createCallParams(null); + + + + public void inviteAddress(Address lAddress, boolean videoEnabled, boolean lowBandwidth) throws CoreException { + Core lc = LinphoneManager.getLc(); + + CallParams params = lc.createCallParams(null); bm().updateWithProfileSettings(lc, params); - if (videoEnabled && params.getVideoEnabled()) { - params.setVideoEnabled(true); + if (videoEnabled && params.videoEnabled()) { + params.enableVideo(true); } else { - params.setVideoEnabled(false); + params.enableVideo(false); } - + if (lowBandwidth) { params.enableLowBandwidth(true); Log.d("Low bandwidth enabled in call params"); @@ -71,7 +69,7 @@ public class CallManager { - + /** * Add video to a currently running voice only call. * No re-invite is sent if the current call is already video @@ -79,22 +77,22 @@ public class CallManager { * @return if updateCall called */ boolean reinviteWithVideo() { - LinphoneCore lc = LinphoneManager.getLc(); - LinphoneCall lCall = lc.getCurrentCall(); + Core lc = LinphoneManager.getLc(); + Call lCall = lc.getCurrentCall(); if (lCall == null) { Log.e("Trying to reinviteWithVideo while not in call: doing nothing"); return false; } - LinphoneCallParams params = lc.createCallParams(lCall); + CallParams params = lc.createCallParams(lCall); + + if (params.videoEnabled()) return false; - if (params.getVideoEnabled()) return false; - // Check if video possible regarding bandwidth limitations bm().updateWithProfileSettings(lc, params); // Abort if not enough bandwidth... - if (!params.getVideoEnabled()) { + if (!params.videoEnabled()) { return false; } @@ -104,18 +102,18 @@ public class CallManager { } - + /** * Re-invite with parameters updated from profile. */ void reinvite() { - LinphoneCore lc = LinphoneManager.getLc(); - LinphoneCall lCall = lc.getCurrentCall(); + Core lc = LinphoneManager.getLc(); + Call lCall = lc.getCurrentCall(); if (lCall == null) { Log.e("Trying to reinvite while not in call: doing nothing"); return; } - LinphoneCallParams params = lc.createCallParams(lCall); + CallParams params = lc.createCallParams(lCall); bm().updateWithProfileSettings(lc, params); lc.updateCall(lCall, params); } @@ -126,15 +124,15 @@ public class CallManager { * The camera will be restarted when mediastreamer chain is recreated and setParameters is called. */ public void updateCall() { - LinphoneCore lc = LinphoneManager.getLc(); - LinphoneCall lCall = lc.getCurrentCall(); + Core lc = LinphoneManager.getLc(); + Call lCall = lc.getCurrentCall(); if (lCall == null) { Log.e("Trying to updateCall while not in call: doing nothing"); return; } - LinphoneCallParams params = lc.createCallParams(lCall); + CallParams params = lc.createCallParams(lCall); bm().updateWithProfileSettings(lc, params); lc.updateCall(lCall, null); } - + } diff --git a/src/android/org/linphone/CallOutgoingActivity.java b/src/android/org/linphone/CallOutgoingActivity.java index 87a2ce203..8094a0428 100644 --- a/src/android/org/linphone/CallOutgoingActivity.java +++ b/src/android/org/linphone/CallOutgoingActivity.java @@ -1,6 +1,8 @@ +package org.linphone; + /* CallOutgoingActivity.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,16 +18,15 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import java.util.ArrayList; import java.util.List; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.Address; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.Core; +import org.linphone.core.CoreListenerStub; import org.linphone.core.Reason; import org.linphone.mediastream.Log; @@ -50,8 +51,8 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC private TextView name, number; private ImageView contactPicture, micro, speaker, hangUp; - private LinphoneCall mCall; - private LinphoneCoreListenerBase mListener; + private Call mCall; + private CoreListenerStub mListener; private boolean isMicMuted, isSpeakerEnabled; public static CallOutgoingActivity instance() { @@ -92,9 +93,9 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC hangUp = (ImageView) findViewById(R.id.outgoing_hang_up); hangUp.setOnClickListener(this); - mListener = new LinphoneCoreListenerBase(){ + mListener = new CoreListenerStub(){ @Override - public void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State state, String message) { + public void onCallStateChanged(Core lc, Call call, Call.State state, String message) { if (call == mCall && State.Connected == state) { if (!LinphoneActivity.isInstanciated()) { return; @@ -103,14 +104,14 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC finish(); return; } else if (state == State.Error) { - // Convert LinphoneCore message for internalization + // Convert Core message for internalization if (call.getErrorInfo().getReason() == Reason.Declined) { displayCustomToast(getString(R.string.error_call_declined), Toast.LENGTH_SHORT); decline(); } else if (call.getErrorInfo().getReason() == Reason.NotFound) { displayCustomToast(getString(R.string.error_user_not_found), Toast.LENGTH_SHORT); decline(); - } else if (call.getErrorInfo().getReason() == Reason.Media) { + } else if (call.getErrorInfo().getReason() == Reason.NotAcceptable) { displayCustomToast(getString(R.string.error_incompatible_media), Toast.LENGTH_SHORT); decline(); } else if (call.getErrorInfo().getReason() == Reason.Busy) { @@ -120,8 +121,8 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC displayCustomToast(getString(R.string.error_unknown) + " - " + message, Toast.LENGTH_SHORT); decline(); } - }else if (state == State.CallEnd) { - // Convert LinphoneCore message for internalization + }else if (state == State.End) { + // Convert Core message for internalization if (call.getErrorInfo().getReason() == Reason.Declined) { displayCustomToast(getString(R.string.error_call_declined), Toast.LENGTH_SHORT); decline(); @@ -141,7 +142,7 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC protected void onResume() { super.onResume(); instance = this; - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } @@ -150,8 +151,8 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC // Only one call ringing at a time is allowed if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) { - List calls = LinphoneUtils.getLinphoneCalls(LinphoneManager.getLc()); - for (LinphoneCall call : calls) { + List calls = LinphoneUtils.getCalls(LinphoneManager.getLc()); + for (Call call : calls) { State cstate = call.getState(); if (State.OutgoingInit == cstate || State.OutgoingProgress == cstate || State.OutgoingRinging == cstate || State.OutgoingEarlyMedia == cstate) { @@ -174,7 +175,7 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC return; } - LinphoneAddress address = mCall.getRemoteAddress(); + Address address = mCall.getRemoteAddress(); LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address); if (contact != null) { LinphoneUtils.setImagePictureFromUri(this, contactPicture, contact.getPhotoUri(), contact.getThumbnailUri()); @@ -193,7 +194,7 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC @Override protected void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -217,7 +218,7 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC } else { micro.setImageResource(R.drawable.micro_default); } - LinphoneManager.getLc().muteMic(isMicMuted); + LinphoneManager.getLc().enableMic(!isMicMuted); } if (id == R.id.speaker) { isSpeakerEnabled = !isSpeakerEnabled; @@ -226,7 +227,7 @@ public class CallOutgoingActivity extends LinphoneGenericActivity implements OnC } else { speaker.setImageResource(R.drawable.speaker_default); } - LinphoneManager.getLc().enableSpeaker(isSpeakerEnabled); + LinphoneManager.getInstance().enableSpeaker(isSpeakerEnabled); } if (id == R.id.outgoing_hang_up) { decline(); diff --git a/src/android/org/linphone/CallVideoFragment.java b/src/android/org/linphone/CallVideoFragment.java index 6767a9b84..2adf658be 100644 --- a/src/android/org/linphone/CallVideoFragment.java +++ b/src/android/org/linphone/CallVideoFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* CallVideoFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,10 +18,11 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import org.linphone.compatibility.Compatibility; import org.linphone.compatibility.CompatibilityScaleGestureDetector; import org.linphone.compatibility.CompatibilityScaleGestureListener; -import org.linphone.core.LinphoneCall; +import org.linphone.core.Call; import org.linphone.mediastream.Log; import org.linphone.mediastream.video.AndroidVideoWindowImpl; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; @@ -39,9 +41,6 @@ import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.RelativeLayout; -/** - * @author Sylvain Berfini - */ public class CallVideoFragment extends Fragment implements OnGestureListener, OnDoubleTapListener, CompatibilityScaleGestureListener { private SurfaceView mVideoView; private SurfaceView mCaptureView; @@ -52,50 +51,50 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On private CompatibilityScaleGestureDetector mScaleDetector; private CallActivity inCallActivity; private int previewX, previewY; - + @SuppressWarnings("deprecation") // Warning useless because value is ignored and automatically set by new APIs. @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { View view; - if (LinphoneManager.getLc().hasCrappyOpenGL()) { + if (LinphoneManager.getLc().hasCrappyOpengl()) { view = inflater.inflate(R.layout.video_no_opengl, container, false); } else { view = inflater.inflate(R.layout.video, container, false); } - + mVideoView = (SurfaceView) view.findViewById(R.id.videoSurface); mCaptureView = (SurfaceView) view.findViewById(R.id.videoCaptureSurface); mCaptureView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); // Warning useless because value is ignored and automatically set by new APIs. fixZOrder(mVideoView, mCaptureView); - + androidVideoWindowImpl = new AndroidVideoWindowImpl(mVideoView, mCaptureView, new AndroidVideoWindowImpl.VideoWindowListener() { public void onVideoRenderingSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) { mVideoView = surface; - LinphoneManager.getLc().setVideoWindow(vw); + LinphoneManager.getLc().setNativeVideoWindowId(vw); } public void onVideoRenderingSurfaceDestroyed(AndroidVideoWindowImpl vw) { - + } public void onVideoPreviewSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) { mCaptureView = surface; - LinphoneManager.getLc().setPreviewWindow(mCaptureView); + LinphoneManager.getLc().setNativePreviewWindowId(mCaptureView); } public void onVideoPreviewSurfaceDestroyed(AndroidVideoWindowImpl vw) { - + } }); - + mVideoView.setOnTouchListener(new OnTouchListener() { public boolean onTouch(View v, MotionEvent event) { if (mScaleDetector != null) { mScaleDetector.onTouchEvent(event); } - + mGestureDetector.onTouchEvent(event); if (inCallActivity != null) { inCallActivity.displayVideoCallControlsIfHidden(); @@ -103,7 +102,7 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On return true; } }); - + mCaptureView.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View view, MotionEvent motionEvent) { @@ -130,7 +129,7 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On }); return view; } - + @Override public void onStart() { super.onStart(); @@ -145,59 +144,68 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On preview.setZOrderOnTop(true); preview.setZOrderMediaOverlay(true); // Needed to be able to display control layout over } - + public void switchCamera() { try { - int videoDeviceId = LinphoneManager.getLc().getVideoDevice(); - videoDeviceId = (videoDeviceId + 1) % AndroidCameraConfiguration.retrieveCameras().length; - LinphoneManager.getLc().setVideoDevice(videoDeviceId); + String currentDevice = LinphoneManager.getLc().getVideoDevice(); + String[] devices = LinphoneManager.getLc().getVideoDevicesList(); + int index = 0; + for (String d : devices) { + if (d == currentDevice) { + break; + } + index++; + } + String newDevice = devices[(index + 1) % devices.length]; + LinphoneManager.getLc().setVideoDevice(newDevice); + CallManager.getInstance().updateCall(); - + // previous call will cause graph reconstruction -> regive preview // window if (mCaptureView != null) { - LinphoneManager.getLc().setPreviewWindow(mCaptureView); + LinphoneManager.getLc().setNativePreviewWindowId(mCaptureView); } } catch (ArithmeticException ae) { Log.e("Cannot swtich camera : no camera"); } } - + @Override - public void onResume() { + public void onResume() { super.onResume(); - + if (LinphonePreferences.instance().isOverlayEnabled()) { LinphoneService.instance().destroyOverlay(); } if (androidVideoWindowImpl != null) { synchronized (androidVideoWindowImpl) { - LinphoneManager.getLc().setVideoWindow(androidVideoWindowImpl); + LinphoneManager.getLc().setNativeVideoWindowId(androidVideoWindowImpl); } } - - mGestureDetector = new GestureDetector(inCallActivity, this); + + mGestureDetector = new GestureDetector(inCallActivity, this); mScaleDetector = Compatibility.getScaleGestureDetector(inCallActivity, this); } @Override - public void onPause() { + public void onPause() { if (androidVideoWindowImpl != null) { synchronized (androidVideoWindowImpl) { /* * this call will destroy native opengl renderer which is used by * androidVideoWindowImpl */ - LinphoneManager.getLc().setVideoWindow(null); + LinphoneManager.getLc().setNativeVideoWindowId(null); } } if (LinphonePreferences.instance().isOverlayEnabled()) { LinphoneService.instance().createOverlay(); } - + super.onPause(); } - + public boolean onScale(CompatibilityScaleGestureDetector detector) { mZoomFactor *= detector.getScaleFactor(); // Don't let the object get too small or too large. @@ -207,9 +215,9 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On float landscapeZoomFactor = ((float) mVideoView.getWidth()) / (float) ((3 * mVideoView.getHeight()) / 4); mZoomFactor = Math.max(0.1f, Math.min(mZoomFactor, Math.max(portraitZoomFactor, landscapeZoomFactor))); - LinphoneCall currentCall = LinphoneManager.getLc().getCurrentCall(); + Call currentCall = LinphoneManager.getLc().getCurrentCall(); if (currentCall != null) { - currentCall.zoomVideo(mZoomFactor, mZoomCenterX, mZoomCenterY); + currentCall.zoom(mZoomFactor, mZoomCenterX, mZoomCenterY); return true; } return false; @@ -230,7 +238,7 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On } else if(distanceY > 0 && mZoomCenterY > 0) { mZoomCenterY -= 0.01; } - + if (mZoomCenterX > 1) mZoomCenterX = 1; if (mZoomCenterX < 0) @@ -239,12 +247,12 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On mZoomCenterY = 1; if (mZoomCenterY < 0) mZoomCenterY = 0; - - LinphoneManager.getLc().getCurrentCall().zoomVideo(mZoomFactor, mZoomCenterX, mZoomCenterY); + + LinphoneManager.getLc().getCurrentCall().zoom(mZoomFactor, mZoomCenterX, mZoomCenterY); return true; } } - + return false; } @@ -256,17 +264,17 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On float portraitZoomFactor = ((float) mVideoView.getHeight()) / (float) ((3 * mVideoView.getWidth()) / 4); // Zoom to make the video fill the screen horizontally float landscapeZoomFactor = ((float) mVideoView.getWidth()) / (float) ((3 * mVideoView.getHeight()) / 4); - + mZoomFactor = Math.max(portraitZoomFactor, landscapeZoomFactor); } else { resetZoom(); } - - LinphoneManager.getLc().getCurrentCall().zoomVideo(mZoomFactor, mZoomCenterX, mZoomCenterY); + + LinphoneManager.getLc().getCurrentCall().zoom(mZoomFactor, mZoomCenterX, mZoomCenterY); return true; } - + return false; } @@ -274,17 +282,17 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On mZoomFactor = 1.f; mZoomCenterX = mZoomCenterY = 0.5f; } - + @Override public void onDestroy() { inCallActivity = null; - + mCaptureView = null; if (mVideoView != null) { mVideoView.setOnTouchListener(null); mVideoView = null; } - if (androidVideoWindowImpl != null) { + if (androidVideoWindowImpl != null) { // Prevent linphone from crashing if correspondent hang up while you are rotating androidVideoWindowImpl.release(); androidVideoWindowImpl = null; @@ -297,10 +305,10 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On mScaleDetector.destroy(); mScaleDetector = null; } - + super.onDestroy(); } - + @Override public boolean onDown(MotionEvent e) { return true; // Needed to make the GestureDetector working @@ -324,12 +332,12 @@ public class CallVideoFragment extends Fragment implements OnGestureListener, On @Override public void onLongPress(MotionEvent e) { - + } @Override public void onShowPress(MotionEvent e) { - + } @Override diff --git a/src/android/org/linphone/ChatFragment.java b/src/android/org/linphone/ChatFragment.java index e9486eb6c..1097869e9 100644 --- a/src/android/org/linphone/ChatFragment.java +++ b/src/android/org/linphone/ChatFragment.java @@ -1,4 +1,5 @@ package org.linphone; + /* ChatFragment.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -76,16 +77,18 @@ import android.widget.TextView; import android.widget.Toast; import org.linphone.compatibility.Compatibility; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneBuffer; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatMessage.State; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneContent; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneFriend; +import org.linphone.core.Address; +import org.linphone.core.Buffer; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatMessage.State; +import org.linphone.core.ChatMessageListener; +import org.linphone.core.ChatRoom; +import org.linphone.core.Content; +import org.linphone.core.Core; +import org.linphone.core.Factory; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.Friend; +import org.linphone.core.FriendList; import org.linphone.mediastream.Log; import java.io.ByteArrayOutputStream; @@ -100,11 +103,16 @@ import java.util.Arrays; import java.util.Calendar; import java.util.List; import java.util.Locale; +import java.util.regex.Pattern; import static android.content.Intent.FLAG_GRANT_READ_URI_PERMISSION; +import static org.linphone.FragmentsAvailable.CHAT; +interface ChatUpdatedListener { + void onChatUpdated(); +} -public class ChatFragment extends Fragment implements OnClickListener, LinphoneChatMessage.LinphoneChatMessageListener, ContactsUpdatedListener{ +public class ChatFragment extends Fragment implements OnClickListener, ChatMessageListener, ContactsUpdatedListener { private static final int ADD_PHOTO = 1337; private static final int MENU_DELETE_MESSAGE = 0; private static final int MENU_PICTURE_SMALL = 2; @@ -118,7 +126,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private static final int SIZE_LARGE = 1500; private static final int SIZE_MAX = 2048; - private LinphoneChatRoom chatRoom; + private ChatRoom chatRoom; private String sipUri; private EditText message; private ImageView edit, selectAll, deselectAll, startCall, delete, sendImage, sendMessage, cancel; @@ -139,10 +147,24 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private ViewTreeObserver.OnGlobalLayoutListener keyboardListener; private ChatMessageAdapter adapter; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; private boolean newChatConversation = false; private String fileSharedUri, fileAlreadySharedUri; + private static ArrayList ChatUpdatedListeners; + + public static void createIfNotExist() { + if (ChatUpdatedListeners == null) + ChatUpdatedListeners = new ArrayList<>(); + } + + public static void addChatListener(ChatUpdatedListener listener) { + ChatUpdatedListeners.add(listener); + } + public static void removeChatListener(ChatUpdatedListener listener) { + ChatUpdatedListeners.remove(listener); + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -218,8 +240,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC sendImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (LinphoneManager.getLc().getLimeEncryption() == LinphoneCore.LinphoneLimeState.Mandatory - && (chatRoom == null || !chatRoom.islimeAvailable())){ + if (LinphoneManager.getLc().limeEnabled() == Core.LimeState.Mandatory + && (chatRoom == null || !chatRoom.limeAvailable())){ askingForLimeCall(); return; } @@ -239,10 +261,10 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC back.setOnClickListener(this); } - mListener = new LinphoneCoreListenerBase(){ + mListener = new CoreListenerStub(){ @Override - public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { - LinphoneAddress from = cr.getPeerAddress(); + public void onMessageReceived(Core lc, ChatRoom cr, ChatMessage message) { + Address from = cr.getPeerAddress(); if (from.asStringUriOnly().equals(sipUri)) { //LinphoneService.instance().removeMessageNotification(); cr.markAsRead(); @@ -250,15 +272,20 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC adapter.addMessage(message); String externalBodyUrl = message.getExternalBodyUrl(); - LinphoneContent fileTransferContent = message.getFileTransferInformation(); + Content fileTransferContent = message.getFileTransferInformation(); if (externalBodyUrl != null || fileTransferContent != null) { LinphoneActivity.instance().checkAndRequestExternalStoragePermission(); } } + if (getResources().getBoolean(R.bool.isTablet)) { + for (ChatUpdatedListener c : ChatUpdatedListeners) { + c.onChatUpdated(); + } + } } @Override - public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom room) { + public void onIsComposingReceived(Core lc, ChatRoom room) { if (chatRoom != null && room != null && chatRoom.getPeerAddress().asStringUriOnly().equals(room.getPeerAddress().asStringUriOnly())) { remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE); } @@ -365,14 +392,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } public void initChatRoom(String sipUri) { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - LinphoneAddress lAddress = null; + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Address lAddress = null; if (sipUri == null) { contact = null; // Tablet rotation issue initNewChatConversation(); } else { try { lAddress = lc.interpretUrl(sipUri); + if (lAddress == null) LinphoneActivity.instance().goToDialerFragment(); } catch (Exception e) { //TODO Error popup LinphoneActivity.instance().goToDialerFragment(); @@ -387,7 +415,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC searchContactField.setVisibility(View.GONE); resultContactsSearch.setVisibility(View.GONE); displayChatHeader(lAddress); - displayMessageList(); + removedList(); + remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE); } } } @@ -400,7 +429,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC //messagesList.invalidateViews(); } - private void displayMessageList() { + private void removedList() { if (chatRoom != null) { if (adapter != null) { adapter.refreshHistory(); @@ -412,7 +441,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC messagesList.setVisibility(ListView.VISIBLE); } - private void displayChatHeader(LinphoneAddress address) { + private void displayChatHeader(Address address) { if (contact != null || address != null) { if (contact != null) { contactName.setText(contact.getFullName()); @@ -447,8 +476,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC 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) { + /* ChatMessage msg = getMessageForId(v.getId()); + if (msg != null && msg.getStatus() == ChatMessage.State.NotDelivered) { menu.add(v.getId(), MENU_RESEND_MESSAGE, 0, getString(R.string.retry)); } */ @@ -459,7 +488,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC switch (item.getItemId()) { case MENU_DELETE_MESSAGE: if (chatRoom != null) { - LinphoneChatMessage message = getMessageForId(item.getGroupId()); + ChatMessage message = getMessageForId(item.getGroupId()); if (message != null) { chatRoom.deleteMessage(message); if (getResources().getBoolean(R.bool.isTablet) && chatRoom.getHistorySize() <= 0) { @@ -503,7 +532,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC LinphoneService.instance().removeMessageNotification(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -538,13 +567,13 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC message.addTextChangedListener(textWatcher); addVirtualKeyboardVisiblityListener(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } if (LinphoneActivity.isInstanciated()) { - LinphoneActivity.instance().selectMenu(FragmentsAvailable.CHAT); + LinphoneActivity.instance().selectMenu(CHAT); } LinphoneManager.addListener(this); @@ -570,7 +599,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC newChatConversation = true; } - if(LinphoneManager.getLc().isIncall()){ + if(LinphoneManager.getLc().inCall()){ backToCall.setVisibility(View.VISIBLE); startCall.setVisibility(View.GONE); } else { @@ -606,7 +635,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC int size = messagesList.getAdapter().getCount(); for (int i = 0; i < size; i++) { if (messagesList.isItemChecked(i)) { - LinphoneChatMessage message = (LinphoneChatMessage) messagesList.getAdapter().getItem(i); + ChatMessage message = (ChatMessage) messagesList.getAdapter().getItem(i); chatRoom.deleteMessage(message); } } @@ -701,14 +730,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } private void sendTextMessage() { - if (!LinphoneManager.isInstanciated() || LinphoneManager.getLc() == null) + if (!LinphoneManager.isInstanciated() || LinphoneManager.getLc() == null || + (searchContactField.getVisibility() == View.VISIBLE + && searchContactField.getText().toString().length() < 1)) return; - LinphoneCore.LinphoneLimeState state = LinphoneManager.getLc().getLimeEncryption(); + Core.LimeState state = LinphoneManager.getLc().limeEnabled(); - if ((state == LinphoneCore.LinphoneLimeState.Disabled - || state == LinphoneCore.LinphoneLimeState.Preferred) - || (state == LinphoneCore.LinphoneLimeState.Mandatory - && chatRoom != null && chatRoom.islimeAvailable())){ + if ((state == Core.LimeState.Disabled + || state == Core.LimeState.Preferred) + || (state == Core.LimeState.Mandatory + && chatRoom != null && chatRoom.limeAvailable())){ sendTextMessage(message.getText().toString()); message.setText(""); invalidate(); @@ -719,9 +750,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } private void sendTextMessage(String messageToSend) { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); - LinphoneAddress lAddress = null; + Address lAddress = null; //Start new conversation in fast chat if(newChatConversation && chatRoom == null) { @@ -731,7 +762,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } if (chatRoom != null && messageToSend != null && messageToSend.length() > 0 && isNetworkReachable) { - LinphoneChatMessage message = chatRoom.createLinphoneChatMessage(messageToSend); + ChatMessage message = chatRoom.createMessage(messageToSend); chatRoom.sendChatMessage(message); lAddress = chatRoom.getPeerAddress(); @@ -746,7 +777,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC adapter.addMessage(message); } - Log.i("Sent message current status: " + message.getStatus()); + Log.i("Sent message current status: " + message.getState()); } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); } @@ -759,7 +790,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if(path.contains("%20")) { path = path.replace("%20", "-"); } - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); if(newChatConversation && chatRoom == null) { String address = searchContactField.getText().toString(); @@ -798,9 +829,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if(path.contains("%20")) { path = path.replace("%20", "-"); } - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); - if(newChatConversation && chatRoom == null) { + if (newChatConversation && chatRoom == null) { String address = searchContactField.getText().toString(); if (address != null && !address.equals("")) { initChatRoom(address); @@ -854,14 +885,14 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC dialog.dismiss(); } }); - if(LinphoneManager.getLc().getLimeEncryption() == LinphoneCore.LinphoneLimeState.Mandatory) + if(LinphoneManager.getLc().limeEnabled() == Core.LimeState.Mandatory) dialog.show(); } - private LinphoneChatMessage getMessageForId(int id) { + private ChatMessage getMessageForId(int id) { if (adapter == null) return null; for (int i = 0; i < adapter.getCount(); i++) { - LinphoneChatMessage message = adapter.getItem(i); + ChatMessage message = adapter.getItem(i); if (message.getStorageId() == id) { return message; } @@ -872,31 +903,36 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private void invalidate() { adapter.refreshHistory(); chatRoom.markAsRead(); + if (getResources().getBoolean(R.bool.isTablet)) { + for (ChatUpdatedListener c : ChatUpdatedListeners) { + c.onChatUpdated(); + } + } } - private void resendMessage(LinphoneChatMessage message) { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - if (message == null || message.getStatus() != State.NotDelivered || !lc.isNetworkReachable()) + private void resendMessage(ChatMessage message) { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (message == null || message.getState() != State.NotDelivered || !lc.isNetworkReachable()) return; - message.reSend(); + message.resend(); invalidate(); } private void resendMessage(int id) { - LinphoneChatMessage message = getMessageForId(id); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - if (message == null || message.getStatus() != State.NotDelivered || !lc.isNetworkReachable()){ + ChatMessage message = getMessageForId(id); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (message == null || message.getState() != State.NotDelivered || !lc.isNetworkReachable()){ return; } - message.reSend(); + message.resend(); invalidate(); } private void copyTextMessageToClipboard(int id) { - LinphoneChatMessage message = null; + ChatMessage message = null; for (int i = 0; i < adapter.getCount(); i++) { - LinphoneChatMessage msg = adapter.getItem(i); + ChatMessage msg = adapter.getItem(i); if (msg.getStorageId() == id) { message = msg; break; @@ -954,12 +990,14 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC public Uri getCVSPathFromLookupUri(String content) { String contactId = LinphoneUtils.getNameFromFilePath(content); - LinphoneFriend[] friendList = LinphoneManager.getLc().getFriendList(); - for(LinphoneFriend friend : friendList){ - if(friend.getRefKey().toString().equals(contactId)) { - String contactVcard = friend.getVcardToString(); - Uri path = LinphoneUtils.createCvsFromString(contactVcard); - return path; + FriendList[] friendList = LinphoneManager.getLc().getFriendsLists(); + for (FriendList list : friendList) { + for (Friend friend : list.getFriends()) { + if (friend.getRefKey().toString().equals(contactId)) { + String contactVcard = friend.getVcard().asVcard4String(); + Uri path = LinphoneUtils.createCvsFromString(contactVcard); + return path; + } } } return null; @@ -973,7 +1011,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC @Override public void onContactsUpdated() { - if(fileSharedUri != null || message.getText() != null){ + if(LinphoneActivity.isInstanciated() + && LinphoneActivity.instance().getCurrentFragment() == CHAT + && fileSharedUri != null || message.getText() != null){ initNewChatConversation(); } } @@ -1060,15 +1100,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if (progressDialog != null && progressDialog.isShowing()) { progressDialog.dismiss(); } - String fileName = path.substring(path.lastIndexOf("/") + 1); String extension = LinphoneUtils.getExtensionFromFileName(fileName); - LinphoneContent content = LinphoneCoreFactory.instance().createLinphoneContent("image", extension, result, null); + Content content = Factory.instance().createContent(); // "image", extension, result, null + content.setType("image"); + content.setSubtype(extension); + content.setBuffer(result, result.length); content.setName(fileName); - - LinphoneChatMessage message = chatRoom.createFileTransferMessage(content); + ChatMessage message = chatRoom.createFileTransferMessage(content); message.setListener(LinphoneManager.getInstance()); - message.setAppData(path); + message.setAppdata(path); LinphoneManager.getInstance().setUploadPendingFileMessage(message); LinphoneManager.getInstance().setUploadingImage(result); @@ -1118,12 +1159,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC String fileName = path.substring(path.lastIndexOf("/") + 1); String extension = LinphoneUtils.getExtensionFromFileName(fileName); - LinphoneContent content = LinphoneCoreFactory.instance().createLinphoneContent("file", extension, result, null); + Content content = Factory.instance().createContent();//"file", extension, result, null + content.setType("file"); + content.setSubtype(extension); + content.setBuffer(result, result.length); + content.setName(fileName); content.setName(fileName); - LinphoneChatMessage message = chatRoom.createFileTransferMessage(content); + ChatMessage message = chatRoom.createFileTransferMessage(content); message.setListener(LinphoneManager.getInstance()); - message.setAppData(path); + message.setAppdata(path); LinphoneManager.getInstance().setUploadPendingFileMessage(message); LinphoneManager.getInstance().setUploadingImage(result); @@ -1163,7 +1208,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC super.onActivityResult(requestCode, resultCode, data); } } else { - LinphoneActivity.instance().displayCustomToast("Something wrong happened", Toast.LENGTH_LONG); + if (LinphoneUtils.isExtensionImage(imageToUploadUri.getPath())) + sendImageMessage(imageToUploadUri.getPath(), 0); } } @@ -1233,7 +1279,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } class ChatMessageAdapter extends BaseAdapter { - private class ViewHolder implements LinphoneChatMessage.LinphoneChatMessageListener { + private class ViewHolder implements ChatMessageListener { public int id; public RelativeLayout bubbleLayout; public CheckBox delete; @@ -1277,32 +1323,32 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } @Override - public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, State state) { + public void onMsgStateChanged(ChatMessage msg, State state) { } @Override - public void onLinphoneChatMessageFileTransferReceived(LinphoneChatMessage msg, LinphoneContent content, LinphoneBuffer buffer) { + public void onFileTransferRecv(ChatMessage msg, Content content, Buffer buffer) { } @Override - public void onLinphoneChatMessageFileTransferSent(LinphoneChatMessage msg, LinphoneContent content, int offset, int size, LinphoneBuffer bufferToFill) { - + public Buffer onFileTransferSend(ChatMessage message, Content content, int offset, int size) { + return null; } @Override - public void onLinphoneChatMessageFileTransferProgressChanged(LinphoneChatMessage msg, LinphoneContent content, int offset, int total) { + public void onFileTransferProgressIndication(ChatMessage msg, Content content, int offset, int total) { if (msg.getStorageId() == id) fileTransferProgressBar.setProgress(offset * 100 / total); } } - ArrayList history; + ArrayList history; Context context; public ChatMessageAdapter(Context c) { context = c; - history = new ArrayList(); + history = new ArrayList(); refreshHistory(); } @@ -1313,19 +1359,20 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } public void refreshHistory() { + if (history == null || chatRoom == null) return; history.clear(); - LinphoneChatMessage[] messages = chatRoom.getHistory(); + ChatMessage[] messages = chatRoom.getHistory(0); history.addAll(Arrays.asList(messages)); notifyDataSetChanged(); } - public void addMessage(LinphoneChatMessage message) { + public void addMessage(ChatMessage message) { history.add(message); notifyDataSetChanged(); messagesList.setSelection(getCount() - 1); } - public void refreshMessageCell(LinphoneChatMessage msg){ + public void refreshMessageCell(ChatMessage msg){ } @@ -1335,7 +1382,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } @Override - public LinphoneChatMessage getItem(int position) { + public ChatMessage getItem(int position) { return history.get(position); } @@ -1346,7 +1393,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC @Override public View getView(final int position, View convertView, ViewGroup parent) { - final LinphoneChatMessage message = history.get(position); + final ChatMessage message = history.get(position); View view = null; final ViewHolder holder; boolean sameMessage = false; @@ -1365,8 +1412,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if (holder.id == message.getStorageId()) { // Horrible workaround to not reload image on edit chat list if (holder.messageImage.getTag() != null - && (holder.messageImage.getTag().equals(message.getAppData()) - || ((String) holder.messageImage.getTag()).substring(7).equals(message.getAppData())) + && (holder.messageImage.getTag().equals(message.getAppdata()) + || ((String) holder.messageImage.getTag()).substring(7).equals(message.getAppdata())) ){ sameMessage = true; } @@ -1379,19 +1426,19 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC @Override public void onClick(View v) { if (!message.isSecured() && !message.isOutgoing() && - LinphoneManager.getLc().getLimeEncryption() == LinphoneCore.LinphoneLimeState.Mandatory) { + LinphoneManager.getLc().limeEnabled() == Core.LimeState.Mandatory) { LinphoneUtils.displayErrorAlert(getString(R.string.message_not_encrypted), LinphoneActivity.instance()); } - if(message.getStatus() == State.NotDelivered) { + if(message.getState() == State.NotDelivered) { resendMessage(message); //resendMessage(holder.id); } } }); - LinphoneChatMessage.State status = message.getStatus(); + ChatMessage.State status = message.getState(); String externalBodyUrl = message.getExternalBodyUrl(); - LinphoneContent fileTransferContent = message.getFileTransferInformation(); + Content fileTransferContent = message.getFileTransferInformation(); holder.delete.setVisibility(View.GONE); holder.messageText.setVisibility(View.GONE); @@ -1404,9 +1451,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC holder.messageStatus.setVisibility(View.INVISIBLE); holder.messageSendingInProgress.setVisibility(View.GONE); - String displayName = message.getFrom().getDisplayName(); + String displayName = message.getFromAddress().getDisplayName(); if (displayName == null) { - displayName = message.getFrom().getUserName(); + displayName = message.getFromAddress().getUsername(); } if (!message.isOutgoing()) { if (contact != null) { @@ -1414,7 +1461,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC displayName = contact.getFullName(); } if (contact.hasPhoto()) { - LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); } else { holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } @@ -1426,11 +1473,11 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } holder.contactName.setText(timestampToHumanDate(context, message.getTime()) + " - " + displayName); - if (status == LinphoneChatMessage.State.InProgress) { + if (status == ChatMessage.State.InProgress) { holder.messageSendingInProgress.setVisibility(View.VISIBLE); } if (!message.isSecured() && !message.isOutgoing() && - LinphoneManager.getLc().getLimeEncryption() == LinphoneCore.LinphoneLimeState.Mandatory && status != LinphoneChatMessage.State.InProgress) { + LinphoneManager.getLc().limeEnabled() == Core.LimeState.Mandatory && status != ChatMessage.State.InProgress) { holder.messageStatus.setVisibility(View.VISIBLE); holder.messageStatus.setImageResource(R.drawable.chat_unsecure); } @@ -1458,18 +1505,15 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } - - - if (externalBodyUrl != null || fileTransferContent != null) { - String appData = message.getAppData(); + String appData = message.getAppdata(); if (message.isOutgoing() && appData != null) { holder.messageImage.setVisibility(View.VISIBLE); if (!sameMessage) { - loadBitmap(message.getAppData(), holder.messageImage); - holder.messageImage.setTag(message.getAppData()); + loadBitmap(message.getAppdata(), holder.messageImage); + holder.messageImage.setTag(message.getAppdata()); } if (LinphoneManager.getInstance().getMessageUploadPending() != null && LinphoneManager.getInstance().getMessageUploadPending().getStorageId() == message.getStorageId()) { @@ -1502,8 +1546,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC holder.messageImage.setVisibility(View.VISIBLE); if (!sameMessage) { loadBitmap(appData, holder.messageImage); - holder.messageImage.setTag(message.getAppData()); + holder.messageImage.setTag(message.getAppdata()); } + //removedList(); } } } @@ -1544,7 +1589,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC String filename = message.getFileTransferInformation().getName(); String filename2 = context.getString(R.string.temp_photo_name_with_date).replace("%s", String.valueOf(System.currentTimeMillis())) ; //+ "." + extension; File file = new File(Environment.getExternalStorageDirectory(), filename); - message.setAppData(file.getPath()); + message.setAppdata(file.getPath()); LinphoneManager.getInstance().addDownloadMessagePending(message); message.setListener(LinphoneManager.getInstance()); message.setFileTransferFilepath(file.getPath()); @@ -1558,6 +1603,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC chatRoom.markAsRead(); } + RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); if (message.isOutgoing()) { layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); @@ -1583,12 +1629,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } holder.bubbleLayout.setLayoutParams(layoutParams); - if(message.getAppData() != null && holder.fileTransferLayout.getVisibility() != View.VISIBLE){ - if(LinphoneUtils.isExtensionImage(message.getAppData())){ + if(message.getAppdata() != null && holder.fileTransferLayout.getVisibility() != View.VISIBLE){ + if(LinphoneUtils.isExtensionImage(message.getAppdata())){ holder.fileExtensionLabel.setVisibility(View.GONE); holder.fileNameLabel.setVisibility(View.GONE); }else { - String extension = (LinphoneUtils.getExtensionFromFileName(message.getAppData())); + String extension = (LinphoneUtils.getExtensionFromFileName(message.getAppdata())); if(extension != null) extension = extension.toUpperCase(); else @@ -1599,7 +1645,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC holder.fileExtensionLabel.setText(extension); holder.fileExtensionLabel.setVisibility(View.VISIBLE); - holder.fileNameLabel.setText(LinphoneUtils.getNameFromFilePath(message.getAppData())); + holder.fileNameLabel.setText(LinphoneUtils.getNameFromFilePath(message.getAppdata())); holder.fileNameLabel.setVisibility(View.VISIBLE); holder.fileExtensionLabel.setOnClickListener(new OnClickListener() { @Override @@ -1613,7 +1659,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC file = new File(imageUri); contentUri = FileProvider.getUriForFile(getActivity(), "org.linphone.provider", file); } else if (imageUri.startsWith("content://")) { - Log.e("===>>> ChatFragment - getView() - imageUri = "+imageUri); contentUri = Uri.parse(imageUri); } else { file = new File(imageUri); @@ -1667,6 +1712,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } + if (getResources().getBoolean(R.bool.isTablet)) { + for (ChatUpdatedListener c : ChatUpdatedListeners) { + c.onChatUpdated(); + } + } + return view; } @@ -1717,14 +1768,14 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC int indexFinHttp = text.indexOf(" ", indexHttp) == -1 ? text.length() : text.indexOf(" ", indexHttp); String link = text.substring(indexHttp, indexFinHttp); String linkWithoutScheme = link.replace("http://", ""); - text = text.replaceFirst(link, "" + linkWithoutScheme + ""); + text = text.replaceFirst(Pattern.quote(link), "" + linkWithoutScheme + ""); } if (text.contains("https://")) { int indexHttp = text.indexOf("https://"); int indexFinHttp = text.indexOf(" ", indexHttp) == -1 ? text.length() : text.indexOf(" ", indexHttp); String link = text.substring(indexHttp, indexFinHttp); String linkWithoutScheme = link.replace("https://", ""); - text = text.replaceFirst(link, "" + linkWithoutScheme + ""); + text = text.replaceFirst(Pattern.quote(link), "" + linkWithoutScheme + ""); } return Compatibility.fromHtml(text); @@ -1817,6 +1868,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC final BitmapWorkerTask bitmapWorkerTask = getBitmapWorkerTask(imageView); if (this == bitmapWorkerTask && imageView != null) { imageView.setImageBitmap(bitmap); + //Force scroll too bottom with setSelection() after image loaded and last messages + if(((messagesList.getLastVisiblePosition() >= (getCount() - 1)) && (messagesList.getFirstVisiblePosition() <= (getCount() - 1)))) + messagesList.setSelection(getCount() - 1); imageView.setTag(path); imageView.setOnClickListener(new OnClickListener() { @Override @@ -1897,18 +1951,20 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } - //LinphoneChatMessage Listener + //ChatMessage Listener @Override - public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, State state) { + public void onMsgStateChanged(ChatMessage msg, State state) { redrawMessageList(); } @Override - public void onLinphoneChatMessageFileTransferReceived(LinphoneChatMessage msg, LinphoneContent content, LinphoneBuffer buffer) {} + public void onFileTransferRecv(ChatMessage msg, Content content, Buffer buffer) {} @Override - public void onLinphoneChatMessageFileTransferSent(LinphoneChatMessage msg, LinphoneContent content, int offset, int size, LinphoneBuffer bufferToFill) {} + public Buffer onFileTransferSend(ChatMessage msg, Content content, int offset, int size) { + return null; + } @Override - public void onLinphoneChatMessageFileTransferProgressChanged(LinphoneChatMessage msg, LinphoneContent content, int offset, int total) {} + public void onFileTransferProgressIndication(ChatMessage msg, Content content, int offset, int total) {} } diff --git a/src/android/org/linphone/ChatListFragment.java b/src/android/org/linphone/ChatListFragment.java index bd3162ab1..abb764964 100644 --- a/src/android/org/linphone/ChatListFragment.java +++ b/src/android/org/linphone/ChatListFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* ChatListFragment.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,6 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import android.app.Dialog; import android.app.Fragment; import android.graphics.Typeface; @@ -41,21 +43,20 @@ import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.Address; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatRoom; +import org.linphone.core.Core; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; +import org.linphone.core.CoreListenerStub; import org.linphone.mediastream.Log; import java.util.List; -/** - * @author Sylvain Berfini - */ -public class ChatListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener { +import static org.linphone.FragmentsAvailable.CHAT_LIST; + +public class ChatListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener, ChatUpdatedListener { private LayoutInflater mInflater; private List mConversations; private ListView chatList; @@ -63,7 +64,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte private ImageView edit, selectAll, deselectAll, delete, newDiscussion, cancel, backInCall; private LinearLayout editList, topbar; private boolean isEditMode = false; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -101,12 +102,15 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte delete = (ImageView) view.findViewById(R.id.delete); delete.setOnClickListener(this); - mListener = new LinphoneCoreListenerBase() { + mListener = new CoreListenerStub() { @Override - public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { + public void onMessageReceived(Core lc, ChatRoom cr, ChatMessage message) { refresh(); } }; + + ChatFragment.createIfNotExist(); + ChatFragment.addChatListener(this); return view; } @@ -123,7 +127,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte if (chatList.isItemChecked(i)) { String sipUri = chatList.getAdapter().getItem(i).toString(); if (sipUri != null) { - LinphoneChatRoom chatroom = LinphoneManager.getLc().getOrCreateChatRoom(sipUri); + ChatRoom chatroom = LinphoneManager.getLc().getChatRoomFromUri(sipUri); if (chatroom != null) { chatroom.deleteHistory(); } @@ -181,9 +185,6 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte public void refresh() { mConversations = LinphoneActivity.instance().getChatList(); - if (getResources().getBoolean(R.bool.isTablet)) { - LinphoneActivity.instance().displayChat("", null, null); - } hideAndDisplayMessageIfNoChat(); } @@ -211,7 +212,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte LinphoneActivity.instance().hideTabBar(false); } - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } @@ -221,7 +222,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte @Override public void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -231,6 +232,9 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte @Override public void onContactsUpdated() { + if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != CHAT_LIST) + return; + ChatListAdapter adapter = (ChatListAdapter)chatList.getAdapter(); if (adapter != null) { adapter.notifyDataSetChanged(); @@ -349,6 +353,11 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte } } + @Override + public void onChatUpdated() { + refresh(); + } + class ChatListAdapter extends BaseAdapter { private class ViewHolder { public TextView lastMessageView; @@ -396,24 +405,19 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte view.setTag(holder); } - LinphoneAddress address; - try { - address = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri); - } catch (LinphoneCoreException e) { - Log.e("Chat view cannot parse address", e); - return view; - } + Address address; + address = Factory.instance().createAddress(sipUri); LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address); String message = ""; Long time; - LinphoneChatRoom chatRoom = LinphoneManager.getLc().getChatRoom(address); + ChatRoom chatRoom = LinphoneManager.getLc().getChatRoom(address); int unreadMessagesCount = chatRoom.getUnreadMessagesCount(); - LinphoneChatMessage[] history = chatRoom.getHistory(1); - LinphoneChatMessage msg = history[0]; + ChatMessage[] history = chatRoom.getHistory(1); + ChatMessage msg = history[0]; - if(msg.getFileTransferInformation() != null || msg.getExternalBodyUrl() != null || msg.getAppData() != null ){ + if(msg.getFileTransferInformation() != null || msg.getExternalBodyUrl() != null || msg.getAppdata() != null ){ holder.lastMessageView.setBackgroundResource(R.drawable.chat_file_message); time = msg.getTime(); holder.date.setText(LinphoneUtils.timestampToHumanDate(getActivity(),time,getString(R.string.messages_list_date_format))); @@ -431,7 +435,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte if (contact != null) { - LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); } else { holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } diff --git a/src/android/org/linphone/ContactDetailsFragment.java b/src/android/org/linphone/ContactDetailsFragment.java index 5061680d4..cef6bd33d 100644 --- a/src/android/org/linphone/ContactDetailsFragment.java +++ b/src/android/org/linphone/ContactDetailsFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* ContactDetailsFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,7 +18,8 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import org.linphone.core.LinphoneProxyConfig; + +import org.linphone.core.ProxyConfig; import android.annotation.SuppressLint; import android.app.Dialog; @@ -32,9 +34,6 @@ import android.widget.ImageView; import android.widget.TableLayout; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ public class ContactDetailsFragment extends Fragment implements OnClickListener { private LinphoneContact contact; private ImageView editContact, deleteContact, back; @@ -137,13 +136,13 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener tv.setSelected(true); - LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); + ProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); if (lpc != null) { String username = lpc.normalizePhoneNumber(displayednumberOrAddress); value = LinphoneUtils.getFullAddressFromUsername(username); } - String contactAddress = contact.getPresenceModelForUri(noa.getValue()); + String contactAddress = contact.getPresenceModelForUriOrTel(noa.getValue()); if (contactAddress != null) { v.findViewById(R.id.friendLinphone).setVisibility(View.VISIBLE); } diff --git a/src/android/org/linphone/ContactEditorFragment.java b/src/android/org/linphone/ContactEditorFragment.java index 54df95532..8d3edadbb 100644 --- a/src/android/org/linphone/ContactEditorFragment.java +++ b/src/android/org/linphone/ContactEditorFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* ContactEditorFragment.java - Copyright (C) 2012 Belledonne Communications, Grenoble, France + Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -18,16 +19,6 @@ package org.linphone; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import java.io.ByteArrayOutputStream; -import java.io.File; -import java.io.IOException; -import java.io.Serializable; -import java.util.ArrayList; -import java.util.List; - -import org.linphone.mediastream.Log; -import org.linphone.mediastream.Version; - import android.annotation.SuppressLint; import android.app.Activity; import android.app.Dialog; @@ -57,6 +48,16 @@ import android.widget.EditText; import android.widget.ImageView; import android.widget.LinearLayout; +import org.linphone.mediastream.Log; +import org.linphone.mediastream.Version; + +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; + public class ContactEditorFragment extends Fragment { private View view; private ImageView cancel, deleteContact, ok; @@ -73,7 +74,7 @@ public class ContactEditorFragment extends Fragment { private List numbersAndAddresses; private int firstSipAddressIndex = -1; private LinearLayout sipAddresses, numbers; - private String newSipOrNumberToAdd; + private String newSipOrNumberToAdd, newDisplayName; private Uri pickedPhotoForContactUri; private byte[] photoToAdd; @@ -90,9 +91,14 @@ public class ContactEditorFragment extends Fragment { isNewContact = false; if (getArguments().getString("NewSipAdress") != null) { newSipOrNumberToAdd = getArguments().getString("NewSipAdress"); + }if (getArguments().getString("NewDisplayName") != null) { + newDisplayName = getArguments().getString("NewDisplayName"); } } else if (getArguments().getString("NewSipAdress") != null) { newSipOrNumberToAdd = getArguments().getString("NewSipAdress"); + if (getArguments().getString("NewDisplayName") != null) { + newDisplayName = getArguments().getString("NewDisplayName"); + } } } @@ -439,6 +445,12 @@ public class ContactEditorFragment extends Fragment { } } + if (newDisplayName != null) { + EditText lastNameEditText = (EditText) view.findViewById(R.id.contactLastName); + if (view != null) + lastNameEditText.setText(newDisplayName); + } + if (controls.getChildCount() == 0) { addEmptyRowToAllowNewNumberOrAddress(controls,false); } diff --git a/src/android/org/linphone/ContactsListFragment.java b/src/android/org/linphone/ContactsListFragment.java index dd96b1986..efb50ffe2 100644 --- a/src/android/org/linphone/ContactsListFragment.java +++ b/src/android/org/linphone/ContactsListFragment.java @@ -1,3 +1,5 @@ +package org.linphone; + /* ContactsListFragment.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -17,13 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; - -import java.util.ArrayList; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Locale; -import java.util.Map; import android.app.Dialog; import android.app.Fragment; @@ -49,9 +44,14 @@ import android.widget.ProgressBar; import android.widget.SectionIndexer; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; + +import static org.linphone.FragmentsAvailable.CONTACTS_LIST; + public class ContactsListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener { private LayoutInflater mInflater; private ListView contactsList; @@ -62,7 +62,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O private LinearLayout editList, topbar; private int lastKnownPosition; private boolean editOnClick = false, editConsumed = false, onlyDisplayChatAddress = false; - private String sipAddressToAdd; + private String sipAddressToAdd, displayName = null; private ImageView clearSearchField; private EditText searchField; private ProgressBar contactsFetchInProgress; @@ -75,8 +75,9 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O if (getArguments() != null) { editOnClick = getArguments().getBoolean("EditOnClick"); sipAddressToAdd = getArguments().getString("SipAddress"); - - onlyDisplayChatAddress = getArguments().getBoolean("ChatAddressOnly"); + if(getArguments().getString("DisplayName") != null) + displayName = getArguments().getString("DisplayName"); + onlyDisplayChatAddress = getArguments().getBoolean("ChatAddressOnly"); } noSipContact = (TextView) view.findViewById(R.id.noSipContact); @@ -254,7 +255,10 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O if (id == R.id.newContact) { editConsumed = true; - LinphoneActivity.instance().addContact(null, sipAddressToAdd); + if(displayName != null) + LinphoneActivity.instance().addContact(displayName, sipAddressToAdd); + else + LinphoneActivity.instance().addContact(null, sipAddressToAdd); } else if (id == R.id.clearSearchField) { searchField.setText(""); @@ -415,6 +419,8 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O @Override public void onContactsUpdated() { + if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != CONTACTS_LIST) + return; ContactsListAdapter adapter = (ContactsListAdapter)contactsList.getAdapter(); if (adapter != null) { contactsList.setFastScrollEnabled(false); @@ -537,14 +543,14 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O holder.separator.setVisibility(View.GONE); } - if (contact.isInLinphoneFriendList()) { + if (contact.isInFriendList()) { holder.linphoneFriend.setVisibility(View.VISIBLE); } else { holder.linphoneFriend.setVisibility(View.GONE); } if (contact.hasPhoto()) { - LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, contact.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, contact.getThumbnailUri()); } else { holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } @@ -590,7 +596,7 @@ public class ContactsListFragment extends Fragment implements OnClickListener, O holder.delete.setVisibility(View.INVISIBLE); } - /*LinphoneFriend[] friends = LinphoneManager.getLc().getFriendList(); + /*Friend[] friends = LinphoneManager.getLc().getFriendsLists(); if (!ContactsManager.getInstance().isContactPresenceDisabled() && friends != null) { holder.friendStatus.setVisibility(View.VISIBLE); PresenceActivityType presenceActivity = friends[0].getPresenceModel().getActivity().getType(); diff --git a/src/android/org/linphone/ContactsManager.java b/src/android/org/linphone/ContactsManager.java index a11085162..9f1feb780 100644 --- a/src/android/org/linphone/ContactsManager.java +++ b/src/android/org/linphone/ContactsManager.java @@ -1,6 +1,8 @@ +package org.linphone; + /* ContactsManager.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,9 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; - -import android.Manifest; import android.accounts.Account; import android.accounts.AccountManager; import android.content.ContentProviderOperation; @@ -37,13 +36,12 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds; import android.provider.ContactsContract.Data; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneFriend; -import org.linphone.core.LinphoneFriendImpl; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.Address; +import org.linphone.core.Core; +import org.linphone.core.Friend; +import org.linphone.core.FriendList; +import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; -import org.linphone.mediastream.Version; import java.util.ArrayList; import java.util.Collections; @@ -213,30 +211,31 @@ public class ContactsManager extends ContentObserver { initializeContactManager(context, contentResolver); } - public synchronized LinphoneContact findContactFromAddress(LinphoneAddress address) { + public synchronized LinphoneContact findContactFromAddress(Address address) { String sipUri = address.asStringUriOnly(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - LinphoneFriend lf = lc.findFriendByAddress(sipUri); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Friend lf = lc.findFriend(address); if (lf != null) { - LinphoneContact contact = (LinphoneContact)((LinphoneFriendImpl)lf).getUserData(); + LinphoneContact contact = (LinphoneContact)lf.getUserData(); return contact; } return null; } public synchronized LinphoneContact findContactFromPhoneNumber(String phoneNumber) { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - LinphoneProxyConfig lpc = null; + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + ProxyConfig lpc = null; if (lc != null) { lpc = lc.getDefaultProxyConfig(); } if (lpc == null) return null; String normalized = lpc.normalizePhoneNumber(phoneNumber); - LinphoneAddress addr = lpc.normalizeSipUri(normalized); - LinphoneFriend lf = lc.findFriendByAddress(addr.asStringUriOnly() + ";user=phone"); // Without this, the hashmap inside liblinphone won't find it... + Address addr = lpc.normalizeSipUri(normalized); + addr.setMethodParam(";user=phone"); + Friend lf = lc.findFriend(addr); // Without this, the hashmap inside liblinphone won't find it... if (lf != null) { - LinphoneContact contact = (LinphoneContact)((LinphoneFriendImpl)lf).getUserData(); + LinphoneContact contact = (LinphoneContact)lf.getUserData(); return contact; } return null; @@ -250,8 +249,8 @@ public class ContactsManager extends ContentObserver { sipContacts = c; } - public synchronized void refreshSipContact(LinphoneFriend lf) { - LinphoneContact contact = (LinphoneContact)((LinphoneFriendImpl)lf).getUserData(); + public synchronized void refreshSipContact(Friend lf) { + LinphoneContact contact = (LinphoneContact)lf.getUserData(); if (contact != null && !sipContacts.contains(contact)) { sipContacts.add(contact); Collections.sort(sipContacts); @@ -276,29 +275,31 @@ public class ContactsManager extends ContentObserver { Date contactsTime = new Date(); androidContactsCache.clear(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { - for (LinphoneFriend friend : lc.getFriendList()) { - LinphoneContact contact = (LinphoneContact)((LinphoneFriendImpl)friend).getUserData(); - if (contact != null) { - contact.clearAddresses(); - contacts.add(contact); - if (contact.getAndroidId() != null) { - androidContactsCache.put(contact.getAndroidId(), contact); - } - } else { - if (friend.getRefKey() != null) { - // Friend has a refkey and but no LinphoneContact => represents a native contact stored in db from a previous version of Linphone, remove it - lc.removeFriend(friend); - } else { - // No refkey so it's a standalone contact - contact = new LinphoneContact(); - contact.setFriend(friend); - contact.refresh(); - if (contact.hasAddress()) { - sipContacts.add(contact); - } + for (FriendList list : lc.getFriendsLists()) { + for (Friend friend : list.getFriends()) { + LinphoneContact contact = (LinphoneContact) friend.getUserData(); + if (contact != null) { + contact.clearAddresses(); contacts.add(contact); + if (contact.getAndroidId() != null) { + androidContactsCache.put(contact.getAndroidId(), contact); + } + } else { + if (friend.getRefKey() != null) { + // Friend has a refkey and but no LinphoneContact => represents a native contact stored in db from a previous version of Linphone, remove it + list.removeFriend(friend); + } else { + // No refkey so it's a standalone contact + contact = new LinphoneContact(); + contact.setFriend(friend); + contact.refresh(); + if (contact.hasAddress()) { + sipContacts.add(contact); + } + contacts.add(contact); + } } } } @@ -358,7 +359,9 @@ public class ContactsManager extends ContentObserver { String id = contact.getAndroidId(); if (id != null && !nativeIds.contains(id)) { // Has been removed since last fetch - lc.removeFriend(contact.getLinphoneFriend()); + for (FriendList list : lc.getFriendsLists()) { + list.removeFriend(contact.getFriend()); + } contacts.remove(contact); } } @@ -407,8 +410,8 @@ public class ContactsManager extends ContentObserver { Log.i("[ContactsManager] Step 2 for " + contacts.size() + " contacts: " + time + " elapsed since starting"); for (LinphoneContact contact : contacts) { - // Create the LinphoneFriends matching the native contacts - contact.createOrUpdateLinphoneFriendFromNativeContact(); + // Create the Friends matching the native contacts + contact.createOrUpdateFriendFromNativeContact(); } timeElapsed = (new Date()).getTime() - contactsTime.getTime(); time = String.format("%02d:%02d", @@ -419,7 +422,7 @@ public class ContactsManager extends ContentObserver { androidContactsCache.clear(); } else { - Log.w("[Permission] Read contacts permission wasn't granted, only fetch LinphoneFriends"); + Log.w("[Permission] Read contacts permission wasn't granted, only fetch Friends"); } Collections.sort(contacts); @@ -429,9 +432,9 @@ public class ContactsManager extends ContentObserver { if (LinphonePreferences.instance() != null && LinphonePreferences.instance().isFriendlistsubscriptionEnabled()) { if (getString(R.string.rls_uri) != null) { - LinphoneManager.getLc().getFriendLists()[0].setRLSUri(getString(R.string.rls_uri)); + LinphoneManager.getLc().getFriendsLists()[0].setRlsUri(getString(R.string.rls_uri)); } - LinphoneManager.getLc().getFriendLists()[0].updateSubscriptions(); + LinphoneManager.getLc().getFriendsLists()[0].updateSubscriptions(); } for (ContactsUpdatedListener listener : contactsUpdatedListeners) { listener.onContactsUpdated(); diff --git a/src/android/org/linphone/DialerFragment.java b/src/android/org/linphone/DialerFragment.java index 770aeacf5..0ccb041ea 100644 --- a/src/android/org/linphone/DialerFragment.java +++ b/src/android/org/linphone/DialerFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* DialerFragment.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,18 +18,12 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import org.linphone.core.LinphoneCore; -import org.linphone.mediastream.Log; -import org.linphone.ui.AddressAware; -import org.linphone.ui.AddressText; -import org.linphone.ui.CallButton; -import org.linphone.ui.EraseButton; +import android.app.Fragment; import android.content.Intent; import android.content.res.Configuration; import android.net.Uri; import android.os.Bundle; -import android.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; @@ -36,9 +31,13 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.LinearLayout; -/** - * @author Sylvain Berfini - */ +import org.linphone.core.Core; +import org.linphone.mediastream.Log; +import org.linphone.ui.AddressAware; +import org.linphone.ui.AddressText; +import org.linphone.ui.CallButton; +import org.linphone.ui.EraseButton; + public class DialerFragment extends Fragment { private static DialerFragment instance; private static boolean isCallTransferOngoing = false; @@ -63,14 +62,14 @@ public class DialerFragment extends Fragment { mCall = (CallButton) view.findViewById(R.id.call); mCall.setAddressWidget(mAddress); - if (LinphoneActivity.isInstanciated() && LinphoneManager.getLc().getCallsNb() > 0) { + if (LinphoneActivity.isInstanciated() && LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null && LinphoneManager.getLcIfManagerNotDestroyedOrNull().getCallsNb() > 0) { if (isCallTransferOngoing) { mCall.setImageResource(R.drawable.call_transfer); } else { mCall.setImageResource(R.drawable.call_add); } } else { - if (LinphoneManager.getLc().getVideoAutoInitiatePolicy()) { + if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null && LinphoneManager.getLcIfManagerNotDestroyedOrNull().getVideoActivationPolicy().getAutomaticallyInitiate()) { mCall.setImageResource(R.drawable.call_video_start); } else { mCall.setImageResource(R.drawable.call_audio_start); @@ -83,7 +82,7 @@ public class DialerFragment extends Fragment { } mAddContact = (ImageView) view.findViewById(R.id.add_contact); - mAddContact.setEnabled(!(LinphoneActivity.isInstanciated() && LinphoneManager.getLc().getCallsNb() > 0)); + mAddContact.setEnabled(!(LinphoneActivity.isInstanciated() && LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null && LinphoneManager.getLc().getCallsNb() > 0)); addContactListener = new OnClickListener() { @Override @@ -100,7 +99,7 @@ public class DialerFragment extends Fragment { transferListener = new OnClickListener() { @Override public void onClick(View v) { - LinphoneCore lc = LinphoneManager.getLc(); + Core lc = LinphoneManager.getLc(); if (lc.getCurrentCall() == null) { return; } @@ -185,7 +184,7 @@ public class DialerFragment extends Fragment { return; } isCallTransferOngoing = LinphoneActivity.instance().isCallTransfer(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) { return; } @@ -202,7 +201,7 @@ public class DialerFragment extends Fragment { mAddContact.setImageResource(R.drawable.call_alt_back); mAddContact.setOnClickListener(cancelListener); } else { - if (LinphoneManager.getLc().getVideoAutoInitiatePolicy()) { + if (LinphoneManager.getLc().getVideoActivationPolicy().getAutomaticallyInitiate()) { mCall.setImageResource(R.drawable.call_video_start); } else { mCall.setImageResource(R.drawable.call_audio_start); @@ -215,7 +214,7 @@ public class DialerFragment extends Fragment { } public void enableDisableAddContact() { - mAddContact.setEnabled(LinphoneManager.getLc().getCallsNb() > 0 || !mAddress.getText().toString().equals("")); + mAddContact.setEnabled(LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null && LinphoneManager.getLc().getCallsNb() > 0 || !mAddress.getText().toString().equals("")); } public void displayTextInAddressBar(String numberOrSipAddress) { diff --git a/src/android/org/linphone/DozeReceiver.java b/src/android/org/linphone/DozeReceiver.java index 717e7a002..e66a41ccd 100644 --- a/src/android/org/linphone/DozeReceiver.java +++ b/src/android/org/linphone/DozeReceiver.java @@ -1,7 +1,27 @@ package org.linphone; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreFactory; +/* +DozeReceiver.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import org.linphone.core.Core; +import org.linphone.core.Factory; +import org.linphone.core.LogCollectionState; import org.linphone.mediastream.Log; import android.content.Context; @@ -19,9 +39,9 @@ public class DozeReceiver extends android.content.BroadcastReceiver { if (!LinphoneService.isReady()) return; boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled); - LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name)); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Factory.instance().enableLogCollection(isDebugEnabled ? LogCollectionState.Enabled : LogCollectionState.Disabled); + Factory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name)); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) return; pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); diff --git a/src/android/org/linphone/EmptyFragment.java b/src/android/org/linphone/EmptyFragment.java index 66ca6baa0..91cd899b4 100644 --- a/src/android/org/linphone/EmptyFragment.java +++ b/src/android/org/linphone/EmptyFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* -AboutFragment.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +EmptyFragment.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,9 +25,6 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -/** - * @author Sylvain Berfini - */ public class EmptyFragment extends Fragment { @Override diff --git a/src/android/org/linphone/FragmentsAvailable.java b/src/android/org/linphone/FragmentsAvailable.java index 65f07ba28..b3ca0f81e 100644 --- a/src/android/org/linphone/FragmentsAvailable.java +++ b/src/android/org/linphone/FragmentsAvailable.java @@ -1,7 +1,8 @@ package org.linphone; + /* FragmentsAvailable.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,9 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + public enum FragmentsAvailable { UNKNOW, DIALER, diff --git a/src/android/org/linphone/HistoryDetailFragment.java b/src/android/org/linphone/HistoryDetailFragment.java index 8ede8d395..6acd7a744 100644 --- a/src/android/org/linphone/HistoryDetailFragment.java +++ b/src/android/org/linphone/HistoryDetailFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* HistoryDetailFragment.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,6 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import android.app.Fragment; import android.net.Uri; import android.os.Bundle; @@ -27,14 +29,11 @@ import android.view.ViewGroup; import android.widget.ImageView; import android.widget.TextView; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.Address; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; import org.linphone.mediastream.Log; -/** - * @author Sylvain Berfini - */ public class HistoryDetailFragment extends Fragment implements OnClickListener { private ImageView dialBack, chat, addToContacts, goToContact, back; private View view; @@ -104,12 +103,8 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { Long longDate = Long.parseLong(callDate); date.setText(LinphoneUtils.timestampToHumanDate(getActivity(),longDate,getString(R.string.history_detail_date_format))); - LinphoneAddress lAddress = null; - try { - lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri); - } catch (LinphoneCoreException e) { - Log.e(e); - } + Address lAddress = null; + lAddress = Factory.instance().createAddress(sipUri); if (lAddress != null) { contactAddress.setText(lAddress.asStringUriOnly()); @@ -164,13 +159,13 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener { LinphoneActivity.instance().displayChat(sipUri, null, null); } else if (id == R.id.add_contact) { String uri = sipUri; - try { - LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri); - uri = addr.asStringUriOnly(); - } catch (LinphoneCoreException e) { - Log.e(e); - } - LinphoneActivity.instance().displayContactsForEdition(uri); + Address addr = null; + addr = Factory.instance().createAddress(sipUri); + uri = addr.asStringUriOnly(); + if (addr != null && addr.getDisplayName() != null) + LinphoneActivity.instance().displayContactsForEdition(addr.asStringUriOnly(), addr.getDisplayName()); + else + LinphoneActivity.instance().displayContactsForEdition(uri); } else if (id == R.id.goto_contact) { LinphoneActivity.instance().displayContact(contact, false); } diff --git a/src/android/org/linphone/HistoryListFragment.java b/src/android/org/linphone/HistoryListFragment.java index a58709000..3358d69b5 100644 --- a/src/android/org/linphone/HistoryListFragment.java +++ b/src/android/org/linphone/HistoryListFragment.java @@ -1,7 +1,8 @@ package org.linphone; + /* HistoryListFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,16 +18,18 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.List; -import org.linphone.core.CallDirection; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCallLog; -import org.linphone.core.LinphoneCallLog.CallStatus; +import org.linphone.core.Call; +import org.linphone.core.Call.Dir; +import org.linphone.core.Address; +import org.linphone.core.CallLog; +import org.linphone.core.CallLog.CallStatus; import android.annotation.SuppressLint; import android.app.Dialog; @@ -50,9 +53,8 @@ import android.widget.ListView; import android.widget.RelativeLayout; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ +import static org.linphone.FragmentsAvailable.HISTORY_LIST; + public class HistoryListFragment extends Fragment implements OnClickListener, OnItemClickListener, ContactsUpdatedListener { private ListView historyList; private LayoutInflater mInflater; @@ -61,7 +63,7 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On private View allCallsSelected, missedCallsSelected; private LinearLayout editList, topBar; private boolean onlyDisplayMissedCalls, isEditMode; - private List mLogs; + private List mLogs; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -122,11 +124,11 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On public void displayFirstLog(){ if (mLogs != null && mLogs.size() > 0) { - LinphoneCallLog log = mLogs.get(0); - if (log.getDirection() == CallDirection.Incoming) { - LinphoneActivity.instance().displayHistoryDetail(mLogs.get(0).getFrom().toString(), mLogs.get(0)); + CallLog log = mLogs.get(0); + if (log.getDir() == Call.Dir.Incoming) { + LinphoneActivity.instance().displayHistoryDetail(mLogs.get(0).getFromAddress().toString(), mLogs.get(0)); } else { - LinphoneActivity.instance().displayHistoryDetail(mLogs.get(0).getTo().toString(), mLogs.get(0)); + LinphoneActivity.instance().displayHistoryDetail(mLogs.get(0).getToAddress().toString(), mLogs.get(0)); } } else { LinphoneActivity.instance().displayEmptyFragment(); @@ -137,7 +139,7 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On int size = historyList.getAdapter().getCount(); for(int i=0; i missedCalls = new ArrayList(); - for (LinphoneCallLog log : mLogs) { + List missedCalls = new ArrayList(); + for (CallLog log : mLogs) { if (log.getStatus() == CallStatus.Missed) { missedCalls.add(log); } @@ -222,6 +224,8 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On @Override public void onContactsUpdated() { + if (!LinphoneActivity.isInstanciated() || LinphoneActivity.instance().getCurrentFragment() != HISTORY_LIST) + return; CallHistoryAdapter adapter = (CallHistoryAdapter)historyList.getAdapter(); if (adapter != null) { adapter.notifyDataSetChanged(); @@ -320,7 +324,7 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On @Override public void onItemClick(AdapterView adapter, View view, int position, long id) { if (isEditMode) { - LinphoneCallLog log = mLogs.get(position); + CallLog log = mLogs.get(position); LinphoneManager.getLc().removeCallLog(log); mLogs = Arrays.asList(LinphoneManager.getLc().getCallLogs()); } @@ -423,9 +427,11 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On view.setTag(holder); } - final LinphoneCallLog log = mLogs.get(position); - long timestamp = log.getTimestamp(); - LinphoneAddress address; + if (mLogs == null || mLogs.size() < position) return view; + + final CallLog log = mLogs.get(position); + long timestamp = log.getStartDate(); + Address address; holder.contact.setSelected(true); // For automated horizontal scrolling of long texts @@ -436,8 +442,8 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On separatorText.setText(timestampToHumanDate(logTime)); if (position > 0) { - LinphoneCallLog previousLog = mLogs.get(position-1); - long previousTimestamp = previousLog.getTimestamp(); + CallLog previousLog = mLogs.get(position-1); + long previousTimestamp = previousLog.getStartDate(); Calendar previousLogTime = Calendar.getInstance(); previousLogTime.setTimeInMillis(previousTimestamp); @@ -450,15 +456,15 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On separator.setVisibility(View.VISIBLE); } - if (log.getDirection() == CallDirection.Incoming) { - address = log.getFrom(); + if (log.getDir() == Call.Dir.Incoming) { + address = log.getFromAddress(); if (log.getStatus() == CallStatus.Missed) { holder.callDirection.setImageResource(R.drawable.call_status_missed); } else { holder.callDirection.setImageResource(R.drawable.call_status_incoming); } } else { - address = log.getTo(); + address = log.getToAddress(); holder.callDirection.setImageResource(R.drawable.call_status_outgoing); } @@ -467,7 +473,7 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On final String sipUri = address.asString(); if (c != null) { displayName = c.getFullName(); - LinphoneUtils.setThumbnailPictureFromUri(getActivity(), holder.contactPicture, c.getThumbnailUri()); + LinphoneUtils.setThumbnailPictureFromUri(LinphoneActivity.instance(), holder.contactPicture, c.getThumbnailUri()); } else { holder.contactPicture.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); } @@ -523,12 +529,12 @@ public class HistoryListFragment extends Fragment implements OnClickListener, On @Override public void onClick(View v) { if (LinphoneActivity.isInstanciated()) { - LinphoneCallLog log = mLogs.get(position); - LinphoneAddress address; - if (log.getDirection() == CallDirection.Incoming) { - address = log.getFrom(); + CallLog log = mLogs.get(position); + Address address; + if (log.getDir() == Call.Dir.Incoming) { + address = log.getFromAddress(); } else { - address = log.getTo(); + address = log.getToAddress(); } LinphoneActivity.instance().setAddresGoToDialerAndCall(address.asStringUriOnly(), address.getDisplayName(), null); } diff --git a/src/android/org/linphone/HookReceiver.java b/src/android/org/linphone/HookReceiver.java index a5068ffbe..952f6ea78 100644 --- a/src/android/org/linphone/HookReceiver.java +++ b/src/android/org/linphone/HookReceiver.java @@ -1,5 +1,24 @@ package org.linphone; +/* +HookReceiver.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -17,7 +36,7 @@ public class HookReceiver extends BroadcastReceiver { if(b){ //handset on Log.i(" ======>>>>>> HookReceiver - handset ON"); - LinphoneManager.getLc().enableSpeaker(false); + LinphoneManager.getInstance().enableSpeaker(false); if(!LinphoneManager.getInstance().isHansetModeOn()) LinphoneManager.getInstance().setHandsetMode(true); @@ -25,7 +44,7 @@ public class HookReceiver extends BroadcastReceiver { }else{ //handset off Log.i(" ======>>>>>> HookReceiver - handset OFF"); - LinphoneManager.getLc().enableSpeaker(true); + LinphoneManager.getInstance().enableSpeaker(true); LinphoneManager.getInstance().setHandsetMode(false); } } diff --git a/src/android/org/linphone/KeepAliveReceiver.java b/src/android/org/linphone/KeepAliveReceiver.java index 7595377e6..172c12e6a 100644 --- a/src/android/org/linphone/KeepAliveReceiver.java +++ b/src/android/org/linphone/KeepAliveReceiver.java @@ -1,6 +1,8 @@ +package org.linphone; + /* KeepAliveReceiver.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,11 +18,11 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import org.linphone.compatibility.Compatibility; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.Core; +import org.linphone.core.Factory; +import org.linphone.core.LogCollectionState; import org.linphone.mediastream.Log; import android.app.AlarmManager; @@ -40,9 +42,9 @@ public class KeepAliveReceiver extends BroadcastReceiver { return; } else { boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled); - LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name)); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Factory.instance().enableLogCollection(isDebugEnabled ? LogCollectionState.Enabled : LogCollectionState.Disabled); + Factory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name)); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) return; String action = intent.getAction(); diff --git a/src/android/org/linphone/LinphoneActivity.java b/src/android/org/linphone/LinphoneActivity.java index 32e0afc14..b3fecbc24 100644 --- a/src/android/org/linphone/LinphoneActivity.java +++ b/src/android/org/linphone/LinphoneActivity.java @@ -2,7 +2,7 @@ package org.linphone; /* LinphoneActivity.java - Copyright (C) 2012 Belledonne Communications, Grenoble, France + Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -66,21 +66,21 @@ import org.linphone.LinphoneManager.AddressType; import org.linphone.assistant.AssistantActivity; import org.linphone.assistant.RemoteProvisioningLoginActivity; import org.linphone.compatibility.Compatibility; -import org.linphone.core.CallDirection; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneAuthInfo; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallLog; -import org.linphone.core.LinphoneCallLog.CallStatus; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.RegistrationState; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.Call.Dir; +import org.linphone.core.Address; +import org.linphone.core.AuthInfo; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.CallLog; +import org.linphone.core.CallLog.CallStatus; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatRoom; +import org.linphone.core.Core; +import org.linphone.core.Core.RegistrationState; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.ProxyConfig; import org.linphone.core.Reason; import org.linphone.mediastream.Log; import org.linphone.purchase.InAppPurchaseActivity; @@ -103,9 +103,6 @@ import java.util.List; import static org.linphone.LinphoneActivity.ChatRoomContainer.createChatroomContainer; -/** - * @author Sylvain Berfini - */ public class LinphoneActivity extends LinphoneGenericActivity implements OnClickListener, ContactPicked, ActivityCompat.OnRequestPermissionsResultCallback { public static final String PREF_FIRST_LAUNCH = "pref_first_launch"; private static final int SETTINGS_ACTIVITY = 123; @@ -133,7 +130,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick private boolean emptyFragment = false; private boolean isTrialAccount = false; private OrientationEventListener mOrientationHelper; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; private LinearLayout mTabBar; private DrawerLayout sideMenu; @@ -215,16 +212,16 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick currentFragment = (FragmentsAvailable) savedInstanceState.getSerializable("currentFragment"); } - mListener = new LinphoneCoreListenerBase(){ + mListener = new CoreListenerStub(){ @Override - public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { + public void onMessageReceived(Core lc, ChatRoom cr, ChatMessage message) { displayMissedChats(getUnreadMessageCount()); } @Override - public void registrationState(LinphoneCore lc, LinphoneProxyConfig proxy, LinphoneCore.RegistrationState state, String smessage) { - LinphoneAuthInfo authInfo = lc.findAuthInfo(proxy.getIdentity(), proxy.getRealm(), proxy.getDomain()); - if (state.equals(RegistrationState.RegistrationCleared)) { + public void onRegistrationStateChanged(Core lc, ProxyConfig proxy, Core.RegistrationState state, String smessage) { + AuthInfo authInfo = lc.findAuthInfo(proxy.getRealm(), proxy.getIdentityAddress().getUsername(), proxy.getDomain()); + if (state.equals(RegistrationState.Cleared)) { if (lc != null) { if (authInfo != null) lc.removeAuthInfo(authInfo); @@ -235,14 +232,14 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick if(getResources().getBoolean(R.bool.use_phone_number_validation) && authInfo != null && authInfo.getDomain().equals(getString(R.string.default_domain))) { - if (state.equals(RegistrationState.RegistrationOk)) { + if (state.equals(RegistrationState.Ok)) { LinphoneManager.getInstance().isAccountWithAlias(); } } - if(state.equals(RegistrationState.RegistrationFailed) && newProxyConfig) { + if(state.equals(RegistrationState.Failed) && newProxyConfig) { newProxyConfig = false; - if (proxy.getError() == Reason.BadCredentials) { + if (proxy.getError() == Reason.Forbidden) { //displayCustomToast(getString(R.string.error_bad_credentials), Toast.LENGTH_LONG); } if (proxy.getError() == Reason.Unauthorized) { @@ -255,12 +252,12 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } @Override - public void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State state, String message) { + public void onCallStateChanged(Core lc, Call call, Call.State state, String message) { if (state == State.IncomingReceived) { startActivity(new Intent(LinphoneActivity.instance(), CallIncomingActivity.class)); } else if (state == State.OutgoingInit || state == State.OutgoingProgress) { startActivity(new Intent(LinphoneActivity.instance(), CallOutgoingActivity.class)); - } else if (state == State.CallEnd || state == State.Error || state == State.CallReleased) { + } else if (state == State.End || state == State.Error || state == State.Released) { resetClassicMenuLayoutAndGoBackToCallIfStillRunning(); } @@ -548,22 +545,16 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } } - public void displayHistoryDetail(String sipUri, LinphoneCallLog log) { - LinphoneAddress lAddress; - try { - lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(sipUri); - } catch (LinphoneCoreException e) { - Log.e("Cannot display history details",e); - //TODO display error message - return; - } + public void displayHistoryDetail(String sipUri, CallLog log) { + Address lAddress; + lAddress = Factory.instance().createAddress(sipUri); LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(lAddress); String displayName = c != null ? c.getFullName() : LinphoneUtils.getAddressDisplayName(sipUri); String pictureUri = c != null && c.getPhotoUri() != null ? c.getPhotoUri().toString() : null; String status; - if (log.getDirection() == CallDirection.Outgoing) { + if (log.getDir() == Call.Dir.Outgoing) { status = getString(R.string.outgoing); } else { if (log.getStatus() == CallStatus.Missed) { @@ -573,8 +564,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } } - String callTime = secondsToDisplayableString(log.getCallDuration()); - String callDate = String.valueOf(log.getTimestamp()); + String callTime = secondsToDisplayableString(log.getDuration()); + String callDate = String.valueOf(log.getStartDate()); Fragment fragment2 = getFragmentManager().findFragmentById(R.id.fragmentContainer2); if (fragment2 != null && fragment2.isVisible() && currentFragment == FragmentsAvailable.HISTORY_DETAIL) { @@ -637,6 +628,14 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick changeCurrentFragment(FragmentsAvailable.ABOUT, null); } + public void displayContactsForEdition(String sipAddress, String displayName) { + Bundle extras = new Bundle(); + extras.putBoolean("EditOnClick", true); + extras.putString("SipAddress", sipAddress); + extras.putString("DisplayName", displayName); + changeCurrentFragment(FragmentsAvailable.CONTACTS_LIST, extras); + } + public void displayAssistant() { startActivity(new Intent(LinphoneActivity.this, AssistantActivity.class)); } @@ -649,8 +648,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick public int getUnreadMessageCount() { int count = 0; - LinphoneChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); - for (LinphoneChatRoom chatroom : chats) { + ChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); + for (ChatRoom chatroom : chats) { count += chatroom.getUnreadMessagesCount(); } return count; @@ -661,8 +660,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick ArrayList listUri = new ArrayList(); if (LinphoneManager.isInstanciated() && LinphoneManager.getLc() != null && LinphoneManager.getLc().getDefaultProxyConfig() != null - && LinphoneManager.getLc().getDefaultProxyConfig().getIdentity() != null) { - listUri.add(LinphoneManager.getLc().getDefaultProxyConfig().getAddress().asStringUriOnly()); + && LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress() != null) { + listUri.add(LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress().asStringUriOnly()); } for (ContactAddress ca : list) { listUri.add(ca.getAddress()); @@ -671,7 +670,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras); } - private void displayChat(String sipUri, String message, String fileUri, String pictureUri, String thumbnailUri, String displayName, LinphoneAddress lAddress) { + private void displayChat(String sipUri, String message, String fileUri, String pictureUri, String thumbnailUri, String displayName, Address lAddress) { Bundle extras = new Bundle(); extras.putString("SipUri", sipUri); if(message != null) @@ -699,15 +698,10 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick String thumbnailUri = null; String displayName = null; - LinphoneAddress lAddress = null; + Address lAddress = null; if(sipUri != null) { - try { - lAddress = LinphoneManager.getLc().interpretUrl(sipUri); - } catch (LinphoneCoreException e) { - //TODO display error message - Log.e("Cannot display chat", e); - return; - } + lAddress = LinphoneManager.getLc().interpretUrl(sipUri); + if (lAddress == null) return; LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(lAddress); displayName = contact != null ? contact.getFullName() : null; @@ -857,20 +851,20 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } static class ChatRoomContainer{ - private LinphoneChatRoom mCr; + private ChatRoom mCr; long mTime; - static public ChatRoomContainer createChatroomContainer(LinphoneChatRoom chatRoom) { + static public ChatRoomContainer createChatroomContainer(ChatRoom chatRoom) { if (chatRoom.getHistorySize() <= 0) return null; return new ChatRoomContainer(chatRoom); } - public ChatRoomContainer(LinphoneChatRoom chatroom){ + public ChatRoomContainer(ChatRoom chatroom){ mCr = chatroom; - LinphoneChatMessage[] lastMsg = chatroom.getHistory(1); + ChatMessage[] lastMsg = chatroom.getHistory(1); if (lastMsg != null && lastMsg.length > 0 && lastMsg[0] != null) { mTime = lastMsg[0].getTime(); }else mTime = 0; } - LinphoneChatRoom getChatRoom(){ + ChatRoom getChatRoom(){ return mCr; } long getTime(){ @@ -880,10 +874,10 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick public List getChatList() { ArrayList chatList = new ArrayList(); - LinphoneChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); + ChatRoom[] chats = LinphoneManager.getLc().getChatRooms(); List rooms = new ArrayList(); - for (LinphoneChatRoom chatroom : chats) { + for (ChatRoom chatroom : chats) { ChatRoomContainer crc = createChatroomContainer(chatroom); if (crc != null) rooms.add(crc); } @@ -913,7 +907,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } public void removeFromChatList(String sipUri) { - LinphoneChatRoom chatroom = LinphoneManager.getLc().getOrCreateChatRoom(sipUri); + ChatRoom chatroom = LinphoneManager.getLc().getChatRoomFromUri(sipUri); chatroom.deleteHistory(); } @@ -989,7 +983,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick @Override public void onClick(View view) { String newPassword = ((EditText) dialog.findViewById(R.id.password)).getText().toString(); - LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(username, null, newPassword, null, realm, domain); + AuthInfo authInfo = Factory.instance().createAuthInfo(username, null, newPassword, null, realm, domain); LinphoneManager.getLc().addAuthInfo(authInfo); LinphoneManager.getLc().refreshRegisters(); dialog.dismiss(); @@ -1020,7 +1014,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick LinphoneManager.getInstance().newOutgoingCall(address); } - public void startIncallActivity(LinphoneCall currentCall) { + public void startIncallActivity(Call currentCall) { Intent intent = new Intent(this, CallActivity.class); startOrientationSensor(); startActivityForResult(intent, CALL_ACTIVITY); @@ -1064,11 +1058,11 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick Log.d("Phone orientation changed to ", degrees); int rotation = (360 - degrees) % 360; - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.setDeviceRotation(rotation); - LinphoneCall currentCall = lc.getCurrentCall(); - if (currentCall != null && currentCall.cameraEnabled() && currentCall.getCurrentParams().getVideoEnabled()) { + Call currentCall = lc.getCurrentCall(); + if (currentCall != null && currentCall.cameraEnabled() && currentCall.getCurrentParams().videoEnabled()) { lc.updateCall(currentCall, null); } } @@ -1094,8 +1088,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() > 0) { - LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; - if (call.getState() == LinphoneCall.State.IncomingReceived) { + Call call = LinphoneManager.getLc().getCalls()[0]; + if (call.getState() == Call.State.IncomingReceived) { startActivity(new Intent(LinphoneActivity.this, CallIncomingActivity.class)); } else { startIncallActivity(call); @@ -1111,6 +1105,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick { Bundle extras = new Bundle(); extras.putSerializable("NewSipAdress", sipUri); + extras.putSerializable("NewDisplayName", displayName); changeCurrentFragment(FragmentsAvailable.CONTACT_EDITOR, extras); } @@ -1180,7 +1175,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick protected void onPause() { getIntent().putExtra("PreviousActivity", 0); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -1392,7 +1387,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick startService(new Intent(Intent.ACTION_MAIN).setClass(this, LinphoneService.class)); } - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); if (!LinphoneService.instance().displayServiceNotification()) { @@ -1425,12 +1420,12 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick if (getIntent().getIntExtra("PreviousActivity", 0) != CALL_ACTIVITY && !doNotGoToCallActivity) { if (LinphoneManager.getLc().getCalls().length > 0) { - LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; - LinphoneCall.State callState = call.getState(); + Call call = LinphoneManager.getLc().getCalls()[0]; + Call.State onCallStateChanged = call.getState(); - if (callState == State.IncomingReceived) { + if (onCallStateChanged == State.IncomingReceived) { startActivity(new Intent(this, CallIncomingActivity.class)); - } else if (callState == State.OutgoingInit || callState == State.OutgoingProgress || callState == State.OutgoingRinging) { + } else if (onCallStateChanged == State.OutgoingInit || onCallStateChanged == State.OutgoingProgress || onCallStateChanged == State.OutgoingRinging) { startActivity(new Intent(this, CallOutgoingActivity.class)); } else { startIncallActivity(call); @@ -1495,7 +1490,6 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick ((SettingsFragment) fragment).closePreferenceScreen(); } } - Bundle extras = intent.getExtras(); if (extras != null && extras.getBoolean("GoToChat", false)) { LinphoneService.instance().removeMessageNotification(); @@ -1511,9 +1505,18 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick displayInapp(); } else if (extras != null && extras.getBoolean("Notification", false)) { if (LinphoneManager.getLc().getCallsNb() > 0) { - LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; + Call call = LinphoneManager.getLc().getCalls()[0]; startIncallActivity(call); } + }else if (extras != null && extras.getBoolean("StartCall", false)) { + boolean extraBool = extras.getBoolean("StartCall", false); + if (CallActivity.isInstanciated()) { + CallActivity.instance().startIncomingCallActivity(); + } else { + mAddressWaitingToBeCalled = extras.getString("NumberToCall"); + goToDialerFragment(); + //startActivity(new Intent(this, CallIncomingActivity.class)); + } } else { DialerFragment dialerFragment = DialerFragment.instance(); if (dialerFragment != null) { @@ -1534,8 +1537,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } if (LinphoneManager.getLc().getCalls().length > 0) { // If a call is ringing, start incomingcallactivity - Collection incoming = new ArrayList(); - incoming.add(LinphoneCall.State.IncomingReceived); + Collection incoming = new ArrayList(); + incoming.add(Call.State.IncomingReceived); if (LinphoneUtils.getCallsInState(LinphoneManager.getLc(), incoming).size() > 0) { if (CallActivity.isInstanciated()) { CallActivity.instance().startIncomingCallActivity(); @@ -1635,13 +1638,13 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick }); } - private int getStatusIconResource(LinphoneCore.RegistrationState state) { + private int getStatusIconResource(Core.RegistrationState state) { try { - if (state == RegistrationState.RegistrationOk) { + if (state == RegistrationState.Ok) { return R.drawable.led_connected; - } else if (state == RegistrationState.RegistrationProgress) { + } else if (state == RegistrationState.Progress) { return R.drawable.led_inprogress; - } else if (state == RegistrationState.RegistrationFailed) { + } else if (state == RegistrationState.Failed) { return R.drawable.led_error; } else { return R.drawable.led_disconnected; @@ -1660,7 +1663,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick TextView displayName = (TextView) defaultAccount.findViewById(R.id.main_account_display_name); - LinphoneProxyConfig proxy = LinphoneManager.getLc().getDefaultProxyConfig(); + ProxyConfig proxy = LinphoneManager.getLc().getDefaultProxyConfig(); if(proxy == null) { displayName.setText(getString(R.string.no_account)); status.setVisibility(View.GONE); @@ -1670,8 +1673,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick defaultAccount.setOnClickListener(null); } else { - address.setText(proxy.getAddress().asStringUriOnly()); - displayName.setText(LinphoneUtils.getAddressDisplayName(proxy.getAddress())); + address.setText(proxy.getIdentityAddress().asStringUriOnly()); + displayName.setText(LinphoneUtils.getAddressDisplayName(proxy.getIdentityAddress())); status.setImageResource(getStatusIconResource(proxy.getState())); status.setVisibility(View.VISIBLE); @@ -1686,7 +1689,8 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } public void refreshAccounts(){ - if (LinphoneManager.getLc().getProxyConfigList().length > 1) { + if (LinphoneManager.getLc().getProxyConfigList() != null && + LinphoneManager.getLc().getProxyConfigList().length > 1) { accountsList.setVisibility(View.VISIBLE); accountsList.setAdapter(new AccountsListAdapter()); accountsList.setOnItemClickListener(new AdapterView.OnItemClickListener() { @@ -1711,16 +1715,16 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick } class AccountsListAdapter extends BaseAdapter { - List proxy_list; + List proxy_list; AccountsListAdapter() { - proxy_list = new ArrayList(); + proxy_list = new ArrayList(); refresh(); } public void refresh(){ - proxy_list = new ArrayList(); - for(LinphoneProxyConfig proxyConfig : LinphoneManager.getLc().getProxyConfigList()){ + proxy_list = new ArrayList(); + for(ProxyConfig proxyConfig : LinphoneManager.getLc().getProxyConfigList()){ if(proxyConfig != LinphoneManager.getLc().getDefaultProxyConfig()){ proxy_list.add(proxyConfig); } @@ -1745,7 +1749,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick public View getView(final int position, View convertView, ViewGroup parent) { View view = null; - LinphoneProxyConfig lpc = (LinphoneProxyConfig) getItem(position); + ProxyConfig lpc = (ProxyConfig) getItem(position); if (convertView != null) { view = convertView; } else { @@ -1754,7 +1758,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick ImageView status = (ImageView) view.findViewById(R.id.account_status); TextView address = (TextView) view.findViewById(R.id.account_address); - String sipAddress = lpc.getAddress().asStringUriOnly(); + String sipAddress = lpc.getIdentityAddress().asStringUriOnly(); address.setText(sipAddress); diff --git a/src/android/org/linphone/LinphoneContact.java b/src/android/org/linphone/LinphoneContact.java index 3065c35a4..82d848e0e 100644 --- a/src/android/org/linphone/LinphoneContact.java +++ b/src/android/org/linphone/LinphoneContact.java @@ -1,6 +1,8 @@ +package org.linphone; + /* LinphoneContact.java -Copyright (C) 2016 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import java.io.Serializable; import java.util.ArrayList; @@ -24,12 +25,12 @@ import java.util.Collections; import java.util.List; import java.util.Locale; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneFriend; -import org.linphone.core.LinphoneFriendImpl; -import org.linphone.core.LinphoneFriend.SubscribePolicy; +import org.linphone.core.Address; +import org.linphone.core.Core; +import org.linphone.core.CoreException; +import org.linphone.core.Friend; +import org.linphone.core.Friend.SubscribePolicy; +import org.linphone.core.FriendList; import org.linphone.core.PresenceBasicStatus; import org.linphone.core.PresenceModel; import org.linphone.mediastream.Log; @@ -44,12 +45,9 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds; public class LinphoneContact implements Serializable, Comparable { - /** - * - */ private static final long serialVersionUID = 9015568163905205244L; - private transient LinphoneFriend friend; + private transient Friend friend; private String fullName, firstName, lastName, androidId, androidRawId, androidTagId, organization; private transient Uri photoUri, thumbnailUri; private List addresses; @@ -260,7 +258,7 @@ public class LinphoneContact implements Serializable, Comparable classToStart; - if (getResources().getBoolean(R.bool.show_tutorials_instead_of_app)) { + /*if (getResources().getBoolean(R.bool.show_tutorials_instead_of_app)) { classToStart = TutorialLauncherActivity.class; - } else if (getResources().getBoolean(R.bool.display_sms_remote_provisioning_activity) && LinphonePreferences.instance().isFirstRemoteProvisioning()) { + } else */if (getResources().getBoolean(R.bool.display_sms_remote_provisioning_activity) && LinphonePreferences.instance().isFirstRemoteProvisioning()) { classToStart = RemoteProvisioningActivity.class; } else { classToStart = LinphoneActivity.class; @@ -148,6 +146,13 @@ public class LinphoneLauncherActivity extends Activity { } newIntent.putExtra("fileShared", stringUriFileShared); } + }else if( ACTION_CALL_LINPHONE.equals(action) && (intent.getStringExtra("NumberToCall") != null)) { + String numberToCall = intent.getStringExtra("NumberToCall"); + if (CallActivity.isInstanciated()) { + CallActivity.instance().startIncomingCallActivity(); + } else { + LinphoneManager.getInstance().newOutgoingCall(numberToCall, null); + } } } if (uriToResolve != null) { diff --git a/src/android/org/linphone/LinphoneManager.java b/src/android/org/linphone/LinphoneManager.java index 08241d18b..ed6bb86d7 100644 --- a/src/android/org/linphone/LinphoneManager.java +++ b/src/android/org/linphone/LinphoneManager.java @@ -18,6 +18,25 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.linphone; +/* +LinphoneManager.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import android.annotation.SuppressLint; import android.annotation.TargetApi; import android.app.AlertDialog; @@ -54,34 +73,41 @@ import android.widget.Button; import android.widget.Toast; import org.linphone.assistant.AssistantActivity; -import org.linphone.core.CallDirection; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneAuthInfo; -import org.linphone.core.LinphoneBuffer; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallParams; -import org.linphone.core.LinphoneCallStats; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneContent; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.AuthMethod; -import org.linphone.core.LinphoneCore.EcCalibratorStatus; -import org.linphone.core.LinphoneCore.GlobalState; -import org.linphone.core.LinphoneCore.LogCollectionUploadState; -import org.linphone.core.LinphoneCore.RegistrationState; -import org.linphone.core.LinphoneCore.RemoteProvisioningState; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListener; -import org.linphone.core.LinphoneEvent; -import org.linphone.core.LinphoneFriend; -import org.linphone.core.LinphoneFriendList; -import org.linphone.core.LinphoneInfoMessage; -import org.linphone.core.LinphoneProxyConfig; -import org.linphone.core.OpenH264DownloadHelperListener; +import org.linphone.core.AccountCreatorListener; +import org.linphone.core.Call.Dir; +import org.linphone.core.AccountCreator; +import org.linphone.core.Address; +import org.linphone.core.AuthInfo; +import org.linphone.core.Buffer; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.CallLog; +import org.linphone.core.CallParams; +import org.linphone.core.CallStats; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatMessageListener; +import org.linphone.core.ChatRoom; +import org.linphone.core.ChatRoomListener; +import org.linphone.core.Content; +import org.linphone.core.Core; +import org.linphone.core.Core.AuthMethod; +import org.linphone.core.Core.EcCalibratorStatus; +import org.linphone.core.Core.GlobalState; +import org.linphone.core.Core.LogCollectionUploadState; +import org.linphone.core.Core.RegistrationState; +import org.linphone.core.Core.ConfiguringState; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; +import org.linphone.core.CoreListener; +import org.linphone.core.Event; +import org.linphone.core.Friend; +import org.linphone.core.FriendList; +import org.linphone.core.InfoMessage; +import org.linphone.core.Participant; +import org.linphone.core.PresenceActivity; +import org.linphone.core.ProxyConfig; +import org.linphone.core.VersionUpdateCheckResult; +import org.linphone.core.tools.OpenH264DownloadHelperListener; import org.linphone.core.PayloadType; import org.linphone.core.PresenceBasicStatus; import org.linphone.core.PresenceActivityType; @@ -89,14 +115,14 @@ import org.linphone.core.PresenceModel; import org.linphone.core.PublishState; import org.linphone.core.Reason; import org.linphone.core.SubscriptionState; -import org.linphone.core.TunnelConfig; +//import org.linphone.core.TunnelConfig; import org.linphone.mediastream.Log; import org.linphone.mediastream.Version; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration.AndroidCamera; import org.linphone.mediastream.video.capture.hwconf.Hacks; -import org.linphone.tools.H264Helper; -import org.linphone.tools.OpenH264DownloadHelper; +import org.linphone.core.tools.H264Helper; +import org.linphone.core.tools.OpenH264DownloadHelper; import java.io.File; import java.io.FileInputStream; @@ -128,10 +154,8 @@ import static android.media.AudioManager.STREAM_VOICE_CALL; * * Add Service Listener to react to Linphone state changes. * - * @author Guillaume Beraudo - * */ -public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessage.LinphoneChatMessageListener, SensorEventListener, LinphoneAccountCreator.LinphoneAccountCreatorListener { +public class LinphoneManager implements CoreListener, ChatMessageListener, SensorEventListener, AccountCreatorListener, ChatRoomListener { private static LinphoneManager instance; private Context mServiceContext; @@ -139,7 +163,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private PowerManager mPowerManager; private Resources mR; private LinphonePreferences mPrefs; - private LinphoneCore mLc; + private Core mLc; private OpenH264DownloadHelper mCodecDownloader; private OpenH264DownloadHelperListener mCodecListener; private String lastLcStatusMessage; @@ -154,17 +178,19 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private BroadcastReceiver mKeepAliveReceiver; private BroadcastReceiver mDozeReceiver; private BroadcastReceiver mHookReceiver; + private BroadcastReceiver mCallReceiver; private BroadcastReceiver mNetworkReceiver; private IntentFilter mKeepAliveIntentFilter; private IntentFilter mDozeIntentFilter; private IntentFilter mHookIntentFilter; + private IntentFilter mCallIntentFilter; private IntentFilter mNetworkIntentFilter; private Handler mHandler = new Handler(); private WakeLock mIncallWakeLock; private WakeLock mProximityWakelock; - private LinphoneAccountCreator accountCreator; - private static List mPendingChatFileMessage; - private static LinphoneChatMessage mUploadPendingFileMessage; + private AccountCreator accountCreator; + private static List mPendingChatFileMessage; + private static ChatMessage mUploadPendingFileMessage; private boolean mAreDisplayAlertMessage = false; private SensorManager mSensorManager; private Sensor mProximity; @@ -173,13 +199,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag public String wizardLoginViewDomain = null; - private static List simpleListeners = new ArrayList(); - public static void addListener(LinphoneChatMessage.LinphoneChatMessageListener listener) { + private static List simpleListeners = new ArrayList(); + public static void addListener(ChatMessageListener listener) { if (!simpleListeners.contains(listener)) { simpleListeners.add(listener); } } - public static void removeListener(LinphoneChatMessage.LinphoneChatMessageListener listener) { + public static void removeListener(ChatMessageListener listener) { simpleListeners.remove(listener); } @@ -190,7 +216,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag basePath = c.getFilesDir().getAbsolutePath(); mLPConfigXsd = basePath + "/lpconfig.xsd"; mLinphoneFactoryConfigFile = basePath + "/linphonerc"; - mLinphoneConfigFile = basePath + "/.linphonerc"; + mConfigFile = basePath + "/.linphonerc"; mLinphoneRootCaFile = basePath + "/rootca.pem"; mDynamicConfigFile = basePath + "/assistant_create.rc"; mRingSoundFile = basePath + "/ringtone.mkv"; @@ -210,7 +236,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mSensorManager = (SensorManager) c.getSystemService(Context.SENSOR_SERVICE); mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); mR = c.getResources(); - mPendingChatFileMessage = new ArrayList(); + mPendingChatFileMessage = new ArrayList(); } private static final int LINPHONE_VOLUME_STREAM = STREAM_VOICE_CALL; @@ -220,7 +246,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private final String mLinphoneFactoryConfigFile; private final String mLinphoneRootCaFile; private final String mDynamicConfigFile; - public final String mLinphoneConfigFile; + public final String mConfigFile; private final String mRingSoundFile; private final String mRingbackSoundFile; private final String mPauseSoundFile; @@ -236,17 +262,25 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag Log.w("Routing audio to " + (speakerOn ? "speaker" : "earpiece") + ", disabling bluetooth audio route"); BluetoothManager.getInstance().disableBluetoothSCO(); - mLc.enableSpeaker(speakerOn); + enableSpeaker(speakerOn); + } + + public boolean isSpeakerEnabled() { + return mAudioManager != null && mAudioManager.isSpeakerphoneOn(); + } + + public void enableSpeaker(boolean enable) { + mAudioManager.setSpeakerphoneOn(enable); } public void initOpenH264DownloadHelper() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { Log.i("Android >= 5.1 we disable the download of OpenH264"); - getLc().enableDownloadOpenH264(false); + OpenH264DownloadHelper.setOpenH264DownloadEnabled(false); return; } - mCodecDownloader = LinphoneCoreFactory.instance().createOpenH264DownloadHelper(); + mCodecDownloader = Factory.instance().createOpenH264DownloadHelper(getContext()); mCodecListener = new OpenH264DownloadHelperListener() { ProgressDialog progress; int ctxt = 0; @@ -348,16 +382,16 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag return instance; } - public void addDownloadMessagePending(LinphoneChatMessage message){ + public void addDownloadMessagePending(ChatMessage message){ synchronized (mPendingChatFileMessage) { mPendingChatFileMessage.add(message); } } - public boolean isMessagePending(LinphoneChatMessage message){ + public boolean isMessagePending(ChatMessage message){ boolean messagePending = false; synchronized (mPendingChatFileMessage) { - for (LinphoneChatMessage chat : mPendingChatFileMessage) { + for (ChatMessage chat : mPendingChatFileMessage) { if (chat.getStorageId() == message.getStorageId()) { messagePending = true; break; @@ -367,9 +401,9 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag return messagePending; } - public void removePendingMessage(LinphoneChatMessage message){ + public void removePendingMessage(ChatMessage message){ synchronized (mPendingChatFileMessage) { - for (LinphoneChatMessage chat : mPendingChatFileMessage) { + for (ChatMessage chat : mPendingChatFileMessage) { if (chat.getStorageId() == message.getStorageId()) { mPendingChatFileMessage.remove(chat); } @@ -378,11 +412,11 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } - public void setUploadPendingFileMessage(LinphoneChatMessage message){ + public void setUploadPendingFileMessage(ChatMessage message){ mUploadPendingFileMessage = message; } - public LinphoneChatMessage getMessageUploadPending(){ + public ChatMessage getMessageUploadPending(){ return mUploadPendingFileMessage; } @@ -391,8 +425,8 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } @Override - public void onLinphoneChatMessageStateChanged(LinphoneChatMessage msg, LinphoneChatMessage.State state) { - if (state == LinphoneChatMessage.State.FileTransferDone) { + public void onMsgStateChanged(ChatMessage msg, ChatMessage.State state) { + if (state == ChatMessage.State.FileTransferDone) { if (msg.isOutgoing() && mUploadingImage != null) { mUploadPendingFileMessage = null; mUploadingImage = null; @@ -402,44 +436,47 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } - if (state == LinphoneChatMessage.State.FileTransferError) { + if (state == ChatMessage.State.FileTransferError) { LinphoneUtils.displayErrorAlert(getString(R.string.image_transfert_error), LinphoneActivity.instance()); } - for (LinphoneChatMessage.LinphoneChatMessageListener l: simpleListeners) { - l.onLinphoneChatMessageStateChanged(msg, state); + for (ChatMessageListener l: simpleListeners) { + l.onMsgStateChanged(msg, state); } } @Override - public void onLinphoneChatMessageFileTransferReceived(LinphoneChatMessage msg, LinphoneContent content, LinphoneBuffer buffer) { + public void onFileTransferRecv(ChatMessage msg, Content content, Buffer buffer) { } @Override - public void onLinphoneChatMessageFileTransferSent(LinphoneChatMessage msg, LinphoneContent content, int offset, int size, LinphoneBuffer bufferToFill) { + public Buffer onFileTransferSend(ChatMessage message, Content content, int offset, int size) { if (mUploadingImage != null && size > 0) { + Buffer bufferToFill = Factory.instance().createBuffer(); byte[] data = new byte[size]; if (offset + size <= mUploadingImage.length) { for (int i = 0; i < size; i++) { data[i] = mUploadingImage[i + offset]; } - bufferToFill.setContent(data); + bufferToFill.setContent(data, size); bufferToFill.setSize(size); + return bufferToFill; } else { Log.e("Error, upload task asking for more bytes( " + (size+offset) + " ) than available (" + mUploadingImage.length + ")"); } } + return null; } @Override - public void onLinphoneChatMessageFileTransferProgressChanged(LinphoneChatMessage msg, LinphoneContent content, int offset, int total) { - for (LinphoneChatMessage.LinphoneChatMessageListener l: simpleListeners) { - l.onLinphoneChatMessageFileTransferProgressChanged(msg, content, offset, total); + public void onFileTransferProgressIndication(ChatMessage msg, Content content, int offset, int total) { + for (ChatMessageListener l: simpleListeners) { + l.onFileTransferProgressIndication(msg, content, offset, total); } } private boolean isPresenceModelActivitySet() { - LinphoneCore lc = getLcIfManagerNotDestroyedOrNull(); + Core lc = getLcIfManagerNotDestroyedOrNull(); if (isInstanciated() && lc != null) { return lc.getPresenceModel() != null && lc.getPresenceModel().getActivity() != null; } @@ -447,36 +484,36 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } public void changeStatusToOnline() { - LinphoneCore lc = getLcIfManagerNotDestroyedOrNull(); + Core lc = getLcIfManagerNotDestroyedOrNull(); if (isInstanciated() && lc != null && isPresenceModelActivitySet() && lc.getPresenceModel().getActivity().getType() != PresenceActivityType.TV) { lc.getPresenceModel().getActivity().setType(PresenceActivityType.TV); } else if (isInstanciated() && lc != null && !isPresenceModelActivitySet()) { - PresenceModel model = LinphoneCoreFactory.instance().createPresenceModel(PresenceActivityType.TV, null); + PresenceModel model = lc.createPresenceModelWithActivity(PresenceActivityType.TV, null); lc.setPresenceModel(model); } } public void changeStatusToOnThePhone() { - LinphoneCore lc = getLcIfManagerNotDestroyedOrNull(); + Core lc = getLcIfManagerNotDestroyedOrNull(); if (isInstanciated() && isPresenceModelActivitySet() && lc.getPresenceModel().getActivity().getType() != PresenceActivityType.OnThePhone) { lc.getPresenceModel().getActivity().setType(PresenceActivityType.OnThePhone); } else if (isInstanciated() && !isPresenceModelActivitySet()) { - PresenceModel model = LinphoneCoreFactory.instance().createPresenceModel(PresenceActivityType.OnThePhone, null); + PresenceModel model = lc.createPresenceModelWithActivity(PresenceActivityType.OnThePhone, null); lc.setPresenceModel(model); } } public void changeStatusToOffline() { - LinphoneCore lc = getLcIfManagerNotDestroyedOrNull(); + Core lc = getLcIfManagerNotDestroyedOrNull(); if (isInstanciated() && lc != null) { lc.getPresenceModel().setBasicStatus(PresenceBasicStatus.Closed); } } public void subscribeFriendList(boolean enabled){ - LinphoneCore lc = getLcIfManagerNotDestroyedOrNull(); - if(lc != null && lc.getFriendList() != null && lc.getFriendList().length > 0) { - LinphoneFriendList mFriendList = (lc.getFriendLists())[0]; + Core lc = getLcIfManagerNotDestroyedOrNull(); + if(lc != null && lc.getFriendsLists() != null && lc.getFriendsLists().length > 0) { + FriendList mFriendList = (lc.getFriendsLists())[0]; Log.i("Presence list subscription is " + (enabled ? "enabled" : "disabled")); mFriendList.enableSubscriptions(enabled); } @@ -494,7 +531,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag throw new RuntimeException("Linphone Manager should be created before accessed"); } - public static synchronized final LinphoneCore getLc() { + public static synchronized final Core getLc() { return getInstance().mLc; } @@ -508,7 +545,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } public void newOutgoingCall(String to, String displayName) { -// if (mLc.isIncall()) { +// if (mLc.inCall()) { // listenerDispatcher.tryingNewOutgoingCallButAlreadyInCall(); // return; // } @@ -518,26 +555,22 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag if (!to.startsWith("sip:") || !to.contains("@")) { LinphoneContact contact = ContactsManager.getInstance().findContactFromPhoneNumber(to); if (contact != null) { - String alias = contact.getPresenceModelForUri(to); + String alias = contact.getPresenceModelForUriOrTel(to); if (alias != null) { to = alias; } } } - LinphoneProxyConfig lpc = getLc().getDefaultProxyConfig(); + ProxyConfig lpc = getLc().getDefaultProxyConfig(); if (lpc != null) { to = lpc.normalizePhoneNumber(to); } - LinphoneAddress lAddress; - try { - lAddress = mLc.interpretUrl(to); - if (mR.getBoolean(R.bool.forbid_self_call) && lpc != null && lAddress.asStringUriOnly().equals(lpc.getIdentity())) { - return; - } - } catch (LinphoneCoreException e) { - Log.e(e); + Address lAddress; + lAddress = mLc.interpretUrl(to); + if (lAddress == null) return; + if (mR.getBoolean(R.bool.forbid_self_call) && lpc != null && lAddress.asStringUriOnly().equals(lpc.getIdentityAddress())) { return; } lAddress.setDisplayName(displayName); @@ -555,7 +588,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } - } catch (LinphoneCoreException e) { + } catch (CoreException e) { return; } } else if (LinphoneActivity.isInstanciated()) { @@ -567,14 +600,80 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag private void resetCameraFromPreferences() { boolean useFrontCam = mPrefs.useFrontCam(); - int camId = 0; AndroidCamera[] cameras = AndroidCameraConfiguration.retrieveCameras(); for (AndroidCamera androidCamera : cameras) { if (androidCamera.frontFacing == useFrontCam) camId = androidCamera.id; } - LinphoneManager.getLc().setVideoDevice(camId); + String[] devices = getLc().getVideoDevicesList(); + String newDevice = devices[camId]; + LinphoneManager.getLc().setVideoDevice(newDevice); + } + + @Override + public void onUndecryptableMessageReceived(ChatRoom cr, ChatMessage message) { + if (mServiceContext.getResources().getBoolean(R.bool.disable_chat)) { + return; + } + + final Address from = message.getFromAddress(); + String to = message.getToAddress().asString(); + try { + final LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(from); + if (LinphoneActivity.instance().isOnBackground()) { + if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat_message_notification)) { + if (contact != null) { + LinphoneService.instance().removedNotification(to, from.asStringUriOnly(), contact.getFullName() + , getString(R.string.message_cant_be_decrypted_notif)); + } else { + LinphoneService.instance().removedNotification(to, from.asStringUriOnly(), from.getUsername() + , getString(R.string.message_cant_be_decrypted_notif)); + } + } + } else if (!mAreDisplayAlertMessage){ + mAreDisplayAlertMessage = true; + final Dialog dialog = LinphoneActivity.instance().displayDialog( + getString(R.string.message_cant_be_decrypted).replace("%s" + , (contact != null) ? contact.getFullName() : from.getUsername())); + Button delete = (Button) dialog.findViewById(R.id.delete_button); + delete.setText(getString(R.string.call)); + Button cancel = (Button) dialog.findViewById(R.id.cancel); + cancel.setText(getString(R.string.ok)); + + delete.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + LinphoneManager.getInstance().newOutgoingCall(from.asStringUriOnly() + , (contact != null) ? contact.getFullName() : from.getUsername()); + dialog.dismiss(); + LinphoneManager.getInstance().setAreDisplayAlertMessage(false); + } + }); + + cancel.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View view) { + dialog.dismiss(); + LinphoneManager.getInstance().setAreDisplayAlertMessage(false); + } + }); + if(LinphoneManager.getLc().limeEnabled() == Core.LimeState.Mandatory) + dialog.show(); + } + } catch (Exception e) { + Log.e(e); + } + } + + @Override + public void onMessageReceived(ChatRoom cr, ChatMessage msg) { + + } + + @Override + public void onIsComposingReceived(ChatRoom cr, Address remoteAddr, boolean isComposing) { + } public static interface AddressType { @@ -592,7 +691,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } public boolean toggleEnableCamera() { - if (mLc.isIncall()) { + if (mLc.inCall()) { boolean enabled = !mLc.getCurrentCall().cameraEnabled(); enableCamera(mLc.getCurrentCall(), enabled); return enabled; @@ -600,7 +699,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag return false; } - public void enableCamera(LinphoneCall call, boolean enable) { + public void enableCamera(Call call, boolean enable) { if (call != null) { call.enableCamera(enable); if (mServiceContext.getResources().getBoolean(R.bool.enable_call_notification)) @@ -609,7 +708,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } public void sendStaticImage(boolean send) { - if (mLc.isIncall()) { + if (mLc.inCall()) { enableCamera(mLc.getCurrentCall(), !send); } } @@ -626,26 +725,26 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } public void terminateCall() { - if (mLc.isIncall()) { + if (mLc.inCall()) { mLc.terminateCall(mLc.getCurrentCall()); } } public void initTunnelFromConf() { - if (!mLc.isTunnelAvailable()) + if (!mLc.tunnelAvailable()) return; - NetworkInfo info = mConnectivityManager.getActiveNetworkInfo(); + /*NetworkInfo info = mConnectivityManager.getActiveNetworkInfo(); mLc.tunnelCleanServers(); TunnelConfig config = mPrefs.getTunnelConfig(); if (config.getHost() != null) { mLc.tunnelAddServer(config); manageTunnelServer(info); - } + }*/ // TODO FIXME } private boolean isTunnelNeeded(NetworkInfo info) { - if (info == null) { + /*if (info == null) { Log.i("No connectivity: tunnel should be disabled"); return false; } @@ -660,36 +759,36 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag && getString(R.string.tunnel_mode_entry_value_3G_only).equals(pref)) { Log.i("need tunnel: 'no wifi' connection"); return true; - } + }*/ // TODO FIXME return false; } private void manageTunnelServer(NetworkInfo info) { if (mLc == null) return; - if (!mLc.isTunnelAvailable()) return; + if (!mLc.tunnelAvailable()) return; - Log.i("Managing tunnel"); + /*Log.i("Managing tunnel"); if (isTunnelNeeded(info)) { Log.i("Tunnel need to be activated"); - mLc.tunnelSetMode(LinphoneCore.TunnelMode.enable); + mLc.tunnelSetMode(Core.TunnelMode.enable); } else { Log.i("Tunnel should not be used"); String pref = mPrefs.getTunnelMode(); - mLc.tunnelSetMode(LinphoneCore.TunnelMode.disable); + mLc.tunnelSetMode(Core.TunnelMode.disable); if (getString(R.string.tunnel_mode_entry_value_auto).equals(pref)) { - mLc.tunnelSetMode(LinphoneCore.TunnelMode.auto); + mLc.tunnelSetMode(Core.TunnelMode.auto); } - } + }*/ // TODO FIXME } - public synchronized final void destroyLinphoneCore() { + public synchronized final void destroyCore() { sExited = true; ContactsManagerDestroy(); BluetoothManagerDestroy(); try { mTimer.cancel(); - mLc.destroy(); + mLc = null; } catch (RuntimeException e) { Log.e(e); @@ -707,6 +806,11 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } catch (Exception e) { Log.e(e); } + try { + mServiceContext.unregisterReceiver(mCallReceiver); + } catch (Exception e) { + Log.e(e); + } try { mServiceContext.unregisterReceiver(mKeepAliveReceiver); } catch (Exception e) { @@ -714,15 +818,17 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } try { dozeManager(false); - } catch (Exception e) { + } catch (IllegalArgumentException iae) { + Log.e(iae); + }catch (Exception e) { Log.e(e); } mLc = null; } } - public void restartLinphoneCore() { - destroyLinphoneCore(); + public void restartCore() { + destroyCore(); startLibLinphone(mServiceContext); sExited = false; } @@ -731,9 +837,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag try { copyAssetsFromPackage(); //traces alway start with traces enable to not missed first initialization - - mLc = LinphoneCoreFactory.instance().createLinphoneCore(this, mLinphoneConfigFile, mLinphoneFactoryConfigFile, null, c); - + mLc = Factory.instance().createCore(this, mConfigFile, mLinphoneFactoryConfigFile, c); TimerTask lTask = new TimerTask() { @Override public void run() { @@ -750,8 +854,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag /*use schedule instead of scheduleAtFixedRate to avoid iterate from being call in burst after cpu wake up*/ mTimer = new Timer("Linphone scheduler"); mTimer.schedule(lTask, 0, 20); - } - catch (Exception e) { + } catch (Exception e) { Log.e(e, "Cannot start linphone"); } } @@ -784,7 +887,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } - private synchronized void initLiblinphone(LinphoneCore lc) throws LinphoneCoreException { + private synchronized void initLiblinphone(Core lc) throws CoreException { mLc = lc; @@ -797,7 +900,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag prefMigrator.doMigration(); } - mLc.setZrtpSecretsCache(basePath + "/zrtp_secrets"); + mLc.setZrtpSecretsFile(basePath + "/zrtp_secrets"); try { String versionName = mServiceContext.getPackageManager().getPackageInfo(mServiceContext.getPackageName(), 0).versionName; @@ -810,7 +913,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } mLc.setRingback(mRingbackSoundFile); - mLc.setRootCA(mLinphoneRootCaFile); + mLc.setRootCa(mLinphoneRootCaFile); mLc.setPlayFile(mPauseSoundFile); mLc.setChatDatabasePath(mChatDatabaseFile); mLc.setCallLogsDatabasePath(mCallLogDatabaseFile); @@ -821,9 +924,9 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag int availableCores = Runtime.getRuntime().availableProcessors(); Log.w("MediaStreamer : " + availableCores + " cores detected and configured"); - mLc.setCpuCount(availableCores); + //mLc.setCpuCount(availableCores); - mLc.migrateCallLogs(); + mLc.migrateLogsFromRcToDb(); if (mServiceContext.getResources().getBoolean(R.bool.enable_push_id)) { initPushNotificationsService(); @@ -840,19 +943,22 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mKeepAliveReceiver = new KeepAliveReceiver(); mServiceContext.registerReceiver(mKeepAliveReceiver, mKeepAliveIntentFilter); - mDozeIntentFilter = new IntentFilter(); + mCallIntentFilter = new IntentFilter("android.intent.action.ACTION_NEW_OUTGOING_CALL"); + mCallIntentFilter.setPriority(99999999); + mCallReceiver = new OutgoingCallReceiver(); + try { + mServiceContext.registerReceiver(mCallReceiver, mCallIntentFilter); + }catch(IllegalArgumentException e){e.printStackTrace();} + mProximityWakelock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "manager_proximity_sensor"); + + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + mDozeIntentFilter = new IntentFilter(); mDozeIntentFilter.addAction(PowerManager.ACTION_DEVICE_IDLE_MODE_CHANGED); - } - - mDozeReceiver = new DozeReceiver(); - - if (mPrefs.isDozeModeEnabled()) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - dozeModeEnabled = ((PowerManager) mServiceContext.getSystemService(Context.POWER_SERVICE)).isDeviceIdleMode(); - if (dozeModeEnabled) - mServiceContext.registerReceiver(mDozeReceiver, mDozeIntentFilter); - } + mDozeReceiver = new DozeReceiver(); + dozeModeEnabled = ((PowerManager) mServiceContext.getSystemService(Context.POWER_SERVICE)).isDeviceIdleMode(); + mServiceContext.registerReceiver(mDozeReceiver, mDozeIntentFilter); } mHookIntentFilter = new IntentFilter("com.base.module.phone.HOOKEVENT"); @@ -860,8 +966,6 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag mHookReceiver = new HookReceiver(); mServiceContext.registerReceiver(mHookReceiver, mHookIntentFilter); - mProximityWakelock = mPowerManager.newWakeLock(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, "manager_proximity_sensor"); - // Since Android N we need to register the network manager if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) { mNetworkReceiver = new NetworkManager(); @@ -873,18 +977,16 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag resetCameraFromPreferences(); - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc(), LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); callGsmON = false; } protected void setHandsetMode(Boolean on){ - if(mLc.isInComingInvitePending() && on){ + if(mLc.isIncomingInvitePending() && on){ handsetON = true; - try { - mLc.acceptCall(mLc.getCurrentCall()); - LinphoneActivity.instance().startIncallActivity(mLc.getCurrentCall()); - }catch(LinphoneCoreException e){} + mLc.acceptCall(mLc.getCurrentCall()); + LinphoneActivity.instance().startIncallActivity(mLc.getCurrentCall()); }else if(on && CallActivity.isInstanciated()){ handsetON = true; CallActivity.instance().setSpeakerEnabled(true); @@ -904,7 +1006,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag copyIfNotExist(R.raw.ringback, mRingbackSoundFile); copyIfNotExist(R.raw.hold, mPauseSoundFile); copyIfNotExist(R.raw.incoming_chat, mErrorToneFile); - copyIfNotExist(R.raw.linphonerc_default, mLinphoneConfigFile); + copyIfNotExist(R.raw.linphonerc_default, mConfigFile); copyFromPackage(R.raw.linphonerc_factory, new File(mLinphoneFactoryConfigFile).getName()); copyIfNotExist(R.raw.lpconfig, mLPConfigXsd); copyFromPackage(R.raw.rootca, new File(mLinphoneRootCaFile).getName()); @@ -943,15 +1045,15 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag public boolean detectVideoCodec(String mime) { - for (PayloadType videoCodec : mLc.getVideoCodecs()) { - if (mime.equals(videoCodec.getMime())) return true; + for (PayloadType videoCodec : mLc.getVideoPayloadTypes()) { + if (mime.equals(videoCodec.getMimeType())) return true; } return false; } public boolean detectAudioCodec(String mime){ - for (PayloadType audioCodec : mLc.getAudioCodecs()) { - if (mime.equals(audioCodec.getMime())) return true; + for (PayloadType audioCodec : mLc.getAudioPayloadTypes()) { + if (mime.equals(audioCodec.getMimeType())) return true; } return false; } @@ -1022,7 +1124,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag BluetoothManagerDestroy(); try { mTimer.cancel(); - mLc.destroy(); + mLc = null; } catch (RuntimeException e) { Log.e(e); @@ -1045,8 +1147,15 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } catch (Exception e) { Log.e(e); } + try { + mServiceContext.unregisterReceiver(mCallReceiver); + } catch (Exception e) { + Log.e(e); + } try { dozeManager(false); + } catch (IllegalArgumentException iae) { + Log.e(iae); } catch (Exception e) { Log.e(e); } @@ -1062,7 +1171,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag dozeModeEnabled = true; } else { Log.i("[Doze Mode]: unregister"); - mServiceContext.unregisterReceiver(mDozeReceiver); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + try { + mServiceContext.unregisterReceiver(mDozeReceiver); + } catch (IllegalArgumentException e) { + e.printStackTrace(); + } + } dozeModeEnabled = false; } } @@ -1155,32 +1270,34 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag void onEcCalibrationStatus(EcCalibratorStatus status, int delayMs); } - private LinphoneCall ringingCall; + private Call ringingCall; private MediaPlayer mRingerPlayer; private Vibrator mVibrator; - public void displayWarning(LinphoneCore lc, String message) {} - public void displayMessage(LinphoneCore lc, String message) {} - public void show(LinphoneCore lc) {} - public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf, String url) {} - public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) { + public void onNewSubscriptionRequested(Core lc, Friend lf, String url) {} + public void onNotifyPresenceReceived(Core lc, Friend lf) { ContactsManager.getInstance().refreshSipContact(lf); } @Override - public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) { + public void onEcCalibrationAudioInit(Core lc) { + + } + + @Override + public void onDtmfReceived(Core lc, Call call, int dtmf) { Log.d("DTMF received: " + dtmf); } @Override - public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { + public void onMessageReceived(Core lc, ChatRoom cr, ChatMessage message) { if (mServiceContext.getResources().getBoolean(R.bool.disable_chat)) { return; } - LinphoneAddress from = message.getFrom(); - String to = message.getTo().asString(); + Address from = message.getFromAddress(); + String to = message.getToAddress().asString(); String textMessage = (message.getFileTransferInformation() != null) ? getString(R.string.content_description_incoming_file) : message.getText(); @@ -1188,9 +1305,9 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(from); if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat_message_notification)) { if (contact != null) { - LinphoneService.instance().displayMessageNotification(to, from.asStringUriOnly(), contact.getFullName(), textMessage); + LinphoneService.instance().removedNotification(to, from.asStringUriOnly(), contact.getFullName(), textMessage); } else { - LinphoneService.instance().displayMessageNotification(to, from.asStringUriOnly(), from.getUserName(), textMessage); + LinphoneService.instance().removedNotification(to, from.asStringUriOnly(), from.getUsername(), textMessage); } } } catch (Exception e) { @@ -1199,59 +1316,10 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } @Override - public void messageReceivedUnableToDecrypted(LinphoneCore lc, LinphoneChatRoom cr, - LinphoneChatMessage message) { - if (mServiceContext.getResources().getBoolean(R.bool.disable_chat)) { - return; - } - - final LinphoneAddress from = message.getFrom(); - String to = message.getTo().asString(); - try { - final LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(from); - if (LinphoneActivity.instance().isOnBackground()) { - if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat_message_notification)) { - if (contact != null) { - LinphoneService.instance().displayMessageNotification(to, from.asStringUriOnly(), contact.getFullName() - , getString(R.string.message_cant_be_decrypted_notif)); - } else { - LinphoneService.instance().displayMessageNotification(to, from.asStringUriOnly(), from.getUserName() - , getString(R.string.message_cant_be_decrypted_notif)); - } - } - } else if (!mAreDisplayAlertMessage){ - mAreDisplayAlertMessage = true; - final Dialog dialog = LinphoneActivity.instance().displayDialog( - getString(R.string.message_cant_be_decrypted).replace("%s" - , (contact != null) ? contact.getFullName() : from.getUserName())); - Button delete = (Button) dialog.findViewById(R.id.delete_button); - delete.setText(getString(R.string.call)); - Button cancel = (Button) dialog.findViewById(R.id.cancel); - cancel.setText(getString(R.string.ok)); - - delete.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - LinphoneManager.getInstance().newOutgoingCall(from.asStringUriOnly() - , (contact != null) ? contact.getFullName() : from.getUserName()); - dialog.dismiss(); - LinphoneManager.getInstance().setAreDisplayAlertMessage(false); - } - }); - - cancel.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View view) { - dialog.dismiss(); - LinphoneManager.getInstance().setAreDisplayAlertMessage(false); - } - }); - if(LinphoneManager.getLc().getLimeEncryption() == LinphoneCore.LinphoneLimeState.Mandatory) - dialog.show(); - } - } catch (Exception e) { - Log.e(e); - } + public void onEcCalibrationResult(Core lc, EcCalibratorStatus status, int delay_ms) { + ((AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL); + mAudioManager.abandonAudioFocus(null); + Log.i("Set audio mode on 'Normal'"); } public void setAreDisplayAlertMessage(boolean b) { @@ -1262,25 +1330,27 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag return lastLcStatusMessage; } - public void displayStatus(final LinphoneCore lc, final String message) { + public void removed(final Core lc, final String message) { Log.i(message); lastLcStatusMessage=message; } - public void globalState(final LinphoneCore lc, final GlobalState state, final String message) { + public void onGlobalStateChanged(final Core lc, final GlobalState state, final String message) { Log.i("New global state [",state,"]"); - if (state == GlobalState.GlobalOn){ + if (state == Core.GlobalState.On){ try { - Log.e("LinphoneManager"," globalState ON"); + Log.e("LinphoneManager"," onGlobalStateChanged ON"); initLiblinphone(lc); - } catch (LinphoneCoreException e) { + }catch(IllegalArgumentException iae){ + Log.e(iae); + } catch (CoreException e) { Log.e(e); } } } - public void registrationState(final LinphoneCore lc, final LinphoneProxyConfig proxy,final RegistrationState state,final String message) { + public void onRegistrationStateChanged(final Core lc, final ProxyConfig proxy,final RegistrationState state,final String message) { Log.i("New registration state ["+state+"]"); if(LinphoneManager.getLc().getDefaultProxyConfig() == null){ subscribeFriendList(false); @@ -1343,7 +1413,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } @SuppressLint("Wakelock") - public void callState(final LinphoneCore lc,final LinphoneCall call, final State state, final String message) { + public void onCallStateChanged(final Core lc,final Call call, final State state, final String message) { Log.i("New call state [",state,"]"); if (state == State.IncomingReceived && !call.equals(lc.getCurrentCall())) { if (call.getReplacedCall()!=null){ @@ -1362,21 +1432,17 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag @Override public void run() { if (mLc != null) { - try { - if (mLc.getCallsNb() > 0) { - mLc.acceptCall(call); - LinphoneManager.getInstance().routeAudioToReceiver(); - LinphoneActivity.instance().startIncallActivity(call); - } - } catch (LinphoneCoreException e) { - Log.e(e); + if (mLc.getCallsNb() > 0) { + mLc.acceptCall(call); + LinphoneManager.getInstance().routeAudioToReceiver(); + LinphoneActivity.instance().startIncallActivity(call); } } } }; mTimer = new Timer("Auto answer"); mTimer.schedule(lTask, mPrefs.getAutoAnswerTime()); - } else if (state == State.IncomingReceived || (state == State.CallIncomingEarlyMedia && mR.getBoolean(R.bool.allow_ringing_while_early_media))) { + } else if (state == State.IncomingReceived || (state == State.IncomingEarlyMedia && mR.getBoolean(R.bool.allow_ringing_while_early_media))) { // Brighten screen for at least 10 seconds if (mLc.getCallsNb() == 1) { requestAudioFocus(STREAM_RING); @@ -1394,7 +1460,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag if (mLc.getCallsNb() == 1) { //It is for incoming calls, because outgoing calls enter MODE_IN_COMMUNICATION immediately when they start. //However, incoming call first use the MODE_RINGING to play the local ring. - if(call.getDirection() == CallDirection.Incoming) { + if(call.getDir() == Call.Dir.Incoming) { setAudioManagerInCallMode(); //mAudioManager.abandonAudioFocus(null); requestAudioFocus(STREAM_VOICE_CALL); @@ -1407,7 +1473,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } - if (state == State.CallEnd || state == State.Error) { + if (state == State.End || state == State.Error) { if (mLc.getCallsNb() == 0) { //Disabling proximity sensor enableProximitySensing(false); @@ -1434,17 +1500,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } } - if (state == State.CallUpdatedByRemote) { + if (state == State.UpdatedByRemote) { // If the correspondent proposes video while audio call - boolean remoteVideo = call.getRemoteParams().getVideoEnabled(); - boolean localVideo = call.getCurrentParams().getVideoEnabled(); + boolean remoteVideo = call.getRemoteParams().videoEnabled(); + boolean localVideo = call.getCurrentParams().videoEnabled(); boolean autoAcceptCameraPolicy = LinphonePreferences.instance().shouldAutomaticallyAcceptVideoRequests(); - if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !LinphoneManager.getLc().isInConference()) { - try { - LinphoneManager.getLc().deferCallUpdate(call); - } catch (LinphoneCoreException e) { - Log.e(e); - } + if (remoteVideo && !localVideo && !autoAcceptCameraPolicy && !(LinphoneManager.getLc().getConference() != null)) { + LinphoneManager.getLc().deferCallUpdate(call); } } if (state == State.OutgoingInit) { @@ -1476,13 +1538,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } } - public void callStatsUpdated(final LinphoneCore lc, final LinphoneCall call, final LinphoneCallStats stats) {} + public void onCallStatsUpdated(final Core lc, final Call call, final CallStats stats) {} - public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call, + public void onCallEncryptionChanged(Core lc, Call call, boolean encrypted, String authenticationToken) { } - public void startEcCalibration(LinphoneCoreListener l) throws LinphoneCoreException { + public void startEcCalibration() throws CoreException { routeAudioToSpeaker(); setAudioManagerInCallMode(); Log.i("Set audio mode on 'Voice Communication'"); @@ -1490,11 +1552,11 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag int oldVolume = mAudioManager.getStreamVolume(STREAM_VOICE_CALL); int maxVolume = mAudioManager.getStreamMaxVolume(STREAM_VOICE_CALL); mAudioManager.setStreamVolume(STREAM_VOICE_CALL, maxVolume, 0); - mLc.startEchoCalibration(l); + mLc.startEchoCancellerCalibration(); mAudioManager.setStreamVolume(STREAM_VOICE_CALL, oldVolume, 0); } - public int startEchoTester() throws LinphoneCoreException { + public int startEchoTester() throws CoreException { routeAudioToSpeaker(); setAudioManagerInCallMode(); Log.i("Set audio mode on 'Voice Communication'"); @@ -1507,26 +1569,27 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag String sampleRateProperty = mAudioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE); sampleRate = Integer.parseInt(sampleRateProperty); } - int status = mLc.startEchoTester(sampleRate); - if (status > 0) + /*int status = */mLc.startEchoTester(sampleRate); + /*if (status > 0)*/ echoTesterIsRunning = true; - else { + /*else { echoTesterIsRunning = false; routeAudioToReceiver(); mAudioManager.setStreamVolume(STREAM_VOICE_CALL, oldVolume, 0); ((AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL); Log.i("Set audio mode on 'Normal'"); - } - return status; + }*/ + return 1; + //return status; } - public int stopEchoTester() throws LinphoneCoreException { + public int stopEchoTester() throws CoreException { echoTesterIsRunning = false; - int status = mLc.stopEchoTester(); + /*int status = */mLc.stopEchoTester(); routeAudioToReceiver(); ((AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL); Log.i("Set audio mode on 'Normal'"); - return status; + return 1;//status; } public boolean getEchoTesterStatus() { @@ -1627,14 +1690,14 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } - public static String extractADisplayName(Resources r, LinphoneAddress address) { + public static String extractADisplayName(Resources r, Address address) { if (address == null) return r.getString(R.string.unknown_incoming_call_name); final String displayName = address.getDisplayName(); if (displayName!=null) { return displayName; - } else if (address.getUserName() != null){ - return address.getUserName(); + } else if (address.getUsername() != null){ + return address.getUsername(); } else { String rms = address.toString(); if (rms != null && rms.length() > 1) @@ -1653,40 +1716,30 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag * @return false if already in video call. */ public boolean addVideo() { - LinphoneCall call = mLc.getCurrentCall(); + Call call = mLc.getCurrentCall(); enableCamera(call, true); return reinviteWithVideo(); } - public boolean acceptCallIfIncomingPending() throws LinphoneCoreException { - if (mLc.isInComingInvitePending()) { + public boolean acceptCallIfIncomingPending() throws CoreException { + if (mLc.isIncomingInvitePending()) { mLc.acceptCall(mLc.getCurrentCall()); return true; } return false; } - public boolean acceptCall(LinphoneCall call) { - try { - mLc.acceptCall(call); - return true; - } catch (LinphoneCoreException e) { - Log.i(e, "Accept call failed"); - } - return false; + public boolean acceptCall(Call call) { + mLc.acceptCall(call); + return true; } - public boolean acceptCallWithParams(LinphoneCall call, LinphoneCallParams params) { - try { - mLc.acceptCallWithParams(call, params); - return true; - } catch (LinphoneCoreException e) { - Log.i(e, "Accept call failed"); - } - return false; + public boolean acceptCallWithParams(Call call, CallParams params) { + mLc.acceptCallWithParams(call, params); + return true; } - public static String extractIncomingRemoteName(Resources r, LinphoneAddress linphoneAddress) { + public static String extractIncomingRemoteName(Resources r, Address linphoneAddress) { return extractADisplayName(r, linphoneAddress); } @@ -1699,13 +1752,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag if (nextVolume > maxVolume) nextVolume = maxVolume; if (nextVolume < 0) nextVolume = 0; - mLc.setPlaybackGain((nextVolume - maxVolume)* dbStep); + mLc.setPlaybackGainDb((nextVolume - maxVolume)* dbStep); } else // starting from ICS, volume must be adjusted by the application, at least for STREAM_VOICE_CALL volume stream mAudioManager.adjustStreamVolume(LINPHONE_VOLUME_STREAM, i < 0 ? AudioManager.ADJUST_LOWER : AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI); } - public static synchronized LinphoneCore getLcIfManagerNotDestroyedOrNull() { + public static synchronized Core getLcIfManagerNotDestroyedOrNull() { if (sExited || instance == null) { // Can occur if the UI thread play a posted event but in the meantime the LinphoneManager was destroyed // Ex: stop call and quickly terminate application. @@ -1718,13 +1771,13 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag return instance != null; } - public synchronized LinphoneCall getPendingIncomingCall() { - LinphoneCall currentCall = mLc.getCurrentCall(); + public synchronized Call getPendingIncomingCall() { + Call currentCall = mLc.getCurrentCall(); if (currentCall == null) return null; - LinphoneCall.State state = currentCall.getState(); - boolean incomingPending = currentCall.getDirection() == CallDirection.Incoming - && (state == State.IncomingReceived || state == State.CallIncomingEarlyMedia); + Call.State state = currentCall.getState(); + boolean incomingPending = currentCall.getDir() == Call.Dir.Incoming + && (state == State.IncomingReceived || state == State.IncomingEarlyMedia); return incomingPending ? currentCall : null; } @@ -1740,7 +1793,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag if (LinphonePreferences.instance().getLinkPopupTime() == null || Long.parseLong(LinphonePreferences.instance().getLinkPopupTime()) < now) { accountCreator.setUsername(LinphonePreferences.instance().getAccountUsername(LinphonePreferences.instance().getDefaultAccountIndex())); - accountCreator.isAccountUsed(); + accountCreator.isAccountExist(); } } else { LinphonePreferences.instance().setLinkPopupTime(null); @@ -1754,7 +1807,7 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag LinphonePreferences.instance().setLinkPopupTime(String.valueOf(newDate)); - final Dialog dialog = LinphoneActivity.instance().displayDialog(String.format(getString(R.string.link_account_popup), LinphoneManager.getLc().getDefaultProxyConfig().getAddress().asStringUriOnly())); + final Dialog dialog = LinphoneActivity.instance().displayDialog(String.format(getString(R.string.link_account_popup), LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress().asStringUriOnly())); Button delete = (Button) dialog.findViewById(R.id.delete_button); delete.setText(getString(R.string.link)); Button cancel = (Button) dialog.findViewById(R.id.cancel); @@ -1820,186 +1873,195 @@ public class LinphoneManager implements LinphoneCoreListener, LinphoneChatMessag } @SuppressWarnings("serial") - public static class LinphoneConfigException extends LinphoneException { + public static class ConfigException extends LinphoneException { - public LinphoneConfigException() { + public ConfigException() { super(); } - public LinphoneConfigException(String detailMessage, Throwable throwable) { + public ConfigException(String detailMessage, Throwable throwable) { super(detailMessage, throwable); } - public LinphoneConfigException(String detailMessage) { + public ConfigException(String detailMessage) { super(detailMessage); } - public LinphoneConfigException(Throwable throwable) { + public ConfigException(Throwable throwable) { super(throwable); } } @Override - public void notifyReceived(LinphoneCore lc, LinphoneCall call, - LinphoneAddress from, byte[] event) { - } - @Override - public void transferState(LinphoneCore lc, LinphoneCall call, + public void onTransferStateChanged(Core lc, Call call, State new_call_state) { } + @Override - public void infoReceived(LinphoneCore lc, LinphoneCall call, LinphoneInfoMessage info) { + public void onChatRoomInstantiated(Core lc, ChatRoom cr) { + cr.setListener(this); + } + + @Override + public void onInfoReceived(Core lc, Call call, InfoMessage info) { Log.d("Info message received from "+call.getRemoteAddress().asString()); - LinphoneContent ct=info.getContent(); + Content ct=info.getContent(); if (ct!=null){ - Log.d("Info received with body with mime type "+ct.getType()+"/"+ct.getSubtype()+" and data ["+ct.getDataAsString()+"]"); + Log.d("Info received with body with mime type "+ct.getType()+"/"+ct.getSubtype()+" and data ["+ct.getStringBuffer()+"]"); } } @Override - public void subscriptionStateChanged(LinphoneCore lc, LinphoneEvent ev, + public void onSubscriptionStateChanged(Core lc, Event ev, SubscriptionState state) { - Log.d("Subscription state changed to "+state+" event name is "+ev.getEventName()); + Log.d("Subscription state changed to "+state+" event name is "+ev.getName()); } @Override - public void notifyReceived(LinphoneCore lc, LinphoneEvent ev, - String eventName, LinphoneContent content) { + public void onCallLogUpdated(Core lc, CallLog newcl) { + + } + + @Override + public void onNotifyReceived(Core lc, Event ev, + String eventName, Content content) { Log.d("Notify received for event "+eventName); - if (content!=null) Log.d("with content "+content.getType()+"/"+content.getSubtype()+" data:"+content.getDataAsString()); + if (content!=null) Log.d("with content "+content.getType()+"/"+content.getSubtype()+" data:"+content.getStringBuffer()); } @Override - public void publishStateChanged(LinphoneCore lc, LinphoneEvent ev, + public void onPublishStateChanged(Core lc, Event ev, PublishState state) { - Log.d("Publish state changed to " + state + " for event name " + ev.getEventName()); + Log.d("Publish state changed to " + state + " for event name " + ev.getName()); } @Override - public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr) { + public void onIsComposingReceived(Core lc, ChatRoom cr) { Log.d("Composing received for chatroom " + cr.getPeerAddress().asStringUriOnly()); } @Override - public void configuringStatus(LinphoneCore lc, - RemoteProvisioningState state, String message) { + public void onMessageReceivedUnableDecrypt(Core lc, ChatRoom room, ChatMessage message) { + + } + + @Override + public void onConfiguringStatus(Core lc, + ConfiguringState state, String message) { Log.d("Remote provisioning status = " + state.toString() + " (" + message + ")"); - if (state == RemoteProvisioningState.ConfiguringSuccessful) { + if (state == ConfiguringState.Successful) { if (LinphonePreferences.instance().isProvisioningLoginViewEnabled()) { - LinphoneProxyConfig proxyConfig = lc.createProxyConfig(); - try { - LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getIdentity()); - wizardLoginViewDomain = addr.getDomain(); - } catch (LinphoneCoreException e) { - wizardLoginViewDomain = null; - } + ProxyConfig proxyConfig = lc.createProxyConfig(); + Address addr = proxyConfig.getIdentityAddress(); + wizardLoginViewDomain = addr.getDomain(); } } } - @Override - public void fileTransferProgressIndication(LinphoneCore lc, - LinphoneChatMessage message, LinphoneContent content, int progress) { - } @Override - public void fileTransferRecv(LinphoneCore lc, LinphoneChatMessage message, - LinphoneContent content, byte[] buffer, int size) { + public void onCallCreated(Core lc, Call call) { } - @Override - public int fileTransferSend(LinphoneCore lc, LinphoneChatMessage message, - LinphoneContent content, ByteBuffer buffer, int size) { - return 0; - } @Override - public void uploadProgressIndication(LinphoneCore linphoneCore, int offset, int total) { + public void onLogCollectionUploadProgressIndication(Core linphoneCore, int offset, int total) { if(total > 0) Log.d("Log upload progress: currently uploaded = " + offset + " , total = " + total + ", % = " + String.valueOf((offset * 100) / total)); } @Override - public void uploadStateChanged(LinphoneCore linphoneCore, LogCollectionUploadState state, String info) { + public void onVersionUpdateCheckResultReceived(Core lc, VersionUpdateCheckResult result, String version, String url) { + + } + + @Override + public void onEcCalibrationAudioUninit(Core lc) { + + } + + @Override + public void onLogCollectionUploadStateChanged(Core linphoneCore, LogCollectionUploadState state, String info) { Log.d("Log upload state: " + state.toString() + ", info = " + info); } @Override - public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status, - int delay_ms, Object data) { - ((AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL); - mAudioManager.abandonAudioFocus(null); - Log.i("Set audio mode on 'Normal'"); - } - - @Override - public void friendListCreated(LinphoneCore lc, LinphoneFriendList list) { + public void onFriendListCreated(Core lc, FriendList list) { // TODO Auto-generated method stub } @Override - public void friendListRemoved(LinphoneCore lc, LinphoneFriendList list) { + public void onFriendListRemoved(Core lc, FriendList list) { // TODO Auto-generated method stub } @Override - public void networkReachableChanged(LinphoneCore lc, boolean enable) { + public void onReferReceived(Core lc, String refer_to) { } @Override - public void authInfoRequested(LinphoneCore lc, String realm, - String username, String domain) { - // TODO Auto-generated method stub + public void onNetworkReachable(Core lc, boolean enable) { } + @Override - public void authenticationRequested(LinphoneCore lc, - LinphoneAuthInfo authInfo, AuthMethod method) { + public void onAuthenticationRequested(Core lc, + AuthInfo authInfo, AuthMethod method) { // TODO Auto-generated method stub } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountExist)) { + public void onNotifyPresenceReceivedForUriOrTel(Core lc, Friend lf, String uri_or_tel, PresenceModel presence_model) { + + } + + @Override + public void onBuddyInfoUpdated(Core lc, Friend lf) { + + } + + @Override + public void onIsAccountExist(AccountCreator accountCreator, AccountCreator.Status status, String resp) { + if (status.equals(AccountCreator.Status.AccountExist)) { accountCreator.isAccountLinked(); } } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) {} + public void onCreateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) {} @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) {} + public void onActivateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) {} @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountNotLinked)) { + public void onLinkAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { + if (status.equals(AccountCreator.Status.AccountNotLinked)) { askLinkWithPhoneNumber(); } } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) {} + public void onActivateAlias(AccountCreator accountCreator, AccountCreator.Status status, String resp) {} @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) {} + public void onIsAccountActivated(AccountCreator accountCreator, AccountCreator.Status status, String resp) {} @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) {} + public void onRecoverAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) {} @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountNotLinked)) { + public void onIsAccountLinked(AccountCreator accountCreator, AccountCreator.Status status, String resp) { + if (status.equals(AccountCreator.Status.AccountNotLinked)) { askLinkWithPhoneNumber(); } } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) {} + public void onIsAliasUsed(AccountCreator accountCreator, AccountCreator.Status status, String resp) {} @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } } diff --git a/src/android/org/linphone/LinphoneNumberOrAddress.java b/src/android/org/linphone/LinphoneNumberOrAddress.java index c31ea91eb..9572161aa 100644 --- a/src/android/org/linphone/LinphoneNumberOrAddress.java +++ b/src/android/org/linphone/LinphoneNumberOrAddress.java @@ -1,6 +1,8 @@ +package org.linphone; + /* LinphoneNumberOrAddress.java -Copyright (C) 2016 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,30 +19,25 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; - import java.io.Serializable; public class LinphoneNumberOrAddress implements Serializable, Comparable { - /** - * - */ private static final long serialVersionUID = -2301689469730072896L; - + private boolean isSIPAddress; private String value, oldValueForUpdatePurpose; - + public LinphoneNumberOrAddress(String v, boolean isSIP) { value = v; isSIPAddress = isSIP; oldValueForUpdatePurpose = null; } - + public LinphoneNumberOrAddress(String v, boolean isSip, String old) { this(v, isSip); oldValueForUpdatePurpose = old; } - + @Override public int compareTo(LinphoneNumberOrAddress noa) { if (noa.isSIPAddress() == isSIPAddress()) { @@ -53,7 +50,7 @@ public class LinphoneNumberOrAddress implements Serializable, Comparable= prxCfgs.length) return null; return prxCfgs[n]; } - private LinphoneAuthInfo getAuthInfo(int n) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + private AuthInfo getAuthInfo(int n) { + ProxyConfig prxCfg = getProxyConfig(n); if (prxCfg == null) return null; - try { - LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity()); - LinphoneAuthInfo authInfo = getLc().findAuthInfo(addr.getUserName(), null, addr.getDomain()); - return authInfo; - } catch (LinphoneCoreException e) { - Log.e(e); - } - - return null; + Address addr = prxCfg.getIdentityAddress(); + AuthInfo authInfo = getLc().findAuthInfo(null, addr.getUsername(), addr.getDomain()); + return authInfo; } /** * Removes a authInfo from the core and returns a copy of it. * Useful to edit a authInfo (you should call saveAuthInfo after the modifications to save them). */ - private LinphoneAuthInfo getClonedAuthInfo(int n) { - LinphoneAuthInfo authInfo = getAuthInfo(n); + private AuthInfo getClonedAuthInfo(int n) { + AuthInfo authInfo = getAuthInfo(n); if (authInfo == null) return null; - LinphoneAuthInfo cloneAuthInfo = authInfo.clone(); + AuthInfo cloneAuthInfo = authInfo.clone(); getLc().removeAuthInfo(authInfo); return cloneAuthInfo; } @@ -190,12 +183,12 @@ public class LinphonePreferences { * Saves a authInfo into the core. * Useful to save the changes made to a cloned authInfo. */ - private void saveAuthInfo(LinphoneAuthInfo authInfo) { + private void saveAuthInfo(AuthInfo authInfo) { getLc().addAuthInfo(authInfo); } public static class AccountBuilder { - private LinphoneCore lc; + private Core lc; private String tempUsername; private String tempDisplayName; private String tempUserId; @@ -218,7 +211,7 @@ public class LinphonePreferences { private boolean tempNoDefault = false; - public AccountBuilder(LinphoneCore lc) { + public AccountBuilder(Core lc) { this.lc = lc; } @@ -252,7 +245,7 @@ public class LinphonePreferences { return this; } - public AccountBuilder setProxy(String proxy) { + public AccountBuilder setServerAddr(String proxy) { tempProxy = proxy; return this; } @@ -272,7 +265,7 @@ public class LinphonePreferences { return this; } - public AccountBuilder setUserId(String userId) { + public AccountBuilder setUserid(String userId) { tempUserId = userId; return this; } @@ -282,7 +275,7 @@ public class LinphonePreferences { return this; } - public AccountBuilder setAvpfRRInterval(int interval) { + public AccountBuilder setAvpfRrInterval(int interval) { tempAvpfRRInterval = interval; return this; } @@ -324,9 +317,9 @@ public class LinphonePreferences { /** * Creates a new account - * @throws LinphoneCoreException + * @throws CoreException */ - public void saveNewAccount() throws LinphoneCoreException { + public void saveNewAccount() throws CoreException { if (tempUsername == null || tempUsername.length() < 1 || tempDomain == null || tempDomain.length() < 1) { Log.w("Skipping account save: username or domain not provided"); @@ -345,8 +338,8 @@ public class LinphonePreferences { proxy = tempProxy; } } - LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy); - LinphoneAddress identityAddr = LinphoneCoreFactory.instance().createLinphoneAddress(identity); + Address proxyAddr = Factory.instance().createAddress(proxy); + Address identityAddr = Factory.instance().createAddress(identity); if (tempDisplayName != null) { identityAddr.setDisplayName(tempDisplayName); @@ -358,7 +351,11 @@ public class LinphonePreferences { String route = tempOutboundProxy ? proxyAddr.asStringUriOnly() : null; - LinphoneProxyConfig prxCfg = lc.createProxyConfig(identityAddr.asString(), proxyAddr.asStringUriOnly(), route, tempEnabled); + ProxyConfig prxCfg = lc.createProxyConfig(); + prxCfg.setIdentityAddress(identityAddr); + prxCfg.setServerAddr(proxyAddr.asStringUriOnly()); + prxCfg.setRoute(route); + prxCfg.enableRegister(tempEnabled); if (tempContactsParams != null) prxCfg.setContactUriParameters(tempContactsParams); @@ -368,8 +365,8 @@ public class LinphonePreferences { } catch (NumberFormatException nfe) { } } - prxCfg.enableAvpf(tempAvpfEnabled); - prxCfg.setAvpfRRInterval(tempAvpfRRInterval); + prxCfg.setAvpfMode(AVPFMode.Enabled); + prxCfg.setAvpfRrInterval(tempAvpfRRInterval); prxCfg.enableQualityReporting(tempQualityReportingEnabled); prxCfg.setQualityReportingCollector(tempQualityReportingCollector); prxCfg.setQualityReportingInterval(tempQualityReportingInterval); @@ -382,7 +379,7 @@ public class LinphonePreferences { if(tempRealm != null) prxCfg.setRealm(tempRealm); - LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, tempHa1, tempRealm, tempDomain); + AuthInfo authInfo = Factory.instance().createAuthInfo(tempUsername, tempUserId, tempPassword, tempHa1, tempRealm, tempDomain); lc.addProxyConfig(prxCfg); lc.addAuthInfo(authInfo); @@ -393,56 +390,48 @@ public class LinphonePreferences { } public void setAccountTransport(int n, String transport) { - LinphoneProxyConfig proxyConfig = getProxyConfig(n); + ProxyConfig proxyConfig = getProxyConfig(n); if (proxyConfig != null && transport != null) { - LinphoneAddress proxyAddr; - try { - proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getProxy()); - int port = 0; - if (transport.equals(getString(R.string.pref_transport_udp_key))) { - proxyAddr.setTransport(TransportType.LinphoneTransportUdp); - } else if (transport.equals(getString(R.string.pref_transport_tcp_key))) { - proxyAddr.setTransport(TransportType.LinphoneTransportTcp); - } else if (transport.equals(getString(R.string.pref_transport_tls_key))) { - proxyAddr.setTransport(TransportType.LinphoneTransportTls); - port = 5223; - } + Address proxyAddr; + proxyAddr = Factory.instance().createAddress(proxyConfig.getServerAddr()); + int port = 0; + if (transport.equals(getString(R.string.pref_transport_udp_key))) { + proxyAddr.setTransport(TransportType.Udp); + } else if (transport.equals(getString(R.string.pref_transport_tcp_key))) { + proxyAddr.setTransport(TransportType.Tcp); + } else if (transport.equals(getString(R.string.pref_transport_tls_key))) { + proxyAddr.setTransport(TransportType.Tls); + port = 5223; + } /* 3G mobile firewall might block random TLS port, so we force use of 5223. * However we must NOT use this port when changing to TCP/UDP because otherwise * REGISTER (and everything actually) will fail... * */ - if ("sip.linphone.org".equals(proxyConfig.getDomain())) { - proxyAddr.setPort(port); - } + if ("sip.linphone.org".equals(proxyConfig.getDomain())) { + proxyAddr.setPort(port); + } - LinphoneProxyConfig prxCfg = getProxyConfig(n); - prxCfg.edit(); - prxCfg.setProxy(proxyAddr.asStringUriOnly()); - prxCfg.done(); + ProxyConfig prxCfg = getProxyConfig(n); + prxCfg.edit(); + prxCfg.setServerAddr(proxyAddr.asStringUriOnly()); + prxCfg.done(); - if (isAccountOutboundProxySet(n)) { - setAccountOutboundProxyEnabled(n, true); - } - } catch (LinphoneCoreException e) { - Log.e(e); + if (isAccountOutboundProxySet(n)) { + setAccountOutboundProxyEnabled(n, true); } } } public TransportType getAccountTransport(int n) { TransportType transport = null; - LinphoneProxyConfig proxyConfig = getProxyConfig(n); + ProxyConfig proxyConfig = getProxyConfig(n); if (proxyConfig != null) { - LinphoneAddress proxyAddr; - try { - proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxyConfig.getProxy()); - transport = proxyAddr.getTransport(); - } catch (LinphoneCoreException e) { - Log.e(e); - } + Address proxyAddr; + proxyAddr = Factory.instance().createAddress(proxyConfig.getServerAddr()); + transport = proxyAddr.getTransport(); } return transport; @@ -452,9 +441,9 @@ public class LinphonePreferences { TransportType transport = getAccountTransport(n); String key = getString(R.string.pref_transport_udp_key); - if (transport != null && transport == TransportType.LinphoneTransportTcp) + if (transport != null && transport == TransportType.Tcp) key = getString(R.string.pref_transport_tcp_key); - else if (transport != null && transport == TransportType.LinphoneTransportTls) + else if (transport != null && transport == TransportType.Tls) key = getString(R.string.pref_transport_tls_key); return key; @@ -463,9 +452,9 @@ public class LinphonePreferences { public String getAccountTransportString(int n) { TransportType transport = getAccountTransport(n); - if (transport != null && transport == TransportType.LinphoneTransportTcp) + if (transport != null && transport == TransportType.Tcp) return getString(R.string.pref_transport_tcp); - else if (transport != null && transport == TransportType.LinphoneTransportTls) + else if (transport != null && transport == TransportType.Tls) return getString(R.string.pref_transport_tls); return getString(R.string.pref_transport_udp); @@ -473,38 +462,38 @@ public class LinphonePreferences { public void setAccountUsername(int n, String username) { String identity = "sip:" + username + "@" + getAccountDomain(n); - LinphoneAuthInfo old_info = getAuthInfo(n); - try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); - prxCfg.edit(); - prxCfg.setIdentity(identity); - prxCfg.enableRegister(true); - prxCfg.done(); + AuthInfo old_info = getAuthInfo(n); + ProxyConfig prxCfg = getProxyConfig(n); + if (prxCfg == null) { + Log.e("Error, no proxy config at index " + n); + return; + } + prxCfg.edit(); + prxCfg.setIdentityAddress(Factory.instance().createAddress(identity)); + prxCfg.enableRegister(true); + prxCfg.done(); - if (old_info != null) { - // We have to remove the previous auth info after otherwise we can't unregister the previous proxy config - LinphoneAuthInfo new_info = old_info.clone(); - getLc().removeAuthInfo(old_info); - new_info.setUsername(username); - saveAuthInfo(new_info); - } - } catch (LinphoneCoreException e) { - Log.e(e); + if (old_info != null) { + // We have to remove the previous auth info after otherwise we can't unregister the previous proxy config + AuthInfo new_info = old_info.clone(); + getLc().removeAuthInfo(old_info); + new_info.setUsername(username); + saveAuthInfo(new_info); } } public String getAccountUsername(int n) { - LinphoneAuthInfo authInfo = getAuthInfo(n); + AuthInfo authInfo = getAuthInfo(n); return authInfo == null ? null : authInfo.getUsername(); } public void setAccountDisplayName(int n, String displayName) { try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); - LinphoneAddress addr = LinphoneCoreFactory.instance().createLinphoneAddress(prxCfg.getIdentity()); + ProxyConfig prxCfg = getProxyConfig(n); + Address addr = prxCfg.getIdentityAddress(); addr.setDisplayName(displayName); prxCfg.edit(); - prxCfg.setIdentity(addr.asString()); + prxCfg.setIdentityAddress(addr); prxCfg.done(); } catch (Exception e) { Log.e(e); @@ -512,25 +501,25 @@ public class LinphonePreferences { } public String getAccountDisplayName(int n) { - if (getProxyConfig(n) == null || getProxyConfig(n).getAddress() == null) return null; - return getProxyConfig(n).getAddress().getDisplayName(); + if (getProxyConfig(n) == null || getProxyConfig(n).getIdentityAddress() == null) return null; + return getProxyConfig(n).getIdentityAddress().getDisplayName(); } public void setAccountUserId(int n, String userId) { - LinphoneAuthInfo info = getClonedAuthInfo(n); + AuthInfo info = getClonedAuthInfo(n); if(info != null) { - info.setUserId(userId); + info.setUserid(userId); saveAuthInfo(info); } } public String getAccountUserId(int n) { - LinphoneAuthInfo authInfo = getAuthInfo(n); - return authInfo == null ? null : authInfo.getUserId(); + AuthInfo authInfo = getAuthInfo(n); + return authInfo == null ? null : authInfo.getUserid(); } public String getAccountRealm(int n) { - LinphoneAuthInfo authInfo = getAuthInfo(n); + AuthInfo authInfo = getAuthInfo(n); return authInfo == null ? null : authInfo.getRealm(); } @@ -548,30 +537,30 @@ public class LinphonePreferences { String userid = null; String realm = null; if(user != null && domain != null) { - if (LinphoneManager.getLc().getAuthInfosList()[n] != null) { + if (LinphoneManager.getLc().getAuthInfoList().length >= n && LinphoneManager.getLc().getAuthInfoList()[n] != null) { userid = getAccountUserId(n); realm = getAccountRealm(n); - LinphoneManager.getLc().removeAuthInfo(LinphoneManager.getLc().getAuthInfosList()[n]); + LinphoneManager.getLc().removeAuthInfo(LinphoneManager.getLc().getAuthInfoList()[n]); } - LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo( + AuthInfo authInfo = Factory.instance().createAuthInfo( user, userid, password, ha1, realm, domain); LinphoneManager.getLc().addAuthInfo(authInfo); } } public String getAccountPassword(int n) { - LinphoneAuthInfo authInfo = getAuthInfo(n); + AuthInfo authInfo = getAuthInfo(n); return authInfo == null ? null : authInfo.getPassword(); } public String getAccountHa1(int n) { - LinphoneAuthInfo authInfo = getAuthInfo(n); + AuthInfo authInfo = getAuthInfo(n); return authInfo == null ? null : authInfo.getHa1(); } public void setAccountIce(int n, boolean ice) { try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); prxCfg.getNatPolicy().enableIce(ice); prxCfg.done(); @@ -587,9 +576,9 @@ public class LinphonePreferences { public void setAccountStunServer(int n, String stun) { try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); - LinphoneNatPolicy np = prxCfg.getNatPolicy(); + NatPolicy np = prxCfg.getNatPolicy(); np.setStunServer(stun); np.enableStun(stun!=null); prxCfg.done(); @@ -605,28 +594,24 @@ public class LinphonePreferences { public void setAccountDomain(int n, String domain) { String identity = "sip:" + getAccountUsername(n) + "@" + domain; - LinphoneAuthInfo old_info = getAuthInfo(n); - try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); - prxCfg.edit(); - prxCfg.setIdentity(identity); - prxCfg.enableRegister(true); - prxCfg.done(); + AuthInfo old_info = getAuthInfo(n); + ProxyConfig prxCfg = getProxyConfig(n); + prxCfg.edit(); + prxCfg.setIdentityAddress(Factory.instance().createAddress(identity)); + prxCfg.enableRegister(true); + prxCfg.done(); - if (old_info != null) { - // We have to remove the previous auth info after otherwise we can't unregister the previous proxy config - LinphoneAuthInfo new_info = old_info.clone(); - getLc().removeAuthInfo(old_info); - new_info.setDomain(domain); - saveAuthInfo(new_info); - } - } catch (LinphoneCoreException e) { - Log.e(e); + if (old_info != null) { + // We have to remove the previous auth info after otherwise we can't unregister the previous proxy config + AuthInfo new_info = old_info.clone(); + getLc().removeAuthInfo(old_info); + new_info.setDomain(domain); + saveAuthInfo(new_info); } } public String getAccountDomain(int n) { - LinphoneProxyConfig proxyConf = getProxyConfig(n); + ProxyConfig proxyConf = getProxyConfig(n); return (proxyConf != null) ? proxyConf.getDomain() : ""; } @@ -639,45 +624,37 @@ public class LinphonePreferences { proxy = "sip:" + proxy; } - try { - LinphoneAddress proxyAddr = LinphoneCoreFactory.instance().createLinphoneAddress(proxy); - if (!proxy.contains("transport=")) { - proxyAddr.setTransport(getAccountTransport(n)); - } + Address proxyAddr = Factory.instance().createAddress(proxy); + if (!proxy.contains("transport=")) { + proxyAddr.setTransport(getAccountTransport(n)); + } - LinphoneProxyConfig prxCfg = getProxyConfig(n); - prxCfg.edit(); - prxCfg.setProxy(proxyAddr.asStringUriOnly()); - prxCfg.done(); + ProxyConfig prxCfg = getProxyConfig(n); + prxCfg.edit(); + prxCfg.setServerAddr(proxyAddr.asStringUriOnly()); + prxCfg.done(); - if (isAccountOutboundProxySet(n)) { - setAccountOutboundProxyEnabled(n, true); - } - } catch (LinphoneCoreException e) { - Log.e(e); + if (isAccountOutboundProxySet(n)) { + setAccountOutboundProxyEnabled(n, true); } } public String getAccountProxy(int n) { - String proxy = getProxyConfig(n).getProxy(); + String proxy = getProxyConfig(n).getServerAddr(); return proxy; } public void setAccountOutboundProxyEnabled(int n, boolean enabled) { - try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); - prxCfg.edit(); - if (enabled) { - String route = prxCfg.getProxy(); - prxCfg.setRoute(route); - } else { - prxCfg.setRoute(null); - } - prxCfg.done(); - } catch (LinphoneCoreException e) { - Log.e(e); + ProxyConfig prxCfg = getProxyConfig(n); + prxCfg.edit(); + if (enabled) { + String route = prxCfg.getServerAddr(); + prxCfg.setRoute(route); + } else { + prxCfg.setRoute(null); } + prxCfg.done(); } public boolean isAccountOutboundProxySet(int n) { @@ -685,7 +662,7 @@ public class LinphonePreferences { } public void setAccountContactParameters(int n, String contactParams) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); prxCfg.setContactUriParameters(contactParams); prxCfg.done(); @@ -697,7 +674,7 @@ public class LinphonePreferences { public void setExpires(int n, String expire) { try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); prxCfg.setExpires(Integer.parseInt(expire)); prxCfg.done(); @@ -709,7 +686,7 @@ public class LinphonePreferences { } public void setPrefix(int n, String prefix) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); prxCfg.setDialPrefix(prefix); prxCfg.done(); @@ -719,22 +696,22 @@ public class LinphonePreferences { return getProxyConfig(n).avpfEnabled(); } - public void enableAvpf(int n, boolean enable) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + public void setAvpfMode(int n, boolean enable) { + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); - prxCfg.enableAvpf(enable); + prxCfg.setAvpfMode(enable ? AVPFMode.Enabled : AVPFMode.Disabled); prxCfg.done(); } - public String getAvpfRRInterval(int n) { - return String.valueOf(getProxyConfig(n).getAvpfRRInterval()); + public String getAvpfRrInterval(int n) { + return String.valueOf(getProxyConfig(n).getAvpfRrInterval()); } - public void setAvpfRRInterval(int n, String interval) { + public void setAvpfRrInterval(int n, String interval) { try { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); - prxCfg.setAvpfRRInterval(Integer.parseInt(interval)); + prxCfg.setAvpfRrInterval(Integer.parseInt(interval)); prxCfg.done(); } catch (NumberFormatException nfe) { } } @@ -744,7 +721,7 @@ public class LinphonePreferences { } public void setReplacePlusByZeroZero(int n, boolean replace) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); prxCfg.edit(); prxCfg.setDialEscapePlus(replace); prxCfg.done(); @@ -760,7 +737,7 @@ public class LinphonePreferences { } public void setDefaultAccount(int accountIndex) { - LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList(); + ProxyConfig[] prxCfgs = getLc().getProxyConfigList(); if (accountIndex >= 0 && accountIndex < prxCfgs.length) getLc().setDefaultProxyConfig(prxCfgs[accountIndex]); } @@ -768,13 +745,13 @@ public class LinphonePreferences { public int getDefaultAccountIndex() { if (getLc() == null) return -1; - LinphoneProxyConfig defaultPrxCfg = getLc().getDefaultProxyConfig(); + ProxyConfig defaultPrxCfg = getLc().getDefaultProxyConfig(); if (defaultPrxCfg == null) return -1; - LinphoneProxyConfig[] prxCfgs = getLc().getProxyConfigList(); + ProxyConfig[] prxCfgs = getLc().getProxyConfigList(); for (int i = 0; i < prxCfgs.length; i++) { - if (defaultPrxCfg.getIdentity().equals(prxCfgs[i].getIdentity())) { + if (defaultPrxCfg.getIdentityAddress().equals(prxCfgs[i].getIdentityAddress())) { return i; } } @@ -789,7 +766,7 @@ public class LinphonePreferences { } public void setAccountEnabled(int n, boolean enabled) { - LinphoneProxyConfig prxCfg = getProxyConfig(n); + ProxyConfig prxCfg = getProxyConfig(n); if (prxCfg == null) { LinphoneUtils.displayErrorAlert(getString(R.string.error), mContext); return; @@ -799,7 +776,7 @@ public class LinphonePreferences { prxCfg.done(); // If default proxy config is disabled, try to set another one as default proxy - if (!enabled && getLc().getDefaultProxyConfig().getIdentity().equals(prxCfg.getIdentity())) { + if (!enabled && getLc().getDefaultProxyConfig().getIdentityAddress().equals(prxCfg.getIdentityAddress())) { int count = getLc().getProxyConfigList().length; if (count > 1) { for (int i = 0; i < count; i++) { @@ -831,7 +808,7 @@ public class LinphonePreferences { } public void deleteAccount(int n) { - LinphoneProxyConfig proxyCfg = getProxyConfig(n); + ProxyConfig proxyCfg = getProxyConfig(n); if (proxyCfg != null) getLc().removeProxyConfig(proxyCfg); if (getLc().getProxyConfigList().length != 0) { @@ -840,7 +817,7 @@ public class LinphonePreferences { getLc().setDefaultProxyConfig(null); } - LinphoneAuthInfo authInfo = getAuthInfo(n); + AuthInfo authInfo = getAuthInfo(n); if (authInfo != null) { getLc().removeAuthInfo(authInfo); } @@ -854,8 +831,8 @@ public class LinphonePreferences { getLc().enableEchoCancellation(enable); } - public boolean isEchoCancellationEnabled() { - return getLc().isEchoCancellationEnabled(); + public boolean echoCancellationEnabled() { + return getLc().echoCancellationEnabled(); } public int getEchoCalibration() { @@ -881,27 +858,33 @@ public class LinphonePreferences { } public boolean isVideoEnabled() { - return getLc().isVideoSupported() && getLc().isVideoEnabled(); + return getLc().videoSupported() && getLc().videoEnabled(); } public void enableVideo(boolean enable) { - getLc().enableVideo(enable, enable); + getLc().enableVideoCapture(enable); + getLc().enableVideoDisplay(enable); } public boolean shouldInitiateVideoCall() { - return getLc().getVideoAutoInitiatePolicy(); + return getLc().getVideoActivationPolicy().getAutomaticallyInitiate(); } public void setInitiateVideoCall(boolean initiate) { - getLc().setVideoPolicy(initiate, shouldAutomaticallyAcceptVideoRequests()); + VideoActivationPolicy vap = getLc().getVideoActivationPolicy(); + vap.setAutomaticallyInitiate(initiate); + getLc().setVideoActivationPolicy(vap); } public boolean shouldAutomaticallyAcceptVideoRequests() { - return getLc().getVideoAutoAcceptPolicy(); + VideoActivationPolicy vap = getLc().getVideoActivationPolicy(); + return vap.getAutomaticallyAccept(); } public void setAutomaticallyAcceptVideoRequests(boolean accept) { - getLc().setVideoPolicy(shouldInitiateVideoCall(), accept); + VideoActivationPolicy vap = getLc().getVideoActivationPolicy(); + vap.setAutomaticallyAccept(accept); + getLc().setVideoActivationPolicy(vap); } public String getVideoPreset() { @@ -921,26 +904,12 @@ public class LinphonePreferences { } public String getPreferredVideoSize() { - //LinphoneCore can only return video size (width and height), not the name + //Core can only return video size (width and height), not the name return getConfig().getString("video", "size", "qvga"); } public void setPreferredVideoSize(String preferredVideoSize) { getLc().setPreferredVideoSizeByName(preferredVideoSize); - String preset = getVideoPreset(); - if (!preset.equals("custom")) { - int bandwidth = 512; - if (preferredVideoSize.equals("720p")) { - bandwidth = 1024 + 128; - } else if (preferredVideoSize.equals("vga")) { - bandwidth = 660; - } else if (preferredVideoSize.equals("qvga")) { - bandwidth = 380; - } else if (preferredVideoSize.equals("qcif")) { - bandwidth = 256; - } - setBandwidthLimit(bandwidth); - } } public int getPreferredVideoFps() { @@ -963,27 +932,27 @@ public class LinphonePreferences { // Call settings public boolean useRfc2833Dtmfs() { - return getLc().getUseRfc2833ForDtmfs(); + return getLc().getUseRfc2833ForDtmf(); } public void sendDtmfsAsRfc2833(boolean use) { - getLc().setUseRfc2833ForDtmfs(use); + getLc().setUseRfc2833ForDtmf(use); } public boolean useSipInfoDtmfs() { - return getLc().getUseSipInfoForDtmfs(); + return getLc().getUseInfoForDtmf(); } public void sendDTMFsAsSipInfo(boolean use) { - getLc().setUseSipInfoForDtmfs(use); + getLc().setUseInfoForDtmf(use); } public int getIncTimeout() { - return getLc().getIncomingTimeout(); + return getLc().getIncTimeout(); } public void setIncTimeout(int timeout) { - getLc().setIncomingTimeout(timeout); + getLc().setIncTimeout(timeout); } public int getInCallTimeout() { @@ -1001,7 +970,15 @@ public class LinphonePreferences { public void setVoiceMailUri(String uri) { getConfig().setString("app", "voice_mail", uri); } - // End of call settings + + public boolean getNativeDialerCall() { + return getConfig().getBool("app", "native_dialer_call", false); + } + + public void setNativeDialerCall(boolean use) { + getConfig().setBool("app", "native_dialer_call", use); + } +// End of call settings // Network settings public void setWifiOnlyEnabled(Boolean enable) { @@ -1032,25 +1009,25 @@ public class LinphonePreferences { } public String getSipPort() { - Transports transports = getLc().getSignalingTransportPorts(); + Transports transports = getLc().getTransports(); int port; - if (transports.udp > 0) - port = transports.udp; + if (transports.getUdpPort() > 0) + port = transports.getUdpPort(); else - port = transports.tcp; + port = transports.getTcpPort(); return String.valueOf(port); } public void setSipPort(int port) { - Transports transports = getLc().getSignalingTransportPorts(); - transports.udp = port; - transports.tcp = port; - transports.tls = LINPHONE_CORE_RANDOM_PORT; - getLc().setSignalingTransportPorts(transports); + Transports transports = getLc().getTransports(); + transports.setUdpPort(port); + transports.setTcpPort(port); + transports.setTlsPort(LINPHONE_CORE_RANDOM_PORT); + getLc().setTransports(transports); } - private LinphoneNatPolicy getOrCreateNatPolicy() { - LinphoneNatPolicy nat = getLc().getNatPolicy(); + private NatPolicy getOrCreateNatPolicy() { + NatPolicy nat = getLc().getNatPolicy(); if (nat == null) { nat = getLc().createNatPolicy(); } @@ -1058,12 +1035,12 @@ public class LinphonePreferences { } public String getStunServer() { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); return nat.getStunServer(); } public void setStunServer(String stun) { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); nat.setStunServer(stun); if (stun != null && !stun.isEmpty()) { @@ -1073,55 +1050,55 @@ public class LinphonePreferences { } public void setIceEnabled(boolean enabled) { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); nat.enableIce(enabled); getLc().setNatPolicy(nat); } public void setTurnEnabled(boolean enabled) { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); nat.enableTurn(enabled); getLc().setNatPolicy(nat); } public void setUpnpEnabled(boolean enabled) { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); nat.enableUpnp(enabled); getLc().setNatPolicy(nat); } public boolean isUpnpEnabled() { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); return nat.upnpEnabled(); } public boolean isIceEnabled() { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); return nat.iceEnabled(); } public boolean isTurnEnabled() { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); return nat.turnEnabled(); } public String getTurnUsername() { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); + NatPolicy nat = getOrCreateNatPolicy(); return nat.getStunServerUsername(); } public void setTurnUsername(String username) { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); - LinphoneAuthInfo authInfo = getLc().findAuthInfo(nat.getStunServerUsername(), null, null); + NatPolicy nat = getOrCreateNatPolicy(); + AuthInfo authInfo = getLc().findAuthInfo(null, nat.getStunServerUsername(), null); if (authInfo != null) { - LinphoneAuthInfo cloneAuthInfo = authInfo.clone(); + AuthInfo cloneAuthInfo = authInfo.clone(); getLc().removeAuthInfo(authInfo); cloneAuthInfo.setUsername(username); - cloneAuthInfo.setUserId(username); + cloneAuthInfo.setUserid(username); getLc().addAuthInfo(cloneAuthInfo); } else { - authInfo = LinphoneCoreFactory.instance().createAuthInfo(username, username, null, null, null, null); + authInfo = Factory.instance().createAuthInfo(username, username, null, null, null, null); getLc().addAuthInfo(authInfo); } nat.setStunServerUsername(username); @@ -1129,16 +1106,16 @@ public class LinphonePreferences { } public void setTurnPassword(String password) { - LinphoneNatPolicy nat = getOrCreateNatPolicy(); - LinphoneAuthInfo authInfo = getLc().findAuthInfo(nat.getStunServerUsername(), null, null); + NatPolicy nat = getOrCreateNatPolicy(); + AuthInfo authInfo = getLc().findAuthInfo(null, nat.getStunServerUsername(), null); if (authInfo != null) { - LinphoneAuthInfo cloneAuthInfo = authInfo.clone(); + AuthInfo cloneAuthInfo = authInfo.clone(); getLc().removeAuthInfo(authInfo); cloneAuthInfo.setPassword(password); getLc().addAuthInfo(cloneAuthInfo); } else { - authInfo = LinphoneCoreFactory.instance().createAuthInfo(nat.getStunServerUsername(), nat.getStunServerUsername(), password, null, null, null); + authInfo = Factory.instance().createAuthInfo(nat.getStunServerUsername(), nat.getStunServerUsername(), password, null, null, null); getLc().addAuthInfo(authInfo); } } @@ -1157,7 +1134,7 @@ public class LinphonePreferences { public void setPushNotificationEnabled(boolean enable) { getConfig().setBool("app", "push_notification", enable); - LinphoneCore lc = getLc(); + Core lc = getLc(); if (lc == null) { return; } @@ -1167,22 +1144,22 @@ public class LinphonePreferences { String regId = getPushNotificationRegistrationID(); String appId = getString(R.string.push_sender_id); if (regId != null && lc.getProxyConfigList().length > 0) { - for (LinphoneProxyConfig lpc : lc.getProxyConfigList()) { + for (ProxyConfig lpc : lc.getProxyConfigList()) { String contactInfos = "app-id=" + appId + ";pn-type=" + getString(R.string.push_type) + ";pn-tok=" + regId + ";pn-silent=1"; lpc.edit(); lpc.setContactUriParameters(contactInfos); lpc.done(); - Log.d("Push notif infos added to proxy config " + lpc.getAddress().asStringUriOnly()); + Log.d("Push notif infos added to proxy config " + lpc.getIdentityAddress().asStringUriOnly()); } lc.refreshRegisters(); } } else { if (lc.getProxyConfigList().length > 0) { - for (LinphoneProxyConfig lpc : lc.getProxyConfigList()) { + for (ProxyConfig lpc : lc.getProxyConfigList()) { lpc.edit(); lpc.setContactUriParameters(null); lpc.done(); - Log.d("Push notif infos removed from proxy config " + lpc.getAddress().asStringUriOnly()); + Log.d("Push notif infos removed from proxy config " + lpc.getIdentityAddress().asStringUriOnly()); } lc.refreshRegisters(); } @@ -1208,15 +1185,15 @@ public class LinphonePreferences { } public boolean isUsingIpv6() { - return getLc().isIpv6Enabled(); + return getLc().ipv6Enabled(); } // End of network settings // Advanced settings public void setDebugEnabled(boolean enabled) { getConfig().setBool("app", "debug", enabled); - LinphoneCoreFactory.instance().enableLogCollection(enabled); - LinphoneCoreFactory.instance().setDebugMode(enabled, getString(R.string.app_name)); + Factory.instance().enableLogCollection(LogCollectionState.Enabled); + Factory.instance().setDebugMode(enabled, getString(R.string.app_name)); } public boolean isDebugEnabled() { @@ -1259,33 +1236,37 @@ public class LinphonePreferences { } public void setDefaultDisplayName(String displayName) { - getLc().setPrimaryContact(displayName, getDefaultUsername()); + Address primary = getLc().getPrimaryContactParsed(); + primary.setDisplayName(displayName); + getLc().setPrimaryContact(primary.asString()); } public String getDefaultDisplayName() { - return getLc().getPrimaryContactDisplayName(); + return getLc().getPrimaryContactParsed().getDisplayName(); } public void setDefaultUsername(String username) { - getLc().setPrimaryContact(getDefaultDisplayName(), username); + Address primary = getLc().getPrimaryContactParsed(); + primary.setUsername(username); + getLc().setPrimaryContact(primary.asString()); } public String getDefaultUsername() { - return getLc().getPrimaryContactUsername(); + return getLc().getPrimaryContactParsed().getUsername(); } // End of advanced settings // Tunnel settings - private TunnelConfig tunnelConfig = null; + /*private TunnelConfig tunnelConfig = null; public TunnelConfig getTunnelConfig() { - if(getLc().isTunnelAvailable()) { + if(getLc().tunnelAvailable()) { if(tunnelConfig == null) { TunnelConfig servers[] = getLc().tunnelGetServers(); if(servers.length > 0) { tunnelConfig = servers[0]; } else { - tunnelConfig = LinphoneCoreFactory.instance().createTunnelConfig(); + tunnelConfig = Factory.instance().createTunnelConfig(); } } return tunnelConfig; @@ -1335,7 +1316,7 @@ public class LinphonePreferences { public void setTunnelMode(String mode) { getConfig().setString("app", "tunnel", mode); LinphoneManager.getInstance().initTunnelFromConf(); - } + }*/ // End of tunnel settings public boolean isProvisioningLoginViewEnabled() { @@ -1359,22 +1340,14 @@ public class LinphonePreferences { return getConfig().getBool("app", "first_remote_provisioning", true); } - public boolean isAdaptiveRateControlEnabled() { - return getLc().isAdaptiveRateControlEnabled(); + public boolean adaptiveRateControlEnabled() { + return getLc().adaptiveRateControlEnabled(); } public void enableAdaptiveRateControl(boolean enabled) { getLc().enableAdaptiveRateControl(enabled); } - public AdaptiveRateAlgorithm getAdaptiveRateAlgorithm() { - return getLc().getAdaptiveRateAlgorithm(); - } - - public void setAdaptiveRateAlgorithm(AdaptiveRateAlgorithm alg) { - getLc().setAdaptiveRateAlgorithm(alg); - } - public int getCodecBitrateLimit() { return getConfig().getInt("audio", "codec_bitrate_limit", 36); } @@ -1484,12 +1457,12 @@ public class LinphonePreferences { getConfig().setBool("app", "display_overlay", enable); } - public LinphoneLimeState getLimeEncryption() { - return getLc().getLimeEncryption(); + public LimeState limeEnabled() { + return getLc().limeEnabled(); } - public void setLimeEncryption(LinphoneLimeState lime) { - getLc().setLimeEncryption(lime); + public void enableLime(LimeState lime) { + getLc().enableLime(lime); } public boolean firstTimeAskingForPermission(String permission) { @@ -1545,16 +1518,6 @@ public class LinphonePreferences { return getConfig().getInt("app", "activation_code_length", 0); } - public boolean isDozeModeEnabled() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) - return false; - return getConfig().getBool("app", "doze_mode", true); - } - - public void enableDozeMode(boolean enable) { - getConfig().setBool("app", "doze_mode", enable); - } - public void disableFriendsStorage() { getConfig().setBool("misc", "store_friends", false); } diff --git a/src/android/org/linphone/LinphoneService.java b/src/android/org/linphone/LinphoneService.java index f95366602..c77c2e1d6 100644 --- a/src/android/org/linphone/LinphoneService.java +++ b/src/android/org/linphone/LinphoneService.java @@ -1,6 +1,8 @@ +package org.linphone; + /* LinphoneService.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,24 +18,24 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import org.linphone.compatibility.Compatibility; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallLog.CallStatus; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.GlobalState; -import org.linphone.core.LinphoneCore.RegistrationState; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.Address; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.CallLog.CallStatus; +import org.linphone.core.Core; +import org.linphone.core.Core.GlobalState; +import org.linphone.core.Core.RegistrationState; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.LogCollectionState; +import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; import org.linphone.mediastream.Version; import org.linphone.ui.LinphoneOverlay; @@ -63,7 +65,6 @@ import android.provider.MediaStore; import android.view.WindowManager; /** - * * Linphone service, reacting to Incoming calls, ...
* * Roles include:
    @@ -71,10 +72,6 @@ import android.view.WindowManager; *
  • Starting C libLinphone through LinphoneManager
  • *
  • Reacting to LinphoneManager state changes
  • *
  • Delegating GUI state change actions to GUI listener
  • - * - * - * @author Guillaume Beraudo - * */ public final class LinphoneService extends Service { /* Listener needs to be implemented in the Service as it calls @@ -123,7 +120,7 @@ public final class LinphoneService extends Service { private PendingIntent mNotifContentIntent; private String mNotificationTitle; private boolean mDisableRegistrationStatus; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; public static int notifcationsPriority = (Version.sdkAboveOrEqual(Version.API16_JELLY_BEAN_41) ? Notification.PRIORITY_MIN : 0); private WindowManager mWindowManager; private LinphoneOverlay mOverlay; @@ -272,11 +269,11 @@ public final class LinphoneService extends Service { public void showServiceNotification() { startForegroundCompat(NOTIF_ID, mNotif); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) return; - LinphoneProxyConfig lpc = lc.getDefaultProxyConfig(); + ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null) { - if (lpc.isRegistered()) { + if (lpc.getState() == RegistrationState.Ok) { sendNotification(IC_LEVEL_ORANGE, R.string.notification_registered); } else { sendNotification(IC_LEVEL_ORANGE, R.string.notification_register_failure); @@ -301,10 +298,10 @@ public final class LinphoneService extends Service { // Needed in order for the two next calls to succeed, libraries must have been loaded first LinphonePreferences.instance().setContext(getBaseContext()); - LinphoneCoreFactory.instance().setLogCollectionPath(getFilesDir().getAbsolutePath()); + Factory.instance().setLogCollectionPath(getFilesDir().getAbsolutePath()); boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled); - LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, getString(R.string.app_name)); + Factory.instance().enableLogCollection(LogCollectionState.Enabled); + Factory.instance().setDebugMode(isDebugEnabled, getString(R.string.app_name)); // Dump some debugging information to the logs Log.i(START_LINPHONE_LOGS); @@ -340,19 +337,20 @@ public final class LinphoneService extends Service { Log.e(e); } - LinphoneManager.getLc().addListener(mListener = new LinphoneCoreListenerBase() { + LinphoneManager.getLc().addListener(mListener = new CoreListenerStub() { @Override - public void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State state, String message) { + public void onCallStateChanged(Core lc, Call call, Call.State state, String message) { if (instance == null) { Log.i("Service not ready, discarding call state change to ",state.toString()); return; } - if (state == LinphoneCall.State.IncomingReceived) { - onIncomingReceived(); + if (state == Call.State.IncomingReceived) { + if(! LinphoneManager.getInstance().getCallGsmON()) + onIncomingReceived(); } - if (state == State.CallEnd || state == State.CallReleased || state == State.Error) { + if (state == State.End || state == State.Released || state == State.Error) { if (LinphoneManager.isInstanciated() && LinphoneManager.getLc() != null && LinphoneManager.getLc().getCallsNb() == 0) { if (LinphoneActivity.isInstanciated() && LinphoneActivity.instance().getStatusFragment() != null) { removeSasNotification(); @@ -362,13 +360,13 @@ public final class LinphoneService extends Service { destroyOverlay(); } - if (state == State.CallEnd && call.getCallLog().getStatus() == CallStatus.Missed) { + if (state == State.End && 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(); + Address address = call.getRemoteAddress(); LinphoneContact c = ContactsManager.getInstance().findContactFromAddress(address); if (c != null) { body = c.getFullName(); @@ -399,28 +397,28 @@ public final class LinphoneService extends Service { } @Override - public void globalState(LinphoneCore lc,LinphoneCore.GlobalState state, String message) { - if (state == GlobalState.GlobalOn && displayServiceNotification()) { + public void onGlobalStateChanged(Core lc,Core.GlobalState state, String message) { + if (state == Core.GlobalState.On && displayServiceNotification()) { sendNotification(IC_LEVEL_ORANGE, R.string.notification_started); } } @Override - public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, LinphoneCore.RegistrationState state, String smessage) { + public void onRegistrationStateChanged(Core lc, ProxyConfig cfg, Core.RegistrationState state, String smessage) { // if (instance == null) { // Log.i("Service not ready, discarding registration state change to ",state.toString()); // return; // } if (!mDisableRegistrationStatus) { - if (displayServiceNotification() && state == RegistrationState.RegistrationOk && LinphoneManager.getLc().getDefaultProxyConfig() != null && LinphoneManager.getLc().getDefaultProxyConfig().isRegistered()) { + if (displayServiceNotification() && state == RegistrationState.Ok && LinphoneManager.getLc().getDefaultProxyConfig() != null && LinphoneManager.getLc().getDefaultProxyConfig().getState() == RegistrationState.Ok) { sendNotification(IC_LEVEL_ORANGE, R.string.notification_registered); } - if (displayServiceNotification() && (state == RegistrationState.RegistrationFailed || state == RegistrationState.RegistrationCleared) && (LinphoneManager.getLc().getDefaultProxyConfig() == null || !LinphoneManager.getLc().getDefaultProxyConfig().isRegistered())) { + if (displayServiceNotification() && (state == RegistrationState.Failed || state == RegistrationState.Cleared) && (LinphoneManager.getLc().getDefaultProxyConfig() == null || !(LinphoneManager.getLc().getDefaultProxyConfig().getState() == RegistrationState.Ok))) { sendNotification(IC_LEVEL_ORANGE, R.string.notification_register_failure); } - if (displayServiceNotification() && state == RegistrationState.RegistrationNone) { + if (displayServiceNotification() && state == RegistrationState.None) { sendNotification(IC_LEVEL_ORANGE, R.string.notification_started); } } @@ -465,8 +463,8 @@ public final class LinphoneService extends Service { public void createOverlay() { if (mOverlay != null) destroyOverlay(); - LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); - if (call == null || !call.getCurrentParams().getVideoEnabled()) return; + Call call = LinphoneManager.getLc().getCurrentCall(); + if (call == null || !call.getCurrentParams().videoEnabled()) return; mOverlay = new LinphoneOverlay(this); WindowManager.LayoutParams params = mOverlay.getWindowManagerLayoutParams(); @@ -520,11 +518,11 @@ public final class LinphoneService extends Service { return; } - LinphoneCall call = LinphoneManager.getLc().getCalls()[0]; - String userName = call.getRemoteAddress().getUserName(); + Call call = LinphoneManager.getLc().getCalls()[0]; + String userName = call.getRemoteAddress().getUsername(); String domain = call.getRemoteAddress().getDomain(); String displayName = call.getRemoteAddress().getDisplayName(); - LinphoneAddress address = LinphoneCoreFactory.instance().createLinphoneAddress(userName,domain,null); + Address address = Factory.instance().createAddress(userName + "@" + domain); address.setDisplayName(displayName); LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(address); @@ -535,7 +533,7 @@ public final class LinphoneService extends Service { } catch (Exception e) { bm = BitmapFactory.decodeResource(getResources(), R.drawable.avatar); } - String name = address.getDisplayName() == null ? address.getUserName() : address.getDisplayName(); + String name = address.getDisplayName() == null ? address.getUsername() : address.getDisplayName(); Intent notifIntent = new Intent(this, incomingReceivedActivity); notifIntent.putExtra("Notification", true); mNotifContentIntent = PendingIntent.getActivity(this, 0, notifIntent, PendingIntent.FLAG_UPDATE_CURRENT); @@ -548,10 +546,10 @@ public final class LinphoneService extends Service { } } - public void refreshIncallIcon(LinphoneCall currentCall) { - LinphoneCore lc = LinphoneManager.getLc(); + public void refreshIncallIcon(Call currentCall) { + Core lc = LinphoneManager.getLc(); if (currentCall != null) { - if (currentCall.getCurrentParams().getVideoEnabled() && currentCall.cameraEnabled()) { + if (currentCall.getCurrentParams().videoEnabled() && currentCall.cameraEnabled()) { // checking first current params is mandatory setIncallIcon(IncallIconState.VIDEO); } else { @@ -559,7 +557,7 @@ public final class LinphoneService extends Service { } } else if (lc.getCallsNb() == 0) { setIncallIcon(IncallIconState.IDLE); - } else if (lc.isInConference()) { + } else if (lc.getConference() != null) { setIncallIcon(IncallIconState.INCALL); } else { setIncallIcon(IncallIconState.PAUSE); @@ -593,7 +591,7 @@ public final class LinphoneService extends Service { resetIntentLaunchedOnNotificationClick(); } - public void displayMessageNotification(String to, String fromSipUri, String fromName, String message) { + public void removedNotification(String to, String fromSipUri, String fromName, String message) { Intent notifIntent = new Intent(this, LinphoneActivity.class); notifIntent.putExtra("GoToChat", true); notifIntent.putExtra("ChatContactSipUri", fromSipUri); @@ -611,13 +609,9 @@ public final class LinphoneService extends Service { } Uri pictureUri = null; - try { - LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(LinphoneCoreFactory.instance().createLinphoneAddress(fromSipUri)); - if (contact != null) - pictureUri = contact.getThumbnailUri(); - } catch (LinphoneCoreException e1) { - Log.e("Cannot parse from address ", e1); - } + LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(Factory.instance().createAddress(fromSipUri)); + if (contact != null) + pictureUri = contact.getThumbnailUri(); Bitmap bm = null; if (pictureUri != null) { @@ -767,8 +761,8 @@ public final class LinphoneService extends Service { String text = getString(textId); if (text.contains("%s") && LinphoneManager.getLc() != null) { // Test for null lc is to avoid a NPE when Android mess up badly with the String resources. - LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); - String id = lpc != null ? lpc.getIdentity() : ""; + ProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); + String id = lpc != null ? lpc.getIdentityAddress().asString() : ""; text = String.format(text, id); } @@ -808,7 +802,7 @@ public final class LinphoneService extends Service { // If push is enabled, don't unregister account, otherwise do unregister if (LinphonePreferences.instance().isPushNotificationEnabled()) { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) lc.setNetworkReachable(false); } stopSelf(); @@ -825,7 +819,7 @@ public final class LinphoneService extends Service { } destroyOverlay(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -880,7 +874,7 @@ public final class LinphoneService extends Service { public void tryingNewOutgoingCallButWrongDestinationAddress() { } - public void onCallEncryptionChanged(final LinphoneCall call, final boolean encrypted, + public void onCallEncryptionChanged(final Call call, final boolean encrypted, final String authenticationToken) { } } diff --git a/src/android/org/linphone/LinphoneUtils.java b/src/android/org/linphone/LinphoneUtils.java index c265a146a..171c9cae2 100644 --- a/src/android/org/linphone/LinphoneUtils.java +++ b/src/android/org/linphone/LinphoneUtils.java @@ -1,6 +1,8 @@ +package org.linphone; + /* SoftVolume.java -Copyright (C) 2011 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import android.app.Activity; import android.app.AlertDialog; @@ -48,17 +49,18 @@ import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; +import android.widget.Toast; import org.linphone.core.DialPlan; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.AccountCreator; +import org.linphone.core.Address; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.ChatMessage; +import org.linphone.core.Core; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; +import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; import org.linphone.mediastream.video.capture.hwconf.Hacks; @@ -92,8 +94,6 @@ import static android.view.View.VISIBLE; /** * Helpers. - * @author Guillaume Beraudo - * */ public final class LinphoneUtils { private static Context context = null; @@ -104,16 +104,12 @@ public final class LinphoneUtils { //private static final String strictSipAddressRegExp = "^sip:(\\+)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$"; public static boolean isSipAddress(String numberOrAddress) { - try { - LinphoneCoreFactory.instance().createLinphoneAddress(numberOrAddress); - return true; - } catch (LinphoneCoreException e) { - return false; - } + Factory.instance().createAddress(numberOrAddress); + return true; } public static boolean isNumberAddress(String numberOrAddress) { - LinphoneProxyConfig proxy = LinphoneManager.getLc().createProxyConfig(); + ProxyConfig proxy = LinphoneManager.getLc().createProxyConfig(); return proxy.normalizePhoneNumber(numberOrAddress) != null; } @@ -122,21 +118,17 @@ public final class LinphoneUtils { } public static String getAddressDisplayName(String uri){ - LinphoneAddress lAddress; - try { - lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(uri); - return getAddressDisplayName(lAddress); - } catch (LinphoneCoreException e) { - return null; - } + Address lAddress; + lAddress = Factory.instance().createAddress(uri); + return getAddressDisplayName(lAddress); } - public static String getAddressDisplayName(LinphoneAddress address){ + public static String getAddressDisplayName(Address address){ if(address.getDisplayName() != null) { return address.getDisplayName(); } else { - if(address.getUserName() != null){ - return address.getUserName(); + if(address.getUsername() != null){ + return address.getUsername(); } else { return address.asStringUriOnly(); } @@ -278,6 +270,8 @@ public final class LinphoneUtils { try { bm = MediaStore.Images.Media.getBitmap(c.getContentResolver(),tUri); } catch (IOException e) { + Log.e("Error in setThumbnailPictureFromUri: " + e); + return; } if (bm != null) { view.setImageBitmap(bm); @@ -287,33 +281,33 @@ public final class LinphoneUtils { } } - public static final List getLinphoneCallsNotInConf(LinphoneCore lc) { - List l=new ArrayList(); - for(LinphoneCall c : lc.getCalls()){ - if (!c.isInConference()){ + public static final List getCallsNotInConf(Core lc) { + List l=new ArrayList(); + for(Call c : lc.getCalls()){ + if (!(c.getConference() != null)){ l.add(c); } } return l; } - public static final List getLinphoneCallsInConf(LinphoneCore lc) { - List l=new ArrayList(); - for(LinphoneCall c : lc.getCalls()){ - if (c.isInConference()){ + public static final List getCallsInConf(Core lc) { + List l=new ArrayList(); + for(Call c : lc.getCalls()){ + if ((c.getConference() != null)){ l.add(c); } } return l; } - public static final List getLinphoneCalls(LinphoneCore lc) { + public static final List getCalls(Core lc) { // return a modifiable list - return new ArrayList(Arrays.asList(lc.getCalls())); + return new ArrayList(Arrays.asList(lc.getCalls())); } - public static final boolean hasExistingResumeableCall(LinphoneCore lc) { - for (LinphoneCall c : getLinphoneCalls(lc)) { + public static final boolean hasExistingResumeableCall(Core lc) { + for (Call c : getCalls(lc)) { if (c.getState() == State.Paused) { return true; } @@ -321,32 +315,32 @@ public final class LinphoneUtils { return false; } - public static final List getCallsInState(LinphoneCore lc, Collection states) { - List foundCalls = new ArrayList(); - for (LinphoneCall call : getLinphoneCalls(lc)) { + public static final List getCallsInState(Core lc, Collection states) { + List foundCalls = new ArrayList(); + for (Call call : getCalls(lc)) { if (states.contains(call.getState())) { foundCalls.add(call); } } return foundCalls; } - public static final List getRunningOrPausedCalls(LinphoneCore lc) { + public static final List getRunningOrPausedCalls(Core lc) { return getCallsInState(lc, Arrays.asList( State.Paused, State.PausedByRemote, State.StreamsRunning)); } - public static final int countConferenceCalls(LinphoneCore lc) { + public static final int countConferenceCalls(Core lc) { int count = lc.getConferenceSize(); - if (lc.isInConference()) count--; + if ((lc.getConference() != null)) count--; return count; } - public static int countVirtualCalls(LinphoneCore lc) { + public static int countVirtualCalls(Core lc) { return lc.getCallsNb() - countConferenceCalls(lc); } - public static int countNonConferenceCalls(LinphoneCore lc) { + public static int countNonConferenceCalls(Core lc) { return lc.getCallsNb() - countConferenceCalls(lc); } @@ -366,32 +360,32 @@ public final class LinphoneUtils { return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, (float) pixels, res.getDisplayMetrics()); } - public static boolean isCallRunning(LinphoneCall call) + public static boolean isCallRunning(Call call) { if (call == null) { return false; } - LinphoneCall.State state = call.getState(); + Call.State state = call.getState(); - return state == LinphoneCall.State.Connected || - state == LinphoneCall.State.CallUpdating || - state == LinphoneCall.State.CallUpdatedByRemote || - state == LinphoneCall.State.StreamsRunning || - state == LinphoneCall.State.Resuming; + return state == Call.State.Connected || + state == Call.State.Updating || + state == Call.State.UpdatedByRemote || + state == Call.State.StreamsRunning || + state == Call.State.Resuming; } - public static boolean isCallEstablished(LinphoneCall call) { + public static boolean isCallEstablished(Call call) { if (call == null) { return false; } - LinphoneCall.State state = call.getState(); + Call.State state = call.getState(); return isCallRunning(call) || - state == LinphoneCall.State.Paused || - state == LinphoneCall.State.PausedByRemote || - state == LinphoneCall.State.Pausing; + state == Call.State.Paused || + state == Call.State.PausedByRemote || + state == Call.State.Pausing; } public static boolean isHighBandwidthConnection(Context context){ @@ -521,7 +515,7 @@ public final class LinphoneUtils { public static String getDisplayableUsernameFromAddress(String sipAddress) { String username = sipAddress; - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) return username; if (username.startsWith("sip:")) { @@ -530,7 +524,7 @@ public final class LinphoneUtils { if (username.contains("@")) { String domain = username.split("@")[1]; - LinphoneProxyConfig lpc = lc.getDefaultProxyConfig(); + ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null) { if (domain.equals(lpc.getDomain())) { return username.split("@")[0]; @@ -546,15 +540,15 @@ public final class LinphoneUtils { public static String getFullAddressFromUsername(String username) { String sipAddress = username; - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - if (lc == null) return sipAddress; + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc == null || username == null) return sipAddress; if (!sipAddress.startsWith("sip:")) { sipAddress = "sip:" + sipAddress; } if (!sipAddress.contains("@")) { - LinphoneProxyConfig lpc = lc.getDefaultProxyConfig(); + ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null) { sipAddress = sipAddress + "@" + lpc.getDomain(); } else { @@ -564,9 +558,9 @@ public final class LinphoneUtils { return sipAddress; } - public static void storeImage(Context context, LinphoneChatMessage msg) { - if (msg == null || msg.getFileTransferInformation() == null || msg.getAppData() == null) return; - File file = new File(Environment.getExternalStorageDirectory(), msg.getAppData()); + public static void storeImage(Context context, ChatMessage msg) { + if (msg == null || msg.getFileTransferInformation() == null || msg.getAppdata() == null) return; + File file = new File(Environment.getExternalStorageDirectory(), msg.getAppdata()); Bitmap bm = BitmapFactory.decodeFile(file.getPath()); if (bm == null) return; @@ -590,7 +584,7 @@ public final class LinphoneUtils { file.delete(); bm.recycle(); - msg.setAppData(path.toString()); + msg.setAppdata(path.toString()); } catch (FileNotFoundException e) { Log.e(e); } catch (IOException e) { @@ -617,83 +611,83 @@ public final class LinphoneUtils { public static String errorForPhoneNumberStatus(int status) { Context ctxt = getContext(); if (ctxt != null) { - if (LinphoneAccountCreator.PhoneNumberCheck.CountryCodeInvalid.value() - == (status & LinphoneAccountCreator.PhoneNumberCheck.CountryCodeInvalid.value())) + if (AccountCreator.PhoneNumberStatus.InvalidCountryCode.toInt() + == (status & AccountCreator.PhoneNumberStatus.InvalidCountryCode.toInt())) return ctxt.getString(R.string.country_code_invalid); - if (LinphoneAccountCreator.PhoneNumberCheck.TooShort.value() - == (status & LinphoneAccountCreator.PhoneNumberCheck.TooShort.value())) + if (AccountCreator.PhoneNumberStatus.TooShort.toInt() + == (status & AccountCreator.PhoneNumberStatus.TooShort.toInt())) return ctxt.getString(R.string.phone_number_too_short); - if (LinphoneAccountCreator.PhoneNumberCheck.TooLong.value() - == (status & LinphoneAccountCreator.PhoneNumberCheck.TooLong.value())) + if (AccountCreator.PhoneNumberStatus.TooLong.toInt() + == (status & AccountCreator.PhoneNumberStatus.TooLong.toInt())) return ctxt.getString(R.string.phone_number_too_long); - if (LinphoneAccountCreator.PhoneNumberCheck.Invalid.value() - == (status & LinphoneAccountCreator.PhoneNumberCheck.Invalid.value())) + if (AccountCreator.PhoneNumberStatus.Invalid.toInt() + == (status & AccountCreator.PhoneNumberStatus.Invalid.toInt())) return ctxt.getString(R.string.phone_number_invalid); } return null; } - public static String errorForEmailStatus(LinphoneAccountCreator.EmailCheck status) { + public static String errorForEmailStatus(AccountCreator.EmailStatus status) { Context ctxt = getContext(); if (ctxt != null) { - if (status.equals(LinphoneAccountCreator.EmailCheck.InvalidCharacters) - || status.equals(LinphoneAccountCreator.EmailCheck.Malformed)) + if (status.equals(AccountCreator.EmailStatus.InvalidCharacters) + || status.equals(AccountCreator.EmailStatus.Malformed)) return ctxt.getString(R.string.invalid_email); } return null; } - public static String errorForUsernameStatus(LinphoneAccountCreator.UsernameCheck status) { + public static String errorForUsernameStatus(AccountCreator.UsernameStatus status) { Context ctxt = getContext(); if (ctxt != null) { - if (status.equals(LinphoneAccountCreator.UsernameCheck.InvalidCharacters)) + if (status.equals(AccountCreator.UsernameStatus.InvalidCharacters)) return ctxt.getString(R.string.invalid_username); - if (status.equals(LinphoneAccountCreator.UsernameCheck.TooShort)) + if (status.equals(AccountCreator.UsernameStatus.TooShort)) return ctxt.getString(R.string.username_too_short); - if (status.equals(LinphoneAccountCreator.UsernameCheck.TooLong)) + if (status.equals(AccountCreator.UsernameStatus.TooLong)) return ctxt.getString(R.string.username_too_long); - if (status.equals(LinphoneAccountCreator.UsernameCheck.Invalid)) + if (status.equals(AccountCreator.UsernameStatus.Invalid)) return ctxt.getString(R.string.username_invalid_size); - if (status.equals(LinphoneAccountCreator.UsernameCheck.InvalidCharacters)) + if (status.equals(AccountCreator.UsernameStatus.InvalidCharacters)) return ctxt.getString(R.string.invalid_display_name); } return null; } - public static String errorForPasswordStatus(LinphoneAccountCreator.PasswordCheck status) { + public static String errorForPasswordStatus(AccountCreator.PasswordStatus status) { Context ctxt = getContext(); if (ctxt != null) { - if (status.equals(LinphoneAccountCreator.PasswordCheck.TooShort)) + if (status.equals(AccountCreator.PasswordStatus.TooShort)) return ctxt.getString(R.string.password_too_short); - if (status.equals(LinphoneAccountCreator.PasswordCheck.TooLong)) + if (status.equals(AccountCreator.PasswordStatus.TooLong)) return ctxt.getString(R.string.password_too_long); } return null; } - public static String errorForRequestStatus(LinphoneAccountCreator.RequestStatus status) { + public static String errorForStatus(AccountCreator.Status status) { Context ctxt = getContext(); if (ctxt != null) { - if (status.equals(LinphoneAccountCreator.RequestStatus.Failed)) + if (status.equals(AccountCreator.Status.RequestFailed)) return ctxt.getString(R.string.request_failed); - if (status.equals(LinphoneAccountCreator.RequestStatus.ErrorServer)) + if (status.equals(AccountCreator.Status.ServerError)) return ctxt.getString(R.string.wizard_failed); - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountExist) - || status.equals(LinphoneAccountCreator.RequestStatus.AccountExistWithAlias)) + if (status.equals(AccountCreator.Status.AccountExist) + || status.equals(AccountCreator.Status.AccountExistWithAlias)) return ctxt.getString(R.string.account_already_exist); - if (status.equals(LinphoneAccountCreator.RequestStatus.AliasIsAccount) - || status.equals(LinphoneAccountCreator.RequestStatus.AliasExist)) + if (status.equals(AccountCreator.Status.AliasIsAccount) + || status.equals(AccountCreator.Status.AliasExist)) return ctxt.getString(R.string.assistant_phone_number_unavailable); - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountNotExist)) + if (status.equals(AccountCreator.Status.AccountNotExist)) return ctxt.getString(R.string.assistant_error_bad_credentials); - if (status.equals(LinphoneAccountCreator.RequestStatus.AliasNotExist)) + if (status.equals(AccountCreator.Status.AliasNotExist)) return ctxt.getString(R.string.phone_number_not_exist); - if (status.equals(LinphoneAccountCreator.RequestStatus.AliasNotExist) - || status.equals(LinphoneAccountCreator.RequestStatus.AccountNotActivated) - || status.equals(LinphoneAccountCreator.RequestStatus.AccountAlreadyActivated) - || status.equals(LinphoneAccountCreator.RequestStatus.AccountActivated) - || status.equals(LinphoneAccountCreator.RequestStatus.AccountNotCreated) - || status.equals(LinphoneAccountCreator.RequestStatus.Ok)) + if (status.equals(AccountCreator.Status.AliasNotExist) + || status.equals(AccountCreator.Status.AccountNotActivated) + || status.equals(AccountCreator.Status.AccountAlreadyActivated) + || status.equals(AccountCreator.Status.AccountActivated) + || status.equals(AccountCreator.Status.AccountNotCreated) + || status.equals(AccountCreator.Status.RequestOk)) return ""; } return null; @@ -712,8 +706,8 @@ public final class LinphoneUtils { public static void setCountry(DialPlan c, EditText dialCode, Button selectCountry, int countryCode) { if( c != null && dialCode != null && selectCountry != null) { - dialCode.setText(c.getCountryCode()); - selectCountry.setText(c.getCountryName()); + dialCode.setText(c.getCountryCallingCode()); + selectCountry.setText(c.getCountry()); } else { if(countryCode != -1){ dialCode.setText("+" + countryCode); @@ -796,7 +790,7 @@ public final class LinphoneUtils { } } - public static String getTimestamp() { + public static String getStartDate() { try { return new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.ROOT).format(new Date()); } catch (RuntimeException e) { @@ -806,7 +800,7 @@ public final class LinphoneUtils { public static File createFile(Context context, String imageFileName, String type) throws IOException { if (TextUtils.isEmpty(imageFileName)) - imageFileName = getTimestamp()+"."+type; // make random filename if you want. + imageFileName = getStartDate()+"."+type; // make random filename if you want. final File root; imageFileName = imageFileName; diff --git a/src/android/org/linphone/NetworkManager.java b/src/android/org/linphone/NetworkManager.java index 4348cd0da..bb0895a24 100644 --- a/src/android/org/linphone/NetworkManager.java +++ b/src/android/org/linphone/NetworkManager.java @@ -1,6 +1,8 @@ +package org.linphone; + /* ContactPickerActivity.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,17 +18,14 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.ConnectivityManager; - - /** - * + * * Intercept network state changes and update linphone core through LinphoneManager. * */ diff --git a/src/android/org/linphone/OutgoingCallReceiver.java b/src/android/org/linphone/OutgoingCallReceiver.java new file mode 100644 index 000000000..526b14a11 --- /dev/null +++ b/src/android/org/linphone/OutgoingCallReceiver.java @@ -0,0 +1,54 @@ +package org.linphone; + +/* +OutgoingCallReceiver.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.util.Log; + +import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; + + +public class OutgoingCallReceiver extends BroadcastReceiver { + private final static String TAG = "CallHandler"; + private final String ACTION_CALL_LINPHONE = "org.linphone.intent.action.CallLaunched"; + + private LinphonePreferences mPrefs; + + @Override + public void onReceive(Context context, Intent intent) { + mPrefs = LinphonePreferences.instance(); + Log.e(TAG, "===>>>> Linphone OutgoingCallReceiver "); + if (intent.getAction().equals(Intent.ACTION_NEW_OUTGOING_CALL)) { + Log.e(TAG, "===>>>> Linphone OutgoingCallReceiver : ACTION_NEW_OUTGOING_CALL"); + String number = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER); + if(mPrefs.getConfig() != null && mPrefs.getNativeDialerCall()){ + abortBroadcast(); + setResultData(null); + Intent newIntent = new Intent(ACTION_CALL_LINPHONE); + newIntent.setFlags(FLAG_ACTIVITY_NEW_TASK); + newIntent.putExtra("StartCall", true); + newIntent.putExtra("NumberToCall", number); + context.startActivity(newIntent); + } + } + } +} \ No newline at end of file diff --git a/src/android/org/linphone/PhoneStateChangedReceiver.java b/src/android/org/linphone/PhoneStateChangedReceiver.java index 19b811d96..c20fdae7f 100644 --- a/src/android/org/linphone/PhoneStateChangedReceiver.java +++ b/src/android/org/linphone/PhoneStateChangedReceiver.java @@ -1,6 +1,8 @@ +package org.linphone; + /* PhoneStateReceiver.java -Copyright (C) 2011 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import android.content.BroadcastReceiver; import android.content.Context; @@ -25,9 +26,6 @@ import android.telephony.TelephonyManager; /** * Pause current SIP calls when GSM phone rings or is active. - * - * @author Guillaume Beraudo - * */ public class PhoneStateChangedReceiver extends BroadcastReceiver { @Override @@ -37,7 +35,7 @@ public class PhoneStateChangedReceiver extends BroadcastReceiver { if (!LinphoneManager.isInstanciated()) return; - if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(extraState)) { + if (TelephonyManager.EXTRA_STATE_OFFHOOK.equals(extraState) || TelephonyManager.EXTRA_STATE_RINGING.equals(extraState)) { LinphoneManager.getInstance().setCallGsmON(true); LinphoneManager.getLc().pauseAllCalls(); } else if (TelephonyManager.EXTRA_STATE_IDLE.equals(extraState)) { diff --git a/src/android/org/linphone/PreferencesMigrator.java b/src/android/org/linphone/PreferencesMigrator.java index b42eafc40..507b6fa88 100644 --- a/src/android/org/linphone/PreferencesMigrator.java +++ b/src/android/org/linphone/PreferencesMigrator.java @@ -2,7 +2,7 @@ package org.linphone; /* PreferencesMigrator.java -Copyright (C) 2013 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -20,10 +20,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import org.linphone.LinphonePreferences.AccountBuilder; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneProxyConfig; -import org.linphone.core.LpConfig; +import org.linphone.core.Core; +import org.linphone.core.CoreException; +import org.linphone.core.ProxyConfig; +import org.linphone.core.Config; import org.linphone.mediastream.Log; import android.content.Context; @@ -32,9 +32,6 @@ import android.content.SharedPreferences.Editor; import android.content.res.Resources; import android.preference.PreferenceManager; -/** - * @author Sylvain Berfini - */ public class PreferencesMigrator { private LinphonePreferences mNewPrefs; private SharedPreferences mOldPrefs; @@ -47,7 +44,7 @@ public class PreferencesMigrator { } public boolean isEchoMigratioNeeded() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null) { return false; } @@ -56,7 +53,7 @@ public class PreferencesMigrator { return false; } - return (!lc.needsEchoCalibration() && mNewPrefs.isEchoCancellationEnabled()); + return (!lc.isEchoCancellerCalibrationRequired() && mNewPrefs.echoCancellationEnabled()); } public boolean isMigrationNeeded() { @@ -102,9 +99,9 @@ public class PreferencesMigrator { } private void doAccountsMigration() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - lc.clearAuthInfos(); - lc.clearProxyConfigs(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + lc.clearAllAuthInfo(); + lc.clearProxyConfig(); for (int i = 0; i < mOldPrefs.getInt(getString(R.string.pref_extra_accounts), 1); i++) { doAccountMigration(i, i == getPrefInt(R.string.pref_default_account_key, 0)); @@ -124,10 +121,10 @@ public class PreferencesMigrator { AccountBuilder builder = new AccountBuilder(LinphoneManager.getLc()) .setUsername(username) - .setUserId(userid) + .setUserid(userid) .setDomain(domain) .setPassword(password) - .setProxy(proxy) + .setServerAddr(proxy) .setExpires(expire); if (getPrefBoolean(getString(R.string.pref_enable_outbound_proxy_key) + key, false)) { @@ -144,7 +141,7 @@ public class PreferencesMigrator { try { builder.saveNewAccount(); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } @@ -155,10 +152,10 @@ public class PreferencesMigrator { } public void doPresenceMigrationIfNeeded() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - LpConfig cfg = lc.getConfig(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Config cfg = lc.getConfig(); if (cfg.getString("app", "friendlist_subscription_enabled", null) == null){ - LinphoneProxyConfig proxy = lc.getDefaultProxyConfig(); + ProxyConfig proxy = lc.getDefaultProxyConfig(); if (proxy != null) { String domain = proxy.getDomain(); if (domain!=null && domain.equals(getString(R.string.default_domain))) { diff --git a/src/android/org/linphone/SearchContactsListAdapter.java b/src/android/org/linphone/SearchContactsListAdapter.java index 305d4b72d..2bdd07058 100644 --- a/src/android/org/linphone/SearchContactsListAdapter.java +++ b/src/android/org/linphone/SearchContactsListAdapter.java @@ -28,7 +28,7 @@ import android.widget.ListView; import android.widget.ProgressBar; import android.widget.TextView; -import org.linphone.core.LinphoneAddress; +import org.linphone.core.Address; import java.util.ArrayList; import java.util.List; @@ -113,18 +113,19 @@ public class SearchContactsListAdapter extends BaseAdapter { public List getContactsList() { List list = new ArrayList(); - if(ContactsManager.getInstance().hasContacts()) { - for (LinphoneAddress addr : LinphoneManager.getLc().findContactsByChar("", mOnlySipContact)) { + if (ContactsManager.getInstance().hasContacts()) { + //TODO FIXME + /*for (Address addr : LinphoneManager.getLc().findContactsByChar("", mOnlySipContact)) { LinphoneContact cont = ContactsManager.getInstance().findContactFromAddress(addr); if (cont == null) { cont = new LinphoneContact(); - cont.setFullName(addr.getUserName()); + cont.setFullName(addr.getUsername()); } // TODO Rechercher si un contact est associé à cette sip uri // TODO Rechercher si un displayname est associé à cette sip uri - ContactAddress ca = new ContactAddress(cont , addr.asString(), cont.isLinphoneFriend()); + ContactAddress ca = new ContactAddress(cont , addr.asString(), cont.isFriend()); list.add(ca); - } + }*/ } for (ContactAddress caS : contactsSelected) { diff --git a/src/android/org/linphone/SettingsFragment.java b/src/android/org/linphone/SettingsFragment.java index b88542f59..1c93146d2 100644 --- a/src/android/org/linphone/SettingsFragment.java +++ b/src/android/org/linphone/SettingsFragment.java @@ -2,7 +2,7 @@ package org.linphone; /* SettingsFragment.java -Copyright (C) 2013 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -23,19 +23,21 @@ import java.io.File; import java.util.ArrayList; import java.util.List; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.EcCalibratorStatus; -import org.linphone.core.LinphoneCore.LinphoneLimeState; -import org.linphone.core.LinphoneCore.MediaEncryption; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.Address; +import org.linphone.core.Core; +import org.linphone.core.Core.EcCalibratorStatus; +import org.linphone.core.Core.LimeState; +import org.linphone.core.Core.MediaEncryption; +import org.linphone.core.CoreException; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.Factory; +import org.linphone.core.ProxyConfig; import org.linphone.core.PayloadType; +import org.linphone.core.VideoDefinition; import org.linphone.mediastream.Log; import org.linphone.mediastream.Version; import org.linphone.mediastream.video.capture.hwconf.AndroidCameraConfiguration; -import org.linphone.tools.OpenH264DownloadHelper; +import org.linphone.core.tools.OpenH264DownloadHelper; import org.linphone.ui.LedPreference; import org.linphone.ui.PreferencesListFragment; @@ -48,6 +50,8 @@ import android.content.SharedPreferences; import android.content.pm.PackageManager; import android.media.AudioManager; import android.net.Uri; +import android.net.wifi.WifiManager; +import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.preference.CheckBoxPreference; @@ -60,13 +64,10 @@ import android.preference.PreferenceCategory; import android.preference.PreferenceScreen; import android.provider.Settings; -/** - * @author Sylvain Berfini - */ public class SettingsFragment extends PreferencesListFragment { private LinphonePreferences mPrefs; private Handler mHandler = new Handler(); - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; private PreferenceScreen currentPreferenceScreen; private Preference.OnPreferenceClickListener prefClickListener = new Preference.OnPreferenceClickListener() { @Override @@ -94,9 +95,10 @@ public class SettingsFragment extends PreferencesListFragment { mPrefs = LinphonePreferences.instance(); removePreviousPreferencesFile(); // Required when updating the preferences order - mListener = new LinphoneCoreListenerBase() { + mListener = new CoreListenerStub() { @Override - public void ecCalibrationStatus(LinphoneCore lc, final EcCalibratorStatus status, final int delayMs, Object data) { + public void onEcCalibrationResult(Core lc, Core.EcCalibratorStatus status, int delayMs) { + lc.removeListener(mListener); LinphoneManager.getInstance().routeAudioToReceiver(); CheckBoxPreference echoCancellation = (CheckBoxPreference) findPreference(getString(R.string.pref_echo_cancellation_key)); @@ -109,7 +111,7 @@ public class SettingsFragment extends PreferencesListFragment { ((AudioManager)getActivity().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL); Log.i("Set audio mode on 'Normal'"); } else if (status == EcCalibratorStatus.Done) { - echoCancellerCalibration.setSummary(String.format(getString(R.string.ec_calibrated), delayMs)); + echoCancellerCalibration.setSummary(String.format(getString(R.string.ec_calibrated), String.valueOf(delayMs))); echoCancellation.setChecked(true); LinphonePreferences.instance().setEchoCancellation(true); ((AudioManager)getActivity().getSystemService(Context.AUDIO_SERVICE)).setMode(AudioManager.MODE_NORMAL); @@ -196,7 +198,7 @@ public class SettingsFragment extends PreferencesListFragment { hidePreference(R.string.pref_push_notification_key); } - if (!Version.isVideoCapable() || !LinphoneManager.getLcIfManagerNotDestroyedOrNull().isVideoSupported()) { + if (!Version.isVideoCapable() || !LinphoneManager.getLcIfManagerNotDestroyedOrNull().videoSupported()) { emptyAndHidePreference(R.string.pref_video_key); } else { if (!AndroidCameraConfiguration.hasFrontCamera()) { @@ -204,7 +206,7 @@ public class SettingsFragment extends PreferencesListFragment { } } - if (!LinphoneManager.getLc().isTunnelAvailable()) { + if (!LinphoneManager.getLc().tunnelAvailable()) { emptyAndHidePreference(R.string.pref_tunnel_key); } @@ -278,20 +280,20 @@ public class SettingsFragment extends PreferencesListFragment { } private void initTunnelSettings() { - if (!LinphoneManager.isInstanciated() || !LinphoneManager.getLc().isTunnelAvailable()) { + if (!LinphoneManager.isInstanciated() || !LinphoneManager.getLc().tunnelAvailable()) { return; } - setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_host_key, mPrefs.getTunnelHost()); + /*setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_host_key, mPrefs.getTunnelHost()); setPreferenceDefaultValueAndSummary(R.string.pref_tunnel_port_key, String.valueOf(mPrefs.getTunnelPort())); ListPreference tunnelModePref = (ListPreference) findPreference(getString(R.string.pref_tunnel_mode_key)); String tunnelMode = mPrefs.getTunnelMode(); tunnelModePref.setSummary(tunnelMode); - tunnelModePref.setValue(tunnelMode); + tunnelModePref.setValue(tunnelMode);*/ } private void setTunnelPreferencesListener() { - findPreference(getString(R.string.pref_tunnel_host_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + /*findPreference(getString(R.string.pref_tunnel_host_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String host = newValue.toString(); @@ -321,7 +323,7 @@ public class SettingsFragment extends PreferencesListFragment { preference.setSummary(mode); return true; } - }); + });*/ } private void initAccounts() { @@ -368,14 +370,14 @@ public class SettingsFragment extends PreferencesListFragment { } if (LinphoneManager.getLcIfManagerNotDestroyedOrNull() != null) { - for (LinphoneProxyConfig lpc : LinphoneManager.getLc().getProxyConfigList()) { - LinphoneAddress addr = lpc.getAddress(); - if (addr.getUserName().equals(username) && addr.getDomain().equals(domain)) { - if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationOk) { + for (ProxyConfig lpc : LinphoneManager.getLc().getProxyConfigList()) { + Address addr = lpc.getIdentityAddress(); + if (addr.getUsername().equals(username) && addr.getDomain().equals(domain)) { + if (lpc.getState() == Core.RegistrationState.Ok) { me.setLed(R.drawable.led_connected); - } else if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationFailed) { + } else if (lpc.getState() == Core.RegistrationState.Failed) { me.setLed(R.drawable.led_error); - } else if (lpc.getState() == LinphoneCore.RegistrationState.RegistrationProgress) { + } else if (lpc.getState() == Core.RegistrationState.Progress) { me.setLed(R.drawable.led_inprogress); mHandler.postDelayed(new Runnable() { @Override @@ -398,7 +400,7 @@ public class SettingsFragment extends PreferencesListFragment { entries.add(getString(R.string.pref_none)); values.add(getString(R.string.pref_media_encryption_key_none)); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc == null || getResources().getBoolean(R.bool.disable_all_security_features_for_markets)) { setListPreferenceValues(pref, entries, values); return; @@ -443,9 +445,9 @@ public class SettingsFragment extends PreferencesListFragment { private void initializePreferredVideoSizePreferences(ListPreference pref) { List entries = new ArrayList(); List values = new ArrayList(); - for (String name : LinphoneManager.getLc().getSupportedVideoSizes()) { - entries.add(name); - values.add(name); + for (VideoDefinition vd : Factory.instance().getSupportedVideoDefinitions()) { + entries.add(vd.getName()); + values.add(vd.getName()); } setListPreferenceValues(pref, entries, values); @@ -478,27 +480,27 @@ public class SettingsFragment extends PreferencesListFragment { List entries = new ArrayList(); List values = new ArrayList(); entries.add(getString(R.string.lime_encryption_entry_disabled)); - values.add(LinphoneLimeState.Disabled.toString()); + values.add(LimeState.Disabled.toString()); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - if (lc == null || !lc.isLimeEncryptionAvailable()) { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc == null || !lc.limeAvailable()) { setListPreferenceValues(pref, entries, values); pref.setEnabled(false); return; } entries.add(getString(R.string.lime_encryption_entry_mandatory)); - values.add(LinphoneLimeState.Mandatory.toString()); + values.add(LimeState.Mandatory.toString()); entries.add(getString(R.string.lime_encryption_entry_preferred)); - values.add(LinphoneLimeState.Preferred.toString()); + values.add(LimeState.Preferred.toString()); setListPreferenceValues(pref, entries, values); - LinphoneLimeState lime = mPrefs.getLimeEncryption(); - if (lime == LinphoneLimeState.Disabled) { + LimeState lime = mPrefs.limeEnabled(); + if (lime == LimeState.Disabled) { pref.setSummary(getString(R.string.lime_encryption_entry_disabled)); - } else if (lime == LinphoneLimeState.Mandatory) { + } else if (lime == LimeState.Mandatory) { pref.setSummary(getString(R.string.lime_encryption_entry_mandatory)); - } else if (lime == LinphoneLimeState.Preferred) { + } else if (lime == LimeState.Preferred) { pref.setSummary(getString(R.string.lime_encryption_entry_preferred)); } pref.setValue(lime.toString()); @@ -517,37 +519,29 @@ public class SettingsFragment extends PreferencesListFragment { PreferenceCategory codecs = (PreferenceCategory) findPreference(getString(R.string.pref_codecs_key)); codecs.removeAll(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - for (final PayloadType pt : lc.getAudioCodecs()) { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + for (final PayloadType pt : lc.getAudioPayloadTypes()) { CheckBoxPreference codec = new CheckBoxPreference(getActivity()); - codec.setTitle(pt.getMime()); + codec.setTitle(pt.getMimeType()); /* Special case */ - if (pt.getMime().equals("mpeg4-generic")) { + if (pt.getMimeType().equals("mpeg4-generic")) { if (android.os.Build.VERSION.SDK_INT < 16) { /* Make sure AAC is disabled */ - try { - lc.enablePayloadType(pt, false); - } catch (LinphoneCoreException e) { - Log.e(e); - } + pt.enable(false); continue; } else { codec.setTitle("AAC-ELD"); } } - codec.setSummary(pt.getRate() + " Hz"); - codec.setChecked(lc.isPayloadTypeEnabled(pt)); + codec.setSummary(pt.getClockRate() + " Hz"); + codec.setDefaultValue(pt.enabled()); codec.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean enable = (Boolean) newValue; - try { - LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable); - } catch (LinphoneCoreException e) { - Log.e(e); - } + pt.enable(enable); return true; } }); @@ -556,15 +550,15 @@ public class SettingsFragment extends PreferencesListFragment { } CheckBoxPreference echoCancellation = (CheckBoxPreference) findPreference(getString(R.string.pref_echo_cancellation_key)); - echoCancellation.setChecked(mPrefs.isEchoCancellationEnabled()); + echoCancellation.setChecked(mPrefs.echoCancellationEnabled()); - if (mPrefs.isEchoCancellationEnabled()) { + if (mPrefs.echoCancellationEnabled()) { Preference echoCalibration = findPreference(getString(R.string.pref_echo_canceller_calibration_key)); - echoCalibration.setSummary(String.format(getString(R.string.ec_calibrated), mPrefs.getEchoCalibration())); + echoCalibration.setSummary(String.format(getString(R.string.ec_calibrated), String.valueOf(mPrefs.getEchoCalibration()))); } CheckBoxPreference adaptiveRateControl = (CheckBoxPreference) findPreference(getString(R.string.pref_adaptive_rate_control_key)); - adaptiveRateControl.setChecked(mPrefs.isAdaptiveRateControlEnabled()); + adaptiveRateControl.setChecked(mPrefs.adaptiveRateControlEnabled()); ListPreference bitrateLimit = (ListPreference) findPreference(getString(R.string.pref_codec_bitrate_limit_key)); bitrateLimit.setSummary(String.valueOf(mPrefs.getCodecBitrateLimit())); @@ -594,12 +588,12 @@ public class SettingsFragment extends PreferencesListFragment { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { mPrefs.setCodecBitrateLimit(Integer.parseInt(newValue.toString())); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); int bitrate = Integer.parseInt(newValue.toString()); - for (final PayloadType pt : lc.getAudioCodecs()) { - if (lc.payloadTypeIsVbr(pt)) { - lc.setPayloadTypeBitrate(pt, bitrate); + for (final PayloadType pt : lc.getAudioPayloadTypes()) { + if (pt.isVbr()) { + pt.setNormalBitrate(bitrate); } } @@ -650,7 +644,7 @@ public class SettingsFragment extends PreferencesListFragment { if (LinphoneManager.getInstance().startEchoTester() > 0) { preference.setSummary("Is running"); } - } catch (LinphoneCoreException e) { + } catch (CoreException e) { e.printStackTrace(); } } @@ -661,7 +655,7 @@ public class SettingsFragment extends PreferencesListFragment { if (LinphoneManager.getInstance().stopEchoTester() > 0) { preference.setSummary("Is stopped"); } - } catch (LinphoneCoreException e) { + } catch (CoreException e) { e.printStackTrace(); } } @@ -670,8 +664,9 @@ public class SettingsFragment extends PreferencesListFragment { try { if (LinphoneManager.getInstance().getEchoTesterStatus()) stopEchoTester(); - LinphoneManager.getInstance().startEcCalibration(mListener); - } catch (LinphoneCoreException e) { + LinphoneManager.getLc().addListener(mListener); + LinphoneManager.getInstance().startEcCalibration(); + } catch (CoreException e) { Log.e(e); } } @@ -696,19 +691,19 @@ public class SettingsFragment extends PreferencesListFragment { PreferenceCategory codecs = (PreferenceCategory) findPreference(getString(R.string.pref_video_codecs_key)); codecs.removeAll(); - final LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + final Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); final OpenH264DownloadHelper mCodecDownloader = LinphoneManager.getInstance().getOpenH264DownloadHelper(); - for (final PayloadType pt : lc.getVideoCodecs()) { + for (final PayloadType pt : lc.getVideoPayloadTypes()) { final CheckBoxPreference codec = new CheckBoxPreference(getActivity()); - codec.setTitle(pt.getMime()); + codec.setTitle(pt.getMimeType()); - if (!pt.getMime().equals("VP8")) { + if (!pt.getMimeType().equals("VP8")) { if (getResources().getBoolean(R.bool.disable_all_patented_codecs_for_markets)) { continue; } else { - if (!Version.hasFastCpuWithAsmOptim() && pt.getMime().equals("H264")) + if (!Version.hasFastCpuWithAsmOptim() && pt.getMimeType().equals("H264")) { // Android without neon doesn't support H264 Log.w("CPU does not have asm optimisations available, disabling H264"); @@ -716,49 +711,45 @@ public class SettingsFragment extends PreferencesListFragment { } } } - if (lc.downloadOpenH264Enabled()) { - if (pt.getMime().equals("H264") && mCodecDownloader.isCodecFound()) { + if (OpenH264DownloadHelper.isOpenH264DownloadEnabled()) { + if (pt.getMimeType().equals("H264") && mCodecDownloader.isCodecFound()) { codec.setSummary(mCodecDownloader.getLicenseMessage()); codec.setTitle("OpenH264"); } } - codec.setChecked(lc.isPayloadTypeEnabled(pt)); + codec.setDefaultValue(pt.enabled()); codec.setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { boolean enable = (Boolean) newValue; - try { - if (lc.downloadOpenH264Enabled()) { - if (enable && Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") - && pt.getMime().equals("H264") && !mCodecDownloader.isCodecFound()) { - mCodecDownloader.setOpenH264HelperListener(LinphoneManager.getInstance().getOpenH264HelperListener()); - mCodecDownloader.setUserData(0, LinphoneManager.getInstance().getContext()); - mCodecDownloader.setUserData(1, codec); + if (OpenH264DownloadHelper.isOpenH264DownloadEnabled()) { + if (enable && Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") + && pt.getMimeType().equals("H264") && !mCodecDownloader.isCodecFound()) { + mCodecDownloader.setOpenH264HelperListener(LinphoneManager.getInstance().getOpenH264HelperListener()); + mCodecDownloader.setUserData(0, LinphoneManager.getInstance().getContext()); + mCodecDownloader.setUserData(1, codec); - AlertDialog.Builder builder = new AlertDialog.Builder(LinphoneManager.getInstance().getContext()); - builder.setCancelable(false); - builder.setMessage("Do you agree to download " + mCodecDownloader.getLicenseMessage()).setPositiveButton("Yes", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_POSITIVE) - mCodecDownloader.downloadCodec(); + AlertDialog.Builder builder = new AlertDialog.Builder(LinphoneManager.getInstance().getContext()); + builder.setCancelable(false); + builder.setMessage("Do you agree to download " + mCodecDownloader.getLicenseMessage()).setPositiveButton("Yes", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_POSITIVE) + mCodecDownloader.downloadCodec(); + } + }); + builder.setNegativeButton("No", new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + if (which == DialogInterface.BUTTON_NEGATIVE) { + // Disable H264 } - }); - builder.setNegativeButton("No", new DialogInterface.OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - if (which == DialogInterface.BUTTON_NEGATIVE) { - // Disable H264 - } - } - }).show(); - } + } + }).show(); } - LinphoneManager.getLcIfManagerNotDestroyedOrNull().enablePayloadType(pt, enable); - } catch (LinphoneCoreException e) { - Log.e(e); } + pt.enable(enable); return true; } }); @@ -885,6 +876,7 @@ public class SettingsFragment extends PreferencesListFragment { CheckBoxPreference autoAnswer = (CheckBoxPreference) findPreference(getString(R.string.pref_auto_answer_key)); CheckBoxPreference rfc2833 = (CheckBoxPreference) findPreference(getString(R.string.pref_rfc2833_dtmf_key)); CheckBoxPreference sipInfo = (CheckBoxPreference) findPreference(getString(R.string.pref_sipinfo_dtmf_key)); + CheckBoxPreference dialerCall = (CheckBoxPreference) findPreference(getString(R.string.pref_dialer_call_key)); EditTextPreference incTimeout = (EditTextPreference) findPreference(getString(R.string.pref_incoming_call_timeout_key)); EditTextPreference autoAnswerTime = (EditTextPreference) findPreference(getString(R.string.pref_auto_answer_time_key)); @@ -904,6 +896,7 @@ public class SettingsFragment extends PreferencesListFragment { } setPreferenceDefaultValueAndSummary(R.string.pref_voice_mail_key, mPrefs.getVoiceMailUri()); + dialerCall.setChecked(mPrefs.getNativeDialerCall()); } public void enableDeviceRingtone(boolean enabled) { @@ -997,6 +990,15 @@ public class SettingsFragment extends PreferencesListFragment { } }); + findPreference(getString(R.string.pref_dialer_call_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + boolean use = (Boolean) newValue; + mPrefs.setNativeDialerCall(use); + return true; + } + }); + findPreference(getString(R.string.pref_incoming_call_timeout_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { @@ -1044,20 +1046,20 @@ public class SettingsFragment extends PreferencesListFragment { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { String value = newValue.toString(); - LinphoneLimeState lime = LinphoneLimeState.Disabled; - if (value.equals(LinphoneLimeState.Mandatory.toString())) - lime = LinphoneLimeState.Mandatory; - else if (value.equals(LinphoneLimeState.Preferred.toString())) - lime = LinphoneLimeState.Preferred; - mPrefs.setLimeEncryption(lime); + LimeState lime = LimeState.Disabled; + if (value.equals(LimeState.Mandatory.toString())) + lime = LimeState.Mandatory; + else if (value.equals(LimeState.Preferred.toString())) + lime = LimeState.Preferred; + mPrefs.enableLime(lime); - lime = mPrefs.getLimeEncryption(); - if (lime == LinphoneLimeState.Disabled) { + lime = mPrefs.limeEnabled(); + if (lime == LimeState.Disabled) { preference.setSummary(getString(R.string.lime_encryption_entry_disabled)); - } else if (lime == LinphoneLimeState.Mandatory) { + } else if (lime == LimeState.Mandatory) { setEncryptionZrtp(); preference.setSummary(getString(R.string.lime_encryption_entry_mandatory)); - } else if (lime == LinphoneLimeState.Preferred) { + } else if (lime == LimeState.Preferred) { setEncryptionZrtp(); preference.setSummary(getString(R.string.lime_encryption_entry_preferred)); } @@ -1070,8 +1072,6 @@ public class SettingsFragment extends PreferencesListFragment { private void initNetworkSettings() { ((CheckBoxPreference) findPreference(getString(R.string.pref_wifi_only_key))).setChecked(mPrefs.isWifiOnlyEnabled()); - ((CheckBoxPreference) findPreference(getString(R.string.pref_doze_mode_key))).setChecked(mPrefs.isDozeModeEnabled()); - // Disable UPnP if ICE si enabled, or disable ICE if UPnP is enabled CheckBoxPreference ice = (CheckBoxPreference) findPreference(getString(R.string.pref_ice_enable_key)); CheckBoxPreference turn = (CheckBoxPreference) findPreference(getString(R.string.pref_turn_enable_key)); @@ -1112,15 +1112,6 @@ public class SettingsFragment extends PreferencesListFragment { } }); - findPreference(getString(R.string.pref_doze_mode_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { - @Override - public boolean onPreferenceChange(Preference preference, Object newValue) { - mPrefs.enableDozeMode((Boolean) newValue); - LinphoneManager.getInstance().dozeManager((Boolean) newValue); - return true; - } - }); - findPreference(getString(R.string.pref_stun_server_key)).setOnPreferenceChangeListener(new OnPreferenceChangeListener() { @Override public boolean onPreferenceChange(Preference preference, Object newValue) { @@ -1350,9 +1341,11 @@ public class SettingsFragment extends PreferencesListFragment { @Override public void onPause() { - if (LinphoneManager.getInstance().getEchoTesterStatus()) - stopEchoTester(); - LinphoneActivity.instance().hideTopBar(); + if (LinphoneActivity.isInstanciated() && LinphoneManager.isInstanciated()) { + if (LinphoneManager.getInstance().getEchoTesterStatus()) + stopEchoTester(); + LinphoneActivity.instance().hideTopBar(); + } super.onPause(); } } diff --git a/src/android/org/linphone/StatusFragment.java b/src/android/org/linphone/StatusFragment.java index 169db023c..0d1df0b4e 100644 --- a/src/android/org/linphone/StatusFragment.java +++ b/src/android/org/linphone/StatusFragment.java @@ -1,7 +1,7 @@ package org.linphone; /* StatusFragment.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -18,15 +18,15 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import org.linphone.assistant.AssistantActivity; -import org.linphone.core.CallDirection; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneContent; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.MediaEncryption; -import org.linphone.core.LinphoneCore.RegistrationState; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneEvent; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.Call.Dir; +import org.linphone.core.Call; +import org.linphone.core.Content; +import org.linphone.core.Core; +import org.linphone.core.Core.MediaEncryption; +import org.linphone.core.Core.RegistrationState; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.Event; +import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; import android.app.Activity; @@ -48,16 +48,13 @@ import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ public class StatusFragment extends Fragment { private Handler refreshHandler = new Handler(); private TextView statusText, voicemailCount; private ImageView statusLed, callQuality, encryption, menu, voicemail; private Runnable mCallQualityUpdater; private boolean isInCall, isAttached = false, isZrtpAsk; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; private Dialog ZRTPdialog = null; private int mDisplayedQuality = -1; @@ -77,9 +74,9 @@ public class StatusFragment extends Fragment { // We create it once to not delay the first display populateSliderContent(); - mListener = new LinphoneCoreListenerBase(){ + mListener = new CoreListenerStub(){ @Override - public void registrationState(final LinphoneCore lc, final LinphoneProxyConfig proxy, final LinphoneCore.RegistrationState state, String smessage) { + public void onRegistrationStateChanged(final Core lc, final ProxyConfig proxy, final Core.RegistrationState state, String smessage) { if (!isAttached || !LinphoneService.isReady()) { return; } @@ -110,15 +107,15 @@ public class StatusFragment extends Fragment { } @Override - public void notifyReceived(LinphoneCore lc, LinphoneEvent ev, String eventName, LinphoneContent content) { + public void onNotifyReceived(Core lc, Event ev, String eventName, Content content) { if(!content.getType().equals("application")) return; if(!content.getSubtype().equals("simple-message-summary")) return; - if (content.getData() == null) return; + if (content.getSize() == 0) return; int unreadCount = -1; - String data = content.getDataAsString(); + String data = content.getStringBuffer(); String[] voiceMail = data.split("voice-message: "); final String[] intToParse = voiceMail[1].split("/",0); @@ -152,14 +149,14 @@ public class StatusFragment extends Fragment { return view; } - public void setLinphoneCoreListener() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + public void setCoreListener() { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); - LinphoneProxyConfig lpc = lc.getDefaultProxyConfig(); + ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null) { - mListener.registrationState(lc, lpc, lpc.getState(), null); + mListener.onRegistrationStateChanged(lc, lpc, lpc.getState(), null); } } } @@ -177,7 +174,7 @@ public class StatusFragment extends Fragment { voicemailCount.setVisibility(View.GONE); if (isInCall && isAttached) { - //LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); + //Call call = LinphoneManager.getLc().getCurrentCall(); //initCallStatsRefresher(call, callStats); } else if (!isInCall) { voicemailCount.setVisibility(View.VISIBLE); @@ -201,15 +198,15 @@ public class StatusFragment extends Fragment { menu.setEnabled(enabled); } - private int getStatusIconResource(LinphoneCore.RegistrationState state, boolean isDefaultAccount) { + private int getStatusIconResource(Core.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) { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + boolean defaultAccountConnected = (isDefaultAccount && lc != null && lc.getDefaultProxyConfig() != null && lc.getDefaultProxyConfig().getState() == RegistrationState.Ok) || !isDefaultAccount; + if (state == RegistrationState.Ok && defaultAccountConnected) { return R.drawable.led_connected; - } else if (state == RegistrationState.RegistrationProgress) { + } else if (state == RegistrationState.Progress) { return R.drawable.led_inprogress; - } else if (state == RegistrationState.RegistrationFailed) { + } else if (state == RegistrationState.Failed) { return R.drawable.led_error; } else { return R.drawable.led_disconnected; @@ -221,7 +218,7 @@ public class StatusFragment extends Fragment { return R.drawable.led_disconnected; } - private String getStatusIconText(LinphoneCore.RegistrationState state) { + private String getStatusIconText(Core.RegistrationState state) { Context context = getActivity(); if (!isAttached && LinphoneActivity.isInstanciated()) context = LinphoneActivity.instance(); @@ -229,11 +226,11 @@ public class StatusFragment extends Fragment { context = LinphoneService.instance(); try { - if (state == RegistrationState.RegistrationOk && LinphoneManager.getLcIfManagerNotDestroyedOrNull().getDefaultProxyConfig().isRegistered()) { + if (state == RegistrationState.Ok && LinphoneManager.getLcIfManagerNotDestroyedOrNull().getDefaultProxyConfig().getState() == RegistrationState.Ok) { return context.getString(R.string.status_connected); - } else if (state == RegistrationState.RegistrationProgress) { + } else if (state == RegistrationState.Progress) { return context.getString(R.string.status_in_progress); - } else if (state == RegistrationState.RegistrationFailed) { + } else if (state == RegistrationState.Failed) { return context.getString(R.string.status_error); } else { return context.getString(R.string.status_not_connected); @@ -249,7 +246,7 @@ public class StatusFragment extends Fragment { private void startCallQuality() { callQuality.setVisibility(View.VISIBLE); refreshHandler.postDelayed(mCallQualityUpdater = new Runnable() { - LinphoneCall mCurrentCall = LinphoneManager.getLc() + Call mCurrentCall = LinphoneManager.getLc() .getCurrentCall(); public void run() { @@ -300,19 +297,19 @@ public class StatusFragment extends Fragment { public void onResume() { super.onResume(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); - LinphoneProxyConfig lpc = lc.getDefaultProxyConfig(); + ProxyConfig lpc = lc.getDefaultProxyConfig(); if (lpc != null) { - mListener.registrationState(lc, lpc, lpc.getState(), null); + mListener.onRegistrationStateChanged(lc, lpc, lpc.getState(), null); } - LinphoneCall call = lc.getCurrentCall(); + Call call = lc.getCurrentCall(); if (isInCall && (call != null || lc.getConferenceSize() > 1 || lc.getCallsNb() > 0)) { if (call != null) { startCallQuality(); - refreshStatusItems(call, call.getCurrentParams().getVideoEnabled()); + refreshStatusItems(call, call.getCurrentParams().videoEnabled()); } menu.setVisibility(View.INVISIBLE); encryption.setVisibility(View.VISIBLE); @@ -337,7 +334,7 @@ public class StatusFragment extends Fragment { public void onPause() { super.onPause(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -348,7 +345,7 @@ public class StatusFragment extends Fragment { } } - public void refreshStatusItems(final LinphoneCall call, boolean isVideoEnabled) { + public void refreshStatusItems(final Call call, boolean isVideoEnabled) { if (call != null) { voicemailCount.setVisibility(View.GONE); MediaEncryption mediaEncryption = call.getCurrentParams().getMediaEncryption(); @@ -359,9 +356,9 @@ public class StatusFragment extends Fragment { //background.setVisibility(View.VISIBLE); } - if (mediaEncryption == MediaEncryption.SRTP || (mediaEncryption == MediaEncryption.ZRTP && call.isAuthenticationTokenVerified()) || mediaEncryption == MediaEncryption.DTLS) { + if (mediaEncryption == MediaEncryption.SRTP || (mediaEncryption == MediaEncryption.ZRTP && call.getAuthenticationTokenVerified()) || mediaEncryption == MediaEncryption.DTLS) { encryption.setImageResource(R.drawable.security_ok); - } else if (mediaEncryption == MediaEncryption.ZRTP && !call.isAuthenticationTokenVerified()) { + } else if (mediaEncryption == MediaEncryption.ZRTP && !call.getAuthenticationTokenVerified()) { encryption.setImageResource(R.drawable.security_pending); } else { encryption.setImageResource(R.drawable.security_ko); @@ -380,7 +377,7 @@ public class StatusFragment extends Fragment { } } - public void showZRTPDialog(final LinphoneCall call) { + public void showZRTPDialog(final Call call) { if (getActivity() == null) { Log.w("Can't display ZRTP popup, no Activity"); return; @@ -408,7 +405,7 @@ public class StatusFragment extends Fragment { String zrtpToRead, zrtpToListen; isZrtpAsk = true; - if (call.getDirection().equals(CallDirection.Incoming)) { + if (call.getDir().equals(Call.Dir.Incoming)) { zrtpToRead = token.substring(0,2); zrtpToListen = token.substring(2); } else { diff --git a/src/android/org/linphone/UIThreadDispatcher.java b/src/android/org/linphone/UIThreadDispatcher.java index 90eba431c..d3e6d36a4 100644 --- a/src/android/org/linphone/UIThreadDispatcher.java +++ b/src/android/org/linphone/UIThreadDispatcher.java @@ -1,6 +1,8 @@ +package org.linphone; + /* UIThreadDispatcher.java -Copyright (C) 2014 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,14 +18,13 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone; import android.os.Handler; import android.os.Looper; public class UIThreadDispatcher { private static Handler mHandler = new Handler(Looper.getMainLooper()); - + public static void dispatch(Runnable r) { mHandler.post(r); } diff --git a/src/android/org/linphone/assistant/AssistantActivity.java b/src/android/org/linphone/assistant/AssistantActivity.java index 0fa653f0e..3040b2ab9 100644 --- a/src/android/org/linphone/assistant/AssistantActivity.java +++ b/src/android/org/linphone/assistant/AssistantActivity.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* AssistantActivity.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -32,20 +32,21 @@ import org.linphone.LinphoneService; import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.StatusFragment; +import org.linphone.core.AccountCreatorListener; import org.linphone.core.DialPlan; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneAddress.TransportType; -import org.linphone.core.LinphoneAuthInfo; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.RegistrationState; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.AccountCreator; +import org.linphone.core.Address; +import org.linphone.core.Address.TransportType; +import org.linphone.core.AuthInfo; +import org.linphone.core.Core; +import org.linphone.core.Core.RegistrationState; +import org.linphone.core.CoreException; +import org.linphone.core.Factory; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.ProxyConfig; import org.linphone.mediastream.Log; import org.linphone.mediastream.Version; -import org.linphone.tools.OpenH264DownloadHelper; +import org.linphone.core.tools.OpenH264DownloadHelper; import android.Manifest; import android.app.Activity; @@ -81,10 +82,7 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -/** - * @author Sylvain Berfini - */ -public class AssistantActivity extends Activity implements OnClickListener, ActivityCompat.OnRequestPermissionsResultCallback, LinphoneAccountCreator.LinphoneAccountCreatorListener { +public class AssistantActivity extends Activity implements OnClickListener, ActivityCompat.OnRequestPermissionsResultCallback, AccountCreatorListener { private static AssistantActivity instance; private ImageView back, cancel; private AssistantFragmentsEnum currentFragment; @@ -93,15 +91,15 @@ private static AssistantActivity instance; private Fragment fragment; private LinphonePreferences mPrefs; private boolean accountCreated = false, newAccount = false, isLink = false, fromPref = false; - private LinphoneCoreListenerBase mListener; - private LinphoneAddress address; + private CoreListenerStub mListener; + private Address address; private StatusFragment status; private ProgressDialog progress; private Dialog dialog; private boolean remoteProvisioningInProgress; private boolean echoCancellerAlreadyDone; private static final int PERMISSIONS_REQUEST_RECORD_AUDIO = 201; - private LinphoneAccountCreator accountCreator; + private AccountCreator accountCreator; private CountryListAdapter countryListAdapter; public DialPlan country; @@ -141,49 +139,49 @@ private static AssistantActivity instance; mPrefs = LinphonePreferences.instance(); status.enableSideMenu(false); - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc(), LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); countryListAdapter = new CountryListAdapter(getApplicationContext()); - mListener = new LinphoneCoreListenerBase() { + mListener = new CoreListenerStub() { @Override - public void configuringStatus(LinphoneCore lc, final LinphoneCore.RemoteProvisioningState state, String message) { + public void onConfiguringStatus(Core lc, final Core.ConfiguringState state, String message) { if (progress != null) progress.dismiss(); - if (state == LinphoneCore.RemoteProvisioningState.ConfiguringSuccessful) { + if (state == Core.ConfiguringState.Successful) { goToLinphoneActivity(); - } else if (state == LinphoneCore.RemoteProvisioningState.ConfiguringFailed) { + } else if (state == Core.ConfiguringState.Failed) { Toast.makeText(AssistantActivity.instance(), getString(R.string.remote_provisioning_failure), Toast.LENGTH_LONG).show(); } } @Override - public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, RegistrationState state, String smessage) { + public void onRegistrationStateChanged(Core lc, ProxyConfig cfg, RegistrationState state, String smessage) { if (remoteProvisioningInProgress) { if (progress != null) progress.dismiss(); - if (state == RegistrationState.RegistrationOk) { + if (state == RegistrationState.Ok) { remoteProvisioningInProgress = false; success(); } } else if (accountCreated && !newAccount){ - if (address != null && address.asString().equals(cfg.getAddress().asString()) ) { - if (state == RegistrationState.RegistrationOk) { + if (address != null && address.asString().equals(cfg.getIdentityAddress().asString()) ) { + if (state == RegistrationState.Ok) { if (progress != null) progress.dismiss(); if (getResources().getBoolean(R.bool.use_phone_number_validation) && cfg.getDomain().equals(getString(R.string.default_domain)) && LinphoneManager.getLc().getDefaultProxyConfig() != null) { - accountCreator.isAccountUsed(); + accountCreator.isAccountExist(); } else { success(); } - } else if (state == RegistrationState.RegistrationFailed) { + } else if (state == RegistrationState.Failed) { if (progress != null) progress.dismiss(); if (dialog == null || !dialog.isShowing()) { dialog = createErrorDialog(cfg, smessage); dialog.setCancelable(false); dialog.show(); } - } else if(!(state == RegistrationState.RegistrationProgress)) { + } else if(!(state == RegistrationState.Progress)) { if (progress != null) progress.dismiss(); } } @@ -197,7 +195,7 @@ private static AssistantActivity instance; protected void onResume() { super.onResume(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } @@ -205,7 +203,7 @@ private static AssistantActivity instance; @Override protected void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -347,70 +345,66 @@ private static AssistantActivity instance; } } - public void configureLinphoneProxyConfig(LinphoneAccountCreator accountCreator) { - LinphoneCore lc = LinphoneManager.getLc(); - LinphoneProxyConfig proxyConfig = lc.createProxyConfig(); - LinphoneAddress addr; - LinphoneAuthInfo authInfo; + public void configureProxyConfig(AccountCreator accountCreator) { + Core lc = LinphoneManager.getLc(); + ProxyConfig proxyConfig = lc.createProxyConfig(); + Address addr; + AuthInfo authInfo; - try { - String identity = proxyConfig.getIdentity(); - if (identity == null || accountCreator.getUsername() == null) { - LinphoneUtils.displayErrorAlert(getString(R.string.error), this); - return; - } - identity = identity.replace("?", accountCreator.getUsername()); - addr = LinphoneCoreFactory.instance().createLinphoneAddress(identity); - addr.setDisplayName(accountCreator.getUsername()); - address = addr; - proxyConfig.edit(); - - - proxyConfig.setIdentity(addr.asString()); - - if (LinphonePreferences.instance() != null) - proxyConfig.setContactUriParameters(LinphonePreferences.instance().getPushNotificationRegistrationID()); - - if (accountCreator.getPhoneNumber() != null && accountCreator.getPhoneNumber().length() > 0) - proxyConfig.setDialPrefix(accountCreator.getPrefix(accountCreator.getPhoneNumber())); - - proxyConfig.done(); - - authInfo = LinphoneCoreFactory.instance().createAuthInfo( - accountCreator.getUsername(), - null, - accountCreator.getPassword(), - accountCreator.getHa1(), - proxyConfig.getRealm(), - proxyConfig.getDomain()); - - - lc.addProxyConfig(proxyConfig); - - lc.addAuthInfo(authInfo); - - lc.setDefaultProxyConfig(proxyConfig); - - if (ContactsManager.getInstance() != null) - ContactsManager.getInstance().fetchContactsAsync(); - - if (LinphonePreferences.instance() != null) - mPrefs.enabledFriendlistSubscription(getResources().getBoolean(R.bool.use_friendlist_subscription)); - - LinphoneManager.getInstance().subscribeFriendList(getResources().getBoolean(R.bool.use_friendlist_subscription)); - - if (!newAccount) { - displayRegistrationInProgressDialog(); - } - accountCreated = true; - } catch (LinphoneCoreException e) { - Log.e("Can't configure proxy config ", e); + String identity = proxyConfig.getIdentityAddress().asStringUriOnly(); + if (identity == null || accountCreator.getUsername() == null) { + LinphoneUtils.displayErrorAlert(getString(R.string.error), this); + return; } + identity = identity.replace("?", accountCreator.getUsername()); + addr = Factory.instance().createAddress(identity); + addr.setDisplayName(accountCreator.getUsername()); + address = addr; + proxyConfig.edit(); + + + proxyConfig.setIdentityAddress(addr); + + if (LinphonePreferences.instance() != null) + proxyConfig.setContactUriParameters(LinphonePreferences.instance().getPushNotificationRegistrationID()); + + if (accountCreator.getPhoneNumber() != null && accountCreator.getPhoneNumber().length() > 0) + proxyConfig.setDialPrefix(org.linphone.core.Utils.getPrefixFromE164(accountCreator.getPhoneNumber())); + + proxyConfig.done(); + + authInfo = Factory.instance().createAuthInfo( + accountCreator.getUsername(), + null, + accountCreator.getPassword(), + accountCreator.getHa1(), + proxyConfig.getRealm(), + proxyConfig.getDomain()); + + + lc.addProxyConfig(proxyConfig); + + lc.addAuthInfo(authInfo); + + lc.setDefaultProxyConfig(proxyConfig); + + if (ContactsManager.getInstance() != null) + ContactsManager.getInstance().fetchContactsAsync(); + + if (LinphonePreferences.instance() != null) + mPrefs.enabledFriendlistSubscription(getResources().getBoolean(R.bool.use_friendlist_subscription)); + + LinphoneManager.getInstance().subscribeFriendList(getResources().getBoolean(R.bool.use_friendlist_subscription)); + + if (!newAccount) { + displayRegistrationInProgressDialog(); + } + accountCreated = true; } - public void linphoneLogIn(LinphoneAccountCreator accountCreator) { - LinphoneManager.getLc().getConfig().loadXmlFile(LinphoneManager.getInstance().getmDynamicConfigFile()); - configureLinphoneProxyConfig(accountCreator); + public void linphoneLogIn(AccountCreator accountCreator) { + LinphoneManager.getLc().getConfig().loadFromXmlFile(LinphoneManager.getInstance().getmDynamicConfigFile()); + configureProxyConfig(accountCreator); } public void genericLogIn(String username, String userid, String password, String prefix, String domain, TransportType transport) { @@ -485,8 +479,8 @@ private static AssistantActivity instance; } private void launchDownloadCodec() { - if (LinphoneManager.getLc().downloadOpenH264Enabled()) { - OpenH264DownloadHelper downloadHelper = LinphoneCoreFactory.instance().createOpenH264DownloadHelper(); + if (OpenH264DownloadHelper.isOpenH264DownloadEnabled()) { + OpenH264DownloadHelper downloadHelper = Factory.instance().createOpenH264DownloadHelper(this); if (Version.getCpuAbis().contains("armeabi-v7a") && !Version.getCpuAbis().contains("x86") && !downloadHelper.isCodecFound()) { CodecDownloaderFragment codecFragment = new CodecDownloaderFragment(); changeFragment(codecFragment); @@ -506,7 +500,7 @@ private static AssistantActivity instance; public String getPhoneWithCountry() { if(country == null || phone_number == null) return ""; - String phoneNumberWithCountry = country.getCountryCode() + phone_number.replace("\\D", ""); + String phoneNumberWithCountry = country.getCountryCallingCode() + phone_number.replace("\\D", ""); return phoneNumberWithCountry; } @@ -516,17 +510,13 @@ private static AssistantActivity instance; domain = LinphoneUtils.getDisplayableUsernameFromAddress(domain); String identity = "sip:" + username + "@" + domain; - try { - address = LinphoneCoreFactory.instance().createLinphoneAddress(identity); - } catch (LinphoneCoreException e) { - Log.e(e); - } + address = Factory.instance().createAddress(identity); AccountBuilder builder = new AccountBuilder(LinphoneManager.getLc()) .setUsername(username) .setDomain(domain) .setHa1(ha1) - .setUserId(userid) + .setUserid(userid) .setPassword(password); if (prefix != null) { @@ -535,9 +525,9 @@ private static AssistantActivity instance; String forcedProxy = ""; if (!TextUtils.isEmpty(forcedProxy)) { - builder.setProxy(forcedProxy) + builder.setServerAddr(forcedProxy) .setOutboundProxyEnabled(true) - .setAvpfRRInterval(5); + .setAvpfRrInterval(5); } if (transport != null) { builder.setTransport(transport); @@ -549,7 +539,7 @@ private static AssistantActivity instance; displayRegistrationInProgressDialog(); } accountCreated = true; - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } } @@ -631,7 +621,7 @@ private static AssistantActivity instance; launchDownloadCodec(); } - public Dialog createErrorDialog(LinphoneProxyConfig proxy, String message){ + public Dialog createErrorDialog(ProxyConfig proxy, String message){ AlertDialog.Builder builder = new AlertDialog.Builder(this); if(message.equals("Forbidden")) { message = getString(R.string.assistant_error_bad_credentials); @@ -655,7 +645,7 @@ private static AssistantActivity instance; } public void success() { - boolean needsEchoCalibration = LinphoneManager.getLc().needsEchoCalibration(); + boolean needsEchoCalibration = LinphoneManager.getLc().isEchoCancellerCalibrationRequired(); if (needsEchoCalibration && mPrefs.isFirstLaunch()) { launchEchoCancellerCalibration(true); } else { @@ -669,13 +659,13 @@ private static AssistantActivity instance; finish(); } - public void setLinphoneCoreListener() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + public void setCoreListener() { + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } if (status != null) { - status.setLinphoneCoreListener(); + status.setCoreListener(); } } @@ -695,8 +685,8 @@ private static AssistantActivity instance; } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { - if(status.equals(LinphoneAccountCreator.RequestStatus.AccountExistWithAlias)){ + public void onIsAccountExist(AccountCreator accountCreator, AccountCreator.Status status, String resp) { + if(status.equals(AccountCreator.Status.AccountExistWithAlias)){ success(); } else { isLink = true; @@ -706,47 +696,47 @@ private static AssistantActivity instance; } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onCreateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onLinkAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAlias(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountActivated(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onRecoverAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountLinked(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAliasUsed(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @@ -767,7 +757,7 @@ private static AssistantActivity instance; public CountryListAdapter(Context ctx) { context = ctx; - allCountries = LinphoneCoreFactory.instance().getAllDialPlan(); + allCountries = Factory.instance().getDialPlans(); filteredCountries = new ArrayList(Arrays.asList(allCountries)); } @@ -813,7 +803,7 @@ private static AssistantActivity instance; DialPlan c = filteredCountries.get(position); TextView name = (TextView) view.findViewById(R.id.country_name); - name.setText(c.getCountryName()); + name.setText(c.getCountry()); TextView dial_code = (TextView) view.findViewById(R.id.country_prefix); if (context != null) @@ -830,7 +820,7 @@ private static AssistantActivity instance; protected FilterResults performFiltering(CharSequence constraint) { ArrayList filteredCountries = new ArrayList(); for (DialPlan c : allCountries) { - if (c.getCountryName().toLowerCase().contains(constraint) + if (c.getCountry().toLowerCase().contains(constraint) || c.getCountryCallingCode().contains(constraint)) { filteredCountries.add(c); } diff --git a/src/android/org/linphone/assistant/AssistantFragmentsEnum.java b/src/android/org/linphone/assistant/AssistantFragmentsEnum.java index ae0d42ff5..52fcdd38a 100644 --- a/src/android/org/linphone/assistant/AssistantFragmentsEnum.java +++ b/src/android/org/linphone/assistant/AssistantFragmentsEnum.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* AssistantFragmentsEnum.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,9 +17,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + public enum AssistantFragmentsEnum { WELCOME, CREATE_ACCOUNT, diff --git a/src/android/org/linphone/assistant/CodecDownloaderFragment.java b/src/android/org/linphone/assistant/CodecDownloaderFragment.java index 41b8598ea..07506299b 100644 --- a/src/android/org/linphone/assistant/CodecDownloaderFragment.java +++ b/src/android/org/linphone/assistant/CodecDownloaderFragment.java @@ -2,7 +2,7 @@ package org.linphone.assistant; /* CodecDownloaderFragment.java -Copyright (C) 2016 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -21,10 +21,10 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import org.linphone.LinphoneManager; import org.linphone.R; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.OpenH264DownloadHelperListener; +import org.linphone.core.CoreException; +import org.linphone.core.tools.OpenH264DownloadHelperListener; import org.linphone.core.PayloadType; -import org.linphone.tools.OpenH264DownloadHelper; +import org.linphone.core.tools.OpenH264DownloadHelper; import android.app.Fragment; import android.os.Build; @@ -37,9 +37,6 @@ import android.widget.Button; import android.widget.ProgressBar; import android.widget.TextView; -/** - * @author Erwan CROZE - */ public class CodecDownloaderFragment extends Fragment { private Handler mHandler = new Handler(); private TextView question; @@ -198,16 +195,12 @@ public class CodecDownloaderFragment extends Fragment { private void enabledH264(boolean enable) { PayloadType h264 = null; - for (PayloadType pt : LinphoneManager.getLc().getVideoCodecs()) { - if (pt.getMime().equals("H264")) h264 = pt; + for (PayloadType pt : LinphoneManager.getLc().getVideoPayloadTypes()) { + if (pt.getMimeType().equals("H264")) h264 = pt; } if (h264 != null) { - try { - LinphoneManager.getLc().enablePayloadType(h264, enable); - } catch (LinphoneCoreException e) { - e.printStackTrace(); - } + h264.enable(enable); } } } diff --git a/src/android/org/linphone/assistant/CountryListFragment.java b/src/android/org/linphone/assistant/CountryListFragment.java index 294cf80c7..e4bcf4a52 100644 --- a/src/android/org/linphone/assistant/CountryListFragment.java +++ b/src/android/org/linphone/assistant/CountryListFragment.java @@ -1,5 +1,24 @@ package org.linphone.assistant; +/* +CountryListFragment.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import org.linphone.R; import org.linphone.core.DialPlan; diff --git a/src/android/org/linphone/assistant/CreateAccountActivationFragment.java b/src/android/org/linphone/assistant/CreateAccountActivationFragment.java index 21d286303..081ea93d6 100644 --- a/src/android/org/linphone/assistant/CreateAccountActivationFragment.java +++ b/src/android/org/linphone/assistant/CreateAccountActivationFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* CreateAccountActivationFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -30,25 +30,22 @@ import android.widget.Toast; import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneAccountCreator.LinphoneAccountCreatorListener; -import org.linphone.core.LinphoneCoreFactory; -/** - * @author Sylvain Berfini - */ -public class CreateAccountActivationFragment extends Fragment implements OnClickListener, LinphoneAccountCreatorListener { +import org.linphone.core.AccountCreator; +import org.linphone.core.AccountCreatorListener; +import org.linphone.core.Factory; + +public class CreateAccountActivationFragment extends Fragment implements OnClickListener, AccountCreatorListener { private String username, password; private Button checkAccount; private TextView email; - private LinphoneAccountCreator accountCreator; + private AccountCreator accountCreator; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_account_creation_email_activation, container, false); - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc() - , LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); username = getArguments().getString("Username"); @@ -75,33 +72,33 @@ public class CreateAccountActivationFragment extends Fragment implements OnClick } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountExist(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onCreateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onLinkAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAlias(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountActivated(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountNotActivated)) { + if (status.equals(AccountCreator.Status.AccountNotActivated)) { Toast.makeText(getActivity(), getString(R.string.assistant_account_not_validated), Toast.LENGTH_LONG).show(); - } else if (status.equals(LinphoneAccountCreator.RequestStatus.AccountActivated)) { + } else if (status.equals(AccountCreator.Status.AccountActivated)) { AssistantActivity.instance().linphoneLogIn(accountCreator); AssistantActivity.instance().isAccountVerified(username); } else { @@ -111,19 +108,19 @@ public class CreateAccountActivationFragment extends Fragment implements OnClick } @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onRecoverAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountLinked(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAliasUsed(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } } diff --git a/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java b/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java index 994132cd9..dec3380c4 100644 --- a/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java +++ b/src/android/org/linphone/assistant/CreateAccountCodeActivationFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* CreateAccountCodeActivationFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -21,9 +21,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneAccountCreator.LinphoneAccountCreatorListener; -import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.AccountCreator; +import org.linphone.core.AccountCreatorListener; +import org.linphone.core.Factory; import android.app.Fragment; import android.os.Bundle; @@ -39,7 +39,7 @@ import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; -public class CreateAccountCodeActivationFragment extends Fragment implements LinphoneAccountCreatorListener { +public class CreateAccountCodeActivationFragment extends Fragment implements AccountCreatorListener { private String username, phone, dialcode; private TextView title, phonenumber; private EditText code; @@ -47,7 +47,7 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin private int code_length, accountNumber; private ImageView back; private Button checkAccount; - private LinphoneAccountCreator accountCreator; + private AccountCreator accountCreator; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, @@ -62,7 +62,7 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin accountNumber = getArguments().getInt("AccountNumber"); code_length = LinphonePreferences.instance().getCodeLength(); - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc(), LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); accountCreator.setUsername(username); accountCreator.setPhoneNumber(phone, dialcode); @@ -121,7 +121,7 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin private void linkAccount(){ accountCreator.setUsername(LinphonePreferences.instance().getAccountUsername(accountNumber)); accountCreator.setHa1(LinphonePreferences.instance().getAccountHa1(accountNumber)); - accountCreator.activatePhoneNumberLink(); + accountCreator.activateAlias(); } private void activateAccount() { @@ -132,19 +132,19 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountExist(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onCreateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountActivated)) { + if (status.equals(AccountCreator.Status.AccountActivated)) { checkAccount.setEnabled(true); if (accountCreator.getUsername() != null) { AssistantActivity.instance().linphoneLogIn(accountCreator); @@ -161,7 +161,7 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin AssistantActivity.instance().success(); } } - } else if (status.equals(LinphoneAccountCreator.RequestStatus.Failed)) { + } else if (status.equals(AccountCreator.Status.RequestFailed)) { Toast.makeText(getActivity(), getString(R.string.wizard_server_unavailable), Toast.LENGTH_LONG).show(); } else { Toast.makeText(getActivity(), getString(R.string.assistant_error_confirmation_code), Toast.LENGTH_LONG).show(); @@ -170,17 +170,17 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin } @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onLinkAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAlias(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if(status.equals(LinphoneAccountCreator.RequestStatus.AccountActivated)){ - LinphonePreferences.instance().setPrefix(accountNumber, accountCreator.getPrefix(accountCreator.getPhoneNumber())); + if(status.equals(AccountCreator.Status.AccountActivated)){ + LinphonePreferences.instance().setPrefix(accountNumber, org.linphone.core.Utils.getPrefixFromE164(accountCreator.getPhoneNumber())); LinphonePreferences.instance().setLinkPopupTime(""); AssistantActivity.instance().hideKeyboard(); AssistantActivity.instance().success(); @@ -188,26 +188,26 @@ public class CreateAccountCodeActivationFragment extends Fragment implements Lin } @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountActivated(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onRecoverAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountLinked(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAliasUsed(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } } diff --git a/src/android/org/linphone/assistant/CreateAccountFragment.java b/src/android/org/linphone/assistant/CreateAccountFragment.java index f44022025..2c7dd3a05 100644 --- a/src/android/org/linphone/assistant/CreateAccountFragment.java +++ b/src/android/org/linphone/assistant/CreateAccountFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* CreateAccountFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -28,11 +28,11 @@ import org.linphone.LinphonePreferences; import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.core.DialPlan; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneAccountCreator.LinphoneAccountCreatorListener; -import org.linphone.core.LinphoneAccountCreator.RequestStatus; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.AccountCreator; +import org.linphone.core.AccountCreatorListener; +import org.linphone.core.AccountCreator.Status; +import org.linphone.core.Factory; +import org.linphone.core.ProxyConfig; import android.accounts.Account; import android.accounts.AccountManager; @@ -58,11 +58,8 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ public class CreateAccountFragment extends Fragment implements CompoundButton.OnCheckedChangeListener - , OnClickListener, LinphoneAccountCreatorListener { + , OnClickListener, AccountCreatorListener { private EditText phoneNumberEdit, usernameEdit, passwordEdit, passwordConfirmEdit , emailEdit, dialCode; private TextView phoneNumberError, passwordError, passwordConfirmError @@ -79,15 +76,14 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On private int countryCode; private LinearLayout phoneNumberLayout, usernameLayout, emailLayout, passwordLayout, passwordConfirmLayout; private final Pattern UPPER_CASE_REGEX = Pattern.compile("[A-Z]"); - private LinphoneAccountCreator accountCreator; + private AccountCreator accountCreator; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_account_creation, container, false); //Initialize accountCreator - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc() - , LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); instruction = (TextView) view.findViewById(R.id.message_create_account); @@ -134,8 +130,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On (TelephonyManager) getActivity().getApplicationContext().getSystemService( Context.TELEPHONY_SERVICE); String countryIso = tm.getNetworkCountryIso(); - LinphoneProxyConfig proxyConfig = LinphoneManager.getLc().createProxyConfig(); - countryCode = proxyConfig.lookupCCCFromIso(countryIso.toUpperCase()); + ProxyConfig proxyConfig = LinphoneManager.getLc().createProxyConfig(); + countryCode = org.linphone.core.Utils.getCccFromIso(countryIso.toUpperCase()); phoneNumberLayout.setVisibility(View.VISIBLE); @@ -148,14 +144,14 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } DialPlan c = AssistantActivity.instance().country; if (c != null) { - selectCountry.setText(c.getCountryName()); + selectCountry.setText(c.getCountry()); dialCode.setText(c.getCountryCallingCode().contains("+") ? c.getCountryCallingCode() : "+" + c.getCountryCallingCode()); } else { c = AssistantActivity.instance().getCountryListAdapter() .getCountryFromCountryCode(String.valueOf(countryCode)); if (c != null) { - selectCountry.setText(c.getCountryName()); + selectCountry.setText(c.getCountry()); dialCode.setText(c.getCountryCallingCode().contains("+") ? c.getCountryCallingCode() : "+" + c.getCountryCallingCode()); } @@ -328,9 +324,9 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } else { if (useEmail.isChecked()) accountCreator.setPhoneNumber(null, null); if (!getResources().getBoolean(R.bool.isTablet) || getUsername().length() > 0) { - accountCreator.isAccountUsed(); + accountCreator.isAccountExist(); } else { - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForUsernameStatus(LinphoneAccountCreator.UsernameCheck.TooShort) + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForUsernameStatus(AccountCreator.UsernameStatus.TooShort) , AssistantActivity.instance()); createAccount.setEnabled(true); } @@ -353,9 +349,9 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On ); int status = accountCreator.setPhoneNumber( phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); - boolean isOk = status == LinphoneAccountCreator.PhoneNumberCheck.Ok.value(); + boolean isOk = status == AccountCreator.PhoneNumberStatus.Ok.toInt(); if (isOk) { - accountCreator.linkPhoneNumberWithAccount(); + accountCreator.linkAccount(); } else { createAccount.setEnabled(true); LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForPhoneNumberStatus(status), AssistantActivity.instance()); @@ -366,8 +362,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On private void createAccount() { if ((getResources().getBoolean(R.bool.isTablet) || !getResources().getBoolean(R.bool.use_phone_number_validation)) && useEmail.isChecked()) { - LinphoneAccountCreator.EmailCheck emailStatus; - LinphoneAccountCreator.PasswordCheck passwordStatus; + AccountCreator.EmailStatus emailStatus; + AccountCreator.PasswordStatus passwordStatus; passwordStatus = accountCreator.setPassword(passwordEdit.getText().toString()); emailStatus = accountCreator.setEmail(emailEdit.getText().toString()); @@ -398,7 +394,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On boolean isOk; phoneStatus = accountCreator.setPhoneNumber( phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode)); - isOk = phoneStatus == LinphoneAccountCreator.PhoneNumberCheck.Ok.value(); + isOk = phoneStatus == AccountCreator.PhoneNumberStatus.Ok.toInt(); if (!useUsername.isChecked() && accountCreator.getUsername() == null) { accountCreator.setUsername(accountCreator.getPhoneNumber()); } else { @@ -435,7 +431,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On if (!useEmail.isChecked() && getResources().getBoolean(R.bool.use_phone_number_validation)) { int status = getPhoneNumberStatus(); - boolean isOk = (status == LinphoneAccountCreator.PhoneNumberCheck.Ok.value()); + boolean isOk = (status == AccountCreator.PhoneNumberStatus.Ok.toInt()); LinphoneUtils.displayError(isOk, phoneNumberError, LinphoneUtils.errorForPhoneNumberStatus(status)); // Username or phone number @@ -444,7 +440,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } if (!isOk) { - if (status == LinphoneAccountCreator.PhoneNumberCheck.CountryCodeInvalid.value()) { + if (status == AccountCreator.PhoneNumberStatus.InvalidCountryCode.toInt()) { dialCode.setBackgroundResource(R.drawable.resizable_textfield_error); phoneNumberEdit.setBackgroundResource(R.drawable.resizable_textfield); } else { @@ -478,7 +474,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On .getCountryFromCountryCode(dialCode.getText().toString()); if (c != null) { AssistantActivity.instance().country = c; - selectCountry.setText(c.getCountryName()); + selectCountry.setText(c.getCountry()); } else { selectCountry.setText(R.string.select_your_country); } @@ -516,8 +512,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On field.addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { emailOk = false; - LinphoneAccountCreator.EmailCheck status = accountCreator.setEmail(field.getText().toString()); - if (status.equals(LinphoneAccountCreator.EmailCheck.Ok)) { + AccountCreator.EmailStatus status = accountCreator.setEmail(field.getText().toString()); + if (status.equals(AccountCreator.EmailStatus.Ok)) { emailOk = true; LinphoneUtils.displayError(emailOk, emailError, ""); } @@ -539,7 +535,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On TextWatcher passwordListener = new TextWatcher() { public void afterTextChanged(Editable s) { passwordOk = false; - LinphoneAccountCreator.PasswordCheck status = accountCreator.setPassword(field1.getText().toString()); + AccountCreator.PasswordStatus status = accountCreator.setPassword(field1.getText().toString()); if (isPasswordCorrect(field1.getText().toString())) { passwordOk = true; LinphoneUtils.displayError(passwordOk, passwordError, ""); @@ -587,14 +583,14 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, final RequestStatus status) { - if (status.equals(RequestStatus.AccountExist) || status.equals(RequestStatus.AccountExistWithAlias)) { + public void onIsAccountExist(AccountCreator accountCreator, final Status status, String resp) { + if (status.equals(Status.AccountExist) || status.equals(Status.AccountExistWithAlias)) { if (useEmail.isChecked()) { createAccount.setEnabled(true); - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status) + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status) , AssistantActivity.instance()); } else { - accountCreator.isPhoneNumberUsed(); + accountCreator.isAliasUsed(); } } else { createAccount(); @@ -602,8 +598,8 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, RequestStatus status) { - if (status.equals(RequestStatus.AccountCreated)) { + public void onCreateAccount(AccountCreator accountCreator, Status status, String resp) { + if (status.equals(Status.AccountCreated)) { if (useEmail.isChecked() || !getResources().getBoolean(R.bool.use_phone_number_validation)) { AssistantActivity.instance().displayAssistantConfirm(getUsername() , passwordEdit.getText().toString(), emailEdit.getText().toString()); @@ -614,21 +610,21 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } } else { createAccount.setEnabled(true); - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status) + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status) , AssistantActivity.instance()); } } @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onActivateAccount(AccountCreator accountCreator, Status status, String resp) { } @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onLinkAccount(AccountCreator accountCreator, Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(RequestStatus.Ok)) { + if (status.equals(Status.RequestOk)) { AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() , phoneNumberEdit.getText().toString() , LinphoneUtils.getCountryCode(dialCode), false); @@ -636,11 +632,11 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onActivateAlias(AccountCreator accountCreator, Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(RequestStatus.Ok)) { + if (status.equals(Status.RequestOk)) { AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() , phoneNumberEdit.getText().toString() , LinphoneUtils.getCountryCode(dialCode), false); @@ -648,30 +644,30 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onIsAccountActivated(AccountCreator accountCreator, Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(RequestStatus.AccountNotActivated)) { + if (status.equals(Status.AccountNotActivated)) { if (getResources().getBoolean(R.bool.isTablet) || !getResources().getBoolean(R.bool.use_phone_number_validation)) { //accountCreator.activateAccount(); // Resend email TODO } else { - accountCreator.recoverPhoneAccount(); // Resend SMS + accountCreator.recoverAccount(); // Resend SMS } } else { createAccount.setEnabled(true); - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status) + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status) , AssistantActivity.instance()); } } @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onRecoverAccount(AccountCreator accountCreator, Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(RequestStatus.Ok)) { + if (status.equals(Status.RequestOk)) { AssistantActivity.instance().displayAssistantCodeConfirm(getUsername() , phoneNumberEdit.getText().toString(), dialCode.getText().toString(), false); } else { @@ -683,21 +679,21 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onIsAccountLinked(AccountCreator accountCreator, Status status, String resp) { } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator ac, RequestStatus status) { + public void onIsAliasUsed(AccountCreator ac, Status status, String resp) { if (AssistantActivity.instance() == null) { return; } - if (status.equals(RequestStatus.AliasIsAccount) || status.equals(RequestStatus.AliasExist)) { + if (status.equals(Status.AliasIsAccount) || status.equals(Status.AliasExist)) { if (accountCreator.getPhoneNumber() != null && accountCreator.getUsername() != null && accountCreator.getPhoneNumber().compareTo(accountCreator.getUsername()) == 0) { accountCreator.isAccountActivated(); } else { createAccount.setEnabled(true); - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status) + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status) , AssistantActivity.instance()); } } else { @@ -706,7 +702,7 @@ public class CreateAccountFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, Status status, String resp) { } } diff --git a/src/android/org/linphone/assistant/EchoCancellerCalibrationFragment.java b/src/android/org/linphone/assistant/EchoCancellerCalibrationFragment.java index 7bcbbbb7e..aa85c34d2 100644 --- a/src/android/org/linphone/assistant/EchoCancellerCalibrationFragment.java +++ b/src/android/org/linphone/assistant/EchoCancellerCalibrationFragment.java @@ -2,7 +2,7 @@ package org.linphone.assistant; /* EchoCancellerCalibrationFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,15 +22,15 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.EcCalibratorStatus; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreListenerBase; -import org.linphone.core.LinphoneXmlRpcRequest; -import org.linphone.core.LinphoneXmlRpcRequest.LinphoneXmlRpcRequestListener; -import org.linphone.core.LinphoneXmlRpcRequestImpl; -import org.linphone.core.LinphoneXmlRpcSession; -import org.linphone.core.LinphoneXmlRpcSessionImpl; +import org.linphone.core.Core; +import org.linphone.core.Core.EcCalibratorStatus; +import org.linphone.core.CoreException; +import org.linphone.core.CoreListenerStub; +import org.linphone.core.XmlRpcRequest; +import org.linphone.core.XmlRpcRequestListener; +//import org.linphone.core.XmlRpcRequestImpl; +import org.linphone.core.XmlRpcSession; +//import org.linphone.core.XmlRpcSessionImpl; import org.linphone.mediastream.Log; import android.app.Fragment; @@ -41,25 +41,23 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -/** - * @author Ghislain MARY - */ -public class EchoCancellerCalibrationFragment extends Fragment implements LinphoneXmlRpcRequestListener { +public class EchoCancellerCalibrationFragment extends Fragment implements XmlRpcRequestListener { private Handler mHandler = new Handler(); private boolean mSendEcCalibrationResult = false; - private LinphoneCoreListenerBase mListener; - private LinphoneXmlRpcSession xmlRpcSession; - private LinphoneXmlRpcRequest xmlRpcRequest; + private CoreListenerStub mListener; + private XmlRpcSession xmlRpcSession; + private XmlRpcRequest xmlRpcRequest; private Runnable runFinished; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_ec_calibration, container, false); - - mListener = new LinphoneCoreListenerBase(){ + + mListener = new CoreListenerStub(){ @Override - public void ecCalibrationStatus(LinphoneCore lc, LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data) { + public void onEcCalibrationResult(Core lc, Core.EcCalibratorStatus status, int delay_ms) { + lc.removeListener(mListener); LinphoneManager.getInstance().routeAudioToReceiver(); if (mSendEcCalibrationResult) { sendEcCalibrationResult(status, delay_ms); @@ -73,14 +71,15 @@ public class EchoCancellerCalibrationFragment extends Fragment implements Linpho AssistantActivity.instance().isEchoCalibrationFinished(); } }; - - xmlRpcSession = new LinphoneXmlRpcSessionImpl(LinphoneManager.getLcIfManagerNotDestroyedOrNull(), LinphonePreferences.instance().getXmlrpcUrl()); - xmlRpcRequest = new LinphoneXmlRpcRequestImpl("add_ec_calibration_result", LinphoneXmlRpcRequest.ArgType.None); + + xmlRpcSession = LinphoneManager.getLcIfManagerNotDestroyedOrNull().createXmlRpcSession(LinphonePreferences.instance().getXmlrpcUrl()); + xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.None, "add_ec_calibration_result"); xmlRpcRequest.setListener(this); try { - LinphoneManager.getInstance().startEcCalibration(mListener); - } catch (LinphoneCoreException e) { + LinphoneManager.getLc().addListener(mListener); + LinphoneManager.getInstance().startEcCalibration(); + } catch (CoreException e) { Log.e(e, "Unable to calibrate EC"); AssistantActivity.instance().isEchoCalibrationFinished(); } @@ -92,12 +91,12 @@ public class EchoCancellerCalibrationFragment extends Fragment implements Linpho } @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { mHandler.post(runFinished); } private void sendEcCalibrationResult(EcCalibratorStatus status, int delayMs) { - Boolean hasBuiltInEchoCanceler = LinphoneManager.getLc().hasBuiltInEchoCanceler(); + Boolean hasBuiltInEchoCanceler = LinphoneManager.getLc().hasBuiltinEchoCanceller(); Log.i("Add echo canceller calibration result: manufacturer=" + Build.MANUFACTURER + " model=" + Build.MODEL + " status=" + status + " delay=" + delayMs + "ms" + " hasBuiltInEchoCanceler " + hasBuiltInEchoCanceler); xmlRpcRequest.addStringArg(Build.MANUFACTURER); xmlRpcRequest.addStringArg(Build.MODEL); diff --git a/src/android/org/linphone/assistant/LinphoneLoginFragment.java b/src/android/org/linphone/assistant/LinphoneLoginFragment.java index 783e16cb3..0b0222993 100644 --- a/src/android/org/linphone/assistant/LinphoneLoginFragment.java +++ b/src/android/org/linphone/assistant/LinphoneLoginFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* LinphoneLoginFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,10 +24,11 @@ import org.linphone.LinphonePreferences; import org.linphone.LinphoneUtils; import org.linphone.R; import org.linphone.compatibility.Compatibility; +import org.linphone.core.AccountCreatorListener; import org.linphone.core.DialPlan; -import org.linphone.core.LinphoneAccountCreator; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.AccountCreator; +import org.linphone.core.Factory; +import org.linphone.core.ProxyConfig; import android.app.AlertDialog; import android.app.Fragment; @@ -50,17 +51,14 @@ import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ -public class LinphoneLoginFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, OnClickListener, TextWatcher, LinphoneAccountCreator.LinphoneAccountCreatorListener { +public class LinphoneLoginFragment extends Fragment implements CompoundButton.OnCheckedChangeListener, OnClickListener, TextWatcher, AccountCreatorListener { private EditText login, password, phoneNumberEdit, dialCode; private Button apply, selectCountry; private CheckBox useUsername; private LinearLayout phoneNumberLayout, usernameLayout, passwordLayout; private TextView forgotPassword, messagePhoneNumber, phoneNumberError; private Boolean recoverAccount; - private LinphoneAccountCreator accountCreator; + private AccountCreator accountCreator; private int countryCode; private String phone, dialcode, username, pwd; private ImageView phoneNumberInfo; @@ -70,7 +68,7 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_linphone_login, container, false); - accountCreator = LinphoneCoreFactory.instance().createAccountCreator(LinphoneManager.getLc(), LinphonePreferences.instance().getXmlrpcUrl()); + accountCreator = LinphoneManager.getLc().createAccountCreator(LinphonePreferences.instance().getXmlrpcUrl()); accountCreator.setListener(this); String url = "http://linphone.org/free-sip-service.html&action=recover"; @@ -113,20 +111,20 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On (TelephonyManager) getActivity().getApplicationContext().getSystemService( Context.TELEPHONY_SERVICE); String countryIso = tm.getNetworkCountryIso(); - LinphoneProxyConfig proxyConfig = LinphoneManager.getLc().createProxyConfig(); - countryCode = proxyConfig.lookupCCCFromIso(countryIso.toUpperCase()); + ProxyConfig proxyConfig = LinphoneManager.getLc().createProxyConfig(); + countryCode = org.linphone.core.Utils.getCccFromIso(countryIso.toUpperCase()); DialPlan c = AssistantActivity.instance().country; if (c != null) { - selectCountry.setText(c.getCountryName()); + selectCountry.setText(c.getCountry()); dialCode.setText(c.getCountryCallingCode().contains("+") ? c.getCountryCallingCode() : "+" + c.getCountryCallingCode()); } else { c = AssistantActivity.instance().getCountryListAdapter() .getCountryFromCountryCode(String.valueOf(countryCode)); if (c != null) { - selectCountry.setText(c.getCountryName()); + selectCountry.setText(c.getCountry()); dialCode.setText(c.getCountryCallingCode().contains("+") ? c.getCountryCallingCode() : "+" + c.getCountryCallingCode()); } @@ -198,7 +196,7 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On } accountCreator.setUsername(login.getText().toString()); accountCreator.setPassword(password.getText().toString()); - accountCreator.isAccountUsed(); + accountCreator.isAccountExist(); } private int getPhoneNumberStatus() { @@ -212,7 +210,7 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On DialPlan c = AssistantActivity.instance().getCountryListAdapter().getCountryFromCountryCode(dialCode.getText().toString()); if (c != null) { AssistantActivity.instance().country = c; - selectCountry.setText(c.getCountryName()); + selectCountry.setText(c.getCountry()); } else { selectCountry.setText(R.string.select_your_country); } @@ -263,10 +261,10 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On private void recoverAccount() { if (phoneNumberEdit.length() > 0 || dialCode.length() > 1) { int status = getPhoneNumberStatus(); - boolean isOk = status == LinphoneAccountCreator.PhoneNumberCheck.Ok.value(); + boolean isOk = status == AccountCreator.PhoneNumberStatus.Ok.toInt(); if (isOk) { - LinphoneManager.getLc().getConfig().loadXmlFile(LinphoneManager.getInstance().getmDynamicConfigFile()); - accountCreator.isPhoneNumberUsed(); + LinphoneManager.getLc().getConfig().loadFromXmlFile(LinphoneManager.getInstance().getmDynamicConfigFile()); + accountCreator.isAliasUsed(); } else { apply.setEnabled(true); LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForPhoneNumberStatus(status), @@ -285,10 +283,10 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On public void onTextChanged2() { int status = getPhoneNumberStatus(); - boolean isOk = status == LinphoneAccountCreator.PhoneNumberCheck.Ok.value(); + boolean isOk = status == AccountCreator.PhoneNumberStatus.Ok.toInt(); LinphoneUtils.displayError(isOk, phoneNumberError, LinphoneUtils.errorForPhoneNumberStatus(status)); if (!isOk) { - if ((1 == (status & LinphoneAccountCreator.PhoneNumberCheck.CountryCodeInvalid.value()))) { + if ((1 == (status & AccountCreator.PhoneNumberStatus.InvalidCountryCode.toInt()))) { dialCode.setBackgroundResource(R.drawable.resizable_textfield_error); phoneNumberEdit.setBackgroundResource(R.drawable.resizable_textfield); } else { @@ -332,47 +330,47 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorIsAccountUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountExist(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (AssistantActivity.instance() == null) { apply.setEnabled(true); return; } - if (status.equals(LinphoneAccountCreator.RequestStatus.AccountExist) || status.equals(LinphoneAccountCreator.RequestStatus.AccountExistWithAlias)) { + if (status.equals(AccountCreator.Status.AccountExist) || status.equals(AccountCreator.Status.AccountExistWithAlias)) { AssistantActivity.instance().linphoneLogIn(accountCreator); } else { - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status), AssistantActivity.instance()); + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status), AssistantActivity.instance()); } apply.setEnabled(true); } @Override - public void onAccountCreatorAccountCreated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onCreateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorAccountLinkedWithPhoneNumber(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onLinkAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneNumberLinkActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onActivateAlias(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsAccountActivated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountActivated(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorPhoneAccountRecovered(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onRecoverAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (AssistantActivity.instance() == null) { apply.setEnabled(true); return; } - if (status.equals(LinphoneAccountCreator.RequestStatus.ErrorServer)) { - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(LinphoneAccountCreator.RequestStatus.Failed), AssistantActivity.instance()); + if (status.equals(AccountCreator.Status.ServerError)) { + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(AccountCreator.Status.RequestFailed), AssistantActivity.instance()); apply.setEnabled(true); } else { AssistantActivity.instance().displayAssistantCodeConfirm(accountCreator.getUsername(), phoneNumberEdit.getText().toString(), LinphoneUtils.getCountryCode(dialCode), true); @@ -380,25 +378,25 @@ public class LinphoneLoginFragment extends Fragment implements CompoundButton.On } @Override - public void onAccountCreatorIsAccountLinked(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAccountLinked(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } @Override - public void onAccountCreatorIsPhoneNumberUsed(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onIsAliasUsed(AccountCreator accountCreator, AccountCreator.Status status, String resp) { if (AssistantActivity.instance() == null) { apply.setEnabled(true); return; } - if (status.equals(LinphoneAccountCreator.RequestStatus.AliasIsAccount) || status.equals(LinphoneAccountCreator.RequestStatus.AliasExist)) { - accountCreator.recoverPhoneAccount(); + if (status.equals(AccountCreator.Status.AliasIsAccount) || status.equals(AccountCreator.Status.AliasExist)) { + accountCreator.recoverAccount(); } else { apply.setEnabled(true); - LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForRequestStatus(status), AssistantActivity.instance()); + LinphoneUtils.displayErrorAlert(LinphoneUtils.errorForStatus(status), AssistantActivity.instance()); } } @Override - public void onAccountCreatorPasswordUpdated(LinphoneAccountCreator accountCreator, LinphoneAccountCreator.RequestStatus status) { + public void onUpdateAccount(AccountCreator accountCreator, AccountCreator.Status status, String resp) { } } diff --git a/src/android/org/linphone/assistant/LoginFragment.java b/src/android/org/linphone/assistant/LoginFragment.java index f60e68b2b..a85e6c550 100644 --- a/src/android/org/linphone/assistant/LoginFragment.java +++ b/src/android/org/linphone/assistant/LoginFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* LoginFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -18,7 +18,7 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import org.linphone.R; -import org.linphone.core.LinphoneAddress.TransportType; +import org.linphone.core.Address.TransportType; import android.app.Fragment; import android.os.Bundle; @@ -32,9 +32,7 @@ import android.widget.Button; import android.widget.EditText; import android.widget.RadioGroup; import android.widget.Toast; -/** - * @author Sylvain Berfini - */ + public class LoginFragment extends Fragment implements OnClickListener, TextWatcher { private EditText login, userid, password, domain; private RadioGroup transports; @@ -73,12 +71,12 @@ public class LoginFragment extends Fragment implements OnClickListener, TextWatc TransportType transport; if(transports.getCheckedRadioButtonId() == R.id.transport_udp){ - transport = TransportType.LinphoneTransportUdp; + transport = TransportType.Udp; } else { if(transports.getCheckedRadioButtonId() == R.id.transport_tcp){ - transport = TransportType.LinphoneTransportTcp; + transport = TransportType.Tcp; } else { - transport = TransportType.LinphoneTransportTls; + transport = TransportType.Tls; } } diff --git a/src/android/org/linphone/assistant/RemoteProvisioningActivity.java b/src/android/org/linphone/assistant/RemoteProvisioningActivity.java index ac7b341dc..9421c52b3 100644 --- a/src/android/org/linphone/assistant/RemoteProvisioningActivity.java +++ b/src/android/org/linphone/assistant/RemoteProvisioningActivity.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* RemoteProvisioningActivity.java -Copyright (C) 2014 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -27,9 +27,9 @@ import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.LinphoneService; import org.linphone.R; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.RemoteProvisioningState; -import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.Core; +import org.linphone.core.Core.ConfiguringState; +import org.linphone.core.CoreListenerStub; import org.linphone.mediastream.Log; import android.app.Activity; @@ -43,28 +43,25 @@ import android.view.View; import android.widget.ProgressBar; import android.widget.Toast; -/** - * @author Sylvain Berfini - */ public class RemoteProvisioningActivity extends Activity { private Handler mHandler = new Handler(); private String configUriParam = null; private ProgressBar spinner; - private LinphoneCoreListenerBase mListener; - + private CoreListenerStub mListener; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.remote_provisioning); spinner = (ProgressBar) findViewById(R.id.spinner); - - mListener = new LinphoneCoreListenerBase(){ + + mListener = new CoreListenerStub(){ @Override - public void configuringStatus(LinphoneCore lc, final RemoteProvisioningState state, String message) { + public void onConfiguringStatus(Core lc, final ConfiguringState state, String message) { if (spinner != null) spinner.setVisibility(View.GONE); - if (state == RemoteProvisioningState.ConfiguringSuccessful) { + if (state == ConfiguringState.Successful) { goToLinphoneActivity(); - } else if (state == RemoteProvisioningState.ConfiguringFailed) { + } else if (state == ConfiguringState.Failed) { Toast.makeText(RemoteProvisioningActivity.this, R.string.remote_provisioning_failure, Toast.LENGTH_LONG).show(); } } @@ -74,7 +71,7 @@ public class RemoteProvisioningActivity extends Activity { @Override protected void onResume() { super.onResume(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } @@ -85,7 +82,7 @@ public class RemoteProvisioningActivity extends Activity { @Override protected void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -185,7 +182,7 @@ public class RemoteProvisioningActivity extends Activity { mHandler.postDelayed(new Runnable() { @Override public void run() { - LinphoneManager.getInstance().restartLinphoneCore(); + LinphoneManager.getInstance().restartCore(); } }, 1000); } diff --git a/src/android/org/linphone/assistant/RemoteProvisioningFragment.java b/src/android/org/linphone/assistant/RemoteProvisioningFragment.java index c85244982..c02587003 100644 --- a/src/android/org/linphone/assistant/RemoteProvisioningFragment.java +++ b/src/android/org/linphone/assistant/RemoteProvisioningFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* RemoteProvisioningFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -37,31 +37,31 @@ import android.widget.EditText; public class RemoteProvisioningFragment extends Fragment implements OnClickListener, TextWatcher{ private EditText remoteProvisioningUrl; private Button apply; - + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.assistant_remote_provisioning, container, false); - + remoteProvisioningUrl = (EditText) view.findViewById(R.id.assistant_remote_provisioning_url); remoteProvisioningUrl.addTextChangedListener(this); apply = (Button) view.findViewById(R.id.assistant_apply); apply.setEnabled(false); apply.setOnClickListener(this); - + return view; } - + @Override public void onClick(View v) { int id = v.getId(); - + if (id == R.id.assistant_apply) { String url = remoteProvisioningUrl.getText().toString(); AssistantActivity.instance().displayRemoteProvisioningInProgressDialog(); LinphonePreferences.instance().setRemoteProvisioningUrl(url); - LinphoneManager.getInstance().restartLinphoneCore(); - AssistantActivity.instance().setLinphoneCoreListener(); + LinphoneManager.getInstance().restartCore(); + AssistantActivity.instance().setCoreListener(); } } diff --git a/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java b/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java index 3e442400a..11ac6981e 100644 --- a/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java +++ b/src/android/org/linphone/assistant/RemoteProvisioningLoginActivity.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* RemoteProvisioningLoginActivity.java -Copyright (C) 2014 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -21,8 +21,8 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.Core; +import org.linphone.core.CoreListenerStub; import org.linphone.xmlrpc.XmlRpcHelper; import org.linphone.xmlrpc.XmlRpcListenerBase; @@ -34,19 +34,16 @@ import android.widget.Button; import android.widget.EditText; import android.widget.Toast; -/** - * @author Sylvain Berfini - */ public class RemoteProvisioningLoginActivity extends Activity implements OnClickListener { private EditText login, password, domain; private Button connect; - private LinphoneCoreListenerBase mListener; + private CoreListenerStub mListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.assistant_remote_provisioning_login); - + login = (EditText) findViewById(R.id.assistant_username); password = (EditText) findViewById(R.id.assistant_password); domain = (EditText) findViewById(R.id.assistant_domain); @@ -60,18 +57,18 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick domain.setEnabled(false); } - mListener = new LinphoneCoreListenerBase(){ + mListener = new CoreListenerStub(){ @Override - public void configuringStatus(LinphoneCore lc, final LinphoneCore.RemoteProvisioningState state, String message) { - if (state == LinphoneCore.RemoteProvisioningState.ConfiguringSuccessful) { + public void onConfiguringStatus(Core lc, final Core.ConfiguringState state, String message) { + if (state == Core.ConfiguringState.Successful) { //TODO - } else if (state == LinphoneCore.RemoteProvisioningState.ConfiguringFailed) { + } else if (state == Core.ConfiguringState.Failed) { Toast.makeText(RemoteProvisioningLoginActivity.this, R.string.remote_provisioning_failure, Toast.LENGTH_LONG).show(); } } }; } - + private void cancelWizard(boolean bypassCheck) { if (bypassCheck || getResources().getBoolean(R.bool.allow_cancel_remote_provisioning_login_activity)) { LinphonePreferences.instance().disableProvisioningLoginView(); @@ -79,14 +76,14 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick finish(); } } - + private boolean storeAccount(String username, String password, String domain) { XmlRpcHelper xmlRpcHelper = new XmlRpcHelper(); xmlRpcHelper.getRemoteProvisioningFilenameAsync(new XmlRpcListenerBase() { @Override public void onRemoteProvisioningFilenameSent(String result) { LinphonePreferences.instance().setRemoteProvisioningUrl(result); - LinphoneManager.getInstance().restartLinphoneCore(); + LinphoneManager.getInstance().restartCore(); } }, username.toString(), password.toString(), domain.toString()); @@ -94,18 +91,18 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick setResult(Activity.RESULT_OK); finish(); /*String identity = "sip:" + username + "@" + domain; - LinphoneProxyConfig prxCfg = lc.createProxyConfig(); + ProxyConfig prxCfg = lc.createProxyConfig(); try { - prxCfg.setIdentity(identity); + prxCfg.setIdentityAddress(identity); lc.addProxyConfig(prxCfg); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); return false; } - - LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(username, null, password, null, null, domain); + + AuthInfo authInfo = Factory.instance().createAuthInfo(username, null, password, null, null, domain); lc.addAuthInfo(authInfo); - + if (LinphonePreferences.instance().getAccountCount() == 1) lc.setDefaultProxyConfig(prxCfg); */ @@ -115,7 +112,7 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick @Override protected void onResume() { super.onResume(); - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.addListener(mListener); } @@ -123,7 +120,7 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick @Override protected void onPause() { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.removeListener(mListener); } @@ -133,7 +130,7 @@ public class RemoteProvisioningLoginActivity extends Activity implements OnClick @Override public void onClick(View v) { int id = v.getId(); - + if (id == R.id.cancel) { cancelWizard(false); } diff --git a/src/android/org/linphone/assistant/WelcomeFragment.java b/src/android/org/linphone/assistant/WelcomeFragment.java index 730e58c69..2dc7ca5cc 100644 --- a/src/android/org/linphone/assistant/WelcomeFragment.java +++ b/src/android/org/linphone/assistant/WelcomeFragment.java @@ -1,7 +1,7 @@ package org.linphone.assistant; /* WelcomeFragment.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -27,9 +27,6 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Button; -/** - * @author Sylvain Berfini - */ public class WelcomeFragment extends Fragment implements OnClickListener { private Button createAccount, logLinphoneAccount, logGenericAccount, remoteProvisioning; diff --git a/src/android/org/linphone/compatibility/ApiElevenPlus.java b/src/android/org/linphone/compatibility/ApiElevenPlus.java index a5fef0d1b..cdfcaa8d2 100644 --- a/src/android/org/linphone/compatibility/ApiElevenPlus.java +++ b/src/android/org/linphone/compatibility/ApiElevenPlus.java @@ -38,9 +38,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + @TargetApi(11) public class ApiElevenPlus { diff --git a/src/android/org/linphone/compatibility/ApiNineteenPlus.java b/src/android/org/linphone/compatibility/ApiNineteenPlus.java index ad6253c73..278224221 100644 --- a/src/android/org/linphone/compatibility/ApiNineteenPlus.java +++ b/src/android/org/linphone/compatibility/ApiNineteenPlus.java @@ -21,9 +21,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + @TargetApi(19) public class ApiNineteenPlus { public static void scheduleAlarm(AlarmManager alarmManager, int type, long triggerAtMillis, PendingIntent operation) { diff --git a/src/android/org/linphone/compatibility/ApiSixteenPlus.java b/src/android/org/linphone/compatibility/ApiSixteenPlus.java index 5305ed09e..f9d0c1184 100644 --- a/src/android/org/linphone/compatibility/ApiSixteenPlus.java +++ b/src/android/org/linphone/compatibility/ApiSixteenPlus.java @@ -27,9 +27,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + @TargetApi(16) public class ApiSixteenPlus { diff --git a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java b/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java index ad7696b43..8215d4e0d 100644 --- a/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentyOnePlus.java @@ -28,9 +28,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + @TargetApi(21) public class ApiTwentyOnePlus { diff --git a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java index 853d8bb60..53453cbdb 100644 --- a/src/android/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentySixPlus.java @@ -31,9 +31,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Erwan Croze - */ @TargetApi(26) public class ApiTwentySixPlus { diff --git a/src/android/org/linphone/compatibility/ApiTwentyThreePlus.java b/src/android/org/linphone/compatibility/ApiTwentyThreePlus.java index 9de44cae7..fb3db0484 100644 --- a/src/android/org/linphone/compatibility/ApiTwentyThreePlus.java +++ b/src/android/org/linphone/compatibility/ApiTwentyThreePlus.java @@ -21,9 +21,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ + @TargetApi(23) public class ApiTwentyThreePlus { public static void setTextAppearance(TextView textview, int style) { diff --git a/src/android/org/linphone/compatibility/Compatibility.java b/src/android/org/linphone/compatibility/Compatibility.java index 34c5209eb..171bf5444 100644 --- a/src/android/org/linphone/compatibility/Compatibility.java +++ b/src/android/org/linphone/compatibility/Compatibility.java @@ -32,9 +32,7 @@ import android.text.Spanned; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; import android.widget.TextView; -/** - * @author Sylvain Berfini - */ + public class Compatibility { public static void CreateChannel(Context context) { if (Version.sdkAboveOrEqual(Version.API26_O_80)) { diff --git a/src/android/org/linphone/compatibility/CompatibilityScaleGestureDetector.java b/src/android/org/linphone/compatibility/CompatibilityScaleGestureDetector.java index 68dc99b79..a8e315896 100644 --- a/src/android/org/linphone/compatibility/CompatibilityScaleGestureDetector.java +++ b/src/android/org/linphone/compatibility/CompatibilityScaleGestureDetector.java @@ -1,5 +1,24 @@ package org.linphone.compatibility; +/* +CompatibilityScaleGestureDetector.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import android.annotation.TargetApi; import android.content.Context; import android.view.MotionEvent; @@ -9,32 +28,32 @@ import android.view.ScaleGestureDetector; public class CompatibilityScaleGestureDetector extends ScaleGestureDetector.SimpleOnScaleGestureListener { private ScaleGestureDetector detector; private CompatibilityScaleGestureListener listener; - + public CompatibilityScaleGestureDetector(Context context) { detector = new ScaleGestureDetector(context, this); } - + public void setOnScaleListener(CompatibilityScaleGestureListener newListener) { listener = newListener; } - + public boolean onTouchEvent(MotionEvent event) { return detector.onTouchEvent(event); } - + @Override public boolean onScale(ScaleGestureDetector detector) { if (listener == null) { return false; } - + return listener.onScale(this); } - + public float getScaleFactor() { return detector.getScaleFactor(); } - + public void destroy() { listener = null; detector = null; diff --git a/src/android/org/linphone/compatibility/CompatibilityScaleGestureListener.java b/src/android/org/linphone/compatibility/CompatibilityScaleGestureListener.java index 67ffcfc57..48ec9b17b 100644 --- a/src/android/org/linphone/compatibility/CompatibilityScaleGestureListener.java +++ b/src/android/org/linphone/compatibility/CompatibilityScaleGestureListener.java @@ -1,5 +1,23 @@ package org.linphone.compatibility; +/* +CompatibilityScaleGestureListener.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ public interface CompatibilityScaleGestureListener { public boolean onScale(CompatibilityScaleGestureDetector detector); diff --git a/src/android/org/linphone/firebase/FirebaseIdService.java b/src/android/org/linphone/firebase/FirebaseIdService.java index d75b9f399..0c1b01976 100644 --- a/src/android/org/linphone/firebase/FirebaseIdService.java +++ b/src/android/org/linphone/firebase/FirebaseIdService.java @@ -25,9 +25,7 @@ import com.google.firebase.iid.FirebaseInstanceIdService; import org.linphone.LinphonePreferences; import org.linphone.UIThreadDispatcher; -/** - * @author Erwan Croze - */ + public class FirebaseIdService extends FirebaseInstanceIdService { @Override public void onTokenRefresh() { diff --git a/src/android/org/linphone/firebase/FirebaseMessaging.java b/src/android/org/linphone/firebase/FirebaseMessaging.java index 472e1e1ad..c3141f4cc 100644 --- a/src/android/org/linphone/firebase/FirebaseMessaging.java +++ b/src/android/org/linphone/firebase/FirebaseMessaging.java @@ -1,3 +1,5 @@ +package org.linphone.firebase; + /* FirebaseMessaging.java Copyright (C) 2017 Belledonne Communications, Grenoble, France @@ -17,8 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.firebase; - import android.content.Intent; import com.google.firebase.messaging.FirebaseMessagingService; @@ -29,9 +29,7 @@ import org.linphone.LinphoneService; import org.linphone.UIThreadDispatcher; import static android.content.Intent.ACTION_MAIN; -/** - * @author Erwan Croze - */ + public class FirebaseMessaging extends FirebaseMessagingService { public FirebaseMessaging() { } diff --git a/src/android/org/linphone/gcm/GCMReceiver.java b/src/android/org/linphone/gcm/GCMReceiver.java index a1dbf0271..75b38602b 100644 --- a/src/android/org/linphone/gcm/GCMReceiver.java +++ b/src/android/org/linphone/gcm/GCMReceiver.java @@ -1,7 +1,7 @@ package org.linphone.gcm; /* GCMReceiver.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -22,9 +22,7 @@ import android.content.Context; import com.google.android.gcm.GCMBroadcastReceiver; -/** - * @author Sylvain Berfini - */ + public class GCMReceiver extends GCMBroadcastReceiver { @Override protected String getGCMIntentServiceClassName(Context context) { diff --git a/src/android/org/linphone/gcm/GCMService.java b/src/android/org/linphone/gcm/GCMService.java index c21f082fb..9862f7caa 100644 --- a/src/android/org/linphone/gcm/GCMService.java +++ b/src/android/org/linphone/gcm/GCMService.java @@ -1,7 +1,7 @@ package org.linphone.gcm; /* GCMService.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -25,7 +25,7 @@ import org.linphone.LinphonePreferences; import org.linphone.LinphoneService; import org.linphone.R; import org.linphone.UIThreadDispatcher; -import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.Factory; import org.linphone.mediastream.Log; import android.content.Context; @@ -33,9 +33,6 @@ import android.content.Intent; import com.google.android.gcm.GCMBaseIntentService; -/** - * @author Sylvain Berfini - */ // Warning ! Do not rename the service ! public class GCMService extends GCMBaseIntentService { @@ -46,8 +43,8 @@ public class GCMService extends GCMBaseIntentService { private void initLogger(Context context) { LinphonePreferences.instance().setContext(context); boolean isDebugEnabled = LinphonePreferences.instance().isDebugEnabled(); - LinphoneCoreFactory.instance().enableLogCollection(isDebugEnabled); - LinphoneCoreFactory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name)); + Factory.instance().enableLogCollection(isDebugEnabled); + Factory.instance().setDebugMode(isDebugEnabled, context.getString(R.string.app_name)); } @Override @@ -62,7 +59,7 @@ public class GCMService extends GCMBaseIntentService { Log.d("[Push Notification] Received"); if (!LinphoneService.isReady()) { - startService(new Intent(ACTION_MAIN).setClass(this, LinphoneService.class)); + context.startService(new Intent(ACTION_MAIN).setClass(context, LinphoneService.class)); } else if (LinphoneManager.isInstanciated() && LinphoneManager.getLc().getCallsNb() == 0) { UIThreadDispatcher.dispatch(new Runnable(){ @Override diff --git a/src/android/org/linphone/purchase/InAppPurchaseActivity.java b/src/android/org/linphone/purchase/InAppPurchaseActivity.java index 44e7af4ff..5061c3de8 100644 --- a/src/android/org/linphone/purchase/InAppPurchaseActivity.java +++ b/src/android/org/linphone/purchase/InAppPurchaseActivity.java @@ -1,7 +1,7 @@ package org.linphone.purchase; /* InAppPurchaseListener.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -39,9 +39,6 @@ import android.widget.ImageView; import android.widget.ProgressBar; import android.widget.Toast; -/** - * @author Sylvain Berfini - */ public class InAppPurchaseActivity extends Activity implements InAppPurchaseListener, OnClickListener { private static InAppPurchaseActivity instance; private InAppPurchaseHelper inAppPurchaseHelper; @@ -128,12 +125,12 @@ public class InAppPurchaseActivity extends Activity implements InAppPurchaseList public static InAppPurchaseActivity instance() { return instance; } - + @Override public void onServiceAvailableForQueries() { //email.setText(inAppPurchaseHelper.getGmailAccount()); //email.setEnabled(false); - + //inAppPurchaseHelper.getPurchasedItemsAsync(); inAppPurchaseHelper.getAvailableItemsForPurchaseAsync(); } @@ -189,7 +186,7 @@ public class InAppPurchaseActivity extends Activity implements InAppPurchaseList onBackPressed(); } } - + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { inAppPurchaseHelper.parseAndVerifyPurchaseItemResultAsync(requestCode, resultCode, data); @@ -206,7 +203,7 @@ public class InAppPurchaseActivity extends Activity implements InAppPurchaseList @Override public void run() { inProgress.setVisibility(View.GONE); - Toast.makeText(InAppPurchaseActivity.this, error, Toast.LENGTH_LONG).show(); + Toast.makeText(InAppPurchaseActivity.this, error, Toast.LENGTH_LONG).show(); } }); } diff --git a/src/android/org/linphone/purchase/InAppPurchaseFragment.java b/src/android/org/linphone/purchase/InAppPurchaseFragment.java index 685ddeecd..9dd40ce54 100644 --- a/src/android/org/linphone/purchase/InAppPurchaseFragment.java +++ b/src/android/org/linphone/purchase/InAppPurchaseFragment.java @@ -1,7 +1,7 @@ package org.linphone.purchase; /* InAppPurchaseFragment.java -Copyright (C) 2016 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -23,7 +23,7 @@ import java.util.Locale; import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.ProxyConfig; import android.app.Fragment; import android.os.Bundle; @@ -50,7 +50,7 @@ public class InAppPurchaseFragment extends Fragment implements View.OnClickListe @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - + super.onCreate(savedInstanceState); View view = inflater.inflate(R.layout.in_app_store, container, false); @@ -116,7 +116,7 @@ public class InAppPurchaseFragment extends Fragment implements View.OnClickListe } private boolean isUsernameCorrect(String username) { - LinphoneProxyConfig lpc = LinphoneManager.getLc().createProxyConfig(); + ProxyConfig lpc = LinphoneManager.getLc().createProxyConfig(); return lpc.isPhoneNumber(username); } @@ -139,7 +139,7 @@ public class InAppPurchaseFragment extends Fragment implements View.OnClickListe private String getUsername() { String username = this.username.getText().toString(); - LinphoneProxyConfig lpc = LinphoneManager.getLc().createProxyConfig(); + ProxyConfig lpc = LinphoneManager.getLc().createProxyConfig(); username = lpc.normalizePhoneNumber(username); return username.toLowerCase(Locale.getDefault()); } diff --git a/src/android/org/linphone/purchase/InAppPurchaseHelper.java b/src/android/org/linphone/purchase/InAppPurchaseHelper.java index 62a584b06..1d7285ca7 100644 --- a/src/android/org/linphone/purchase/InAppPurchaseHelper.java +++ b/src/android/org/linphone/purchase/InAppPurchaseHelper.java @@ -1,7 +1,7 @@ package org.linphone.purchase; /* InAppPurchaseHelper.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -45,23 +45,20 @@ import android.util.Patterns; import com.android.vending.billing.IInAppBillingService; -/** - * @author Sylvain Berfini - */ public class InAppPurchaseHelper { public static final int API_VERSION = 3; public static final int ACTIVITY_RESULT_CODE_PURCHASE_ITEM = 11089; - + public static final String SKU_DETAILS_ITEM_LIST = "ITEM_ID_LIST"; public static final String SKU_DETAILS_LIST = "DETAILS_LIST"; public static final String SKU_DETAILS_PRODUCT_ID = "productId"; public static final String SKU_DETAILS_PRICE = "price"; public static final String SKU_DETAILS_TITLE = "title"; public static final String SKU_DETAILS_DESC = "description"; - + public static final String ITEM_TYPE_INAPP = "inapp"; public static final String ITEM_TYPE_SUBS = "subs"; - + public static final int RESPONSE_RESULT_OK = 0; public static final int RESULT_USER_CANCELED = 1; public static final int RESULT_SERVICE_UNAVAILABLE = 2; @@ -71,7 +68,7 @@ public class InAppPurchaseHelper { public static final int RESULT_ERROR = 6; public static final int RESULT_ITEM_ALREADY_OWNED = 7; public static final int RESULT_ITEM_NOT_OWNED = 8; - + public static final String RESPONSE_CODE = "RESPONSE_CODE"; public static final String RESPONSE_BUY_INTENT = "BUY_INTENT"; public static final String RESPONSE_INAPP_PURCHASE_DATA = "INAPP_PURCHASE_DATA"; @@ -80,7 +77,7 @@ public class InAppPurchaseHelper { public static final String RESPONSE_INAPP_PURCHASE_DATA_LIST = "INAPP_PURCHASE_DATA_LIST"; public static final String RESPONSE_INAPP_SIGNATURE_LIST = "INAPP_DATA_SIGNATURE_LIST"; public static final String RESPONSE_INAPP_CONTINUATION_TOKEN = "INAPP_CONTINUATION_TOKEN"; - + public static final String PURCHASE_DETAILS_PRODUCT_ID = "productId"; public static final String PURCHASE_DETAILS_ORDER_ID = "orderId"; public static final String PURCHASE_DETAILS_AUTO_RENEWING = "autoRenewing"; @@ -88,18 +85,18 @@ public class InAppPurchaseHelper { public static final String PURCHASE_DETAILS_PURCHASE_STATE = "purchaseState"; public static final String PURCHASE_DETAILS_PAYLOAD = "developerPayload"; public static final String PURCHASE_DETAILS_PURCHASE_TOKEN = "purchaseToken"; - + public static final String CLIENT_ERROR_SUBSCRIPTION_PURCHASE_NOT_AVAILABLE = "SUBSCRIPTION_PURCHASE_NOT_AVAILABLE"; public static final String CLIENT_ERROR_BIND_TO_BILLING_SERVICE_FAILED = "BIND_TO_BILLING_SERVICE_FAILED"; public static final String CLIENT_ERROR_BILLING_SERVICE_UNAVAILABLE = "BILLING_SERVICE_UNAVAILABLE"; - + private Context mContext; private InAppPurchaseListener mListener; private IInAppBillingService mService; private ServiceConnection mServiceConn; private Handler mHandler = new Handler(); private String mGmailAccount; - + private String responseCodeToErrorMessage(int responseCode) { switch (responseCode) { case RESULT_USER_CANCELED: @@ -121,7 +118,7 @@ public class InAppPurchaseHelper { } return "UNKNOWN_RESPONSE_CODE"; } - + public InAppPurchaseHelper(Activity context, InAppPurchaseListener listener) { mContext = context; mListener = listener; @@ -169,13 +166,13 @@ public class InAppPurchaseHelper { mListener.onError(CLIENT_ERROR_BILLING_SERVICE_UNAVAILABLE); } } - + private ArrayList getAvailableItemsForPurchase() { ArrayList products = new ArrayList(); ArrayList skuList = LinphonePreferences.instance().getInAppPurchasables(); Bundle querySkus = new Bundle(); querySkus.putStringArrayList(SKU_DETAILS_ITEM_LIST, skuList); - + Bundle skuDetails = null; try { skuDetails = mService.getSkuDetails(API_VERSION, mContext.getPackageName(), ITEM_TYPE_SUBS, querySkus); @@ -194,7 +191,7 @@ public class InAppPurchaseHelper { String price = object.getString(SKU_DETAILS_PRICE); String title = object.getString(SKU_DETAILS_TITLE); String desc = object.getString(SKU_DETAILS_DESC); - + Purchasable purchasable = new Purchasable(id).setTitle(title).setDescription(desc).setPrice(price); Log.w("Purchasable item " + purchasable.getDescription()); products.add(purchasable); @@ -207,10 +204,10 @@ public class InAppPurchaseHelper { mListener.onError(responseCodeToErrorMessage(response)); } } - + return products; } - + public void getAvailableItemsForPurchaseAsync() { new Thread(new Runnable() { public void run() { @@ -225,11 +222,11 @@ public class InAppPurchaseHelper { } }).start(); } - + public void getPurchasedItemsAsync() { new Thread(new Runnable() { public void run() { - + final ArrayList items = new ArrayList(); String continuationToken = null; do { @@ -239,19 +236,19 @@ public class InAppPurchaseHelper { } catch (RemoteException e) { Log.e(e); } - + if (purchasedItems != null) { int response = purchasedItems.getInt(RESPONSE_CODE); if (response == RESPONSE_RESULT_OK) { ArrayList purchaseDataList = purchasedItems.getStringArrayList(RESPONSE_INAPP_PURCHASE_DATA_LIST); ArrayList signatureList = purchasedItems.getStringArrayList(RESPONSE_INAPP_SIGNATURE_LIST); continuationToken = purchasedItems.getString(RESPONSE_INAPP_CONTINUATION_TOKEN); - + for (int i = 0; i < purchaseDataList.size(); ++i) { String purchaseData = purchaseDataList.get(i); String signature = signatureList.get(i); Log.d("[In-app purchase] " + purchaseData); - + Purchasable item = verifySignature(purchaseData, signature); if (item != null) { items.add(item); @@ -263,7 +260,7 @@ public class InAppPurchaseHelper { } } } while (continuationToken != null); - + if (mHandler != null && mListener != null) { mHandler.post(new Runnable() { public void run() { @@ -274,7 +271,7 @@ public class InAppPurchaseHelper { } }).start(); } - + public void parseAndVerifyPurchaseItemResultAsync(int requestCode, int resultCode, Intent data) { if (requestCode == ACTIVITY_RESULT_CODE_PURCHASE_ITEM) { int responseCode = data.getIntExtra(RESPONSE_CODE, 0); @@ -286,7 +283,7 @@ public class InAppPurchaseHelper { Purchasable item = LinphonePreferences.instance().getInAppPurchasedItem(); item.setPayloadAndSignature(payload, signature); LinphonePreferences.instance().setInAppPurchasedItem(item); - + XmlRpcHelper xmlRpcHelper = new XmlRpcHelper(); xmlRpcHelper.verifySignatureAsync(new XmlRpcListenerBase() { @Override @@ -297,7 +294,7 @@ public class InAppPurchaseHelper { } } } - + private void purchaseItem(String productId, String sipIdentity) { Bundle buyIntentBundle = null; try { @@ -305,7 +302,7 @@ public class InAppPurchaseHelper { } catch (RemoteException e) { Log.e(e); } - + if (buyIntentBundle != null) { PendingIntent pendingIntent = buyIntentBundle.getParcelable(RESPONSE_BUY_INTENT); if (pendingIntent != null) { @@ -317,7 +314,7 @@ public class InAppPurchaseHelper { } } } - + public void purchaseItemAsync(final String productId, final String sipIdentity) { new Thread(new Runnable() { public void run() { @@ -325,29 +322,29 @@ public class InAppPurchaseHelper { } }).start(); } - + public void destroy() { mContext.unbindService(mServiceConn); } - + public String getGmailAccount() { Account[] accounts = AccountManager.get(mContext).getAccountsByType("com.google"); - + for (Account account: accounts) { if (isEmailCorrect(account.name)) { String possibleEmail = account.name; return possibleEmail; } } - + return null; } - + private boolean isEmailCorrect(String email) { Pattern emailPattern = Patterns.EMAIL_ADDRESS; return emailPattern.matcher(email).matches(); } - + private Purchasable verifySignature(String payload, String signature) { // TODO FIXME rework to be async /*XmlRpcHelper helper = new XmlRpcHelper(); @@ -355,7 +352,7 @@ public class InAppPurchaseHelper { try { JSONObject json = new JSONObject(payload); String productId = json.getString(PURCHASE_DETAILS_PRODUCT_ID); - Purchasable item = new Purchasable(productId); + Purchasable item = new Purchasable(productId); item.setPayloadAndSignature(payload, signature); return item; } catch (JSONException e) { @@ -364,7 +361,7 @@ public class InAppPurchaseHelper { }*/ return null; } - + interface VerifiedSignatureListener { void onParsedAndVerifiedSignatureQueryFinished(Purchasable item); } diff --git a/src/android/org/linphone/purchase/InAppPurchaseListFragment.java b/src/android/org/linphone/purchase/InAppPurchaseListFragment.java index 5d696922b..c4de79cbb 100644 --- a/src/android/org/linphone/purchase/InAppPurchaseListFragment.java +++ b/src/android/org/linphone/purchase/InAppPurchaseListFragment.java @@ -2,7 +2,7 @@ package org.linphone.purchase; /* InAppPurchaseListFragment.java -Copyright (C) 2016 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/src/android/org/linphone/purchase/InAppPurchaseListener.java b/src/android/org/linphone/purchase/InAppPurchaseListener.java index 43ea62832..6105b0639 100644 --- a/src/android/org/linphone/purchase/InAppPurchaseListener.java +++ b/src/android/org/linphone/purchase/InAppPurchaseListener.java @@ -1,7 +1,7 @@ package org.linphone.purchase; /* InAppPurchaseListener.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -20,27 +20,24 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import java.util.ArrayList; -/** - * @author Sylvain Berfini - */ public interface InAppPurchaseListener { /** * Callback called when the in-app purchase listener is connected and available for queries */ void onServiceAvailableForQueries(); - + /** * Callback called when the query for items available for purchase is done * @param items the list of items that can be purchased (also contains the ones already bought) */ void onAvailableItemsForPurchaseQueryFinished(ArrayList items); - + /** * Callback called when the query for items bought by the user is done * @param items the list of items already purchased by the user */ void onPurchasedItemsQueryFinished(ArrayList items); - + /** * Callback called when the purchase has been validated by our external server * @param success true if ok, false otherwise @@ -52,13 +49,13 @@ public interface InAppPurchaseListener { * @param success true if the recover has been successful, false otherwise */ void onRecoverAccountSuccessful(boolean success); - + /** * Callback called when the account has been activated (or not) * @param success true if the activation has been successful, false otherwise */ void onActivateAccountSuccessful(boolean success); - + /** * Callback called when an error occurred. * @param error the error that occurred diff --git a/src/android/org/linphone/purchase/InAppPurchaseListenerBase.java b/src/android/org/linphone/purchase/InAppPurchaseListenerBase.java index b99a97ddc..8917f9c4e 100644 --- a/src/android/org/linphone/purchase/InAppPurchaseListenerBase.java +++ b/src/android/org/linphone/purchase/InAppPurchaseListenerBase.java @@ -1,47 +1,66 @@ package org.linphone.purchase; +/* +InAppPurchaseListenerBase.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import java.util.ArrayList; public class InAppPurchaseListenerBase implements InAppPurchaseListener { @Override public void onServiceAvailableForQueries() { // TODO Auto-generated method stub - + } @Override public void onAvailableItemsForPurchaseQueryFinished(ArrayList items) { // TODO Auto-generated method stub - + } @Override public void onPurchasedItemsQueryFinished(ArrayList items) { // TODO Auto-generated method stub - + } @Override public void onPurchasedItemConfirmationQueryFinished(boolean success) { // TODO Auto-generated method stub - + } @Override public void onRecoverAccountSuccessful(boolean success) { // TODO Auto-generated method stub - + } @Override public void onActivateAccountSuccessful(boolean success) { // TODO Auto-generated method stub - + } @Override public void onError(String error) { // TODO Auto-generated method stub - + } } diff --git a/src/android/org/linphone/purchase/Purchasable.java b/src/android/org/linphone/purchase/Purchasable.java index 44156b520..f4eb9eaac 100644 --- a/src/android/org/linphone/purchase/Purchasable.java +++ b/src/android/org/linphone/purchase/Purchasable.java @@ -7,7 +7,7 @@ import java.util.Locale; /* Purchasable.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -24,15 +24,12 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ public class Purchasable { private String id, title, description, price; private long expire; - private String purchasePayload, purchasePayloadSignature; + private String purchasePayload, purchasePayloadSignature; private String userData; - + public Purchasable(String id) { this.id = id; } @@ -71,7 +68,7 @@ public class Purchasable { public long getExpire() { return expire; } - + public String getExpireDate() { DateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault()); Date date = new Date(expire); @@ -82,26 +79,26 @@ public class Purchasable { this.expire = expire; return this; } - + public Purchasable setPayloadAndSignature(String payload, String signature) { this.purchasePayload = payload; this.purchasePayloadSignature = signature; return this; } - + public String getPayload() { return this.purchasePayload; } - + public String getPayloadSignature() { return this.purchasePayloadSignature; } - + public Purchasable setUserData(String data) { this.userData = data; return this; } - + public String getUserData() { return this.userData; } diff --git a/src/android/org/linphone/sync/AuthenticationService.java b/src/android/org/linphone/sync/AuthenticationService.java index b999966d8..1b329f2fa 100644 --- a/src/android/org/linphone/sync/AuthenticationService.java +++ b/src/android/org/linphone/sync/AuthenticationService.java @@ -2,7 +2,7 @@ package org.linphone.sync; /* AuthenticationService.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/src/android/org/linphone/sync/Authenticator.java b/src/android/org/linphone/sync/Authenticator.java index fc0ffc4d5..5b6e705c1 100644 --- a/src/android/org/linphone/sync/Authenticator.java +++ b/src/android/org/linphone/sync/Authenticator.java @@ -2,7 +2,7 @@ package org.linphone.sync; /* Authenticator.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/src/android/org/linphone/sync/SyncAdapter.java b/src/android/org/linphone/sync/SyncAdapter.java index 291f5b448..95ae63940 100755 --- a/src/android/org/linphone/sync/SyncAdapter.java +++ b/src/android/org/linphone/sync/SyncAdapter.java @@ -2,7 +2,7 @@ package org.linphone.sync; /* SyncAdapter.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/src/android/org/linphone/sync/SyncService.java b/src/android/org/linphone/sync/SyncService.java index 6bec5b043..7caddd1d7 100755 --- a/src/android/org/linphone/sync/SyncService.java +++ b/src/android/org/linphone/sync/SyncService.java @@ -2,7 +2,7 @@ package org.linphone.sync; /* SyncService.java -Copyright (C) 2015 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/src/android/org/linphone/ui/AddressAware.java b/src/android/org/linphone/ui/AddressAware.java index fe2f792c1..b5515d8c7 100644 --- a/src/android/org/linphone/ui/AddressAware.java +++ b/src/android/org/linphone/ui/AddressAware.java @@ -1,6 +1,8 @@ +package org.linphone.ui; + /* AddressAwareWidget.java -Copyright (C) 2011 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,14 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.ui; - - -/** - * @author Guillaume Beraudo - * - */ public interface AddressAware { void setAddressWidget(AddressText address); diff --git a/src/android/org/linphone/ui/AddressText.java b/src/android/org/linphone/ui/AddressText.java index 8be3649e5..e453fc010 100644 --- a/src/android/org/linphone/ui/AddressText.java +++ b/src/android/org/linphone/ui/AddressText.java @@ -1,6 +1,8 @@ +package org.linphone.ui; + /* AddressView.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.ui; import org.linphone.DialerFragment; import org.linphone.LinphoneManager.AddressType; @@ -29,17 +30,13 @@ import android.util.AttributeSet; import android.util.TypedValue; import android.widget.EditText; -/** - * @author Guillaume Beraudo - * - */ public class AddressText extends EditText implements AddressType { private String displayedName; private Uri pictureUri; private Paint mTestPaint; private DialerFragment dialer; - + public void setPictureUri(Uri uri) { pictureUri = uri; } @@ -71,7 +68,7 @@ public class AddressText extends EditText implements AddressType { public void setDisplayedName(String displayedName) { this.displayedName = displayedName; } - + private String getHintText() { String resizedText = getContext().getString(R.string.address_bar_hint); if (getHint() != null) { @@ -87,7 +84,7 @@ public class AddressText extends EditText implements AddressType { pictureUri = null; refitText(getWidth(), getHeight()); - + if (dialer != null) { dialer.enableDisableAddContact(); } @@ -101,7 +98,7 @@ public class AddressText extends EditText implements AddressType { refitText(getWidth(), getHeight()); } } - + private float getOptimizedTextSize(String text, int textWidth, int textHeight) { int targetWidth = textWidth - getPaddingLeft() - getPaddingRight(); int targetHeight = textHeight - getPaddingTop() - getPaddingBottom(); @@ -121,7 +118,7 @@ public class AddressText extends EditText implements AddressType { lo = size; } } - + return lo; } @@ -129,7 +126,7 @@ public class AddressText extends EditText implements AddressType { if (textWidth <= 0) { return; } - + float size = getOptimizedTextSize(getHintText(), textWidth, textHeight); float entrySize = getOptimizedTextSize(getText().toString(), textWidth, textHeight); if (entrySize < size) @@ -141,7 +138,7 @@ public class AddressText extends EditText implements AddressType { super.onMeasure(widthMeasureSpec, heightMeasureSpec); int parentWidth = MeasureSpec.getSize(widthMeasureSpec); int height = getMeasuredHeight(); - + refitText(parentWidth, height); setMeasuredDimension(parentWidth, height); } diff --git a/src/android/org/linphone/ui/CallButton.java b/src/android/org/linphone/ui/CallButton.java index 493769ee9..ef2071500 100644 --- a/src/android/org/linphone/ui/CallButton.java +++ b/src/android/org/linphone/ui/CallButton.java @@ -1,6 +1,8 @@ +package org.linphone.ui; + /* CallButton.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,15 +18,15 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.ui; import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.R; -import org.linphone.core.CallDirection; -import org.linphone.core.LinphoneCallLog; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneProxyConfig; +import org.linphone.core.Call; +import org.linphone.core.Call.Dir; +import org.linphone.core.CallLog; +import org.linphone.core.CoreException; +import org.linphone.core.ProxyConfig; import android.content.Context; import android.util.AttributeSet; @@ -33,9 +35,6 @@ import android.view.View.OnClickListener; import android.widget.ImageView; import android.widget.Toast; -/** - * @author Guillaume Beraudo - */ public class CallButton extends ImageView implements OnClickListener, AddressAware { private AddressText mAddress; @@ -52,14 +51,14 @@ public class CallButton extends ImageView implements OnClickListener, AddressAwa public void onClick(View v) { try { if (!LinphoneManager.getInstance().acceptCallIfIncomingPending()) { - if (mAddress.getText().length() > 0) { + if (mAddress.getText().length() > 0) { LinphoneManager.getInstance().newOutgoingCall(mAddress); } else { if (LinphonePreferences.instance().isBisFeatureEnabled()) { - LinphoneCallLog[] logs = LinphoneManager.getLc().getCallLogs(); - LinphoneCallLog log = null; - for (LinphoneCallLog l : logs) { - if (l.getDirection() == CallDirection.Outgoing) { + CallLog[] logs = LinphoneManager.getLc().getCallLogs(); + CallLog log = null; + for (CallLog l : logs) { + if (l.getDir() == Call.Dir.Outgoing) { log = l; break; } @@ -67,24 +66,24 @@ public class CallButton extends ImageView implements OnClickListener, AddressAwa if (log == null) { return; } - - LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); - if (lpc != null && log.getTo().getDomain().equals(lpc.getDomain())) { - mAddress.setText(log.getTo().getUserName()); + + ProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig(); + if (lpc != null && log.getToAddress().getDomain().equals(lpc.getDomain())) { + mAddress.setText(log.getToAddress().getUsername()); } else { - mAddress.setText(log.getTo().asStringUriOnly()); + mAddress.setText(log.getToAddress().asStringUriOnly()); } mAddress.setSelection(mAddress.getText().toString().length()); - mAddress.setDisplayedName(log.getTo().getDisplayName()); + mAddress.setDisplayedName(log.getToAddress().getDisplayName()); } } } - } catch (LinphoneCoreException e) { + } catch (CoreException e) { LinphoneManager.getInstance().terminateCall(); onWrongDestinationAddress(); } } - + protected void onWrongDestinationAddress() { Toast.makeText(getContext() ,String.format(getResources().getString(R.string.warning_wrong_destination_address),mAddress.getText().toString()) diff --git a/src/android/org/linphone/ui/Digit.java b/src/android/org/linphone/ui/Digit.java index 15c9282a9..7733b02b2 100644 --- a/src/android/org/linphone/ui/Digit.java +++ b/src/android/org/linphone/ui/Digit.java @@ -1,6 +1,8 @@ +package org.linphone.ui; + /* Digit.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,15 +18,15 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.ui; import org.linphone.CallActivity; import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; import org.linphone.LinphoneService; import org.linphone.R; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCoreFactory; +import org.linphone.core.Core; +import org.linphone.core.Factory; +import org.linphone.core.LogCollectionState; import org.linphone.mediastream.Log; import android.app.AlertDialog; @@ -52,7 +54,7 @@ public class Digit extends Button implements AddressAware { protected void onTextChanged(CharSequence text, int start, int before, int after) { super.onTextChanged(text, start, before, after); - + if (text == null || text.length() < 1) { return; } @@ -60,21 +62,21 @@ public class Digit extends Button implements AddressAware { DialKeyListener lListener = new DialKeyListener(); setOnClickListener(lListener); setOnTouchListener(lListener); - + if ("0+".equals(text)) { setOnLongClickListener(lListener); } - + if ("1".equals(text)) { setOnLongClickListener(lListener); } } - + public Digit(Context context, AttributeSet attrs, int style) { super(context, attrs, style); setLongClickable(true); } - + public Digit(Context context, AttributeSet attrs) { super(context, attrs); setLongClickable(true); @@ -105,14 +107,14 @@ public class Digit extends Button implements AddressAware { public void onClick(View v) { if (mPlayDtmf) { if (!linphoneServiceReady()) return; - LinphoneCore lc = LinphoneManager.getLc(); + Core lc = LinphoneManager.getLc(); lc.stopDtmf(); mIsDtmfStarted =false; - if (lc.isIncall()) { - lc.sendDtmf(mKeyCode); + if (lc.inCall()) { + lc.getCurrentCall().sendDtmf(mKeyCode); } } - + if (mAddress != null) { int lBegin = mAddress.getSelectionStart(); if (lBegin == -1) { @@ -137,10 +139,10 @@ public class Digit extends Button implements AddressAware { public void onClick(DialogInterface dialog, int which) { if(which == 0){ LinphonePreferences.instance().setDebugEnabled(false); - LinphoneCoreFactory.instance().enableLogCollection(false); + Factory.instance().enableLogCollection(LogCollectionState.Disabled); } if(which == 1) { - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); if (lc != null) { lc.uploadLogCollection(); } @@ -153,7 +155,7 @@ public class Digit extends Button implements AddressAware { public void onClick(DialogInterface dialog, int which) { if(which == 0) { LinphonePreferences.instance().setDebugEnabled(true); - LinphoneCoreFactory.instance().enableLogCollection(true); + Factory.instance().enableLogCollection(LogCollectionState.Enabled); } } }); @@ -169,8 +171,8 @@ public class Digit extends Button implements AddressAware { if (CallActivity.isInstanciated()) { CallActivity.instance().resetControlsHidingCallBack(); } - - LinphoneCore lc = LinphoneManager.getLc(); + + Core lc = LinphoneManager.getLc(); if (event.getAction() == MotionEvent.ACTION_DOWN && !mIsDtmfStarted) { LinphoneManager.getInstance().playDtmf(getContext().getContentResolver(), mKeyCode); mIsDtmfStarted = true; @@ -182,17 +184,17 @@ public class Digit extends Button implements AddressAware { } return false; } - + public boolean onLongClick(View v) { int id = v.getId(); - LinphoneCore lc = LinphoneManager.getLc(); + Core lc = LinphoneManager.getLc(); if (mPlayDtmf) { if (!linphoneServiceReady()) return true; // Called if "0+" dtmf lc.stopDtmf(); } - + if(id == R.id.Digit1 && lc.getCalls().length == 0){ String voiceMail = LinphonePreferences.instance().getVoiceMailUri(); mAddress.getEditableText().clear(); @@ -202,8 +204,8 @@ public class Digit extends Button implements AddressAware { } return true; } - - + + if (mAddress == null) return true; int lBegin = mAddress.getSelectionStart(); diff --git a/src/android/org/linphone/ui/LedPreference.java b/src/android/org/linphone/ui/LedPreference.java index 7aebe57a6..df67e128d 100644 --- a/src/android/org/linphone/ui/LedPreference.java +++ b/src/android/org/linphone/ui/LedPreference.java @@ -2,7 +2,7 @@ package org.linphone.ui; /* LedPreference.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -26,13 +26,10 @@ import android.preference.Preference; import android.view.View; import android.widget.ImageView; -/** - * @author Sylvain Berfini - */ public class LedPreference extends Preference { private int ledDrawable; - + public LedPreference(Context context) { super(context); ledDrawable = R.drawable.led_disconnected; diff --git a/src/android/org/linphone/ui/LinphoneOverlay.java b/src/android/org/linphone/ui/LinphoneOverlay.java index 1a71ec66a..824bbef30 100644 --- a/src/android/org/linphone/ui/LinphoneOverlay.java +++ b/src/android/org/linphone/ui/LinphoneOverlay.java @@ -1,10 +1,29 @@ package org.linphone.ui; +/* +LinphoneOverlay.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; import org.linphone.LinphoneService; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCallParams; +import org.linphone.core.Call; +import org.linphone.core.CallParams; import org.linphone.mediastream.video.AndroidVideoWindowImpl; import android.content.Context; @@ -44,7 +63,7 @@ public class LinphoneOverlay extends org.linphone.mediastream.video.display.GL2J androidVideoWindowImpl = new AndroidVideoWindowImpl(this, null, new AndroidVideoWindowImpl.VideoWindowListener() { public void onVideoRenderingSurfaceReady(AndroidVideoWindowImpl vw, SurfaceView surface) { - LinphoneManager.getLc().setVideoWindow(vw); + LinphoneManager.getLc().setNativeVideoWindowId(vw); } public void onVideoRenderingSurfaceDestroyed(AndroidVideoWindowImpl vw) { @@ -58,11 +77,11 @@ public class LinphoneOverlay extends org.linphone.mediastream.video.display.GL2J } }); - LinphoneCall call = LinphoneManager.getLc().getCurrentCall(); - LinphoneCallParams callParams = call.getCurrentParams(); - params.width = callParams.getReceivedVideoSize().width; - params.height = callParams.getReceivedVideoSize().height; - LinphoneManager.getLc().setVideoWindow(androidVideoWindowImpl); + Call call = LinphoneManager.getLc().getCurrentCall(); + CallParams callParams = call.getCurrentParams(); + params.width = callParams.getReceivedVideoDefinition().getWidth(); + params.height = callParams.getReceivedVideoDefinition().getHeight(); + LinphoneManager.getLc().setNativeVideoWindowId(androidVideoWindowImpl); setOnClickListener(new OnClickListener() { @Override diff --git a/src/android/org/linphone/ui/LinphoneScrollView.java b/src/android/org/linphone/ui/LinphoneScrollView.java index 997c8abf0..0ff59fe9a 100644 --- a/src/android/org/linphone/ui/LinphoneScrollView.java +++ b/src/android/org/linphone/ui/LinphoneScrollView.java @@ -1,7 +1,7 @@ package org.linphone.ui; /* LinphoneScrollView.java -Copyright (C) 2013 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -21,9 +21,6 @@ import android.content.Context; import android.util.AttributeSet; import android.widget.ScrollView; -/** - * @author Sylvain Berfini - */ public class LinphoneScrollView extends ScrollView { private ScrollViewListener scrollViewListener = null; diff --git a/src/android/org/linphone/ui/LinphoneSliders.java b/src/android/org/linphone/ui/LinphoneSliders.java index 4f6062b9b..656fde902 100644 --- a/src/android/org/linphone/ui/LinphoneSliders.java +++ b/src/android/org/linphone/ui/LinphoneSliders.java @@ -11,7 +11,7 @@ import android.view.View; /* LinphoneSliders.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -28,9 +28,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ public class LinphoneSliders extends View implements OnGestureListener { private Drawable leftSliderImg, rightSliderImg; private int leftSliderX, rightSliderX; @@ -39,36 +36,36 @@ public class LinphoneSliders extends View implements OnGestureListener { private LinphoneSliderTriggered mTriggerListener; private boolean slidingLeftHandle, slidingRightHandle; private static final double mCoeff = 0.5; - + public LinphoneSliders(Context context, AttributeSet attrs) { super(context, attrs); mGestures = new GestureDetector(getContext(), this); //leftSliderImg = getResources().getDrawable(R.drawable.slider_left); //rightSliderImg = getResources().getDrawable(R.drawable.slider_right); - + slidersHeight = leftSliderImg.getIntrinsicHeight(); slidersWidth = leftSliderImg.getIntrinsicWidth(); - + leftSliderX = 0; rightSliderX = 0; slidingLeftHandle = slidingRightHandle = false; } - + @Override protected void onDraw(Canvas canvas) { rightSliderImg.setBounds(getWidth() - slidersWidth - rightSliderX, getHeight() - slidersHeight, getWidth(), getHeight()); rightSliderImg.draw(canvas); - + leftSliderImg.setBounds(0, getHeight() - slidersHeight, slidersWidth + leftSliderX, getHeight()); leftSliderImg.draw(canvas); - + if (slidingLeftHandle && Math.abs(leftSliderX) >= mCoeff * getWidth()) { mTriggerListener.onLeftHandleTriggered(); } else if (slidingRightHandle && rightSliderX >= mCoeff * getWidth()) { mTriggerListener.onRightHandleTriggered(); } } - + @Override public boolean onTouchEvent(MotionEvent event) { if (event.getAction() == MotionEvent.ACTION_UP) { @@ -77,8 +74,8 @@ public class LinphoneSliders extends View implements OnGestureListener { slidingLeftHandle = slidingRightHandle = false; invalidate(); } - - return mGestures.onTouchEvent(event); + + return mGestures.onTouchEvent(event); } @Override @@ -94,7 +91,7 @@ public class LinphoneSliders extends View implements OnGestureListener { @Override public void onLongPress(MotionEvent e) { - + } @Override @@ -103,7 +100,7 @@ public class LinphoneSliders extends View implements OnGestureListener { if (e1.getY() < getHeight() - slidersHeight) { return false; } - + if (e1.getX() < getWidth() / 2) { leftSliderX -= distanceX; slidingLeftHandle = true; @@ -112,20 +109,20 @@ public class LinphoneSliders extends View implements OnGestureListener { slidingRightHandle = true; } invalidate(); - + return true; } @Override public void onShowPress(MotionEvent e) { - + } @Override public boolean onSingleTapUp(MotionEvent e) { return false; } - + public void setOnTriggerListener(LinphoneSliderTriggered listener) { mTriggerListener = listener; } diff --git a/src/android/org/linphone/ui/Numpad.java b/src/android/org/linphone/ui/Numpad.java index 9c751dd8e..0af6032a4 100644 --- a/src/android/org/linphone/ui/Numpad.java +++ b/src/android/org/linphone/ui/Numpad.java @@ -1,6 +1,8 @@ +package org.linphone.ui; + /* NumpadView.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,7 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.ui; import java.util.ArrayList; import java.util.Collection; @@ -31,10 +32,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; -/** - * @author Guillaume Beraudo - * - */ public class Numpad extends LinearLayout implements AddressAware { private boolean mPlayDtmf; diff --git a/src/android/org/linphone/ui/PreferencesListFragment.java b/src/android/org/linphone/ui/PreferencesListFragment.java index 71b828d98..6719b48e9 100644 --- a/src/android/org/linphone/ui/PreferencesListFragment.java +++ b/src/android/org/linphone/ui/PreferencesListFragment.java @@ -1,7 +1,8 @@ package org.linphone.ui; + /* PreferencesListFragment.java -Copyright (C) 2012 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -17,6 +18,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + import java.lang.reflect.Constructor; import java.lang.reflect.Method; @@ -45,13 +47,13 @@ import android.widget.RelativeLayout; @SuppressLint("ValidFragment") public class PreferencesListFragment extends ListFragment { private PreferenceManager mPreferenceManager; - + /** * The starting request code given out to preference framework. */ private static final int FIRST_REQUEST_CODE = 100; private static final int MSG_BIND_PREFERENCES = 0; - + private Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -64,33 +66,33 @@ public class PreferencesListFragment extends ListFragment { }; private ListView preferencesList; private int xmlResID; - + public PreferencesListFragment(int xmlId) { this.xmlResID = xmlId; } - + // Must be provided public PreferencesListFragment() { - + } - + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle b) { // Hack to correctly display preferences View view = inflater.inflate(R.layout.settings, null); - + ViewParent p = preferencesList.getParent(); if (p != null) { ((ViewGroup)p).removeView(preferencesList); } - + RelativeLayout layout = (RelativeLayout) view.findViewById(R.id.topLayout); layout.addView(preferencesList); - + postBindPreferences(); return view; } - + @Override public void onDestroyView(){ super.onDestroyView(); @@ -103,11 +105,11 @@ public class PreferencesListFragment extends ListFragment { @Override public void onCreate(Bundle bundle) { super.onCreate(bundle); - + if (bundle != null) { xmlResID = bundle.getInt("xml"); } - + mPreferenceManager = onCreatePreferenceManager(); preferencesList = (ListView) LayoutInflater.from(getActivity()).inflate(R.layout.preference_list_content, null); preferencesList.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY); @@ -168,17 +170,17 @@ public class PreferencesListFragment extends ListFragment { if (mHandler.hasMessages(MSG_BIND_PREFERENCES)) return; mHandler.obtainMessage(MSG_BIND_PREFERENCES).sendToTarget(); } - + private void bindPreferences() { final PreferenceScreen preferenceScreen = getPreferenceScreen(); if (preferenceScreen != null && preferencesList != null) { preferenceScreen.bind(preferencesList); } } - + /** * Creates the {@link PreferenceManager}. - * + * * @return The {@link PreferenceManager} used by this activity. */ private PreferenceManager onCreatePreferenceManager() { @@ -192,7 +194,7 @@ public class PreferencesListFragment extends ListFragment { return null; } } - + /** * Returns the {@link PreferenceManager} used by this activity. * @return The {@link PreferenceManager}. @@ -203,7 +205,7 @@ public class PreferencesListFragment extends ListFragment { /** * Sets the root of the preference hierarchy that this activity is showing. - * + * * @param preferenceScreen The root {@link PreferenceScreen} of the preference hierarchy. */ public void setPreferenceScreen(PreferenceScreen preferenceScreen) { @@ -218,10 +220,10 @@ public class PreferencesListFragment extends ListFragment { Log.e("[PreferencesListFragment] setPreferenceScreen " + e); } } - + /** * Gets the root of the preference hierarchy that this activity is showing. - * + * * @return The {@link PreferenceScreen} that is the root of the preference * hierarchy. */ @@ -233,17 +235,17 @@ public class PreferencesListFragment extends ListFragment { } catch(Exception e) { Log.e("[PreferencesListFragment] getPreferenceScreen " + e); } - + return null; } - + /** * Inflates the given XML resource and adds the preference hierarchy to the current * preference hierarchy. - * + * * @param preferencesResId The XML resource ID to inflate. */ - public void addPreferencesFromResource(int preferencesResId) { + public void addPreferencesFromResource(int preferencesResId) { try { Method m = PreferenceManager.class.getDeclaredMethod("inflateFromResource", Context.class, int.class, PreferenceScreen.class); m.setAccessible(true); @@ -253,10 +255,10 @@ public class PreferencesListFragment extends ListFragment { Log.e("[PreferencesListFragment] addPreferencesFromResource " + e); } } - + /** * Finds a {@link Preference} based on its key. - * + * * @param key The key of the preference to retrieve. * @return The {@link Preference} with the key, or null. * @see PreferenceGroup#findPreference(CharSequence) diff --git a/src/android/org/linphone/ui/ScrollViewListener.java b/src/android/org/linphone/ui/ScrollViewListener.java index 980e09771..e4f278cf0 100644 --- a/src/android/org/linphone/ui/ScrollViewListener.java +++ b/src/android/org/linphone/ui/ScrollViewListener.java @@ -1,7 +1,8 @@ package org.linphone.ui; + /* ScrollViewListener.java -Copyright (C) 2013 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -18,9 +19,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -/** - * @author Sylvain Berfini - */ public interface ScrollViewListener { void OnScrollToTop(int previousHeight); } diff --git a/src/android/org/linphone/ui/SlidingDrawer.java b/src/android/org/linphone/ui/SlidingDrawer.java index f14139343..054f47341 100644 --- a/src/android/org/linphone/ui/SlidingDrawer.java +++ b/src/android/org/linphone/ui/SlidingDrawer.java @@ -218,6 +218,7 @@ public class SlidingDrawer extends ViewGroup { @Override protected void onFinishInflate() { + super.onFinishInflate(); mHandle = findViewById(mHandleId); if (mHandle == null) { throw new IllegalArgumentException( diff --git a/src/android/org/linphone/xmlrpc/XmlRpcHelper.java b/src/android/org/linphone/xmlrpc/XmlRpcHelper.java index 30b025e56..4d89d16c1 100644 --- a/src/android/org/linphone/xmlrpc/XmlRpcHelper.java +++ b/src/android/org/linphone/xmlrpc/XmlRpcHelper.java @@ -1,12 +1,31 @@ package org.linphone.xmlrpc; +/* +XmlRpcHelper.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import org.linphone.LinphoneManager; import org.linphone.LinphonePreferences; -import org.linphone.core.LinphoneXmlRpcRequest; -import org.linphone.core.LinphoneXmlRpcRequest.LinphoneXmlRpcRequestListener; -import org.linphone.core.LinphoneXmlRpcRequestImpl; -import org.linphone.core.LinphoneXmlRpcSession; -import org.linphone.core.LinphoneXmlRpcSessionImpl; +import org.linphone.core.XmlRpcRequest; +import org.linphone.core.XmlRpcRequestListener; +//import org.linphone.core.XmlRpcRequestImpl; +import org.linphone.core.XmlRpcSession; +//import org.linphone.core.XmlRpcSessionImpl; import org.linphone.mediastream.Log; public class XmlRpcHelper { @@ -20,30 +39,30 @@ public class XmlRpcHelper { public static final String SERVER_ERROR_SIGNATURE_VERIFICATION_FAILED = "ERROR_SIGNATURE_VERIFICATION_FAILED"; public static final String SERVER_ERROR_ACCOUNT_ALREADY_EXISTS = "ERROR_ACCOUNT_ALREADY_EXISTS"; public static final String SERVER_ERROR_UNKNOWN_ERROR = "ERROR_UNKNOWN_ERROR"; - + public static final String CLIENT_ERROR_INVALID_SERVER_URL = "INVALID_SERVER_URL"; public static final String CLIENT_ERROR_SERVER_NOT_REACHABLE = "SERVER_NOT_REACHABLE"; - private LinphoneXmlRpcSession xmlRpcSession; + private XmlRpcSession xmlRpcSession; public XmlRpcHelper() { - xmlRpcSession = new LinphoneXmlRpcSessionImpl(LinphoneManager.getLcIfManagerNotDestroyedOrNull(), LinphonePreferences.instance().getInAppPurchaseValidatingServerUrl()); + xmlRpcSession = LinphoneManager.getLcIfManagerNotDestroyedOrNull().createXmlRpcSession(LinphonePreferences.instance().getInAppPurchaseValidatingServerUrl()); } - + public void createAccountAsync(final XmlRpcListener listener, String username, String email, String password) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("create_account", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "create_account"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } listener.onAccountCreated(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -54,21 +73,21 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(password == null ? "" : password); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void getAccountExpireAsync(final XmlRpcListener listener, String username, String password) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("get_account_expiration", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "get_account_expiration"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } listener.onAccountExpireFetched(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -78,21 +97,21 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(password); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void updateAccountExpireAsync(final XmlRpcListener listener, String username, String password, String domain, String payload, String signature) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("update_expiration_date", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "update_expiration_date"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } listener.onAccountExpireUpdated(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -105,21 +124,21 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(signature); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void activateAccountAsync(final XmlRpcListener listener, String username, String password) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("activate_account", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "activate_account"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } listener.onAccountActivated(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -129,14 +148,14 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(password); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void isAccountActivatedAsync(final XmlRpcListener listener, String username) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("check_account_activated", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "check_account_activated"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if ("OK".equals(result)) { listener.onAccountActivatedFetched(true); return; @@ -145,7 +164,7 @@ public class XmlRpcHelper { listener.onError(result); } listener.onAccountActivatedFetched(false); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -154,19 +173,19 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(username); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void isTrialAccountAsync(final XmlRpcListener listener, String username, String password) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("is_account_trial", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "is_account_trial"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (!"NOK".equals(result) && !"OK".equals(result)) { listener.onError(result); } listener.onTrialAccountFetched("OK".equals(result)); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -176,14 +195,14 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(password); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void isAccountAsync(final XmlRpcListener listener, String username) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("check_account_activated", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "check_account_activated"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if ("OK".equals(result)) { listener.onAccountFetched(true); return; @@ -192,7 +211,7 @@ public class XmlRpcHelper { listener.onError(result); } listener.onAccountFetched(false); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -201,22 +220,22 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(username); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void changeAccountEmailAsync(final XmlRpcListener listener, String username, String password, String newEmail) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("change_email", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "change_email"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onAccountEmailChanged(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -227,22 +246,22 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(newEmail); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void changeAccountPasswordAsync(final XmlRpcListener listener, String username, String oldPassword, String newPassword) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("change_password", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "change_password"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onAccountPasswordChanged(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -253,22 +272,22 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(newPassword); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void changeAccountHashPasswordAsync(final XmlRpcListener listener, String username, String oldPassword, String newPassword) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("change_hash", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "change_hash"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onAccountPasswordChanged(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -279,22 +298,22 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(newPassword); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void sendRecoverPasswordLinkByEmailAsync(final XmlRpcListener listener, String usernameOrEmail) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("send_reset_account_password_email", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "send_reset_account_password_email"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onRecoverPasswordLinkSent(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -303,22 +322,22 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(usernameOrEmail); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void sendActivateAccountLinkByEmailAsync(final XmlRpcListener listener, String usernameOrEmail) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("resend_activation_email", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "resend_activation_email"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onActivateAccountLinkSent(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -327,22 +346,22 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(usernameOrEmail); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void sendUsernameByEmailAsync(final XmlRpcListener listener, String email) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("recover_username_from_email", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "recover_username_from_email"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onUsernameSent(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -351,23 +370,23 @@ public class XmlRpcHelper { xmlRpcRequest.addStringArg(email); xmlRpcSession.sendRequest(xmlRpcRequest); } - + public void verifySignatureAsync(final XmlRpcListener listener, String payload, String signature) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("check_payload_signature", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "check_payload_signature"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { Log.w(result); if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); return; } - + listener.onSignatureVerified("OK".equals(result)); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } @@ -379,12 +398,12 @@ public class XmlRpcHelper { } public void getRemoteProvisioningFilenameAsync(final XmlRpcListener listener,String username, String domain, String password) { - LinphoneXmlRpcRequest xmlRpcRequest = new LinphoneXmlRpcRequestImpl("get_remote_provisioning_filename", LinphoneXmlRpcRequest.ArgType.String); - xmlRpcRequest.setListener(new LinphoneXmlRpcRequestListener() { + XmlRpcRequest xmlRpcRequest = xmlRpcSession.createRequest(XmlRpcRequest.ArgType.String, "get_remote_provisioning_filename"); + xmlRpcRequest.setListener(new XmlRpcRequestListener() { @Override - public void onXmlRpcRequestResponse(LinphoneXmlRpcRequest request) { + public void onResponse(XmlRpcRequest request) { String result = request.getStringResponse(); - if (request.getStatus() == LinphoneXmlRpcRequest.Status.Ok) { + if (request.getStatus() == XmlRpcRequest.Status.Ok) { if (result.startsWith("ERROR_")) { Log.e(result); listener.onError(result); @@ -392,7 +411,7 @@ public class XmlRpcHelper { } listener.onRemoteProvisioningFilenameSent(result); - } else if (request.getStatus() == LinphoneXmlRpcRequest.Status.Failed) { + } else if (request.getStatus() == XmlRpcRequest.Status.Failed) { Log.e(result); listener.onError(result); } diff --git a/src/android/org/linphone/xmlrpc/XmlRpcListener.java b/src/android/org/linphone/xmlrpc/XmlRpcListener.java index 976ad9316..47fe718d2 100644 --- a/src/android/org/linphone/xmlrpc/XmlRpcListener.java +++ b/src/android/org/linphone/xmlrpc/XmlRpcListener.java @@ -1,5 +1,24 @@ package org.linphone.xmlrpc; +/* +XmlRpcListener.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + public interface XmlRpcListener { public void onError(String error); public void onAccountCreated(String result); diff --git a/src/android/org/linphone/xmlrpc/XmlRpcListenerBase.java b/src/android/org/linphone/xmlrpc/XmlRpcListenerBase.java index d849f40b5..1d0d86422 100644 --- a/src/android/org/linphone/xmlrpc/XmlRpcListenerBase.java +++ b/src/android/org/linphone/xmlrpc/XmlRpcListenerBase.java @@ -1,90 +1,109 @@ package org.linphone.xmlrpc; +/* +XmlRpcListenerBase.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + public class XmlRpcListenerBase implements XmlRpcListener { @Override public void onError(String error) { // TODO Auto-generated method stub - + } @Override public void onAccountCreated(String result) { // TODO Auto-generated method stub - + } @Override public void onAccountExpireFetched(String result) { // TODO Auto-generated method stub - + } @Override public void onAccountActivated(String result) { // TODO Auto-generated method stub - + } @Override public void onAccountActivatedFetched(boolean isActivated) { // TODO Auto-generated method stub - + } @Override public void onTrialAccountFetched(boolean isTrial) { // TODO Auto-generated method stub - + } @Override public void onAccountFetched(boolean isExisting) { // TODO Auto-generated method stub - + } @Override public void onAccountEmailChanged(String result) { // TODO Auto-generated method stub - + } @Override public void onAccountPasswordChanged(String result) { // TODO Auto-generated method stub - + } @Override public void onRecoverPasswordLinkSent(String result) { // TODO Auto-generated method stub - + } @Override public void onActivateAccountLinkSent(String result) { // TODO Auto-generated method stub - + } @Override public void onAccountExpireUpdated(String result) { // TODO Auto-generated method stub - + } @Override public void onSignatureVerified(boolean success) { // TODO Auto-generated method stub - + } @Override public void onUsernameSent(String result) { // TODO Auto-generated method stub - + } - + @Override public void onRemoteProvisioningFilenameSent(String result) { // TODO Auto-generated method stub diff --git a/src/androidTest/org/linphone/AccountAssistant.java b/src/androidTest/org/linphone/AccountAssistant.java index af3397cff..c48997b4a 100644 --- a/src/androidTest/org/linphone/AccountAssistant.java +++ b/src/androidTest/org/linphone/AccountAssistant.java @@ -1,5 +1,24 @@ package org.linphone; +/* +AccountAssistant.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.assistant.AssistantActivity; @@ -14,9 +33,6 @@ import android.widget.EditText; import android.widget.TextView; import android.widget.Button; -/** - * @author Sylvain Berfini - */ public class AccountAssistant extends SampleTest { @SmallTest diff --git a/src/androidTest/org/linphone/AccountManagement.java b/src/androidTest/org/linphone/AccountManagement.java index b87a2f2f0..c21eaf453 100644 --- a/src/androidTest/org/linphone/AccountManagement.java +++ b/src/androidTest/org/linphone/AccountManagement.java @@ -1,5 +1,24 @@ package org.linphone; +/* +AccountManagement.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.FragmentsAvailable; @@ -9,9 +28,7 @@ import org.linphone.LinphonePreferences; import org.linphone.core.LinphoneProxyConfig; import android.test.suitebuilder.annotation.LargeTest; -/** - * @author Sylvain Berfini - */ + public class AccountManagement extends SampleTest { @LargeTest diff --git a/src/androidTest/org/linphone/AinitTestEnv.java b/src/androidTest/org/linphone/AinitTestEnv.java index 1ec9a6dfc..1daa95d39 100644 --- a/src/androidTest/org/linphone/AinitTestEnv.java +++ b/src/androidTest/org/linphone/AinitTestEnv.java @@ -1,14 +1,30 @@ package org.linphone; +/* +AinitTestEnv.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; -/** - * @author Sylvain Berfini - */ public class AinitTestEnv extends SampleTest { @SmallTest diff --git a/src/androidTest/org/linphone/CallsAudio.java b/src/androidTest/org/linphone/CallsAudio.java index f8a6f5494..39d8da491 100644 --- a/src/androidTest/org/linphone/CallsAudio.java +++ b/src/androidTest/org/linphone/CallsAudio.java @@ -1,5 +1,24 @@ package org.linphone; +/* +CallsAudio.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.core.LinphoneCall; @@ -18,9 +37,6 @@ import static android.test.TouchUtils.dragViewToX; import static android.view.Gravity.CENTER_HORIZONTAL; import static android.view.Gravity.CENTER_VERTICAL; -/** - * @author Sylvain Berfini - */ public class CallsAudio extends SampleTest { @SmallTest diff --git a/src/androidTest/org/linphone/CallsVideo.java b/src/androidTest/org/linphone/CallsVideo.java index 1c1ea1953..5eaa257f1 100644 --- a/src/androidTest/org/linphone/CallsVideo.java +++ b/src/androidTest/org/linphone/CallsVideo.java @@ -1,5 +1,24 @@ package org.linphone; +/* +CallsVideo.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.CallActivity; @@ -24,9 +43,6 @@ import static android.test.TouchUtils.dragViewToX; import static android.view.Gravity.CENTER_HORIZONTAL; import static android.view.Gravity.CENTER_VERTICAL; -/** - * @author Sylvain Berfini - */ public class CallsVideo extends SampleTest { @SmallTest diff --git a/src/androidTest/org/linphone/Chat.java b/src/androidTest/org/linphone/Chat.java index 5f8d6abd8..7b8bdd4dc 100644 --- a/src/androidTest/org/linphone/Chat.java +++ b/src/androidTest/org/linphone/Chat.java @@ -1,5 +1,24 @@ package org.linphone; +/* +Chat.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.LinphoneActivity; @@ -16,10 +35,6 @@ import android.test.suitebuilder.annotation.SmallTest; import android.widget.EditText; import android.widget.AutoCompleteTextView; - -/** - * @author Sylvain Berfini - */ public class Chat extends SampleTest { @SmallTest diff --git a/src/androidTest/org/linphone/ConferenceAndMultiCall.java b/src/androidTest/org/linphone/ConferenceAndMultiCall.java index 7f8def150..b70c6aeb0 100644 --- a/src/androidTest/org/linphone/ConferenceAndMultiCall.java +++ b/src/androidTest/org/linphone/ConferenceAndMultiCall.java @@ -1,13 +1,27 @@ package org.linphone; -import java.util.ArrayList; +/* +ConferenceAndMultiCall.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ import junit.framework.Assert; -import org.linphone.CallActivity; -import org.linphone.CallIncomingActivity; -import org.linphone.LinphoneActivity; -import org.linphone.LinphoneManager; + import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCoreException; import org.linphone.mediastream.Log; @@ -15,9 +29,7 @@ import org.linphone.mediastream.Log; import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; -import android.util.DisplayMetrics; import android.view.Gravity; -import android.view.View; import static android.test.TouchUtils.dragViewToX; diff --git a/src/androidTest/org/linphone/Contacts.java b/src/androidTest/org/linphone/Contacts.java index f6b862624..c0a8ddde8 100644 --- a/src/androidTest/org/linphone/Contacts.java +++ b/src/androidTest/org/linphone/Contacts.java @@ -1,5 +1,24 @@ package org.linphone; +/* +Contacts.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; @@ -7,9 +26,6 @@ import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; -/** - * @author Sylvain Berfini - */ public class Contacts extends SampleTest { @MediumTest diff --git a/src/androidTest/org/linphone/History.java b/src/androidTest/org/linphone/History.java index d1d52b305..1a82dca17 100644 --- a/src/androidTest/org/linphone/History.java +++ b/src/androidTest/org/linphone/History.java @@ -1,5 +1,24 @@ package org.linphone; +/* +History.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.CallActivity; @@ -10,9 +29,6 @@ import android.test.suitebuilder.annotation.LargeTest; import android.test.suitebuilder.annotation.MediumTest; import android.test.suitebuilder.annotation.SmallTest; -/** - * @author Sylvain Berfini - */ public class History extends SampleTest { @SmallTest diff --git a/src/androidTest/org/linphone/LinphoneTestManager.java b/src/androidTest/org/linphone/LinphoneTestManager.java index 628676013..a662980f5 100644 --- a/src/androidTest/org/linphone/LinphoneTestManager.java +++ b/src/androidTest/org/linphone/LinphoneTestManager.java @@ -1,5 +1,24 @@ package org.linphone; +/* +LinphoneTestManager.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import java.nio.ByteBuffer; import java.util.Timer; import java.util.TimerTask; diff --git a/src/androidTest/org/linphone/SampleTest.java b/src/androidTest/org/linphone/SampleTest.java index 27f420aa3..cd400106f 100644 --- a/src/androidTest/org/linphone/SampleTest.java +++ b/src/androidTest/org/linphone/SampleTest.java @@ -1,5 +1,24 @@ package org.linphone; +/* +SampleTest.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import org.linphone.core.LinphoneCall; import org.linphone.core.LinphoneCall.State; import org.linphone.core.LinphoneCore; @@ -13,9 +32,6 @@ import android.widget.ListView; import com.robotium.solo.Condition; import com.robotium.solo.Solo; -/** - * @author Sylvain Berfini - */ public abstract class SampleTest extends ActivityInstrumentationTestCase2{ protected final int STRING_LENGTH_MAX = 20; diff --git a/src/androidTest/org/linphone/Transfer.java b/src/androidTest/org/linphone/Transfer.java index 7a41cfba0..ee2487cd1 100644 --- a/src/androidTest/org/linphone/Transfer.java +++ b/src/androidTest/org/linphone/Transfer.java @@ -1,5 +1,24 @@ package org.linphone; +/* +Transfer.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + import junit.framework.Assert; import org.linphone.CallActivity; diff --git a/submodules/bcmatroska2 b/submodules/bcmatroska2 index 46f30179f..f4b87c521 160000 --- a/submodules/bcmatroska2 +++ b/submodules/bcmatroska2 @@ -1 +1 @@ -Subproject commit 46f30179fcc9d00f35f7d0ef8eacce0a204e4d07 +Subproject commit f4b87c521a513b540f34a72ef82a52364929d0be diff --git a/submodules/bctoolbox b/submodules/bctoolbox index a37f4186b..2adc98d22 160000 --- a/submodules/bctoolbox +++ b/submodules/bctoolbox @@ -1 +1 @@ -Subproject commit a37f4186b528d4e9b40e61b933dcf8df15735f64 +Subproject commit 2adc98d22e70e9ca74631a04854cfe1e289e18fb diff --git a/submodules/belcard b/submodules/belcard index a9d91af67..b9e1951be 160000 --- a/submodules/belcard +++ b/submodules/belcard @@ -1 +1 @@ -Subproject commit a9d91af675923cdc1bce3091e6ba828d9297de32 +Subproject commit b9e1951be4575c62e326d761a7f7c79c5cce9cb9 diff --git a/submodules/belle-sip b/submodules/belle-sip index bac70d8b6..e3b9709cc 160000 --- a/submodules/belle-sip +++ b/submodules/belle-sip @@ -1 +1 @@ -Subproject commit bac70d8b6c787bc204ea9bd60f8b1d0263b36447 +Subproject commit e3b9709cc5c01250aa944a7cb6f8abbee885113f diff --git a/submodules/belr b/submodules/belr index fdce52526..9364d69fb 160000 --- a/submodules/belr +++ b/submodules/belr @@ -1 +1 @@ -Subproject commit fdce52526089e88c98f19b0d36483cc3d31ef9bd +Subproject commit 9364d69fb16b058066a129f993558d764a6836cf diff --git a/submodules/bzrtp b/submodules/bzrtp index 49a0bb2c0..37adaa053 160000 --- a/submodules/bzrtp +++ b/submodules/bzrtp @@ -1 +1 @@ -Subproject commit 49a0bb2c0237237fc1b4213918dc9032817b25f1 +Subproject commit 37adaa0536432149a51332d8eb04973a3ba6bac9 diff --git a/submodules/cmake-builder b/submodules/cmake-builder index 0773a40cf..270a5b24f 160000 --- a/submodules/cmake-builder +++ b/submodules/cmake-builder @@ -1 +1 @@ -Subproject commit 0773a40cfd475fa357fd1ffcf825e5e5b6e0b9d5 +Subproject commit 270a5b24f22ba9c715c391d25ac53d181c299597 diff --git a/submodules/externals/libxsd b/submodules/externals/libxsd new file mode 160000 index 000000000..97dfa5b7a --- /dev/null +++ b/submodules/externals/libxsd @@ -0,0 +1 @@ +Subproject commit 97dfa5b7af486a2730aa66ef4b2b04259c9ab21b diff --git a/submodules/externals/sqlite3/sqlite3.c b/submodules/externals/sqlite3/sqlite3.c index deef46089..e84d74f7c 100644 --- a/submodules/externals/sqlite3/sqlite3.c +++ b/submodules/externals/sqlite3/sqlite3.c @@ -23013,6 +23013,21 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){ #include #if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0 #include + +#if defined(__ANDROID__) + +/*this block is to workaround a bug introduced by google with its unified headers in NDK 14.*/ + +#include "android/api-level.h" + +# ifdef __ANDROID_API_O__ /*present with unified headers introduced with NDK14*/ +# if __ANDROID_API__ < 21 + /*mmap declaration is missing below api 21 in unified headers, but not in normal headers*/ + extern void* mmap(void*, size_t, int, int, int, off_t); +# endif +# endif +#endif /*defined(ANDROID)*/ + #endif diff --git a/submodules/externals/xerces-c b/submodules/externals/xerces-c new file mode 160000 index 000000000..4a6d98d2a --- /dev/null +++ b/submodules/externals/xerces-c @@ -0,0 +1 @@ +Subproject commit 4a6d98d2ad797c37a9d12c1da772ca813c2f95b7 diff --git a/submodules/linphone b/submodules/linphone index 91dad233b..ddf3fe65e 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 91dad233b55c66d9968771fd613812d0539097a9 +Subproject commit ddf3fe65e2941763c936e8d2c6da23ae1e22bc90 diff --git a/submodules/mediastreamer2 b/submodules/mediastreamer2 index c83253958..b7e4901fb 160000 --- a/submodules/mediastreamer2 +++ b/submodules/mediastreamer2 @@ -1 +1 @@ -Subproject commit c83253958957fe4198e12b718c7b6298d16ddcdb +Subproject commit b7e4901fb8bc4b1095b5dcddd691ae288cd86d0e diff --git a/submodules/msopenh264 b/submodules/msopenh264 index 3a398b400..18b41c256 160000 --- a/submodules/msopenh264 +++ b/submodules/msopenh264 @@ -1 +1 @@ -Subproject commit 3a398b4000f29c67e010057f718c136ca245a9a8 +Subproject commit 18b41c2569ea76b8eb1df9f85a32f16b3d001cc0 diff --git a/submodules/mssilk b/submodules/mssilk index 3a61f5dec..fd1620c38 160000 --- a/submodules/mssilk +++ b/submodules/mssilk @@ -1 +1 @@ -Subproject commit 3a61f5decf634f5fb311b2c5f2984525fccd81d9 +Subproject commit fd1620c38e5ebeba63b4d8799769d94f0c6a956c diff --git a/submodules/mswebrtc b/submodules/mswebrtc index 475eb67b5..198143488 160000 --- a/submodules/mswebrtc +++ b/submodules/mswebrtc @@ -1 +1 @@ -Subproject commit 475eb67b5cb8d82f6636e69c3bde8b18daeb824e +Subproject commit 19814348807cdab7f13637993a05a696f47685eb diff --git a/submodules/oRTP b/submodules/oRTP index 8c8a83bc7..5f8fcddce 160000 --- a/submodules/oRTP +++ b/submodules/oRTP @@ -1 +1 @@ -Subproject commit 8c8a83bc74c3547138eb48c27877ac90ab4a360b +Subproject commit 5f8fcddce392f1510768949a4691f9e8c170badb diff --git a/src/android/org/linphone/tutorials/AndroidTutorialNotifier.java b/tutorials/AndroidTutorialNotifier.java similarity index 93% rename from src/android/org/linphone/tutorials/AndroidTutorialNotifier.java rename to tutorials/AndroidTutorialNotifier.java index 739bcaed1..a5d1ce735 100644 --- a/src/android/org/linphone/tutorials/AndroidTutorialNotifier.java +++ b/tutorials/AndroidTutorialNotifier.java @@ -1,6 +1,8 @@ +package org.linphone.tutorials; + /* AndroidTutorialNotifier.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,31 +18,28 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.tutorials; - -import org.linphone.core.tutorials.TutorialNotifier; import android.os.Handler; import android.widget.TextView; +import org.linphone.core.tutorials.TutorialNotifier; + /** * Write notifications to a TextView widget. * This is an helper class, not a test activity. - * - * @author Guillaume Beraudo * */ class AndroidTutorialNotifier extends TutorialNotifier { private Handler mHandler; private TextView outputTextView; - + public AndroidTutorialNotifier(Handler mHandler, final TextView outputTextView) { this.mHandler = mHandler; this.outputTextView = outputTextView; } - - + + @Override public void notify(final String s) { mHandler.post(new Runnable() { diff --git a/src/android/org/linphone/tutorials/TutorialBuddyStatusActivity.java b/tutorials/TutorialBuddyStatusActivity.java similarity index 97% rename from src/android/org/linphone/tutorials/TutorialBuddyStatusActivity.java rename to tutorials/TutorialBuddyStatusActivity.java index 101150e7e..5f6323560 100644 --- a/src/android/org/linphone/tutorials/TutorialBuddyStatusActivity.java +++ b/tutorials/TutorialBuddyStatusActivity.java @@ -18,12 +18,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.linphone.tutorials; -import org.linphone.R; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.tutorials.TutorialBuddyStatus; -import org.linphone.core.tutorials.TutorialNotifier; -import org.linphone.mediastream.Log; - import android.app.Activity; import android.os.Bundle; import android.os.Handler; @@ -31,6 +25,12 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import org.linphone.R; +import org.linphone.core.CoreException; +import org.linphone.core.tutorials.TutorialBuddyStatus; +import org.linphone.core.tutorials.TutorialNotifier; +import org.linphone.mediastream.Log; + /** * Activity for displaying and starting the BuddyStatus example on Android phone. * @@ -104,7 +104,7 @@ public class TutorialBuddyStatusActivity extends Activity { buttonCall.setEnabled(true); } }); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } } diff --git a/src/android/org/linphone/tutorials/TutorialCardDavSync.java b/tutorials/TutorialCardDavSync.java similarity index 52% rename from src/android/org/linphone/tutorials/TutorialCardDavSync.java rename to tutorials/TutorialCardDavSync.java index 660be41a2..5f401ef95 100644 --- a/src/android/org/linphone/tutorials/TutorialCardDavSync.java +++ b/tutorials/TutorialCardDavSync.java @@ -1,38 +1,23 @@ package org.linphone.tutorials; -import java.nio.ByteBuffer; -import java.util.Timer; -import java.util.TimerTask; +/* +TutorialCardDavSync.java +Copyright (C) 2017 Belledonne Communications, Grenoble, France -import org.linphone.R; -import org.linphone.UIThreadDispatcher; -import org.linphone.core.LinphoneAddress; -import org.linphone.core.LinphoneAuthInfo; -import org.linphone.core.LinphoneCall; -import org.linphone.core.LinphoneCall.State; -import org.linphone.core.LinphoneCallStats; -import org.linphone.core.LinphoneChatMessage; -import org.linphone.core.LinphoneChatRoom; -import org.linphone.core.LinphoneContent; -import org.linphone.core.LinphoneCore; -import org.linphone.core.LinphoneCore.AuthMethod; -import org.linphone.core.LinphoneCore.EcCalibratorStatus; -import org.linphone.core.LinphoneCore.GlobalState; -import org.linphone.core.LinphoneCore.LogCollectionUploadState; -import org.linphone.core.LinphoneCore.RegistrationState; -import org.linphone.core.LinphoneCore.RemoteProvisioningState; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.LinphoneCoreFactory; -import org.linphone.core.LinphoneCoreListener; -import org.linphone.core.LinphoneEvent; -import org.linphone.core.LinphoneFriend; -import org.linphone.core.LinphoneFriendList; -import org.linphone.core.LinphoneFriendList.LinphoneFriendListListener; -import org.linphone.core.LinphoneInfoMessage; -import org.linphone.core.LinphoneProxyConfig; -import org.linphone.core.PublishState; -import org.linphone.core.SubscriptionState; -import org.linphone.mediastream.Log; +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ import android.app.Activity; import android.os.Bundle; @@ -42,15 +27,49 @@ import android.widget.Button; import android.widget.EditText; import android.widget.TextView; -public class TutorialCardDavSync extends Activity implements OnClickListener, LinphoneCoreListener, LinphoneFriendListListener { +import org.linphone.R; +import org.linphone.UIThreadDispatcher; +import org.linphone.core.Address; +import org.linphone.core.AuthInfo; +import org.linphone.core.Call; +import org.linphone.core.Call.State; +import org.linphone.core.CallStats; +import org.linphone.core.ChatMessage; +import org.linphone.core.ChatRoom; +import org.linphone.core.Content; +import org.linphone.core.Core; +import org.linphone.core.Core.AuthMethod; +import org.linphone.core.Core.ConfiguringState; +import org.linphone.core.Core.EcCalibratorStatus; +import org.linphone.core.Core.GlobalState; +import org.linphone.core.Core.LogCollectionUploadState; +import org.linphone.core.Core.RegistrationState; +import org.linphone.core.CoreException; +import org.linphone.core.CoreListener; +import org.linphone.core.Event; +import org.linphone.core.Factory; +import org.linphone.core.Friend; +import org.linphone.core.FriendList; +import org.linphone.core.FriendList.FriendListListener; +import org.linphone.core.InfoMessage; +import org.linphone.core.ProxyConfig; +import org.linphone.core.PublishState; +import org.linphone.core.SubscriptionState; +import org.linphone.mediastream.Log; + +import java.nio.ByteBuffer; +import java.util.Timer; +import java.util.TimerTask; + +public class TutorialCardDavSync extends Activity implements OnClickListener, CoreListener, FriendListListener { private EditText username, password, ha1, server; private Button synchronize; private TextView logs; private Timer timer; - private LinphoneCore lc; - private LinphoneFriendList lfl; + private Core lc; + private FriendList lfl; @Override protected void onCreate(Bundle savedInstanceState) { @@ -66,9 +85,9 @@ public class TutorialCardDavSync extends Activity implements OnClickListener, Li synchronize = (Button) findViewById(R.id.carddav_synchronize); synchronize.setOnClickListener(this); - LinphoneCoreFactory.instance().setDebugMode(true, "CardDAV sync tutorial"); + Factory.instance().setDebugMode(true, "CardDAV sync tutorial"); try { - lc = LinphoneCoreFactory.instance().createLinphoneCore(this, this); + lc = Factory.instance().createCore(this, this); TimerTask lTask = new TimerTask() { @Override public void run() { @@ -85,13 +104,13 @@ public class TutorialCardDavSync extends Activity implements OnClickListener, Li timer = new Timer("Linphone scheduler"); timer.schedule(lTask, 0, 20); - lfl = lc.createLinphoneFriendList(); + lfl = lc.createFriendList(); lc.addFriendList(lfl); - LinphoneFriend lf = lc.createFriendWithAddress("sip:ghislain@sip.linphone.org"); + Friend lf = lc.createFriendWithAddress("sip:ghislain@sip.linphone.org"); lf.setName("Ghislain"); lfl.addLocalFriend(lf); // This is a local friend, it won't be sent to the CardDAV server and will be removed at the next synchronization - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } } @@ -100,7 +119,7 @@ public class TutorialCardDavSync extends Activity implements OnClickListener, Li protected void onDestroy() { try { lc.removeFriendList(lfl); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } timer.cancel(); @@ -112,7 +131,7 @@ public class TutorialCardDavSync extends Activity implements OnClickListener, Li public void onClick(View v) { String serverUrl = server.getText().toString(); String serverDomain = serverUrl.replace("http://", "").replace("https://", "").split("/")[0]; // We just want the domain name - LinphoneAuthInfo authInfo = LinphoneCoreFactory.instance().createAuthInfo(username.getText().toString(), null, password.getText().toString(), ha1.getText().toString(), "SabreDAV", serverDomain); + AuthInfo authInfo = Factory.instance().createAuthInfo(username.getText().toString(), null, password.getText().toString(), ha1.getText().toString(), "SabreDAV", serverDomain); lc.addAuthInfo(authInfo); lfl.setUri(serverUrl); @@ -127,273 +146,273 @@ public class TutorialCardDavSync extends Activity implements OnClickListener, Li } @Override - public void onLinphoneFriendCreated(LinphoneFriendList list, - LinphoneFriend lf) { + public void onContactCreated(FriendList list, + Friend lf) { // TODO Auto-generated method stub String msg = "Friend created " + lf.getAddress(); myLog(msg); - LinphoneFriend[] friends = list.getFriendList(); + Friend[] friends = list.getFriendsLists(); String msg2 = "There are " + friends.length + (friends.length > 1 ? " friends" : " friend") + " in the list"; myLog(msg2); } @Override - public void onLinphoneFriendUpdated(LinphoneFriendList list, - LinphoneFriend newFriend, LinphoneFriend oldFriend) { + public void onContactUpdated(FriendList list, + Friend newFriend, Friend oldFriend) { // TODO Auto-generated method stub String msg = "Friend updated " + newFriend.getAddress(); myLog(msg); - LinphoneFriend[] friends = list.getFriendList(); + Friend[] friends = list.getFriendsLists(); String msg2 = "There are " + friends.length + (friends.length > 1 ? " friends" : " friend") + " in the list"; myLog(msg2); } @Override - public void onLinphoneFriendDeleted(LinphoneFriendList list, - LinphoneFriend lf) { + public void onContactDeleted(FriendList list, + Friend lf) { // TODO Auto-generated method stub String msg = "Friend removed " + lf.getAddress(); myLog(msg); - LinphoneFriend[] friends = list.getFriendList(); + Friend[] friends = list.getFriendsLists(); String msg2 = "There are " + friends.length + (friends.length > 1 ? " friends" : " friend") + " in the list"; myLog(msg2); } @Override - public void onLinphoneFriendSyncStatusChanged(LinphoneFriendList list, LinphoneFriendList.State status, String message) { + public void onSyncStatusChanged(FriendList list, FriendList.State status, String message) { // TODO Auto-generated method stub String msg = "Sync status changed: " + status.toString() + " (" + message + ")"; myLog(msg); - if (status != LinphoneFriendList.State.SyncStarted) { + if (status != FriendList.State.SyncStarted) { synchronize.setEnabled(true); } } @Override - public void friendListCreated(LinphoneCore lc, LinphoneFriendList list) { + public void onFriendListCreated(Core lc, FriendList list) { // TODO Auto-generated method stub String msg = "Friend List added"; myLog(msg); - LinphoneFriendList[] lists = lc.getFriendLists(); + FriendList[] lists = lc.getFriendsLists(); String msg2 = "There are " + lists.length + (lists.length > 1 ? " lists" : " list") + " in the core"; myLog(msg2); } @Override - public void friendListRemoved(LinphoneCore lc, LinphoneFriendList list) { + public void onFriendListRemoved(Core lc, FriendList list) { // TODO Auto-generated method stub String msg = "Friend List removed"; myLog(msg); - LinphoneFriendList[] lists = lc.getFriendLists(); + FriendList[] lists = lc.getFriendsLists(); String msg2 = "There are " + lists.length + (lists.length > 1 ? " lists" : " list") + " in the core"; myLog(msg2); } @Override - public void networkReachableChanged(LinphoneCore lc, boolean enable) { + public void onNetworkReachable(Core lc, boolean enable) { } @Override - public void callStatsUpdated(LinphoneCore lc, LinphoneCall call, - LinphoneCallStats stats) { + public void onCallStatsUpdated(Core lc, Call call, + CallStats stats) { // TODO Auto-generated method stub } @Override - public void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf, + public void onNewSubscriptionRequested(Core lc, Friend lf, String url) { // TODO Auto-generated method stub } @Override - public void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf) { + public void onNotifyPresenceReceived(Core lc, Friend lf) { // TODO Auto-generated method stub } @Override - public void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf) { + public void onDtmfReceived(Core lc, Call call, int dtmf) { // TODO Auto-generated method stub } @Override - public void notifyReceived(LinphoneCore lc, LinphoneCall call, - LinphoneAddress from, byte[] event) { + public void removed(Core lc, Call call, + Address from, byte[] event) { // TODO Auto-generated method stub } @Override - public void transferState(LinphoneCore lc, LinphoneCall call, + public void onTransferStateChanged(Core lc, Call call, State new_call_state) { // TODO Auto-generated method stub } @Override - public void infoReceived(LinphoneCore lc, LinphoneCall call, - LinphoneInfoMessage info) { + public void onInfoReceived(Core lc, Call call, + InfoMessage info) { // TODO Auto-generated method stub } @Override - public void subscriptionStateChanged(LinphoneCore lc, LinphoneEvent ev, + public void onSubscriptionStateChanged(Core lc, Event ev, SubscriptionState state) { // TODO Auto-generated method stub } @Override - public void publishStateChanged(LinphoneCore lc, LinphoneEvent ev, + public void onPublishStateChanged(Core lc, Event ev, PublishState state) { // TODO Auto-generated method stub } @Override - public void show(LinphoneCore lc) { + public void removed( lc) { // TODO Auto-generated method stub } @Override - public void displayStatus(LinphoneCore lc, String message) { + public void removed(Core lc, String message) { // TODO Auto-generated method stub } @Override - public void displayMessage(LinphoneCore lc, String message) { + public void removed(Core lc, String message) { // TODO Auto-generated method stub } @Override - public void displayWarning(LinphoneCore lc, String message) { + public void removed(Core lc, String message) { // TODO Auto-generated method stub } @Override - public void fileTransferProgressIndication(LinphoneCore lc, - LinphoneChatMessage message, LinphoneContent content, int progress) { + public void removed(Core lc, + ChatMessage message, Content content, int progress) { // TODO Auto-generated method stub } @Override - public void fileTransferRecv(LinphoneCore lc, LinphoneChatMessage message, - LinphoneContent content, byte[] buffer, int size) { + public void removed(Core lc, ChatMessage message, + Content content, byte[] buffer, int size) { // TODO Auto-generated method stub } @Override - public int fileTransferSend(LinphoneCore lc, LinphoneChatMessage message, - LinphoneContent content, ByteBuffer buffer, int size) { + public int removed(Core lc, ChatMessage message, + Content content, ByteBuffer buffer, int size) { // TODO Auto-generated method stub return 0; } @Override - public void globalState(LinphoneCore lc, GlobalState state, String message) { + public void onGlobalStateChanged(Core lc, GlobalState state, String message) { // TODO Auto-generated method stub } @Override - public void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, + public void onRegistrationStateChanged(Core lc, ProxyConfig cfg, RegistrationState state, String smessage) { // TODO Auto-generated method stub } @Override - public void configuringStatus(LinphoneCore lc, - RemoteProvisioningState state, String message) { + public void onConfiguringStatus(Core lc, + ConfiguringState state, String message) { // TODO Auto-generated method stub } @Override - public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, - LinphoneChatMessage message) { + public void onMessageReceived(Core lc, ChatRoom cr, + ChatMessage message) { // TODO Auto-generated method stub } @Override - public void messageReceivedUnableToDecrypted(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) { + public void removed(Core lc, ChatRoom cr, ChatMessage message) { } @Override - public void callState(LinphoneCore lc, LinphoneCall call, State state, + public void onCallStateChanged(Core lc, Call call, State state, String message) { // TODO Auto-generated method stub } @Override - public void callEncryptionChanged(LinphoneCore lc, LinphoneCall call, + public void onCallEncryptionChanged(Core lc, Call call, boolean encrypted, String authenticationToken) { // TODO Auto-generated method stub } @Override - public void notifyReceived(LinphoneCore lc, LinphoneEvent ev, - String eventName, LinphoneContent content) { + public void onNotifyReceived(Core lc, Event ev, + String eventName, Content content) { // TODO Auto-generated method stub } @Override - public void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr) { + public void onIsComposingReceived(Core lc, ChatRoom cr) { // TODO Auto-generated method stub } @Override - public void ecCalibrationStatus(LinphoneCore lc, EcCalibratorStatus status, + public void onEcCalibrationResult(Core lc, EcCalibratorStatus status, int delay_ms, Object data) { // TODO Auto-generated method stub } @Override - public void uploadProgressIndication(LinphoneCore lc, int offset, int total) { + public void onLogCollectionUploadProgressIndication(Core lc, int offset, int total) { // TODO Auto-generated method stub } @Override - public void uploadStateChanged(LinphoneCore lc, + public void onLogCollectionUploadStateChanged(Core lc, LogCollectionUploadState state, String info) { // TODO Auto-generated method stub } @Override - public void authInfoRequested(LinphoneCore lc, String realm, + public void removed(Core lc, String realm, String username, String domain) { // TODO Auto-generated method stub } @Override - public void authenticationRequested(LinphoneCore lc, - LinphoneAuthInfo authInfo, AuthMethod method) { + public void onAuthenticationRequested(Core lc, + AuthInfo authInfo, AuthMethod method) { // TODO Auto-generated method stub } diff --git a/src/android/org/linphone/tutorials/TutorialChatRoomActivity.java b/tutorials/TutorialChatRoomActivity.java similarity index 93% rename from src/android/org/linphone/tutorials/TutorialChatRoomActivity.java rename to tutorials/TutorialChatRoomActivity.java index 23a9153e7..8db381c02 100644 --- a/src/android/org/linphone/tutorials/TutorialChatRoomActivity.java +++ b/tutorials/TutorialChatRoomActivity.java @@ -1,6 +1,8 @@ +package org.linphone.tutorials; + /* TutorialChatRoomActivity.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,13 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.tutorials; - -import org.linphone.R; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.tutorials.TutorialChatRoom; -import org.linphone.core.tutorials.TutorialNotifier; -import org.linphone.mediastream.Log; import android.app.Activity; import android.os.Bundle; @@ -31,11 +26,15 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import org.linphone.R; +import org.linphone.core.CoreException; +import org.linphone.core.tutorials.TutorialChatRoom; +import org.linphone.core.tutorials.TutorialNotifier; +import org.linphone.mediastream.Log; + /** * Activity for displaying and starting the chatroom example on Android phone. * - * @author Guillaume Beraudo - * */ public class TutorialChatRoomActivity extends Activity { @@ -56,12 +55,12 @@ public class TutorialChatRoomActivity extends Activity { final TextView outputText = (TextView) findViewById(R.id.OutputText); final TutorialNotifier notifier = new AndroidTutorialNotifier(mHandler, outputText); - + // Create HelloWorld object tutorial = new TutorialChatRoom(notifier); - - + + // Assign call action to call button buttonCall = (Button) findViewById(R.id.CallButton); buttonCall.setOnClickListener(new View.OnClickListener() { @@ -80,8 +79,8 @@ public class TutorialChatRoomActivity extends Activity { } }); } - - + + private class TutorialLaunchingThread extends Thread { @Override public void run() { @@ -93,7 +92,7 @@ public class TutorialChatRoomActivity extends Activity { buttonCall.setEnabled(true); } }); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } } diff --git a/src/android/org/linphone/tutorials/TutorialHelloWorldActivity.java b/tutorials/TutorialHelloWorldActivity.java similarity index 97% rename from src/android/org/linphone/tutorials/TutorialHelloWorldActivity.java rename to tutorials/TutorialHelloWorldActivity.java index 3562bac29..82bb8dda9 100644 --- a/src/android/org/linphone/tutorials/TutorialHelloWorldActivity.java +++ b/tutorials/TutorialHelloWorldActivity.java @@ -18,12 +18,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ package org.linphone.tutorials; -import org.linphone.R; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.tutorials.TutorialHelloWorld; -import org.linphone.core.tutorials.TutorialNotifier; -import org.linphone.mediastream.Log; - import android.app.Activity; import android.os.Bundle; import android.os.Handler; @@ -31,6 +25,12 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import org.linphone.R; +import org.linphone.core.CoreException; +import org.linphone.core.tutorials.TutorialHelloWorld; +import org.linphone.core.tutorials.TutorialNotifier; +import org.linphone.mediastream.Log; + /** * Activity for displaying and starting the HelloWorld example on Android phone. * @@ -93,7 +93,7 @@ public class TutorialHelloWorldActivity extends Activity { buttonCall.setEnabled(true); } }); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); } } diff --git a/src/android/org/linphone/tutorials/TutorialLauncherActivity.java b/tutorials/TutorialLauncherActivity.java similarity index 94% rename from src/android/org/linphone/tutorials/TutorialLauncherActivity.java rename to tutorials/TutorialLauncherActivity.java index b3668e635..18b02de91 100644 --- a/src/android/org/linphone/tutorials/TutorialLauncherActivity.java +++ b/tutorials/TutorialLauncherActivity.java @@ -1,7 +1,7 @@ package org.linphone.tutorials; /* TutorialLauncherActivity.java -Copyright (C) 2013 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -18,39 +18,36 @@ along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -import org.linphone.R; - import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; -/** - * @author Sylvain Berfini - */ +import org.linphone.R; + public class TutorialLauncherActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tutorials); } - + public void startHelloWorldTutorial(View v) { startActivity(new Intent().setClass(TutorialLauncherActivity.this, TutorialHelloWorldActivity.class)); } - + public void startRegistrationTutorial(View v) { startActivity(new Intent().setClass(TutorialLauncherActivity.this, TutorialRegistrationActivity.class)); } - + public void startChatRoomTutorial(View v) { startActivity(new Intent().setClass(TutorialLauncherActivity.this, TutorialChatRoomActivity.class)); } - + public void startBuddyStatusTutorial(View v) { startActivity(new Intent().setClass(TutorialLauncherActivity.this, TutorialBuddyStatusActivity.class)); } - + public void startCardDavSyncTutorial(View v) { startActivity(new Intent().setClass(TutorialLauncherActivity.this, TutorialCardDavSync.class)); } diff --git a/src/android/org/linphone/tutorials/TutorialRegistrationActivity.java b/tutorials/TutorialRegistrationActivity.java similarity index 94% rename from src/android/org/linphone/tutorials/TutorialRegistrationActivity.java rename to tutorials/TutorialRegistrationActivity.java index da95f7fb4..211761758 100644 --- a/src/android/org/linphone/tutorials/TutorialRegistrationActivity.java +++ b/tutorials/TutorialRegistrationActivity.java @@ -1,6 +1,8 @@ +package org.linphone.tutorials; + /* TutorialRegistrationActivity.java -Copyright (C) 2010 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -16,13 +18,6 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -package org.linphone.tutorials; - -import org.linphone.R; -import org.linphone.core.LinphoneCoreException; -import org.linphone.core.tutorials.TutorialNotifier; -import org.linphone.core.tutorials.TutorialRegistration; -import org.linphone.mediastream.Log; import android.os.Bundle; import android.os.Handler; @@ -30,10 +25,14 @@ import android.view.View; import android.widget.Button; import android.widget.TextView; +import org.linphone.R; +import org.linphone.core.CoreException; +import org.linphone.core.tutorials.TutorialNotifier; +import org.linphone.core.tutorials.TutorialRegistration; +import org.linphone.mediastream.Log; + /** * Activity for displaying and starting the registration example on Android phone. - * - * @author Guillaume Beraudo * */ public class TutorialRegistrationActivity extends TutorialHelloWorldActivity { @@ -62,12 +61,12 @@ public class TutorialRegistrationActivity extends TutorialHelloWorldActivity { outputText = (TextView) findViewById(R.id.OutputText); final TutorialNotifier notifier = new AndroidTutorialNotifier(mHandler, outputText); - + // Create Tutorial object tutorial = new TutorialRegistration(notifier); - - + + // Assign call action to call button buttonCall = (Button) findViewById(R.id.CallButton); buttonCall.setText("Register"); @@ -87,8 +86,8 @@ public class TutorialRegistrationActivity extends TutorialHelloWorldActivity { } }); } - - + + private class TutorialLaunchingThread extends Thread { @Override public void run() { @@ -97,7 +96,7 @@ public class TutorialRegistrationActivity extends TutorialHelloWorldActivity { tutorial.launchTutorial( sipAddressWidget.getText().toString(), sipPasswordWidget.getText().toString()); - } catch (LinphoneCoreException e) { + } catch (CoreException e) { Log.e(e); outputText.setText(e.getMessage() +"\n"+outputText.getText()); }