mirror of
https://codeberg.org/Freeyourgadget/Gadgetbridge
synced 2024-08-26 09:11:37 +02:00
Remove activity transfer toast, add title to the transfer notification
Also create a separate channel that allows "muting" transfer notifications on android oreo and above.
This commit is contained in:
parent
36aae1e81c
commit
f99895da0c
@ -21,7 +21,6 @@ import android.bluetooth.BluetoothGattCharacteristic;
|
|||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.support.annotation.CallSuper;
|
import android.support.annotation.CallSuper;
|
||||||
import android.support.annotation.NonNull;
|
import android.support.annotation.NonNull;
|
||||||
import android.widget.Toast;
|
|
||||||
|
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
@ -118,6 +117,7 @@ public abstract class AbstractFetchOperation extends AbstractMiBand2Operation {
|
|||||||
|
|
||||||
@CallSuper
|
@CallSuper
|
||||||
protected void handleActivityFetchFinish(boolean success) {
|
protected void handleActivityFetchFinish(boolean success) {
|
||||||
|
GB.updateTransferNotification(null,"",false,100,getContext());
|
||||||
operationFinished();
|
operationFinished();
|
||||||
unsetBusy();
|
unsetBusy();
|
||||||
}
|
}
|
||||||
@ -148,8 +148,9 @@ public abstract class AbstractFetchOperation extends AbstractMiBand2Operation {
|
|||||||
Calendar startTimestamp = getSupport().fromTimeBytes(Arrays.copyOfRange(value, 7, value.length));
|
Calendar startTimestamp = getSupport().fromTimeBytes(Arrays.copyOfRange(value, 7, value.length));
|
||||||
setStartTimestamp(startTimestamp);
|
setStartTimestamp(startTimestamp);
|
||||||
|
|
||||||
GB.toast(getContext().getString(R.string.FetchActivityOperation_about_to_transfer_since,
|
GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data),
|
||||||
DateFormat.getDateTimeInstance().format(startTimestamp.getTime())), Toast.LENGTH_LONG, GB.INFO);
|
getContext().getString(R.string.FetchActivityOperation_about_to_transfer_since,
|
||||||
|
DateFormat.getDateTimeInstance().format(startTimestamp.getTime())), true, 0, getContext());;
|
||||||
} else {
|
} else {
|
||||||
LOG.warn("Unexpected activity metadata: " + Logging.formatBytes(value));
|
LOG.warn("Unexpected activity metadata: " + Logging.formatBytes(value));
|
||||||
handleActivityFetchFinish(false);
|
handleActivityFetchFinish(false);
|
||||||
|
@ -236,12 +236,12 @@ public class FetchActivityOperation extends AbstractMiBand1Operation {
|
|||||||
// avoid too many notifications overloading the system
|
// avoid too many notifications overloading the system
|
||||||
if (progress - activityStruct.lastNotifiedProgress >= 8) {
|
if (progress - activityStruct.lastNotifiedProgress >= 8) {
|
||||||
activityStruct.lastNotifiedProgress = progress;
|
activityStruct.lastNotifiedProgress = progress;
|
||||||
GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, progress, getContext());
|
GB.updateTransferNotification(null, getContext().getString(R.string.busy_task_fetch_activity_data), true, progress, getContext());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (activityStruct.isBlockFinished()) {
|
if (activityStruct.isBlockFinished()) {
|
||||||
sendAckDataTransfer(activityStruct.activityDataTimestampToAck, activityStruct.activityDataUntilNextHeader);
|
sendAckDataTransfer(activityStruct.activityDataTimestampToAck, activityStruct.activityDataUntilNextHeader);
|
||||||
GB.updateTransferNotification("", false, 100, getContext());
|
GB.updateTransferNotification(null, "", false, 100, getContext());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -271,9 +271,10 @@ public class FetchActivityOperation extends AbstractMiBand1Operation {
|
|||||||
// as we just did
|
// as we just did
|
||||||
|
|
||||||
if (activityStruct.isFirstChunk() && dataUntilNextHeader != 0) {
|
if (activityStruct.isFirstChunk() && dataUntilNextHeader != 0) {
|
||||||
GB.toast(getContext().getString(R.string.user_feedback_miband_activity_data_transfer,
|
|
||||||
|
GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), getContext().getString(R.string.user_feedback_miband_activity_data_transfer,
|
||||||
DateTimeUtils.formatDurationHoursMinutes((totalDataToRead / getBytesPerMinuteOfActivityData()), TimeUnit.MINUTES),
|
DateTimeUtils.formatDurationHoursMinutes((totalDataToRead / getBytesPerMinuteOfActivityData()), TimeUnit.MINUTES),
|
||||||
DateFormat.getDateTimeInstance().format(timestamp.getTime())), Toast.LENGTH_LONG, GB.INFO);
|
DateFormat.getDateTimeInstance().format(timestamp.getTime())), true, 0, getContext());
|
||||||
}
|
}
|
||||||
LOG.info("total data to read: " + totalDataToRead + " len: " + (totalDataToRead / getBytesPerMinuteOfActivityData()) + " minute(s)");
|
LOG.info("total data to read: " + totalDataToRead + " len: " + (totalDataToRead / getBytesPerMinuteOfActivityData()) + " minute(s)");
|
||||||
LOG.info("data to read until next header: " + dataUntilNextHeader + " len: " + (dataUntilNextHeader / getBytesPerMinuteOfActivityData()) + " minute(s)");
|
LOG.info("data to read until next header: " + dataUntilNextHeader + " len: " + (dataUntilNextHeader / getBytesPerMinuteOfActivityData()) + " minute(s)");
|
||||||
@ -326,7 +327,7 @@ public class FetchActivityOperation extends AbstractMiBand1Operation {
|
|||||||
TransactionBuilder builder = performInitialized("send stop sync data");
|
TransactionBuilder builder = performInitialized("send stop sync data");
|
||||||
builder.write(getCharacteristic(MiBandService.UUID_CHARACTERISTIC_CONTROL_POINT), new byte[]{MiBandService.COMMAND_STOP_SYNC_DATA});
|
builder.write(getCharacteristic(MiBandService.UUID_CHARACTERISTIC_CONTROL_POINT), new byte[]{MiBandService.COMMAND_STOP_SYNC_DATA});
|
||||||
builder.queue(getQueue());
|
builder.queue(getQueue());
|
||||||
GB.updateTransferNotification("Data transfer failed", false, 0, getContext());
|
GB.updateTransferNotification(null,"Data transfer failed", false, 0, getContext());
|
||||||
handleActivityFetchFinish();
|
handleActivityFetchFinish();
|
||||||
|
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
|
@ -582,7 +582,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport {
|
|||||||
LOG.info("CRC received: " + (data[2] & 0xff) + ", calculated: " + (crc & 0xff));
|
LOG.info("CRC received: " + (data[2] & 0xff) + ", calculated: " + (crc & 0xff));
|
||||||
if (data[2] != crc) {
|
if (data[2] != crc) {
|
||||||
GB.toast(getContext(), "Incorrect CRC. Try fetching data again.", Toast.LENGTH_LONG, GB.ERROR);
|
GB.toast(getContext(), "Incorrect CRC. Try fetching data again.", Toast.LENGTH_LONG, GB.ERROR);
|
||||||
GB.updateTransferNotification("Data transfer failed", false, 0, getContext());
|
GB.updateTransferNotification(null,"Data transfer failed", false, 0, getContext());
|
||||||
if (getDevice().isBusy()) {
|
if (getDevice().isBusy()) {
|
||||||
getDevice().unsetBusyTask();
|
getDevice().unsetBusyTask();
|
||||||
getDevice().sendDeviceUpdateIntent(getContext());
|
getDevice().sendDeviceUpdateIntent(getContext());
|
||||||
@ -612,7 +612,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport {
|
|||||||
} else if (data[0] == No1F1Constants.CMD_FETCH_SLEEP) {
|
} else if (data[0] == No1F1Constants.CMD_FETCH_SLEEP) {
|
||||||
sendFetchCommand(No1F1Constants.CMD_FETCH_HEARTRATE);
|
sendFetchCommand(No1F1Constants.CMD_FETCH_HEARTRATE);
|
||||||
} else {
|
} else {
|
||||||
GB.updateTransferNotification("", false, 100, getContext());
|
GB.updateTransferNotification(null,"", false, 100, getContext());
|
||||||
if (getDevice().isBusy()) {
|
if (getDevice().isBusy()) {
|
||||||
getDevice().unsetBusyTask();
|
getDevice().unsetBusyTask();
|
||||||
getDevice().sendDeviceUpdateIntent(getContext());
|
getDevice().sendDeviceUpdateIntent(getContext());
|
||||||
@ -620,7 +620,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport {
|
|||||||
}
|
}
|
||||||
} catch (Exception ex) {
|
} catch (Exception ex) {
|
||||||
GB.toast(getContext(), "Error saving activity data: " + ex.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR);
|
GB.toast(getContext(), "Error saving activity data: " + ex.getLocalizedMessage(), Toast.LENGTH_LONG, GB.ERROR);
|
||||||
GB.updateTransferNotification("Data transfer failed", false, 0, getContext());
|
GB.updateTransferNotification(null,"Data transfer failed", false, 0, getContext());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -657,7 +657,7 @@ public class No1F1Support extends AbstractBTLEDeviceSupport {
|
|||||||
firstTimestamp = sample.getTimestamp();
|
firstTimestamp = sample.getTimestamp();
|
||||||
int progress = startProgress + 33 * (sample.getTimestamp() - firstTimestamp) /
|
int progress = startProgress + 33 * (sample.getTimestamp() - firstTimestamp) /
|
||||||
((int) (Calendar.getInstance().getTimeInMillis() / 1000L) - firstTimestamp);
|
((int) (Calendar.getInstance().getTimeInMillis() / 1000L) - firstTimestamp);
|
||||||
GB.updateTransferNotification(getContext().getString(R.string.busy_task_fetch_activity_data), true, progress, getContext());
|
GB.updateTransferNotification(null, getContext().getString(R.string.busy_task_fetch_activity_data), true, progress, getContext());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,10 @@ package nodomain.freeyourgadget.gadgetbridge.service.receivers;
|
|||||||
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 org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
import nodomain.freeyourgadget.gadgetbridge.GBApplication;
|
||||||
@ -13,14 +17,17 @@ import nodomain.freeyourgadget.gadgetbridge.util.DeviceHelper;
|
|||||||
|
|
||||||
|
|
||||||
public class GBAutoFetchReceiver extends BroadcastReceiver {
|
public class GBAutoFetchReceiver extends BroadcastReceiver {
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(GBAutoFetchReceiver.class);
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
|
//LOG.info("User is present!");
|
||||||
GBApplication application = (GBApplication) context;
|
GBApplication application = (GBApplication) context;
|
||||||
List<GBDevice> devices = application.getDeviceManager().getDevices();
|
List<GBDevice> devices = application.getDeviceManager().getDevices();
|
||||||
for (int i = 0; i < devices.size(); i++) {
|
for (int i = 0; i < devices.size(); i++) {
|
||||||
GBDevice device = devices.get(i);
|
GBDevice device = devices.get(i);
|
||||||
// Will show that the device is not connected even when the device is connected
|
// Will show that the device is not connected even when the device is connected
|
||||||
if (device.isConnected() && device.isInitialized()) {
|
if (device.isInitialized()) {
|
||||||
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
|
DeviceCoordinator coordinator = DeviceHelper.getInstance().getCoordinator(device);
|
||||||
if (coordinator.supportsActivityDataFetching() && !device.isBusy()) {
|
if (coordinator.supportsActivityDataFetching() && !device.isBusy()) {
|
||||||
application.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY);
|
application.deviceService().onFetchRecordedData(RecordedDataTypes.TYPE_ACTIVITY);
|
||||||
|
@ -19,6 +19,8 @@ package nodomain.freeyourgadget.gadgetbridge.util;
|
|||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Notification;
|
import android.app.Notification;
|
||||||
|
import android.app.NotificationChannel;
|
||||||
|
import android.app.NotificationManager;
|
||||||
import android.app.PendingIntent;
|
import android.app.PendingIntent;
|
||||||
import android.bluetooth.BluetoothAdapter;
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
@ -50,9 +52,12 @@ import nodomain.freeyourgadget.gadgetbridge.impl.GBDevice;
|
|||||||
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
import nodomain.freeyourgadget.gadgetbridge.model.DeviceService;
|
||||||
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
|
import nodomain.freeyourgadget.gadgetbridge.service.DeviceCommunicationService;
|
||||||
|
|
||||||
|
import static nodomain.freeyourgadget.gadgetbridge.GBApplication.isRunningOreoOrLater;
|
||||||
|
|
||||||
public class GB {
|
public class GB {
|
||||||
|
|
||||||
public static final String NOTIFICATION_CHANNEL_ID = "gadgetbridge";
|
public static final String NOTIFICATION_CHANNEL_ID = "gadgetbridge";
|
||||||
|
public static final String NOTIFICATION_CHANNEL_ID_TRANSFER = "gadgetbridge transfer";
|
||||||
|
|
||||||
public static final int NOTIFICATION_ID = 1;
|
public static final int NOTIFICATION_ID = 1;
|
||||||
public static final int NOTIFICATION_ID_INSTALL = 2;
|
public static final int NOTIFICATION_ID_INSTALL = 2;
|
||||||
@ -323,17 +328,29 @@ public class GB {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Notification createTransferNotification(String text, boolean ongoing,
|
private static Notification createTransferNotification(String title, String text, boolean ongoing,
|
||||||
int percentage, Context context) {
|
int percentage, Context context) {
|
||||||
Intent notificationIntent = new Intent(context, ControlCenterv2.class);
|
Intent notificationIntent = new Intent(context, ControlCenterv2.class);
|
||||||
|
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
|
||||||
|
if(isRunningOreoOrLater()) {
|
||||||
|
NotificationChannel channel = notificationManager.getNotificationChannel(NOTIFICATION_CHANNEL_ID_TRANSFER);
|
||||||
|
if(channel == null) {
|
||||||
|
channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID_TRANSFER,
|
||||||
|
context.getString(R.string.notification_channel_name),
|
||||||
|
NotificationManager.IMPORTANCE_LOW);
|
||||||
|
notificationManager.createNotificationChannel(channel);
|
||||||
|
}
|
||||||
|
}
|
||||||
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
| Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
|
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0,
|
||||||
notificationIntent, 0);
|
notificationIntent, 0);
|
||||||
|
|
||||||
NotificationCompat.Builder nb = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
|
NotificationCompat.Builder nb = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID_TRANSFER)
|
||||||
|
.setTicker((title == null) ? context.getString(R.string.app_name) : title)
|
||||||
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
.setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
|
||||||
.setContentTitle(context.getString(R.string.app_name))
|
.setContentTitle((title == null) ? context.getString(R.string.app_name) : title)
|
||||||
|
.setStyle(new NotificationCompat.BigTextStyle().bigText(text))
|
||||||
.setContentText(text)
|
.setContentText(text)
|
||||||
.setContentIntent(pendingIntent)
|
.setContentIntent(pendingIntent)
|
||||||
.setOngoing(ongoing);
|
.setOngoing(ongoing);
|
||||||
@ -355,11 +372,11 @@ public class GB {
|
|||||||
removeNotification(NOTIFICATION_ID_LOW_BATTERY, context);
|
removeNotification(NOTIFICATION_ID_LOW_BATTERY, context);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void updateTransferNotification(String text, boolean ongoing, int percentage, Context context) {
|
public static void updateTransferNotification(String title, String text, boolean ongoing, int percentage, Context context) {
|
||||||
if (percentage == 100) {
|
if (percentage == 100) {
|
||||||
removeNotification(NOTIFICATION_ID_TRANSFER, context);
|
removeNotification(NOTIFICATION_ID_TRANSFER, context);
|
||||||
} else {
|
} else {
|
||||||
Notification notification = createTransferNotification(text, ongoing, percentage, context);
|
Notification notification = createTransferNotification(title, text, ongoing, percentage, context);
|
||||||
updateNotification(notification, NOTIFICATION_ID_TRANSFER, context);
|
updateNotification(notification, NOTIFICATION_ID_TRANSFER, context);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user