From 53c06b8c31ebf44e54faa114d8e01a7cf6a0c867 Mon Sep 17 00:00:00 2001 From: Daniele Gobbetti Date: Thu, 6 Oct 2022 19:51:07 +0200 Subject: [PATCH] Introduce native app shortcuts for android > 30 --- .../activities/ControlCenterv2.java | 14 +++++++++ .../adapter/GBDeviceAdapterv2.java | 31 +++++++++++++++++-- 2 files changed, 42 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java index 68c5855c4..39df505f1 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/ControlCenterv2.java @@ -95,6 +95,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.Prefs; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_CONNECT; + //TODO: extend AbstractGBActivity, but it requires actionbar that is not available public class ControlCenterv2 extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, GBActivity { @@ -362,6 +364,7 @@ public class ControlCenterv2 extends AppCompatActivity @Override protected void onResume() { super.onResume(); + handleShortcut(getIntent()); if (isLanguageInvalid) { isLanguageInvalid = false; recreate(); @@ -616,6 +619,17 @@ public class ControlCenterv2 extends AppCompatActivity return new RefreshTask(task, context); } + private void handleShortcut(Intent intent) { + if(ACTION_CONNECT.equals(intent.getAction())) { + String btDeviceAddress = intent.getStringExtra("device"); + if(btDeviceAddress!=null){ + GBDevice candidate = DeviceHelper.getInstance().findAvailableDevice(btDeviceAddress, this); + if (candidate != null && !candidate.isConnected()) { + GBApplication.deviceService(candidate).connect(); + } + } + } + } public class RefreshTask extends DBAccess { public RefreshTask(String task, Context context) { super(task, context); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java index c37971f2f..02e83384f 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java @@ -23,14 +23,17 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.SharedPreferences; +import android.content.pm.ShortcutInfo; +import android.content.pm.ShortcutManager; import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.Icon; +import android.os.Build; import android.text.Editable; import android.text.InputType; import android.text.TextUtils; import android.text.TextWatcher; -import android.util.ArraySet; import android.util.Pair; import android.util.TypedValue; import android.view.LayoutInflater; @@ -54,6 +57,7 @@ import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; import androidx.cardview.widget.CardView; import androidx.coordinatorlayout.widget.CoordinatorLayout; import androidx.localbroadcastmanager.content.LocalBroadcastManager; @@ -75,7 +79,6 @@ import org.apache.commons.lang3.builder.EqualsBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; @@ -83,7 +86,6 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.Set; import java.util.concurrent.TimeUnit; import nodomain.freeyourgadget.gadgetbridge.GBApplication; @@ -118,6 +120,8 @@ import nodomain.freeyourgadget.gadgetbridge.util.FormatUtils; import nodomain.freeyourgadget.gadgetbridge.util.GB; import nodomain.freeyourgadget.gadgetbridge.util.StringUtils; +import static nodomain.freeyourgadget.gadgetbridge.model.DeviceService.ACTION_CONNECT; + /** * Adapter for displaying GBDevice instances. */ @@ -284,6 +288,9 @@ public class GBDeviceAdapterv2 extends ListAdapter= Build.VERSION_CODES.R) { + createDynamicShortcut(device); + } GBApplication.deviceService(device).connect(); } } @@ -1404,6 +1411,24 @@ public class GBDeviceAdapterv2 extends ListAdapter { @Override public boolean areItemsTheSame(@NonNull GBDevice oldItem, @NonNull GBDevice newItem) {