From b53e0bc42319a111ba13e490fe4ad7d419e2f71d Mon Sep 17 00:00:00 2001 From: Amirhossein <amirhossein.naghshzan@savoirfairelinux.com> Date: Thu, 4 Mar 2021 15:02:56 -0500 Subject: [PATCH] manifest: support direct share backward compatibility Change-Id: I13b799f6728404ae68b8a319e662fe88c8adcc50 --- ring-android/app/build.gradle | 1 + ring-android/app/proguard-rules.pro | 1 + ring-android/app/src/main/AndroidManifest.xml | 12 +- .../java/cx/ring/client/HomeActivity.java | 3 +- .../JamiInjectionComponent.java | 3 - .../services/JamiChooserTargetService.java | 105 ------------------ .../services/NotificationServiceImpl.java | 1 - 7 files changed, 5 insertions(+), 121 deletions(-) delete mode 100644 ring-android/app/src/main/java/cx/ring/services/JamiChooserTargetService.java diff --git a/ring-android/app/build.gradle b/ring-android/app/build.gradle index 0d20992e3..ceed8e49c 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 c7ae3c9ac..4d0ed664e 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 b3f02d00c..acca127b1 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 4674dd3c1..246c2d944 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 0e09a4d2f..32e31932b 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 551df4a7c..000000000 --- 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 7528e861f..db7e9ea19 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); } -- GitLab