Merge remote-tracking branch 'origin/master' into dev_in_app_purchase
Conflicts: AndroidManifest.xml
This commit is contained in:
commit
d7bb9a7f19
40 changed files with 272 additions and 170 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -37,3 +37,4 @@ submodules/externals/build/openh264/x86
|
|||
tests/*$py.class
|
||||
tests/build.xml
|
||||
tests/project.properties
|
||||
ant_password.properties
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.linphone"
|
||||
android:versionCode="2410" android:installLocation="auto">
|
||||
android:versionCode="2400" android:installLocation="auto">
|
||||
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="22"/>
|
||||
|
||||
<!-- Permissions for Push Notification -->
|
||||
|
@ -119,6 +119,7 @@
|
|||
|
||||
<activity android:name="org.linphone.ChatActivity"
|
||||
android:theme="@style/NoTitle"
|
||||
android:configChanges="orientation|screenSize|keyboardHidden"
|
||||
android:windowSoftInputMode="adjustPan|adjustResize"
|
||||
android:launchMode="singleTask">
|
||||
<intent-filter>
|
||||
|
|
21
Makefile
21
Makefile
|
@ -99,6 +99,15 @@ ifneq ($(shell ls ./submodules/linphone/mediastreamer2/java/src/org/linphone/med
|
|||
$(error ./submodules/linphone/mediastreamer2/java/src/org/linphone/mediastream/MediastreamerActivity.java found: please either remove it or move it to MediastreamActivity.java.ignored before continuing.)
|
||||
endif
|
||||
|
||||
ifeq ($(BUILD_NON_FREE_CODECS), 0)
|
||||
BUILD_OPENH264=0
|
||||
ENABLE_OPENH264_DECODER=0
|
||||
BUILD_AMRNB=0
|
||||
BUILD_AMRWB=0
|
||||
BUILD_G729=0
|
||||
BUILD_X264=0
|
||||
endif
|
||||
|
||||
all: update-project generate-apk
|
||||
ifeq ($(ENABLE_GPL_THIRD_PARTIES),1)
|
||||
@echo "***************************************************************************"
|
||||
|
@ -164,8 +173,8 @@ $(FFMPEG_SRC_DIR)/non_versioned_soname_patch_applied.txt:
|
|||
|
||||
$(FFMPEG_BUILD_DIR)/arm/config.h:
|
||||
mkdir -p $(FFMPEG_BUILD_DIR)/arm && \
|
||||
cd $(FFMPEG_BUILD_DIR)/arm && \
|
||||
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_ARM_CONFIGURE_OPTIONS)
|
||||
cd $(FFMPEG_BUILD_DIR)/arm && \
|
||||
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_ARM_CONFIGURE_OPTIONS)
|
||||
sed -i.bak 's/#define HAVE_SYSCTL 1/#define HAVE_SYSCTL 0/g' $(FFMPEG_BUILD_DIR)/arm/config.h
|
||||
sed -i.bak 's/#define HAVE_GETHRTIME 1/#define HAVE_GETHRTIME 0/g' $(FFMPEG_BUILD_DIR)/arm/config.h
|
||||
|
||||
|
@ -181,8 +190,8 @@ $(FFMPEG_BUILD_DIR)/arm/libffmpeg-linphone-arm.so: $(FFMPEG_BUILD_DIR)/arm/libav
|
|||
|
||||
$(FFMPEG_BUILD_DIR)/x86/config.h:
|
||||
mkdir -p $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
cd $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_X86_CONFIGURE_OPTIONS)
|
||||
cd $(FFMPEG_BUILD_DIR)/x86 && \
|
||||
$(FFMPEG_SRC_DIR)/configure $(FFMPEG_CONFIGURE_OPTIONS) $(FFMPEG_X86_CONFIGURE_OPTIONS)
|
||||
sed -i.bak 's/#define HAVE_SYSCTL 1/#define HAVE_SYSCTL 0/g' $(FFMPEG_BUILD_DIR)/x86/config.h
|
||||
sed -i.bak 's/#define HAVE_GETHRTIME 1/#define HAVE_GETHRTIME 0/g' $(FFMPEG_BUILD_DIR)/x86/config.h
|
||||
|
||||
|
@ -462,10 +471,8 @@ install-apk:
|
|||
|
||||
release: update-project
|
||||
$(ANT) clean
|
||||
echo "What is the version name for the release ?"; \
|
||||
read version; \
|
||||
echo "version.name=$$version" > default.properties
|
||||
patch -p1 < release.patch
|
||||
cat ant.properties | grep version.name > default.properties
|
||||
$(ANT) release
|
||||
git checkout HEAD AndroidManifest.xml
|
||||
|
||||
|
|
8
README
8
README
|
@ -25,9 +25,11 @@ To build liblinphone for Android, you must:
|
|||
$ make mediastreamer2-sdk
|
||||
7) (Optional) To generate a signed apk to publish on the Google Play, run
|
||||
$ make release
|
||||
It will ask you for the version number that will be displayed in the about page of the app.
|
||||
Make sure you filled the ant.properties values for key.store and key.alias in order to correctly
|
||||
sign the generated apk (it will ask you the password during the process)
|
||||
Make sure you filled the ant.properties values for version.name, key.store and key.alias in order to correctly sign the generated apk.
|
||||
You also may want to create a file name ant_password.properties with the following:
|
||||
key.store.password=[your_password]
|
||||
key.alias.password=[your_password]
|
||||
If you don't, the passwords will be asked at the signing phase.
|
||||
|
||||
To run the tutorials:
|
||||
--------------------
|
||||
|
|
|
@ -1,3 +1,4 @@
|
|||
source.dir=src:submodules/linphone/mediastreamer2/java/src:submodules/linphone/java/j2se:submodules/linphone/java/common:submodules/linphone/java/impl:submodules/linphone/coreapi/help/java:submodules/externals/axmlrpc/src/main/java
|
||||
key.store=bc-android.keystore
|
||||
key.alias=nw8000
|
||||
version.name=2.4.0
|
||||
|
|
|
@ -26,8 +26,9 @@
|
|||
application and should be checked into Version Control Systems.
|
||||
|
||||
-->
|
||||
<property file="ant.properties" />
|
||||
<property file="default.properties" />
|
||||
<property file="ant.properties" />
|
||||
<property file="ant_password.properties" />
|
||||
|
||||
<!-- if sdk.dir was not set from one of the property file, then
|
||||
get it from the ANDROID_HOME env var.
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package org.linphone.tester;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.linphone.core.LinphoneCoreFactory;
|
||||
import org.linphone.mediastream.Version;
|
||||
|
||||
|
@ -23,25 +25,35 @@ public class Tester {
|
|||
}
|
||||
|
||||
static {
|
||||
|
||||
LinphoneCoreFactory.instance();
|
||||
|
||||
System.loadLibrary("cunit");
|
||||
String eabi = "armeabi";
|
||||
if (Version.isX86()) {
|
||||
eabi = "x86";
|
||||
} else if (Version.isArmv7()) {
|
||||
eabi = "armeabi-v7a";
|
||||
List<String> cpuabis=Version.getCpuAbis();
|
||||
String ffmpegAbi;
|
||||
boolean libLoaded=false;
|
||||
Throwable firstException=null;
|
||||
for (String abi : cpuabis){
|
||||
Log.i("LinphoneCoreFactoryImpl","Trying to load liblinphone for " + abi);
|
||||
ffmpegAbi=abi;
|
||||
// FFMPEG (audio/video)
|
||||
if (abi.startsWith("armeabi")) {
|
||||
ffmpegAbi="arm";
|
||||
}
|
||||
loadOptionalLibrary("ffmpeg-linphone-"+ffmpegAbi);
|
||||
//Main library
|
||||
try {
|
||||
System.loadLibrary("linphone-" + abi);
|
||||
Log.i("LinphoneCoreFactoryImpl","Loading done with " + abi);
|
||||
libLoaded=true;
|
||||
break;
|
||||
}catch(Throwable e) {
|
||||
if (firstException == null) firstException=e;
|
||||
}
|
||||
}
|
||||
try {
|
||||
System.loadLibrary("linphone_tester-"+eabi);
|
||||
|
||||
} catch (UnsatisfiedLinkError ule) {
|
||||
Log.w("linphone", "Failed to load liblinphone_tester-"+eabi);
|
||||
System.loadLibrary("linphone_tester");
|
||||
|
||||
if (!libLoaded){
|
||||
throw new RuntimeException(firstException);
|
||||
|
||||
}else{
|
||||
Version.dumpCapabilities();
|
||||
}
|
||||
|
||||
Version.dumpCapabilities();
|
||||
}
|
||||
|
||||
public native int run(String args[]);
|
||||
|
|
|
@ -78,35 +78,51 @@
|
|||
android:singleLine="true"
|
||||
android:textColor="@android:color/black"
|
||||
android:background="@drawable/setup_field_background" />
|
||||
|
||||
<EditText
|
||||
android:textCursorDrawable="@null"
|
||||
android:id="@+id/setup_password_confirm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/setup_password"
|
||||
android:hint="@string/setup_password_confirm_hint"
|
||||
android:singleLine="true"
|
||||
android:lines="1"
|
||||
android:maxLines="1"
|
||||
android:inputType="textPassword"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@android:color/black"
|
||||
android:background="@drawable/setup_field_background" />
|
||||
|
||||
<ImageView
|
||||
android:contentDescription="@string/content_description_setup_ok"
|
||||
android:id="@+id/setup_password_ok"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="5dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:src="@drawable/wizard_notok"/>
|
||||
|
||||
<ImageView
|
||||
android:contentDescription="@string/content_description_setup_ok"
|
||||
android:id="@+id/setup_password_ok"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="5dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:src="@drawable/wizard_notok"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_marginTop="5dp"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<EditText
|
||||
android:textCursorDrawable="@null"
|
||||
android:id="@+id/setup_password_confirm"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:hint="@string/setup_password_confirm_hint"
|
||||
android:singleLine="true"
|
||||
android:lines="1"
|
||||
android:maxLines="1"
|
||||
android:inputType="textPassword"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp"
|
||||
android:ellipsize="end"
|
||||
android:textColor="@android:color/black"
|
||||
android:background="@drawable/setup_field_background" />
|
||||
|
||||
<ImageView
|
||||
android:contentDescription="@string/content_description_setup_ok"
|
||||
android:id="@+id/setup_confirm_password_ok"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingRight="5dp"
|
||||
android:layout_alignParentRight="true"
|
||||
android:layout_centerVertical="true"
|
||||
android:src="@drawable/wizard_notok"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_marginTop="5dp"
|
||||
|
@ -159,13 +175,7 @@
|
|||
android:textColor="@android:color/black"/>
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<View
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingRight="10dp" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</LinearLayout>
|
|
@ -16,7 +16,7 @@
|
|||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
android:layout_height="75dp">
|
||||
|
||||
<ImageView
|
||||
android:layout_width="match_parent"
|
||||
|
@ -33,7 +33,7 @@
|
|||
android:paddingLeft="20dp"
|
||||
android:textColor="@android:color/white"
|
||||
android:textSize="22dp" />
|
||||
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
<LinearLayout
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<string name="notification_registered">مُسجَّل في %s</string>
|
||||
<string name="notification_register_failure">فشِل التسجيل في %s</string>
|
||||
<string name="about_text">لِنْفُونْ %s الهاتف الموافق لـ SIP (rfc 3261) برخصة جْنُو العمومية الإصدار 2</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
<string name="setup_welcome">سيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات.</string>
|
||||
<string name="setup_create_account">إنشاء حساب في linphone.org</string>
|
||||
<string name="setup_login_linphone">أتوفر على حساب في linphone.org</string>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<string name="notification_registered">Enregistré sur %s</string>
|
||||
<string name="notification_register_failure">Échec d\'enregistrement sur %s</string>
|
||||
<string name="about_text">Linphone %s SIP (rfc 3261) compatible téléphone, sous licence GNU Public License V2</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
<string name="setup_welcome">Cet assistant va vous guider pour réaliser des appels à l\'aide d\'un compte SIP.</string>
|
||||
<string name="setup_create_account">Créer un compte sur linphone.org</string>
|
||||
<string name="setup_login_linphone">J\'ai déjà un compte sur linphone.org</string>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<string name="notification_registered">%s に登録しました</string>
|
||||
<string name="notification_register_failure">%s への登録に失敗しました</string>
|
||||
<string name="about_text">Linphone %s SIP (rfc 3261) compatible phone under GNU Public License V2</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
<string name="setup_welcome">アシスタントがSIPアカウントを使ってあなたの通話を助けます。</string>
|
||||
<string name="setup_create_account">linphone.orgのアカウントを作成する</string>
|
||||
<string name="setup_login_linphone">linphone.orgのアカウントをすでに持っている</string>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<string name="notification_registered">Geregistreerd naar %s</string>
|
||||
<string name="notification_register_failure">Het registreren naar %s is mislukt</string>
|
||||
<string name="about_text">Linphone %s SIP (rfc 3261)-compatibele telefoonapp onder de licentie van GNU Public License V2</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nGebruikershandleidingen\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nGebruikershandleidingen\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
<string name="setup_welcome">Deze wizard zal u helpen bij het gebruiken van een SIP-account voor uw oproepen.</string>
|
||||
<string name="setup_create_account">Creëer een account op linphone.org</string>
|
||||
<string name="setup_login_linphone">Ik heb al een linphone.org-account</string>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<string name="notification_registered">Зарегистрирован в %s </string>
|
||||
<string name="notification_register_failure">Ошибка регистрации в %s</string>
|
||||
<string name="about_text">Linphone %s SIP (rfc 3261) совместимый телефон под GPL V2 лицензией</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nИнструкции\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nИнструкции\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
<string name="setup_welcome">Этот помощник поможет Вам настроить учётную запись SIP для звонков.</string>
|
||||
<string name="setup_create_account">Создать учётную запись на linphone.org</string>
|
||||
<string name="setup_login_linphone">Уже есть учётная запись на linphone.org</string>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<string name="notification_registered">Уписан на „%s“ </string>
|
||||
<string name="notification_register_failure">Нисам успео да се упишем на „%s“</string>
|
||||
<string name="about_text">Линфон %s телефон сагласан са СИП-ом (rfc 3261) под Гнуовом Јавном Лиценцом и2</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
<string name="setup_welcome">Овај помоћник ће вам помоћи да користите СИП налог за ваше позиве.</string>
|
||||
<string name="setup_create_account">Направи налог на линфон.орг-у</string>
|
||||
<string name="setup_login_linphone">Већ имам налог линфон.орг-а</string>
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
<string name="notification_registered">Registered to %s </string>
|
||||
<string name="notification_register_failure">Fails to register to %s</string>
|
||||
<string name="about_text">Linphone %s SIP (rfc 3261) compatible phone under GNU Public License V2</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/m/help\n\n© 2011 Belledonne Communications</string>
|
||||
<string name="about_link">http://www.linphone.org\n\nInstructions\nhttp://www.linphone.org/user-guide.html\n\n© 2015 Belledonne Communications</string>
|
||||
|
||||
<string name="setup_welcome">This assistant will help you to use a SIP account for your calls.</string>
|
||||
<string name="setup_create_account">Create an account on linphone.org</string>
|
||||
|
|
|
@ -33,7 +33,7 @@
|
|||
<bool name="hide_accounts">false</bool>
|
||||
<bool name="display_account_wizard_at_first_start">true</bool>
|
||||
<bool name="use_linphone_server_ports">true</bool>
|
||||
<bool name="allow_only_phone_numbers_in_wizard">true</bool>
|
||||
<bool name="allow_only_phone_numbers_in_wizard">false</bool>
|
||||
|
||||
<bool name="use_android_native_contact_edit_interface">false</bool>
|
||||
<!-- The following settings are only usefull if use_android_native_contact_edit_interface = false -->
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
<account-authenticator
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:accountType="org.linphone"
|
||||
android:accountType="@string/sync_account_type"
|
||||
android:icon="@drawable/logo_linphone_57x57"
|
||||
android:smallIcon="@drawable/logo_linphone_57x57"
|
||||
android:label="@string/app_name"/>
|
|
@ -20,11 +20,15 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.FragmentActivity;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
|
||||
/**
|
||||
* @author Margaux Clerc
|
||||
*/
|
||||
public class ChatActivity extends FragmentActivity {
|
||||
private static final String CHAT_FRAGMENT = "chatFragment";
|
||||
private ChatFragment chatFragment;
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
@ -39,6 +43,17 @@ public class ChatActivity extends FragmentActivity {
|
|||
ChatFragment fragment = new ChatFragment();
|
||||
fragment.setArguments(extras);
|
||||
getSupportFragmentManager().beginTransaction().add(R.id.fragmentContainer, fragment, "ChatFragment").commit();
|
||||
|
||||
FragmentManager fm = getSupportFragmentManager();
|
||||
chatFragment = (ChatFragment) fm.findFragmentByTag(CHAT_FRAGMENT);
|
||||
|
||||
// If the Fragment is non-null, then it is currently being
|
||||
// retained across a configuration change.
|
||||
if (chatFragment == null) {
|
||||
chatFragment = new ChatFragment();
|
||||
chatFragment.setArguments(extras);
|
||||
fm.beginTransaction().add(R.id.fragmentContainer, chatFragment, CHAT_FRAGMENT).commit();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -124,6 +124,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
|||
super.onCreate(savedInstanceState);
|
||||
instance = this;
|
||||
View view = inflater.inflate(R.layout.chat, container, false);
|
||||
|
||||
// Retain the fragment across configuration changes
|
||||
setRetainInstance(true);
|
||||
|
||||
//Retrieve parameter from intent
|
||||
sipUri = getArguments().getString("SipUri");
|
||||
|
@ -438,12 +441,16 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
|||
|
||||
LinphoneService.instance().removeMessageNotification();
|
||||
|
||||
if (LinphoneActivity.isInstanciated()) {
|
||||
LinphoneActivity.instance().updateChatFragment(null);
|
||||
}
|
||||
|
||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||
if (lc != null) {
|
||||
lc.removeListener(mListener);
|
||||
}
|
||||
|
||||
getActivity().getIntent().putExtra("messageDraft", message.getText().toString());
|
||||
onSaveInstanceState(getArguments());
|
||||
super.onPause();
|
||||
}
|
||||
|
||||
|
@ -462,6 +469,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
|||
if (getResources().getBoolean(R.bool.show_statusbar_only_on_dialer)) {
|
||||
LinphoneActivity.instance().hideStatusBar();
|
||||
}
|
||||
LinphoneActivity.instance().updateChatFragment(this);
|
||||
}
|
||||
|
||||
String draft = getArguments().getString("messageDraft");
|
||||
|
@ -557,7 +565,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
|
|||
|
||||
@Override
|
||||
protected void onPostExecute(byte[] result) {
|
||||
progressDialog.dismiss();
|
||||
if (progressDialog != null && progressDialog.isShowing()) {
|
||||
progressDialog.dismiss();
|
||||
}
|
||||
|
||||
mUploadingImageStream = new ByteArrayInputStream(result);
|
||||
|
||||
|
|
|
@ -47,7 +47,7 @@ public class ChatStorage {
|
|||
private static final int OUTGOING = 0;
|
||||
private static final int READ = 1;
|
||||
private static final int NOT_READ = 0;
|
||||
|
||||
|
||||
private static ChatStorage instance;
|
||||
private Context context;
|
||||
private SQLiteDatabase db;
|
||||
|
@ -66,7 +66,7 @@ public class ChatStorage {
|
|||
instance.close();
|
||||
instance = new ChatStorage(LinphoneService.instance().getApplicationContext());
|
||||
}
|
||||
|
||||
|
||||
private boolean isVersionUsingNewChatStorage() {
|
||||
try {
|
||||
return context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionCode >= 2200;
|
||||
|
@ -75,7 +75,7 @@ public class ChatStorage {
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
private ChatStorage(Context c) {
|
||||
context = c;
|
||||
boolean useLinphoneStorage = c.getResources().getBoolean(R.bool.use_linphone_chat_storage);
|
||||
|
@ -84,24 +84,24 @@ public class ChatStorage {
|
|||
updateNeeded = updateNeeded && !isVersionUsingNewChatStorage();
|
||||
useNativeAPI = useLinphoneStorage && !updateNeeded;
|
||||
Log.d("Using native API: " + useNativeAPI);
|
||||
|
||||
|
||||
if (!useNativeAPI) {
|
||||
ChatHelper chatHelper = new ChatHelper(context);
|
||||
db = chatHelper.getWritableDatabase();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void close() {
|
||||
if (!useNativeAPI) {
|
||||
db.close();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void updateMessageStatus(String to, String message, int status) {
|
||||
if (useNativeAPI) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
String[] whereArgs = { String.valueOf(OUTGOING), to, message };
|
||||
Cursor c = db.query(TABLE_NAME, null, "direction LIKE ? AND remoteContact LIKE ? AND message LIKE ?", whereArgs, null, null, "id DESC");
|
||||
|
||||
|
@ -114,29 +114,29 @@ public class ChatStorage {
|
|||
}
|
||||
}
|
||||
c.close();
|
||||
|
||||
|
||||
if (id != null && id.length() > 0) {
|
||||
int intID = Integer.parseInt(id);
|
||||
updateMessageStatus(to, intID, status);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void updateMessageStatus(String to, int id, int status) {
|
||||
if (useNativeAPI) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
values.put("status", status);
|
||||
|
||||
|
||||
db.update(TABLE_NAME, values, "id LIKE " + id, null);
|
||||
}
|
||||
|
||||
|
||||
public int saveTextMessage(String from, String to, String message, long time) {
|
||||
if (useNativeAPI) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
if (from.equals("")) {
|
||||
values.put("localContact", from);
|
||||
|
@ -155,12 +155,12 @@ public class ChatStorage {
|
|||
values.put("time", time);
|
||||
return (int) db.insert(TABLE_NAME, null, values);
|
||||
}
|
||||
|
||||
|
||||
public int saveImageMessage(String from, String to, Bitmap image, String url, long time) {
|
||||
if (useNativeAPI) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
if (from.equals("")) {
|
||||
values.put("localContact", from);
|
||||
|
@ -176,73 +176,73 @@ public class ChatStorage {
|
|||
values.put("status", LinphoneChatMessage.State.Idle.toInt());
|
||||
}
|
||||
values.put("url", url);
|
||||
|
||||
|
||||
if (image != null) {
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
image.compress(CompressFormat.JPEG, 100, baos);
|
||||
values.put("image", baos.toByteArray());
|
||||
}
|
||||
|
||||
|
||||
values.put("time", time);
|
||||
return (int) db.insert(TABLE_NAME, null, values);
|
||||
}
|
||||
|
||||
|
||||
public void saveImage(int id, Bitmap image) {
|
||||
if (useNativeAPI) {
|
||||
//Handled before this point
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (image == null)
|
||||
return;
|
||||
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
image.compress(CompressFormat.JPEG, 100, baos);
|
||||
values.put("image", baos.toByteArray());
|
||||
|
||||
|
||||
db.update(TABLE_NAME, values, "id LIKE " + id, null);
|
||||
}
|
||||
|
||||
|
||||
public int saveDraft(String to, String message) {
|
||||
if (useNativeAPI) {
|
||||
//TODO
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
values.put("remoteContact", to);
|
||||
values.put("message", message);
|
||||
return (int) db.insert(DRAFT_TABLE_NAME, null, values);
|
||||
}
|
||||
|
||||
|
||||
public void updateDraft(String to, String message) {
|
||||
if (useNativeAPI) {
|
||||
//TODO
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
ContentValues values = new ContentValues();
|
||||
values.put("message", message);
|
||||
|
||||
|
||||
db.update(DRAFT_TABLE_NAME, values, "remoteContact LIKE \"" + to + "\"", null);
|
||||
}
|
||||
|
||||
|
||||
public void deleteDraft(String to) {
|
||||
if (useNativeAPI) {
|
||||
//TODO
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
db.delete(DRAFT_TABLE_NAME, "remoteContact LIKE \"" + to + "\"", null);
|
||||
}
|
||||
|
||||
|
||||
public String getDraft(String to) {
|
||||
if (useNativeAPI) {
|
||||
//TODO
|
||||
return "";
|
||||
}
|
||||
|
||||
|
||||
Cursor c = db.query(DRAFT_TABLE_NAME, null, "remoteContact LIKE \"" + to + "\"", null, null, null, "id ASC");
|
||||
|
||||
String message = null;
|
||||
|
@ -254,13 +254,13 @@ public class ChatStorage {
|
|||
}
|
||||
}
|
||||
c.close();
|
||||
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
|
||||
public List<String> getDrafts() {
|
||||
List<String> drafts = new ArrayList<String>();
|
||||
|
||||
|
||||
if (useNativeAPI) {
|
||||
//TODO
|
||||
} else {
|
||||
|
@ -276,16 +276,16 @@ public class ChatStorage {
|
|||
}
|
||||
c.close();
|
||||
}
|
||||
|
||||
|
||||
return drafts;
|
||||
}
|
||||
|
||||
|
||||
public List<ChatMessage> getMessages(String correspondent) {
|
||||
List<ChatMessage> chatMessages = new ArrayList<ChatMessage>();
|
||||
|
||||
|
||||
if (!useNativeAPI) {
|
||||
Cursor c = db.query(TABLE_NAME, null, "remoteContact LIKE \"" + correspondent + "\"", null, null, null, "id ASC");
|
||||
|
||||
|
||||
while (c.moveToNext()) {
|
||||
try {
|
||||
String message, timestamp, url;
|
||||
|
@ -297,7 +297,7 @@ public class ChatStorage {
|
|||
byte[] rawImage = c.getBlob(c.getColumnIndex("image"));
|
||||
int read = c.getInt(c.getColumnIndex("read"));
|
||||
url = c.getString(c.getColumnIndex("url"));
|
||||
|
||||
|
||||
ChatMessage chatMessage = new ChatMessage(id, message, rawImage, timestamp, direction == INCOMING, status, read == READ);
|
||||
chatMessage.setUrl(url);
|
||||
chatMessages.add(chatMessage);
|
||||
|
@ -311,26 +311,26 @@ public class ChatStorage {
|
|||
LinphoneChatMessage[] history = room.getHistory();
|
||||
for (int i = 0; i < history.length; i++) {
|
||||
LinphoneChatMessage message = history[i];
|
||||
|
||||
|
||||
Bitmap bm = null;
|
||||
String url = message.getExternalBodyUrl();
|
||||
if (url != null && !url.startsWith("http")) {
|
||||
bm = BitmapFactory.decodeFile(url);
|
||||
}
|
||||
ChatMessage chatMessage = new ChatMessage(i+1, message.getText(), bm,
|
||||
String.valueOf(message.getTime()), !message.isOutgoing(),
|
||||
ChatMessage chatMessage = new ChatMessage(i+1, message.getText(), bm,
|
||||
String.valueOf(message.getTime()), !message.isOutgoing(),
|
||||
message.getStatus().toInt(), message.isRead());
|
||||
chatMessage.setUrl(url);
|
||||
chatMessages.add(chatMessage);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return chatMessages;
|
||||
}
|
||||
|
||||
public String getTextMessageForId(LinphoneChatRoom chatroom, int id) {
|
||||
String message = null;
|
||||
|
||||
|
||||
if (useNativeAPI) {
|
||||
LinphoneChatMessage[] history = chatroom.getHistory();
|
||||
for (LinphoneChatMessage msg : history) {
|
||||
|
@ -341,7 +341,7 @@ public class ChatStorage {
|
|||
}
|
||||
} else {
|
||||
Cursor c = db.query(TABLE_NAME, null, "id LIKE " + id, null, null, null, null);
|
||||
|
||||
|
||||
if (c.moveToFirst()) {
|
||||
try {
|
||||
message = c.getString(c.getColumnIndex("message"));
|
||||
|
@ -351,10 +351,10 @@ public class ChatStorage {
|
|||
}
|
||||
c.close();
|
||||
}
|
||||
|
||||
|
||||
return message;
|
||||
}
|
||||
|
||||
|
||||
public LinphoneChatMessage getMessage(LinphoneChatRoom chatroom, int id) {
|
||||
if (useNativeAPI) {
|
||||
LinphoneChatMessage[] history = chatroom.getHistory();
|
||||
|
@ -366,7 +366,7 @@ public class ChatStorage {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public void removeDiscussion(String correspondent) {
|
||||
if (useNativeAPI) {
|
||||
LinphoneChatRoom chatroom = LinphoneManager.getLc().getOrCreateChatRoom(correspondent);
|
||||
|
@ -375,30 +375,29 @@ public class ChatStorage {
|
|||
db.delete(TABLE_NAME, "remoteContact LIKE \"" + correspondent + "\"", null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public ArrayList<String> getChatList() {
|
||||
ArrayList<String> chatList = new ArrayList<String>();
|
||||
|
||||
|
||||
if (useNativeAPI) {
|
||||
LinphoneChatRoom[] chats = LinphoneManager.getLc().getChatRooms();
|
||||
List<LinphoneChatRoom> rooms = new ArrayList<LinphoneChatRoom>();
|
||||
|
||||
|
||||
for (LinphoneChatRoom chatroom : chats) {
|
||||
if (chatroom.getHistory(1).length > 0) {
|
||||
rooms.add(chatroom);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (rooms.size() > 1) {
|
||||
Collections.sort(rooms, new Comparator<LinphoneChatRoom>() {
|
||||
@Override
|
||||
public int compare(LinphoneChatRoom a, LinphoneChatRoom b) {
|
||||
LinphoneChatMessage[] messagesA = a.getHistory(1);
|
||||
LinphoneChatMessage[] messagesB = b.getHistory(1);
|
||||
long atime, btime;
|
||||
// /!\ Warning: Have to take the second element because it returns two even when asking for only one...
|
||||
atime = messagesA.length > 1 ? messagesA[1].getTime() : messagesA[0].getTime();
|
||||
btime = messagesA.length > 1 ? messagesB[1].getTime() : messagesB[0].getTime();
|
||||
long atime = messagesA[0].getTime();
|
||||
long btime = messagesB[0].getTime();
|
||||
|
||||
if (atime > btime)
|
||||
return -1;
|
||||
else if (btime > atime)
|
||||
|
@ -408,7 +407,7 @@ public class ChatStorage {
|
|||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
for (LinphoneChatRoom chatroom : rooms) {
|
||||
chatList.add(chatroom.getPeerAddress().asStringUriOnly());
|
||||
}
|
||||
|
@ -423,7 +422,7 @@ public class ChatStorage {
|
|||
}
|
||||
c.close();
|
||||
}
|
||||
|
||||
|
||||
return chatList;
|
||||
}
|
||||
|
||||
|
@ -440,7 +439,7 @@ public class ChatStorage {
|
|||
db.delete(TABLE_NAME, "id LIKE " + id, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void markMessageAsRead(int id) {
|
||||
if (!useNativeAPI) {
|
||||
ContentValues values = new ContentValues();
|
||||
|
@ -448,13 +447,13 @@ public class ChatStorage {
|
|||
db.update(TABLE_NAME, values, "id LIKE " + id, null);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void markConversationAsRead(LinphoneChatRoom chatroom) {
|
||||
if (useNativeAPI) {
|
||||
chatroom.markAsRead();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public int getUnreadMessageCount() {
|
||||
int count;
|
||||
if (!useNativeAPI) {
|
||||
|
@ -489,10 +488,10 @@ public class ChatStorage {
|
|||
//Handled before this point
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
String[] columns = { "image" };
|
||||
Cursor c = db.query(TABLE_NAME, columns, "id LIKE " + id + "", null, null, null, null);
|
||||
|
||||
|
||||
if (c.moveToFirst()) {
|
||||
byte[] rawImage = c.getBlob(c.getColumnIndex("image"));
|
||||
c.close();
|
||||
|
@ -504,20 +503,20 @@ public class ChatStorage {
|
|||
}
|
||||
|
||||
class ChatHelper extends SQLiteOpenHelper {
|
||||
|
||||
|
||||
private static final int DATABASE_VERSION = 15;
|
||||
private static final String DATABASE_NAME = "linphone-android";
|
||||
|
||||
|
||||
ChatHelper(Context context) {
|
||||
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate(SQLiteDatabase db) {
|
||||
db.execSQL("CREATE TABLE " + TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, localContact TEXT NOT NULL, remoteContact TEXT NOT NULL, direction INTEGER, message TEXT, image BLOB, url TEXT, time NUMERIC, read INTEGER, status INTEGER);");
|
||||
db.execSQL("CREATE TABLE " + DRAFT_TABLE_NAME + " (id INTEGER PRIMARY KEY AUTOINCREMENT, remoteContact TEXT NOT NULL, message TEXT);");
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME + ";");
|
||||
|
@ -525,4 +524,4 @@ public class ChatStorage {
|
|||
onCreate(db);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -22,6 +22,7 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import org.linphone.compatibility.Compatibility;
|
||||
import org.linphone.core.LinphoneCore;
|
||||
import org.linphone.core.LinphoneFriend;
|
||||
|
||||
import android.content.ContentResolver;
|
||||
|
@ -104,10 +105,13 @@ public class Contact implements Serializable {
|
|||
|
||||
public void refresh(ContentResolver cr) {
|
||||
this.numbersOrAddresses = Compatibility.extractContactNumbersAndAddresses(id, cr);
|
||||
for(LinphoneFriend friend : LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList()) {
|
||||
if (friend.getRefKey().equals(id)) {
|
||||
hasFriends = true;
|
||||
this.numbersOrAddresses.add(friend.getAddress().asStringUriOnly());
|
||||
LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull();
|
||||
if(lc != null && lc.getFriendList() != null) {
|
||||
for (LinphoneFriend friend :lc.getFriendList()){
|
||||
if (friend.getRefKey().equals(id)) {
|
||||
hasFriends = true;
|
||||
this.numbersOrAddresses.add(friend.getAddress().asStringUriOnly());
|
||||
}
|
||||
}
|
||||
}
|
||||
this.name = Compatibility.refreshContactName(cr, id);
|
||||
|
|
|
@ -79,8 +79,9 @@ public class ContactFragment extends Fragment implements OnClickListener {
|
|||
private OnClickListener chatListener = new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
if (LinphoneActivity.isInstanciated())
|
||||
if (LinphoneActivity.isInstanciated()) {
|
||||
LinphoneActivity.instance().displayChat(v.getTag().toString());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -147,6 +148,7 @@ public class ContactFragment extends Fragment implements OnClickListener {
|
|||
v.findViewById(R.id.start_chat).setOnClickListener(chatListener);
|
||||
LinphoneProxyConfig lpc = LinphoneManager.getLc().getDefaultProxyConfig();
|
||||
if (lpc != null) {
|
||||
displayednumberOrAddress = lpc.normalizePhoneNumber(displayednumberOrAddress);
|
||||
if (!displayednumberOrAddress.startsWith("sip:")) {
|
||||
numberOrAddress = "sip:" + displayednumberOrAddress;
|
||||
}
|
||||
|
|
|
@ -593,9 +593,8 @@ public class ContactsManager {
|
|||
c.close();
|
||||
return address;
|
||||
}
|
||||
c.close();
|
||||
}
|
||||
|
||||
c.close();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
|
@ -199,7 +199,7 @@ public class DialerFragment extends Fragment {
|
|||
mAddress.setText(intent.getData().getSchemeSpecificPart());
|
||||
} else {
|
||||
Uri contactUri = intent.getData();
|
||||
String address = ContactsManager.getInstance().queryAddressOrNumber(getActivity().getContentResolver(),contactUri);
|
||||
String address = ContactsManager.getInstance().queryAddressOrNumber(LinphoneService.instance().getContentResolver(),contactUri);
|
||||
if(address != null) {
|
||||
mAddress.setText(address);
|
||||
} else {
|
||||
|
|
|
@ -53,8 +53,11 @@ public class EditContactFragment extends Fragment {
|
|||
isNewContact = false;
|
||||
contactID = Integer.parseInt(contact.getID());
|
||||
contact.refresh(getActivity().getContentResolver());
|
||||
}
|
||||
if (getArguments().getString("NewSipAdress") != null) {
|
||||
if (getArguments().getString("NewSipAdress") != null) {
|
||||
newSipOrNumberToAdd = getArguments().getString("NewSipAdress");
|
||||
}
|
||||
|
||||
} else if (getArguments().getString("NewSipAdress") != null) {
|
||||
newSipOrNumberToAdd = getArguments().getString("NewSipAdress");
|
||||
isNewContact = true;
|
||||
}
|
||||
|
@ -257,7 +260,7 @@ public class EditContactFragment extends Fragment {
|
|||
if (forceAddNumber) {
|
||||
tempNounoa = new NewOrUpdatedNumberOrAddress(isSip);
|
||||
} else {
|
||||
if(isNewContact) {
|
||||
if(isNewContact || newSipOrNumberToAdd != null) {
|
||||
tempNounoa = new NewOrUpdatedNumberOrAddress(isSip, numberOrAddress);
|
||||
} else {
|
||||
tempNounoa = new NewOrUpdatedNumberOrAddress(numberOrAddress, isSip);
|
||||
|
|
|
@ -92,6 +92,7 @@ public class InCallActivity extends FragmentActivity implements OnClickListener
|
|||
private Animation slideOutLeftToRight, slideInRightToLeft, slideInBottomToTop, slideInTopToBottom, slideOutBottomToTop, slideOutTopToBottom;
|
||||
private CountDownTimer timer;
|
||||
private boolean isVideoCallPaused = false;
|
||||
AcceptCallUpdateDialogFragment callUpdateDialog;
|
||||
|
||||
private TableLayout callsList;
|
||||
private LayoutInflater inflater;
|
||||
|
@ -192,6 +193,8 @@ public class InCallActivity extends FragmentActivity implements OnClickListener
|
|||
timer = new CountDownTimer(SECONDS_BEFORE_DENYING_CALL_UPDATE, 1000) {
|
||||
public void onTick(long millisUntilFinished) { }
|
||||
public void onFinish() {
|
||||
if (callUpdateDialog != null)
|
||||
callUpdateDialog.dismiss();
|
||||
acceptCallUpdate(false);
|
||||
}
|
||||
}.start();
|
||||
|
@ -1140,7 +1143,7 @@ public class InCallActivity extends FragmentActivity implements OnClickListener
|
|||
|
||||
private void showAcceptCallUpdateDialog() {
|
||||
FragmentManager fm = getSupportFragmentManager();
|
||||
AcceptCallUpdateDialogFragment callUpdateDialog = new AcceptCallUpdateDialogFragment();
|
||||
callUpdateDialog = new AcceptCallUpdateDialogFragment();
|
||||
callUpdateDialog.show(fm, "Accept Call Update Dialog");
|
||||
}
|
||||
|
||||
|
|
|
@ -102,6 +102,7 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
|
|||
private FragmentsAvailable currentFragment, nextFragment;
|
||||
private List<FragmentsAvailable> fragmentsHistory;
|
||||
private Fragment dialerFragment, messageListFragment, friendStatusListenerFragment;
|
||||
private ChatFragment chatFragment;
|
||||
private SavedState dialerSavedState;
|
||||
private boolean isAnimationDisabled = false, preferLinphoneContacts = false;
|
||||
private OrientationEventListener mOrientationHelper;
|
||||
|
@ -177,6 +178,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
|
|||
mListener = new LinphoneCoreListenerBase(){
|
||||
@Override
|
||||
public void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message) {
|
||||
if(!displayChatMessageNotification(message.getFrom().asStringUriOnly())) {
|
||||
cr.markAsRead();
|
||||
}
|
||||
displayMissedChats(getChatStorage().getUnreadMessageCount());
|
||||
if (messageListFragment != null && messageListFragment.isVisible()) {
|
||||
((ChatListFragment) messageListFragment).refresh();
|
||||
|
@ -597,6 +601,16 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
|
|||
|
||||
public void displayAbout() {
|
||||
changeCurrentFragment(FragmentsAvailable.ABOUT, null);
|
||||
settings.setSelected(true);
|
||||
}
|
||||
|
||||
public boolean displayChatMessageNotification(String address){
|
||||
if(chatFragment != null) {
|
||||
if(chatFragment.getSipUri().equals(address)){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void displayChat(String sipUri) {
|
||||
|
@ -641,6 +655,9 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
|
|||
changeCurrentFragment(FragmentsAvailable.CHATLIST, null);
|
||||
displayChat(sipUri);
|
||||
}
|
||||
if (messageListFragment != null && messageListFragment.isVisible()) {
|
||||
((ChatListFragment) messageListFragment).refresh();
|
||||
}
|
||||
} else {
|
||||
Intent intent = new Intent(this, ChatActivity.class);
|
||||
intent.putExtra("SipUri", sipUri);
|
||||
|
@ -744,6 +761,10 @@ public class LinphoneActivity extends FragmentActivity implements OnClickListene
|
|||
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN | WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
|
||||
}
|
||||
|
||||
public void updateChatFragment(ChatFragment fragment) {
|
||||
chatFragment = fragment;
|
||||
}
|
||||
|
||||
public void updateChatListFragment(ChatListFragment fragment) {
|
||||
messageListFragment = fragment;
|
||||
}
|
||||
|
|
|
@ -717,10 +717,12 @@ public class LinphoneManager implements LinphoneCoreListener {
|
|||
try {
|
||||
Contact contact = ContactsManager.getInstance().findContactWithAddress(mServiceContext.getContentResolver(),from);
|
||||
if (!mServiceContext.getResources().getBoolean(R.bool.disable_chat__message_notification)) {
|
||||
if(contact != null) {
|
||||
LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getName(), textMessage);
|
||||
} else {
|
||||
LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage);
|
||||
if(LinphoneActivity.isInstanciated() && LinphoneActivity.instance().displayChatMessageNotification(from.asStringUriOnly())) {
|
||||
if (contact != null) {
|
||||
LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), contact.getName(), textMessage);
|
||||
} else {
|
||||
LinphoneService.instance().displayMessageNotification(from.asStringUriOnly(), from.getUserName(), textMessage);
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
|
|
@ -965,8 +965,8 @@ public class LinphonePreferences {
|
|||
// Advanced settings
|
||||
public void setDebugEnabled(boolean enabled) {
|
||||
getConfig().setBool("app", "debug", enabled);
|
||||
LinphoneCoreFactory.instance().setDebugMode(enabled, getString(R.string.app_name));
|
||||
LinphoneCoreFactory.instance().enableLogCollection(enabled);
|
||||
LinphoneCoreFactory.instance().setDebugMode(enabled, getString(R.string.app_name));
|
||||
}
|
||||
|
||||
public boolean isDebugEnabled() {
|
||||
|
|
|
@ -494,7 +494,7 @@ public final class LinphoneService extends Service {
|
|||
//MANUFACTURER doesn't exist in android 1.5.
|
||||
//sb.append("MANUFACTURER=").append(Build.MANUFACTURER).append("\n");
|
||||
sb.append("SDK=").append(Build.VERSION.SDK_INT).append("\n");
|
||||
sb.append("EABI=").append(Build.CPU_ABI).append("\n");
|
||||
sb.append("EABI=").append(Version.getCpuAbis().get(0)).append("\n");
|
||||
Log.i(sb.toString());
|
||||
}
|
||||
|
||||
|
|
|
@ -50,6 +50,7 @@ public class ApiTwentyOnePlus {
|
|||
.setSmallIcon(R.drawable.chat_icon_over)
|
||||
.setAutoCancel(true)
|
||||
.setContentIntent(intent)
|
||||
.setDefaults(Notification.DEFAULT_ALL)
|
||||
.setLargeIcon(contactIcon)
|
||||
.setCategory(Notification.CATEGORY_MESSAGE)
|
||||
.setVisibility(Notification.VISIBILITY_PRIVATE)
|
||||
|
|
|
@ -381,8 +381,9 @@ public class SetupActivity extends FragmentActivity implements OnClickListener {
|
|||
back.setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
public void isAccountVerified() {
|
||||
public void isAccountVerified(String username) {
|
||||
Toast.makeText(this, getString(R.string.setup_account_validated), Toast.LENGTH_LONG).show();
|
||||
LinphoneManager.getLcIfManagerNotDestroyedOrNull().refreshRegisters();
|
||||
launchEchoCancellerCalibration(true);
|
||||
}
|
||||
|
||||
|
|
|
@ -59,7 +59,7 @@ public class WizardConfirmFragment extends Fragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
private void isAccountVerified(String username) {
|
||||
private void isAccountVerified(final String username) {
|
||||
final Runnable runNotReachable = new Runnable() {
|
||||
public void run() {
|
||||
Toast.makeText(getActivity(), getString(R.string.wizard_server_unavailable), Toast.LENGTH_LONG).show();
|
||||
|
@ -78,7 +78,7 @@ public class WizardConfirmFragment extends Fragment {
|
|||
|
||||
Runnable runOk = new Runnable() {
|
||||
public void run() {
|
||||
SetupActivity.instance().isAccountVerified();
|
||||
SetupActivity.instance().isAccountVerified(username);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -157,7 +157,8 @@ public class WizardFragment extends Fragment {
|
|||
|
||||
private boolean isUsernameCorrect(String username) {
|
||||
if (getResources().getBoolean(R.bool.allow_only_phone_numbers_in_wizard)) {
|
||||
return username.matches("^(\\+)?(\\d-)?(\\d{3}-)?(\\d{3}-)?\\d{4,}$");
|
||||
LinphoneProxyConfig lpc = LinphoneManager.getLc().createProxyConfig();
|
||||
return lpc.isPhoneNumber(username);
|
||||
} else {
|
||||
return username.matches("^[a-zA-Z]+[a-zA-Z0-9.\\-_]{2,}$");
|
||||
}
|
||||
|
|
|
@ -155,8 +155,8 @@ public class Digit extends Button implements AddressAware {
|
|||
if(id == R.id.Digit1 && lc.getCalls().length == 0){
|
||||
String voiceMail = LinphonePreferences.instance().getVoiceMailUri();
|
||||
mAddress.getEditableText().clear();
|
||||
mAddress.getEditableText().append(voiceMail);
|
||||
if(voiceMail != null){
|
||||
mAddress.getEditableText().append(voiceMail);
|
||||
LinphoneManager.getInstance().newOutgoingCall(mAddress);
|
||||
}
|
||||
return true;
|
||||
|
|
|
@ -1 +1 @@
|
|||
Subproject commit 7d27eb87c5dbd530e1c0a95cd0da2e233fb4d6b5
|
||||
Subproject commit 6fd479005cf9e9be15449cab34717fe17bda6dc5
|
|
@ -1 +1 @@
|
|||
Subproject commit ebe07ed33ef00f8ec133374977a5cadf42044fee
|
||||
Subproject commit 4a4f757f66b02cf8834fd8d7a939bf54b245ad7e
|
|
@ -1 +1 @@
|
|||
Subproject commit 5a0c92bac32d086e176e2b10d13c7fd5bb4c1032
|
||||
Subproject commit 7a5f881221815f2621e876d3a677840053969d54
|
|
@ -4,6 +4,7 @@ import junit.framework.Assert;
|
|||
|
||||
import org.linphone.ContactsFragment;
|
||||
import org.linphone.LinphoneActivity;
|
||||
import org.linphone.R;
|
||||
|
||||
import android.test.suitebuilder.annotation.LargeTest;
|
||||
import android.test.suitebuilder.annotation.MediumTest;
|
||||
|
@ -34,6 +35,8 @@ public class Contacts extends SampleTest {
|
|||
|
||||
solo.clickOnText(iContext.getString(org.linphone.test.R.string.contact_name));
|
||||
solo.clickOnText(aContext.getString(org.linphone.R.string.delete_contact));
|
||||
solo.sleep(1000);
|
||||
solo.clickOnText(aContext.getString(R.string.button_ok));
|
||||
|
||||
Assert.assertFalse(solo.searchText(iContext.getString(org.linphone.test.R.string.contact_name)));
|
||||
}
|
||||
|
@ -70,6 +73,7 @@ public class Contacts extends SampleTest {
|
|||
@LargeTest
|
||||
public void testDEditContactAddSipAddressAndRemoveNumber() {
|
||||
goToContacts();
|
||||
solo.clickOnText(aContext.getString(org.linphone.R.string.button_all_contacts));
|
||||
|
||||
solo.clickOnText(iContext.getString(org.linphone.test.R.string.contact_name));
|
||||
solo.clickOnText(aContext.getString(org.linphone.R.string.button_edit));
|
||||
|
@ -110,6 +114,8 @@ public class Contacts extends SampleTest {
|
|||
|
||||
solo.clickOnText(iContext.getString(org.linphone.test.R.string.contact_name));
|
||||
solo.clickOnText(aContext.getString(org.linphone.R.string.delete_contact));
|
||||
solo.sleep(1000);
|
||||
solo.clickOnText(aContext.getString(R.string.button_ok));
|
||||
Assert.assertFalse(solo.searchText(iContext.getString(org.linphone.test.R.string.contact_name)));
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue