package net.osmand.plus.development; import android.app.Activity; import android.content.Intent; import android.widget.ArrayAdapter; import net.osmand.plus.ContextMenuAdapter; import net.osmand.plus.ContextMenuItem; import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.Version; import net.osmand.plus.activities.ContributionVersionActivity; import net.osmand.plus.activities.MapActivity; import net.osmand.plus.dashboard.tools.DashFragmentData; import net.osmand.plus.views.MapInfoLayer; import net.osmand.plus.views.OsmandMapLayer.DrawSettings; import net.osmand.plus.views.OsmandMapTileView; import net.osmand.plus.views.mapwidgets.TextInfoWidget; public class OsmandDevelopmentPlugin extends OsmandPlugin { private static final String ID = "osmand.development"; private OsmandApplication app; public OsmandDevelopmentPlugin(OsmandApplication app) { this.app = app; //ApplicationMode.regWidgetVisibility("fps", new ApplicationMode[0]); } @Override public String getId() { return ID; } @Override public String getDescription() { return app.getString(R.string.osmand_development_plugin_description); } @Override public String getName() { return app.getString(R.string.debugging_and_development); } @Override public String getHelpFileName() { return "feature_articles/development_plugin.html"; } @Override public void registerLayers(MapActivity activity) { registerWidget(activity); } @Override public void registerOptionsMenuItems(final MapActivity mapActivity, ContextMenuAdapter helper) { if (Version.isDeveloperVersion(mapActivity.getMyApplication())) { helper.addItem(new ContextMenuItem.ItemBuilder() .setTitleId(R.string.version_settings, mapActivity) .setIcon(R.drawable.ic_action_gabout_dark) .setListener(new ContextMenuAdapter.ItemClickListener() { @Override public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int pos, boolean isChecked) { final Intent mapIntent = new Intent(mapActivity, ContributionVersionActivity.class); mapActivity.startActivityForResult(mapIntent, 0); return true; } }).createItem()); } } @Override public void updateLayers(OsmandMapTileView mapView, MapActivity activity) { if (isActive()) { registerWidget(activity); } else { MapInfoLayer mapInfoLayer = activity.getMapLayers().getMapInfoLayer(); if (mapInfoLayer != null && mapInfoLayer.getSideWidget(FPSTextInfoWidget.class) != null) { mapInfoLayer.removeSideWidget(mapInfoLayer.getSideWidget(FPSTextInfoWidget.class)); mapInfoLayer.recreateControls(); } } } public static class FPSTextInfoWidget extends TextInfoWidget { private OsmandMapTileView mv; public FPSTextInfoWidget(OsmandMapTileView mv, Activity activity) { super(activity); this.mv = mv; } @Override public boolean updateInfo(DrawSettings drawSettings) { if (!mv.isMeasureFPS()) { mv.setMeasureFPS(true); } setText("", Integer.toString((int) mv.getFPS()) + "/" + Integer.toString((int) mv.getSecondaryFPS()) + " FPS"); return true; } } private void registerWidget(MapActivity activity) { MapInfoLayer mapInfoLayer = activity.getMapLayers().getMapInfoLayer(); final OsmandMapTileView mv = activity.getMapView(); if (mapInfoLayer != null && mapInfoLayer.getSideWidget(FPSTextInfoWidget.class) == null) { FPSTextInfoWidget fps = new FPSTextInfoWidget(mv, activity); mapInfoLayer.registerSideWidget(fps, R.drawable.ic_action_fps, R.string.map_widget_fps_info, "fps", false, 50); mapInfoLayer.recreateControls(); } } @Override public Class<? extends Activity> getSettingsActivity() { return SettingsDevelopmentActivity.class; } @Override public int getLogoResourceId() { return R.drawable.ic_plugin_developer; } @Override public int getAssetResourceName() { return R.drawable.osmand_development; } @Override public DashFragmentData getCardFragment() { return DashSimulateFragment.FRAGMENT_DATA; } }