From 5cdc58eda5edd0ce86aadec67e9692d704bc747b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Aug 2016 14:40:15 +0200 Subject: [PATCH 1/6] Use compatibility method for setTextAppearance --- src/org/linphone/ChatFragment.java | 8 ++-- .../linphone/compatibility/ApiElevenPlus.java | 6 +++ .../compatibility/ApiTwentyThreePlus.java | 48 +++++++++++++++++++ .../linphone/compatibility/Compatibility.java | 10 ++++ 4 files changed, 68 insertions(+), 4 deletions(-) create mode 100644 src/org/linphone/compatibility/ApiTwentyThreePlus.java diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 5dfdadc77..77d160176 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -1187,8 +1187,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); layoutParams.setMargins(100, 10, 10, 10); holder.background.setBackgroundResource(R.drawable.resizable_chat_bubble_outgoing); - holder.contactName.setTextAppearance(R.style.font3); - holder.fileTransferAction.setTextAppearance(R.style.font15); + Compatibility.setTextAppearance(holder.contactName, getActivity(), R.style.font3); + Compatibility.setTextAppearance(holder.fileTransferAction, getActivity(), R.style.font15); holder.fileTransferAction.setBackgroundResource(R.drawable.resizable_confirm_delete_button); } else { if (isEditMode) { @@ -1199,8 +1199,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC layoutParams.setMargins(10, 10, 100, 10); } holder.background.setBackgroundResource(R.drawable.resizable_chat_bubble_incoming); - holder.contactName.setTextAppearance(R.style.font9); - holder.fileTransferAction.setTextAppearance(R.style.font8); + Compatibility.setTextAppearance(holder.contactName, getActivity(), R.style.font9); + Compatibility.setTextAppearance(holder.fileTransferAction, getActivity(), R.style.font8); holder.fileTransferAction.setBackgroundResource(R.drawable.resizable_assistant_button); } holder.bubbleLayout.setLayoutParams(layoutParams); diff --git a/src/org/linphone/compatibility/ApiElevenPlus.java b/src/org/linphone/compatibility/ApiElevenPlus.java index 7b30e5581..ba7711204 100644 --- a/src/org/linphone/compatibility/ApiElevenPlus.java +++ b/src/org/linphone/compatibility/ApiElevenPlus.java @@ -17,6 +17,7 @@ import android.provider.ContactsContract; import android.provider.ContactsContract.CommonDataKinds.SipAddress; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Intents.Insert; +import android.widget.TextView; /* ApiElevenPlus.java @@ -162,4 +163,9 @@ public class ApiElevenPlus { return notif; } + + @SuppressWarnings("deprecation") + public static void setTextAppearance(TextView textview, Context context, int style) { + textview.setTextAppearance(context, style); + } } diff --git a/src/org/linphone/compatibility/ApiTwentyThreePlus.java b/src/org/linphone/compatibility/ApiTwentyThreePlus.java new file mode 100644 index 000000000..8efdfccfe --- /dev/null +++ b/src/org/linphone/compatibility/ApiTwentyThreePlus.java @@ -0,0 +1,48 @@ +package org.linphone.compatibility; + +import java.util.ArrayList; + +import org.linphone.R; + +import android.annotation.TargetApi; +import android.app.Notification; +import android.app.PendingIntent; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.content.Intent; +import android.graphics.Bitmap; +import android.net.Uri; +import android.provider.ContactsContract; +import android.provider.ContactsContract.CommonDataKinds.SipAddress; +import android.provider.ContactsContract.Contacts; +import android.provider.ContactsContract.Intents.Insert; +import android.widget.TextView; + +/* +ApiTwentyThreePlus.java +Copyright (C) 2012 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. +*/ +/** + * @author Sylvain Berfini + */ +@TargetApi(23) +public class ApiTwentyThreePlus { + public static void setTextAppearance(TextView textview, int style) { + textview.setTextAppearance(style); + } +} diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java index cad5a21a0..9fac817b5 100644 --- a/src/org/linphone/compatibility/Compatibility.java +++ b/src/org/linphone/compatibility/Compatibility.java @@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import org.linphone.mediastream.Version; +import android.app.Activity; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; @@ -29,6 +30,7 @@ import android.text.Html; import android.text.Spanned; import android.view.ViewTreeObserver; import android.view.ViewTreeObserver.OnGlobalLayoutListener; +import android.widget.TextView; /** * @author Sylvain Berfini */ @@ -120,4 +122,12 @@ public class Compatibility { }*/ return Html.fromHtml(text); } + + public static void setTextAppearance(TextView textview, Context context, int style) { + if (Version.sdkAboveOrEqual(Version.API23_MARSHMALLOW_60)) { + ApiTwentyThreePlus.setTextAppearance(textview, style); + } else { + ApiElevenPlus.setTextAppearance(textview, context, style); + } + } } From 1a9a5249142c1f44950fc140f2435aed12b1de5b Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Aug 2016 14:55:59 +0200 Subject: [PATCH 2/6] Fix LinphoneContact which wasn't serializable anymore, causing crash when calling from contact --- src/org/linphone/ContactsManager.java | 2 ++ src/org/linphone/LinphoneContact.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/org/linphone/ContactsManager.java b/src/org/linphone/ContactsManager.java index b67f1453d..f36f83896 100644 --- a/src/org/linphone/ContactsManager.java +++ b/src/org/linphone/ContactsManager.java @@ -247,6 +247,8 @@ public class ContactsManager extends ContentObserver { } c.close(); } + } else { + Log.w("[Permission] Read contacts permission wasn't granted, only fetch LinphoneFriends"); } LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); diff --git a/src/org/linphone/LinphoneContact.java b/src/org/linphone/LinphoneContact.java index c53310b1f..ef7f2fa48 100644 --- a/src/org/linphone/LinphoneContact.java +++ b/src/org/linphone/LinphoneContact.java @@ -59,7 +59,7 @@ public class LinphoneContact implements Serializable, Comparable changesToCommit; private transient ArrayList changesToCommit2; private boolean hasSipAddress; - private Bitmap photoBitmap, thumbnailBitmap; + private transient Bitmap photoBitmap, thumbnailBitmap; public LinphoneContact() { addresses = new ArrayList(); From 225cb8e1a5be51360360a5f4e247ff551dcecf56 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Aug 2016 15:05:57 +0200 Subject: [PATCH 3/6] Fix unread chat count when receiving a message with the chatroom open --- src/org/linphone/ChatFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 77d160176..924dc6de6 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -228,6 +228,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if (from.asStringUriOnly().equals(sipUri)) { LinphoneService.instance().removeMessageNotification(); cr.markAsRead(); + LinphoneActivity.instance().updateMissedChatCount(); adapter.addMessage(cr.getHistory(1)[0]); String externalBodyUrl = message.getExternalBodyUrl(); From 4b08094a4a10d6ba721ab414916e36996a0f5bae Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Aug 2016 15:49:50 +0200 Subject: [PATCH 4/6] Fix contacts permission not being asked anymore after fresh install --- res/raw/linphonerc_default | 3 +-- src/org/linphone/LinphoneActivity.java | 2 +- src/org/linphone/LinphonePreferences.java | 12 ++++++++++-- 3 files changed, 12 insertions(+), 5 deletions(-) diff --git a/res/raw/linphonerc_default b/res/raw/linphonerc_default index 6ced4c1b6..a1437cbef 100644 --- a/res/raw/linphonerc_default +++ b/res/raw/linphonerc_default @@ -17,7 +17,6 @@ size=qvga tunnel=disabled push_notification=1 auto_start=1 -debug=0 [tunnel] host= @@ -25,4 +24,4 @@ port=443 [misc] log_collection_upload_server_url=https://www.linphone.org:444/lft.php -file_transfer_server_url=https://www.linphone.org:444/lft.php \ No newline at end of file +file_transfer_server_url=https://www.linphone.org:444/lft.php diff --git a/src/org/linphone/LinphoneActivity.java b/src/org/linphone/LinphoneActivity.java index 3736384aa..f183e3de8 100644 --- a/src/org/linphone/LinphoneActivity.java +++ b/src/org/linphone/LinphoneActivity.java @@ -1167,7 +1167,7 @@ public class LinphoneActivity extends Activity implements OnClickListener, Conta } private boolean willContactsPermissionBeAsked() { - return LinphonePreferences.instance().firstTimeAskingForPermission(Manifest.permission.READ_CONTACTS) || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS); + return LinphonePreferences.instance().firstTimeAskingForPermission(Manifest.permission.READ_CONTACTS, false) || ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS); } public void checkAndRequestWriteContactsPermission() { diff --git a/src/org/linphone/LinphonePreferences.java b/src/org/linphone/LinphonePreferences.java index 5840cd4af..568194d83 100644 --- a/src/org/linphone/LinphonePreferences.java +++ b/src/org/linphone/LinphonePreferences.java @@ -1326,13 +1326,21 @@ public class LinphonePreferences { } public boolean firstTimeAskingForPermission(String permission) { + return firstTimeAskingForPermission(permission, true); + } + + public boolean firstTimeAskingForPermission(String permission, boolean toggle) { boolean firstTime = getConfig().getBool("app", permission, true); - if (firstTime) { - getConfig().setBool("app", permission, false); + if (toggle) { + permissionHasBeenAsked(permission); } return firstTime; } + public void permissionHasBeenAsked(String permission) { + getConfig().setBool("app", permission, false); + } + public boolean isDeviceRingtoneEnabled() { int readExternalStorage = mContext.getPackageManager().checkPermission(Manifest.permission.READ_EXTERNAL_STORAGE, mContext.getPackageName()); return getConfig().getBool("app", "device_ringtone", true) && readExternalStorage == PackageManager.PERMISSION_GRANTED; From d19ab25cb21334959e53f87fa61b51179d757346 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 9 Aug 2016 18:14:18 +0200 Subject: [PATCH 5/6] Updated liblinphone to fix LinphoneFriends without SIP URI database issue --- .../compatibility/ApiTwentyThreePlus.java | 16 ---------------- .../linphone/compatibility/Compatibility.java | 1 - submodules/linphone | 2 +- 3 files changed, 1 insertion(+), 18 deletions(-) diff --git a/src/org/linphone/compatibility/ApiTwentyThreePlus.java b/src/org/linphone/compatibility/ApiTwentyThreePlus.java index 8efdfccfe..c29341502 100644 --- a/src/org/linphone/compatibility/ApiTwentyThreePlus.java +++ b/src/org/linphone/compatibility/ApiTwentyThreePlus.java @@ -1,22 +1,6 @@ package org.linphone.compatibility; -import java.util.ArrayList; - -import org.linphone.R; - import android.annotation.TargetApi; -import android.app.Notification; -import android.app.PendingIntent; -import android.content.ContentUris; -import android.content.ContentValues; -import android.content.Context; -import android.content.Intent; -import android.graphics.Bitmap; -import android.net.Uri; -import android.provider.ContactsContract; -import android.provider.ContactsContract.CommonDataKinds.SipAddress; -import android.provider.ContactsContract.Contacts; -import android.provider.ContactsContract.Intents.Insert; import android.widget.TextView; /* diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java index 9fac817b5..8cfdcd203 100644 --- a/src/org/linphone/compatibility/Compatibility.java +++ b/src/org/linphone/compatibility/Compatibility.java @@ -19,7 +19,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import org.linphone.mediastream.Version; -import android.app.Activity; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; diff --git a/submodules/linphone b/submodules/linphone index 958366ce1..8d21acd7f 160000 --- a/submodules/linphone +++ b/submodules/linphone @@ -1 +1 @@ -Subproject commit 958366ce1928bd0aabaf983082faa8c49e501c4a +Subproject commit 8d21acd7f07fa40604dda8cf44fb114b5f637565 From cfd93ee7e304871dca42974697d4c6c0a04e4d18 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 11 Aug 2016 13:40:03 +0200 Subject: [PATCH 6/6] This should fix issue when running on Android < 19 --- src/org/linphone/KeepAliveReceiver.java | 7 ++-- src/org/linphone/LinphoneService.java | 5 ++- .../linphone/compatibility/ApiElevenPlus.java | 5 +++ .../compatibility/ApiNineteenPlus.java | 32 +++++++++++++++++++ .../linphone/compatibility/Compatibility.java | 9 ++++++ 5 files changed, 52 insertions(+), 6 deletions(-) create mode 100644 src/org/linphone/compatibility/ApiNineteenPlus.java diff --git a/src/org/linphone/KeepAliveReceiver.java b/src/org/linphone/KeepAliveReceiver.java index bc78137e4..87abaf7fe 100644 --- a/src/org/linphone/KeepAliveReceiver.java +++ b/src/org/linphone/KeepAliveReceiver.java @@ -18,6 +18,7 @@ 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.mediastream.Log; @@ -57,9 +58,9 @@ public class KeepAliveReceiver extends BroadcastReceiver { //make sure the application will at least wakes up every 10 mn Intent newIntent = new Intent(context, KeepAliveReceiver.class); PendingIntent keepAlivePendingIntent = PendingIntent.getBroadcast(context, 0, newIntent, PendingIntent.FLAG_ONE_SHOT); - ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP - , SystemClock.elapsedRealtime() + 600000 - , keepAlivePendingIntent); + + AlarmManager alarmManager = ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)); + Compatibility.scheduleAlarm(alarmManager, AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 600000, keepAlivePendingIntent); } } else if (action.equalsIgnoreCase(Intent.ACTION_SCREEN_ON)) { Log.i("[KeepAlive] Screen is on, enable"); diff --git a/src/org/linphone/LinphoneService.java b/src/org/linphone/LinphoneService.java index 813df0236..e4df93e5c 100644 --- a/src/org/linphone/LinphoneService.java +++ b/src/org/linphone/LinphoneService.java @@ -288,9 +288,8 @@ public final class LinphoneService extends Service { //make sure the application will at least wakes up every 10 mn Intent intent = new Intent(this, KeepAliveReceiver.class); PendingIntent keepAlivePendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_ONE_SHOT); - ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)).setExact(AlarmManager.ELAPSED_REALTIME_WAKEUP - , SystemClock.elapsedRealtime() + 600000 - , keepAlivePendingIntent); + AlarmManager alarmManager = ((AlarmManager) this.getSystemService(Context.ALARM_SERVICE)); + Compatibility.scheduleAlarm(alarmManager, AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 600000, keepAlivePendingIntent); mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE); } diff --git a/src/org/linphone/compatibility/ApiElevenPlus.java b/src/org/linphone/compatibility/ApiElevenPlus.java index ba7711204..6fa46d519 100644 --- a/src/org/linphone/compatibility/ApiElevenPlus.java +++ b/src/org/linphone/compatibility/ApiElevenPlus.java @@ -5,6 +5,7 @@ import java.util.ArrayList; import org.linphone.R; import android.annotation.TargetApi; +import android.app.AlarmManager; import android.app.Notification; import android.app.PendingIntent; import android.content.ContentUris; @@ -168,4 +169,8 @@ public class ApiElevenPlus { public static void setTextAppearance(TextView textview, Context context, int style) { textview.setTextAppearance(context, style); } + + public static void scheduleAlarm(AlarmManager alarmManager, int type, long triggerAtMillis, PendingIntent operation) { + alarmManager.set(type, triggerAtMillis, operation); + } } diff --git a/src/org/linphone/compatibility/ApiNineteenPlus.java b/src/org/linphone/compatibility/ApiNineteenPlus.java new file mode 100644 index 000000000..0245c138e --- /dev/null +++ b/src/org/linphone/compatibility/ApiNineteenPlus.java @@ -0,0 +1,32 @@ +package org.linphone.compatibility; + +import android.annotation.TargetApi; +import android.app.AlarmManager; +import android.app.PendingIntent; + +/*ApiNineteenPlus.java +Copyright (C) 2012 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. +*/ +/** + * @author Sylvain Berfini + */ +@TargetApi(19) +public class ApiNineteenPlus { + public static void scheduleAlarm(AlarmManager alarmManager, int type, long triggerAtMillis, PendingIntent operation) { + alarmManager.setExact(type, triggerAtMillis, operation); + } +} diff --git a/src/org/linphone/compatibility/Compatibility.java b/src/org/linphone/compatibility/Compatibility.java index 8cfdcd203..2cb9336c0 100644 --- a/src/org/linphone/compatibility/Compatibility.java +++ b/src/org/linphone/compatibility/Compatibility.java @@ -19,6 +19,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ import org.linphone.mediastream.Version; +import android.app.AlarmManager; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; @@ -129,4 +130,12 @@ public class Compatibility { ApiElevenPlus.setTextAppearance(textview, context, style); } } + + public static void scheduleAlarm(AlarmManager alarmManager, int type, long triggerAtMillis, PendingIntent operation) { + if (Version.sdkAboveOrEqual(Version.API19_KITKAT_44)) { + ApiNineteenPlus.scheduleAlarm(alarmManager, type, triggerAtMillis, operation); + } else { + ApiElevenPlus.scheduleAlarm(alarmManager, type, triggerAtMillis, operation); + } + } }