SRS – Android Client Code Part 4

SRS – Server Side Code Part 1
SRS – Server Side Code Part 2
SRS – Server Side Code Part 3
SRS – Android Client Code Part 4

SRS – Adroind Code which handles files on clients side, provides GUI interface and connectivity with server on a specific ip and port.

Question Activity on Android Client

package com.activeSRS.client;

import java.net.Socket;

import com.example.quizapp.R;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.Chronometer;
import android.widget.LinearLayout;
import android.widget.TextView;

/**
 * 
 * @author Gulraiz
 *
 */
public class QuestionActivity extends Activity {
	TextView s1;
	Socket socket = null;
	CheckBox[] box = null;
	LinearLayout layout;
	String[] data = null;
	Chronometer focus;

	@SuppressLint("NewApi")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_question);
		focus = (Chronometer) findViewById(R.id.chronometer1);
		focus.start();

		// Get the message from the intent
		Intent intent = getIntent();
		String message = intent.getStringExtra(MyClient.EXTRA_MESSAGE);

		s1 = new TextView(this);
		s1.setTextSize(12);
		layout = (LinearLayout) findViewById(R.id.container);
		layout.setOrientation(LinearLayout.VERTICAL);

		layout.addView(s1);
		data = message.split(":");

		TextView question = new TextView(this);
		question.setTextSize(15);
		question.setTextColor(Color.BLUE);
		layout.addView(question);

		question.setText("Qusestion : \n" + data[0] + "?");

		box = new CheckBox[data.length - 1];
		for (int i = 1; i < data.length; i++) {
			box[i - 1] = new CheckBox(this);
			box[i - 1].setText(data[i]);
			box[i - 1].setOnClickListener(new CheckBoxListener(this));
			layout.addView(box[i - 1]);
		}

		Button send = new Button(this);
		send.setText("Send");

		layout.addView(send);

		setContentView(layout);
		send.setOnClickListener(new MyListener(this));
		// send.setOnClickListener(myBtn);

	}

	public void onCheckboxClicked(View view) {
		System.out.println("clickable" + view.isClickable());
	}

	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		// Handle action bar item clicks here. The action bar will
		// automatically handle clicks on the Home/Up button, so long
		// as you specify a parent activity in AndroidManifest.xml.
		int id = item.getItemId();
		if (id == R.id.action_settings) {
			return true;
		}
		return super.onOptionsItemSelected(item);
	}

	/**
	 * A placeholder fragment containing a simple view.
	 */
	@SuppressLint("NewApi")
	public static class PlaceholderFragment extends Fragment {

		public PlaceholderFragment() {
		}

		@Override
		public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
			View rootView = inflater.inflate(R.layout.activity_question, container, false);
			return rootView;
		}
	}
}
package com.activeSRS.client;

import android.app.Activity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CheckBox;

/**
 * 
 * @author Gulraiz
 *
 */
public class CheckBoxListener implements OnClickListener {

	Activity activity;

	public CheckBoxListener(Activity activity) {
		this.activity = activity;
	}

	@Override
	public void onClick(View v) {
		CheckBox box = (CheckBox) v;
		QuestionActivity ac = (QuestionActivity) this.activity;

		for (int i = 0; i < ac.box.length; i++)
			ac.box[i].setChecked(false);

		box.setChecked(true);
	}
}

File Handler Class

package com.activeSRS.client;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import android.app.Activity;
import android.content.Context;
import android.util.Log;

/**
 * 
 * @author Gulraiz
 *
 */
public class FileHandler {
	Activity myactivity;

	public FileHandler(Activity activity) {
		this.myactivity = activity;
	}

