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

Pebble: support opening files from the system share intent

This commit is contained in:
Daniele Gobbetti 2016-12-27 13:02:02 +01:00
parent 353bd4651b
commit 4ce890b5ce

View File

@ -2,7 +2,9 @@ package nodomain.freeyourgadget.gadgetbridge.devices.pebble;
import android.content.ContentResolver; import android.content.ContentResolver;
import android.content.Context; import android.content.Context;
import android.database.Cursor;
import android.net.Uri; import android.net.Uri;
import android.provider.MediaStore;
import org.json.JSONException; import org.json.JSONException;
import org.json.JSONObject; import org.json.JSONObject;
@ -57,6 +59,7 @@ public class PBWReader {
private short mAppVersion; private short mAppVersion;
private int mIconId; private int mIconId;
private int mFlags; private int mFlags;
private long fileSize;
private JSONObject mAppKeys = null; private JSONObject mAppKeys = null;
@ -66,7 +69,17 @@ public class PBWReader {
InputStream fin = new BufferedInputStream(cr.openInputStream(uri)); InputStream fin = new BufferedInputStream(cr.openInputStream(uri));
if (uri.toString().endsWith(".pbl")) { Uri filePathUri = uri;
if (uri.getScheme().toString().compareTo("content") == 0) {
Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
if (cursor.moveToFirst()) {
int name_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME);
int size_index = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE);
filePathUri = Uri.parse(cursor.getString(name_index));
fileSize = cursor.getLong(size_index);
}
}
if (filePathUri.toString().endsWith(".pbl")) {
STM32CRC stm32crc = new STM32CRC(); STM32CRC stm32crc = new STM32CRC();
try { try {
byte[] buf = new byte[2000]; byte[] buf = new byte[2000];
@ -83,10 +96,12 @@ public class PBWReader {
int crc = stm32crc.getResult(); int crc = stm32crc.getResult();
// language file // language file
app = new GBDeviceApp(UUID.randomUUID(), "Language File", "unknown", "unknown", GBDeviceApp.Type.UNKNOWN); app = new GBDeviceApp(UUID.randomUUID(), "Language File", "unknown", "unknown", GBDeviceApp.Type.UNKNOWN);
if (fileSize == 0) {
File f = new File(uri.getPath()); File f = new File(uri.getPath());
fileSize = f.length();
}
pebbleInstallables = new ArrayList<>(); pebbleInstallables = new ArrayList<>();
pebbleInstallables.add(new PebbleInstallable("lang", (int) f.length(), crc, PebbleProtocol.PUTBYTES_TYPE_FILE)); pebbleInstallables.add(new PebbleInstallable("lang", (int) fileSize, crc, PebbleProtocol.PUTBYTES_TYPE_FILE));
isValid = true; isValid = true;
isLanguage = true; isLanguage = true;
@ -95,7 +110,7 @@ public class PBWReader {
String platformDir = ""; String platformDir = "";
if (!uri.toString().endsWith(".pbz")) { if (!filePathUri.toString().endsWith(".pbz")) {
/* /*
* for aplite and basalt it is possible to install 2.x apps which have no subfolder * for aplite and basalt it is possible to install 2.x apps which have no subfolder
* we still prefer the subfolders if present. * we still prefer the subfolders if present.