/*
* HighscoreActivity
* runnersHigh 1.0
*
* _DESCRIPTION:
* Highscore form Activity - shows input field to save score and name
*/
package com.alarmclocksnoozers.runnershigh;
import java.io.IOException;
import android.view.View.OnKeyListener;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import android.app.Activity;
import android.content.Context;
import android.database.Cursor;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import com.alarmclocksnoozers.highscore.HighscoreAdapter;
public class HighScoreForm extends Activity {
private HighscoreAdapter highScoreAdapter = null;
private EditText nameField;
private TextView scoreField;
private Integer score;
private CheckBox checkboxPushOnline;
// ---------------------------------------------------
@Override
public void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.highscoreform);
highScoreAdapter = new HighscoreAdapter(this);
highScoreAdapter.open();
// Find form elements
nameField = (EditText) findViewById(R.id.title);
nameField.setSingleLine(true);
nameField.setOnKeyListener(new OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER) {
// hide keyboard when ENTER is pressed
InputMethodManager imm = (InputMethodManager)getApplicationContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
return false;
}
});
scoreField = (TextView) findViewById(R.id.score);
checkboxPushOnline = (CheckBox) findViewById(R.id.postOnline);
Button confirmButton = (Button) findViewById(R.id.confirm);
// Performe save
confirmButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
saveState();
}
});
// Set Checkbox true if device is connected to internet
if(isOnline())
checkboxPushOnline.setChecked(true);
// Get Score
score = (savedInstanceState == null) ? null : (Integer) savedInstanceState.getSerializable("score");
if (score == null) {
Bundle extras = getIntent().getExtras();
score = extras != null ? extras.getInt("score") : null;
}
scoreField.setText(score.toString());
// Get Last Saved Name
Cursor cursor = highScoreAdapter.fetchLastEntry();
startManagingCursor(cursor);
if(cursor.getCount() > 0) {
nameField.setText(cursor.getString(cursor.getColumnIndexOrThrow(HighscoreAdapter.KEY_NAME)));
}
cursor.close();
}
// ---------------------------------------------------
// Save Entry
private void saveState() {
String name = nameField.getText().toString();
String score = scoreField.getText().toString();
int isonline = 0;
if(name.length() > 0) {
// Save score online
if(checkboxPushOnline.isChecked()) {
if(!isOnline()) {
highScoreAdapter.toastMessage(R.string.hs_error_no_internet);
} else {
// Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(Settings.HIGHSCORE_POST_URL);
try {
// Add data
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("name", name));
nameValuePairs.add(new BasicNameValuePair("score", score));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpclient.execute(httppost);
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
} catch (IOException e) {
// TODO Auto-generated catch block
}
isonline = 1;
}
}
// Save HS locally
try {
highScoreAdapter.createHighscore(score, name, isonline);
} catch (Exception e) {
Log.w(Settings.LOG_TAG, "create highscore threw an exception");
Log.w(Settings.LOG_TAG, "Maybe a double attempt? HTC Sensation does that for example");
return;
}
highScoreAdapter.close();
setResult(RESULT_OK);
finish();
} else {
highScoreAdapter.toastMessage(R.string.hs_error_name_empty);
}
}
// ---------------------------------------------------------
// Check if user is connected to the internet
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
if (ni != null && ni.isAvailable() && ni.isConnected()) {
return true;
} else {
return false;
}
}
// ---------------------------------------------------------
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
saveState();
}
@Override
protected void onPause() {
super.onPause();
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (highScoreAdapter != null) {
highScoreAdapter.close();
}
}
}