package net.osmand.plus.dashboard; import android.content.Intent; import android.content.res.TypedArray; import android.net.Uri; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.CompoundButton; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.TextView; import net.osmand.plus.OsmandPlugin; import net.osmand.plus.R; import net.osmand.plus.activities.PluginActivity; import net.osmand.plus.dashboard.tools.DashFragmentData; import net.osmand.plus.development.OsmandDevelopmentPlugin; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; /** * Created by Denis * on 21.11.2014. */ public class DashPluginsFragment extends DashBaseFragment { public static final String TAG = "DASH_PLUGINS_FRAGMENT"; private static final int TITLE_ID = R.string.prefs_plugins; public static final DashFragmentData.ShouldShowFunction SHOULD_SHOW_FUNCTION = new DashboardOnMap.DefaultShouldShow() { @Override public int getTitleId() { return TITLE_ID; } }; private List<OsmandPlugin> plugins; private View.OnClickListener getListener(final OsmandPlugin plugin) { return new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(plugin.getInstallURL()))); closeDashboard(); } }; } private final View.OnClickListener pluginDetailsListener(final OsmandPlugin plugin) { return new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getActivity(), PluginActivity.class); intent.putExtra(PluginActivity.EXTRA_PLUGIN_ID, plugin.getId()); startActivity(intent); closeDashboard(); } }; } @Override public View initView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dash_common_fragment, container, false); TextView header = ((TextView) view.findViewById(R.id.fav_text)); header.setText(TITLE_ID); view.findViewById(R.id.show_all).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(getActivity(), getMyApplication().getAppCustomization().getPluginsActivity())); closeDashboard(); } }); initPlugins(); return view; } private void initPlugins() { List<OsmandPlugin> notActivePlugins = OsmandPlugin.getNotEnabledPlugins(); Collections.shuffle(notActivePlugins); plugins = new ArrayList<OsmandPlugin>(); Iterator<OsmandPlugin> nit = notActivePlugins.iterator(); Iterator<OsmandPlugin> it = OsmandPlugin.getEnabledPlugins().iterator(); addPluginsToLimit(nit, 1); addPluginsToLimit(it, 5); addPluginsToLimit(nit, 5); } private void addPluginsToLimit(Iterator<OsmandPlugin> it, int l) { while (plugins.size() < l && it.hasNext()) { OsmandPlugin plugin = it.next(); if (plugin instanceof OsmandDevelopmentPlugin) { continue; } plugins.add(plugin); } } @Override public void onOpenDash() { View contentView = getView(); LayoutInflater inflater = getActivity().getLayoutInflater(); LinearLayout pluginsContainer = (LinearLayout) contentView.findViewById(R.id.items); pluginsContainer.removeAllViews(); for (OsmandPlugin p : plugins) { inflatePluginView(inflater, pluginsContainer, p); } } private void updatePluginState(View pluginView, OsmandPlugin plugin) { CompoundButton enableDisableButton = (CompoundButton) pluginView.findViewById(R.id.plugin_enable_disable); Button getButton = (Button) pluginView.findViewById(R.id.get_plugin); enableDisableButton.setOnCheckedChangeListener(null); if (plugin.needsInstallation()) { getButton.setVisibility(View.VISIBLE); enableDisableButton.setVisibility(View.GONE); } else { getButton.setVisibility(View.GONE); enableDisableButton.setVisibility(View.VISIBLE); enableDisableButton.setChecked(plugin.isActive()); } setListener(plugin, enableDisableButton, pluginView); ImageButton logoView = (ImageButton) pluginView.findViewById(R.id.plugin_logo); if (plugin.isActive()) { logoView.setBackgroundResource(R.drawable.bg_plugin_logo_enabled); logoView.setContentDescription(getString(R.string.shared_string_disable)); } else { TypedArray attributes = getActivity().getTheme().obtainStyledAttributes( new int[]{R.attr.bg_plugin_logo_disabled}); logoView.setBackgroundDrawable(attributes.getDrawable(0)); logoView.setContentDescription(getString(plugin.needsInstallation() ? R.string.access_shared_string_not_installed : R.string.shared_string_enable)); attributes.recycle(); } } private void inflatePluginView(LayoutInflater inflater, ViewGroup container, final OsmandPlugin plugin) { View view = inflater.inflate(R.layout.dash_plugin_item, container, false); view.setOnClickListener(pluginDetailsListener(plugin)); TextView nameView = (TextView) view.findViewById(R.id.plugin_name); nameView.setText(plugin.getName()); ImageButton logoView = (ImageButton) view.findViewById(R.id.plugin_logo); logoView.setImageResource(plugin.getLogoResourceId()); CompoundButton enableDisableButton = (CompoundButton) view.findViewById(R.id.plugin_enable_disable); Button getButton = (Button) view.findViewById(R.id.get_plugin); getButton.setOnClickListener(getListener(plugin)); enableDisableButton.setOnCheckedChangeListener(null); updatePluginState(view, plugin); final View pluginView = view; setListener(plugin, enableDisableButton, pluginView); container.addView(view); } private void setListener(final OsmandPlugin plugin, CompoundButton enableDisableButton, final View pluginView) { enableDisableButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (plugin.isActive() == isChecked || plugin.needsInstallation()) { return; } if (OsmandPlugin.enablePlugin(getActivity(), getMyApplication(), plugin, isChecked)) { updatePluginState(pluginView, plugin); } } }); } }