@SuppressLint("SimpleDateFormat") private static void processDiscountResponse(String response, MapActivity mapActivity) { try { OsmandApplication app = mapActivity.getMyApplication(); JSONObject obj = new JSONObject(response); String message = obj.getString("message"); String description = obj.getString("description"); String icon = obj.getString("icon"); String url = parseUrl(app, obj.getString("url")); SimpleDateFormat df = new SimpleDateFormat("dd-MM-yyyy HH:mm"); Date start = df.parse(obj.getString("start")); Date end = df.parse(obj.getString("end")); int showStartFrequency = obj.getInt("show_start_frequency"); double showDayFrequency = obj.getDouble("show_day_frequency"); int maxTotalShow = obj.getInt("max_total_show"); JSONObject application = obj.getJSONObject("application"); String appName = app.getPackageName(); Date date = new Date(); if (application.has(appName) && application.getBoolean(appName) && date.after(start) && date.before(end)) { OsmandSettings settings = app.getSettings(); int discountId = getDiscountId(message, description, start, end); boolean discountChanged = settings.DISCOUNT_ID.get() != discountId; if (discountChanged) { settings.DISCOUNT_TOTAL_SHOW.set(0); } if (discountChanged || app.getAppInitializer().getNumberOfStarts() - settings.DISCOUNT_SHOW_NUMBER_OF_STARTS.get() >= showStartFrequency || System.currentTimeMillis() - settings.DISCOUNT_SHOW_DATETIME_MS.get() > 1000L * 60 * 60 * 24 * showDayFrequency) { if (settings.DISCOUNT_TOTAL_SHOW.get() < maxTotalShow) { settings.DISCOUNT_ID.set(discountId); settings.DISCOUNT_TOTAL_SHOW.set(settings.DISCOUNT_TOTAL_SHOW.get() + 1); settings.DISCOUNT_SHOW_NUMBER_OF_STARTS.set( app.getAppInitializer().getNumberOfStarts()); settings.DISCOUNT_SHOW_DATETIME_MS.set(System.currentTimeMillis()); showDiscountBanner(mapActivity, message, description, icon, url); } } } } catch (Exception e) { logError("JSON parsing error: ", e); } }