package net.osmand.plus.activities;
import android.app.Activity;
import android.content.Intent;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.support.v7.widget.PopupMenu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.R;
public class PluginsActivity extends OsmandListActivity {
public static final int ACTIVE_PLUGINS_LIST_MODIFIED = 1;
private boolean activePluginsListModified = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
((OsmandApplication) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.plugins);
getSupportActionBar().setTitle(R.string.plugins_screen);
setListAdapter(new PluginsListAdapter());
}
@Override
public PluginsListAdapter getListAdapter() {
return (PluginsListAdapter) super.getListAdapter();
}
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
OsmandPlugin plugin = view.getTag() instanceof OsmandPlugin
? (OsmandPlugin)view.getTag()
: null;
if (plugin == null) {
return;
}
Intent intent = new Intent(this, PluginActivity.class);
intent.putExtra(PluginActivity.EXTRA_PLUGIN_ID, plugin.getId());
startActivity(intent);
}
@Override
protected void onResume() {
super.onResume();
getListAdapter().notifyDataSetChanged();
}
private void enableDisablePlugin(OsmandPlugin plugin, boolean enable) {
boolean ok = OsmandPlugin.enablePlugin(this, ((OsmandApplication) getApplication()), plugin,
enable);
if (!ok) {
return;
}
if (!activePluginsListModified) {
setResult(ACTIVE_PLUGINS_LIST_MODIFIED);
activePluginsListModified = true;
}
getListAdapter().notifyDataSetChanged();
}
protected class PluginsListAdapter extends ArrayAdapter<OsmandPlugin> {
public PluginsListAdapter() {
super(PluginsActivity.this, R.layout.plugins_list_item,
OsmandPlugin.getAvailablePlugins());
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = getLayoutInflater().inflate(R.layout.plugins_list_item, parent, false);
}
final OsmandPlugin plugin = getItem(position);
view.setTag(plugin);
ImageButton pluginLogo = (ImageButton)view.findViewById(R.id.plugin_logo);
pluginLogo.setImageResource(plugin.getLogoResourceId());
if (plugin.isActive()) {
pluginLogo.setBackgroundResource(R.drawable.bg_plugin_logo_enabled);
pluginLogo.setContentDescription(getString(R.string.shared_string_disable));
} else {
TypedArray attributes = getTheme().obtainStyledAttributes(
new int[] {R.attr.bg_plugin_logo_disabled});
pluginLogo.setBackgroundDrawable(attributes.getDrawable(0));
pluginLogo.setContentDescription(getString(plugin.needsInstallation() ? R.string.access_shared_string_not_installed : R.string.shared_string_enable));
attributes.recycle();
}
pluginLogo.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(!plugin.isActive() && plugin.needsInstallation()) {
// nothing
} else {
enableDisablePlugin(plugin, !plugin.isActive());
}
}
});
TextView pluginName = (TextView)view.findViewById(R.id.plugin_name);
pluginName.setText(plugin.getName());
pluginName.setContentDescription(plugin.getName() + " " + getString(plugin.isActive()
? R.string.item_checked
: R.string.item_unchecked));
TextView pluginDescription = (TextView)view.findViewById(R.id.plugin_description);
pluginDescription.setText(plugin.getDescription());
ImageView pluginOptions = (ImageView) view.findViewById(R.id.plugin_options);
pluginOptions.setImageDrawable(getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_overflow_menu_white));
pluginOptions.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showOptionsMenu(v, plugin);
}
});
return view;
}
}
private void showOptionsMenu(View v, final OsmandPlugin plugin) {
final Class<? extends Activity> settingsActivity = plugin.getSettingsActivity();
final PopupMenu optionsMenu = new PopupMenu(this, v);
if (plugin.isActive() || !plugin.needsInstallation()) {
MenuItem enableDisableItem = optionsMenu.getMenu().add(
plugin.isActive() ? R.string.shared_string_disable
: R.string.shared_string_enable);
enableDisableItem
.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
enableDisablePlugin(plugin, !plugin.isActive());
optionsMenu.dismiss();
return true;
}
});
}
if (settingsActivity != null && plugin.isActive()) {
MenuItem settingsItem = optionsMenu.getMenu().add(R.string.shared_string_settings);
settingsItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
startActivity(new Intent(PluginsActivity.this, settingsActivity));
optionsMenu.dismiss();
return true;
}
});
}
optionsMenu.show();
}
}