1
0
mirror of https://codeberg.org/Freeyourgadget/Gadgetbridge synced 2024-12-26 10:35:50 +01:00

Amazfit Bip: add option to reset the last fetched activity (timestamp)

Show a datepicker to reset the date after which the next activity will be fetched.
Also add .gpx extension to fetched activity track (if present) and make
the menu entries translatable.

Close #1057
This commit is contained in:
Daniele Gobbetti 2018-04-12 22:11:58 +02:00
parent 134905ed6a
commit 8f6d287592
6 changed files with 80 additions and 20 deletions

View File

@ -1,9 +1,11 @@
package nodomain.freeyourgadget.gadgetbridge.activities; package nodomain.freeyourgadget.gadgetbridge.activities;
import android.app.DatePickerDialog;
import android.content.BroadcastReceiver; import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.net.Uri; import android.net.Uri;
import android.os.Bundle; import android.os.Bundle;
import android.support.design.widget.FloatingActionButton; import android.support.design.widget.FloatingActionButton;
@ -17,12 +19,14 @@ import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.widget.AbsListView; import android.widget.AbsListView;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.DatePicker;
import android.widget.ListView; import android.widget.ListView;
import android.widget.Toast; import android.widget.Toast;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Calendar;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -63,6 +67,27 @@ public class ActivitySummariesActivity extends AbstractListActivity<BaseActivity
} }
}; };
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.activity_list_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
boolean processed = false;
switch (item.getItemId()) {
case R.id.activity_action_manage_timestamp:
resetFetchTimestampToChosenDate();
processed = true;
break;
}
return processed;
}
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
Bundle extras = getIntent().getExtras(); Bundle extras = getIntent().getExtras();
@ -107,7 +132,7 @@ public class ActivitySummariesActivity extends AbstractListActivity<BaseActivity
@Override @Override
public boolean onCreateActionMode(ActionMode actionMode, Menu menu) { public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
getMenuInflater().inflate(R.menu.activity_list_menu, menu); getMenuInflater().inflate(R.menu.activity_list_context_menu, menu);
findViewById(R.id.fab).setVisibility(View.INVISIBLE); findViewById(R.id.fab).setVisibility(View.INVISIBLE);
return true; return true;
} }
@ -188,6 +213,23 @@ public class ActivitySummariesActivity extends AbstractListActivity<BaseActivity
}); });
} }
public void resetFetchTimestampToChosenDate() {
final Calendar currentDate = Calendar.getInstance();
new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Calendar date = Calendar.getInstance();
date.set(year, monthOfYear, dayOfMonth);
Long timestamp = date.getTimeInMillis() - 1000;
SharedPreferences.Editor editor = GBApplication.getPrefs().getPreferences().edit();
editor.remove(mGBDevice.getAddress() + "_" + "lastSportsActivityTimeMillis"); //FIXME: key reconstruction is BAD
editor.putLong(mGBDevice.getAddress() + "_" + "lastSportsActivityTimeMillis", timestamp);
editor.commit();
}
}, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DATE)).show();
}
@Override @Override
protected void onDestroy() { protected void onDestroy() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver); LocalBroadcastManager.getInstance(this).unregisterReceiver(mReceiver);

View File

@ -98,7 +98,7 @@ public class FetchSportsDetailsOperation extends AbstractFetchOperation {
try { try {
ActivityTrack track = parser.parse(buffer.toByteArray()); ActivityTrack track = parser.parse(buffer.toByteArray());
ActivityTrackExporter exporter = createExporter(); ActivityTrackExporter exporter = createExporter();
String fileName = FileUtils.makeValidFileName("gadgetbridge-track-" + DateTimeUtils.formatIso8601(summary.getStartTime())); String fileName = FileUtils.makeValidFileName("gadgetbridge-track-" + DateTimeUtils.formatIso8601(summary.getStartTime()) + ".gpx");
File targetFile = new File(FileUtils.getExternalFilesDir(), fileName); File targetFile = new File(FileUtils.getExternalFilesDir(), fileName);
try { try {

View File

@ -0,0 +1,5 @@
<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24.0" android:viewportWidth="24.0"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="#FF000000" android:pathData="M13,3c-4.97,0 -9,4.03 -9,9L1,12l3.89,3.89 0.07,0.14L9,12L6,12c0,-3.87 3.13,-7 7,-7s7,3.13 7,7 -3.13,7 -7,7c-1.93,0 -3.68,-0.79 -4.94,-2.06l-1.42,1.42C8.27,19.99 10.51,21 13,21c4.97,0 9,-4.03 9,-9s-4.03,-9 -9,-9zM12,8v5l4.28,2.54 0.72,-1.21 -3.5,-2.08L13.5,8L12,8z"/>
</vector>

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/activity_action_select_all"
android:icon="@drawable/ic_select_all"
android:title="@string/select_all"
app:showAsAction="ifRoom" />
<item
android:id="@+id/activity_action_export"
android:icon="@drawable/ic_share"
android:title="@string/share"
app:showAsAction="ifRoom" />
<item
android:id="@+id/activity_action_delete"
android:icon="@drawable/ic_delete_cross"
android:title="@string/Delete"
app:showAsAction="always"/>
</menu>

View File

@ -2,23 +2,9 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android" <menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"> xmlns:app="http://schemas.android.com/apk/res-auto">
<item <item
android:id="@+id/activity_action_select_all" android:id="@+id/activity_action_manage_timestamp"
android:icon="@drawable/ic_select_all" android:icon="@drawable/ic_reset"
android:title="SELECT ALL" android:title="@string/reset_index"
app:showAsAction="ifRoom" /> app:showAsAction="never" />
<item
android:id="@+id/activity_action_export"
android:icon="@drawable/ic_share"
android:title="EXPORT"
app:showAsAction="ifRoom" />
<item
android:id="@+id/activity_action_delete"
android:icon="@drawable/ic_delete_cross"
android:title="@string/Delete"
app:showAsAction="always"/>
</menu> </menu>

View File

@ -521,6 +521,9 @@
<string name="activity_summaries">Activities</string> <string name="activity_summaries">Activities</string>
<string name="activity_type_biking">Biking</string> <string name="activity_type_biking">Biking</string>
<string name="activity_type_treadmill">Treadmill</string> <string name="activity_type_treadmill">Treadmill</string>
<string name="select_all">Select all</string>
<string name="share">Share</string>
<string name="reset_index">Reset fetch date</string>
<string name="kind_firmware">Firmware</string> <string name="kind_firmware">Firmware</string>
<string name="kind_invalid">Invalid data</string> <string name="kind_invalid">Invalid data</string>