diff options
author | mvglasow <michael -at- vonglasow.com> | 2020-08-11 19:30:55 +0200 |
---|---|---|
committer | mvglasow <michael -at- vonglasow.com> | 2020-08-11 19:30:55 +0200 |
commit | 131acbffd9025c8579e12b2a46d9467a15ee1e0b (patch) | |
tree | eb0b22c5238407681ddcc905010c9a682e0fe85e /navit/android | |
parent | 4a14ba5320f3d13abdb29d7b4402bb4af1635a49 (diff) | |
download | navit-131acbffd9025c8579e12b2a46d9467a15ee1e0b.tar.gz |
Add:traffic:Complete TraFF 0.8 subscription suport
Signed-off-by: mvglasow <michael -at- vonglasow.com>
Diffstat (limited to 'navit/android')
-rw-r--r-- | navit/android/src/org/navitproject/navit/NavitTraff.java | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/navit/android/src/org/navitproject/navit/NavitTraff.java b/navit/android/src/org/navitproject/navit/NavitTraff.java index 8ef738724..7ce8d51f4 100644 --- a/navit/android/src/org/navitproject/navit/NavitTraff.java +++ b/navit/android/src/org/navitproject/navit/NavitTraff.java @@ -116,14 +116,13 @@ public class NavitTraff extends BroadcastReceiver { this.context.registerReceiver(this, traffFilter07); this.context.registerReceiver(this, traffFilter08); - /* Broadcast a poll intent */ + /* Broadcast a poll intent to all TraFF 0.7-only receivers */ Intent outIntent = new Intent(ACTION_TRAFF_POLL); PackageManager pm = this.context.getPackageManager(); List<ResolveInfo> receivers07 = pm.queryBroadcastReceivers(outIntent, 0); - /* receivers with TraFF 0.8 support */ List<ResolveInfo> receivers08 = pm.queryBroadcastReceivers(new Intent(ACTION_TRAFF_GET_CAPABILITIES), 0); if (receivers07 != null) { - /* get receivers which support only TraFF 0.7 */ + /* get receivers which support only TraFF 0.7 and poll them */ if (receivers08 != null) receivers07.removeAll(receivers08); for (ResolveInfo receiver : receivers07) { @@ -134,16 +133,6 @@ public class NavitTraff extends BroadcastReceiver { this.context.sendBroadcast(outIntent, Manifest.permission.ACCESS_COARSE_LOCATION); } } - if (receivers08 != null) { - for (ResolveInfo receiver : receivers08) { - Bundle extras = new Bundle(); - extras.putString(EXTRA_PACKAGE, context.getPackageName()); - extras.putString(EXTRA_FILTER_LIST, "<filter_list><filter bbox=\"-90.0000 -180.0000 90.0000 180.0000\"/></filter_list>"); - sendTraffIntent(context, ACTION_TRAFF_SUBSCRIBE, null, extras, - receiver.activityInfo.applicationInfo.packageName, - Manifest.permission.ACCESS_COARSE_LOCATION, this); - } - } } void close() { @@ -156,6 +145,40 @@ public class NavitTraff extends BroadcastReceiver { this.context.unregisterReceiver(this); } + void onFilterUpdate(String filterList) { + /* change existing subscriptions */ + for (Map.Entry<String, String> entry : subscriptions.entrySet()) { + Bundle extras = new Bundle(); + extras.putString(EXTRA_SUBSCRIPTION_ID, entry.getKey()); + extras.putString(EXTRA_FILTER_LIST, filterList); + sendTraffIntent(context, ACTION_TRAFF_SUBSCRIPTION_CHANGE, null, extras, + entry.getValue(), + Manifest.permission.ACCESS_COARSE_LOCATION, this); + } + + /* set up missing subscriptions */ + PackageManager pm = this.context.getPackageManager(); + List<ResolveInfo> receivers = pm.queryBroadcastReceivers(new Intent(ACTION_TRAFF_GET_CAPABILITIES), 0); + if (receivers != null) { + /* filter out receivers to which we are already subscribed */ + Iterator<ResolveInfo> iter = receivers.iterator(); + while (iter.hasNext()) { + ResolveInfo receiver = iter.next(); + if (subscriptions.containsValue(receiver.activityInfo.applicationInfo.packageName)) + iter.remove(); + } + + for (ResolveInfo receiver : receivers) { + Bundle extras = new Bundle(); + extras.putString(EXTRA_PACKAGE, context.getPackageName()); + extras.putString(EXTRA_FILTER_LIST, filterList); + sendTraffIntent(context, ACTION_TRAFF_SUBSCRIBE, null, extras, + receiver.activityInfo.applicationInfo.packageName, + Manifest.permission.ACCESS_COARSE_LOCATION, this); + } + } + } + @Override public void onReceive(Context context, Intent intent) { if (intent != null) { |