Skip to content

Commit 6f5d152

Browse files
committed
Release 0.2.7
1 parent da66be3 commit 6f5d152

8 files changed

Lines changed: 207 additions & 149 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ android {
2020

2121
targetSdk 34
2222
versionCode 16
23-
versionName "0.2.7-SNAPSHOT"
23+
versionName "0.2.7"
2424
testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
2525
vectorDrawables.generatedDensities = []
2626
}

app/src/main/java/org/exbin/bined/editor/android/ApplicationContext.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import org.exbin.bined.android.basic.CodeArea;
2323
import org.exbin.bined.editor.android.preference.BinaryEditorPreferences;
2424
import org.exbin.bined.editor.android.preference.PreferencesWrapper;
25+
import org.exbin.bined.editor.android.search.BinarySearch;
26+
import org.exbin.bined.editor.android.search.SearchParameters;
2527

2628
import javax.annotation.Nonnull;
2729
import javax.annotation.Nullable;
@@ -39,6 +41,8 @@ public class ApplicationContext extends Application {
3941
private final SegmentsRepository segmentsRepository = new SegmentsRepository(() -> new JnaBufferEditableData());
4042

4143
private BinEdFileHandler fileHandler = null;
44+
private boolean searchActive = false;
45+
private SearchParameters searchParameters = null;
4246

4347
@Override
4448
public void onCreate() {
@@ -64,4 +68,21 @@ public BinEdFileHandler createFileHandler(CodeArea codeArea) {
6468
fileHandler.setNewData(appPreferences.getEditorPreferences().getFileHandlingMode());
6569
return fileHandler;
6670
}
71+
72+
@Nullable
73+
public SearchParameters getSearchParameters() {
74+
return searchParameters;
75+
}
76+
77+
public void setSearchParameters(@Nullable SearchParameters searchParameters) {
78+
this.searchParameters = searchParameters;
79+
}
80+
81+
public boolean isSearchActive() {
82+
return searchActive;
83+
}
84+
85+
public void setSearchActive(boolean searchActive) {
86+
this.searchActive = searchActive;
87+
}
6788
}

app/src/main/java/org/exbin/bined/editor/android/MainActivity.java

Lines changed: 48 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,13 @@ public class MainActivity extends AppCompatActivity implements FileDialog.OnFile
152152
private Menu menu;
153153
private final BinaryStatusHandler binaryStatus = new BinaryStatusHandler(this);
154154
private BinarySearch binarySearch;
155-
private SearchParameters searchParameters = null;
156155
private View searchStatusPanel;
157156
private Runnable postSaveAsAction = null;
158157
private boolean keyboardShown = false;
159158
private boolean dataInspectorShown = true;
160159
private long lastBackKeyPressTime = -1;
161160
private long lastReleaseBackKeyPressTime = -1;
162-
private BasicValuesPositionColorModifier basicValuesPositionColorModifier = new BasicValuesPositionColorModifier();
161+
private final BasicValuesPositionColorModifier basicValuesPositionColorModifier = new BasicValuesPositionColorModifier();
163162
private FallbackFileType fallbackFileType = FallbackFileType.FILE;
164163

165164
private final BinarySearchService.SearchStatusListener searchStatusListener = new BinarySearchService.SearchStatusListener() {
@@ -189,6 +188,12 @@ public void clearStatus() {
189188
// editorModificationListener.modified();
190189
// }
191190
updateCurrentDocumentSize();
191+
ApplicationContext application = (ApplicationContext) getApplication();
192+
if (application.isSearchActive()) {
193+
binarySearch.cancelSearch();
194+
binarySearch.clearSearch();
195+
hideSearchStatusPanel();
196+
}
192197
};
193198
private final SelectionChangedListener codeAreaSelectionChangedListener = () -> {
194199
binaryStatus.setSelectionRange(codeArea.getSelection());
@@ -289,6 +294,11 @@ protected void onCreate(@Nullable Bundle savedInstanceState) {
289294
basicValuesInspector.registerFocusPainter(basicValuesPositionColorModifier);
290295

291296
basicValuesInspectorView.setNextFocusUpId(R.id.toolbar);
297+
if (application.isSearchActive()) {
298+
showSearchStatusPanel();
299+
SearchCodeAreaColorAssessor searchAssessor = CodeAreaAndroidUtils.findColorAssessor((ColorAssessorPainterCapable) codeArea.getPainter(), SearchCodeAreaColorAssessor.class);
300+
updateSearchStatusPanel(searchAssessor.getCurrentMatchIndex(), searchAssessor.getMatches().size());
301+
}
292302

293303
applySettings();
294304

@@ -432,6 +442,8 @@ private void showSearchStatusPanel() {
432442
searchStatus.setText(resources.getString(R.string.search_in_progress));
433443

434444
mainView.addView(searchStatusPanel, 2);
445+
ApplicationContext application = (ApplicationContext) getApplication();
446+
application.setSearchActive(true);
435447
}
436448
}
437449

@@ -440,6 +452,8 @@ private void hideSearchStatusPanel() {
440452
int searchStatusPanelIndex = mainView.indexOfChild(searchStatusPanel);
441453
if (searchStatusPanelIndex >= 0) {
442454
mainView.removeViewAt(searchStatusPanelIndex);
455+
ApplicationContext application = (ApplicationContext) getApplication();
456+
application.setSearchActive(false);
443457
}
444458
}
445459

@@ -462,8 +476,6 @@ private void updateSearchStatusPanel(int matchPosition, int matchesCount) {
462476

463477
@Override
464478
protected void onDestroy() {
465-
super.onDestroy();
466-
467479
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
468480
codeArea.removeOnUnhandledKeyEventListener((View.OnUnhandledKeyEventListener) codeAreaOnUnhandledKeyListener);
469481
}
@@ -475,6 +487,8 @@ protected void onDestroy() {
475487
fileHandler.getUndoRedo().removeChangeListener(codeAreaChangeListener);
476488
BinEdCodeAreaAssessor codeAreaAssessor = fileHandler.getCodeAreaAssessor();
477489
codeAreaAssessor.removeColorModifier(basicValuesPositionColorModifier);
490+
491+
super.onDestroy();
478492
}
479493

480494
private void processIntent(Intent intent) {
@@ -931,16 +945,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
931945
return true;
932946
} else if (id == R.id.action_search) {
933947
SearchDialog searchDialog = new SearchDialog();
934-
searchDialog.setBinarySearch(binarySearch);
935-
searchDialog.setSearchParameters(searchParameters);
936-
searchDialog.setTemplateCodeArea(codeArea);
937-
searchDialog.setSearchStatusListener(searchStatusListener);
938-
searchDialog.setOnCloseListener(() -> {
939-
SearchParameters usedSearchParameters = searchDialog.getSearchParameters();
940-
if (usedSearchParameters != null) {
941-
searchParameters = usedSearchParameters;
942-
}
943-
});
944948
searchDialog.show(getSupportFragmentManager(), "searchDialog");
945949
return true;
946950
} else if (id == R.id.action_delete) {
@@ -1456,12 +1460,16 @@ public void buttonActionPreviousMatch(View view) {
14561460
SearchCodeAreaColorAssessor searchAssessor = CodeAreaAndroidUtils.findColorAssessor((ColorAssessorPainterCapable) codeArea.getPainter(), SearchCodeAreaColorAssessor.class);
14571461
searchAssessor.setCurrentMatchIndex(searchAssessor.getCurrentMatchIndex() - 1);
14581462
updateSearchStatusPanel(searchAssessor.getCurrentMatchIndex(), searchAssessor.getMatches().size());
1463+
codeArea.revealPosition(searchAssessor.getCurrentMatch().getPosition(), 0, codeArea.getActiveSection());
1464+
codeArea.repaint();
14591465
}
14601466

14611467
public void buttonActionNextMatch(View view) {
14621468
SearchCodeAreaColorAssessor searchAssessor = CodeAreaAndroidUtils.findColorAssessor((ColorAssessorPainterCapable) codeArea.getPainter(), SearchCodeAreaColorAssessor.class);
14631469
searchAssessor.setCurrentMatchIndex(searchAssessor.getCurrentMatchIndex() + 1);
14641470
updateSearchStatusPanel(searchAssessor.getCurrentMatchIndex(), searchAssessor.getMatches().size());
1471+
codeArea.revealPosition(searchAssessor.getCurrentMatch().getPosition(), 0, codeArea.getActiveSection());
1472+
codeArea.repaint();
14651473
}
14661474

14671475
public void buttonActionHideSearchPanel(View view) {
@@ -1470,6 +1478,32 @@ public void buttonActionHideSearchPanel(View view) {
14701478
hideSearchStatusPanel();
14711479
}
14721480

1481+
@Nullable
1482+
public BinarySearch getBinarySearch() {
1483+
return binarySearch;
1484+
}
1485+
1486+
@Nullable
1487+
public SearchParameters getSearchParameters() {
1488+
ApplicationContext application = (ApplicationContext) getApplication();
1489+
return application.getSearchParameters();
1490+
}
1491+
1492+
public void setSearchParameters(SearchParameters searchParameters) {
1493+
ApplicationContext application = (ApplicationContext) getApplication();
1494+
application.setSearchParameters(searchParameters);
1495+
}
1496+
1497+
@Nullable
1498+
public BinarySearchService.SearchStatusListener getSearchStatusListener() {
1499+
return searchStatusListener;
1500+
}
1501+
1502+
@Nullable
1503+
public CodeArea getCodeArea() {
1504+
return codeArea;
1505+
}
1506+
14731507
public static boolean isGoogleTV(Context context) {
14741508
final PackageManager pm = context.getPackageManager();
14751509
return pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK);

app/src/main/java/org/exbin/bined/editor/android/preference/ViewFragment.java

Lines changed: 24 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@
2727
import org.exbin.bined.editor.android.R;
2828
import org.exbin.bined.editor.android.SettingsActivity;
2929

30+
import java.util.logging.Level;
31+
import java.util.logging.Logger;
32+
3033
import javax.annotation.ParametersAreNonnullByDefault;
3134

3235
/**
@@ -69,24 +72,28 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
6972
@Override
7073
public void onDestroy() {
7174
// Save to preferences
72-
SettingsActivity activity = (SettingsActivity) requireActivity();
73-
BinaryEditorPreferences appPreferences = activity.getAppPreferences();
74-
CodeAreaPreferences codeAreaPreferences = appPreferences.getCodeAreaPreferences();
75-
TextFontPreferences fontPreferences = appPreferences.getFontPreferences();
76-
fontPreferences.setFontSize(Integer.parseInt(((FontPreference) findPreference(FONT_KEY)).getText()));
77-
TextEncodingPreferences encodingPreferences = appPreferences.getEncodingPreferences();
78-
encodingPreferences.setDefaultEncoding(((EncodingPreference) findPreference(ENCODING_KEY)).getText());
79-
String bytesPerRowMode = ((ListPreference) findPreference(BYTES_PER_ROW_KEY)).getValue();
80-
if (bytesPerRowMode.equals("custom")) {
81-
// TODO Add support for custom
82-
bytesPerRowMode = "0";
75+
try {
76+
SettingsActivity activity = (SettingsActivity) requireActivity();
77+
BinaryEditorPreferences appPreferences = activity.getAppPreferences();
78+
CodeAreaPreferences codeAreaPreferences = appPreferences.getCodeAreaPreferences();
79+
TextFontPreferences fontPreferences = appPreferences.getFontPreferences();
80+
fontPreferences.setFontSize(Integer.parseInt(((FontPreference) findPreference(FONT_KEY)).getText()));
81+
TextEncodingPreferences encodingPreferences = appPreferences.getEncodingPreferences();
82+
encodingPreferences.setDefaultEncoding(((EncodingPreference) findPreference(ENCODING_KEY)).getText());
83+
String bytesPerRowMode = ((ListPreference) findPreference(BYTES_PER_ROW_KEY)).getValue();
84+
if (bytesPerRowMode.equals("custom")) {
85+
// TODO Add support for custom
86+
bytesPerRowMode = "0";
87+
}
88+
codeAreaPreferences.setMaxBytesPerRow(Integer.parseInt(bytesPerRowMode));
89+
codeAreaPreferences.setViewMode(CodeAreaViewMode.valueOf(((ListPreference) findPreference(VIEW_MODE_KEY)).getValue().toUpperCase()));
90+
codeAreaPreferences.setCodeType(CodeType.valueOf(((ListPreference) findPreference(CODE_TYPE_KEY)).getValue().toUpperCase()));
91+
codeAreaPreferences.setCodeCharactersCase(CodeCharactersCase.valueOf(((ListPreference) findPreference(HEX_CHARACTERS_CASE)).getValue().toUpperCase()));
92+
codeAreaPreferences.setCodeColorization(((TwoStatePreference) findPreference(CODE_COLORIZATION)).isChecked());
93+
codeAreaPreferences.setShowNonprintables(((TwoStatePreference) findPreference(NONPRINTABLE_CHARACTERS)).isChecked());
94+
} catch (IllegalArgumentException ex) {
95+
Logger.getLogger(ViewFragment.class.getName()).log(Level.SEVERE, null, ex);
8396
}
84-
codeAreaPreferences.setMaxBytesPerRow(Integer.parseInt(bytesPerRowMode));
85-
codeAreaPreferences.setViewMode(CodeAreaViewMode.valueOf(((ListPreference) findPreference(VIEW_MODE_KEY)).getValue().toUpperCase()));
86-
codeAreaPreferences.setCodeType(CodeType.valueOf(((ListPreference) findPreference(CODE_TYPE_KEY)).getValue().toUpperCase()));
87-
codeAreaPreferences.setCodeCharactersCase(CodeCharactersCase.valueOf(((ListPreference) findPreference(HEX_CHARACTERS_CASE)).getValue().toUpperCase()));
88-
codeAreaPreferences.setCodeColorization(((TwoStatePreference) findPreference(CODE_COLORIZATION)).isChecked());
89-
codeAreaPreferences.setShowNonprintables(((TwoStatePreference) findPreference(NONPRINTABLE_CHARACTERS)).isChecked());
9097

9198
super.onDestroy();
9299
}

0 commit comments

Comments
 (0)