package net.osmand.plus.activities; import android.annotation.SuppressLint; import android.app.Activity; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.util.Log; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.CompoundButton; 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 PluginActivity extends OsmandActionBarActivity { private static final String TAG = "PluginActivity"; public static final String EXTRA_PLUGIN_ID = "plugin_id"; private OsmandPlugin plugin; @Override protected void onCreate(Bundle savedInstanceState) { ((OsmandApplication) getApplication()).applyTheme(this); super.onCreate(savedInstanceState); Intent intent = getIntent(); if (intent == null || !intent.hasExtra(EXTRA_PLUGIN_ID)) { Log.e(TAG, "Required extra '" + EXTRA_PLUGIN_ID + "' is missing"); finish(); return; } String pluginId = intent.getStringExtra(EXTRA_PLUGIN_ID); if (pluginId == null) { Log.e(TAG, "Extra '" + EXTRA_PLUGIN_ID + "' is null"); finish(); return; } for (OsmandPlugin plugin : OsmandPlugin.getAvailablePlugins()) { if (!plugin.getId().equals(pluginId)) continue; this.plugin = plugin; break; } if (plugin == null) { Log.e(TAG, "Plugin '" + EXTRA_PLUGIN_ID + "' not found"); finish(); return; } setContentView(R.layout.plugin); //noinspection ConstantConditions getSupportActionBar().setTitle(plugin.getName()); if(plugin.getAssetResourceName() != 0 && Build.VERSION.SDK_INT >= 14) { ImageView img = (ImageView) findViewById(R.id.plugin_image); img.setImageResource(plugin.getAssetResourceName()); } TextView descriptionView = (TextView)findViewById(R.id.plugin_description); descriptionView.setText(plugin.getDescription()); Button settingsButton = (Button)findViewById(R.id.plugin_settings); settingsButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { startActivity(new Intent(PluginActivity.this, plugin.getSettingsActivity())); } }); CompoundButton enableDisableButton = (CompoundButton)findViewById( R.id.plugin_enable_disable); enableDisableButton.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (plugin.isActive() == isChecked) { return; } boolean ok = OsmandPlugin.enablePlugin(PluginActivity.this, (OsmandApplication)getApplication(), plugin, isChecked); if (!ok) { return; } updateState(); } }); Button getButton = (Button)findViewById(R.id.plugin_get); getButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(plugin.getInstallURL()))); } catch (Exception e) { //ignored } } }); updateState(); } @Override protected void onResume() { super.onResume(); updateState(); } @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId) { case android.R.id.home: finish(); return true; } return false; } @SuppressLint("NewApi") private void updateState() { CompoundButton enableDisableButton = (CompoundButton)findViewById( R.id.plugin_enable_disable); Button getButton = (Button)findViewById(R.id.plugin_get); Button settingsButton = (Button)findViewById(R.id.plugin_settings); settingsButton.setCompoundDrawablesWithIntrinsicBounds( getMyApplication().getIconsCache().getThemedIcon(R.drawable.ic_action_settings), null, null, null); View installHeader = findViewById(R.id.plugin_install_header); if (plugin.needsInstallation()) { getButton.setVisibility(View.VISIBLE); enableDisableButton.setVisibility(View.GONE); settingsButton.setVisibility(View.GONE); installHeader.setVisibility(View.VISIBLE); View worldGlobeIcon = installHeader.findViewById(R.id.ic_world_globe); Drawable worldGlobeDrawable = getMyApplication().getIconsCache().getThemedIcon( R.drawable.ic_world_globe_dark); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { worldGlobeIcon.setBackground(worldGlobeDrawable); } else { //noinspection deprecation worldGlobeIcon.setBackgroundDrawable(worldGlobeDrawable); } } else { getButton.setVisibility(View.GONE); enableDisableButton.setVisibility(View.VISIBLE); enableDisableButton.setChecked(plugin.isActive()); final Class<? extends Activity> settingsActivity = plugin.getSettingsActivity(); if (settingsActivity == null || !plugin.isActive()) { settingsButton.setVisibility(View.GONE); } else { settingsButton.setVisibility(View.VISIBLE); } installHeader.setVisibility(View.GONE); } } }