Skip to content

Commit

Permalink
Introduce a new map provider API which enables not to know maps at co…
Browse files Browse the repository at this point in the history
…mpile-time (#194)

* Introduce a new map provider API which enables not to know maps at compile-time.
* Remove old plugin API for maps
  • Loading branch information
qnga authored Jan 6, 2024
1 parent 04676f0 commit 66393a6
Show file tree
Hide file tree
Showing 10 changed files with 530 additions and 438 deletions.
3 changes: 1 addition & 2 deletions app/src/main/java/mobi/maptrek/MapTrek.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,8 +314,7 @@ public Index getMapIndex() {
public MapIndex getExtraMapIndex() {
if (mExtraMapIndex == null) {
mExtraMapIndex = new MapIndex(this, getExternalFilesDir("maps"));
mExtraMapIndex.initializeOfflineMapProviders();
mExtraMapIndex.initializeOnlineMapProviders();
mExtraMapIndex.initializePluginMapProviders();
}
return mExtraMapIndex;
}
Expand Down
75 changes: 21 additions & 54 deletions app/src/main/java/mobi/maptrek/maps/MapIndex.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,9 +18,7 @@

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

Expand All @@ -43,10 +41,9 @@
import java.util.List;
import java.util.Objects;

import mobi.maptrek.maps.offline.OfflineTileSource;
import mobi.maptrek.maps.offline.OfflineTileSourceFactory;
import mobi.maptrek.maps.online.OnlineTileSource;
import mobi.maptrek.maps.online.OnlineTileSourceFactory;
import mobi.maptrek.maps.plugin.PluginOfflineTileSource;
import mobi.maptrek.maps.plugin.PluginOnlineTileSource;
import mobi.maptrek.maps.plugin.PluginTileSourceFactory;
import mobi.maptrek.util.FileList;
import mobi.maptrek.util.MapFilenameFilter;

Expand All @@ -58,10 +55,12 @@ public class MapIndex implements Serializable {

private final Context mContext;
private final HashSet<MapFile> mMaps;
private final PluginTileSourceFactory mPluginTileSourceFactory;

@SuppressLint("UseSparseArrays")
public MapIndex(@NonNull Context context, @Nullable File root) {
mContext = context;
mPluginTileSourceFactory = new PluginTileSourceFactory(context, context.getPackageManager());
mMaps = new HashSet<>();
if (root != null) {
logger.debug("MapIndex({})", root.getAbsolutePath());
Expand Down Expand Up @@ -118,58 +117,26 @@ private void loadMap(@NonNull File file) {
mMaps.add(mapFile);
}

public void initializeOnlineMapProviders() {
PackageManager packageManager = mContext.getPackageManager();

Intent initializationIntent = new Intent("mobi.maptrek.maps.online.provider.action.INITIALIZE");
// enumerate online map providers
List<ResolveInfo> providers = packageManager.queryBroadcastReceivers(initializationIntent, 0);
for (ResolveInfo provider : providers) {
// send initialization broadcast, we send it directly instead of sending
// one broadcast for all plugins to wake up stopped plugins:
// http://developer.android.com/about/versions/android-3.1.html#launchcontrols
Intent intent = new Intent();
intent.setClassName(provider.activityInfo.packageName, provider.activityInfo.name);
intent.setAction(initializationIntent.getAction());
mContext.sendBroadcast(intent);

List<OnlineTileSource> tileSources = OnlineTileSourceFactory.fromPlugin(mContext, packageManager, provider);
for (OnlineTileSource tileSource : tileSources) {
MapFile mapFile = new MapFile(tileSource.getName(), tileSource.getUri());
mapFile.tileSource = tileSource;
mapFile.boundingBox = WORLD_BOUNDING_BOX;
//TODO Implement tile cache expiration
//tileProvider.tileExpiration = onlineMapTileExpiration;
mMaps.add(mapFile);
}
public void initializePluginMapProviders() {
for (PluginOnlineTileSource source : mPluginTileSourceFactory.getOnlineTileSources()) {
addTileSource(source, source.getSourceId());
}
}

public void initializeOfflineMapProviders() {
PackageManager packageManager = mContext.getPackageManager();

Intent initializationIntent = new Intent("mobi.maptrek.maps.offline.provider.action.INITIALIZE");
// enumerate offline map providers
List<ResolveInfo> providers = packageManager.queryBroadcastReceivers(initializationIntent, 0);
for (ResolveInfo provider : providers) {
// send initialization broadcast, we send it directly instead of sending
// one broadcast for all plugins to wake up stopped plugins:
// http://developer.android.com/about/versions/android-3.1.html#launchcontrols
Intent intent = new Intent();
intent.setClassName(provider.activityInfo.packageName, provider.activityInfo.name);
intent.setAction(initializationIntent.getAction());
mContext.sendBroadcast(intent);

List<OfflineTileSource> tileSources = OfflineTileSourceFactory.fromPlugin(mContext, packageManager, provider);
for (OfflineTileSource tileSource : tileSources) {
MapFile mapFile = new MapFile(tileSource.getName(), tileSource.getUri());
mapFile.tileSource = tileSource;
mapFile.boundingBox = WORLD_BOUNDING_BOX;
mMaps.add(mapFile);
}
for (PluginOfflineTileSource source : mPluginTileSourceFactory.getOfflineTileSources()) {
addTileSource(source, source.getSourceId());
}
}

private void addTileSource(TileSource tileSource, String id) {
MapFile mapFile = new MapFile(tileSource.getName(), id);
mapFile.tileSource = tileSource;
mapFile.boundingBox = WORLD_BOUNDING_BOX;
//TODO Implement tile cache expiration
//tileProvider.tileExpiration = onlineMapTileExpiration;

mMaps.add(mapFile);
}

@NonNull
public ArrayList<MapFile> getMaps(@Nullable String[] ids) {
ArrayList<MapFile> maps = new ArrayList<>();
Expand Down

This file was deleted.

147 changes: 0 additions & 147 deletions app/src/main/java/mobi/maptrek/maps/online/OnlineTileSource.java

This file was deleted.

Loading

0 comments on commit 66393a6

Please sign in to comment.