Skip to content

Commit 10f2ff9

Browse files
committed
refactor code
1 parent 2c8536d commit 10f2ff9

File tree

2 files changed

+125
-99
lines changed

2 files changed

+125
-99
lines changed

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

Lines changed: 47 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@
66
import android.content.DialogInterface;
77
import android.content.Intent;
88
import android.os.Bundle;
9+
import android.text.TextUtils;
910
import android.view.LayoutInflater;
1011
import android.view.View;
1112
import android.view.ViewGroup;
12-
import android.widget.Button;
1313
import android.widget.ImageButton;
1414
import android.widget.TextView;
1515
import android.widget.Toast;
@@ -23,75 +23,75 @@ public class BottomSheetResultsFragment extends BottomSheetDialogFragment {
2323

2424
private static final String ARGUMENT_TEXT = "arg_text";
2525

26-
private Context context;
27-
private Bundle bundle;
28-
2926
@Nullable
3027
@Override
31-
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
32-
33-
View v = inflater.inflate(R.layout.bottom_sheet_dialog_results, container, false);
34-
35-
context = getContext();
36-
bundle = getArguments();
37-
38-
assert bundle != null;
39-
assert context != null;
40-
41-
TextView resultantText = v.findViewById(R.id.resultant_text);
42-
ImageButton btnCopy = v.findViewById(R.id.btn_copy);
43-
ImageButton btnShare = v.findViewById(R.id.btn_share);
44-
45-
btnCopy.setOnClickListener(v12 -> {
46-
ClipboardManager clipboardManager = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
47-
ClipData clipData = ClipData.newPlainText("nonsense_data", bundle.getString(ARGUMENT_TEXT));
48-
clipboardManager.setPrimaryClip(clipData);
49-
Toast.makeText(context, R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show();
28+
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
29+
View view = inflater.inflate(R.layout.bottom_sheet_dialog_results, container, false);
30+
Bundle arguments = getArguments();
31+
32+
if (arguments == null) {
5033
dismiss();
51-
});
34+
return view;
35+
}
5236

53-
btnShare.setOnClickListener(v1 -> {
54-
Intent intent = new Intent();
55-
intent.setAction(Intent.ACTION_SEND);
56-
intent.setType("text/plain");
57-
intent.putExtra(Intent.EXTRA_TEXT, bundle.getString(ARGUMENT_TEXT));
58-
startActivity(Intent.createChooser(intent, null));
59-
dismiss();
60-
});
37+
String resultantTextString = arguments.getString(ARGUMENT_TEXT, "");
38+
TextView resultantText = view.findViewById(R.id.resultant_text);
39+
ImageButton btnCopy = view.findViewById(R.id.btn_copy);
40+
ImageButton btnShare = view.findViewById(R.id.btn_share);
41+
42+
setupButtons(resultantTextString, btnCopy, btnShare, resultantText);
43+
44+
return view;
45+
}
6146

62-
if (bundle.getString(ARGUMENT_TEXT).trim().isEmpty()) {
63-
btnCopy.setEnabled(false);
64-
btnCopy.setAlpha(.3f);
65-
btnShare.setEnabled(false);
66-
btnShare.setAlpha(.3f);
47+
private void setupButtons(String text, ImageButton btnCopy, ImageButton btnShare, TextView resultantText) {
48+
if (TextUtils.isEmpty(text.trim())) {
49+
setButtonState(btnCopy, false);
50+
setButtonState(btnShare, false);
6751
resultantText.setText(R.string.no_results);
6852
} else {
69-
resultantText.setText(bundle.getString(ARGUMENT_TEXT));
53+
resultantText.setText(text);
54+
btnCopy.setOnClickListener(v -> copyToClipboard(text));
55+
btnShare.setOnClickListener(v -> shareText(text));
7056
}
71-
return v;
57+
}
58+
59+
private void setButtonState(ImageButton button, boolean enabled) {
60+
button.setEnabled(enabled);
61+
button.setAlpha(enabled ? 1f : 0.3f);
62+
}
63+
64+
private void copyToClipboard(String text) {
65+
ClipboardManager clipboardManager = (ClipboardManager) requireContext().getSystemService(Context.CLIPBOARD_SERVICE);
66+
ClipData clipData = ClipData.newPlainText("nonsense_data", text);
67+
clipboardManager.setPrimaryClip(clipData);
68+
Toast.makeText(getContext(), R.string.copied_to_clipboard, Toast.LENGTH_SHORT).show();
69+
dismiss();
70+
}
71+
72+
private void shareText(String text) {
73+
Intent intent = new Intent(Intent.ACTION_SEND);
74+
intent.setType("text/plain");
75+
intent.putExtra(Intent.EXTRA_TEXT, text);
76+
startActivity(Intent.createChooser(intent, null));
77+
dismiss();
7278
}
7379

7480
@Override
7581
public void onCancel(@NonNull DialogInterface dialog) {
76-
cancel();
82+
super.onCancel(dialog);
7783
}
7884

7985
@Override
8086
public void dismiss() {
81-
cancel();
8287
super.dismiss();
8388
}
8489

85-
private void cancel() {
86-
87-
}
88-
8990
public static BottomSheetResultsFragment newInstance(String text) {
9091
BottomSheetResultsFragment fragment = new BottomSheetResultsFragment();
9192
Bundle bundle = new Bundle();
9293
bundle.putString(ARGUMENT_TEXT, text);
9394
fragment.setArguments(bundle);
9495
return fragment;
9596
}
96-
97-
}
97+
}

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

