package net.osmand.plus.activities; import android.content.Intent; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.IdRes; import android.support.annotation.StringRes; import android.support.v4.app.FragmentActivity; import android.support.v4.content.ContextCompat; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import net.osmand.AndroidUtils; 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.dialogs.HelpArticleDialogFragment; public class HelpActivity extends OsmandActionBarActivity implements AdapterView.OnItemClickListener { // public static final String DIALOG = "dialog"; @IdRes public static final String OSMAND_POLL_HTML = "http://osmand.net/android-poll.html"; public static final int NULL_ID = -1; private ArrayAdapter<ContextMenuItem> mAdapter; //public static final String OSMAND_MAP_LEGEND = "http://osmand.net/help/map-legend_default.png"; @Override protected void onCreate(Bundle savedInstanceState) { ((OsmandApplication) getApplication()).applyTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.fragment_help_screen); ContextMenuAdapter contextMenuAdapter = new ContextMenuAdapter(); contextMenuAdapter.setDefaultLayoutId(R.layout.two_line_with_images_list_item); createBeginWithOsmandItems(contextMenuAdapter); createFeaturesItems(contextMenuAdapter); createPluginsItems(contextMenuAdapter); createHelpUsToImproveItems(contextMenuAdapter); createOtherItems(contextMenuAdapter); createSocialNetworksItems(contextMenuAdapter); boolean lightContent = getMyApplication().getSettings().isLightContent(); mAdapter = contextMenuAdapter.createListAdapter(this, lightContent); ListView listView = (ListView) findViewById(android.R.id.list); listView.setAdapter(mAdapter); listView.setOnItemClickListener(this); int dividerColor = lightContent ? R.color.icon_color_light : R.color.dialog_inactive_text_color_dark; Drawable dividerDrawable = new ColorDrawable(ContextCompat.getColor(this, dividerColor)); listView.setDivider(dividerDrawable); listView.setDividerHeight(AndroidUtils.dpToPx(this, 1f)); setTitle(R.string.shared_string_help); setupHomeButton(); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ContextMenuAdapter.ItemClickListener listener = mAdapter.getItem(position).getItemClickListener(); if (listener != null) { listener.onContextMenuClick(mAdapter, position, position, false); } } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: this.finish(); return true; } return super.onOptionsItemSelected(item); } private void createBeginWithOsmandItems(ContextMenuAdapter contextMenuAdapter) { contextMenuAdapter.addItem(createCategory(R.string.begin_with_osmand_menu_group)); contextMenuAdapter.addItem(createItem(R.string.first_usage_item, R.string.first_usage_item_description, "feature_articles/start.html")); contextMenuAdapter.addItem(createItem(R.string.shared_string_navigation, R.string.navigation_item_description, "feature_articles/navigation.html")); contextMenuAdapter.addItem(createItem(R.string.faq_item, R.string.faq_item_description, "feature_articles/faq.html")); } private void createSocialNetworksItems(ContextMenuAdapter contextMenuAdapter) { contextMenuAdapter.addItem(createCategory(R.string.follow_us)); contextMenuAdapter.addItem(createSocialItem(R.string.twitter, R.string.twitter_address, R.drawable.ic_action_social_twitter)); contextMenuAdapter.addItem(createSocialItem(R.string.facebook, R.string.facebook_address, R.drawable.ic_action_social_facebook)); contextMenuAdapter.addItem(createSocialItem(R.string.vk, R.string.vk_address, R.drawable.ic_action_social_vk)); } private void createHelpUsToImproveItems(ContextMenuAdapter contextMenuAdapter) { contextMenuAdapter.addItem(createCategory(R.string.help_us_to_improve_menu_group)); contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() .setLayout(R.layout.help_to_improve_item).createItem()); } private void createFeaturesItems(ContextMenuAdapter contextMenuAdapter) { contextMenuAdapter.addItem(createCategory(R.string.features_menu_group)); contextMenuAdapter.addItem(createItem(R.string.map_viewing_item, NULL_ID, "feature_articles/map-viewing.html")); contextMenuAdapter.addItem(createItem(R.string.search_on_the_map_item, NULL_ID, "feature_articles/find-something-on-map.html")); contextMenuAdapter.addItem(createItem(R.string.planning_trip_item, NULL_ID, "feature_articles/trip-planning.html")); contextMenuAdapter.addItem(createItem(R.string.map_legend, NULL_ID, "feature_articles/map-legend.html")); } private void createPluginsItems(ContextMenuAdapter contextMenuAdapter) { contextMenuAdapter.addItem(createCategory(R.string.plugins_menu_group)); for (final OsmandPlugin osmandPlugin : OsmandPlugin.getAvailablePlugins()) { final String helpFileName = osmandPlugin.getHelpFileName(); if (helpFileName != null) { contextMenuAdapter.addItem(createPluginItem(osmandPlugin.getName(), osmandPlugin.getLogoResourceId(), helpFileName)); } } } private void createOtherItems(ContextMenuAdapter contextMenuAdapter) { contextMenuAdapter.addItem(createCategory(R.string.other_menu_group)); contextMenuAdapter.addItem(createItem(R.string.instalation_troubleshooting_item, NULL_ID, "feature_articles/installation-and-troubleshooting.html")); contextMenuAdapter.addItem(createItem(R.string.techical_articles_item, NULL_ID, "feature_articles/technical-articles.html")); contextMenuAdapter.addItem(createItem(R.string.versions_item, NULL_ID, "feature_articles/changes.html")); String releasedate = ""; if (!this.getString(R.string.app_edition).equals("")) { releasedate = ", " + this.getString(R.string.shared_string_release).toLowerCase() + ": " + this.getString(R.string.app_edition); } String version = Version.getFullVersion(getMyApplication()) + releasedate; ShowArticleOnTouchListener listener = new ShowArticleOnTouchListener( "feature_articles/about.html", this, version); contextMenuAdapter.addItem(new ContextMenuItem.ItemBuilder() .setTitle(getString(R.string.shared_string_about)) .setDescription(version).setListener(listener).createItem()); } // Helper metods private ContextMenuItem createCategory(@StringRes int titleRes) { return new ContextMenuItem.ItemBuilder().setTitle( getString(titleRes)).setCategory(true) .setLayout(R.layout.download_item_list_section).createItem(); } private ContextMenuItem createItem(@StringRes int titleRes, @StringRes int descriptionRes, String path) { ContextMenuItem.ItemBuilder builder = new ContextMenuItem.ItemBuilder() .setTitle(getString(titleRes)) .setListener(new ShowArticleOnTouchListener(path, this)); if (descriptionRes != -1) { builder.setDescription(getString(descriptionRes)); } return builder.createItem(); } private ContextMenuItem createPluginItem(String title, @DrawableRes int icon, String path) { return new ContextMenuItem.ItemBuilder() .setTitle(title) .setIcon(icon) .setListener(new ShowArticleOnTouchListener(path, this)) .createItem(); } private ContextMenuItem createSocialItem(@StringRes int title, @StringRes int urlRes, @DrawableRes int icon) { final String url = getString(urlRes); return new ContextMenuItem.ItemBuilder() .setTitle(getString(title)) .setDescription(url) .setIcon(icon) .setListener(new ContextMenuAdapter.ItemClickListener() { @Override public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int position, boolean isChecked) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return false; } }) .createItem(); } private static class ShowArticleOnTouchListener implements ContextMenuAdapter.ItemClickListener { private final String filename; private final FragmentActivity ctx; private final String mTitle; private ShowArticleOnTouchListener(String filename, FragmentActivity ctx) { this.filename = filename; this.ctx = ctx; mTitle = null; } private ShowArticleOnTouchListener(String filename, FragmentActivity ctx, String title) { this.filename = filename; this.ctx = ctx; mTitle = title; } @Override public boolean onContextMenuClick(ArrayAdapter<ContextMenuItem> adapter, int itemId, int position, boolean isChecked) { String title = mTitle == null ? adapter.getItem(position).getTitle() : mTitle; HelpArticleDialogFragment.instantiateWithAsset(filename, title) .show(ctx.getSupportFragmentManager(), "DIALOG_HELP_ARTICLE"); return false; } } }