package earth.amarino.plugin.time;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Spinner;
import at.abraxas.amarino.AmarinoIntent;
public abstract class EditActivity extends Activity {
static final String KEY_VISUALIZER = "visualizer";
private static final String TAG = "EditActivity";
private static final boolean DEBUG = true;
/**
* Unique identifier given by Amarino for this plug-in instance.
*/
protected int pluginId;
private Button saveBtn;
private Button discardBtn;
private Spinner visualizer;
private boolean cancelled = false;
private float visualizerMin = 0f;
private float visualizerMax = 1f;
/**
* <p>This is where you should do your initialization.</p>
*
* <p>Called as last statement in onCreate().</p>
*/
public abstract void init();
/**
* Method gets called when the user clicks on the save button
*
* @param v the button view
*/
public abstract void onSaveBtnClick(View v);
/**
* Method gets called when the user clicks on the cancel button
*
* @param v the button view
*/
public abstract void onCancelBtnClick(View v);
private OnClickListener saveBtnClick = new OnClickListener() {
public void onClick(View v) {
onSaveBtnClick(v);
finish();
}
};
private OnClickListener cancelBtnClick = new OnClickListener() {
public void onClick(View v) {
cancelled = true;
onCancelBtnClick(v);
finish();
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.edit);
visualizer =(Spinner)findViewById(R.id.visualizer);
// init as text visualizer, this is the most common one
visualizer.setSelection(PreferenceManager.getDefaultSharedPreferences(this).getInt(KEY_VISUALIZER, 0));
Intent intent = getIntent();
if (intent != null){
pluginId = intent.getIntExtra(AmarinoIntent.EXTRA_PLUGIN_ID, -1);
if (DEBUG) Log.d(TAG, "pluginId: " + pluginId);
// we need to know the ID Amarino has assigned to this plugin
// in order to identify sent data
PreferenceManager.getDefaultSharedPreferences(EditActivity.this)
.edit()
.putInt(AmarinoIntent.EXTRA_PLUGIN_ID, pluginId)
.commit();
}
saveBtn = (Button)findViewById(R.id.saveBtn);
discardBtn = (Button)findViewById(R.id.discardBtn);
saveBtn.setOnClickListener(saveBtnClick);
discardBtn.setOnClickListener(cancelBtnClick);
init();
}
@Override
public void finish() {
if (cancelled) {
setResult(RESULT_CANCELED);
}
super.finish();
}
/**
* <p>Most Amarino visualizers need lower and upper bounds to display correctly.
* You have to set them depending on which values you expect to send over to Amarino.</p>
*
* <p>For example the graph visualizer is written to display the min value at the bottom of the graph,
* whether the max value is drawn at the very top (of the y-axis)</p>
*
* @param min minimum value you expect
* @param max maximum value you expect
*/
public void setVisualizerBounds(float min, float max) {
visualizerMin = min;
visualizerMax = max;
}
public void sendResult(int pluginNameRes, int descriptionRes, int serviceClassNameRes){
sendResult(getString(pluginNameRes), getString(descriptionRes), getString(serviceClassNameRes));
}
public void sendResult(String pluginName, String description, String serviceClassName){
final Intent returnIntent = new Intent();
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_NAME, pluginName);
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_DESC, description);
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_SERVICE_CLASS_NAME, serviceClassName);
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_ID, pluginId);
returnIntent.putExtra(AmarinoIntent.EXTRA_VISUALIZER_MIN_VALUE, visualizerMin);
returnIntent.putExtra(AmarinoIntent.EXTRA_VISUALIZER_MAX_VALUE, visualizerMax);
int selectedVisualizer = visualizer.getSelectedItemPosition();
PreferenceManager.getDefaultSharedPreferences(this).edit().putInt(KEY_VISUALIZER, selectedVisualizer).commit();
switch(selectedVisualizer){
case 0:
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_VISUALIZER, AmarinoIntent.VISUALIZER_TEXT);
break;
case 1:
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_VISUALIZER, AmarinoIntent.VISUALIZER_GRAPH);
break;
case 2:
returnIntent.putExtra(AmarinoIntent.EXTRA_PLUGIN_VISUALIZER, AmarinoIntent.VISUALIZER_BARS);
break;
}
setResult(RESULT_OK, returnIntent);
}
}