Lines changed: 78 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,11 @@
1818
import com.googlecode.leptonica.android.WriteFile;
1919

2020
import java.util.Collections;
21+
import java.util.HashSet;
22+
import java.util.Map;
2123
import java.util.Set;
2224
import java.util.stream.Collectors;
2325

24-
import java.util.HashMap;
25-
import java.util.Map;
26-
2726
import io.github.subhamtyagi.ocr.Language;
2827
import io.github.subhamtyagi.ocr.R;
2928
import kotlin.Triple;
@@ -34,43 +33,69 @@ public class Utils {
3433

3534
@SuppressLint("DefaultLocale")
3635
public static String getSize(int size) {
37-
String s = "";
38-
double kb = size / 1024;
39-
double mb = kb / 1024;
36+
if (size < 0) {
37+
return "Invalid size";
38+
}
4039
if (size < 1024) {
41-
s = "$size Bytes";
42-
} else if (size < 1024 * 1024) {
43-
s = String.format("%.2f", kb) + " KB";
44-
} else if (size < 1024 * 1024 * 1024) {
45-
s = String.format("%.2f", mb) + " MB";
40+
return size + " Bytes";
41+
}
42+
43+
double kb = size / 1024.0;
44+
if (kb < 1024) {
45+
return String.format("%.2f KB", kb);
4646
}
47-
return s;
47+
48+
double mb = kb / 1024.0;
49+
return String.format("%.2f MB", mb);
4850
}
4951

5052
public static Bitmap preProcessBitmap(Bitmap bitmap) {
51-
bitmap = bitmap.copy(Bitmap.Config.ARGB_8888, true);
52-
Pix pix = ReadFile.readBitmap(bitmap);
53-
pix = Convert.convertTo8(pix);
53+
Pix pix = preparePix(bitmap);
5454

55-
if (SpUtil.getInstance().getBoolean(Constants.KEY_CONTRAST, true)) {
56-
// pix=AdaptiveMap.backgroundNormMorph(pix);
55+
if (shouldApplyContrast()) {
5756
pix = AdaptiveMap.pixContrastNorm(pix);
5857
}
5958

60-
if (SpUtil.getInstance().getBoolean(Constants.KEY_UN_SHARP_MASKING, true))
59+
if (shouldApplyUnsharpMasking()) {
6160
pix = Enhance.unsharpMasking(pix);
61+
}
6262

63-
if (SpUtil.getInstance().getBoolean(Constants.KEY_OTSU_THRESHOLD, true))
63+
if (shouldApplyOtsuThreshold()) {
6464
pix = Binarize.otsuAdaptiveThreshold(pix);
65+
}
6566

66-
if (SpUtil.getInstance().getBoolean(Constants.KEY_FIND_SKEW_AND_DESKEW, true)) {
67-
float f = Skew.findSkew(pix);
68-
pix = Rotate.rotate(pix, f);
67+
if (shouldFindAndDeskw()) {
68+
pix = rotateToCorrectSkew(pix);
6969
}
7070

7171
return WriteFile.writeBitmap(pix);
7272
}
7373

74+
private static Pix preparePix(Bitmap bitmap) {
75+
return Convert.convertTo8(ReadFile.readBitmap(bitmap.copy(Bitmap.Config.ARGB_8888, true)));
76+
}
77+
78+
private static boolean shouldApplyContrast() {
79+
return SpUtil.getInstance().getBoolean(Constants.KEY_CONTRAST, true);
80+
}
81+
82+
private static boolean shouldApplyUnsharpMasking() {
83+
return SpUtil.getInstance().getBoolean(Constants.KEY_UN_SHARP_MASKING, true);
84+
}
85+
86+
private static boolean shouldApplyOtsuThreshold() {
87+
return SpUtil.getInstance().getBoolean(Constants.KEY_OTSU_THRESHOLD, true);
88+
}
89+
90+
private static boolean shouldFindAndDeskw() {
91+
return SpUtil.getInstance().getBoolean(Constants.KEY_FIND_SKEW_AND_DESKEW, true);
92+
}
93+
94+
private static Pix rotateToCorrectSkew(Pix pix) {
95+
float skewAngle = Skew.findSkew(pix);
96+
return Rotate.rotate(pix, skewAngle);
97+
}
98+
7499
public static boolean isPreProcessImage() {
75100
return SpUtil.getInstance().getBoolean(Constants.KEY_GRAYSCALE_IMAGE_OCR, true);
76101
}
@@ -83,10 +108,10 @@ public static String getTrainingDataType() {
83108
return SpUtil.getInstance().getString(Constants.KEY_TESS_TRAINING_DATA_SOURCE, "best");
84109
}
85110

86-
public static @NonNull Set<Language> getTrainingDataLanguages(Context c) {
87-
return allLangs(c,SpUtil.getInstance().getStringSet(
88-
c.getString(R.string.key_language_for_tesseract_multi),
89-
Collections.singleton("eng")));
111+
public static @NonNull Set<Language> getTrainingDataLanguages(Context context) {
112+
return allLangs(context, SpUtil.getInstance().getStringSet(
113+
context.getString(R.string.key_language_for_tesseract_multi),
114+
Collections.singleton(DEFAULT_LANGUAGE)));
90115
}
91116

92117
public static int getPageSegMode() {
@@ -96,53 +121,54 @@ public static int getPageSegMode() {
96121
public static void putLastUsedText(String text) {
97122
SpUtil.getInstance().putString(Constants.KEY_LAST_USE_IMAGE_TEXT, text);
98123
}
99-
124+
100125
public static Map<String, String> getAllParameters() {
101-
return SpUtil.getInstance().getAllParameters();
126+
return SpUtil.getInstance().getAllParameters();
102127
}
103-
public static boolean isExtraParameterSet(){
104-
return SpUtil.getInstance().getBoolean(Constants.KEY_ADVANCE_TESS_OPTION);
128+
129+
public static boolean isExtraParameterSet() {
130+
return SpUtil.getInstance().getBoolean(Constants.KEY_ADVANCE_TESS_OPTION);
105131
}
106132

107133
public static String getLastUsedText() {
108134
return SpUtil.getInstance().getString(Constants.KEY_LAST_USE_IMAGE_TEXT, "");
109135
}
110136

111-
public static Triple<Set<Language>, Set<Language>, Set<Language>> getLast3UsedLanguage(Context c) {
137+
public static Triple<Set<Language>, Set<Language>, Set<Language>> getLast3UsedLanguages(Context context) {
112138
return new Triple<>(
113-
allLangs(c, SpUtil.getInstance().getStringSet(c.getString(R.string.key_language_for_tesseract_multi), Collections.singleton("eng"))),
114-
allLangs(c, SpUtil.getInstance().getStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, Collections.singleton("hin"))),
115-
allLangs(c, SpUtil.getInstance().getStringSet(Constants.KEY_LAST_USED_LANGUAGE_3, Collections.singleton("deu")))
139+
allLangs(context, SpUtil.getInstance().getStringSet(context.getString(R.string.key_language_for_tesseract_multi), Collections.singleton(DEFAULT_LANGUAGE))),
140+
allLangs(context, SpUtil.getInstance().getStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, Collections.singleton("hin"))),
141+
allLangs(context, SpUtil.getInstance().getStringSet(Constants.KEY_LAST_USED_LANGUAGE_3, Collections.singleton("deu")))
116142
);
117143
}
118144

119-
private static Set<Language> allLangs(Context c, Set<String> codes) {
120-
return codes.stream().map(code -> new Language(c, code)).collect(Collectors.toSet());
145+
private static Set<Language> allLangs(Context context, Set<String> codes) {
146+
return codes.stream().map(code -> new Language(context, code)).collect(Collectors.toSet());
121147
}
122148

123-
public static void setLastUsedLanguage(Context c, Set<Language> lastUsedLanguage) {
124-
Set<Language> l1 = getLast3UsedLanguage(c).getFirst();
125-
Set<Language> l2 = getLast3UsedLanguage(c).getSecond();
126-
if (lastUsedLanguage.equals(l1)) {
127-
return;
149+
public static void setLastUsedLanguage(Context context, Set<Language> lastUsedLanguage) {
150+
Set<Language> lastLanguage1 = getLast3UsedLanguages(context).getFirst();
151+
Set<Language> lastLanguage2 = getLast3UsedLanguages(context).getSecond();
152+
153+
if (lastUsedLanguage.equals(lastLanguage1)) {
154+
return;
128155
}
156+
129157
Set<String> lastCodes = lastUsedLanguage.stream().map(Language::getCode).collect(Collectors.toSet());
130-
Set<String> l1Codes = l1.stream().map(Language::getCode).collect(Collectors.toSet());
131-
Set<String> l2Codes = l2.stream().map(Language::getCode).collect(Collectors.toSet());
132-
if (l2.equals(lastUsedLanguage)) {
133-
SpUtil.getInstance().putStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, l1Codes);
134-
SpUtil.getInstance().putStringSet(c.getString(R.string.key_language_for_tesseract_multi), lastCodes);
158+
Set<String> lastCodes1 = lastLanguage1.stream().map(Language::getCode).collect(Collectors.toSet());
159+
Set<String> lastCodes2 = lastLanguage2.stream().map(Language::getCode).collect(Collectors.toSet());
160+
161+
if (lastLanguage2.equals(lastUsedLanguage)) {
162+
SpUtil.getInstance().putStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, lastCodes1);
163+
SpUtil.getInstance().putStringSet(context.getString(R.string.key_language_for_tesseract_multi), lastCodes);
135164
} else {
136-
SpUtil.getInstance().putStringSet(Constants.KEY_LAST_USED_LANGUAGE_3, l2Codes);
137-
SpUtil.getInstance().putStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, l1Codes);
138-
SpUtil.getInstance().putStringSet(c.getString(R.string.key_language_for_tesseract_multi), lastCodes);
165+
SpUtil.getInstance().putStringSet(Constants.KEY_LAST_USED_LANGUAGE_3, lastCodes2);
166+
SpUtil.getInstance().putStringSet(Constants.KEY_LAST_USED_LANGUAGE_2, lastCodes1);
167+
SpUtil.getInstance().putStringSet(context.getString(R.string.key_language_for_tesseract_multi), lastCodes);
139168
}
140-
141169
}
142170

143171
public static void putLastUsedImageLocation(String imageURI) {
144172
SpUtil.getInstance().putString(Constants.KEY_LAST_USE_IMAGE_LOCATION, imageURI);
145173
}
146-
147-
148174
}

0 commit comments

Comments
 (0)