Add the ability to open activity from notification
This commit is contained in:
parent
35c2790781
commit
27aa4ae4a7
1 changed files with 48 additions and 0 deletions
|
@ -1,6 +1,7 @@
|
||||||
package net.osmand.plus.helpers;
|
package net.osmand.plus.helpers;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.ActivityNotFoundException;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
@ -39,6 +40,7 @@ import org.json.JSONObject;
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Iterator;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
import java.util.LinkedHashSet;
|
import java.util.LinkedHashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -57,6 +59,7 @@ public class DiscountHelper {
|
||||||
private static final String INAPP_PREFIX = "osmand-in-app:";
|
private static final String INAPP_PREFIX = "osmand-in-app:";
|
||||||
private static final String SEARCH_QUERY_PREFIX = "osmand-search-query:";
|
private static final String SEARCH_QUERY_PREFIX = "osmand-search-query:";
|
||||||
private static final String SHOW_POI_PREFIX = "osmand-show-poi:";
|
private static final String SHOW_POI_PREFIX = "osmand-show-poi:";
|
||||||
|
private static final String OPEN_ACTIVITY = "open_activity";
|
||||||
|
|
||||||
public static void checkAndDisplay(final MapActivity mapActivity) {
|
public static void checkAndDisplay(final MapActivity mapActivity) {
|
||||||
OsmandApplication app = mapActivity.getMyApplication();
|
OsmandApplication app = mapActivity.getMyApplication();
|
||||||
|
@ -290,6 +293,10 @@ public class DiscountHelper {
|
||||||
showPoiFilter(mapActivity, filter);
|
showPoiFilter(mapActivity, filter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (url.equals(OPEN_ACTIVITY)) {
|
||||||
|
if (mData.activityJson != null) {
|
||||||
|
openActivity(mapActivity, mData.activityJson);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
intent.setData(Uri.parse(url));
|
intent.setData(Uri.parse(url));
|
||||||
|
@ -297,6 +304,44 @@ public class DiscountHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static void openActivity(Context context, JSONObject activityObject) {
|
||||||
|
boolean successful = false;
|
||||||
|
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||||
|
try {
|
||||||
|
for (Iterator<String> it = activityObject.keys(); it.hasNext(); ) {
|
||||||
|
String key = it.next();
|
||||||
|
if (key.equals("activity_name")) {
|
||||||
|
intent.setClassName(context, activityObject.getString(key));
|
||||||
|
successful = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
Object obj = activityObject.get(key);
|
||||||
|
if (obj instanceof Integer) {
|
||||||
|
intent.putExtra(key, (Integer) obj);
|
||||||
|
} else if (obj instanceof Long) {
|
||||||
|
intent.putExtra(key, (Long) obj);
|
||||||
|
} else if (obj instanceof Boolean) {
|
||||||
|
intent.putExtra(key, (Boolean) obj);
|
||||||
|
} else if (obj instanceof Float) {
|
||||||
|
intent.putExtra(key, (Float) obj);
|
||||||
|
} else if (obj instanceof Double) {
|
||||||
|
intent.putExtra(key, (Double) obj);
|
||||||
|
} else if (obj instanceof String) {
|
||||||
|
intent.putExtra(key, (String) obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (JSONException e) {
|
||||||
|
successful = false;
|
||||||
|
}
|
||||||
|
if (successful) {
|
||||||
|
try {
|
||||||
|
context.startActivity(intent);
|
||||||
|
} catch (ActivityNotFoundException e) {
|
||||||
|
// ignore
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private static class ControllerData {
|
private static class ControllerData {
|
||||||
|
|
||||||
String message;
|
String message;
|
||||||
|
@ -318,6 +363,8 @@ public class DiscountHelper {
|
||||||
@ColorInt
|
@ColorInt
|
||||||
int textBtnTitleColor = -1;
|
int textBtnTitleColor = -1;
|
||||||
|
|
||||||
|
JSONObject activityJson;
|
||||||
|
|
||||||
static ControllerData parse(OsmandApplication app, JSONObject obj) throws JSONException {
|
static ControllerData parse(OsmandApplication app, JSONObject obj) throws JSONException {
|
||||||
ControllerData res = new ControllerData();
|
ControllerData res = new ControllerData();
|
||||||
res.message = obj.getString("message");
|
res.message = obj.getString("message");
|
||||||
|
@ -331,6 +378,7 @@ public class DiscountHelper {
|
||||||
res.descrColor = parseColor("description_color", obj);
|
res.descrColor = parseColor("description_color", obj);
|
||||||
res.statusBarColor = parseColor("status_bar_color", obj);
|
res.statusBarColor = parseColor("status_bar_color", obj);
|
||||||
res.textBtnTitleColor = parseColor("button_title_color", obj);
|
res.textBtnTitleColor = parseColor("button_title_color", obj);
|
||||||
|
res.activityJson = obj.optJSONObject("activity");
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue