Skip to content

Commit 5ceb6d4

Browse files
committed
refactor code
1 parent 10f2ff9 commit 5ceb6d4

File tree

5 files changed

+204
-196
lines changed

5 files changed

+204
-196
lines changed

app/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@ android {
3434
def normalizedWorkingBranch = workingBranch.replaceFirst("^[^A-Za-z]+", "").replaceAll("[^0-9A-Za-z]+", "")
3535

3636
if (normalizedWorkingBranch.isEmpty() || workingBranch == "master" || workingBranch == "dev") {
37-
// applicationIdSuffix ".dev"
37+
applicationIdSuffix ".dev"
3838
resValue "string", "app_name", "OCR Dev"
3939
} else {
4040
archivesBaseName = 'OCR_' + normalizedWorkingBranch
41-
// applicationIdSuffix ".dev." + normalizedWorkingBranch
41+
applicationIdSuffix ".dev." + normalizedWorkingBranch
4242
resValue "string", "app_name", "OCR " + workingBranch
4343
}
4444

app/src/main/java/io/github/subhamtyagi/ocr/MainActivity.java

Lines changed: 99 additions & 107 deletions
Original file line numberDiff line numberDiff line change
@@ -589,134 +589,126 @@ protected void onPostExecute(String text) {
589589
* Download the training Data and save this to external storage
590590
*/
591591
private class DownloadTrainingTask extends AsyncTask<String, Integer, Boolean> {
592-
String size;
592+
private String size;
593593

594-
@Override
595-
protected void onPreExecute() {
596-
super.onPreExecute();
597-
mProgressDialog = new ProgressDialog(MainActivity.this);
598-
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
599-
mProgressDialog.setIndeterminate(true);
600-
mProgressDialog.setCancelable(false);
601-
mProgressDialog.setTitle(getString(R.string.downloading));
602-
mProgressDialog.setMessage(getString(R.string.downloading_language));
603-
mProgressDialog.show();
604-
}
594+
@Override
595+
protected void onPreExecute() {
596+
super.onPreExecute();
597+
mProgressDialog = new ProgressDialog(MainActivity.this);
598+
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
599+
mProgressDialog.setIndeterminate(true);
600+
mProgressDialog.setCancelable(false);
601+
mProgressDialog.setTitle(getString(R.string.downloading));
602+
mProgressDialog.setMessage(getString(R.string.downloading_language));
603+
mProgressDialog.show();
604+
}
605605

606-
@Override
607-
protected void onProgressUpdate(Integer... values) {
608-
super.onProgressUpdate(values);
606+
@Override
607+
protected void onProgressUpdate(Integer... values) {
608+
super.onProgressUpdate(values);
609+
if (mProgressDialog != null) {
609610
int percentage = values[0];
610-
if (mProgressDialog != null) {
611-
mProgressDialog.setMessage(percentage + getString(R.string.percentage_downloaded) + size);
612-
mProgressDialog.show();
613-
}
611+
mProgressDialog.setMessage(percentage + getString(R.string.percentage_downloaded) + size);
612+
mProgressDialog.show();
614613
}
614+
}
615615

616-
@Override
617-
protected void onPostExecute(Boolean bool) {
618-
if (mProgressDialog != null) {
619-
mProgressDialog.cancel();
620-
mProgressDialog = null;
621-
}
622-
initializeOCR(Utils.getTrainingDataLanguages(MainActivity.this));
616+
@Override
617+
protected void onPostExecute(Boolean success) {
618+
if (mProgressDialog != null) {
619+
mProgressDialog.dismiss();
620+
mProgressDialog = null;
623621
}
622+
initializeOCR(Utils.getTrainingDataLanguages(MainActivity.this));
623+
}
624624

625-
@Override
626-
protected Boolean doInBackground(String... languages) {
627-
String dataType = languages[0];
628-
String lang = languages[1];
629-
return downloadTraningData(dataType, lang);
630-
}
625+
@Override
626+
protected Boolean doInBackground(String... languages) {
627+
String dataType = languages[0];
628+
String lang = languages[1];
629+
return downloadTrainingData(dataType, lang);
630+
}
631631

632-
/**
633-
* done the actual work of download
634-
*
635-
* @param dataType data type i.e best, fast, standard
636-
* @param lang language
637-
* @return true if success else false
638-
*/
639-
private boolean downloadTraningData(String dataType, String lang) {
640-
boolean result = true;
641-
String downloadURL;
642-
String location;
643-
644-
switch (dataType) {
645-
case "best":
646-
if (lang.equals("akk"))
647-
downloadURL = Constants.TESSERACT_DATA_DOWNLOAD_URL_AKK_BEST;
648-
else if (lang.equals("eqo"))
649-
downloadURL = Constants.TESSERACT_DATA_DOWNLOAD_URL_EQU;
650-
else
651-
downloadURL = String.format(Constants.TESSERACT_DATA_DOWNLOAD_URL_BEST, lang);
652-
break;
653-
case "standard":
654-
if (lang.equals("akk"))
655-
downloadURL = Constants.TESSERACT_DATA_DOWNLOAD_URL_AKK_STANDARD;
656-
else if (lang.equals("eqo"))
657-
downloadURL = Constants.TESSERACT_DATA_DOWNLOAD_URL_EQU;
658-
else
659-
downloadURL = String.format(Constants.TESSERACT_DATA_DOWNLOAD_URL_STANDARD, lang);
660-
break;
661-
default:
662-
if (lang.equals("akk"))
663-
downloadURL = Constants.TESSERACT_DATA_DOWNLOAD_URL_AKK_FAST;
664-
else if (lang.equals("eqo"))
665-
downloadURL = Constants.TESSERACT_DATA_DOWNLOAD_URL_EQU;
666-
else
667-
downloadURL = String.format(Constants.TESSERACT_DATA_DOWNLOAD_URL_FAST, lang);
668-
}
632+
/**
633+
* Handles the actual work of downloading.
634+
*
635+
* @param dataType Data type i.e., best, fast, standard
636+
* @param lang Language
637+
* @return true if successful; false otherwise
638+
*/
639+
private boolean downloadTrainingData(String dataType, String lang) {
640+
String downloadURL = getDownloadUrl(dataType, lang);
641+
if (downloadURL == null) {
642+
return false; // Invalid language or dataType
643+
}
669644

670-
URL url, base, next;
671-
HttpURLConnection conn;
672-
try {
673-
while (true) {
674-
try {
675-
url = new URL(downloadURL);
676-
} catch (java.net.MalformedURLException ex) {
677-
678-
return false;
679-
}
680-
conn = (HttpURLConnection) url.openConnection();
681-
conn.setInstanceFollowRedirects(false);
682-
switch (conn.getResponseCode()) {
683-
case HttpURLConnection.HTTP_MOVED_PERM:
684-
case HttpURLConnection.HTTP_MOVED_TEMP:
685-
location = conn.getHeaderField("Location");
686-
base = new URL(downloadURL);
687-
next = new URL(base, location); // Deal with relative URLs
688-
downloadURL = next.toExternalForm();
689-
continue;
690-
}
691-
break;
692-
}
693-
conn.connect();
645+
try {
646+
URL url = new URL(downloadURL);
647+
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
648+
conn.setInstanceFollowRedirects(false);
649+
downloadURL = followRedirects(conn, downloadURL);
694650

695-
int totalContentSize = conn.getContentLength();
696-
size = Utils.getSize(totalContentSize);
651+
conn = (HttpURLConnection) new URL(downloadURL).openConnection();
652+
conn.connect();
697653

698-
InputStream input = new BufferedInputStream(url.openStream());
654+
int totalContentSize = conn.getContentLength();
655+
if (totalContentSize <= 0) {
656+
return false; // Invalid content length
657+
}
658+
size = Utils.getSize(totalContentSize);
699659

700-
File destf = new File(currentDirectory, String.format(Constants.LANGUAGE_CODE, lang));
701-
destf.createNewFile();
702-
OutputStream output = new FileOutputStream(destf);
660+
try (InputStream input = new BufferedInputStream(conn.getInputStream());
661+
OutputStream output = new FileOutputStream(new File(currentDirectory, String.format(Constants.LANGUAGE_CODE, lang)))) {
703662

704-
byte[] data = new byte[1024 * 6];
705-
int count, downloaded = 0;
663+
byte[] data = new byte[6 * 1024]; // 6KB buffer
664+
int downloaded = 0;
665+
int count;
706666
while ((count = input.read(data)) != -1) {
707667
output.write(data, 0, count);
708668
downloaded += count;
709669
int percentage = (downloaded * 100) / totalContentSize;
710670
publishProgress(percentage);
711671
}
712672
output.flush();
713-
output.close();
714-
input.close();
715-
} catch (Exception e) {
716-
result = false;
717-
e.printStackTrace();
718673
}
719-
return result;
674+
return true; // Download successful
675+
} catch (IOException e) {
676+
e.printStackTrace();
677+
return false; // Handle exceptions
678+
}
679+
}
680+
681+
private String getDownloadUrl(String dataType, String lang) {
682+
switch (dataType) {
683+
case "best":
684+
return lang.equals("akk") ? Constants.TESSERACT_DATA_DOWNLOAD_URL_AKK_BEST :
685+
lang.equals("eqo") ? Constants.TESSERACT_DATA_DOWNLOAD_URL_EQU :
686+
String.format(Constants.TESSERACT_DATA_DOWNLOAD_URL_BEST, lang);
687+
case "standard":
688+
return lang.equals("akk") ? Constants.TESSERACT_DATA_DOWNLOAD_URL_AKK_STANDARD :
689+
lang.equals("eqo") ? Constants.TESSERACT_DATA_DOWNLOAD_URL_EQU :
690+
String.format(Constants.TESSERACT_DATA_DOWNLOAD_URL_STANDARD, lang);
691+
default: // Assuming "fast" is the default
692+
return lang.equals("akk") ? Constants.TESSERACT_DATA_DOWNLOAD_URL_AKK_FAST :
693+
lang.equals("eqo") ? Constants.TESSERACT_DATA_DOWNLOAD_URL_EQU :
694+
String.format(Constants.TESSERACT_DATA_DOWNLOAD_URL_FAST, lang);
695+
}
696+
}
697+
698+
private String followRedirects(HttpURLConnection conn, String downloadURL) throws IOException {
699+
while (true) {
700+
int responseCode = conn.getResponseCode();
701+
if (responseCode == HttpURLConnection.HTTP_MOVED_PERM || responseCode == HttpURLConnection.HTTP_MOVED_TEMP) {
702+
String location = conn.getHeaderField("Location");
703+
URL base = new URL(downloadURL);
704+
downloadURL = new URL(base, location).toExternalForm(); // Handle relative URLs
705+
conn = (HttpURLConnection) new URL(downloadURL).openConnection(); // Re-open connection
706+
} else {
707+
break; // No more redirects
708+
}
720709
}
710+
return downloadURL;
721711
}
722712
}
713+
714+
}

app/src/main/java/io/github/subhamtyagi/ocr/utils/Utils.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ public static String getLastUsedText() {
134134
return SpUtil.getInstance().getString(Constants.KEY_LAST_USE_IMAGE_TEXT, "");
135135
}
136136

137-
public static Triple<Set<Language>, Set<Language>, Set<Language>> getLast3UsedLanguages(Context context) {
137+
public static Triple<Set<Language>, Set<Language>, Set<Language>> getLast3UsedLanguage(Context context) {
138138
return new Triple<>(
139139
allLangs(context, SpUtil.getInstance().getStringSet(context.getString(R.string.key_language_for_tesseract_multi), Collections.singleton(DEFAULT_LANGUAGE))),
140140
allLangs(context, SpUtil.getInstance().getStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, Collections.singleton("hin"))),
@@ -147,8 +147,8 @@ private static Set<Language> allLangs(Context context, Set<String> codes) {
147147
}
148148

149149
public static void setLastUsedLanguage(Context context, Set<Language> lastUsedLanguage) {
150-
Set<Language> lastLanguage1 = getLast3UsedLanguages(context).getFirst();
151-
Set<Language> lastLanguage2 = getLast3UsedLanguages(context).getSecond();
150+
Set<Language> lastLanguage1 = getLast3UsedLanguage(context).getFirst();
151+
Set<Language> lastLanguage2 = getLast3UsedLanguage(context).getSecond();
152152

153153
if (lastUsedLanguage.equals(lastLanguage1)) {
154154
return;
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android"
3+
android:shape="rectangle">
4+
5+
<solid android:color="@android:color/white" />
6+
7+
<corners android:radius="16dp" />
8+
9+
<stroke
10+
android:width="1dp"
11+
android:color="@color/colorAccent" />
12+
13+
<padding
14+
android:left="10dp"
15+
android:right="10dp"
16+
android:top="10dp"
17+
android:bottom="10dp" />
18+
19+
</shape>

0 commit comments

Comments
 (0)