Perancangan Aplikasi Tes Toefl Berbasis Android
L
A
M
P
I
R
A
N
Universitas Sumatera Utara
Universitas Sumatera Utara
Universitas Sumatera Utara
LAMPIRAN
Listing Program
ToeflSchoolActivity.java
package com.nurul.toeflschool;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
Universitas Sumatera Utara
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.database.DatabaseHelper1;
public class ToeflSchoolActivity extends Activity {
Button playButton, rulesButton, exitButton,aboutButton;
//private DatabaseHelper1 mDBHelper;
private DatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toefl_school);
playButton = (Button) findViewById(R.id.btnPlay);
rulesButton = (Button) findViewById(R.id.btnRules);
exitButton = (Button) findViewById(R.id.btnExit);
aboutButton = (Button) findViewById(R.id.btnAbout);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent
i
=
new
Intent(ToeflSchoolActivity.this,
MainMenuActivity.class);
startActivity(i);
Universitas Sumatera Utara
}
});
rulesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent rules = new Intent(ToeflSchoolActivity.this,
RulesActivity.class);
startActivity(rules);
}
});
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
close();
}
});
aboutButton.setOnClickListener(new View.OnClickListener() {
@Override
Universitas Sumatera Utara
public void onClick(View v) {
Intent
i
=
new
Intent(ToeflSchoolActivity.this,AboutActivity.class);
startActivity(i);
}
});
dbHelper = new DatabaseHelper(this);
//dbHelper.getReadableDatabase();
//
mDBHelper = new DatabaseHelper(this);
prepareDatabase();
}
public void close() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public
void
onClick(DialogInterface dialog, int id) {
ToeflSchoolActivity.this.finish();
}
})
Universitas Sumatera Utara
.setNegativeButton("No",
new
DialogInterface.OnClickListener() {
public
void
onClick(DialogInterface
dialog,
int id) {
dialog.cancel();
}
}).show();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
close();
}
return super.onKeyDown(keyCode, event);
}
private void prepareDatabase(){
//Check exists database
File
database
=
getApplicationContext().getDatabasePath(DatabaseHelper.DB_NAME);
if(!database.exists()) {
//mDBHelper.getReadableDatabase();
dbHelper.getReadableDatabase();
//Copy db
Universitas Sumatera Utara
if(copyDatabase(this)) {
//Toast.makeText(this,
"Copy
database
success",
data
error",
Toast.LENGTH_SHORT).show();
} else {
//Toast.makeText(this,
"Copy
Toast.LENGTH_SHORT).show();
return;
}
}
}
private boolean copyDatabase(Context context) {
try {
InputStream
inputStream
=
context.getAssets().open(DatabaseHelper.DB_NAME);
String
outFileName
=
DatabaseHelper.DB_PATH
+
DatabaseHelper.DB_NAME;
OutputStream
outputStream
=
new
FileOutputStream(outFileName);
byte[]buff = new byte[1024];
int length = 0;
while ((length = inputStream.read(buff)) > 0) {
outputStream.write(buff, 0, length);
}
outputStream.flush();
outputStream.close();
Log.w("MainActivity","DB copied");
Universitas Sumatera Utara
return true;
}catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
ExamActivity.java
package com.nurul.toeflschool;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.content.Intent;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.entity.Exam;
import com.nurul.toeflschool.entity.Question;
import com.nurul.toeflschool.util.ActionButtonDialog;
import com.nurul.toeflschool.util.MessageHelper;
Universitas Sumatera Utara
public abstract class ExamActivity extends Activity {
public static final int TIME_MAX_LISTINING = 35; //menit
public static final int TIME_MAX_READING = 55; //menit
public static final int TIME_MAX_GRAMMAR = 25; //menit
private Button nextButton, backButton, submitSubmit;
private TextView paggingTextView, option1TextView,
option2TextView,
option3TextView, option4TextView;
protected Exam currentExam;
protected int currentExamLimitTimer;
protected int currentExamId;
protected DatabaseHelper dbAdapter;
protected int currentQuestNumber;
protected int maxQuestNumber;
protected Question currentQuestion;
protected TextView timerTextView;
// private ArrayList questionList;
// private int currentListeningSoundId;
protected CountDownTimer mCountDown;
private long timeRemaining;
private boolean onFirstLoaded;
protected void prepareUI() {
nextButton = (Button) findViewById(R.id.buttonNext);
backButton = (Button) findViewById(R.id.buttonBack);
Universitas Sumatera Utara
submitSubmit = (Button) findViewById(R.id.buttonSubmit);
paggingTextView = (TextView) findViewById(R.id.pagingTextView);
option1TextView = (TextView)
findViewById(R.id.option1TextView);
option2TextView = (TextView)
findViewById(R.id.option2TextView);
option3TextView = (TextView)
findViewById(R.id.option3TextView);
option4TextView = (TextView)
findViewById(R.id.option4TextView);
timerTextView = (TextView) findViewById(R.id.tvTimer);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentQuestNumber++;
displayQuestion(currentQuestNumber);
}
});
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentQuestNumber--;
displayQuestion(currentQuestNumber);
}
});
submitSubmit.setOnClickListener(new View.OnClickListener() {
@Override
Universitas Sumatera Utara
public void onClick(View v) {
String message = "Are you sure to submit ?";
MessageHelper.showDialogYesNo(ExamActivity.this,
"Submit Test", message,
new
com.nurul.toeflschool.util.ActionButtonDialog() {
@Override
public void runAction() {
submitExam();
}
});
}
});
onFirstLoaded = true;
}
private boolean isPaused = false;
protected void runCountdownTimer(boolean resume){
int milisTimeExam = 0;
if(resume){
milisTimeExam = (int) timeRemaining;
}else{
milisTimeExam = currentExamLimitTimer * 60 * 1000;
}
mCountDown = new CountDownTimer(milisTimeExam,1000) {
@Override
public void onTick(long millisUntilFinished) {
Universitas Sumatera Utara
if(isPaused){
cancel();
}else{
long millis = millisUntilFinished;
timeRemaining = millisUntilFinished;
String hms = String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millis) TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
timerTextView.setText(hms);
}
Log.d("Timer", "Run = " + timeRemaining);
}
@Override
public void onFinish() {
timeUp();
}
}.start();
}
protected void timeUp(){
MessageHelper.showMessageOK(this, "Times Up", "Ups!! You have
running out of time",
new ActionButtonDialog() {
@Override
public void runAction() {
submitExam();
Universitas Sumatera Utara
}
});
}
@Override
protected void onResume() {
super.onResume();
if(!onFirstLoaded){
isPaused = false;
runCountdownTimer(true);
}
onFirstLoaded = false;
}
@Override
public void onBackPressed() {
MessageHelper.showDialogYesNo(this, "Toefl School", "Do you
want to exit from the test?",
new ActionButtonDialog() {
@Override
public void runAction() {
finish();
}
});
}
@Override
protected void onPause() {
super.onPause();
isPaused = true;
Universitas Sumatera Utara
}
private void submitExam(){
actionBeforeSubmit();
Intent intent = new Intent(ExamActivity.this,
ResultActivity.class);
intent.putExtra(ResultActivity.KEY_EXAM_ID, currentExamId);
intent.putExtra(ResultActivity.KEY_TEST, currentExam);
startActivity(intent);
finish();
}
protected abstract void actionBeforeSubmit();
protected void displayQuestion(int questionNumber) {
resetQuestionBgColor();
int qsIndex = questionNumber - 1;
currentQuestion = currentExam.getQuestion(qsIndex);
option1TextView.setText("A. " + currentQuestion.getOption1());
option2TextView.setText("B. " + currentQuestion.getOption2());
option3TextView.setText("C. " + currentQuestion.getOption3());
option4TextView.setText("D. " + currentQuestion.getOption4());
updatePagingView();
updateButton();
int questionAnswerIndex = currentExam.getAnswer(qsIndex);
Universitas Sumatera Utara
if (questionAnswerIndex != 0) {
updateQuestionBgColor(questionAnswerIndex);
}
}
protected void updateButton() {
nextButton.setVisibility(View.VISIBLE);
backButton.setVisibility(View.VISIBLE);
if (currentQuestNumber == maxQuestNumber) {
nextButton.setVisibility(View.INVISIBLE);
}
if (currentQuestNumber == 1) {
backButton.setVisibility(View.INVISIBLE);
}
}
public void onClickQuestion(View view) {
int tagId = Integer.valueOf(view.getTag().toString());
// reset all background textView;
resetQuestionBgColor();
updateQuestionBgColor(tagId);
currentExam.setAnswer(currentQuestNumber - 1, tagId);
}
Universitas Sumatera Utara
protected void resetQuestionBgColor() {
option1TextView.setBackgroundResource(R.color.white);
option2TextView.setBackgroundResource(R.color.white);
option3TextView.setBackgroundResource(R.color.white);
option4TextView.setBackgroundResource(R.color.white);
}
protected void updateQuestionBgColor(int questionIndex) {
switch (questionIndex) {
case 1:
option1TextView.setBackgroundResource(R.color.blue);
break;
case 2:
option2TextView.setBackgroundResource(R.color.blue);
break;
case 3:
option3TextView.setBackgroundResource(R.color.blue);
break;
case 4:
option4TextView.setBackgroundResource(R.color.blue);
break;
default:
break;
}
}
protected void updatePagingView() {
String pagingText = "Question " + currentQuestNumber + "/"
Universitas Sumatera Utara
+ maxQuestNumber;
paggingTextView.setText(pagingText);
}
}
MainMenuActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainMenuActivity extends Activity {
private Button listeningButton, readingButton, grammarButton,
scoreButton,
tipsButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listeningButton = (Button) findViewById(R.id.btnListening);
readingButton = (Button) findViewById(R.id.btnReading);
Universitas Sumatera Utara
grammarButton = (Button) findViewById(R.id.btnGrammar);
scoreButton = (Button) findViewById(R.id.btnViewScore);
tipsButton = (Button) findViewById(R.id.btnTips);
listeningButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
ListeningActivity.class);
startActivity(i);
}
});
readingButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
ReadingActivity.class);
startActivity(i);
}
});
grammarButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
GrammarActivity.class);
startActivity(i);
}
Universitas Sumatera Utara
});
scoreButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
ScoreActivity.class);
startActivity(i);
}
});
tipsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
Tips.class);
startActivity(i);
}
});
}
}
ListeningActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.content.Intent;
Universitas Sumatera Utara
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class ListeningActivity extends Activity {
private Button nextButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listening);
nextButton = (Button) findViewById(R.id.btnNext);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ListeningActivity.this,
ListeningExamActivity.class);
startActivity(i);
finish();
}
});
}
}
ListeningExamActivity.java
Universitas Sumatera Utara
package com.nurul.toeflschool;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.database.model.ModelListening;
import com.nurul.toeflschool.entity.Exam;
import com.nurul.toeflschool.entity.Listening;
import com.nurul.toeflschool.util.MusicManager;
import com.nurul.toeflschool.util.RandomHelper;
public class ListeningExamActivity extends ExamActivity {
private MusicManager musicManager;
private Listening listening;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listeningexam2);
prepareUI();
dbAdapter = new DatabaseHelper(this);
dbAdapter.openDatabase();
Universitas Sumatera Utara
int randomListeningId = RandomHelper.GenerateRandom();
ModelListening modelListening = new ModelListening(dbAdapter);
listening =
modelListening.getListeningSound(randomListeningId);
this.currentExam = listening;
dbAdapter.closeDatabase();
//currentListeningSoundId =
listening.getListeningSound().getId();
musicManager = new MusicManager();
currentQuestNumber = 1;
maxQuestNumber = listening.getCountQuestion();
currentExamId = ResultActivity.EXAM_LISTENING_ID;
currentExamLimitTimer = ExamActivity.TIME_MAX_LISTINING;
displayQuestion(currentQuestNumber);
updateButton();
runCountdownTimer(false);
}
public void onPlayClicked(View view){
int idListeningSound = listening.getListeningSound().getId();
String listeningFileName =
listening.getListeningSound().getFileName();
Universitas Sumatera Utara
Log.d("TOEFL", "filename = " + listeningFileName);
int mp3res = getResources().getIdentifier(listeningFileName,
"raw", getPackageName());
musicManager.stop();
//
if(list){
//
//
}
musicManager.start(this, mp3res);
}
public void onStopClicked(View view){
musicManager.pause();
}
private void stopSound(){
if (musicManager != null){
musicManager.stop();
}
}
@Override
protected void onStop() {
super.onStop();
musicManager.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
Universitas Sumatera Utara
musicManager.release();
}
@Override
protected void actionBeforeSubmit() {
stopSound();
}
}
ReadingPassageActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ReadingPassageActivity extends Activity {
public static final String KEY_PASSAGE_CONTENT =
"passagecontent";
private String currentPassageContent;
private Button buttonBack;
private TextView tvContent;
Universitas Sumatera Utara
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_readingpassage);
Bundle bundle = getIntent().getExtras();
currentPassageContent = bundle.getString(KEY_PASSAGE_CONTENT);
buttonBack = (Button) findViewById(R.id.btnBack);
buttonBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
tvContent = (TextView) findViewById(R.id.tvContent);
tvContent.setText(Html.fromHtml(currentPassageContent));
}
}
ResultActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.os.Bundle;
Universitas Sumatera Utara
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.nurul.toeflschool.app.ToeflApplication;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.database.model.ModelScoreConvert;
import com.nurul.toeflschool.entity.Exam;
import com.nurul.toeflschool.entity.Question;
public class ResultActivity extends Activity {
public static final String KEY_TEST = "test";
public static final String KEY_EXAM_ID = "exam_id";
public static final int EXAM_LISTENING_ID = 1;
public static final int EXAM_GRAMMAR_ID = 2;
public static final int EXAM_READING_ID = 3;
private Button doneButton;
private LinearLayout linearResultAnswer;
private TextView tvTrue, tvFalse;
private Exam resultExam;
private int examId;
private DatabaseHelper dbAdapter;
Universitas Sumatera Utara
private int convertResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
Bundle bundle = getIntent().getExtras();
resultExam = (Exam) bundle.getSerializable(KEY_TEST);
examId = bundle.getInt(KEY_EXAM_ID);
linearResultAnswer = (LinearLayout)
findViewById(R.id.linearResultAnswer);
tvTrue = (TextView) findViewById(R.id.tvTrue);
tvFalse = (TextView) findViewById(R.id.tvFalse);
doneButton = (Button) findViewById(R.id.btnDone);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
int[] resultTrueFalse = resultExam.checkExam();
int scoreTrue = resultTrueFalse[0];
int scoreFalse = resultTrueFalse[1];
tvTrue.setText("" + scoreTrue);
tvFalse.setText("" + scoreFalse);
Universitas Sumatera Utara
dbAdapter = new DatabaseHelper(this);
dbAdapter.openDatabase();
ModelScoreConvert modelScoreConvert = new
ModelScoreConvert(dbAdapter);
convertResult = modelScoreConvert.getConvert(scoreTrue,
resultExam.getName());
dbAdapter.closeDatabase();
if(examId == EXAM_LISTENING_ID){
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
SC_LISTENING, scoreTrue);
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
CV_LISTENING, convertResult);
}else if(examId == EXAM_GRAMMAR_ID){
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
SC_GRAMMAR, scoreTrue);
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
CV_GRAMMAR, convertResult);
}else{
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
SC_READING, scoreTrue);
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
CV_READING, convertResult);
}
displayQuestion();
}
private void displayQuestion(){
Universitas Sumatera Utara
int countNumber = 1;
for (Question question : resultExam.getListQuestion()) {
LinearLayout layoutQuestion = (LinearLayout)
getLayoutInflater().inflate(R.layout.result_item, null);
TextView tvQuestion = (TextView)
layoutQuestion.findViewById(R.id.tvQuestion);
TextView tvNumber = (TextView)
layoutQuestion.findViewById(R.id.tvNumber);
TextView tvOption1 = (TextView)
layoutQuestion.findViewById(R.id.tvOption1);
TextView tvOption2 = (TextView)
layoutQuestion.findViewById(R.id.tvOption2);
//TextView tvAnswer = (TextView)
layoutQuestion.findViewById(R.id.tvAnswer);
String [] abcd = { "A", "B", "C", "D" };
int selectedIndex = question.getSelectedIndex();
if(selectedIndex > 0){
if(question.getQuestion() != null){
tvQuestion.setText(Html.fromHtml(question.getQuestion()));
}else{
tvQuestion.setVisibility(View.GONE);
}
String selectedUser =
getOptionStringbyIndex(selectedIndex, question);
if(question.isRight()){
Universitas Sumatera Utara
+
selectedUser = abcd[selectedIndex - 1] + ". "
selectedUser + " (T)";
tvOption1.setText(selectedUser);
tvOption2.setVisibility(View.GONE);
}else{
String selectedAnswer =
getOptionStringbyIndex(question.getAnswerIndex(), question);
selectedAnswer =
abcd[question.getAnswerIndex() - 1] + ". " +
(T)";
selectedAnswer + "
tvOption1.setText(selectedAnswer);
+
selectedUser = abcd[selectedIndex - 1] + ". "
selectedUser + " (F)";
tvOption2.setText(selectedUser);
tvOption2.setBackgroundResource(R.color.red);
}
}else{
String noAnswer = "-";
tvQuestion.setText(noAnswer);
tvOption1.setVisibility(View.GONE);
tvOption2.setVisibility(View.GONE);
}
tvNumber.setText("" + countNumber + ". ");
linearResultAnswer.addView(layoutQuestion);
countNumber++;
}
}
Universitas Sumatera Utara
private String getOptionStringbyIndex(int index, Question
question){
String option = null;
switch (index) {
case 1:
option = question.getOption1();
break;
case 2:
option = question.getOption2();
break;
case 3:
option = question.getOption3();
break;
case 4:
option = question.getOption4();
break;
default:
break;
}
return option;
}
public void onDoneClicked(View view){
finish();
}
}
Universitas Sumatera Utara
ScoreActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.nurul.toeflschool.app.ToeflApplication;
import com.nurul.toeflschool.util.MessageHelper;
public class ScoreActivity extends Activity {
private TextView tvListeningConvert, tvReadingConvert,
tvGrammarConvert, tvToeflScore;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_score);
tvListeningConvert = (TextView)
findViewById(R.id.tvListeningConvert);
tvReadingConvert = (TextView)
findViewById(R.id.tvReadingConvert);
tvGrammarConvert = (TextView)
findViewById(R.id.tvGrammarConvert);
tvToeflScore = (TextView) findViewById(R.id.tvToeflScore);
ToeflApplication.getInstance().readResultExam();
Universitas Sumatera Utara
int listeningConvert =
ToeflApplication.getInstance().getConvertListening();
int readingConvert =
ToeflApplication.getInstance().getConvertReading();
int grammarConvert =
ToeflApplication.getInstance().getConvertGrammar();
float toeflScore =
ToeflApplication.getInstance().getToeflScore();
tvListeningConvert.setText("" + listeningConvert);
tvReadingConvert.setText("" + readingConvert);
tvGrammarConvert.setText("" + grammarConvert);
tvToeflScore.setText("" + toeflScore);
}
public void onDoneClicked(View view){
finish();
}
public void onRetryClicked(View view){
String message = "Are you sure to retry the test? ?";
MessageHelper.showDialogYesNo(this, "Retry Test", message,
new com.nurul.toeflschool.util.ActionButtonDialog()
{
@Override
public void runAction() {
ToeflApplication.getInstance().clearData();
finish();
}
});
}
Universitas Sumatera Utara
}
ToeflApplication.java
package com.nurul.toeflschool.app;
import android.app.Application;
import android.content.SharedPreferences;
public class ToeflApplication extends Application {
public static final String KEYPREF_SC_LISTENING =
"score_listening";
public static final String KEYPREF_SC_GRAMMAR = "score_grammar";
public static final String KEYPREF_SC_READING = "score_reading";
public static final String KEYPREF_CV_LISTENING = "cv_listening";
public static final String KEYPREF_CV_GRAMMAR = "cv_grammar";
public static final String KEYPREF_CV_READING = "cv_reading";
public static final String KEYPREF_TOEFL_SCORE = "toelf_score";
private static ToeflApplication instance;
private SharedPreferences sharedPreferences;
private int scoreListening;
private int scoreGrammar;
private int scoreReading;
private int convertListening;
Universitas Sumatera Utara
private int convertGrammar;
private int convertReading;
private float toeflScore;
@Override
public void onCreate() {
super.onCreate();
instance = this;
sharedPreferences = this.getSharedPreferences("mypref",
MODE_PRIVATE);
}
public static synchronized ToeflApplication getInstance() {
return instance;
}
public void readResultExam() {
this.setScoreListening(sharedPreferences.getInt(KEYPREF_SC_LISTENING,
0));
this.setScoreGrammar(sharedPreferences.getInt(KEYPREF_SC_GRAMMAR,
0));
this.setScoreReading(sharedPreferences.getInt(KEYPREF_SC_READING,
0));
this.setConvertListening(sharedPreferences.getInt(KEYPREF_CV_LISTENIN
G, 0));
Universitas Sumatera Utara
this.setConvertGrammar(sharedPreferences.getInt(KEYPREF_CV_GRAMMAR,
0));
this.setConvertReading(sharedPreferences.getInt(KEYPREF_CV_READING,
0));
this.setToeflScore(sharedPreferences.getFloat(KEYPREF_TOEFL_SCORE,
0));
}
public float getToeflScore() {
return toeflScore;
}
public void setToeflScore(float toeflScore) {
this.toeflScore = toeflScore;
}
public void saveData(String key, int value){
//
Editor editor = sharedPreferences.edit();
//
editor.putInt(key, value);
//
editor.commit();
sharedPreferences.edit().putInt(key, value).commit();
updateToeflScore();
}
public void clearData(){
sharedPreferences.edit().clear().commit();
readResultExam();
}
Universitas Sumatera Utara
public void updateToeflScore(){
readResultExam();
int total = convertGrammar + convertListening + convertReading;
float toeflScore = (total / 3) * 10;
sharedPreferences.edit().putFloat(KEYPREF_TOEFL_SCORE,
toeflScore).commit();
}
public int getScoreListening() {
return scoreListening;
}
public void setScoreListening(int scoreListening) {
this.scoreListening = scoreListening;
}
public int getScoreGrammar() {
return scoreGrammar;
}
public void setScoreGrammar(int scoreGrammar) {
this.scoreGrammar = scoreGrammar;
}
public int getScoreReading() {
return scoreReading;
}
Universitas Sumatera Utara
public void setScoreReading(int scoreReading) {
this.scoreReading = scoreReading;
}
public int getConvertListening() {
return convertListening;
}
public void setConvertListening(int convertListening) {
this.convertListening = convertListening;
}
public int getConvertGrammar() {
return convertGrammar;
}
public void setConvertGrammar(int convertGrammar) {
this.convertGrammar = convertGrammar;
}
public int getConvertReading() {
return convertReading;
}
public void setConvertReading(int convertReading) {
this.convertReading = convertReading;
}
}
Universitas Sumatera Utara
DatabaseHelper.java
package com.nurul.toeflschool.database;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "toeflschool.db";
public final static String DB_PATH =
"/data/data/com.nurul.toeflschool/databases/";
String dbName;
Context context;
Universitas Sumatera Utara
File dbFile;
private SQLiteDatabase mDatabase;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 3);
this.context = context;
this.dbName = DB_NAME;
dbFile = new File(DB_PATH + dbName);
}
@Override
public synchronized SQLiteDatabase getWritableDatabase() {
if (!dbFile.exists()) {
SQLiteDatabase db = super.getWritableDatabase();
copyDataBase(db.getPath());
}
return super.getWritableDatabase();
}
// @Override
// public synchronized SQLiteDatabase getReadableDatabase() {
//
if (!dbFile.exists()) {
//
SQLiteDatabase db = super.getReadableDatabase();
//
copyDataBase(db.getPath());
//
//
//
}
//
return super.getReadableDatabase();
Universitas Sumatera Utara
// }
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
}
private void copyDataBase(String dbPath) {
try {
InputStream assestDB = context.getAssets().open(
"databases/" + dbName);
OutputStream appDB = new FileOutputStream(dbPath, false);
byte[] buffer = new byte[1024];
int length;
while ((length = assestDB.read(buffer)) > 0) {
appDB.write(buffer, 0, length);
}
appDB.flush();
appDB.close();
assestDB.close();
} catch (IOException e) {
e.printStackTrace();
}
Universitas Sumatera Utara
}
public void openDatabase() {
String dbPath =
context.getDatabasePath(dbName).getPath();
if(mDatabase != null && mDatabase.isOpen()) {
return;
}
mDatabase = SQLiteDatabase.openDatabase(dbPath, null,
SQLiteDatabase.OPEN_READWRITE);
//
File dbFile = mContext.getDatabasePath(DBNAME);
//
if (!dbFile.exists()) {
//
try {
//
copyDatabase(dbFile);
//
} catch (IOException e) {
//
database", e);
//
throw new RuntimeException("Error creating source
}
//
}
//
//
mDatabase = SQLiteDatabase.openDatabase(dbFile.getPath(),
null, SQLiteDatabase.OPEN_READONLY);
}
public void closeDatabase() {
if(mDatabase!=null) {
mDatabase.close();
}
}
Universitas Sumatera Utara
public Cursor fetchAllRecords(String tableName, String[]
columns,
String filter) {
return mDatabase.query(tableName, columns, filter, null,
null, null, null);
}
}
ModelListening.java
package com.nurul.toeflschool.database.model;
import android.database.Cursor;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.entity.Listening;
import com.nurul.toeflschool.entity.ListeningSound;
import com.nurul.toeflschool.entity.QuestionListening;
public class ModelListening {
//private final String TABLE_LISTENING = "Listening";
private final String TABLE_LISTENING_SOUND = "ListeningSound";
private final String TABLE_LISTENING_QUESTION =
"QuestionListening";
private DatabaseHelper dbAdapter;
Universitas Sumatera Utara
//private Listening listening;
public ModelListening(DatabaseHelper dbAdapter) {
this.dbAdapter = dbAdapter;
}
public Listening getAllListening(){
return null;
}
public Listening getListeningSound(int listeningId){
Listening listening = new Listening();
listening.setId(listeningId);
Cursor cursors =
dbAdapter.fetchAllRecords(TABLE_LISTENING_SOUND, new String[] {
"Id", "FileName" }, "ListeningId=" + listeningId);
ListeningSound listeningSound = null;
if (cursors.getCount() > 0) {
cursors.moveToFirst();
listeningSound = new ListeningSound();
listeningSound.setId(cursors.getInt(0));
listeningSound.setFileName(cursors.getString(1));
}
cursors.close();
if(listeningSound != null){
listening.setListeningSound(listeningSound);
Universitas Sumatera Utara
Cursor cursorQuestions =
dbAdapter.fetchAllRecords(TABLE_LISTENING_QUESTION, new String[] {
"Id", "Option1", "Option2", "Option3",
"Option4", "Answer" }, "ListeningSoundId=" + listeningSound.getId());
if (cursorQuestions.getCount() > 0) {
cursorQuestions.moveToFirst();
do {
QuestionListening qsListening = new
QuestionListening();
qsListening.setId(cursorQuestions.getInt(0));
qsListening.setOption1(cursorQuestions.getString(1));
qsListening.setOption2(cursorQuestions.getString(2));
qsListening.setOption3(cursorQuestions.getString(3));
qsListening.setOption4(cursorQuestions.getString(4));
qsListening.setAnswerIndex(cursorQuestions.getInt(5));
listening.addQuestion(qsListening);
} while (cursorQuestions.moveToNext());
}
cursorQuestions.close();
}
return listening;
}
}
activity_toefl_school.xml
Universitas Sumatera Utara
activity_main.xml
activity_listening.xml
Universitas Sumatera Utara
Universitas Sumatera Utara
activity_listeningexam2.xml
Universitas Sumatera Utara
Universitas Sumatera Utara
Universitas Sumatera Utara
activity_readingpassage.xml
Universitas Sumatera Utara
activity_result.xml
Universitas Sumatera Utara
activity_score.xml
r
A
M
P
I
R
A
N
Universitas Sumatera Utara
Universitas Sumatera Utara
Universitas Sumatera Utara
LAMPIRAN
Listing Program
ToeflSchoolActivity.java
package com.nurul.toeflschool;
import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
Universitas Sumatera Utara
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.database.DatabaseHelper1;
public class ToeflSchoolActivity extends Activity {
Button playButton, rulesButton, exitButton,aboutButton;
//private DatabaseHelper1 mDBHelper;
private DatabaseHelper dbHelper;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_toefl_school);
playButton = (Button) findViewById(R.id.btnPlay);
rulesButton = (Button) findViewById(R.id.btnRules);
exitButton = (Button) findViewById(R.id.btnExit);
aboutButton = (Button) findViewById(R.id.btnAbout);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent
i
=
new
Intent(ToeflSchoolActivity.this,
MainMenuActivity.class);
startActivity(i);
Universitas Sumatera Utara
}
});
rulesButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent rules = new Intent(ToeflSchoolActivity.this,
RulesActivity.class);
startActivity(rules);
}
});
exitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
close();
}
});
aboutButton.setOnClickListener(new View.OnClickListener() {
@Override
Universitas Sumatera Utara
public void onClick(View v) {
Intent
i
=
new
Intent(ToeflSchoolActivity.this,AboutActivity.class);
startActivity(i);
}
});
dbHelper = new DatabaseHelper(this);
//dbHelper.getReadableDatabase();
//
mDBHelper = new DatabaseHelper(this);
prepareDatabase();
}
public void close() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Do you want to exit?")
.setCancelable(false)
.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
public
void
onClick(DialogInterface dialog, int id) {
ToeflSchoolActivity.this.finish();
}
})
Universitas Sumatera Utara
.setNegativeButton("No",
new
DialogInterface.OnClickListener() {
public
void
onClick(DialogInterface
dialog,
int id) {
dialog.cancel();
}
}).show();
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
close();
}
return super.onKeyDown(keyCode, event);
}
private void prepareDatabase(){
//Check exists database
File
database
=
getApplicationContext().getDatabasePath(DatabaseHelper.DB_NAME);
if(!database.exists()) {
//mDBHelper.getReadableDatabase();
dbHelper.getReadableDatabase();
//Copy db
Universitas Sumatera Utara
if(copyDatabase(this)) {
//Toast.makeText(this,
"Copy
database
success",
data
error",
Toast.LENGTH_SHORT).show();
} else {
//Toast.makeText(this,
"Copy
Toast.LENGTH_SHORT).show();
return;
}
}
}
private boolean copyDatabase(Context context) {
try {
InputStream
inputStream
=
context.getAssets().open(DatabaseHelper.DB_NAME);
String
outFileName
=
DatabaseHelper.DB_PATH
+
DatabaseHelper.DB_NAME;
OutputStream
outputStream
=
new
FileOutputStream(outFileName);
byte[]buff = new byte[1024];
int length = 0;
while ((length = inputStream.read(buff)) > 0) {
outputStream.write(buff, 0, length);
}
outputStream.flush();
outputStream.close();
Log.w("MainActivity","DB copied");
Universitas Sumatera Utara
return true;
}catch (Exception e) {
e.printStackTrace();
return false;
}
}
}
ExamActivity.java
package com.nurul.toeflschool;
import java.util.concurrent.TimeUnit;
import android.app.Activity;
import android.content.Intent;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.entity.Exam;
import com.nurul.toeflschool.entity.Question;
import com.nurul.toeflschool.util.ActionButtonDialog;
import com.nurul.toeflschool.util.MessageHelper;
Universitas Sumatera Utara
public abstract class ExamActivity extends Activity {
public static final int TIME_MAX_LISTINING = 35; //menit
public static final int TIME_MAX_READING = 55; //menit
public static final int TIME_MAX_GRAMMAR = 25; //menit
private Button nextButton, backButton, submitSubmit;
private TextView paggingTextView, option1TextView,
option2TextView,
option3TextView, option4TextView;
protected Exam currentExam;
protected int currentExamLimitTimer;
protected int currentExamId;
protected DatabaseHelper dbAdapter;
protected int currentQuestNumber;
protected int maxQuestNumber;
protected Question currentQuestion;
protected TextView timerTextView;
// private ArrayList questionList;
// private int currentListeningSoundId;
protected CountDownTimer mCountDown;
private long timeRemaining;
private boolean onFirstLoaded;
protected void prepareUI() {
nextButton = (Button) findViewById(R.id.buttonNext);
backButton = (Button) findViewById(R.id.buttonBack);
Universitas Sumatera Utara
submitSubmit = (Button) findViewById(R.id.buttonSubmit);
paggingTextView = (TextView) findViewById(R.id.pagingTextView);
option1TextView = (TextView)
findViewById(R.id.option1TextView);
option2TextView = (TextView)
findViewById(R.id.option2TextView);
option3TextView = (TextView)
findViewById(R.id.option3TextView);
option4TextView = (TextView)
findViewById(R.id.option4TextView);
timerTextView = (TextView) findViewById(R.id.tvTimer);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentQuestNumber++;
displayQuestion(currentQuestNumber);
}
});
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
currentQuestNumber--;
displayQuestion(currentQuestNumber);
}
});
submitSubmit.setOnClickListener(new View.OnClickListener() {
@Override
Universitas Sumatera Utara
public void onClick(View v) {
String message = "Are you sure to submit ?";
MessageHelper.showDialogYesNo(ExamActivity.this,
"Submit Test", message,
new
com.nurul.toeflschool.util.ActionButtonDialog() {
@Override
public void runAction() {
submitExam();
}
});
}
});
onFirstLoaded = true;
}
private boolean isPaused = false;
protected void runCountdownTimer(boolean resume){
int milisTimeExam = 0;
if(resume){
milisTimeExam = (int) timeRemaining;
}else{
milisTimeExam = currentExamLimitTimer * 60 * 1000;
}
mCountDown = new CountDownTimer(milisTimeExam,1000) {
@Override
public void onTick(long millisUntilFinished) {
Universitas Sumatera Utara
if(isPaused){
cancel();
}else{
long millis = millisUntilFinished;
timeRemaining = millisUntilFinished;
String hms = String.format("%02d:%02d",
TimeUnit.MILLISECONDS.toMinutes(millis) TimeUnit.HOURS.toMinutes(TimeUnit.MILLISECONDS.toHours(millis)),
TimeUnit.MILLISECONDS.toSeconds(millis) TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(millis)));
timerTextView.setText(hms);
}
Log.d("Timer", "Run = " + timeRemaining);
}
@Override
public void onFinish() {
timeUp();
}
}.start();
}
protected void timeUp(){
MessageHelper.showMessageOK(this, "Times Up", "Ups!! You have
running out of time",
new ActionButtonDialog() {
@Override
public void runAction() {
submitExam();
Universitas Sumatera Utara
}
});
}
@Override
protected void onResume() {
super.onResume();
if(!onFirstLoaded){
isPaused = false;
runCountdownTimer(true);
}
onFirstLoaded = false;
}
@Override
public void onBackPressed() {
MessageHelper.showDialogYesNo(this, "Toefl School", "Do you
want to exit from the test?",
new ActionButtonDialog() {
@Override
public void runAction() {
finish();
}
});
}
@Override
protected void onPause() {
super.onPause();
isPaused = true;
Universitas Sumatera Utara
}
private void submitExam(){
actionBeforeSubmit();
Intent intent = new Intent(ExamActivity.this,
ResultActivity.class);
intent.putExtra(ResultActivity.KEY_EXAM_ID, currentExamId);
intent.putExtra(ResultActivity.KEY_TEST, currentExam);
startActivity(intent);
finish();
}
protected abstract void actionBeforeSubmit();
protected void displayQuestion(int questionNumber) {
resetQuestionBgColor();
int qsIndex = questionNumber - 1;
currentQuestion = currentExam.getQuestion(qsIndex);
option1TextView.setText("A. " + currentQuestion.getOption1());
option2TextView.setText("B. " + currentQuestion.getOption2());
option3TextView.setText("C. " + currentQuestion.getOption3());
option4TextView.setText("D. " + currentQuestion.getOption4());
updatePagingView();
updateButton();
int questionAnswerIndex = currentExam.getAnswer(qsIndex);
Universitas Sumatera Utara
if (questionAnswerIndex != 0) {
updateQuestionBgColor(questionAnswerIndex);
}
}
protected void updateButton() {
nextButton.setVisibility(View.VISIBLE);
backButton.setVisibility(View.VISIBLE);
if (currentQuestNumber == maxQuestNumber) {
nextButton.setVisibility(View.INVISIBLE);
}
if (currentQuestNumber == 1) {
backButton.setVisibility(View.INVISIBLE);
}
}
public void onClickQuestion(View view) {
int tagId = Integer.valueOf(view.getTag().toString());
// reset all background textView;
resetQuestionBgColor();
updateQuestionBgColor(tagId);
currentExam.setAnswer(currentQuestNumber - 1, tagId);
}
Universitas Sumatera Utara
protected void resetQuestionBgColor() {
option1TextView.setBackgroundResource(R.color.white);
option2TextView.setBackgroundResource(R.color.white);
option3TextView.setBackgroundResource(R.color.white);
option4TextView.setBackgroundResource(R.color.white);
}
protected void updateQuestionBgColor(int questionIndex) {
switch (questionIndex) {
case 1:
option1TextView.setBackgroundResource(R.color.blue);
break;
case 2:
option2TextView.setBackgroundResource(R.color.blue);
break;
case 3:
option3TextView.setBackgroundResource(R.color.blue);
break;
case 4:
option4TextView.setBackgroundResource(R.color.blue);
break;
default:
break;
}
}
protected void updatePagingView() {
String pagingText = "Question " + currentQuestNumber + "/"
Universitas Sumatera Utara
+ maxQuestNumber;
paggingTextView.setText(pagingText);
}
}
MainMenuActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainMenuActivity extends Activity {
private Button listeningButton, readingButton, grammarButton,
scoreButton,
tipsButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listeningButton = (Button) findViewById(R.id.btnListening);
readingButton = (Button) findViewById(R.id.btnReading);
Universitas Sumatera Utara
grammarButton = (Button) findViewById(R.id.btnGrammar);
scoreButton = (Button) findViewById(R.id.btnViewScore);
tipsButton = (Button) findViewById(R.id.btnTips);
listeningButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
ListeningActivity.class);
startActivity(i);
}
});
readingButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
ReadingActivity.class);
startActivity(i);
}
});
grammarButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
GrammarActivity.class);
startActivity(i);
}
Universitas Sumatera Utara
});
scoreButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
ScoreActivity.class);
startActivity(i);
}
});
tipsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(MainMenuActivity.this,
Tips.class);
startActivity(i);
}
});
}
}
ListeningActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.content.Intent;
Universitas Sumatera Utara
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class ListeningActivity extends Activity {
private Button nextButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listening);
nextButton = (Button) findViewById(R.id.btnNext);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent i = new Intent(ListeningActivity.this,
ListeningExamActivity.class);
startActivity(i);
finish();
}
});
}
}
ListeningExamActivity.java
Universitas Sumatera Utara
package com.nurul.toeflschool;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.database.model.ModelListening;
import com.nurul.toeflschool.entity.Exam;
import com.nurul.toeflschool.entity.Listening;
import com.nurul.toeflschool.util.MusicManager;
import com.nurul.toeflschool.util.RandomHelper;
public class ListeningExamActivity extends ExamActivity {
private MusicManager musicManager;
private Listening listening;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_listeningexam2);
prepareUI();
dbAdapter = new DatabaseHelper(this);
dbAdapter.openDatabase();
Universitas Sumatera Utara
int randomListeningId = RandomHelper.GenerateRandom();
ModelListening modelListening = new ModelListening(dbAdapter);
listening =
modelListening.getListeningSound(randomListeningId);
this.currentExam = listening;
dbAdapter.closeDatabase();
//currentListeningSoundId =
listening.getListeningSound().getId();
musicManager = new MusicManager();
currentQuestNumber = 1;
maxQuestNumber = listening.getCountQuestion();
currentExamId = ResultActivity.EXAM_LISTENING_ID;
currentExamLimitTimer = ExamActivity.TIME_MAX_LISTINING;
displayQuestion(currentQuestNumber);
updateButton();
runCountdownTimer(false);
}
public void onPlayClicked(View view){
int idListeningSound = listening.getListeningSound().getId();
String listeningFileName =
listening.getListeningSound().getFileName();
Universitas Sumatera Utara
Log.d("TOEFL", "filename = " + listeningFileName);
int mp3res = getResources().getIdentifier(listeningFileName,
"raw", getPackageName());
musicManager.stop();
//
if(list){
//
//
}
musicManager.start(this, mp3res);
}
public void onStopClicked(View view){
musicManager.pause();
}
private void stopSound(){
if (musicManager != null){
musicManager.stop();
}
}
@Override
protected void onStop() {
super.onStop();
musicManager.pause();
}
@Override
protected void onDestroy() {
super.onDestroy();
Universitas Sumatera Utara
musicManager.release();
}
@Override
protected void actionBeforeSubmit() {
stopSound();
}
}
ReadingPassageActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.os.Bundle;
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class ReadingPassageActivity extends Activity {
public static final String KEY_PASSAGE_CONTENT =
"passagecontent";
private String currentPassageContent;
private Button buttonBack;
private TextView tvContent;
Universitas Sumatera Utara
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_readingpassage);
Bundle bundle = getIntent().getExtras();
currentPassageContent = bundle.getString(KEY_PASSAGE_CONTENT);
buttonBack = (Button) findViewById(R.id.btnBack);
buttonBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
tvContent = (TextView) findViewById(R.id.tvContent);
tvContent.setText(Html.fromHtml(currentPassageContent));
}
}
ResultActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.os.Bundle;
Universitas Sumatera Utara
import android.text.Html;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.nurul.toeflschool.app.ToeflApplication;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.database.model.ModelScoreConvert;
import com.nurul.toeflschool.entity.Exam;
import com.nurul.toeflschool.entity.Question;
public class ResultActivity extends Activity {
public static final String KEY_TEST = "test";
public static final String KEY_EXAM_ID = "exam_id";
public static final int EXAM_LISTENING_ID = 1;
public static final int EXAM_GRAMMAR_ID = 2;
public static final int EXAM_READING_ID = 3;
private Button doneButton;
private LinearLayout linearResultAnswer;
private TextView tvTrue, tvFalse;
private Exam resultExam;
private int examId;
private DatabaseHelper dbAdapter;
Universitas Sumatera Utara
private int convertResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_result);
Bundle bundle = getIntent().getExtras();
resultExam = (Exam) bundle.getSerializable(KEY_TEST);
examId = bundle.getInt(KEY_EXAM_ID);
linearResultAnswer = (LinearLayout)
findViewById(R.id.linearResultAnswer);
tvTrue = (TextView) findViewById(R.id.tvTrue);
tvFalse = (TextView) findViewById(R.id.tvFalse);
doneButton = (Button) findViewById(R.id.btnDone);
doneButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
int[] resultTrueFalse = resultExam.checkExam();
int scoreTrue = resultTrueFalse[0];
int scoreFalse = resultTrueFalse[1];
tvTrue.setText("" + scoreTrue);
tvFalse.setText("" + scoreFalse);
Universitas Sumatera Utara
dbAdapter = new DatabaseHelper(this);
dbAdapter.openDatabase();
ModelScoreConvert modelScoreConvert = new
ModelScoreConvert(dbAdapter);
convertResult = modelScoreConvert.getConvert(scoreTrue,
resultExam.getName());
dbAdapter.closeDatabase();
if(examId == EXAM_LISTENING_ID){
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
SC_LISTENING, scoreTrue);
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
CV_LISTENING, convertResult);
}else if(examId == EXAM_GRAMMAR_ID){
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
SC_GRAMMAR, scoreTrue);
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
CV_GRAMMAR, convertResult);
}else{
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
SC_READING, scoreTrue);
ToeflApplication.getInstance().saveData(ToeflApplication.KEYPREF_
CV_READING, convertResult);
}
displayQuestion();
}
private void displayQuestion(){
Universitas Sumatera Utara
int countNumber = 1;
for (Question question : resultExam.getListQuestion()) {
LinearLayout layoutQuestion = (LinearLayout)
getLayoutInflater().inflate(R.layout.result_item, null);
TextView tvQuestion = (TextView)
layoutQuestion.findViewById(R.id.tvQuestion);
TextView tvNumber = (TextView)
layoutQuestion.findViewById(R.id.tvNumber);
TextView tvOption1 = (TextView)
layoutQuestion.findViewById(R.id.tvOption1);
TextView tvOption2 = (TextView)
layoutQuestion.findViewById(R.id.tvOption2);
//TextView tvAnswer = (TextView)
layoutQuestion.findViewById(R.id.tvAnswer);
String [] abcd = { "A", "B", "C", "D" };
int selectedIndex = question.getSelectedIndex();
if(selectedIndex > 0){
if(question.getQuestion() != null){
tvQuestion.setText(Html.fromHtml(question.getQuestion()));
}else{
tvQuestion.setVisibility(View.GONE);
}
String selectedUser =
getOptionStringbyIndex(selectedIndex, question);
if(question.isRight()){
Universitas Sumatera Utara
+
selectedUser = abcd[selectedIndex - 1] + ". "
selectedUser + " (T)";
tvOption1.setText(selectedUser);
tvOption2.setVisibility(View.GONE);
}else{
String selectedAnswer =
getOptionStringbyIndex(question.getAnswerIndex(), question);
selectedAnswer =
abcd[question.getAnswerIndex() - 1] + ". " +
(T)";
selectedAnswer + "
tvOption1.setText(selectedAnswer);
+
selectedUser = abcd[selectedIndex - 1] + ". "
selectedUser + " (F)";
tvOption2.setText(selectedUser);
tvOption2.setBackgroundResource(R.color.red);
}
}else{
String noAnswer = "-";
tvQuestion.setText(noAnswer);
tvOption1.setVisibility(View.GONE);
tvOption2.setVisibility(View.GONE);
}
tvNumber.setText("" + countNumber + ". ");
linearResultAnswer.addView(layoutQuestion);
countNumber++;
}
}
Universitas Sumatera Utara
private String getOptionStringbyIndex(int index, Question
question){
String option = null;
switch (index) {
case 1:
option = question.getOption1();
break;
case 2:
option = question.getOption2();
break;
case 3:
option = question.getOption3();
break;
case 4:
option = question.getOption4();
break;
default:
break;
}
return option;
}
public void onDoneClicked(View view){
finish();
}
}
Universitas Sumatera Utara
ScoreActivity.java
package com.nurul.toeflschool;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.nurul.toeflschool.app.ToeflApplication;
import com.nurul.toeflschool.util.MessageHelper;
public class ScoreActivity extends Activity {
private TextView tvListeningConvert, tvReadingConvert,
tvGrammarConvert, tvToeflScore;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_score);
tvListeningConvert = (TextView)
findViewById(R.id.tvListeningConvert);
tvReadingConvert = (TextView)
findViewById(R.id.tvReadingConvert);
tvGrammarConvert = (TextView)
findViewById(R.id.tvGrammarConvert);
tvToeflScore = (TextView) findViewById(R.id.tvToeflScore);
ToeflApplication.getInstance().readResultExam();
Universitas Sumatera Utara
int listeningConvert =
ToeflApplication.getInstance().getConvertListening();
int readingConvert =
ToeflApplication.getInstance().getConvertReading();
int grammarConvert =
ToeflApplication.getInstance().getConvertGrammar();
float toeflScore =
ToeflApplication.getInstance().getToeflScore();
tvListeningConvert.setText("" + listeningConvert);
tvReadingConvert.setText("" + readingConvert);
tvGrammarConvert.setText("" + grammarConvert);
tvToeflScore.setText("" + toeflScore);
}
public void onDoneClicked(View view){
finish();
}
public void onRetryClicked(View view){
String message = "Are you sure to retry the test? ?";
MessageHelper.showDialogYesNo(this, "Retry Test", message,
new com.nurul.toeflschool.util.ActionButtonDialog()
{
@Override
public void runAction() {
ToeflApplication.getInstance().clearData();
finish();
}
});
}
Universitas Sumatera Utara
}
ToeflApplication.java
package com.nurul.toeflschool.app;
import android.app.Application;
import android.content.SharedPreferences;
public class ToeflApplication extends Application {
public static final String KEYPREF_SC_LISTENING =
"score_listening";
public static final String KEYPREF_SC_GRAMMAR = "score_grammar";
public static final String KEYPREF_SC_READING = "score_reading";
public static final String KEYPREF_CV_LISTENING = "cv_listening";
public static final String KEYPREF_CV_GRAMMAR = "cv_grammar";
public static final String KEYPREF_CV_READING = "cv_reading";
public static final String KEYPREF_TOEFL_SCORE = "toelf_score";
private static ToeflApplication instance;
private SharedPreferences sharedPreferences;
private int scoreListening;
private int scoreGrammar;
private int scoreReading;
private int convertListening;
Universitas Sumatera Utara
private int convertGrammar;
private int convertReading;
private float toeflScore;
@Override
public void onCreate() {
super.onCreate();
instance = this;
sharedPreferences = this.getSharedPreferences("mypref",
MODE_PRIVATE);
}
public static synchronized ToeflApplication getInstance() {
return instance;
}
public void readResultExam() {
this.setScoreListening(sharedPreferences.getInt(KEYPREF_SC_LISTENING,
0));
this.setScoreGrammar(sharedPreferences.getInt(KEYPREF_SC_GRAMMAR,
0));
this.setScoreReading(sharedPreferences.getInt(KEYPREF_SC_READING,
0));
this.setConvertListening(sharedPreferences.getInt(KEYPREF_CV_LISTENIN
G, 0));
Universitas Sumatera Utara
this.setConvertGrammar(sharedPreferences.getInt(KEYPREF_CV_GRAMMAR,
0));
this.setConvertReading(sharedPreferences.getInt(KEYPREF_CV_READING,
0));
this.setToeflScore(sharedPreferences.getFloat(KEYPREF_TOEFL_SCORE,
0));
}
public float getToeflScore() {
return toeflScore;
}
public void setToeflScore(float toeflScore) {
this.toeflScore = toeflScore;
}
public void saveData(String key, int value){
//
Editor editor = sharedPreferences.edit();
//
editor.putInt(key, value);
//
editor.commit();
sharedPreferences.edit().putInt(key, value).commit();
updateToeflScore();
}
public void clearData(){
sharedPreferences.edit().clear().commit();
readResultExam();
}
Universitas Sumatera Utara
public void updateToeflScore(){
readResultExam();
int total = convertGrammar + convertListening + convertReading;
float toeflScore = (total / 3) * 10;
sharedPreferences.edit().putFloat(KEYPREF_TOEFL_SCORE,
toeflScore).commit();
}
public int getScoreListening() {
return scoreListening;
}
public void setScoreListening(int scoreListening) {
this.scoreListening = scoreListening;
}
public int getScoreGrammar() {
return scoreGrammar;
}
public void setScoreGrammar(int scoreGrammar) {
this.scoreGrammar = scoreGrammar;
}
public int getScoreReading() {
return scoreReading;
}
Universitas Sumatera Utara
public void setScoreReading(int scoreReading) {
this.scoreReading = scoreReading;
}
public int getConvertListening() {
return convertListening;
}
public void setConvertListening(int convertListening) {
this.convertListening = convertListening;
}
public int getConvertGrammar() {
return convertGrammar;
}
public void setConvertGrammar(int convertGrammar) {
this.convertGrammar = convertGrammar;
}
public int getConvertReading() {
return convertReading;
}
public void setConvertReading(int convertReading) {
this.convertReading = convertReading;
}
}
Universitas Sumatera Utara
DatabaseHelper.java
package com.nurul.toeflschool.database;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseHelper extends SQLiteOpenHelper {
public static final String DB_NAME = "toeflschool.db";
public final static String DB_PATH =
"/data/data/com.nurul.toeflschool/databases/";
String dbName;
Context context;
Universitas Sumatera Utara
File dbFile;
private SQLiteDatabase mDatabase;
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 3);
this.context = context;
this.dbName = DB_NAME;
dbFile = new File(DB_PATH + dbName);
}
@Override
public synchronized SQLiteDatabase getWritableDatabase() {
if (!dbFile.exists()) {
SQLiteDatabase db = super.getWritableDatabase();
copyDataBase(db.getPath());
}
return super.getWritableDatabase();
}
// @Override
// public synchronized SQLiteDatabase getReadableDatabase() {
//
if (!dbFile.exists()) {
//
SQLiteDatabase db = super.getReadableDatabase();
//
copyDataBase(db.getPath());
//
//
//
}
//
return super.getReadableDatabase();
Universitas Sumatera Utara
// }
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int
newVersion) {
}
private void copyDataBase(String dbPath) {
try {
InputStream assestDB = context.getAssets().open(
"databases/" + dbName);
OutputStream appDB = new FileOutputStream(dbPath, false);
byte[] buffer = new byte[1024];
int length;
while ((length = assestDB.read(buffer)) > 0) {
appDB.write(buffer, 0, length);
}
appDB.flush();
appDB.close();
assestDB.close();
} catch (IOException e) {
e.printStackTrace();
}
Universitas Sumatera Utara
}
public void openDatabase() {
String dbPath =
context.getDatabasePath(dbName).getPath();
if(mDatabase != null && mDatabase.isOpen()) {
return;
}
mDatabase = SQLiteDatabase.openDatabase(dbPath, null,
SQLiteDatabase.OPEN_READWRITE);
//
File dbFile = mContext.getDatabasePath(DBNAME);
//
if (!dbFile.exists()) {
//
try {
//
copyDatabase(dbFile);
//
} catch (IOException e) {
//
database", e);
//
throw new RuntimeException("Error creating source
}
//
}
//
//
mDatabase = SQLiteDatabase.openDatabase(dbFile.getPath(),
null, SQLiteDatabase.OPEN_READONLY);
}
public void closeDatabase() {
if(mDatabase!=null) {
mDatabase.close();
}
}
Universitas Sumatera Utara
public Cursor fetchAllRecords(String tableName, String[]
columns,
String filter) {
return mDatabase.query(tableName, columns, filter, null,
null, null, null);
}
}
ModelListening.java
package com.nurul.toeflschool.database.model;
import android.database.Cursor;
import com.nurul.toeflschool.database.DatabaseHelper;
import com.nurul.toeflschool.entity.Listening;
import com.nurul.toeflschool.entity.ListeningSound;
import com.nurul.toeflschool.entity.QuestionListening;
public class ModelListening {
//private final String TABLE_LISTENING = "Listening";
private final String TABLE_LISTENING_SOUND = "ListeningSound";
private final String TABLE_LISTENING_QUESTION =
"QuestionListening";
private DatabaseHelper dbAdapter;
Universitas Sumatera Utara
//private Listening listening;
public ModelListening(DatabaseHelper dbAdapter) {
this.dbAdapter = dbAdapter;
}
public Listening getAllListening(){
return null;
}
public Listening getListeningSound(int listeningId){
Listening listening = new Listening();
listening.setId(listeningId);
Cursor cursors =
dbAdapter.fetchAllRecords(TABLE_LISTENING_SOUND, new String[] {
"Id", "FileName" }, "ListeningId=" + listeningId);
ListeningSound listeningSound = null;
if (cursors.getCount() > 0) {
cursors.moveToFirst();
listeningSound = new ListeningSound();
listeningSound.setId(cursors.getInt(0));
listeningSound.setFileName(cursors.getString(1));
}
cursors.close();
if(listeningSound != null){
listening.setListeningSound(listeningSound);
Universitas Sumatera Utara
Cursor cursorQuestions =
dbAdapter.fetchAllRecords(TABLE_LISTENING_QUESTION, new String[] {
"Id", "Option1", "Option2", "Option3",
"Option4", "Answer" }, "ListeningSoundId=" + listeningSound.getId());
if (cursorQuestions.getCount() > 0) {
cursorQuestions.moveToFirst();
do {
QuestionListening qsListening = new
QuestionListening();
qsListening.setId(cursorQuestions.getInt(0));
qsListening.setOption1(cursorQuestions.getString(1));
qsListening.setOption2(cursorQuestions.getString(2));
qsListening.setOption3(cursorQuestions.getString(3));
qsListening.setOption4(cursorQuestions.getString(4));
qsListening.setAnswerIndex(cursorQuestions.getInt(5));
listening.addQuestion(qsListening);
} while (cursorQuestions.moveToNext());
}
cursorQuestions.close();
}
return listening;
}
}
activity_toefl_school.xml
Universitas Sumatera Utara
activity_main.xml
activity_listening.xml
Universitas Sumatera Utara
Universitas Sumatera Utara
activity_listeningexam2.xml
Universitas Sumatera Utara
Universitas Sumatera Utara
Universitas Sumatera Utara
activity_readingpassage.xml
Universitas Sumatera Utara
activity_result.xml
Universitas Sumatera Utara
activity_score.xml
r