From bf8fce0fe36bb5d6268fa4418becb5aef9dd19a9 Mon Sep 17 00:00:00 2001 From: "burke.davey" Date: Sun, 12 Sep 2010 23:40:37 +0000 Subject: [PATCH] Bug fixes. --- .../apps/chrometophone/DeviceRegistrar.java | 7 +++++ .../chrometophone/server/DeviceInfo.java | 19 ++----------- .../chrometophone/server/RegisterServlet.java | 26 ++++++++---------- .../chrometophone/server/SendServlet.java | 11 ++------ appengine/war/favicon.ico | Bin 0 -> 529 bytes extension/send_logic.js | 3 +- 6 files changed, 26 insertions(+), 40 deletions(-) create mode 100755 appengine/war/favicon.ico diff --git a/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java b/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java index b049235..7a58fb9 100644 --- a/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java +++ b/android/src/com/google/android/apps/chrometophone/DeviceRegistrar.java @@ -25,6 +25,7 @@ import org.apache.http.message.BasicNameValuePair; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.provider.Settings.Secure; import android.util.Log; /** @@ -108,9 +109,15 @@ public class DeviceRegistrar { String urlPath) throws Exception { SharedPreferences settings = Prefs.get(context); String accountName = settings.getString("accountName", null); + List params = new ArrayList(); params.add(new BasicNameValuePair("devregid", deviceRegistrationID)); + String deviceId = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID); + if (deviceId != null) { + params.add(new BasicNameValuePair("deviceId", deviceId)); + } + AppEngineClient client = new AppEngineClient(context, accountName); return client.makeRequest(urlPath, params); } diff --git a/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java b/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java index 7a06cce..f2526e6 100644 --- a/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java +++ b/appengine/src/com/google/android/chrometophone/server/DeviceInfo.java @@ -54,17 +54,11 @@ public class DeviceInfo { @Persistent private Key key; - @Persistent - private String deviceRegistrationID; - /** - * Each device should provide a stable ID. It can be the - * hash of the first registration, the phone ID, etc. - * Using the name seems error-prone, users may use the default - * which may be the same in identical phones, they may change name, etc. + * The ID used for sending messages to. */ @Persistent - private String id; + private String deviceRegistrationID; /** * Current supported types: @@ -136,15 +130,6 @@ public class DeviceInfo { this.deviceRegistrationID = deviceRegistrationID; } - - public void setId(String id) { - this.id = id; - } - - public String getId() { - return id; - } - public void setType(String type) { this.type = type; } diff --git a/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java b/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java index 553f969..2865cc9 100644 --- a/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java +++ b/appengine/src/com/google/android/chrometophone/server/RegisterServlet.java @@ -106,16 +106,15 @@ public class RegisterServlet extends HttpServlet { deviceName = "Phone"; } - String deviceId = req.getParameter("deviceId"); - if (deviceId == null) { - deviceId = Long.toHexString(Math.abs(deviceRegistrationId.hashCode())); - } - String deviceType = req.getParameter("deviceType"); if (deviceType == null) { deviceType = "ac2dm"; } + // Because the deviceRegistrationId isn't static, we use a static + // identifier for the device. (Can be null in older clients) + String deviceId = req.getParameter("deviceId"); + User user = checkUser(req, resp, true); if (user != null) { // Context-shared PMF. @@ -143,26 +142,25 @@ public class RegisterServlet extends HttpServlet { pm.deletePersistent(oldest); } - // TODO: dup ? update - String id = Long.toHexString(Math.abs(deviceRegistrationId.hashCode())); - - Key key = KeyFactory.createKey(DeviceInfo.class.getSimpleName(), - user.getEmail() + "#" + id); - // Get device if it already exists, else create + String suffix = + (deviceId != null ? "#" + Long.toHexString(Math.abs(deviceId.hashCode())) : ""); + Key key = KeyFactory.createKey(DeviceInfo.class.getSimpleName(), + user.getEmail() + suffix); + DeviceInfo device = null; try { device = pm.getObjectById(DeviceInfo.class, key); } catch (JDOObjectNotFoundException e) { } if (device == null) { device = new DeviceInfo(key, deviceRegistrationId); - device.setId(deviceId); - device.setName(deviceName); device.setType(deviceType); pm.makePersistent(device); } - if (device.getType().equals(DeviceInfo.TYPE_CHROME)) { + device.setName(deviceName); // update display name + + if (device.getType() != null && device.getType().equals(DeviceInfo.TYPE_CHROME)) { if (device.getPhoneToChromeExperimentEnabled()) { String channelId = ChannelServiceFactory.getChannelService().createChannel(deviceRegistrationId); diff --git a/appengine/src/com/google/android/chrometophone/server/SendServlet.java b/appengine/src/com/google/android/chrometophone/server/SendServlet.java index fccb4bf..91ed1ac 100644 --- a/appengine/src/com/google/android/chrometophone/server/SendServlet.java +++ b/appengine/src/com/google/android/chrometophone/server/SendServlet.java @@ -66,7 +66,6 @@ public class SendServlet extends HttpServlet { return; } - String deviceId = req.getParameter("deviceId"); String deviceName = req.getParameter("deviceName"); String deviceType = req.getParameter("deviceType"); if (deviceType == null) deviceType = DeviceInfo.TYPE_AC2DM; @@ -74,14 +73,14 @@ public class SendServlet extends HttpServlet { User user = RegisterServlet.checkUser(req, resp, false); if (user != null) { doSendToDevice(url, title, sel, user.getEmail(), - deviceId, deviceName, deviceType, resp); + deviceName, deviceType, resp); } else { resp.getWriter().println(LOGIN_REQUIRED_STATUS); } } private boolean doSendToDevice(String url, String title, String sel, String userAccount, - String deviceId, String deviceName, String deviceType, HttpServletResponse resp) throws IOException { + String deviceName, String deviceType, HttpServletResponse resp) throws IOException { // ok = we sent to at least one phone. boolean ok = false; @@ -103,15 +102,12 @@ public class SendServlet extends HttpServlet { } if (registrations.size() == 0) { - log.warning("Device not registered"); + log.warning("Device not registered " + userAccount); resp.getWriter().println(DEVICE_NOT_REGISTERED_STATUS); return false; } for (DeviceInfo deviceInfo : registrations) { - if (deviceId != null && !deviceId.equals(deviceInfo.getId())) { - continue; // user-specified device id - } if (deviceName != null && !deviceName.equals(deviceInfo.getName())) { continue; // user-specified device name } @@ -138,7 +134,6 @@ public class SendServlet extends HttpServlet { "InvalidRegistration".equals(ex.getMessage())) { // remove registrations, it no longer works pm.deletePersistent(deviceInfo); - throw ex; } else { throw ex; } diff --git a/appengine/war/favicon.ico b/appengine/war/favicon.ico new file mode 100755 index 0000000000000000000000000000000000000000..299c0a4ecf0b92c327b07ab96016c5d298913d3d GIT binary patch literal 529 zcmV+s0`C2ZP)p`c}A=(E{ zRaGGz4#R&5ZW4(EOs7+k0PEg!ZZ;e5O!1x95x0mp+T`>qtDk`4i6njo z^>(}cqU$z%)%*E|=a*wrw9I5U-HhL>=4b1<=~1?HaaFBoX&~ zZKM(|5!Z+^(I>-JiPuRF*Q(Vj%w{t%41>w$fD`@2Vj+4ynN0Sal}bhU27>`pBwcu< zfM&A^|Jxiz49LHHUXQC6M(TD*hIEG|0>7-IAjx6}GFZwyfNg2dqu^$}Q z6Bz?6#YTNJnFcg4Ia!X2}Ul