From fdb1e0ed606f887b9e5190a30db9ed8a8ed1c667 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 3 May 2019 15:17:38 +0200 Subject: [PATCH] Added shortcuts to most recent 1-1 chat rooms --- CHANGELOG.md | 5 + app/contacts.xml | 2 +- app/src/main/AndroidManifest.xml | 6 + .../java/org/linphone/LinphoneManager.java | 51 +++---- .../java/org/linphone/LinphoneService.java | 14 +- .../activities/LinphoneLauncherActivity.java | 13 +- .../java/org/linphone/chat/ChatActivity.java | 4 +- .../compatibility/ApiTwentyEightPlus.java | 2 +- .../compatibility/ApiTwentyFivePlus.java | 100 +++++++++++++ .../compatibility/ApiTwentyFourPlus.java | 2 +- .../compatibility/ApiTwentyOnePlus.java | 2 +- .../compatibility/ApiTwentySixPlus.java | 2 +- .../compatibility/ApiTwentyThreePlus.java | 2 +- .../linphone/compatibility/Compatibility.java | 14 +- .../CompatibilityScaleGestureDetector.java | 2 +- .../CompatibilityScaleGestureListener.java | 2 +- .../linphone/contacts/ContactsManager.java | 2 + .../org/linphone/history/HistoryActivity.java | 3 + .../notifications/NotificationsManager.java | 10 ++ .../utils/LinphoneShortcutManager.java | 131 ++++++++++++++++++ app/src/main/res/drawable-xhdpi/avatar.png | Bin 27559 -> 26655 bytes .../res/values/non_localizable_custom.xml | 1 + 22 files changed, 318 insertions(+), 52 deletions(-) create mode 100644 app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java create mode 100644 app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java diff --git a/CHANGELOG.md b/CHANGELOG.md index e51604cf2..3a5f5a57a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,11 @@ Group changes to describe their impact on the project, as follows: Fixed for any bug fixes. Security to invite users to upgrade in case of vulnerabilities. +## [Unreleased] + +### Added +- Added shortcuts to calls history & chat rooms list + ## [4.1.0] - 2019-05-03 ### Added diff --git a/app/contacts.xml b/app/contacts.xml index 7836193c0..766be1f0b 100644 --- a/app/contacts.xml +++ b/app/contacts.xml @@ -7,5 +7,5 @@ android:icon="@drawable/linphone_logo" android:mimeType="vnd.android.cursor.item/vnd.%%PACKAGE_NAME%%.provider.sip_address" android:summaryColumn="data2" /> - + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 88a73d217..0e4d44f45 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -134,6 +134,9 @@ android:name=".chat.ChatActivity" android:launchMode="singleTop" android:theme="@style/LinphoneStyleLight"> + + + @@ -172,6 +175,9 @@ android:name=".history.HistoryActivity" android:launchMode="singleTop" android:theme="@style/LinphoneStyleLight"> + + + diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 625cbadf0..46be11884 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -93,7 +93,7 @@ public class LinphoneManager implements SensorEventListener { private final String mFriendsDatabaseFile; private final String mUserCertsPath; - private final Context mServiceContext; + private final Context mContext; private AndroidAudioManager mAudioManager; private CallManager mCallManager; private final PowerManager mPowerManager; @@ -120,7 +120,7 @@ public class LinphoneManager implements SensorEventListener { public LinphoneManager(Context c) { mExited = false; - mServiceContext = c; + mContext = c; mBasePath = c.getFilesDir().getAbsolutePath(); mLPConfigXsd = mBasePath + "/lpconfig.xsd"; mLinphoneFactoryConfigFile = mBasePath + "/linphonerc"; @@ -260,7 +260,7 @@ public class LinphoneManager implements SensorEventListener { @Override public void run() { AlertDialog.Builder builder = - new AlertDialog.Builder(mServiceContext); + new AlertDialog.Builder(mContext); builder.setMessage( getString(R.string.update_available) + ": " @@ -279,8 +279,7 @@ public class LinphoneManager implements SensorEventListener { Intent.ACTION_VIEW); urlIntent.setData( Uri.parse(urlToUse)); - mServiceContext.startActivity( - urlIntent); + mContext.startActivity(urlIntent); } } }); @@ -416,12 +415,12 @@ public class LinphoneManager implements SensorEventListener { Log.e("[Manager] Destroy Core Runtime Exception: " + e); } finally { try { - mServiceContext.unregisterReceiver(mHookReceiver); + mContext.unregisterReceiver(mHookReceiver); } catch (Exception e) { Log.e("[Manager] unregister receiver exception: " + e); } try { - mServiceContext.unregisterReceiver(mCallReceiver); + mContext.unregisterReceiver(mCallReceiver); } catch (Exception e) { Log.e("[Manager] unregister receiver exception: " + e); } @@ -436,7 +435,7 @@ public class LinphoneManager implements SensorEventListener { // traces alway start with traces enable to not missed first initialization mCore = Factory.instance() - .createCore(mConfigFile, mLinphoneFactoryConfigFile, mServiceContext); + .createCore(mConfigFile, mLinphoneFactoryConfigFile, mContext); mCore.addListener(mCoreListener); if (isPush) { Log.w( @@ -472,12 +471,12 @@ public class LinphoneManager implements SensorEventListener { private synchronized void initLiblinphone(Core core) { mCore = core; - mAudioManager = new AndroidAudioManager(mServiceContext); + mAudioManager = new AndroidAudioManager(mContext); mCore.setZrtpSecretsFile(mBasePath + "/zrtp_secrets"); - String deviceName = mPrefs.getDeviceName(mServiceContext); - String appName = mServiceContext.getResources().getString(R.string.user_agent); + String deviceName = mPrefs.getDeviceName(mContext); + String appName = mContext.getResources().getString(R.string.user_agent); String androidVersion = BuildConfig.VERSION_NAME; String userAgent = appName + "/" + androidVersion + " (" + deviceName + ") LinphoneSDK"; @@ -526,8 +525,8 @@ public class LinphoneManager implements SensorEventListener { } } - if (mServiceContext.getResources().getBoolean(R.bool.enable_push_id)) { - PushNotificationUtils.init(mServiceContext); + if (mContext.getResources().getBoolean(R.bool.enable_push_id)) { + PushNotificationUtils.init(mContext); } IntentFilter mCallIntentFilter = @@ -535,19 +534,19 @@ public class LinphoneManager implements SensorEventListener { mCallIntentFilter.setPriority(99999999); mCallReceiver = new OutgoingCallReceiver(); try { - mServiceContext.registerReceiver(mCallReceiver, mCallIntentFilter); + mContext.registerReceiver(mCallReceiver, mCallIntentFilter); } catch (IllegalArgumentException e) { e.printStackTrace(); } mProximityWakelock = mPowerManager.newWakeLock( PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, - mServiceContext.getPackageName() + ";manager_proximity_sensor"); + mContext.getPackageName() + ";manager_proximity_sensor"); IntentFilter mHookIntentFilter = new IntentFilter("com.base.module.phone.HOOKEVENT"); mHookIntentFilter.setPriority(999); mHookReceiver = new HookReceiver(); - mServiceContext.registerReceiver(mHookReceiver, mHookIntentFilter); + mContext.registerReceiver(mHookReceiver, mHookIntentFilter); resetCameraFromPreferences(); @@ -603,8 +602,7 @@ public class LinphoneManager implements SensorEventListener { long future = new Timestamp( - mServiceContext - .getResources() + mContext.getResources() .getInteger( R.integer.phone_number_linking_popup_time_interval)) .getTime(); @@ -614,7 +612,7 @@ public class LinphoneManager implements SensorEventListener { final Dialog dialog = LinphoneUtils.getDialog( - mServiceContext, + mContext, String.format( getString(R.string.link_account_popup), mCore.getDefaultProxyConfig() @@ -644,9 +642,8 @@ public class LinphoneManager implements SensorEventListener { @Override public void onClick(View view) { Intent assistant = new Intent(); - assistant.setClass( - mServiceContext, PhoneAccountLinkingAssistantActivity.class); - mServiceContext.startActivity(assistant); + assistant.setClass(mContext, PhoneAccountLinkingAssistantActivity.class); + mContext.startActivity(assistant); dialog.dismiss(); } }); @@ -684,8 +681,8 @@ public class LinphoneManager implements SensorEventListener { } private void copyFromPackage(int ressourceId, String target) throws IOException { - FileOutputStream lOutputStream = mServiceContext.openFileOutput(target, 0); - InputStream lInputStream = mServiceContext.getResources().openRawResource(ressourceId); + FileOutputStream lOutputStream = mContext.openFileOutput(target, 0); + InputStream lInputStream = mContext.getResources().openRawResource(ressourceId); int readByte; byte[] buff = new byte[8048]; while ((readByte = lInputStream.read(buff)) != -1) { @@ -855,9 +852,7 @@ public class LinphoneManager implements SensorEventListener { int lastTimestamp = LinphonePreferences.instance().getLastCheckReleaseTimestamp(); int currentTimeStamp = (int) System.currentTimeMillis(); int interval = - mServiceContext - .getResources() - .getInteger(R.integer.time_between_update_check); // 24h + mContext.getResources().getInteger(R.integer.time_between_update_check); // 24h if (lastTimestamp == 0 || currentTimeStamp - lastTimestamp >= interval) { mCore.checkForUpdate(BuildConfig.VERSION_NAME); LinphonePreferences.instance().setLastCheckReleaseTimestamp(currentTimeStamp); @@ -894,7 +889,7 @@ public class LinphoneManager implements SensorEventListener { } private String getString(int key) { - return mServiceContext.getString(key); + return mContext.getString(key); } public boolean hasLastCallSasBeenRejected() { diff --git a/app/src/main/java/org/linphone/LinphoneService.java b/app/src/main/java/org/linphone/LinphoneService.java index e397e8949..0bc1e9464 100644 --- a/app/src/main/java/org/linphone/LinphoneService.java +++ b/app/src/main/java/org/linphone/LinphoneService.java @@ -32,18 +32,16 @@ import android.provider.ContactsContract; import android.view.WindowManager; import org.linphone.call.CallIncomingActivity; import org.linphone.call.CallOutgoingActivity; +import org.linphone.compatibility.Compatibility; import org.linphone.contacts.ContactsManager; import org.linphone.core.Call; import org.linphone.core.Call.State; import org.linphone.core.Core; import org.linphone.core.CoreListenerStub; import org.linphone.core.Factory; -import org.linphone.core.GlobalState; import org.linphone.core.LogLevel; import org.linphone.core.LoggingService; import org.linphone.core.LoggingServiceListener; -import org.linphone.core.ProxyConfig; -import org.linphone.core.RegistrationState; import org.linphone.core.tools.Log; import org.linphone.mediastream.Version; import org.linphone.notifications.NotificationsManager; @@ -173,14 +171,6 @@ public final class LinphoneService extends Service { } } } - - @Override - public void onGlobalStateChanged( - Core core, GlobalState state, String message) {} - - @Override - public void onRegistrationStateChanged( - Core core, ProxyConfig cfg, RegistrationState state, String smessage) {} }; } @@ -222,6 +212,8 @@ public final class LinphoneService extends Service { mBluetoothManager = new BluetoothManager(); + Compatibility.createChatShortcuts(this); + return START_STICKY; } diff --git a/app/src/main/java/org/linphone/activities/LinphoneLauncherActivity.java b/app/src/main/java/org/linphone/activities/LinphoneLauncherActivity.java index 99e4c889d..b2c3a73e7 100644 --- a/app/src/main/java/org/linphone/activities/LinphoneLauncherActivity.java +++ b/app/src/main/java/org/linphone/activities/LinphoneLauncherActivity.java @@ -28,6 +28,7 @@ import org.linphone.LinphoneService; import org.linphone.R; import org.linphone.assistant.MenuAssistantActivity; import org.linphone.chat.ChatActivity; +import org.linphone.history.HistoryActivity; import org.linphone.settings.LinphonePreferences; /** Creates LinphoneService and wait until Core is ready to start main Activity */ @@ -66,9 +67,15 @@ public class LinphoneLauncherActivity extends Activity { if (useFirstLoginActivity && LinphonePreferences.instance().isFirstLaunch()) { classToStart = MenuAssistantActivity.class; } else { - if (getIntent().getExtras() != null - && "Chat".equals(getIntent().getExtras().getString("Activity", null))) { - classToStart = ChatActivity.class; + if (getIntent().getExtras() != null) { + String activity = getIntent().getExtras().getString("Activity", null); + if (ChatActivity.NAME.equals(activity)) { + classToStart = ChatActivity.class; + } else if (HistoryActivity.NAME.equals(activity)) { + classToStart = HistoryActivity.class; + } else { + classToStart = DialerActivity.class; + } } else { classToStart = DialerActivity.class; } diff --git a/app/src/main/java/org/linphone/chat/ChatActivity.java b/app/src/main/java/org/linphone/chat/ChatActivity.java index e3624a963..f6971df8c 100644 --- a/app/src/main/java/org/linphone/chat/ChatActivity.java +++ b/app/src/main/java/org/linphone/chat/ChatActivity.java @@ -35,11 +35,13 @@ import org.linphone.core.tools.Log; import org.linphone.utils.FileUtils; public class ChatActivity extends MainActivity { + public static final String NAME = "Chat"; + private String mSharedText, mSharedFiles; @Override protected void onCreate(Bundle savedInstanceState) { - getIntent().putExtra("Activity", "Chat"); + getIntent().putExtra("Activity", NAME); super.onCreate(savedInstanceState); } diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java index 1235608ec..2b275d859 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyEightPlus.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* ApiTwentyEightPlus.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java new file mode 100644 index 000000000..af7720f2d --- /dev/null +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyFivePlus.java @@ -0,0 +1,100 @@ +package org.linphone.compatibility; + +/* +ApiTwentyFivePlus.java +Copyright (C) 2019 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import static java.lang.Math.min; + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import org.linphone.LinphoneManager; +import org.linphone.R; +import org.linphone.core.ChatRoom; +import org.linphone.core.ChatRoomCapabilities; +import org.linphone.utils.LinphoneShortcutManager; + +@TargetApi(25) +class ApiTwentyFivePlus { + + public static void createChatShortcuts(Context context) { + if (!context.getResources().getBoolean(R.bool.create_most_recent_chat_rooms_shortcuts)) + return; + + ShortcutManager shortcutManager = + (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); + ArrayList shortcuts = new ArrayList<>(); + + ChatRoom[] rooms = LinphoneManager.getCore().getChatRooms(); + ArrayList notEmptyOneToOneRooms = new ArrayList<>(); + for (ChatRoom room : rooms) { + if (room.hasCapability(ChatRoomCapabilities.OneToOne.toInt()) + && room.getHistorySize() > 0) { + notEmptyOneToOneRooms.add(room); + } + } + Collections.sort( + notEmptyOneToOneRooms, + new Comparator() { + public int compare(ChatRoom cr1, ChatRoom cr2) { + long timeDiff = cr1.getLastUpdateTime() - cr2.getLastUpdateTime(); + if (timeDiff > 0) return -1; + else if (timeDiff == 0) return 0; + return 1; + } + }); + + LinphoneShortcutManager manager = new LinphoneShortcutManager(context); + int maxShortcuts = + min(notEmptyOneToOneRooms.size(), shortcutManager.getMaxShortcutCountPerActivity()); + for (int i = 0; i < maxShortcuts; i++) { + // Android can only have around 4-5 shortcuts at a time + ChatRoom room = notEmptyOneToOneRooms.get(i); + ShortcutInfo shortcut = manager.createChatRoomShortcutInfo(room); + if (shortcut != null) { + shortcuts.add(shortcut); + } + } + + shortcutManager.setDynamicShortcuts(shortcuts); + } + + public static void updateShortcuts(Context context) { + if (!context.getResources().getBoolean(R.bool.create_most_recent_chat_rooms_shortcuts)) + return; + + ShortcutManager shortcutManager = + (ShortcutManager) context.getSystemService(Context.SHORTCUT_SERVICE); + ArrayList shortcuts = new ArrayList<>(); + LinphoneShortcutManager manager = new LinphoneShortcutManager(context); + + for (ShortcutInfo shortcutInfo : shortcutManager.getDynamicShortcuts()) { + ShortcutInfo shortcut = manager.updateShortcutInfo(shortcutInfo); + if (shortcut != null) { + shortcuts.add(shortcut); + } + } + + shortcutManager.updateShortcuts(shortcuts); + } +} diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyFourPlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyFourPlus.java index 7d4c3ddd0..14a2938ee 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyFourPlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyFourPlus.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* ApiTwentyFourPlus.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java index b2f69f064..5b5d193fb 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyOnePlus.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* ApiTwentyOnePlus.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java index 07ae1c969..44aa50e37 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentySixPlus.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* ApiTwentySixPlus.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java b/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java index e529643a3..8b647b36e 100644 --- a/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java +++ b/app/src/main/java/org/linphone/compatibility/ApiTwentyThreePlus.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* ApiTwentyThreePlus.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/compatibility/Compatibility.java b/app/src/main/java/org/linphone/compatibility/Compatibility.java index f6d15dbf6..6b525f3c3 100644 --- a/app/src/main/java/org/linphone/compatibility/Compatibility.java +++ b/app/src/main/java/org/linphone/compatibility/Compatibility.java @@ -1,7 +1,7 @@ package org.linphone.compatibility; /* Compatibility.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License @@ -244,4 +244,16 @@ public class Compatibility { } return true; } + + public static void createChatShortcuts(Context context) { + if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { + ApiTwentyFivePlus.createChatShortcuts(context); + } + } + + public static void updateShortcuts(Context context) { + if (Version.sdkAboveOrEqual(Version.API25_NOUGAT_71)) { + ApiTwentyFivePlus.updateShortcuts(context); + } + } } diff --git a/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureDetector.java b/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureDetector.java index bcb51dd23..cb8042547 100644 --- a/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureDetector.java +++ b/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureDetector.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* CompatibilityScaleGestureDetector.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureListener.java b/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureListener.java index 8bc83e8fc..1a2a73675 100644 --- a/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureListener.java +++ b/app/src/main/java/org/linphone/compatibility/CompatibilityScaleGestureListener.java @@ -2,7 +2,7 @@ package org.linphone.compatibility; /* CompatibilityScaleGestureListener.java -Copyright (C) 2017 Belledonne Communications, Grenoble, France +Copyright (C) 2017 Belledonne Communications, Grenoble, France This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License diff --git a/app/src/main/java/org/linphone/contacts/ContactsManager.java b/app/src/main/java/org/linphone/contacts/ContactsManager.java index 43b9caa88..ca5047ed9 100644 --- a/app/src/main/java/org/linphone/contacts/ContactsManager.java +++ b/app/src/main/java/org/linphone/contacts/ContactsManager.java @@ -475,5 +475,7 @@ public class ContactsManager extends ContentObserver implements FriendListListen for (ContactsUpdatedListener listener : mContactsUpdatedListeners) { listener.onContactsUpdated(); } + + Compatibility.updateShortcuts(mContext); } } diff --git a/app/src/main/java/org/linphone/history/HistoryActivity.java b/app/src/main/java/org/linphone/history/HistoryActivity.java index 88712156a..5673d5997 100644 --- a/app/src/main/java/org/linphone/history/HistoryActivity.java +++ b/app/src/main/java/org/linphone/history/HistoryActivity.java @@ -32,8 +32,11 @@ import org.linphone.core.Address; import org.linphone.utils.LinphoneUtils; public class HistoryActivity extends MainActivity { + public static final String NAME = "History"; + @Override protected void onCreate(Bundle savedInstanceState) { + getIntent().putExtra("Activity", NAME); super.onCreate(savedInstanceState); } diff --git a/app/src/main/java/org/linphone/notifications/NotificationsManager.java b/app/src/main/java/org/linphone/notifications/NotificationsManager.java index e311c3c19..adf2a0480 100644 --- a/app/src/main/java/org/linphone/notifications/NotificationsManager.java +++ b/app/src/main/java/org/linphone/notifications/NotificationsManager.java @@ -118,6 +118,12 @@ public class NotificationsManager { mListener = new CoreListenerStub() { + @Override + public void onMessageSent(Core core, ChatRoom room, ChatMessage message) { + if (room.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { + Compatibility.createChatShortcuts(mContext); + } + } @Override public void onMessageReceived( @@ -191,6 +197,10 @@ public class NotificationsManager { createNotification( cr, contact, from, textMessage, message.getTime(), null, null); } + + if (cr.hasCapability(ChatRoomCapabilities.OneToOne.toInt())) { + Compatibility.createChatShortcuts(mContext); + } } }; diff --git a/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java b/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java new file mode 100644 index 000000000..8583a3c29 --- /dev/null +++ b/app/src/main/java/org/linphone/utils/LinphoneShortcutManager.java @@ -0,0 +1,131 @@ +package org.linphone.utils; + +/* +LinphoneShortcutManager.java +Copyright (C) 2019 Belledonne Communications, Grenoble, France + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +*/ + +import android.annotation.TargetApi; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ShortcutInfo; +import android.graphics.Bitmap; +import android.graphics.drawable.Icon; +import android.util.ArraySet; +import java.util.Set; +import org.linphone.LinphoneService; +import org.linphone.R; +import org.linphone.chat.ChatActivity; +import org.linphone.contacts.ContactsManager; +import org.linphone.contacts.LinphoneContact; +import org.linphone.core.Address; +import org.linphone.core.ChatRoom; +import org.linphone.core.ChatRoomCapabilities; +import org.linphone.core.Factory; +import org.linphone.core.tools.Log; + +@TargetApi(25) +public class LinphoneShortcutManager { + private Context mContext; + private Set mCategories; + + public LinphoneShortcutManager(Context context) { + mContext = context; + mCategories = new ArraySet<>(); + mCategories.add(ShortcutInfo.SHORTCUT_CATEGORY_CONVERSATION); + } + + public ShortcutInfo createChatRoomShortcutInfo(ChatRoom room) { + Address peerAddress = + room.hasCapability(ChatRoomCapabilities.Basic.toInt()) + ? room.getPeerAddress() + : room.getParticipants()[0].getAddress(); + LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(peerAddress); + String address = peerAddress.asStringUriOnly(); + + Bitmap bm = null; + if (contact != null && contact.getThumbnailUri() != null) { + bm = + ImageUtils.getRoundBitmapFromUri( + LinphoneService.instance(), contact.getThumbnailUri()); + } + Icon icon = + bm == null + ? Icon.createWithResource(mContext, R.drawable.avatar) + : Icon.createWithBitmap(bm); + + String name = + contact == null + ? LinphoneUtils.getAddressDisplayName(peerAddress) + : contact.getFullName(); + + try { + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setClass(mContext, ChatActivity.class); + intent.addFlags( + Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); + intent.putExtra("RemoteSipUri", room.getPeerAddress().asStringUriOnly()); + + return new ShortcutInfo.Builder(mContext, address) + .setShortLabel(name) + .setIcon(icon) + .setCategories(mCategories) + .setIntent(intent) + .build(); + } catch (Exception e) { + Log.e("[Shortcuts Manager] ShortcutInfo.Builder exception: " + e); + } + + return null; + } + + public ShortcutInfo updateShortcutInfo(ShortcutInfo shortcutInfo) { + String address = shortcutInfo.getId(); + Address peerAddress = Factory.instance().createAddress(address); + LinphoneContact contact = ContactsManager.getInstance().findContactFromAddress(peerAddress); + + if (contact != null) { + Bitmap bm = null; + if (contact != null && contact.getThumbnailUri() != null) { + bm = + ImageUtils.getRoundBitmapFromUri( + LinphoneService.instance(), contact.getThumbnailUri()); + } + Icon icon = + bm == null + ? Icon.createWithResource(mContext, R.drawable.avatar) + : Icon.createWithBitmap(bm); + + String name = + contact == null + ? LinphoneUtils.getAddressDisplayName(peerAddress) + : contact.getFullName(); + + try { + return new ShortcutInfo.Builder(mContext, address) + .setShortLabel(name) + .setIcon(icon) + .setCategories(mCategories) + .setIntent(shortcutInfo.getIntent()) + .build(); + } catch (Exception e) { + Log.e("[Shortcuts Manager] ShortcutInfo.Builder exception: " + e); + } + } + return shortcutInfo; + } +} diff --git a/app/src/main/res/drawable-xhdpi/avatar.png b/app/src/main/res/drawable-xhdpi/avatar.png index d3a0bf331dd93f6919ceb43b2413c94290d124cd..6c91dd6549ac3dc18eccdf8e0bbabe2136ec59b2 100644 GIT binary patch literal 26655 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 MI%fIcZ?DAv0sUv-dH?_b literal 27559 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 diff --git a/app/src/main/res/values/non_localizable_custom.xml b/app/src/main/res/values/non_localizable_custom.xml index 758fbbbaa..cb3ff8534 100644 --- a/app/src/main/res/values/non_localizable_custom.xml +++ b/app/src/main/res/values/non_localizable_custom.xml @@ -96,6 +96,7 @@ true false true + true false