Merge remote-tracking branch 'origin/master' into db-refactoring

This commit is contained in:
cpfeiffer 2016-06-16 21:55:16 +02:00
commit d544509b60
6 changed files with 54 additions and 33 deletions

View File

@ -96,23 +96,35 @@ public class PBWReader {
String platformDir = ""; String platformDir = "";
if (!uri.toString().endsWith(".pbz")) { if (!uri.toString().endsWith(".pbz")) {
platformDir = platform + "/";
/* /*
* 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.
* chalk needs to be its subfolder * chalk needs to be its subfolder
*/ */
if (platform.equals("aplite") || platform.equals("basalt")) { String[] platformDirs;
boolean hasPlatformDir = false; switch (platform) {
case "basalt":
platformDirs = new String[]{"basalt/"};
break;
case "chalk":
platformDirs = new String[]{"chalk/"};
break;
case "diorite":
platformDirs = new String[]{"diorite/", "aplite/"};
break;
default:
platformDirs = new String[]{"aplite/"};
}
for (String dir : platformDirs) {
InputStream afin = new BufferedInputStream(cr.openInputStream(uri)); InputStream afin = new BufferedInputStream(cr.openInputStream(uri));
ZipInputStream zis = new ZipInputStream(afin); ZipInputStream zis = new ZipInputStream(afin);
ZipEntry ze; ZipEntry ze;
try { try {
while ((ze = zis.getNextEntry()) != null) { while ((ze = zis.getNextEntry()) != null) {
if (ze.getName().startsWith(platformDir)) { if (ze.getName().startsWith(dir)) {
hasPlatformDir = true; platformDir = dir;
break; break;
} }
} }
@ -120,13 +132,13 @@ public class PBWReader {
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
} }
if (!hasPlatformDir) {
platformDir = "";
}
}
} }
if (platform.equals("chalk") && platformDir.equals("")) {
return;
}
}
LOG.info("using platformdir: '" + platformDir + "'");
String appName = null; String appName = null;
String appCreator = null; String appCreator = null;
String appVersion = null; String appVersion = null;

View File

@ -70,7 +70,7 @@ public class AppMessageHandlerMisfit extends AppMessageHandler {
break; break;
} }
if (!mPebbleProtocol.isFw3x) { if (mPebbleProtocol.mFwMajor < 3) {
timestamp -= SimpleTimeZone.getDefault().getOffset(timestamp * 1000L) / 1000; timestamp -= SimpleTimeZone.getDefault().getOffset(timestamp * 1000L) / 1000;
} }
Date startDate = new Date((long) timestamp * 1000L); Date startDate = new Date((long) timestamp * 1000L);

View File

@ -296,7 +296,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
if (mPBWReader.isFirmware()) { if (mPBWReader.isFirmware()) {
writeInstallApp(mPebbleProtocol.encodeInstallFirmwareComplete()); writeInstallApp(mPebbleProtocol.encodeInstallFirmwareComplete());
finishInstall(false); finishInstall(false);
} else if (mPBWReader.isLanguage() || mPebbleProtocol.isFw3x) { } else if (mPBWReader.isLanguage() || mPebbleProtocol.mFwMajor >= 3) {
finishInstall(false); // FIXME: dont know yet how to detect success finishInstall(false); // FIXME: dont know yet how to detect success
} else { } else {
writeInstallApp(mPebbleProtocol.encodeAppRefresh(mInstallSlot)); writeInstallApp(mPebbleProtocol.encodeAppRefresh(mInstallSlot));
@ -614,7 +614,7 @@ public class PebbleIoThread extends GBDeviceIoThread {
writeInstallApp(mPebbleProtocol.encodeGetTime()); writeInstallApp(mPebbleProtocol.encodeGetTime());
} else { } else {
GBDeviceApp app = mPBWReader.getGBDeviceApp(); GBDeviceApp app = mPBWReader.getGBDeviceApp();
if (mPebbleProtocol.isFw3x && !mPBWReader.isLanguage()) { if (mPebbleProtocol.mFwMajor >= 3 && !mPBWReader.isLanguage()) {
if (appId == 0) { if (appId == 0) {
// only install metadata - not the binaries // only install metadata - not the binaries
write(mPebbleProtocol.encodeInstallMetadata(app.getUUID(), app.getName(), mPBWReader.getAppVersion(), mPBWReader.getSdkVersion(), mPBWReader.getFlags(), mPBWReader.getIconId())); write(mPebbleProtocol.encodeInstallMetadata(app.getUUID(), app.getName(), mPBWReader.getAppVersion(), mPBWReader.getSdkVersion(), mPBWReader.getFlags(), mPBWReader.getIconId()));

View File

@ -246,20 +246,24 @@ public class PebbleProtocol extends GBDeviceProtocol {
static final long GB_UUID_MASK = 0x4767744272646700L; static final long GB_UUID_MASK = 0x4767744272646700L;
// base is -5 // base is -8
private static final String[] hwRevisions = { private static final String[] hwRevisions = {
// Emulator // Emulator
"spalding_bb2", "snowy_bb2", "snowy_bb", "bb2", "bb", "silk_bb2", "unknown", "silk_bb",
"spalding_bb2", "snowy_bb2", "snowy_bb",
"bb2", "bb",
"unknown", "unknown",
// Pebble // Pebble
"ev1", "ev2", "ev2_3", "ev2_4", "v1_5", "v2_0", "ev1", "ev2", "ev2_3", "ev2_4", "v1_5", "v2_0",
// Pebble Time // Pebble Time
"snowy_evt2", "snowy_dvt", "spalding_dvt", "snowy_s3", "spalding" "snowy_evt2", "snowy_dvt", "spalding_dvt", "snowy_s3", "spalding",
// Pebble 2
"silk_evt", "unknown", "silk"
}; };
private static final Random mRandom = new Random(); private static final Random mRandom = new Random();
boolean isFw3x = false; int mFwMajor = 3;
boolean mForceProtocol = false; boolean mForceProtocol = false;
GBDeviceEventScreenshot mDevEventScreenshot = null; GBDeviceEventScreenshot mDevEventScreenshot = null;
int mScreenshotRemaining = -1; int mScreenshotRemaining = -1;
@ -450,12 +454,12 @@ public class PebbleProtocol extends GBDeviceProtocol {
} }
Long ts = System.currentTimeMillis(); Long ts = System.currentTimeMillis();
if (!isFw3x) { if (mFwMajor < 3) {
ts += (SimpleTimeZone.getDefault().getOffset(ts)); ts += (SimpleTimeZone.getDefault().getOffset(ts));
} }
ts /= 1000; ts /= 1000;
if (isFw3x) { if (mFwMajor >= 3) {
// 3.x notification // 3.x notification
return encodeBlobdbNotification(id, (int) (ts & 0xffffffffL), title, subtitle, notificationSpec.body, notificationSpec.sourceName, hasHandle, notificationSpec.type, notificationSpec.cannedReplies); return encodeBlobdbNotification(id, (int) (ts & 0xffffffffL), title, subtitle, notificationSpec.body, notificationSpec.sourceName, hasHandle, notificationSpec.type, notificationSpec.cannedReplies);
} else if (mForceProtocol || notificationSpec.type != NotificationType.EMAIL) { } else if (mForceProtocol || notificationSpec.type != NotificationType.EMAIL) {
@ -497,7 +501,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
long ts = System.currentTimeMillis(); long ts = System.currentTimeMillis();
long ts_offset = (SimpleTimeZone.getDefault().getOffset(ts)); long ts_offset = (SimpleTimeZone.getDefault().getOffset(ts));
ByteBuffer buf; ByteBuffer buf;
if (isFw3x) { if (mFwMajor >= 3) {
String timezone = SimpleTimeZone.getDefault().getID(); String timezone = SimpleTimeZone.getDefault().getID();
short length = (short) (LENGTH_SETTIME + timezone.getBytes().length + 3); short length = (short) (LENGTH_SETTIME + timezone.getBytes().length + 3);
buf = ByteBuffer.allocate(LENGTH_PREFIX + length); buf = ByteBuffer.allocate(LENGTH_PREFIX + length);
@ -1191,7 +1195,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
@Override @Override
public byte[] encodeAppInfoReq() { public byte[] encodeAppInfoReq() {
if (isFw3x) { if (mFwMajor >= 3) {
return null; // can't do this on 3.x :( return null; // can't do this on 3.x :(
} }
return encodeSimpleMessage(ENDPOINT_APPMANAGER, APPMANAGER_GETUUIDS); return encodeSimpleMessage(ENDPOINT_APPMANAGER, APPMANAGER_GETUUIDS);
@ -1199,7 +1203,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
@Override @Override
public byte[] encodeAppStart(UUID uuid, boolean start) { public byte[] encodeAppStart(UUID uuid, boolean start) {
if (isFw3x) { if (mFwMajor >= 3) {
ByteBuffer buf = ByteBuffer.allocate(LENGTH_PREFIX + LENGTH_APPRUNSTATE); ByteBuffer buf = ByteBuffer.allocate(LENGTH_PREFIX + LENGTH_APPRUNSTATE);
buf.order(ByteOrder.BIG_ENDIAN); buf.order(ByteOrder.BIG_ENDIAN);
buf.putShort(LENGTH_APPRUNSTATE); buf.putShort(LENGTH_APPRUNSTATE);
@ -1218,7 +1222,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
@Override @Override
public byte[] encodeAppDelete(UUID uuid) { public byte[] encodeAppDelete(UUID uuid) {
if (isFw3x) { if (mFwMajor >= 3) {
if (UUID_PEBBLE_HEALTH.equals(uuid)) { if (UUID_PEBBLE_HEALTH.equals(uuid)) {
return encodeActivateHealth(false); return encodeActivateHealth(false);
} }
@ -1314,7 +1318,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
/* pebble specific install methods */ /* pebble specific install methods */
public byte[] encodeUploadStart(byte type, int app_id, int size, String filename) { public byte[] encodeUploadStart(byte type, int app_id, int size, String filename) {
short length; short length;
if (isFw3x && (type != PUTBYTES_TYPE_FILE)) { if (mFwMajor >= 3 && (type != PUTBYTES_TYPE_FILE)) {
length = LENGTH_UPLOADSTART_3X; length = LENGTH_UPLOADSTART_3X;
type |= 0b10000000; type |= 0b10000000;
} else { } else {
@ -1333,7 +1337,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
buf.putInt(size); buf.putInt(size);
buf.put(type); buf.put(type);
if (isFw3x && (type != PUTBYTES_TYPE_FILE)) { if (mFwMajor >= 3 && (type != PUTBYTES_TYPE_FILE)) {
buf.putInt(app_id); buf.putInt(app_id);
} else { } else {
// slot // slot
@ -1721,7 +1725,7 @@ public class PebbleProtocol extends GBDeviceProtocol {
int id; int id;
long uuid_high = 0; long uuid_high = 0;
long uuid_low = 0; long uuid_low = 0;
if (isFw3x) { if (mFwMajor >= 3) {
buf.order(ByteOrder.BIG_ENDIAN); buf.order(ByteOrder.BIG_ENDIAN);
uuid_high = buf.getLong(); uuid_high = buf.getLong();
uuid_low = buf.getLong(); uuid_low = buf.getLong();
@ -1789,9 +1793,9 @@ public class PebbleProtocol extends GBDeviceProtocol {
break; break;
} }
GBDeviceEventSendBytes sendBytesAck = null; GBDeviceEventSendBytes sendBytesAck = null;
if (isFw3x || needsAck2x) { if (mFwMajor >= 3 || needsAck2x) {
sendBytesAck = new GBDeviceEventSendBytes(); sendBytesAck = new GBDeviceEventSendBytes();
if (isFw3x) { if (mFwMajor >= 3) {
sendBytesAck.encodedBytes = encodeActionResponse(new UUID(uuid_high, uuid_low), icon_id, caption); sendBytesAck.encodedBytes = encodeActionResponse(new UUID(uuid_high, uuid_low), icon_id, caption);
} else { } else {
sendBytesAck.encodedBytes = encodeActionResponse2x(id, action, 6, caption); sendBytesAck.encodedBytes = encodeActionResponse2x(id, action, 6, caption);
@ -2037,12 +2041,11 @@ public class PebbleProtocol extends GBDeviceProtocol {
buf.get(tmp, 0, 32); buf.get(tmp, 0, 32);
versionCmd.fwVersion = new String(tmp).trim(); versionCmd.fwVersion = new String(tmp).trim();
if (versionCmd.fwVersion.startsWith("v3")) {
isFw3x = true; mFwMajor = versionCmd.fwVersion.charAt(1);
}
buf.get(tmp, 0, 9); buf.get(tmp, 0, 9);
int hwRev = buf.get() + 5; int hwRev = buf.get() + 8;
if (hwRev >= 0 && hwRev < hwRevisions.length) { if (hwRev >= 0 && hwRev < hwRevisions.length) {
versionCmd.hwVersion = hwRevisions[hwRev]; versionCmd.hwVersion = hwRevisions[hwRev];
} }

View File

@ -69,7 +69,9 @@ public class GBMusicControlReceiver extends BroadcastReceiver {
Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null); Intent upIntent = new Intent(Intent.ACTION_MEDIA_BUTTON, null);
KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, keyCode, 0); KeyEvent upEvent = new KeyEvent(eventtime, eventtime, KeyEvent.ACTION_UP, keyCode, 0);
upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent); upIntent.putExtra(Intent.EXTRA_KEY_EVENT, upEvent);
if (!"default".equals(audioPlayer)) {
upIntent.setPackage(audioPlayer); upIntent.setPackage(audioPlayer);
}
context.sendOrderedBroadcast(upIntent, null); context.sendOrderedBroadcast(upIntent, null);
} }
} }

View File

@ -7,6 +7,8 @@ public class PebbleUtils {
platformName = "basalt"; platformName = "basalt";
} else if (hwRev.startsWith("spalding")) { } else if (hwRev.startsWith("spalding")) {
platformName = "chalk"; platformName = "chalk";
} else if (hwRev.startsWith("silk")) {
platformName = "diorite";
} else { } else {
platformName = "aplite"; platformName = "aplite";
} }
@ -20,6 +22,8 @@ public class PebbleUtils {
model = "pebble_time_black"; model = "pebble_time_black";
} else if (hwRev.startsWith("spalding")) { } else if (hwRev.startsWith("spalding")) {
model = "pebble_time_round_black_20mm"; model = "pebble_time_round_black_20mm";
} else if (hwRev.startsWith("silk")) {
model = "pebble2_black";
} else { } else {
model = "pebble_black"; model = "pebble_black";
} }