Maharashtra State Board of Techinic Education, Mumbai: A Project Report On
Maharashtra State Board of Techinic Education, Mumbai: A Project Report On
A Project Report
On
“Type Speed Testing”
DIPLOMA
In
COMPUTER ENGINEERING
Submitted by
MR. OM NARAYAN SUTAR
MR. OMKAR PRADIP SARDESAI
MR. ANIRUDDHA ANANDA AJAGEKAR
Certificate
This is to certify that the following students of VI semester of Diploma in COMPUTER
ENGINEERING of Institute SANT GAJANAN MAHARAJ RURAL POLYTECHNIC
MAHAGAON-416503 (CODE-0965) has completed Micro-project on “Type Speed
Testing” satisfactory in subject Mobile Application Development subject code 22617
for academic year 2023 to 2024 as prescribed in the curriculum.
3 Program 10-31
4 Output 32-34
5 Conclusion, Reference 35
PART A-Plan
Title:- Type Speed Testing
1.0 Rationale:-
With the increasing reliance on digital communication, typing speed has become a crucial skill.
Creating an Android Type Speed Testing app provides users with a tool to track and improve their
typing speed convenient.Mobile devices, especially Android smartphones, are ubiquitous in
today's world. By developing a typing speed testing app for Android, we make this useful tool
accessible to a broad audience, including students, professionals, and anyone looking to enhance
their typing proficiency on their mobile devices.
The literature on typing speed testing applications for Android offers valuable insights into
various aspects of their design, effectiveness, and impact. Studies such as "The Effects of Typing
Practice on Keyboarding Skills"
4
3.0 Proposed Methodology:-
Created android typing speed test app and prepare its report.
Process Process
Name of
started Finish
Sr. No Details of activity group
date date
members
All Team
2/3/2024 5/3/2024
To select the title of Member
1.
Project.
All Team
10/3/2024 15/3/2024
Member
Search the information
2.
related to micro-project
20/3/2024 21/3/2024
All Team
3. Design application
Member
23/3/2024 27/3/2024
Created app All Team
4.
Member
5
5.0 Resources Required:-
Name of Resource/
Sr No. Specification Qty Remarks
Material
Asus vivobook18
1 Desktop PC/Laptop Used
1
6
6.0 Name of responsible team members: -
7
PART B (Outcomes after
Execution) Title:- Type Speed
Testing
The literature on typing speed testing applications for Android offers valuable insights into
various aspects of their design, effectiveness, and impact. Studies such as "The Effects of Typing
Practice on Keyboarding Skills"
Additionally, research on the accessibility of typing speed testing tools, exemplified by
"Accessibility of Typing Speed Testing Tools for Individuals with Disabilities" emphasizes the
importance of inclusive design principles in ensuring that typing apps cater to the needs of users
with diverse abilities. Integrating findings from these studies can inform the development of an
Android Type Speed Testing app that is effective, engaging, and accessible to a broad range of
users.
8
3.0 Actual Procedure Followed:-
Start the procedure for project and making soft copy of project report
Name of Resource/
Sr No. Specification Qty Remarks
Material
Asus vivobook18
1 Desktop PC/Laptop Used
1
9
Program :-
<TextView
android:id="@+id/txt2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/txt1"
android:layout_marginTop="15dp"
android:textSize="18dp"
android:text="Test Your typing speed with speed test application and improve your typing skills"/>
<Button
android:id="@+id/btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:text="Start Game"
android:textSize="26dp"/>
11
<Button
android:id="@+id/btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/btn1"
android:layout_centerHorizontal="true"
android:layout_marginTop="20dp"
android:text="Game History"
android:textSize="24dp"/>
</RelativeLayout>
12
Intent TestIntent = new Intent(SecondActivity.this,MainActivity.class);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(TestIntent);
}
});
btn2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(HistoryIntent);
}
});
}
}
<TextView
android:id="@+id/txt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
13
android:text="TypingSpeed"
android:textSize="25dp"
android:layout_marginTop="20dp"
android:layout_marginLeft="20dp"
android:textStyle="bold"/>
<TextView
android:id="@+id/stoptyping"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt1"
android:layout_marginTop="40dp"
android:text="Good Luck"
android:textSize="20dp"/>
<TextView
android:id="@+id/txt2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text=""
android:layout_below="@+id/stoptyping"/>
<TableLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/txt2"
android:layout_marginTop="30dp"
android:id="@+id/table">
<TableRow android:padding="5dp">
14
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Correct" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Wrong" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Accuracy" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Speed" />
</TableRow>
<TableRow android:padding="5dp">
<TextView
android:id="@+id/correctTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0 " />
15
<TextView
android:id="@+id/wrongTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0 " />
<TextView
android:id="@+id/accuracyTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0" />
<TextView
android:id="@+id/speedTxt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0"/>
</TableRow>
</TableLayout>
<TextView
android:id="@+id/contentTxt"
android:layout_marginLeft="20dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/table"
android:layout_marginTop="100dp"
android:text="Click On Steart To Begin!"
16
android:textSize="18dp"/>
<EditText
android:minHeight="48dp"
android:id="@+id/edtContent"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/contentTxt"
android:layout_marginTop="40dp"
android:layout_centerHorizontal="true"
android:gravity="center_horizontal"
android:hint="Enter Text"
android:ems="20"/>
<Button
android:id="@+id/starttyping"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/edtContent"
android:layout_marginTop="20dp"
android:text="Start Typing"
android:textSize="20dp"/>
<Button
android:id="@+id/Restarttyping"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/starttyping"
android:layout_marginTop="20dp"
android:text="Restart Typing"
17
android:textSize="20dp"/>
</RelativeLayout>
18
import java.util.Date;
import java.util.List;
import java.util.Random;
public class MainActivity extends AppCompatActivity
{ HistoryDatabase db = new HistoryDatabase(this);
TextView correctTxt,wrongTxt,accuracyTxt,speedTxt,contentTxt,timer;
EditText edtContent;
Button startBtn,RestartBtn;
private int correctWords = 0;
private int totalWords = 0;
private int wrongWords = 0 ;
private long startTime = 0;
private static String randow_word = " ";
private CountDownTimer count_timer;
@Override
protected void onCreate(Bundle savedInstanceState)
{ super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
correctTxt = findViewById(R.id.correctTxt);
wrongTxt = findViewById(R.id.wrongTxt);
accuracyTxt = findViewById(R.id.accuracyTxt);
speedTxt = findViewById(R.id.speedTxt);
contentTxt = findViewById(R.id.contentTxt);
startBtn = findViewById(R.id.starttyping);
RestartBtn = findViewById(R.id.Restarttyping);
timer = findViewById(R.id.stoptyping);
edtContent = findViewById(R.id.edtContent);
edtContent.setEnabled(false);
19
List<String> words = initailizeText();
edtContent.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@SuppressLint("SetTextI18n")
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{ if(edtContent.getText().toString().length() > contentTxt.getText().toString().length()) {
if(edtContent.getText().toString().trim().equals(contentTxt.getText().toString()))
{
correctWords++; totalWords+
+;
correctTxt.setText(Integer.toString(correctWords));
}
else{
wrongWords++; totalWords+
+;
wrongTxt.setText(Integer.toString(wrongWords));
}
MainActivity.randow_word = displayText(words);
edtContent.setText(" ");
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
20
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startBtn.setEnabled(false);
correctTxt.setText("0");
correctWords=0;
wrongTxt.setText("0");
wrongWords=0;
speedTxt.setText("0");
accuracyTxt.setText("0");
edtContent.setText("");
MainActivity.randow_word = displayText(words);
Log.d("random word","value:-"+randow_word);
edtContent.setEnabled(true);
startTime = System.currentTimeMillis();
count_timer = new CountDownTimer(60000, 1000) {
@SuppressLint("SetTextI18n")
public void onTick(long millisUntilFinished)
{ timer.setText("Remaining Time :-"+(millisUntilFinished/1000));
}
public void onFinish() {
displayStats();
startBtn.setEnabled(true);
edtContent.setEnabled(false);
}
}.start();
}
});
21
RestartBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(startBtn.isEnabled()){
Toast.makeText(MainActivity.this, "Please start the test first !!",
Toast.LENGTH_SHORT).show();
}
else{
count_timer.cancel();
startBtn.setEnabled(false);
correctTxt.setText("0");
correctWords=0;
wrongTxt.setText("0");
wrongWords=0;
speedTxt.setText("0");
accuracyTxt.setText("0");
edtContent.setText("");
MainActivity.randow_word = displayText(words);
Log.d("random word","value:-"+randow_word);
edtContent.setEnabled(true);
startTime = System.currentTimeMillis();
count_timer.start();
}
}
});
}
@SuppressLint("SetTextI18n")
22
public void displayStats(){
double [] result = calculateSpeedAndAccuracy(correctWords,totalWords,60);
speedTxt.setText(Double.toString(result[0]));
accuracyTxt.setText(Integer.toString((int) result[1]));
alertDialog();
23
dialog.setCancelable(false);
dialog.setMessage("Are you want to store the history of your current typing test......");
dialog.setTitle("Storing In History");
dialog.setPositiveButton("YES",
new DialogInterface.OnClickListener()
{ public void onClick(DialogInterface
dialog,
int which)
{ DateTimeFormatter
formatter;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
{ LocalDateTime now = LocalDateTime.now();
formatter = DateTimeFormatter.ofPattern("EEE dd/MM h:mm a");
String formattedDateTime = now.format(formatter);
db.insert(formattedDateTime.toString(),accuracyTxt.getText().toString(),speedTxt.getText().toString(),
correctTxt.getText().toString(),wrongTxt.getText().toString());
Toast.makeText(getApplicationContext(),"Your Data is begin
Recorded",Toast.LENGTH_SHORT).show();
}
else{
Toast.makeText(MainActivity.this, "Please make sure your android is up to date",
Toast.LENGTH_SHORT).show();
}
}
});
dialog.setNegativeButton("cancel",new DialogInterface.OnClickListener() {
@Override
24
public void onClick(DialogInterface dialog, int which) {
25
Toast.makeText(getApplicationContext(),"Data is not stored in
History",Toast.LENGTH_SHORT).show();
}
});
AlertDialog alertDialog=dialog.create();
alertDialog.show();
}
}
26
<ListView
android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/txtview"
android:layout_marginTop="30dp"
/>
</RelativeLayout>
27
@Override
28
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_typing_history);
txt = findViewById(R.id.txtview);
list = findViewById(R.id.list);
displayRecords();
}
private void displayRecords() {
ArrayList<String> arrayList = new ArrayList<>();
Cursor cur = db.read();
if(cur == null){
txt.setText("OOP's You have not give typing test yet");
}
else {
while (cur.moveToNext())
{ String date =
cur.getString(1); String acc =
cur.getString(2); String speed =
cur.getString(3);
String correct_words = cur.getString(4);
String wrong_words = cur.getString(5);
String data = ("\nYour Typing test Date :- " + date + "\n Your Accuracy :- " + acc + "\n Your Speed
is :- " + speed +
"\n You have typed correct words :- " + correct_words + "\nwrong words :- " + wrong_words);
arrayList.add(data);
}
ArrayAdapter<String> adapater = new
ArrayAdapter<>(TypingHistory.this,android.R.layout.simple_list_item_1,arrayList);
list.setAdapter(adapater);
29
} }}
30
Database java file:-
package com.example.typingtestproject;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class HistoryDatabase extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "TypeHistory";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "TypeInfo";
public static final String DATE = "date";
public static final String ACC = "accuracy";
public static final String SPEED = "speed";
public static final String CORRECT_WORDS = "correct_words";
public static final String WRONG_WORDS = "wrong_words";
public HistoryDatabase(Context
context){super(context,DATABASE_NAME,null,DATABASE_VERSION);}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL("CREATE TABLE IF NOT EXISTS "+TABLE_NAME+"( id INTEGER PRIMARY KEY
AUTOINCREMENT ,"+DATE+" TEXT,"+ACC+" TEXT ,"+SPEED+" TEXT, "+CORRECT_WORDS+"
TEXT,"+WRONG_WORDS+" TEXT);");
}
@Override
public void onUpgrade(SQLiteDatabase db , int oldVersion,int newVersion){
31
}
if(cur.getCount() > 0)
{
return cur;
}
else{
return null;
}
}
catch(Exception e){
e.printStackTrace();
32
return null;
}
}
}
33
<activity
android:name=".HistoryDatabase"
android:exported="false" />
<activity
android:name=".FlashScreen"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
34
Output:-
35
36
37
Conclusion:-
In conclusion, the Android Type Speed Testing project offers a valuable tool for users to enhance their typing
proficiency. Through its user-friendly interface, comprehensive features, and accurate assessment capabilities,
the application aims to provide an engaging and effective platform for individuals to practice and improve
their typing speed and accuracy. With further refinement and potential integration of additional features, such
as customizable exercises and performance tracking, the project holds promise for continued development and
widespread utility in the realm of typing education and training.
Reference:-
https://www.tutlane.com/tutorial/android
https://developer.android.com/develop
https://stackoverflow.com/
38