Skip to content

Commit

Permalink
improved: search & suggestions with arraylists
Browse files Browse the repository at this point in the history
  • Loading branch information
ipman98 committed Jun 7, 2018
1 parent 4fbc290 commit e5c3412
Show file tree
Hide file tree
Showing 7 changed files with 94 additions and 69 deletions.
Binary file modified .idea/caches/build_file_checksums.ser
Binary file not shown.
6 changes: 6 additions & 0 deletions .idea/vcs.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions app/build.gradle
Expand Up @@ -7,8 +7,8 @@ android {
applicationId "xyz.navinda.opensinhaladictionary"
minSdkVersion 14
targetSdkVersion 26
versionCode 1
versionName "1.0-beta"
versionCode 2
versionName "1.1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
Expand Down
Binary file added app/release/app-release.apk
Binary file not shown.
1 change: 1 addition & 0 deletions app/release/output.json
@@ -0,0 +1 @@
[{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":2,"versionName":"1.1.0","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}]
150 changes: 84 additions & 66 deletions app/src/main/java/xyz/navinda/opensinhaladictionary/MainActivity.java
Expand Up @@ -38,7 +38,9 @@
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MainActivity extends AppCompatActivity

Expand All @@ -55,7 +57,11 @@ public class MainActivity extends AppCompatActivity
private EditText txtInput;
private boolean suggest;
private String inputWord;
private String DBname;
private ArrayList<String> DBen2snEN = new ArrayList<String>();
private ArrayList<String> DBen2snSN = new ArrayList<String>();
private ArrayList<String> DBsn2enSN = new ArrayList<String>();
private ArrayList<String> DBsn2enEN = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Expand All @@ -72,6 +78,9 @@ protected void onCreate(Bundle savedInstanceState) {
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);

//Load db to array
loadDB();

//Close keyboard when drawer open
drawer.addDrawerListener(new DrawerLayout.DrawerListener() {

Expand Down Expand Up @@ -178,22 +187,24 @@ public void beforeTextChanged(CharSequence s, int start,

public void onTextChanged(CharSequence s, int start,
int before, int count) {

clearMeanings();
readySearch();
if (!isEmptyOrNull(inputWord)) {
suggestWords();
}


}
});

//On click even for search button
btnFind.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
closeKeyboard();
readySearch();
findMeaning();
closeKeyboard();
readySearch();
findMeaning();
}
});

Expand All @@ -211,43 +222,63 @@ public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
});
}

private void suggestWords(){
suggest=true;

//Select database
selectDB();
private void loadDB(){
readDB("db/en2sn.txt");
readDB("db/sn2en.txt");
}

//get suggestions from text file
private void readDB(String db) {
BufferedReader reader;
try{
reader = new BufferedReader(new InputStreamReader(getAssets().open(DBname), "UTF-8"));
try {
reader = new BufferedReader(new InputStreamReader(getAssets().open(db), "UTF-8"));
String line = reader.readLine();
String word;

//no of suggestions to show
int suggestionCount=5;

//Loop through database
int suggestionCounter=0;
while(line != null){
String[] record=line.split("#");
word=record[0];
if (word.startsWith(inputWord)) {
suggestionCounter+=1;
meanings_list.add(word);
arrayAdapter.notifyDataSetChanged();
}
if (suggestionCount==suggestionCounter) {
break;


while (line != null) {
String[] record = line.split("#");
if (db.equals("db/en2sn.txt")) {
DBen2snEN.add(record[0]);
DBen2snSN.add(record[1]);
} else {
DBsn2enSN.add(record[0]);
DBsn2enEN.add(record[1]);
}
line = reader.readLine();
}

} catch(IOException ioe){
} catch (IOException ioe) {
ioe.printStackTrace();
}
}

private void suggestWords(){
suggest=true;
String suggestion="";
int suggestions=0;
int suggestionsLimit=8;
if (checkLang()) { //If input English
for (int i = 0; i < DBen2snEN.size(); i++) {
if(DBen2snEN.get(i).startsWith(inputWord)) {
suggestions+=1;
suggestion = DBen2snEN.get(i);
meanings_list.add(suggestion);
arrayAdapter.notifyDataSetChanged();
if (suggestions==suggestionsLimit) {break;}
}
}
} else { //if input is Sinhala
System.out.println("me");
for (int i = 0; i < DBsn2enSN.size(); i++) {
if(DBsn2enSN.get(i).startsWith(inputWord)) {
suggestions+=1;
suggestion = DBsn2enSN.get(i);
meanings_list.add(suggestion);
arrayAdapter.notifyDataSetChanged();
if (suggestions==suggestionsLimit) {break;}
}
}
}
}

private void readySearch() {
//get input word
inputWord=txtInput.getText().toString();
Expand All @@ -258,54 +289,43 @@ private void readySearch() {
}

private void findMeaning(){
//Select database
selectDB();

//Find meaning from text file
BufferedReader reader;
try{
reader = new BufferedReader(new InputStreamReader(getAssets().open(DBname), "UTF-8"));
String line = reader.readLine();
String word;
String foundMeanings;
//Loop through database
while(line != null){
String[] record=line.split("#");
word=record[0];
foundMeanings=record[1];
if (word.equals(inputWord)) {
showMeanings(foundMeanings); //call show meaning
String foundMeanings="";
if (checkLang()) { //If input English
for (int i = 0; i < DBen2snEN.size(); i++) {
if(DBen2snEN.get(i).equals(inputWord)) {
foundMeanings = DBen2snSN.get(i);
found=true;
break;
} else {
found=false;
}
line = reader.readLine();
}

if (!found){
notFound();
} else { //if input is Sinhala
for (int i = 0; i < DBsn2enSN.size(); i++) {
if(DBsn2enSN.get(i).equals(inputWord)) {
foundMeanings = DBsn2enEN.get(i);
found=true;
break;
} else {
found=false;
}
}

} catch(IOException ioe){
ioe.printStackTrace();
}
// meanings_list.clear();
//arrayAdapter.notifyDataSetChanged();
}

private void selectDB(){
if (checkLang()) {
DBname="db/en2sn.txt";
//if found
if (found) {
showMeanings(foundMeanings);
} else {
DBname="db/sn2en.txt";
notFound();
}

}

private boolean checkLang() {
//check input language
final String IS_ENGLISH_REGEX = "^[A-Za-z0-9- ]+$";
return inputWord.matches(IS_ENGLISH_REGEX);
//English - True, Sinhala-False
}

private void notFound(){
Expand Down Expand Up @@ -334,10 +354,8 @@ private void showMeanings(String resultWords){
resultWords=resultWords.trim(); //remove spaces
String[] result=resultWords.split("@"); //seperate meanings by @
clearMeanings(); //clear output list box
for(int i=0; i< result.length; i++){
meanings_list.add(result[i]); //add meanings one by one
}

//add meanings one by one
meanings_list.addAll(Arrays.asList(result));
arrayAdapter.notifyDataSetChanged();
}

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/res/layout/nav_header_main.xml
Expand Up @@ -34,6 +34,6 @@
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Version 1.0-beta" />
android:text="Version 1.1.0" />

</LinearLayout>

0 comments on commit e5c3412

Please sign in to comment.