From 50204a956ea31c4b2e27098d28fc531b1b07fa31 Mon Sep 17 00:00:00 2001 From: vanous Date: Sat, 4 Dec 2021 11:19:59 +0100 Subject: [PATCH] Activity card: Open specific Charts tab for each activity --- .../activities/charts/ChartsActivity.java | 50 +++++++++++++------ .../DeviceSettingsPreferenceConst.java | 1 + .../adapter/GBDeviceAdapterv2.java | 47 +++++++++++++---- .../casio/CasioGBX100DeviceSupport.java | 2 +- 4 files changed, 73 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java index 9c969137a..5a5f48402 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/charts/ChartsActivity.java @@ -47,13 +47,13 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; -import java.util.List; import java.util.Objects; import nodomain.freeyourgadget.gadgetbridge.GBApplication; import nodomain.freeyourgadget.gadgetbridge.R; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractFragmentPagerAdapter; import nodomain.freeyourgadget.gadgetbridge.activities.AbstractGBFragmentActivity; +import nodomain.freeyourgadget.gadgetbridge.activities.devicesettings.DeviceSettingsPreferenceConst; import nodomain.freeyourgadget.gadgetbridge.devices.DeviceCoordinator; import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice; import nodomain.freeyourgadget.gadgetbridge.model.RecordedDataTypes; @@ -65,6 +65,7 @@ import nodomain.freeyourgadget.gadgetbridge.util.Prefs; public class ChartsActivity extends AbstractGBFragmentActivity implements ChartsHost { private static final Logger LOG = LoggerFactory.getLogger(ChartsActivity.class); + public static final String EXTRA_FRAGMENT_ID = "fragment"; private TextView mDateControl; @@ -73,7 +74,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts private SwipeRefreshLayout swipeLayout; LimitedQueue mActivityAmountCache = new LimitedQueue(60); - List enabledTabsList; + ArrayList enabledTabsList; public static class ShowDurationDialog extends Dialog { private final String mDuration; @@ -134,6 +135,7 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_charts); + int tabFragmentToOpen = -1; initDates(); @@ -144,22 +146,12 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts Bundle extras = getIntent().getExtras(); if (extras != null) { mGBDevice = extras.getParcelable(GBDevice.EXTRA_DEVICE); + tabFragmentToOpen = extras.getInt(EXTRA_FRAGMENT_ID); + } else { throw new IllegalArgumentException("Must provide a device when invoking this activity"); } - Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(getDevice().getAddress())); - String myTabs = prefs.getString("charts_tabs", null); - - if (myTabs == null) { - //make list mutable to be able to remove items later - enabledTabsList = new ArrayList(Arrays.asList(this.getResources().getStringArray(R.array.pref_charts_tabs_items_default))); - } else { - enabledTabsList = new ArrayList(Arrays.asList(myTabs.split(","))); - } - DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(mGBDevice); - if (!coordinator.supportsRealtimeData()) { - enabledTabsList.remove("livestats"); - } + enabledTabsList = fillChartsTabsList(getDevice(), this); swipeLayout = findViewById(R.id.activity_swipe_layout); swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { @@ -173,6 +165,10 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts // Set up the ViewPager with the sections adapter. NonSwipeableViewPager viewPager = findViewById(R.id.charts_pager); viewPager.setAdapter(getPagerAdapter()); + if (tabFragmentToOpen > -1) { + viewPager.setCurrentItem(tabFragmentToOpen); //open the tab as specified in the intent + } + viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { @@ -246,6 +242,30 @@ public class ChartsActivity extends AbstractGBFragmentActivity implements Charts } + private static ArrayList fillChartsTabsList(GBDevice device, Context context) { + ArrayList arrayList = new ArrayList(); + Prefs prefs = new Prefs(GBApplication.getDeviceSpecificSharedPrefs(device.getAddress())); + String myTabs = prefs.getString(DeviceSettingsPreferenceConst.PREFS_DEVICE_CHARTS_TABS, null); + + if (myTabs == null) { + //make list mutable to be able to remove items later + arrayList = new ArrayList(Arrays.asList(context.getResources().getStringArray(R.array.pref_charts_tabs_items_default))); + } else { + arrayList = new ArrayList(Arrays.asList(myTabs.split(","))); + } + DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device); + if (!coordinator.supportsRealtimeData()) { + arrayList.remove("livestats"); + } + return arrayList; + } + + public static int getChartsTabIndex(String tab, GBDevice device, Context context) { + ArrayList enabledTabsList = new ArrayList(); + enabledTabsList = fillChartsTabsList(device, context); + return enabledTabsList.indexOf(tab); + } + private String formatDetailedDuration() { SimpleDateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy HH:mm"); String dateStringFrom = dateFormat.format(getStartDate()); diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java index 59a6cbfb4..63324f0d2 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/activities/devicesettings/DeviceSettingsPreferenceConst.java @@ -144,6 +144,7 @@ public class DeviceSettingsPreferenceConst { public static final String PREFS_ACTIVITY_IN_DEVICE_CARD_STEPS = "prefs_activity_in_device_card_steps"; public static final String PREFS_ACTIVITY_IN_DEVICE_CARD_SLEEP = "prefs_activity_in_device_card_sleep"; public static final String PREFS_ACTIVITY_IN_DEVICE_CARD_DISTANCE = "prefs_activity_in_device_card_distance"; + public static final String PREFS_DEVICE_CHARTS_TABS = "charts_tabs"; public static final String PREF_SOUNDS = "sounds"; public static final String PREF_AUTH_KEY = "authkey"; 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 336b7fc49..694f8b18d 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/adapter/GBDeviceAdapterv2.java @@ -704,16 +704,7 @@ public class GBDeviceAdapterv2 extends RecyclerView.Adapter 0) ? View.VISIBLE : View.GONE); + holder.TotalStepsChart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent startIntent; + startIntent = new Intent(context, ChartsActivity.class); + startIntent.putExtra(GBDevice.EXTRA_DEVICE, device); + startIntent.putExtra(ChartsActivity.EXTRA_FRAGMENT_ID, ChartsActivity.getChartsTabIndex("stepsweek", device, context)); + context.startActivity(startIntent); + } + } + ); boolean showActivitySleep = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress()).getBoolean(DeviceSettingsPreferenceConst.PREFS_ACTIVITY_IN_DEVICE_CARD_SLEEP, true); holder.SleepTimeChart.setVisibility((showActivitySleep && sleep > 0) ? View.VISIBLE : View.GONE); + holder.SleepTimeChart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent startIntent; + startIntent = new Intent(context, ChartsActivity.class); + startIntent.putExtra(GBDevice.EXTRA_DEVICE, device); + startIntent.putExtra(ChartsActivity.EXTRA_FRAGMENT_ID, ChartsActivity.getChartsTabIndex("sleep", device, context)); + context.startActivity(startIntent); + } + } + ); + boolean showActivityDistance = GBApplication.getDeviceSpecificSharedPrefs(device.getAddress()).getBoolean(DeviceSettingsPreferenceConst.PREFS_ACTIVITY_IN_DEVICE_CARD_DISTANCE, true); holder.TotalDistanceChart.setVisibility((showActivityDistance && steps > 0) ? View.VISIBLE : View.GONE); + holder.TotalDistanceChart.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent startIntent; + startIntent = new Intent(context, ChartsActivity.class); + startIntent.putExtra(GBDevice.EXTRA_DEVICE, device); + startIntent.putExtra(ChartsActivity.EXTRA_FRAGMENT_ID, ChartsActivity.getChartsTabIndex("activity", device, context)); + context.startActivity(startIntent); + } + } + ); } private String getHM(long value) { diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/CasioGBX100DeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/CasioGBX100DeviceSupport.java index 2b6da6ee6..a65cafff5 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/CasioGBX100DeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/service/devices/casio/CasioGBX100DeviceSupport.java @@ -123,7 +123,7 @@ public class CasioGBX100DeviceSupport extends CasioSupport implements SharedPref SharedPreferences preferences = GBApplication.getDeviceSpecificSharedPrefs(this.getDevice().getAddress()); SharedPreferences.Editor editor = preferences.edit(); - editor.putString("charts_tabs", "activity,activitylist,stepsweek"); + editor.putString(DeviceSettingsPreferenceConst.PREFS_DEVICE_CHARTS_TABS, "activity,activitylist,stepsweek"); editor.apply(); }