diff --git a/ring-android/app/build.gradle b/ring-android/app/build.gradle index 0d20992e369a1b0ca475415a41498b7aa14dc75c..ceed8e49c1363acdec0e1d8b6043067740a240aa 100644 --- a/ring-android/app/build.gradle +++ b/ring-android/app/build.gradle @@ -97,6 +97,7 @@ dependencies { implementation "com.google.android.material:material:1.3.0" implementation 'com.google.android:flexbox:1.1.1' implementation 'org.osmdroid:osmdroid-android:6.1.10' + implementation "androidx.sharetarget:sharetarget:1.1.0" // ORM implementation 'com.j256.ormlite:ormlite-android:5.3' diff --git a/ring-android/app/proguard-rules.pro b/ring-android/app/proguard-rules.pro index c7ae3c9ac97ad43d7a848042c6d14cfe3758b235..4d0ed664e3882573795f4b7349337bf30d9e43f3 100644 --- a/ring-android/app/proguard-rules.pro +++ b/ring-android/app/proguard-rules.pro @@ -9,6 +9,7 @@ -keepattributes SourceFile,LineNumberTable -keep,includedescriptorclasses class androidx.core.content.FileProvider { *; } +-keep,includedescriptorclasses class androidx.sharetarget.* { *; } -keepnames class * implements android.os.Parcelable { public static final ** CREATOR; diff --git a/ring-android/app/src/main/AndroidManifest.xml b/ring-android/app/src/main/AndroidManifest.xml index b3f02d00c778ba4c1bad9b18f0bf58cb00cf9d34..acca127b10b61bb72aae378144680d3a890a36a9 100644 --- a/ring-android/app/src/main/AndroidManifest.xml +++ b/ring-android/app/src/main/AndroidManifest.xml @@ -159,7 +159,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. <meta-data android:name="android.service.chooser.chooser_target_service" - android:value=".services.JamiChooserTargetService" /> + android:value="androidx.sharetarget.ChooserTargetServiceCompat" /> </activity> <activity android:name=".account.AccountWizardActivity" @@ -412,16 +412,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. android:icon="@mipmap/ic_launcher" android:theme="@style/AppThemeBase.Dark" /> - <service - android:name=".services.JamiChooserTargetService" - android:label="ChooserTargetService" - android:icon="@mipmap/ic_launcher" - android:permission="android.permission.BIND_CHOOSER_TARGET_SERVICE"> - <intent-filter> - <action android:name="android.service.chooser.ChooserTargetService" /> - </intent-filter> - </service> - <service android:name=".service.JamiJobService" android:permission="android.permission.BIND_JOB_SERVICE" /> diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java index 4674dd3c1c345bab44606c4eb8f7bf40411ea719..246c2d944b3ff9ea5a301be2c689d32e57699682 100644 --- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java +++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java @@ -354,7 +354,7 @@ public class HomeActivity extends AppCompatActivity implements BottomNavigationV .observeOn(AndroidSchedulers.mainThread()) .subscribe(count -> setBadge(R.id.navigation_home, count)))); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { mDisposable.add((mAccountService .getCurrentAccountSubject() .observeOn(Schedulers.computation()) @@ -809,6 +809,7 @@ public class HomeActivity extends AppCompatActivity implements BottomNavigationV i++; } + Log.w(TAG, "ShortcutManagerCompat.addDynamicShortcuts " + shortcutInfoList.size()); ShortcutManagerCompat.removeAllDynamicShortcuts(this); ShortcutManagerCompat.addDynamicShortcuts(this, shortcutInfoList); } diff --git a/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java b/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java index 0e09a4d2ffdd01d853d415d2918ebb0a7c523f36..32e31932b7644683cb026b8bc03f290148e13085 100755 --- a/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java +++ b/ring-android/app/src/main/java/cx/ring/dependencyinjection/JamiInjectionComponent.java @@ -68,7 +68,6 @@ import cx.ring.services.HardwareService; import cx.ring.services.HistoryServiceImpl; import cx.ring.services.LocationSharingService; import cx.ring.services.NotificationServiceImpl; -import cx.ring.services.JamiChooserTargetService; import cx.ring.services.SharedPreferencesServiceImpl; import cx.ring.services.SyncService; import cx.ring.settings.AccountFragment; @@ -220,8 +219,6 @@ public interface JamiInjectionComponent { void inject(TVSettingsFragment.PrefsFragment prefsFragment); - void inject(JamiChooserTargetService service); - void inject(LocationSharingFragment service); void inject(JamiJobService service); diff --git a/ring-android/app/src/main/java/cx/ring/services/JamiChooserTargetService.java b/ring-android/app/src/main/java/cx/ring/services/JamiChooserTargetService.java deleted file mode 100644 index 551df4a7ca5cfd611db073a903986282c62c527c..0000000000000000000000000000000000000000 --- a/ring-android/app/src/main/java/cx/ring/services/JamiChooserTargetService.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (C) 2004-2020 Savoir-faire Linux Inc. - * - * Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com> - * - * 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 3 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, see <http://www.gnu.org/licenses/>. - */ -package cx.ring.services; - -import android.content.ComponentName; -import android.content.IntentFilter; -import android.graphics.Bitmap; -import android.graphics.drawable.Icon; -import android.os.Build; -import android.os.Bundle; -import android.service.chooser.ChooserTarget; -import android.service.chooser.ChooserTargetService; -import android.util.Log; - -import androidx.annotation.RequiresApi; - -import java.util.ArrayList; -import java.util.List; -import java.util.concurrent.Future; -import java.util.concurrent.TimeUnit; - -import javax.inject.Inject; -import javax.inject.Singleton; - -import cx.ring.application.JamiApplication; -import cx.ring.contacts.AvatarFactory; -import cx.ring.facades.ConversationFacade; -import cx.ring.fragments.ConversationFragment; -import cx.ring.model.CallContact; -import cx.ring.model.Conversation; -import io.reactivex.schedulers.Schedulers; - -@RequiresApi(api = Build.VERSION_CODES.M) -public class JamiChooserTargetService extends ChooserTargetService { - - @Inject - @Singleton - ConversationFacade conversationFacade; - - private int targetSize; - - @Override - public void onCreate() { - super.onCreate(); - JamiApplication.getInstance().startDaemon(); - JamiApplication.getInstance().getInjectionComponent().inject(this); - targetSize = (int) (AvatarFactory.SIZE_NOTIF * getResources().getDisplayMetrics().density); - } - - @Override - public List<ChooserTarget> onGetChooserTargets(ComponentName componentName, IntentFilter intentFilter) { - return conversationFacade - .getCurrentAccountSubject() - .firstOrError() - .flatMap(a -> a - .getConversationsSubject() - .firstOrError() - .map(conversations -> { - List<Future<Bitmap>> futureIcons = new ArrayList<>(conversations.size()); - for (Conversation conversation : conversations) { - CallContact contact = conversation.getContact(); - futureIcons.add(AvatarFactory.getBitmapAvatar(this, contact, targetSize) - .subscribeOn(Schedulers.computation()) - .toFuture()); - } - int i=0; - List<ChooserTarget> choosers = new ArrayList<>(conversations.size()); - for (Conversation conversation : conversations) { - CallContact contact = conversation.getContact(); - Bundle bundle = new Bundle(); - bundle.putString(ConversationFragment.KEY_ACCOUNT_ID, a.getAccountID()); - bundle.putString(ConversationFragment.KEY_CONTACT_RING_ID, contact.getPrimaryNumber()); - Icon icon = null; - try { - icon = Icon.createWithBitmap(futureIcons.get(i).get()); - } catch (Exception e) { - Log.w("RingChooserService", "Failed to load icon", e); - } - ChooserTarget target = new ChooserTarget(contact.getDisplayName(), icon, 1.f-(i/(float)conversations.size()), componentName, bundle); - choosers.add(target); - i++; - } - return choosers; - })) - .timeout(5, TimeUnit.SECONDS) - .onErrorReturn(e -> new ArrayList<>()) - .blockingGet(); - } -} diff --git a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java index 7528e861fe0c9b529503f25069aea88e165d81d7..db7e9ea199af36df00429ace1dcb45c3dff8934b 100644 --- a/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java +++ b/ring-android/app/src/main/java/cx/ring/services/NotificationServiceImpl.java @@ -558,7 +558,6 @@ public class NotificationServiceImpl implements NotificationService { .setIntent(PendingIntent.getActivity(mContext, 0, intentBubble, PendingIntent.FLAG_UPDATE_CURRENT)) .build()) - .addPerson(contactPerson.getUri()) .setShortcutId(key); }