Merge remote-tracking branch 'origin/master' into dev_in_app_purchase

Conflicts:
	AndroidManifest.xml
This commit is contained in:
Sylvain Berfini 2015-05-12 17:15:16 +02:00
commit d7bb9a7f19
40 changed files with 272 additions and 170 deletions

1
.gitignore vendored
View file

@ -37,3 +37,4 @@ submodules/externals/build/openh264/x86
tests/*$py.class
tests/build.xml
tests/project.properties
ant_password.properties

View file

@ -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>

View file

@ -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 "***************************************************************************"
@ -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
View file

@ -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:
--------------------

View file

@ -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

View file

@ -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.

View file

@ -1,5 +1,7 @@
package org.linphone.tester;
import java.util.List;
import org.linphone.core.LinphoneCoreFactory;
import org.linphone.mediastream.Version;
@ -23,26 +25,36 @@ 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_tester-"+eabi);
} catch (UnsatisfiedLinkError ule) {
Log.w("linphone", "Failed to load liblinphone_tester-"+eabi);
System.loadLibrary("linphone_tester");
System.loadLibrary("linphone-" + abi);
Log.i("LinphoneCoreFactoryImpl","Loading done with " + abi);
libLoaded=true;
break;
}catch(Throwable e) {
if (firstException == null) firstException=e;
}
}
if (!libLoaded){
throw new RuntimeException(firstException);
}else{
Version.dumpCapabilities();
}
}
public native int run(String args[]);
public static native void keepAccounts(boolean keep);

View file

@ -79,12 +79,28 @@
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"/>
</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:layout_below="@id/setup_password"
android:hint="@string/setup_password_confirm_hint"
android:singleLine="true"
android:lines="1"
@ -98,7 +114,7 @@
<ImageView
android:contentDescription="@string/content_description_setup_ok"
android:id="@+id/setup_password_ok"
android:id="@+id/setup_confirm_password_ok"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="5dp"
@ -160,12 +176,6 @@
</RelativeLayout>
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="10dp"
android:paddingRight="10dp" />
</LinearLayout>
</LinearLayout>

View file

@ -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"

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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>

View file

@ -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 -->

View file

@ -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"/>

View file

@ -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();
}
}
}

View file

@ -125,6 +125,9 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC
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");
displayName = getArguments().getString("DisplayName");
@ -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) {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
mUploadingImageStream = new ByteArrayInputStream(result);

View file

@ -395,10 +395,9 @@ public class ChatStorage {
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)

View file

@ -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,12 +105,15 @@ public class Contact implements Serializable {
public void refresh(ContentResolver cr) {
this.numbersOrAddresses = Compatibility.extractContactNumbersAndAddresses(id, cr);
for(LinphoneFriend friend : LinphoneManager.getLcIfManagerNotDestroyedOrNull().getFriendList()) {
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);
}
}

View file

@ -79,9 +79,10 @@ 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());
}
}
};
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@ -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;
}

View file

@ -593,9 +593,8 @@ public class ContactsManager {
c.close();
return address;
}
}
c.close();
}
return null;
}

View file

@ -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 {

View file

@ -53,9 +53,12 @@ public class EditContactFragment extends Fragment {
isNewContact = false;
contactID = Integer.parseInt(contact.getID());
contact.refresh(getActivity().getContentResolver());
}
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);

View file

@ -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");
}

View file

@ -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;
}

View file

@ -717,12 +717,14 @@ 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) {
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) {
Log.e(e);
}

View file

@ -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() {

View file

@ -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());
}

View file

@ -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)

View file

@ -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);
}

View file

@ -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);
}
};

View file

@ -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,}$");
}

View file

@ -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

View file

@ -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)));
}