diff --git a/CodenameOne/src/com/codename1/charts/ChartComponent.java b/CodenameOne/src/com/codename1/charts/ChartComponent.java index f9a32f37c6..bbeee84efa 100644 --- a/CodenameOne/src/com/codename1/charts/ChartComponent.java +++ b/CodenameOne/src/com/codename1/charts/ChartComponent.java @@ -869,15 +869,14 @@ private void zoomTransition(double minX, double maxX, double minY, double maxY, } else { Shape currentViewPort = screenToChartShape(new Rectangle(getAbsoluteX(), getAbsoluteY(), getWidth(), getHeight())); float[] currentRect = currentViewPort.getBounds2D(); - float[] newRect = new float[]{(float) minX, (float) (maxX - minX), (float) minY, (float) (maxY - minY)}; float currentAspect = currentRect[2] / currentRect[3]; - float newAspect = 1.0f; - Rectangle newViewPort = new Rectangle((int) newRect[0], (int) newRect[1], (int) newRect[2], (int) newRect[3]); - if (newAspect != currentAspect) { - newViewPort.setHeight((int) (((double) newViewPort.getWidth()) / currentAspect)); - newRect = newViewPort.getBounds2D(); - newAspect = newRect[2] / newRect[3]; + Rectangle newViewPort = new Rectangle((int) minX, (int) (maxX - minX), (int) minY, (int) (maxY - minY)); + if (newViewPort.getHeight() != 0) { + float newAspect = (float) newViewPort.getWidth() / (float) newViewPort.getHeight(); + if (newAspect != currentAspect) { + newViewPort.setHeight((int) (((double) newViewPort.getWidth()) / currentAspect)); + } } ZoomTransition zt = new ZoomTransition(currentViewPort.getBounds(), newViewPort, duration); diff --git a/CodenameOne/src/com/codename1/charts/views/XYChart.java b/CodenameOne/src/com/codename1/charts/views/XYChart.java index a3b9caaf78..a3f4f3149d 100644 --- a/CodenameOne/src/com/codename1/charts/views/XYChart.java +++ b/CodenameOne/src/com/codename1/charts/views/XYChart.java @@ -278,9 +278,10 @@ public void draw(Canvas canvas, int x, int y, int width, int height, Paint paint seriesRenderer.isDisplayBoundingPoints()); int startIndex = -1; - for (Double value : range.keySet()) { - double xValue = value; - Double rValue = range.get(value); + for (Map.Entry entry : range.entrySet()) { + Double value = entry.getKey(); + double xValue = value.doubleValue(); + Double rValue = entry.getValue(); double yValue = rValue.doubleValue(); if (startIndex < 0 && (!isNullValue(yValue) || isRenderNullValues())) { startIndex = series.getIndexForKey(xValue); diff --git a/CodenameOne/src/com/codename1/components/Ads.java b/CodenameOne/src/com/codename1/components/Ads.java index 85fba71ab3..6dcd956dda 100644 --- a/CodenameOne/src/com/codename1/components/Ads.java +++ b/CodenameOne/src/com/codename1/components/Ads.java @@ -217,6 +217,7 @@ public String getAd() { * @param ad the ad to set */ public void setAd(String ad) { + this.ad = ad; HTMLComponent html = new HTMLComponent(new AsyncDocumentRequestHandlerImpl() { protected ConnectionRequest createConnectionRequest(DocumentInfo docInfo, IOCallback callback, Object[] response) { diff --git a/CodenameOne/src/com/codename1/components/ButtonList.java b/CodenameOne/src/com/codename1/components/ButtonList.java index e11adf3d1d..c549cbd690 100644 --- a/CodenameOne/src/com/codename1/components/ButtonList.java +++ b/CodenameOne/src/com/codename1/components/ButtonList.java @@ -131,6 +131,7 @@ protected void onReady(Runnable r) { * buttons. */ protected void fireReady() { + ready = true; for (Runnable r : onReady) { r.run(); } diff --git a/CodenameOne/src/com/codename1/facebook/User.java b/CodenameOne/src/com/codename1/facebook/User.java index b34f21760c..26af452ed7 100644 --- a/CodenameOne/src/com/codename1/facebook/User.java +++ b/CodenameOne/src/com/codename1/facebook/User.java @@ -210,9 +210,29 @@ private void init(Hashtable toCopy) { email = (String) toCopy.get("email"); website = (String) toCopy.get("website"); bio = (String) toCopy.get("bio"); + quotes = (String) toCopy.get("quotes"); gender = (String) toCopy.get("gender"); relationship_status = (String) toCopy.get("relationship_status"); - //timezone = Long.parseLong((String) toCopy.get("timezone")); + Object tz = toCopy.get("timezone"); + if (tz instanceof Integer) { + timezone = ((Integer) tz).longValue(); + } else if (tz instanceof Long) { + timezone = ((Long) tz).longValue(); + } else if (tz instanceof Short) { + timezone = ((Short) tz).shortValue(); + } else if (tz instanceof Byte) { + timezone = ((Byte) tz).byteValue(); + } else if (tz instanceof Double) { + timezone = (long) ((Double) tz).doubleValue(); + } else if (tz instanceof Float) { + timezone = (long) ((Float) tz).floatValue(); + } else if (tz instanceof String) { + try { + timezone = Long.parseLong((String) tz); + } catch (NumberFormatException ignore) { + timezone = 0; + } + } last_updated = (String) toCopy.get("last_updated"); locale = (String) toCopy.get("locale"); Hashtable l = (Hashtable) toCopy.get("location"); diff --git a/CodenameOne/src/com/codename1/io/ConnectionRequest.java b/CodenameOne/src/com/codename1/io/ConnectionRequest.java index d4ccd66012..f4218a4394 100644 --- a/CodenameOne/src/com/codename1/io/ConnectionRequest.java +++ b/CodenameOne/src/com/codename1/io/ConnectionRequest.java @@ -1609,19 +1609,20 @@ protected void postResponse() { protected String createRequestURL() { if (!post && requestArguments != null) { StringBuilder b = new StringBuilder(url); - Iterator e = requestArguments.keySet().iterator(); - if (e.hasNext()) { + Iterator entries = requestArguments.entrySet().iterator(); + if (entries.hasNext()) { b.append("?"); } - while (e.hasNext()) { - String key = (String) e.next(); - Object requestVal = requestArguments.get(key); + while (entries.hasNext()) { + Map.Entry entry = (Map.Entry) entries.next(); + String key = (String) entry.getKey(); + Object requestVal = entry.getValue(); if (requestVal instanceof String) { String value = (String) requestVal; b.append(key); b.append("="); b.append(value); - if (e.hasNext()) { + if (entries.hasNext()) { b.append("&"); } continue; @@ -1637,7 +1638,7 @@ protected String createRequestURL() { b.append(key); b.append("="); b.append(val[vlen - 1]); - if (e.hasNext()) { + if (entries.hasNext()) { b.append("&"); } } @@ -1655,16 +1656,17 @@ protected String createRequestURL() { protected void buildRequestBody(OutputStream os) throws IOException { if (post && requestArguments != null) { StringBuilder val = new StringBuilder(); - Iterator e = requestArguments.keySet().iterator(); - while (e.hasNext()) { - String key = (String) e.next(); - Object requestVal = requestArguments.get(key); + Iterator entries = requestArguments.entrySet().iterator(); + while (entries.hasNext()) { + Map.Entry entry = (Map.Entry) entries.next(); + String key = (String) entry.getKey(); + Object requestVal = entry.getValue(); if (requestVal instanceof String) { String value = (String) requestVal; val.append(key); val.append("="); val.append(value); - if (e.hasNext()) { + if (entries.hasNext()) { val.append("&"); } continue; @@ -1680,7 +1682,7 @@ protected void buildRequestBody(OutputStream os) throws IOException { val.append(key); val.append("="); val.append(valArray[vlen - 1]); - if (e.hasNext()) { + if (entries.hasNext()) { val.append("&"); } } @@ -2314,10 +2316,11 @@ public boolean equals(Object o) { if (r.url == url) { if (requestArguments != null) { if (r.requestArguments != null && requestArguments.size() == r.requestArguments.size()) { - Iterator e = requestArguments.keySet().iterator(); - while (e.hasNext()) { - Object key = e.next(); - Object value = requestArguments.get(key); + Iterator entries = requestArguments.entrySet().iterator(); + while (entries.hasNext()) { + Map.Entry entry = (Map.Entry) entries.next(); + Object key = entry.getKey(); + Object value = entry.getValue(); Object otherValue = r.requestArguments.get(key); if (!value.equals(otherValue)) { return false; diff --git a/CodenameOne/src/com/codename1/io/MultipartRequest.java b/CodenameOne/src/com/codename1/io/MultipartRequest.java index 0569cbe862..cd5b00b895 100644 --- a/CodenameOne/src/com/codename1/io/MultipartRequest.java +++ b/CodenameOne/src/com/codename1/io/MultipartRequest.java @@ -32,6 +32,7 @@ import java.util.Hashtable; import java.util.Iterator; import java.util.LinkedHashMap; +import java.util.Map; import java.util.Vector; /** @@ -247,7 +248,7 @@ public void addArgument(String name, String value) { protected long calculateContentLength() { long length = 0L; - Iterator e = args.keySet().iterator(); + Iterator entries = args.entrySet().iterator(); long dLength = "Content-Disposition: form-data; name=\"\"; filename=\"\"".length() + 2; // 2 = CRLF long ctLength = "Content-Type: ".length() + 2; // 2 = CRLF @@ -258,9 +259,10 @@ protected long calculateContentLength() { ctLength = "Content-Type: text/plain; charset=UTF-8".length() + 4; // 4 = 2 * CRLF long baseTextLength = dLength + ctLength + bLength + 2; // 2 = CRLF at end of part - while (e.hasNext()) { - String key = (String) e.next(); - Object value = args.get(key); + while (entries.hasNext()) { + Map.Entry entry = (Map.Entry) entries.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); if (value instanceof String) { length += baseTextLength; length += key.length(); @@ -319,13 +321,14 @@ protected long calculateContentLength() { protected void buildRequestBody(OutputStream os) throws IOException { Writer writer = null; writer = new OutputStreamWriter(os, "UTF-8"); - Iterator e = args.keySet().iterator(); - while (e.hasNext()) { + Iterator entries = args.entrySet().iterator(); + while (entries.hasNext()) { if (shouldStop()) { break; } - String key = (String) e.next(); - Object value = args.get(key); + Map.Entry entry = (Map.Entry) entries.next(); + String key = (String) entry.getKey(); + Object value = entry.getValue(); writer.write("--"); writer.write(boundary); diff --git a/CodenameOne/src/com/codename1/io/NetworkManager.java b/CodenameOne/src/com/codename1/io/NetworkManager.java index ad25421a3b..b58d4f432b 100644 --- a/CodenameOne/src/com/codename1/io/NetworkManager.java +++ b/CodenameOne/src/com/codename1/io/NetworkManager.java @@ -829,10 +829,18 @@ private boolean runCurrentRequest(@Async.Execute ConnectionRequest req) { } pending.addElement(currentRequest); LOCK.notify(); - try { - LOCK.wait(30); - } catch (InterruptedException ex) { - ex.printStackTrace(); + long end = System.currentTimeMillis() + 30; + while (true) { + long remaining = end - System.currentTimeMillis(); + if (remaining <= 0) { + break; + } + try { + LOCK.wait(remaining); + break; + } catch (InterruptedException ex) { + ex.printStackTrace(); + } } } } @@ -964,7 +972,7 @@ public void run() { // prevent waiting when there is still a pending request // this can occur with a race condition since the synchronize // scope is limited to prevent blocking on add... - if (pending.size() == 0) { + while (pending.size() == 0 && running && !stopped) { LOCK.wait(); } } catch (InterruptedException ex) { diff --git a/CodenameOne/src/com/codename1/io/Properties.java b/CodenameOne/src/com/codename1/io/Properties.java index 61e0909fb7..2909936a3c 100644 --- a/CodenameOne/src/com/codename1/io/Properties.java +++ b/CodenameOne/src/com/codename1/io/Properties.java @@ -33,6 +33,7 @@ import java.util.HashMap; import java.util.Hashtable; import java.util.Iterator; +import java.util.Map; import java.util.Set; /** @@ -387,15 +388,14 @@ private void selectProperties(Hashtable selectProperties, final b if (defaults != null) { defaults.selectProperties(selectProperties, isStringOnly); } - Iterator keys = keySet().iterator(); - while (keys.hasNext()) { + for (Map.Entry entry : entrySet()) { @SuppressWarnings("unchecked") - K key = (K) keys.next(); + K key = (K) entry.getKey(); if (isStringOnly && !(key instanceof String)) { // Only select property with string key and value continue; } - Object value = get(key); + Object value = entry.getValue(); selectProperties.put(key, value); } } diff --git a/CodenameOne/src/com/codename1/io/URL.java b/CodenameOne/src/com/codename1/io/URL.java index c27473cf95..0b77c75507 100644 --- a/CodenameOne/src/com/codename1/io/URL.java +++ b/CodenameOne/src/com/codename1/io/URL.java @@ -273,8 +273,8 @@ public void connect() throws IOException { connection = impl.connect(url, doInput, doOutput); impl.setHttpMethod(connection, requestMethod); if (properties != null && !properties.isEmpty()) { - for (String key : properties.keySet()) { - impl.setHeader(connection, key, properties.get(key)); + for (Map.Entry entry : properties.entrySet()) { + impl.setHeader(connection, entry.getKey(), entry.getValue()); } } } diff --git a/CodenameOne/src/com/codename1/io/Util.java b/CodenameOne/src/com/codename1/io/Util.java index b2cde0b7ff..83fc074e11 100644 --- a/CodenameOne/src/com/codename1/io/Util.java +++ b/CodenameOne/src/com/codename1/io/Util.java @@ -410,9 +410,10 @@ public static void writeObject(Object o, DataOutputStream out) throws IOExceptio Map v = (Map) o; out.writeUTF("java.util.Map"); out.writeInt(v.size()); - for (Object key : v.keySet()) { - writeObject(key, out); - writeObject(v.get(key), out); + for (Object entryObj : v.entrySet()) { + Map.Entry entry = (Map.Entry) entryObj; + writeObject(entry.getKey(), out); + writeObject(entry.getValue(), out); } return; } @@ -1640,9 +1641,18 @@ public static void sleep(int t) { */ public static void wait(Object o, int t) { synchronized (o) { - try { - o.wait(t); - } catch (InterruptedException e) { + long end = System.currentTimeMillis() + t; + while (true) { + long remaining = end - System.currentTimeMillis(); + if (remaining <= 0) { + return; + } + try { + o.wait(remaining); + return; + } catch (InterruptedException e) { + // retry until timeout elapses + } } } } @@ -1655,9 +1665,14 @@ public static void wait(Object o, int t) { */ public static void wait(Object o) { synchronized (o) { - try { - o.wait(); - } catch (InterruptedException e) { + boolean waiting = true; + while (waiting) { + try { + o.wait(); + waiting = false; + } catch (InterruptedException e) { + // ignore and continue waiting + } } } } diff --git a/CodenameOne/src/com/codename1/io/gzip/Adler32.java b/CodenameOne/src/com/codename1/io/gzip/Adler32.java index 16d0b5f65a..6b5575e34a 100644 --- a/CodenameOne/src/com/codename1/io/gzip/Adler32.java +++ b/CodenameOne/src/com/codename1/io/gzip/Adler32.java @@ -92,7 +92,6 @@ public void update(byte[] buf, int index, int len) { int len2 = len % NMAX; while (len1-- > 0) { int k = NMAX; - len -= k; while (k-- > 0) { s1 += buf[index++] & 0xff; s2 += s1; @@ -102,7 +101,6 @@ public void update(byte[] buf, int index, int len) { } int k = len2; - len -= k; while (k-- > 0) { s1 += buf[index++] & 0xff; s2 += s1; diff --git a/CodenameOne/src/com/codename1/io/gzip/Deflate.java b/CodenameOne/src/com/codename1/io/gzip/Deflate.java index 3cfe15e061..4ce8268ae3 100644 --- a/CodenameOne/src/com/codename1/io/gzip/Deflate.java +++ b/CodenameOne/src/com/codename1/io/gzip/Deflate.java @@ -1204,7 +1204,7 @@ int deflate_slow(int flush) { } if (match_available != 0) { - bflush = _tr_tally(0, window[strstart - 1] & 0xff); + _tr_tally(0, window[strstart - 1] & 0xff); match_available = 0; } flush_block_only(flush == Z_FINISH); diff --git a/CodenameOne/src/com/codename1/io/gzip/InfCodes.java b/CodenameOne/src/com/codename1/io/gzip/InfCodes.java index 83f99c8181..8856aaf5cb 100644 --- a/CodenameOne/src/com/codename1/io/gzip/InfCodes.java +++ b/CodenameOne/src/com/codename1/io/gzip/InfCodes.java @@ -410,8 +410,6 @@ int proc(int r) { s.write = q; r = s.inflate_flush(r); q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - if (s.read != s.write) { s.bitb = b; s.bitk = k; diff --git a/CodenameOne/src/com/codename1/io/gzip/Inflate.java b/CodenameOne/src/com/codename1/io/gzip/Inflate.java index ed87f14163..46c515b430 100644 --- a/CodenameOne/src/com/codename1/io/gzip/Inflate.java +++ b/CodenameOne/src/com/codename1/io/gzip/Inflate.java @@ -276,8 +276,6 @@ int inflate(int f) { case DICT4: if (z.avail_in == 0) return r; - r = f; - z.avail_in--; z.total_in++; this.need = ((long) (z.next_in[z.next_in_index++] & 0xff) << 24) & 0xff000000L; @@ -718,7 +716,6 @@ private int readBytes(int r, int f) throws Return { if (tmp_string == null) { tmp_string = new java.io.ByteArrayOutputStream(); } - int b = 0; while (this.need > 0) { if (z.avail_in == 0) { throw new Return(r); @@ -726,7 +723,6 @@ private int readBytes(int r, int f) throws Return { r = f; z.avail_in--; z.total_in++; - b = z.next_in[z.next_in_index]; tmp_string.write(z.next_in, z.next_in_index, 1); z.adler.update(z.next_in, z.next_in_index, 1); z.next_in_index++; diff --git a/CodenameOne/src/com/codename1/io/gzip/InflaterInputStream.java b/CodenameOne/src/com/codename1/io/gzip/InflaterInputStream.java index 3fb285c675..e3ad43f9b5 100644 --- a/CodenameOne/src/com/codename1/io/gzip/InflaterInputStream.java +++ b/CodenameOne/src/com/codename1/io/gzip/InflaterInputStream.java @@ -222,7 +222,7 @@ public void readHeader() throws IOException { inflater.setInput(empty, 0, 0, false); inflater.setOutput(empty, 0, 0); - int err = inflater.inflate(JZlib.Z_NO_FLUSH); + inflater.inflate(JZlib.Z_NO_FLUSH); if (!inflater.istate.inParsingHeader()) { return; } @@ -233,7 +233,7 @@ public void readHeader() throws IOException { if (i <= 0) throw new IOException("no input"); inflater.setInput(b1); - err = inflater.inflate(JZlib.Z_NO_FLUSH); + int err = inflater.inflate(JZlib.Z_NO_FLUSH); if (err != 0/*Z_OK*/) throw new IOException(inflater.msg); } diff --git a/CodenameOne/src/com/codename1/io/gzip/Tree.java b/CodenameOne/src/com/codename1/io/gzip/Tree.java index 3beccf7d0d..5797e0f7bd 100644 --- a/CodenameOne/src/com/codename1/io/gzip/Tree.java +++ b/CodenameOne/src/com/codename1/io/gzip/Tree.java @@ -181,13 +181,14 @@ private static int bi_reverse( int len // its bit length ) { int res = 0; - do { + for (int i = 0; i < len; i++) { res |= code & 1; code >>>= 1; - res <<= 1; + if (i + 1 < len) { + res <<= 1; + } } - while (--len > 0); - return res >>> 1; + return res; } // Compute the optimal bit lengths for a tree and update the total bit length diff --git a/CodenameOne/src/com/codename1/io/rest/RequestBuilder.java b/CodenameOne/src/com/codename1/io/rest/RequestBuilder.java index 33e64fe142..cc0f2c0f58 100644 --- a/CodenameOne/src/com/codename1/io/rest/RequestBuilder.java +++ b/CodenameOne/src/com/codename1/io/rest/RequestBuilder.java @@ -876,8 +876,9 @@ private JSONParser createJSONParser() { private Connection createRequest(boolean parseJson) { Connection req = new Connection(parseJson); - for (String key : pathParams.keySet()) { - url = com.codename1.util.StringUtil.replaceAll(url, "{" + key + "}", pathParams.get(key)); + for (Map.Entry entry : pathParams.entrySet()) { + String key = entry.getKey(); + url = com.codename1.util.StringUtil.replaceAll(url, "{" + key + "}", entry.getValue()); } if (contentType != null) { req.setContentType(contentType); @@ -905,16 +906,17 @@ private Connection createRequest(boolean parseJson) { if (readTimeout != null) { req.setReadTimeout(readTimeout); } - for (String key : queryParams.keySet()) { - Object value = queryParams.get(key); + for (Map.Entry entry : queryParams.entrySet()) { + String key = entry.getKey(); + Object value = entry.getValue(); if (value instanceof String[]) { req.addArgument(key, (String[]) value); } else { req.addArgument(key, (String) value); } } - for (String key : headers.keySet()) { - req.addRequestHeader(key, headers.get(key)); + for (Map.Entry entry : headers.entrySet()) { + req.addRequestHeader(entry.getKey(), entry.getValue()); } for (ActionListener l : errorCallbacks) { req.addExceptionListener(l); diff --git a/CodenameOne/src/com/codename1/javascript/JavascriptContext.java b/CodenameOne/src/com/codename1/javascript/JavascriptContext.java index 99454580e4..a474108527 100644 --- a/CodenameOne/src/com/codename1/javascript/JavascriptContext.java +++ b/CodenameOne/src/com/codename1/javascript/JavascriptContext.java @@ -37,6 +37,7 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.Hashtable; +import java.util.Map; import java.util.Random; /** @@ -225,8 +226,9 @@ public void cleanup() { Log.p("Cleaning up Javascript lookup table."); } ArrayList remove = new ArrayList(); - for (Integer i : objectMap.keySet()) { - if (Display.getInstance().extractHardRef(objectMap.get(i)) == null) { + for (Map.Entry entry : objectMap.entrySet()) { + Integer i = entry.getKey(); + if (Display.getInstance().extractHardRef(entry.getValue()) == null) { remove.add(i); } } diff --git a/CodenameOne/src/com/codename1/l10n/SimpleDateFormat.java b/CodenameOne/src/com/codename1/l10n/SimpleDateFormat.java index c09214678e..ad3e4a0419 100644 --- a/CodenameOne/src/com/codename1/l10n/SimpleDateFormat.java +++ b/CodenameOne/src/com/codename1/l10n/SimpleDateFormat.java @@ -310,7 +310,7 @@ public String format(Date source) { @Override String format(Date source, StringBuffer toAppendTo) { StringBuilder sb = new StringBuilder(); - String out = format(source, sb); + format(source, sb); toAppendTo.append(sb); return toAppendTo.toString(); diff --git a/CodenameOne/src/com/codename1/location/GeofenceManager.java b/CodenameOne/src/com/codename1/location/GeofenceManager.java index 84fa6b6109..19a81b4f0f 100644 --- a/CodenameOne/src/com/codename1/location/GeofenceManager.java +++ b/CodenameOne/src/com/codename1/location/GeofenceManager.java @@ -174,7 +174,6 @@ private synchronized void updateExpiryTimes(Geofence... geofences) { private synchronized void purgeExpired() { long now = System.currentTimeMillis(); Map times = getExpiryTimes(false); - List expired = new ArrayList(); Map fences = getFences(false); List activeKeys = getActiveKeys(false); Map activeFences = getActiveFences(false); @@ -532,7 +531,6 @@ public synchronized void update(int timeout, boolean forceRefresh) { List activeKeys = getActiveKeys(false); for (String id : activeIds) { Geofence g = getFences(false).get(id); - Geofence cg = getActiveFences(false).get(id); if (!forceRefresh && g != null) { if (!isWithinRadius(g.getLoc(), here, getBubbleRadius() + g.getRadius())) { LocationManager.getLocationManager().removeGeoFencing(id); diff --git a/CodenameOne/src/com/codename1/maps/MapComponent.java b/CodenameOne/src/com/codename1/maps/MapComponent.java index 837ff17248..e287a38904 100644 --- a/CodenameOne/src/com/codename1/maps/MapComponent.java +++ b/CodenameOne/src/com/codename1/maps/MapComponent.java @@ -491,9 +491,9 @@ public void run() { y = y - getAbsoluteY(); Tile t = screenTile(); Coord southWest = t.position(x - 20, t.dimension().getHeight() - y - 20); - Coord c = Mercator.inverseMercator(southWest.getLatitude(), southWest.getLongitude()); + Mercator.inverseMercator(southWest.getLatitude(), southWest.getLongitude()); Coord northEast = t.position(x + 20, t.dimension().getHeight() - y + 20); - c = Mercator.inverseMercator(northEast.getLatitude(), northEast.getLongitude()); + Mercator.inverseMercator(northEast.getLatitude(), northEast.getLongitude()); BoundingBox bbox = new BoundingBox(southWest, northEast); Enumeration e = _layers.elements(); diff --git a/CodenameOne/src/com/codename1/payment/Purchase.java b/CodenameOne/src/com/codename1/payment/Purchase.java index cd9747958a..4ada6161d9 100644 --- a/CodenameOne/src/com/codename1/payment/Purchase.java +++ b/CodenameOne/src/com/codename1/payment/Purchase.java @@ -651,7 +651,6 @@ public void onSucess(Receipt[] value) { private Date getExpiryDate(Receipt[] receipts, String... skus) { Date expiryDate = new Date(0L); List lSkus = Arrays.asList(skus); - long now = System.currentTimeMillis(); for (Receipt r : receipts) { if (!lSkus.contains(r.getSku())) { diff --git a/CodenameOne/src/com/codename1/processing/Result.java b/CodenameOne/src/com/codename1/processing/Result.java index d5ebe8eb43..245199c448 100644 --- a/CodenameOne/src/com/codename1/processing/Result.java +++ b/CodenameOne/src/com/codename1/processing/Result.java @@ -1026,23 +1026,23 @@ private StructuredContent apply(final StructuredContent start, } public void mapNamespaceAlias(String namespaceURI, String alias) { - Map attributes = root.getChild(0).getAttributes(); - if (attributes == null) { - return; - } - Iterator e = attributes.keySet().iterator(); - while (e.hasNext()) { - String key = (String) e.next(); - if (!key.startsWith("xmlns:")) { - continue; - } - if (namespaceURI.equals(attributes.get(key))) { - if (namespaceAliases == null) { - namespaceAliases = new Hashtable(); - } - namespaceAliases.put(alias, key.substring(6)); - break; - } - } - } -} + Map attributes = root.getChild(0).getAttributes(); + if (attributes == null) { + return; + } + for (Object entryObj : ((Map) attributes).entrySet()) { + Map.Entry entry = (Map.Entry) entryObj; + String key = (String) entry.getKey(); + if (!key.startsWith("xmlns:")) { + continue; + } + if (namespaceURI.equals(entry.getValue())) { + if (namespaceAliases == null) { + namespaceAliases = new Hashtable(); + } + namespaceAliases.put(alias, key.substring(6)); + break; + } + } + } +} diff --git a/CodenameOne/src/com/codename1/properties/MapProperty.java b/CodenameOne/src/com/codename1/properties/MapProperty.java index 20839a7f29..be3e918516 100644 --- a/CodenameOne/src/com/codename1/properties/MapProperty.java +++ b/CodenameOne/src/com/codename1/properties/MapProperty.java @@ -23,6 +23,8 @@ package com.codename1.properties; +import com.codename1.properties.PropertyBusinessObject; + import java.util.Collection; import java.util.Iterator; import java.util.LinkedHashMap; @@ -209,8 +211,9 @@ public Map asMap() { */ public Map asExplodedMap() { Map m = new LinkedHashMap(); - for (T1 k : value.keySet()) { - T2 v = value.get(k); + for (Map.Entry entry : value.entrySet()) { + T1 k = entry.getKey(); + T2 v = entry.getValue(); if (v instanceof PropertyBusinessObject) { m.put(k, ((PropertyBusinessObject) v).getPropertyIndex().toMapRepresentation()); } else { diff --git a/CodenameOne/src/com/codename1/properties/PropertyIndex.java b/CodenameOne/src/com/codename1/properties/PropertyIndex.java index a83c0908f7..01af02b3c6 100644 --- a/CodenameOne/src/com/codename1/properties/PropertyIndex.java +++ b/CodenameOne/src/com/codename1/properties/PropertyIndex.java @@ -54,6 +54,7 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Enumeration; /** * Maps the properties that are in a class/object and provides access to them so tools such as ORM @@ -425,8 +426,11 @@ public void populateFromMap(Map m, Class m, Class contentMap = (Map) val; - for (String kk : contentMap.keySet()) { + for (Map.Entry contentEntry : contentMap.entrySet()) { + String kk = contentEntry.getKey(); PropertyBusinessObject po = (PropertyBusinessObject) valueType.newInstance(); - Map vv = (Map) contentMap.get(kk); + Map vv = (Map) contentEntry.getValue(); po.getPropertyIndex().populateFromMap(vv, valueType); ((MapProperty) p).set(kk, po); } @@ -624,7 +629,8 @@ public PropertyBase getXmlTextElement() { public void fromXml(Element e) { Hashtable atts = e.getAttributes(); if (atts != null) { - for (Object a : atts.keySet()) { + for (Enumeration keys = atts.keys(); keys.hasMoreElements();) { + Object a = keys.nextElement(); PropertyBase pb = get((String) a); if (pb != null) { setSimpleObject(pb, atts.get(a)); diff --git a/CodenameOne/src/com/codename1/push/PushContent.java b/CodenameOne/src/com/codename1/push/PushContent.java index bd6055a86d..dd2d08b1d7 100644 --- a/CodenameOne/src/com/codename1/push/PushContent.java +++ b/CodenameOne/src/com/codename1/push/PushContent.java @@ -50,6 +50,14 @@ private PushContent() { metaData = p("metaData", null); actionId = p("actionId", null); textResponse = p("textResponse", null); + String typeVal = p("type", null); + if (typeVal != null) { + try { + type = Integer.parseInt(typeVal); + } catch (NumberFormatException err) { + type = 0; + } + } } private static String[] keys() { diff --git a/CodenameOne/src/com/codename1/share/FacebookShare.java b/CodenameOne/src/com/codename1/share/FacebookShare.java index 532f4c3dca..62782d5a5b 100644 --- a/CodenameOne/src/com/codename1/share/FacebookShare.java +++ b/CodenameOne/src/com/codename1/share/FacebookShare.java @@ -99,7 +99,6 @@ public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) { NetworkEvent ne = (NetworkEvent) evt; - int code = ne.getResponseCode(); FaceBookAccess.getInstance().removeResponseCodeListener(this); progress.dispose(); Dialog.show("Failed to Share", "for some reason sharing has failed, try again later.", "Ok", null); @@ -133,8 +132,7 @@ public void actionPerformed(ActionEvent evt) { public void actionPerformed(ActionEvent evt) { NetworkEvent ne = (NetworkEvent) evt; - int code = ne.getResponseCode(); - FaceBookAccess.getInstance().removeResponseCodeListener(this); + FaceBookAccess.getInstance().removeResponseCodeListener(this); progress.dispose(); Dialog.show("Failed to Share", "for some reason sharing has failed, try again later.", "Ok", null); finish(); diff --git a/CodenameOne/src/com/codename1/social/FacebookConnect.java b/CodenameOne/src/com/codename1/social/FacebookConnect.java index 00e745de74..4c14b748e6 100644 --- a/CodenameOne/src/com/codename1/social/FacebookConnect.java +++ b/CodenameOne/src/com/codename1/social/FacebookConnect.java @@ -46,6 +46,10 @@ public class FacebookConnect extends Login { private static FacebookConnect instance; private final String[] permissions = new String[]{"public_profile", "email", "user_friends"}; + static { + implClass = null; + } + FacebookConnect() { setOauth2URL("https://www.facebook.com/dialog/oauth"); } diff --git a/CodenameOne/src/com/codename1/social/GoogleConnect.java b/CodenameOne/src/com/codename1/social/GoogleConnect.java index eeeb959e3c..0535c62214 100644 --- a/CodenameOne/src/com/codename1/social/GoogleConnect.java +++ b/CodenameOne/src/com/codename1/social/GoogleConnect.java @@ -48,6 +48,10 @@ public class GoogleConnect extends Login { private static final String tokenURL = "https://www.googleapis.com/oauth2/v3/token"; private static GoogleConnect instance; + static { + implClass = null; + } + GoogleConnect() { setOauth2URL("https://accounts.google.com/o/oauth2/auth"); setScope("profile email"); diff --git a/CodenameOne/src/com/codename1/testing/TestUtils.java b/CodenameOne/src/com/codename1/testing/TestUtils.java index 0fbdeae1b9..6a505f3689 100644 --- a/CodenameOne/src/com/codename1/testing/TestUtils.java +++ b/CodenameOne/src/com/codename1/testing/TestUtils.java @@ -591,7 +591,6 @@ public static boolean screenshotTest(String screenshotName) { int[] rgba = mute.getRGBCached(); Image orig = Image.createImage(Storage.getInstance().createInputStream(screenshotName)); int[] origRgba = orig.getRGBCached(); - orig = null; for (int iter = 0; iter < rgba.length; iter++) { if (rgba[iter] != origRgba[iter]) { log("screenshots do not match at offset " + iter + " saving additional image under " + screenshotName + ".fail"); diff --git a/CodenameOne/src/com/codename1/ui/BrowserComponent.java b/CodenameOne/src/com/codename1/ui/BrowserComponent.java index 488d231b7c..626b55ddee 100644 --- a/CodenameOne/src/com/codename1/ui/BrowserComponent.java +++ b/CodenameOne/src/com/codename1/ui/BrowserComponent.java @@ -1998,8 +1998,10 @@ public void onSucess(JSRef value) { try { Map m = p.parseJSON(new StringReader(value.getValue())); Map out = new HashMap(); - for (String prop : out.keySet()) { - Map propVal = (Map) m.get(prop); + for (Object entryObj : m.entrySet()) { + Map.Entry entry = (Map.Entry) entryObj; + String prop = (String) entry.getKey(); + Map propVal = (Map) entry.getValue(); out.put(prop, new JSRef((String) propVal.get("value"), (String) propVal.get("type"))); } callback.onSucess(out); @@ -2073,8 +2075,10 @@ public Map getAndWait(int timeout, Collection properties) try { Map m = p.parseJSON(new StringReader(value.getValue())); Map out = new HashMap(); - for (String prop : out.keySet()) { - Map propVal = (Map) m.get(prop); + for (Object entryObj : m.entrySet()) { + Map.Entry entry = (Map.Entry) entryObj; + String prop = (String) entry.getKey(); + Map propVal = (Map) entry.getValue(); out.put(prop, new JSRef((String) propVal.get("value"), (String) propVal.get("type"))); } return out; @@ -2155,9 +2159,10 @@ public void set(int timeout, Map properties, SuccessCallback entry : properties.entrySet()) { + js.append("self['").append(entry.getKey()).append("']=${").append(i).append("};"); + params[i] = entry.getValue(); + i++; } js.append("callback.onSuccess(undefined)"); execute(timeout, js.toString(), callback); @@ -2183,9 +2188,10 @@ public void setAndWait(int timeout, Map properties) { StringBuilder js = new StringBuilder(); Object[] params = new Object[properties.size()]; int i = 0; - for (String key : properties.keySet()) { - js.append("self['").append(key).append("']=${").append(i).append("};"); - params[i] = properties.get(key); + for (Map.Entry entry : properties.entrySet()) { + js.append("self['").append(entry.getKey()).append("']=${").append(i).append("};"); + params[i] = entry.getValue(); + i++; } js.append("callback.onSuccess(undefined)"); executeAndWait(timeout, js.toString()); diff --git a/CodenameOne/src/com/codename1/ui/ComboBox.java b/CodenameOne/src/com/codename1/ui/ComboBox.java index 08d184b013..3e769d6bc4 100644 --- a/CodenameOne/src/com/codename1/ui/ComboBox.java +++ b/CodenameOne/src/com/codename1/ui/ComboBox.java @@ -238,8 +238,7 @@ public int getBaseline(int width, int height) { Component selected; if (getRenderingPrototype() != null) { selected = getRenderer().getListCellRendererComponent(this, getRenderingPrototype(), 0, true); - } - if (getModel().getSize() > 0) { + } else if (getModel().getSize() > 0) { selected = getRenderer().getListCellRendererComponent(this, getModel().getItemAt(0), 0, true); } else { selected = getRenderer().getListCellRendererComponent(this, "XXXXXXXXXXX", 0, true); diff --git a/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java b/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java index ab56a03892..664c0ad63f 100644 --- a/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java +++ b/CodenameOne/src/com/codename1/ui/CommonProgressAnimations.java @@ -323,7 +323,6 @@ protected void paintBackground(Graphics g) { int w = f.charWidth('M'); Style s = cmp == null ? getStyle() : cmp.getStyle(); - int paddingTop = s.getPaddingTop(); int paddingLeft = s.getPaddingLeftNoRTL(); int paddingRight = s.getPaddingRightNoRTL(); int paddingBottom = s.getPaddingBottom(); diff --git a/CodenameOne/src/com/codename1/ui/Component.java b/CodenameOne/src/com/codename1/ui/Component.java index 63142c4aa9..d5f6753938 100644 --- a/CodenameOne/src/com/codename1/ui/Component.java +++ b/CodenameOne/src/com/codename1/ui/Component.java @@ -2332,8 +2332,6 @@ private void drawShadow(Graphics g, Image img, int relativeX, int relativeY, int int spreadRadiusPixels = dp2px(spreadRadius); int offsetXPixels = dp2px(offsetX); int offsetYPixels = dp2px(offsetY); - int imageWidth = img.getWidth(); - int imageHeight = img.getHeight(); for (int i = 0; i < len; i++) { int pixel = mask[i]; int alphaMask = (pixel & 0xff000000); @@ -2598,8 +2596,6 @@ public void run() { int relativeY = 0; - long startTime = System.currentTimeMillis(); - switch (elevation) { case 1: case 2: @@ -6992,7 +6988,6 @@ protected void laidOut() { if (ci.isEditingText()) { return; } - Form f = getComponentForm(); int ivk = getInvisibleAreaUnderVKB(); if (isScrollableY() && getScrollY() > 0 && getScrollY() + getHeight() > diff --git a/CodenameOne/src/com/codename1/ui/ComponentImage.java b/CodenameOne/src/com/codename1/ui/ComponentImage.java index 45569d90e4..bfbad47dfa 100644 --- a/CodenameOne/src/com/codename1/ui/ComponentImage.java +++ b/CodenameOne/src/com/codename1/ui/ComponentImage.java @@ -216,9 +216,6 @@ public boolean requiresDrawImage() { */ @Override protected void drawImage(Graphics g, Object nativeGraphics, int x, int y) { - int tx = g.getTranslateX(); - int ty = g.getTranslateY(); - int oldX = cmp.getX(); int oldY = cmp.getY(); int oldW = cmp.getWidth(); diff --git a/CodenameOne/src/com/codename1/ui/Container.java b/CodenameOne/src/com/codename1/ui/Container.java index f4bf0e8212..082d59e200 100644 --- a/CodenameOne/src/com/codename1/ui/Container.java +++ b/CodenameOne/src/com/codename1/ui/Container.java @@ -4299,6 +4299,8 @@ public MorphAnimation(Container thisContainer, int duration, Motion[][] motions) } this.thisContainer = thisContainer; this.motions = motions; + animatedComponents = new Vector(); + opacity = new Motion[0]; } @Override diff --git a/CodenameOne/src/com/codename1/ui/Display.java b/CodenameOne/src/com/codename1/ui/Display.java index 4e568059ef..866026d249 100644 --- a/CodenameOne/src/com/codename1/ui/Display.java +++ b/CodenameOne/src/com/codename1/ui/Display.java @@ -1002,7 +1002,15 @@ private void paintTransitionAnimation() { // flush and so require the painting thread to get CPU too. try { synchronized (lock) { - lock.wait(transitionDelay); + long end = System.currentTimeMillis() + transitionDelay; + while (true) { + long remaining = end - System.currentTimeMillis(); + if (remaining <= 0) { + break; + } + lock.wait(remaining); + break; + } } } catch (InterruptedException ex) { ex.printStackTrace(); @@ -1024,15 +1032,18 @@ void mainEDTLoop() { // for features such as call serially while (impl.getCurrentForm() == null) { // PMD Fix: AvoidBranchingStatementAsLastInLoop synchronized (lock) { - if (shouldEDTSleep()) { - if (!pendingIdleSerialCalls.isEmpty()) { - Runnable r = pendingIdleSerialCalls.get(0); - pendingIdleSerialCalls.remove(0); - callSerially(r); - } else { + while (shouldEDTSleep() && pendingIdleSerialCalls.isEmpty()) { + try { lock.wait(); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; } } + if (shouldEDTSleep() && !pendingIdleSerialCalls.isEmpty()) { + Runnable r = pendingIdleSerialCalls.remove(0); + callSerially(r); + } // paint transition or intro animations and don't do anything else if such // animations are in progress... @@ -1064,13 +1075,23 @@ void mainEDTLoop() { synchronized (lock) { if (shouldEDTSleep()) { if (!pendingIdleSerialCalls.isEmpty()) { - Runnable r = pendingIdleSerialCalls.get(0); - pendingIdleSerialCalls.remove(0); + Runnable r = pendingIdleSerialCalls.remove(0); callSerially(r); } else { impl.edtIdle(true); - lock.wait(); + while (shouldEDTSleep() && pendingIdleSerialCalls.isEmpty()) { + try { + lock.wait(); + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; + } + } impl.edtIdle(false); + if (!pendingIdleSerialCalls.isEmpty()) { + Runnable r = pendingIdleSerialCalls.remove(0); + callSerially(r); + } } } } @@ -1114,7 +1135,21 @@ void edtLoopImpl() { if (!noSleep) { synchronized (lock) { impl.edtIdle(true); - lock.wait(Math.max(1, framerateLock - (time))); + long waitTime = Math.max(1, framerateLock - (time)); + long end = System.currentTimeMillis() + waitTime; + while (true) { + long remaining = end - System.currentTimeMillis(); + if (remaining <= 0) { + break; + } + try { + lock.wait(remaining); + break; + } catch (InterruptedException ie) { + Thread.currentThread().interrupt(); + break; + } + } impl.edtIdle(false); } } diff --git a/CodenameOne/src/com/codename1/ui/Form.java b/CodenameOne/src/com/codename1/ui/Form.java index 509e325491..aee646238d 100644 --- a/CodenameOne/src/com/codename1/ui/Form.java +++ b/CodenameOne/src/com/codename1/ui/Form.java @@ -3656,7 +3656,6 @@ private boolean fireReleaseListeners(int x, int y) { public void pointerReleased(int x, int y) { try { Component origPressedCmp = pressedCmp; - boolean inOrigPressedCmpBounds = pressedCmpAbsBounds.contains(x, y); rippleMotion = null; setPressedCmp(null); boolean isScrollWheeling = Display.impl.isScrollWheeling(); diff --git a/CodenameOne/src/com/codename1/ui/Image.java b/CodenameOne/src/com/codename1/ui/Image.java index b0cc2f020d..744205244a 100644 --- a/CodenameOne/src/com/codename1/ui/Image.java +++ b/CodenameOne/src/com/codename1/ui/Image.java @@ -997,8 +997,7 @@ public Image modifyAlphaWithTranslucency(byte alpha) { int size = w * h; int[] arr = getRGB(); int alphaInt = (((int) alpha) << 24) & 0xff000000; - float alphaRatio = (alpha & 0xff); - alphaRatio = (alpha & 0xff) / 255.0f; + float alphaRatio = (alpha & 0xff) / 255.0f; for (int iter = 0; iter < size; iter++) { int currentAlpha = (arr[iter] >> 24) & 0xff; if (currentAlpha != 0) { diff --git a/CodenameOne/src/com/codename1/ui/IndexedImage.java b/CodenameOne/src/com/codename1/ui/IndexedImage.java index 28b0439fd6..ceb95509f9 100644 --- a/CodenameOne/src/com/codename1/ui/IndexedImage.java +++ b/CodenameOne/src/com/codename1/ui/IndexedImage.java @@ -361,6 +361,9 @@ public Image scaled(int width, int height) { } Dimension d = new Dimension(width, height); Image i = getCachedImage(d); + if (i != null) { + return i; + } // currently we only support byte data... i = new IndexedImage(width, height, palette, scaleArray(imageDataByte, width, height)); cacheImage(d, i); diff --git a/CodenameOne/src/com/codename1/ui/InterFormContainer.java b/CodenameOne/src/com/codename1/ui/InterFormContainer.java index 8104d8507e..a9016e5040 100644 --- a/CodenameOne/src/com/codename1/ui/InterFormContainer.java +++ b/CodenameOne/src/com/codename1/ui/InterFormContainer.java @@ -94,9 +94,10 @@ public boolean filter(Component c) { }); - for (Component c : set1.keySet()) { + for (Map.Entry entry : set1.entrySet()) { + Component c = entry.getKey(); if (set2.containsKey(c)) { - out.put(set1.get(c), set2.get(c)); + out.put(entry.getValue(), set2.get(c)); } } return out; diff --git a/CodenameOne/src/com/codename1/ui/LinearGradientPaint.java b/CodenameOne/src/com/codename1/ui/LinearGradientPaint.java index bbd0632b55..9df1f74c36 100644 --- a/CodenameOne/src/com/codename1/ui/LinearGradientPaint.java +++ b/CodenameOne/src/com/codename1/ui/LinearGradientPaint.java @@ -185,7 +185,6 @@ private void paint(Graphics g, double x, double y, double w, double h, boolean p double ph = Math.max(w, h) * 2; - double pEndX = (endX - x) * pw / w; //System.out.println("px="+px+", "+py+", "+pw+", "+ph+" theta="+theta); g.getTransform(t); diff --git a/CodenameOne/src/com/codename1/ui/SwipeableContainer.java b/CodenameOne/src/com/codename1/ui/SwipeableContainer.java index d76b4a4089..dc22b8eb54 100644 --- a/CodenameOne/src/com/codename1/ui/SwipeableContainer.java +++ b/CodenameOne/src/com/codename1/ui/SwipeableContainer.java @@ -377,14 +377,12 @@ public void actionPerformed(ActionEvent evt) { bottomLeftW = bottomL.getWidth(); } - Component bottomR; - int bottomRightW = 0; - int bottomRightX = topWrapper.getWidth(); - if (bottomRightWrapper.getComponentCount() > 0) { - bottomR = bottomRightWrapper.getComponentAt(0); - bottomRightW = bottomR.getWidth(); - bottomRightX = bottomR.getX(); - } + Component bottomR; + int bottomRightW = 0; + if (bottomRightWrapper.getComponentCount() > 0) { + bottomR = bottomRightWrapper.getComponentAt(0); + bottomRightW = bottomR.getWidth(); + } switch (type) { case PRESS: { diff --git a/CodenameOne/src/com/codename1/ui/Tabs.java b/CodenameOne/src/com/codename1/ui/Tabs.java index c08ddb0f5f..ae9ead5aa2 100644 --- a/CodenameOne/src/com/codename1/ui/Tabs.java +++ b/CodenameOne/src/com/codename1/ui/Tabs.java @@ -1127,13 +1127,16 @@ private void initTabsFocus() { } private void initTabFocus(Component tab, Component content) { - Component focus = null; if (content.isFocusable()) { - focus = content; + tab.setFocusable(true); + return; } if (content instanceof Container) { - focus = ((Container) content).findFirstFocusable(); + Component focus = ((Container) content).findFirstFocusable(); + if (focus != null) { + tab.setFocusable(true); + } } } diff --git a/CodenameOne/src/com/codename1/ui/TextArea.java b/CodenameOne/src/com/codename1/ui/TextArea.java index fba4650041..332e9eaf48 100644 --- a/CodenameOne/src/com/codename1/ui/TextArea.java +++ b/CodenameOne/src/com/codename1/ui/TextArea.java @@ -768,7 +768,6 @@ public void keyReleased(int keyCode) { onClick(); return; } - Display d = Display.getInstance(); if (action == 0 && isTypedKey(keyCode)) { //registerAsInputDevice(); Display.getInstance().editString(this, getMaxSize(), getConstraint(), getText(), keyCode); @@ -1929,7 +1928,6 @@ public void setEndsWith3Points(boolean endsWith3Points) { * primarily by implementation APIs. */ public void registerAsInputDevice() { - final TextArea cmp = this; Form f = this.getComponentForm(); if (f != null && Display.impl.getEditingText() != this) { @@ -1964,7 +1962,6 @@ public void registerAsInputDevice() { */ public void startEditing() { if (!Display.getInstance().isTextEditing(this)) { - final TextArea cmp = this; //registerAsInputDevice(); Display.getInstance().editString(this, maxSize, constraint, text); } diff --git a/CodenameOne/src/com/codename1/ui/TextSelection.java b/CodenameOne/src/com/codename1/ui/TextSelection.java index e289de3440..dc607187bf 100644 --- a/CodenameOne/src/com/codename1/ui/TextSelection.java +++ b/CodenameOne/src/com/codename1/ui/TextSelection.java @@ -658,8 +658,7 @@ private boolean isVerticallyCoveredByBounds(Component cmp, Rectangle bounds) { private boolean shouldCoverToEndOfLine(Span span, Rectangle bounds) { int spy = span.getBounds().getY(); int sph = span.getBounds().getHeight(); - boolean shouldCoverToEndOfLine = spy + 2 * sph / 3 > bounds.getY() && spy + sph <= bounds.getY() + bounds.getHeight(); - return shouldCoverToEndOfLine; + return spy + 2 * sph / 3 > bounds.getY() && spy + sph <= bounds.getY() + bounds.getHeight(); } private void updateSnappedSelectedBounds() { diff --git a/CodenameOne/src/com/codename1/ui/UIFragment.java b/CodenameOne/src/com/codename1/ui/UIFragment.java index e5265f45d8..f599228caf 100644 --- a/CodenameOne/src/com/codename1/ui/UIFragment.java +++ b/CodenameOne/src/com/codename1/ui/UIFragment.java @@ -785,7 +785,6 @@ private static Element buildXMLFromJSONNotation(Object o) throws IOException { return buildXMLFromJSONNotation(m.get("root")); } else { Object children = null; - String key = null; if (isBorderLayout(m)) { setBorderLayoutBehaviour(m); el = new Element("border"); diff --git a/CodenameOne/src/com/codename1/ui/animations/CommonTransitions.java b/CodenameOne/src/com/codename1/ui/animations/CommonTransitions.java index 405765afc6..d006545212 100644 --- a/CodenameOne/src/com/codename1/ui/animations/CommonTransitions.java +++ b/CodenameOne/src/com/codename1/ui/animations/CommonTransitions.java @@ -439,7 +439,6 @@ public void initTransition() { buffer = Image.createImage(Math.min(d.getDisplayWidth(), getDialogParent(dlg).getWidth()), Math.min(d.getDisplayHeight(), dlg.getContentPane().getParent().getHeight() + getDialogTitleHeight(dlg)), 0); - Graphics g = buffer.getGraphics(); Style stl = dlg.getDialogComponent().getStyle(); byte bgt = stl.getBgTransparency(); stl.setBgTransparency(0xff); diff --git a/CodenameOne/src/com/codename1/ui/animations/FlipTransition.java b/CodenameOne/src/com/codename1/ui/animations/FlipTransition.java index 142c6eb510..4535c023d9 100644 --- a/CodenameOne/src/com/codename1/ui/animations/FlipTransition.java +++ b/CodenameOne/src/com/codename1/ui/animations/FlipTransition.java @@ -184,13 +184,9 @@ public boolean animate() { } - private void makePerspectiveTransform(Transform t) { - int x = getSource().getAbsoluteX(); - int y = getSource().getAbsoluteY(); - int w = getSource().getWidth(); - int h = getSource().getHeight(); - float displayH = Display.getInstance().getDisplayHeight(); - float displayW = Display.getInstance().getDisplayWidth(); + private void makePerspectiveTransform(Transform t) { + float displayH = Display.getInstance().getDisplayHeight(); + float displayW = Display.getInstance().getDisplayWidth(); //double midX = (float)x+(float)w/2.0; //double midY = (float)y+(float)h/2.0; double fovy = 0.25; diff --git a/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java b/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java index 3f95dcad23..966331bc99 100644 --- a/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java +++ b/CodenameOne/src/com/codename1/ui/animations/MorphTransition.java @@ -31,7 +31,7 @@ import com.codename1.ui.geom.Dimension; import java.util.HashMap; -import java.util.Iterator; +import java.util.Map; /** * A transition inspired by the Android L release morph activity effect allowing @@ -87,11 +87,8 @@ private static Component findByName(Container root, String componentName) { public Transition copy(boolean reverse) { MorphTransition m = create(duration); if (reverse) { - Iterator keyIterator = fromTo.keySet().iterator(); - while (keyIterator.hasNext()) { - String k = keyIterator.next(); - String v = fromTo.get(k); - m.fromTo.put(v, k); + for (Map.Entry entry : fromTo.entrySet()) { + m.fromTo.put(entry.getValue(), entry.getKey()); } } else { m.fromTo.putAll(fromTo); @@ -133,22 +130,23 @@ public final void initTransition() { Container s = (Container) getSource(); Container d = (Container) getDestination(); - Iterator keyIterator = fromTo.keySet().iterator(); int size = fromTo.size(); fromToComponents = new CC[size]; Form destForm = d.getComponentForm(); destForm.forceRevalidate(); Form sourceForm = s.getComponentForm(); - for (int iter = 0; iter < size; iter++) { - String k = keyIterator.next(); - String v = fromTo.get(k); + int index = 0; + for (Map.Entry entry : fromTo.entrySet()) { + String k = entry.getKey(); + String v = entry.getValue(); Component sourceCmp = findByName(s, k); Component destCmp = findByName(d, v); if (sourceCmp == null || destCmp == null) { continue; } CC cc = new CC(sourceCmp, destCmp, sourceForm, destForm); - fromToComponents[iter] = cc; + fromToComponents[index] = cc; + index++; cc.placeholderDest = new Label(); cc.placeholderDest.setVisible(false); Container destParent = cc.dest.getParent(); diff --git a/CodenameOne/src/com/codename1/ui/html/HTMLElement.java b/CodenameOne/src/com/codename1/ui/html/HTMLElement.java index 784522d712..3af67aaa67 100644 --- a/CodenameOne/src/com/codename1/ui/html/HTMLElement.java +++ b/CodenameOne/src/com/codename1/ui/html/HTMLElement.java @@ -1556,7 +1556,6 @@ boolean isFirstChild() { } HTMLElement parent = (HTMLElement) getParent(); if (parent != null) { - Vector v = parent.getChildren(); for (Element e : parent) { HTMLElement elem = (HTMLElement) e; if (elem == this) { diff --git a/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java b/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java index 7b4c488562..d8808f0690 100644 --- a/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java +++ b/CodenameOne/src/com/codename1/ui/html/ResourceThreadQueue.java @@ -221,8 +221,6 @@ synchronized void startRunningImages() { urls.addElement(imageUrl); } } - urls = null; - images = new Hashtable(); if (!startDequeue()) { diff --git a/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java b/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java index 0d6f071972..679357cddf 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java +++ b/CodenameOne/src/com/codename1/ui/layouts/GridBagLayout.java @@ -27,6 +27,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.Hashtable; +import java.util.Map; /** *

Codename One port of the infamous GridBagLayout based on the Apache Harmony code. For new applications @@ -42,10 +43,10 @@ public class GridBagLayout extends Layout { protected static final int MINSIZE = 1; protected static final int PREFERREDSIZE = 2; - public volatile double[] columnWeights; - public volatile double[] rowWeights; - public volatile int[] columnWidths; - public volatile int[] rowHeights; + public double[] columnWeights; + public double[] rowWeights; + public int[] columnWidths; + public int[] rowHeights; // Direct modification is forbidden protected volatile Hashtable comptable; protected volatile GridBagConstraints defaultConstraints; @@ -493,8 +494,9 @@ private Dimension initCompsArray(Container parent, Component[] components) { int maxW = 0; int maxH = 0; int i = 0; - for (Component comp : comptable.keySet()) { - GridBagConstraints cons = comptable.get(comp); + for (Map.Entry entry : comptable.entrySet()) { + Component comp = entry.getKey(); + GridBagConstraints cons = entry.getValue(); if ((comp.getParent() == parent) && comp.isVisible()) { components[i++] = comp; } @@ -509,7 +511,8 @@ private Dimension initCompsArray(Container parent, Component[] components) { private int getComponentsNumber(Container parent) { int componentsNumber = 0; - for (Component comp : comptable.keySet()) { + for (Map.Entry entry : comptable.entrySet()) { + Component comp = entry.getKey(); if ((comp.getParent() == parent) && comp.isVisible()) { componentsNumber++; } diff --git a/CodenameOne/src/com/codename1/ui/layouts/GroupLayout.java b/CodenameOne/src/com/codename1/ui/layouts/GroupLayout.java index 2b26b7e66a..36bad8ebc5 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/GroupLayout.java +++ b/CodenameOne/src/com/codename1/ui/layouts/GroupLayout.java @@ -917,7 +917,6 @@ public void layoutContainer(Container parent) { Iterator componentInfo = componentInfos.values().iterator(); while (componentInfo.hasNext()) { ComponentInfo info = (ComponentInfo) componentInfo.next(); - Component c = info.getComponent(); info.setBounds(insetLeft, insetTop, width, ltr); } } diff --git a/CodenameOne/src/com/codename1/ui/layouts/mig/CodenameOneMiGContainerWrapper.java b/CodenameOne/src/com/codename1/ui/layouts/mig/CodenameOneMiGContainerWrapper.java index 8a8e5c5800..e98233f056 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/mig/CodenameOneMiGContainerWrapper.java +++ b/CodenameOne/src/com/codename1/ui/layouts/mig/CodenameOneMiGContainerWrapper.java @@ -89,12 +89,6 @@ public int getComponentType(boolean disregardScrollPane) { // Removed for 2.3 because the parent.isValid() in MigLayout will catch this instead. public int getLayoutHashCode() { - //long n = System.nanoTime(); - int h = super.getLayoutHashCode(); - - if (isLeftToRight()) - h += 416343; - return 0; } } diff --git a/CodenameOne/src/com/codename1/ui/layouts/mig/ConstraintParser.java b/CodenameOne/src/com/codename1/ui/layouts/mig/ConstraintParser.java index d148f1cfe3..7179819223 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/mig/ConstraintParser.java +++ b/CodenameOne/src/com/codename1/ui/layouts/mig/ConstraintParser.java @@ -471,8 +471,8 @@ private static DimConstraint parseDimConstraint(String s, BoundSize gapBefore, B public static Map parseComponentConstraints(Map constrMap) { HashMap flowConstrMap = new HashMap(); - for (ComponentWrapper c : constrMap.keySet()) { - flowConstrMap.put(c, parseComponentConstraint(constrMap.get(c))); + for (Map.Entry entry : constrMap.entrySet()) { + flowConstrMap.put(entry.getKey(), parseComponentConstraint(entry.getValue())); } return flowConstrMap; diff --git a/CodenameOne/src/com/codename1/ui/layouts/mig/Grid.java b/CodenameOne/src/com/codename1/ui/layouts/mig/Grid.java index af06d99006..86e78db583 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/mig/Grid.java +++ b/CodenameOne/src/com/codename1/ui/layouts/mig/Grid.java @@ -1059,12 +1059,13 @@ private static synchronized void saveGrid(ComponentWrapper parComp, LinkedHashMa ArrayList weakCells = new ArrayList(grid.size()); - for (Integer xyInt : grid.keySet()) { - Cell cell = grid.get(xyInt); - if (xyInt != null) { - int x = xyInt & 0x0000ffff; - int y = xyInt >> 16; - + for (Map.Entry entry : grid.entrySet()) { + Integer xyInt = entry.getKey(); + Cell cell = entry.getValue(); + if (xyInt != null) { + int x = xyInt & 0x0000ffff; + int y = xyInt >> 16; + for (CompWrap cw : cell.compWraps) { weakCells.add(new WeakCell(cw.comp.getComponent(), x, y, cell.spanx, cell.spany)); } @@ -1498,11 +1499,11 @@ private void clearGroupLinkBounds() { return; } - for (String o : linkTargetIDs.keySet()) { - if (linkTargetIDs.get(o) == Boolean.TRUE) { - LinkHandler.clearBounds(container.getLayout(), o); - } - } + for (Map.Entry entry : linkTargetIDs.entrySet()) { + if (Boolean.TRUE.equals(entry.getValue())) { + LinkHandler.clearBounds(container.getLayout(), entry.getKey()); + } + } } private void resetLinkValues(boolean parentSize, boolean compLinks) { diff --git a/CodenameOne/src/com/codename1/ui/layouts/mig/MigLayout.java b/CodenameOne/src/com/codename1/ui/layouts/mig/MigLayout.java index e1c2c1d685..0035d59dc3 100644 --- a/CodenameOne/src/com/codename1/ui/layouts/mig/MigLayout.java +++ b/CodenameOne/src/com/codename1/ui/layouts/mig/MigLayout.java @@ -304,8 +304,8 @@ public Map getConstraintMap() { public void setConstraintMap(Map map) { scrConstrMap.clear(); ccMap.clear(); - for (Component e : map.keySet()) { - setComponentConstraintsImpl(e, map.get(e), true); + for (Map.Entry entry : map.entrySet()) { + setComponentConstraintsImpl(entry.getKey(), entry.getValue(), true); } } @@ -360,7 +360,6 @@ public void setComponentConstraints(Component comp, Object constr) { * component. */ private void setComponentConstraintsImpl(Component comp, Object constr, boolean noCheck) { - Container parent = comp.getParent(); if (!noCheck && !scrConstrMap.containsKey(comp)) { throw new IllegalArgumentException("Component must already be added to parent!"); } diff --git a/CodenameOne/src/com/codename1/ui/plaf/Border.java b/CodenameOne/src/com/codename1/ui/plaf/Border.java index dcea458c70..438fb5a402 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/Border.java +++ b/CodenameOne/src/com/codename1/ui/plaf/Border.java @@ -1488,8 +1488,6 @@ private void paintBorderBackground(Graphics g, final int xParameter, final int y width -= (topLeft.getWidth() + topRight.getWidth()); g.clipRect(x, y, width, height); if (center != null && width > 0 && height > 0) { - int centerWidth = center.getWidth(); - int centerHeight = center.getHeight(); g.drawImage(center, x, y, width, height); } Image top = images[0]; @@ -1806,7 +1804,6 @@ void paint(Graphics g, int x, int y, int width, int height, Component c) { g.drawLine(x + width - 2, y + 2, x + width - 2, y + height - 3); break; case TYPE_COMPOUND: - Style style = c.getStyle(); boolean drawLeft = true; boolean drawRight = true; diff --git a/CodenameOne/src/com/codename1/ui/plaf/CSSBorder.java b/CodenameOne/src/com/codename1/ui/plaf/CSSBorder.java index 44bb7659fc..8500efd73b 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/CSSBorder.java +++ b/CodenameOne/src/com/codename1/ui/plaf/CSSBorder.java @@ -19,6 +19,7 @@ import com.codename1.ui.geom.GeneralPath; import com.codename1.ui.geom.Rectangle2D; import com.codename1.ui.util.Resources; +import com.codename1.util.StringUtil; import java.io.IOException; import java.util.ArrayList; @@ -210,6 +211,11 @@ public CSSBorder decorate(CSSBorder border, String cssProperty, String cssProper return border.borderImage(cssPropertyValue); } }); + decorators.put("box-shadow", new Decorator() { + public CSSBorder decorate(CSSBorder border, String cssProperty, String cssPropertyValue) { + return border.boxShadow(cssPropertyValue); + } + }); } private Color backgroundColor; @@ -854,6 +860,72 @@ private CSSBorder borderImage(String cssProperty) { return borderImageWithName(parts[0], splices); } + public CSSBorder boxShadow(String value) { + if (value == null) { + boxShadow = null; + return this; + } + String trimmed = value.trim(); + if (trimmed.length() == 0 || "none".equalsIgnoreCase(trimmed)) { + boxShadow = null; + return this; + } + + BoxShadow shadow = new BoxShadow(); + List rawPartsList = StringUtil.tokenize(trimmed, " \t\r\n"); + String[] rawParts = new String[rawPartsList.size()]; + rawPartsList.toArray(rawParts); + int idx = 0; + if (idx < rawParts.length && "inset".equalsIgnoreCase(rawParts[idx])) { + shadow.inset = true; + idx++; + } + if (idx < rawParts.length) { + ScalarUnit h = tryParseScalarUnit(rawParts[idx]); + if (h != null) { + shadow.hOffset = h; + idx++; + } + } + if (idx < rawParts.length) { + ScalarUnit v = tryParseScalarUnit(rawParts[idx]); + if (v != null) { + shadow.vOffset = v; + idx++; + } + } + if (idx < rawParts.length) { + ScalarUnit blur = tryParseScalarUnit(rawParts[idx]); + if (blur != null) { + shadow.blurRadius = blur; + idx++; + } + } + if (idx < rawParts.length) { + ScalarUnit spread = tryParseScalarUnit(rawParts[idx]); + if (spread != null) { + shadow.spread = spread; + idx++; + } + } + if (idx < rawParts.length) { + shadow.color = new Color(rawParts[idx]); + } + boxShadow = shadow; + return this; + } + + private ScalarUnit tryParseScalarUnit(String token) { + if (token == null || token.length() == 0) { + return null; + } + try { + return new ScalarUnit(token); + } catch (Exception err) { + return null; + } + } + /** * Sets the border radius for rounded corners. * @@ -1875,8 +1947,8 @@ private String toCSSString() { } private class ColorStop { - Color color; - int position; + Color color = new Color("#000000"); + int position = 0; public String toCSSString() { @@ -1892,7 +1964,7 @@ public String toCSSString() { private class LinearGradient { float angle; - ColorStop[] colors; + ColorStop[] colors = new ColorStop[0]; double directionRadian() { return angle * Math.PI / 180.0; @@ -1922,7 +1994,7 @@ private class RadialGradient { byte shape; byte size; float xPos, yPos; - ColorStop[] colors; + ColorStop[] colors = new ColorStop[0]; private String toCSSString() { throw new RuntimeException("RadialGradlient toCSSString() not implemented yet"); diff --git a/CodenameOne/src/com/codename1/ui/plaf/DefaultLookAndFeel.java b/CodenameOne/src/com/codename1/ui/plaf/DefaultLookAndFeel.java index 7b96114f94..5e8922fa3d 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/DefaultLookAndFeel.java +++ b/CodenameOne/src/com/codename1/ui/plaf/DefaultLookAndFeel.java @@ -428,7 +428,6 @@ public Span calculateLabelSpan(TextSelection sel, Label l) { int gap = l.getGap(); int stateIconSize = 0; - int stateIconYPosition = 0; String text = l.getText(); Style style = l.getStyle(); int cmpX = l.getX(); @@ -457,9 +456,6 @@ public Span calculateLabelSpan(TextSelection sel, Label l) { if (stateIcon != null) { stateIconSize = stateIcon.getWidth(); //square image width == height preserveSpaceForState = stateIconSize + gap; - stateIconYPosition = cmpY + topPadding - + (cmpHeight - topPadding - - bottomPadding) / 2 - stateIconSize / 2; int tX = cmpX; if (((Button) l).isOppositeSide()) { if (rtl) { @@ -479,7 +475,6 @@ public Span calculateLabelSpan(TextSelection sel, Label l) { } } - //g.drawImage(stateIcon, tX, stateIconYPosition); } //default for bottom left alignment diff --git a/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java b/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java index 403218ae37..94ed5f3a28 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java +++ b/CodenameOne/src/com/codename1/ui/plaf/StyleParser.java @@ -2484,7 +2484,6 @@ public void setSpliceInsets(double[] insets) { * @param decimalPlaces Number of decimal places to round to. */ public void setSpliceInsets(double[] insets, int decimalPlaces) { - L10NManager l = L10NManager.getInstance(); this.spliceInsets = round(insets[Component.TOP], decimalPlaces) + " " + round(insets[Component.RIGHT], decimalPlaces) + " " + diff --git a/CodenameOne/src/com/codename1/ui/plaf/UIManager.java b/CodenameOne/src/com/codename1/ui/plaf/UIManager.java index 9e872de43d..0933005f44 100644 --- a/CodenameOne/src/com/codename1/ui/plaf/UIManager.java +++ b/CodenameOne/src/com/codename1/ui/plaf/UIManager.java @@ -575,15 +575,13 @@ private void resetThemeProps(Hashtable installedTheme) { boolean darkMode = darkModeBoolean != null && darkModeBoolean.booleanValue() && CN.isDarkMode() != null && CN.isDarkMode().booleanValue(); - Font thinFont = Font.getDefaultFont(); - Font lightFont = thinFont; + Font lightFont = Font.getDefaultFont(); Font italic = Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_ITALIC, Font.SIZE_MEDIUM); Font bold = Font.createSystemFont(Font.FACE_SYSTEM, Font.STYLE_BOLD, Font.SIZE_MEDIUM); if (Font.isNativeFontSchemeSupported()) { int size = Display.getInstance().convertToPixels(2.5f); - thinFont = Font.createTrueTypeFont("native:MainThin", "native:MainThin").derive(size, Font.STYLE_PLAIN); lightFont = Font.createTrueTypeFont("native:MainLight", "native:MainLight").derive(size, Font.STYLE_PLAIN); italic = Font.createTrueTypeFont("native:ItalicLight", "native:ItalicLight").derive(size, Font.STYLE_ITALIC); bold = Font.createTrueTypeFont(Font.NATIVE_MAIN_BOLD, Font.NATIVE_MAIN_BOLD).derive(size, Font.STYLE_BOLD); @@ -1709,7 +1707,6 @@ Style parseStyle(Resources theme, String id, String prefix, String baseStyle, bo } else { themeProps.remove(id + "derive"); } - String val = null; Integer bgColor = styleInfo.getBgColor(); if (bgColor != null) { themeProps.put(id + Style.BG_COLOR, Integer.toHexString(bgColor)); @@ -1876,28 +1873,28 @@ Style createStyle(String id, String prefix, boolean selected) { style.setSurface((Boolean) themeProps.get(id + Style.SURFACE)); } if (bgColor != null) { - style.setBgColor(Integer.valueOf(bgColor, 16).intValue()); + style.setBgColor(Integer.parseInt(bgColor, 16)); } if (fgColor != null) { - style.setFgColor(Integer.valueOf(fgColor, 16).intValue()); + style.setFgColor(Integer.parseInt(fgColor, 16)); } if (transperency != null) { - style.setBgTransparency(Integer.valueOf(transperency).intValue()); + style.setBgTransparency(Integer.parseInt(transperency)); } else { if (selected) { transperency = (String) themeProps.get(originalId + Style.TRANSPARENCY); if (transperency != null) { - style.setBgTransparency(Integer.valueOf(transperency).intValue()); + style.setBgTransparency(Integer.parseInt(transperency)); } } } if (opacity != null) { - style.setOpacity(Integer.valueOf(opacity).intValue()); + style.setOpacity(Integer.parseInt(opacity)); } else { if (selected) { opacity = (String) themeProps.get(originalId + Style.OPACITY); if (opacity != null) { - style.setBgTransparency(Integer.valueOf(opacity).intValue()); + style.setBgTransparency(Integer.parseInt(opacity)); } } } diff --git a/CodenameOne/src/com/codename1/ui/spinner/SpinnerNode.java b/CodenameOne/src/com/codename1/ui/spinner/SpinnerNode.java index 2e6ccd0f1b..668370f1df 100644 --- a/CodenameOne/src/com/codename1/ui/spinner/SpinnerNode.java +++ b/CodenameOne/src/com/codename1/ui/spinner/SpinnerNode.java @@ -318,7 +318,6 @@ public Style getStyle() { @Override protected void layoutChildren() { double width = boundsInLocal.get().getWidth(); - double height = boundsInLocal.get().getHeight(); double rendererHeight = renderer.getPreferredH(); double circumference = rendererHeight * numSides; double diameter = circumference / Math.PI; diff --git a/CodenameOne/src/com/codename1/ui/spinner/TimeSpinner3D.java b/CodenameOne/src/com/codename1/ui/spinner/TimeSpinner3D.java index 0fa72411f1..fd99efed1c 100644 --- a/CodenameOne/src/com/codename1/ui/spinner/TimeSpinner3D.java +++ b/CodenameOne/src/com/codename1/ui/spinner/TimeSpinner3D.java @@ -64,7 +64,7 @@ class TimeSpinner3D extends Container implements InternalPickerWidget { private boolean showMeridiem = true; private int currentHour = 8; private int currentMinute = 0; - private boolean currentMeridiem; + private boolean currentMeridiem = false; /** * Default constructor @@ -528,7 +528,8 @@ public void paint(Graphics g) { g.setColor(hour.getSelectedOverlayStyle().getBgColor()); g.setAlpha(255); g.fillRect(getX(), getY(), getWidth(), getHeight()); - super.paint(g); //To change body of generated methods, choose Tools | Templates. + super.paint(g); + g.setAlpha(alpha); } diff --git a/CodenameOne/src/com/codename1/ui/util/Resources.java b/CodenameOne/src/com/codename1/ui/util/Resources.java index cf2cdf93d2..90e9d08326 100644 --- a/CodenameOne/src/com/codename1/ui/util/Resources.java +++ b/CodenameOne/src/com/codename1/ui/util/Resources.java @@ -541,7 +541,10 @@ private int decode(int val) { * Reads the header of the resource file */ private void readHeader() throws IOException { - int size = input.readShort(); + // The header begins with a short denoting the size of the header section. + // We don't currently use this value, but it must be consumed so that the + // subsequent reads stay aligned with the original format. + input.readShort(); majorVersion = input.readShort(); minorVersion = input.readShort(); @@ -679,9 +682,8 @@ public String[] getThemeResourceNames() { */ public String[] getImageResourceNames() { ArrayList vec = new ArrayList(); - Iterator e = resourceTypes.keySet().iterator(); - while (e.hasNext()) { - String c = e.next(); + for (Map.Entry entry : resourceTypes.entrySet()) { + String c = entry.getKey(); if (isImage(c)) { vec.add(c); } @@ -702,11 +704,9 @@ byte getResourceType(String name) { private String[] getResourceTypeNames(byte b) { ArrayList vec = new ArrayList(); - Iterator e = resourceTypes.keySet().iterator(); - while (e.hasNext()) { - String c = e.next(); - if (resourceTypes.get(c).byteValue() == b) { - vec.add(c); + for (Map.Entry entry : resourceTypes.entrySet()) { + if (entry.getValue().byteValue() == b) { + vec.add(entry.getKey()); } } return toStringArray(vec); @@ -1060,7 +1060,7 @@ Image createImage(DataInputStream input) throws IOException { if (Image.isSVGSupported()) { byte[] s = new byte[svgSize]; input.readFully(s); - String baseURL = input.readUTF(); + input.readUTF(); boolean animated = input.readBoolean(); Image img = readMultiImage(input, true); Image svg = createSVG(animated, s); @@ -1322,10 +1322,6 @@ Hashtable loadTheme(String id, boolean newerVersion) throws IOException { String platformPrefix = "platform-" + platformName + "-"; String densityPrefix = "density-" + densityStr + "-"; String devicePrefix = "device-" + deviceType + "-"; - String platformDensityPrefix = platformPrefix + densityPrefix; - String devicePlatformPrefix = devicePrefix + platformPrefix; - String devicePlatformDensityPrefix = devicePlatformPrefix + densityPrefix; - theme.put("name", id); // marks the theme as uninitialized so we can finish "wiring" cached resources diff --git a/CodenameOne/src/com/codename1/ui/util/SwipeBackSupport.java b/CodenameOne/src/com/codename1/ui/util/SwipeBackSupport.java index 5d10179689..868da28e8b 100644 --- a/CodenameOne/src/com/codename1/ui/util/SwipeBackSupport.java +++ b/CodenameOne/src/com/codename1/ui/util/SwipeBackSupport.java @@ -129,6 +129,7 @@ public boolean animate() { destinationForm.setTransitionInAnimator(t); destinationForm = null; dragActivated = false; + transitionRunning = false; return false; } return true; @@ -161,6 +162,7 @@ public void actionPerformed(ActionEvent evt) { } void startBackTransition(final Form currentForm, Form destination) { + transitionRunning = true; final Transition t = destination.getTransitionOutAnimator().copy(true); if (t instanceof CommonTransitions) { Transition originalTransition = currentForm.getTransitionOutAnimator(); diff --git a/CodenameOne/src/com/codename1/ui/util/UIBuilder.java b/CodenameOne/src/com/codename1/ui/util/UIBuilder.java index 41d5cd0591..3a655db228 100644 --- a/CodenameOne/src/com/codename1/ui/util/UIBuilder.java +++ b/CodenameOne/src/com/codename1/ui/util/UIBuilder.java @@ -195,7 +195,7 @@ public class UIBuilder { //implements Externalizable { */ private static final String FORM_STATE_KEY_CONTAINER = "$cnt"; // used by the resource editor - static boolean ignorBaseForm; + static boolean ignorBaseForm = false; private static Hashtable componentRegistry; private static boolean blockAnalytics; Vector baseFormNavigationStack = new Vector(); diff --git a/CodenameOne/src/com/codename1/ui/util/WeakHashMap.java b/CodenameOne/src/com/codename1/ui/util/WeakHashMap.java index 9c736bd27e..d8b9cafcd4 100644 --- a/CodenameOne/src/com/codename1/ui/util/WeakHashMap.java +++ b/CodenameOne/src/com/codename1/ui/util/WeakHashMap.java @@ -108,8 +108,8 @@ public V remove(Object key) { */ @Override public void putAll(Map m) { - for (K o : m.keySet()) { - put(o, m.get(o)); + for (Map.Entry entry : m.entrySet()) { + put(entry.getKey(), entry.getValue()); } } diff --git a/CodenameOne/src/com/codename1/util/TBigDecimal.java b/CodenameOne/src/com/codename1/util/TBigDecimal.java index 4bdd76903a..8db2efdcef 100644 --- a/CodenameOne/src/com/codename1/util/TBigDecimal.java +++ b/CodenameOne/src/com/codename1/util/TBigDecimal.java @@ -1480,7 +1480,6 @@ public TBigDecimal divide(TBigDecimal divisor, TMathContext mc) { public TBigDecimal divideToIntegralValue(TBigDecimal divisor) { TBigInteger integralValue; // the integer of result TBigInteger powerOfTen; // some power of ten - TBigInteger[] quotAndRem = {getUnscaledValue()}; long newScale = (long) this.scale - divisor.scale; long tempScale = 0; int i = 1; @@ -1504,6 +1503,7 @@ public TBigDecimal divideToIntegralValue(TBigDecimal divisor) { powerOfTen = TMultiplication.powerOf10(-newScale); integralValue = getUnscaledValue().multiply(powerOfTen).divide(divisor.getUnscaledValue()); // To strip trailing zeros approximating to the preferred scale + TBigInteger[] quotAndRem; while (!integralValue.testBit(0)) { quotAndRem = integralValue.divideAndRemainder(TEN_POW[i]); if ((quotAndRem[1].signum() == 0) diff --git a/CodenameOne/src/com/codename1/util/TBitLevel.java b/CodenameOne/src/com/codename1/util/TBitLevel.java index 3436dee493..d7e8e9ade1 100644 --- a/CodenameOne/src/com/codename1/util/TBitLevel.java +++ b/CodenameOne/src/com/codename1/util/TBitLevel.java @@ -67,28 +67,26 @@ static int numberOfLeadingZeros(int i) { if (i == 0) { return 32; } - int n = 0; - if (i >>> 16 != 0) { - i >>>= 16; - n |= 16; - } - if (i >>> 8 != 0) { - i >>>= 8; - n |= 8; + + int n = 1; + if ((i >>> 16) == 0) { + n += 16; + i <<= 16; } - if (i >>> 4 != 0) { - i >>>= 4; - n |= 4; + if ((i >>> 24) == 0) { + n += 8; + i <<= 8; } - if (i >>> 2 != 0) { - i >>>= 2; - n |= 2; + if ((i >>> 28) == 0) { + n += 4; + i <<= 4; } - if (i >>> 1 != 0) { - i >>>= 1; - n |= 1; + if ((i >>> 30) == 0) { + n += 2; + i <<= 2; } - return 32 - n - 1; + n -= (i >>> 31); + return n; } /** @@ -313,16 +311,13 @@ static boolean shiftRight(int[] result, int resultLen, int[] source, int intCoun } if (count == 0) { System.arraycopy(source, intCount, result, 0, resultLen); - i = resultLen; } else { int leftShiftCount = 32 - count; - - allZero &= (source[i] << leftShiftCount) == 0; - for (i = 0; i < resultLen - 1; i++) { - result[i] = (source[i + intCount] >>> count) | (source[i + intCount + 1] << leftShiftCount); + allZero &= (source[intCount] << leftShiftCount) == 0; + for (int j = 0; j < resultLen - 1; j++) { + result[j] = (source[j + intCount] >>> count) | (source[j + intCount + 1] << leftShiftCount); } - result[i] = (source[i + intCount] >>> count); - i++; + result[resultLen - 1] = (source[resultLen - 1 + intCount] >>> count); } return allZero;