1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-09-27 16:56:57 +02:00

Add pull-to-refresh to dashboard

This commit is contained in:
Arjan Schrijver 2024-02-23 21:55:15 +01:00
parent 67ad1d420a
commit 68931a4c7a
2 changed files with 73 additions and 41 deletions

View File

@ -36,6 +36,7 @@ import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentContainerView;
import androidx.gridlayout.widget.GridLayout;
import androidx.localbroadcastmanager.content.LocalBroadcastManager;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import com.google.android.material.card.MaterialCardView;
@ -43,6 +44,7 @@ import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
@ -56,6 +58,9 @@ import nodomain.freeyourgadget.gadgetbridge.activities.dashboard.DashboardSleepW
import nodomain.freeyourgadget.gadgetbridge.activities.dashboard.DashboardStepsWidget;
import nodomain.freeyourgadget.gadgetbridge.activities.dashboard.DashboardTodayWidget;
import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
import nodomain.freeyourgadget.gadgetbridge.model.ActivityKind;
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
import nodomain.freeyourgadget.gadgetbridge.util.DashboardUtils;
import nodomain.freeyourgadget.gadgetbridge.util.DateTimeUtils;
import nodomain.freeyourgadget.gadgetbridge.util.Prefs;
@ -67,6 +72,7 @@ public class DashboardFragment extends Fragment {
private TextView arrowLeft;
private TextView arrowRight;
private GridLayout gridLayout;
private SwipeRefreshLayout swipeLayout;
private DashboardTodayWidget todayWidget;
private DashboardGoalsWidget goalsWidget;
private DashboardStepsWidget stepsWidget;
@ -95,6 +101,25 @@ public class DashboardFragment extends Fragment {
setHasOptionsMenu(true);
textViewDate = dashboardView.findViewById(R.id.dashboard_date);
gridLayout = dashboardView.findViewById(R.id.dashboard_gridlayout);
swipeLayout = dashboardView.findViewById(R.id.dashboard_swipe_layout);
swipeLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
// Signal DeviceCommunicationService to fetch activity for all connected devices
Intent intent = new Intent(requireContext(), DeviceCommunicationService.class);
intent.setAction(DeviceService.ACTION_FETCH_RECORDED_DATA)
.putExtra(DeviceService.EXTRA_RECORDED_DATA_TYPES, ActivityKind.TYPE_ACTIVITY);
requireContext().startService(intent);
// Hide 'refreshing' animation immediately if no health devices are connected
List<GBDevice> devices = GBApplication.app().getDeviceManager().getDevices();
for (GBDevice dev : devices) {
if (dev.getDeviceCoordinator().supportsActivityTracking() && dev.isInitialized()) {
return;
}
}
swipeLayout.setRefreshing(false);
}
});
// Increase column count on landscape, tablets and open foldables
DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
@ -198,6 +223,7 @@ public class DashboardFragment extends Fragment {
}
private void refresh() {
swipeLayout.setRefreshing(false);
day.set(Calendar.HOUR_OF_DAY, 23);
day.set(Calendar.MINUTE, 59);
day.set(Calendar.SECOND, 59);

View File

@ -7,52 +7,58 @@
android:layout_height="match_parent"
tools:context=".activities.DashboardFragment">
<LinearLayout
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/dashboard_swipe_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
android:layout_height="match_parent">
<RelativeLayout
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/dashboard_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@string/activity_summary_today"
android:textStyle="bold"
android:textSize="30sp" />
<TextView
android:id="@+id/arrow_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="\u003C"
android:textStyle="bold"
android:textSize="40sp"
android:paddingHorizontal="8dp"
android:layout_toLeftOf="@+id/arrow_right" />
<TextView
android:id="@+id/arrow_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="\u003E"
android:textStyle="bold"
android:textSize="40sp"
android:paddingHorizontal="8dp"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
android:orientation="vertical">
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.gridlayout.widget.GridLayout
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dashboard_gridlayout"
app:columnCount="2" />
</ScrollView>
</LinearLayout>
android:orientation="horizontal">
<TextView
android:id="@+id/dashboard_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@string/activity_summary_today"
android:textStyle="bold"
android:textSize="30sp" />
<TextView
android:id="@+id/arrow_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="\u003C"
android:textStyle="bold"
android:textSize="40sp"
android:paddingHorizontal="8dp"
android:layout_toLeftOf="@+id/arrow_right" />
<TextView
android:id="@+id/arrow_right"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="\u003E"
android:textStyle="bold"
android:textSize="40sp"
android:paddingHorizontal="8dp"
android:layout_alignParentEnd="true"/>
</RelativeLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.gridlayout.widget.GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/dashboard_gridlayout"
app:columnCount="2" />
</androidx.core.widget.NestedScrollView>
</LinearLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</RelativeLayout>