Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce a new map provider API which enables not to know maps at compile-time #194

Merged
merged 4 commits into from
Jan 6, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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