	public String readFile() {
		String FILENAME = "test";
		File myDir = this.myactivity.getFilesDir();
		// File file = new File(myDir + "/text/", FILENAME);
		Log.i("File Reader ", "----->" + myDir.getAbsolutePath());
		String temp = "";
		// if (file.exists()) {
		try {
			InputStream fio = this.myactivity.openFileInput(FILENAME);
			int c;

			while ((c = fio.read()) != -1)
				temp = temp + Character.toString((char) c);

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		// }
		return temp;
	}

	protected void writeFile(String info) {
		String FILENAME = "test";
		File myDir = this.myactivity.getFilesDir();
		File secondFile = new File(myDir + "/text/", FILENAME);

		try {
			if (secondFile.getParentFile().mkdirs())
				secondFile.createNewFile();

			FileOutputStream fos = this.myactivity.openFileOutput(FILENAME, Context.MODE_PRIVATE);
			fos.write(info.getBytes());

			fos.close();
			Log.i("File Writer ", "----->" + secondFile.getAbsolutePath());
			Log.i("User Data ", "----->" + info);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

MyClient GUI class

package com.activeSRS.client;

import com.example.quizapp.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;

/**
 * 
 * @author Gulraiz
 *
 */

@SuppressLint("NewApi")
public class MyClient extends Activity {

	EditText textport;
	EditText textip;
	TextView textIn;
	TextView status;
	EditText sid;
	EditText name;

	CheckBox choice1;
	CheckBox choice2;
	CheckBox choice3;
	CheckBox choice4;
	public final static String EXTRA_MESSAGE = "com.example.quizapp.MESSAGE";

	String file_str = null;

	/** Called when the activity is first created. */
	@Override
	public void onCreate(Bundle savedInstanceState) {

		super.onCreate(savedInstanceState);

		setContentView(R.layout.activity_main);

		textport = (EditText) findViewById(R.id.txtport);
		textip = (EditText) findViewById(R.id.txtip);
		Button buttonSend = (Button) findViewById(R.id.btnSubmit);
		status = (TextView) findViewById(R.id.status);
		textIn = (TextView) findViewById(R.id.textin);
		sid = (EditText) findViewById(R.id.sid);
		name = (EditText) findViewById(R.id.name);

		// Get data from stored file in cache
		String data = (String) new FileHandler(this).readFile();

		if (!data.isEmpty()) {
			String str[] = data.split(":");
			textport.setText(str[1]);
			textip.setText(str[0]);
			sid.setText(str[2]);
			name.setText(str[3]);
		} else {
			textport.setText("PORT");
			textip.setText("IP");
			sid.setText("SID");
			name.setText("Student Name");
		}

		buttonSend.setOnClickListener(new MyListener(this));
	}
}

Activity Listener Class

package com.activeSRS.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import com.example.quizapp.R;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.graphics.Color;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;

/**
 * 
 * @author Gulraiz
 *
 */
public class MyListener implements OnClickListener {

	// data from my activity
	String IP;
	String MSG;
	int PORT;
	String line;
	String file_str;
	String output;
	protected Activity activity;

	public MyListener(Activity activity) {
		// if(activity instanceof MyClient){
		this.activity = activity;
	}

	// Question activity 1. Read file and get connectivity data
	// 2. record answer on server

	public MyListener(Activity activity, String output) {
		this.activity = activity;
		this.output = output;
	}

	@Override
	public void onClick(View v) {
		if (activity instanceof MyClient) {

			try {
				new Thread() {
					@Override
					public void run() {
						try {

							MyClient client = (MyClient) activity;
							PORT = Integer.parseInt(client.textport.getText().toString());

							IP = client.textip.getText().toString();

							int sid = Integer.parseInt(client.sid.getText().toString());

							String sname = client.name.getText().toString();

							file_str = IP + ":" + PORT + ":" + sid + ":" + sname;

							new FileHandler(client).writeFile(file_str);
							// Create Socket instance
							Socket socket = new Socket(client.textip.getText().toString(), PORT);
							// Get input buffer
							BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
							line = br.readLine();
							br.close();
						} catch (UnknownHostException e) {
							e.printStackTrace();
						} catch (IOException e) {
							e.printStackTrace();
						}
						InputHandler.sendEmptyMessage(0);
					}
				}.start();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

		// Handle Question activity from here onward
		else if (activity instanceof QuestionActivity) {
			try {
				new Thread() {
					@Override
					public void run() {
						try {

							QuestionActivity client = (QuestionActivity) activity;

							String data[] = (new FileHandler(activity)).readFile().split(":");

							String answer = "";
							boolean isChecked = false;
							for (int i = 0; i < client.box.length; i++) {
								if (client.box[i].isChecked()) {
									answer = client.box[i].getText().toString();
									isChecked = true;
								}
							}

							if (isChecked) {

								client.focus.stop();
								String time[] = client.focus.getText().toString().split(":");
								int timespent = (Integer.parseInt(time[0]) * 60) + Integer.parseInt(time[1]);
								Log.i("Time spent ", "----->" + timespent);

								// 0: SID, 1:name, 2:time stamp, 3: answer
								String result = data[2] + ":" + data[3] + ":" + timespent + ":" + answer;
								// Create Socket instance
								Socket socket = new Socket(data[0], Integer.parseInt(data[1]));

								PrintWriter output = new PrintWriter(socket.getOutputStream(), true);
								output.println(result);
								output.close();

								Log.i("Response ", "----->" + result);
								Intent intent = new Intent(activity, Thanks.class);
								// intent.putExtra(client.EXTRA_MESSAGE,
								// result);
								activity.startActivity(intent);
							} else {
								// client.s1.setText("Select answer...!!!");
							}

						} catch (UnknownHostException e) {
							e.printStackTrace();
						} catch (IOException e) {
							e.printStackTrace();
						}
						// InputHandler.sendEmptyMessage(0);
					}
				}.start();

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	// Define Handler object
	@SuppressLint("HandlerLeak")
	private Handler InputHandler = new Handler() {
		@Override
		// When there is message, execute this method
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			// Update UI
			MyClient obj = (MyClient) activity;
			obj.status.setText("connected");

			Intent intent = new Intent(activity, QuestionActivity.class);
			intent.putExtra(obj.EXTRA_MESSAGE, line);

			activity.startActivity(intent);
			Log.i("Line ", "----->" + line);
		}
	};
}