diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java index 8387ee3ed..f67d64348 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/AbstractDeviceSupport.java @@ -1,8 +1,12 @@ package nodomain.freeyourgadget.gadgetbridge; +import android.app.Notification; +import android.app.NotificationManager; import android.bluetooth.BluetoothAdapter; import android.content.Context; import android.content.Intent; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.support.v4.content.LocalBroadcastManager; import org.slf4j.Logger; @@ -25,6 +29,7 @@ import nodomain.freeyourgadget.gadgetbridge.deviceevents.GBDeviceEventVersionInf // maybe need to check for "unread notifications" on device for that. public abstract class AbstractDeviceSupport implements DeviceSupport { private static final Logger LOG = LoggerFactory.getLogger(AbstractDeviceSupport.class); + private static final int NOTIFICATION_ID_SCREENSHOT = 8000; protected GBDevice gbDevice; private BluetoothAdapter btAdapter; @@ -145,7 +150,21 @@ public abstract class AbstractDeviceSupport implements DeviceSupport { private void handleGBDeviceEvent(GBDeviceEventScreenshot screenshot) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd-hhmmss"); + String filename = "screenshot_" + dateFormat.format(new Date()) + ".bmp"; - GB.writeScreenshot(screenshot, "screenshot_" + dateFormat.format(new Date()) + ".bmp"); + if (GB.writeScreenshot(screenshot, filename)) { + Bitmap bmp = BitmapFactory.decodeFile(context.getExternalFilesDir(null) + "/" + filename); + + Notification notif = new Notification.Builder(context) + .setContentTitle("Screenshot taken") + .setTicker("Screenshot taken") + .setContentText(filename) + .setSmallIcon(R.drawable.ic_notification) + .setStyle(new Notification.BigPictureStyle() + .bigPicture(bmp)) + .build(); + NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); + nm.notify(NOTIFICATION_ID_SCREENSHOT, notif); + } } } diff --git a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java index 1e2821bed..f13db2f5e 100644 --- a/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java +++ b/app/src/main/java/nodomain/freeyourgadget/gadgetbridge/GB.java @@ -111,7 +111,7 @@ public class GB { return String.valueOf(rssi); } - public static void writeScreenshot(GBDeviceEventScreenshot screenshot, String filename) { + public static boolean writeScreenshot(GBDeviceEventScreenshot screenshot, String filename) { LOG.info("Will write screenshot: " + screenshot.width + "x" + screenshot.height + "x" + screenshot.bpp + "bpp"); final int FILE_HEADER_SIZE = 14; @@ -128,7 +128,7 @@ public class GB { fos = new FileOutputStream(dir + "/" + filename); } catch (FileNotFoundException e) { e.printStackTrace(); - return; + return false; } ByteBuffer headerbuf = ByteBuffer.allocate(FILE_HEADER_SIZE + INFO_HEADER_SIZE + screenshot.clut.length); @@ -165,6 +165,8 @@ public class GB { fos.close(); } catch (IOException e) { e.printStackTrace(); + return false; } + return true; } }