package com.example.itallyassigment; //import android.media.MediaPlayer; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.ArrayList; import java.util.List; import android.media.AudioManager; import android.media.SoundPool; import android.os.Build; import android.os.Bundle; import android.annotation.TargetApi; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.content.Context; import android.content.DialogInterface; import android.text.Editable; import android.text.InputFilter; import android.text.InputType; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Spinner; import android.widget.TextView; import android.widget.Toast; public class Itallyassigment extends Activity implements OnClickListener { // to play while the user clicks the button // (http://www.youtube.com/watch?v=KFw765mBcak) // heard the soundpool method was popular than mediaplyer method so i may // choose either mediaplayer or soundpool just to test the playback. // media player method - use for music player or video games etc // Setting up the Mediplayer // MediaPlayer incrementButtonClick; // MediaPlayer decrementButtonClick; // MediaPlayer refreshButtonClick; // Setting up the SoundPool // Soundpool method- use it for sound effects // (http://www.newyyz.com/ntgsite/2012/05/android-using-the-mediaplayer-for-online-streams/) SoundPool soundPool; int incrementButtonClick = -1; int decrementButtonClick = -1; int refreshButtonClick = -1; // Setting Max value public int MAX_VALUE = 9999; // Setting min value public int MIN_VALUE = 0; // setting default value as min value where the numbers cannot reach to // negative number public int DEFAULT_VALUE = MIN_VALUE; // Initial the number value public int counterValue = DEFAULT_VALUE; // To convert int into string to output the value //String strcounter; public TextView text; public ArrayAdapter<String> dataAdapter; private Spinner spinner1; public Dialog source; // This function is called when the application starts @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Alternative way to create the methods init(); openCount(); addItemsOnSpinner1(); } public void addItemsOnSpinner1() { spinner1 = (Spinner) findViewById(R.id.spinner1); List<String> list = new ArrayList<String>(); list.add("list 1"); list.add("list 2"); list.add("list 3"); dataAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, list); dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); spinner1.setAdapter(dataAdapter); } // This function reads the stored value from a file on the device //http://www.mybringback.com/tutorial-series/12637/android-internal-storage-with-fileoutputstream/ //http://www.kodejava.org/examples/214.html private void openCount() { // TODO Auto-generated method stub try { // Open a file and data stream FileInputStream out = openFileInput("count.bin"); DataInputStream data = new DataInputStream(out); // Read the binary value from the stream and store in the integer counterValue = data.readInt(); // Remember to close the streams data.close(); out.close(); } catch (FileNotFoundException err) { // Ignore this error, since is should just mean that the program is run for the first time } catch (IOException err) { showError(err); } } public void init() { // TODO Auto-generated method stub // Connect interface elements to properties Button increments = (Button) findViewById(R.id.increments); Button decrement = (Button) findViewById(R.id.decrement); Button reset = (Button) findViewById(R.id.reset); text = (TextView) findViewById(R.id.textView1); text.setText(Integer.toString(counterValue)); // Setup ClickListeners increments.setOnClickListener(this); decrement.setOnClickListener(this); reset.setOnClickListener(this); // set up the button sound and clicklisteners setVolumeControlStream(AudioManager.STREAM_MUSIC); soundPool = new SoundPool(3, AudioManager.STREAM_MUSIC, 0); incrementButtonClick = soundPool.load(this, R.raw.increment_sound, 1); decrementButtonClick = soundPool.load(this, R.raw.decrement_sound, 1); refreshButtonClick = soundPool.load(this, R.raw.refresh_sound, 1); // Mediaplayer method and clicklisteners // incrementButtonClick = MediaPlayer.create(this,R.raw.increment_sound); // decrementButtonClick = MediaPlayer.create(this,R.raw.decrement_sound); // refreshButtonClick = MediaPlayer.create(this,R.raw.refresh_sound); } // Begin method to view for + and - button to able to perform function when // the user touches public void onClick(View v) { switch (v.getId()) { // Increase counter by one, update value in user interface and on disk case R.id.increments: if (counterValue < MAX_VALUE) { counterValue++; //strcounter = Integer.toString(counterValue); //text.setText(String.valueOf(strcounter)); text.setText(Integer.toString(counterValue)); // Starting the sound //Mediaplayer method // incrementButtonClick.start(); saveCount(); soundPool.play(incrementButtonClick, 1, 1, 0, 0, 1); } break; case R.id.decrement: // Decrease counter by one, update value in user interface and on // disk if (counterValue > MIN_VALUE) { counterValue--; //strcounter = Integer.toString(counterValue); //text.setText(String.valueOf(strcounter)); text.setText(Integer.toString(counterValue)); // Starting the sound //mediaplayer method // decrementButtonClick.start(); saveCount(); soundPool.play(decrementButtonClick, 1, 1, 0, 0, 1); } break; case R.id.reset: counterValue = 0; //strcounter = Integer.toString(counterValue); text.setText(Integer.toString(counterValue)); // starting the sound //mediaplayer method // refreshButtonClick.start(); soundPool.play(refreshButtonClick, 1, 1, 0, 0, 1); } } // This function stores the current value in a file on the device //http://www.mybringback.com/tutorial-series/12637/android-internal-storage-with-fileoutputstream/ void saveCount() { try { // Open a file and data stream FileOutputStream out = openFileOutput("count.bin", MODE_PRIVATE); DataOutputStream data = new DataOutputStream(out); // Write the binary value of the integer to the stream data.writeInt(counterValue); // Remember to close the streams data.close(); out.close(); } catch (FileNotFoundException err) { showError(err); } catch (IOException err) { showError(err); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. //getMenuInflater().inflate(R.menu.main, menu); // Add two commands to the menu. We only care about the unique id, 0 or 1, and the text for the items menu.add(Menu.NONE, 0, Menu.NONE, R.string.menu_add); menu.add(Menu.NONE, 1, Menu.NONE, R.string.menu_edit); menu.add(Menu.NONE, 2, Menu.NONE, R.string.menu_delete); return true; } // This function is called when the user has chosen a menu item created in // onCreateOptionsMenu @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == 0) { AlertDialog.Builder addDialogBuilder = new AlertDialog.Builder(this); addDialogBuilder.setTitle(getResources().getText( R.string.dialog_add_title)); Context context = addDialogBuilder.getContext(); LinearLayout layout = new LinearLayout(context); layout.setOrientation(LinearLayout.VERTICAL); // Name input label TextView nameInputLabel = new TextView(this); nameInputLabel.setText(getResources().getText( R.string.dialog_edit_name)); layout.addView(nameInputLabel); // Name input EditText nameInput = (EditText) source.findViewById(R.id.spinner2); nameInput.setInputType(InputType.TYPE_CLASS_TEXT); nameInput.setText(""); layout.addView(nameInput); addDialogBuilder.setView(layout).setPositiveButton("Add", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Do something with value! String name = nameInput.getText().toString(); if (name.equals("")) { Toast.makeText(getBaseContext(), getResources().getText(R.string.toast_no_name_message), Toast.LENGTH_SHORT).show(); } dataAdapter.add(name); //spinner1 = (Spinner) findViewById(R.id.spinner1); } } ); addDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); addDialogBuilder.show(); } if (item.getItemId() == 1) { AlertDialog.Builder addDialogBuilder = new AlertDialog.Builder(this); addDialogBuilder.setTitle(getResources().getText( R.string.dialog_edit_title)); Context context = addDialogBuilder.getContext(); LinearLayout layout = new LinearLayout(context); layout.setOrientation(LinearLayout.VERTICAL); // Name input label TextView nameInputLabel = new TextView(this); nameInputLabel.setText(getResources().getText( R.string.dialog_edit_name)); layout.addView(nameInputLabel); // Name input final EditText nameInput = new EditText(this); nameInput.setInputType(InputType.TYPE_CLASS_TEXT); nameInput.setText(""); layout.addView(nameInput); addDialogBuilder.setView(layout).setPositiveButton("Edit", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Do something with value! String name = nameInput.getText().toString(); if (name.equals("")) { Toast.makeText(getBaseContext(), getResources().getText(R.string.toast_no_name_message), Toast.LENGTH_SHORT).show(); } } } ); addDialogBuilder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { // Canceled. } }); addDialogBuilder.show(); } return true; } // This function is called to show the error message of an exception in an alert dialog void showError(Exception err) { String msg = getString(R.string.file_error, err.getLocalizedMessage()); new AlertDialog.Builder(this).setMessage(msg).show(); } }