Skip to content

Commit 198cedd

Browse files
committed
Make sector input usable
* works good now altho even more hacked together * invalid values cause an crash but that is user fault so
1 parent eb98af5 commit 198cedd

File tree

1 file changed

+43
-38
lines changed

1 file changed

+43
-38
lines changed

app/src/main/java/org/androidbootmanager/app/ui/sdcard/SDCardFragment.java

Lines changed: 43 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import android.content.Intent;
66
import android.net.Uri;
77
import android.os.Bundle;
8+
import android.os.Handler;
89
import android.text.Editable;
910
import android.text.TextWatcher;
1011
import android.view.LayoutInflater;
@@ -52,6 +53,7 @@
5253
import java.util.ArrayList;
5354
import java.util.Arrays;
5455
import java.util.List;
56+
import java.util.concurrent.atomic.AtomicInteger;
5557
import java.util.concurrent.atomic.AtomicReference;
5658

5759
import static org.androidbootmanager.app.util.SDUtils.generateMeta;
@@ -152,14 +154,36 @@ public ViewHolder(View view) {
152154
slider.setValues(0f, (float) (meta.dumpS(id).endSector - meta.dumpS(id).startSector));
153155
slider.setStepSize(1);
154156
slider.setMinSeparationValue(2048);
157+
Runnable rs = () -> {
158+
Editable s = start.getText();
159+
if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) < slider.getValueFrom()) {
160+
slider.setValues(0f, 1f);
161+
} else if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) > slider.getValues().get(1)) {
162+
slider.setValues(slider.getValues().get(1) - 1, slider.getValues().get(1));
163+
} else {
164+
slider.setValues((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector), slider.getValues().get(1));
165+
}
166+
};
167+
Runnable re = () -> {
168+
Editable s = end.getText();
169+
if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) > slider.getValueTo()) {
170+
slider.setValues(slider.getValues().get(0), slider.getValueTo());
171+
} else if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) < slider.getValues().get(0)) {
172+
slider.setValues(slider.getValues().get(0) - 1, slider.getValues().get(0));
173+
} else {
174+
slider.setValues(slider.getValues().get(0), (float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector));
175+
}
176+
};
155177
slider.addOnChangeListener((a, b, c) -> {
156178
List<Float> values = slider.getValues();
157179
float from = values.get(0);
158180
float to = values.get(1);
159-
if (!start.getText().toString().equals(String.valueOf(meta.dumpS(id).startSector + (long) from)))
160-
start.setText(String.valueOf(meta.dumpS(id).startSector + (long) from));
161-
if (!end.getText().toString().equals(String.valueOf(meta.dumpS(id).startSector + (long) to)))
162-
end.setText(String.valueOf(meta.dumpS(id).startSector + (long) to));
181+
if (!start.getText().toString().equals(String.valueOf(meta.dumpS(id).startSector + (long) from))) {
182+
start.setText(String.valueOf(meta.dumpS(id).startSector + (long) from)); rs.run();
183+
}
184+
if (!end.getText().toString().equals(String.valueOf(meta.dumpS(id).startSector + (long) to))) {
185+
end.setText(String.valueOf(meta.dumpS(id).startSector + (long) to)); re.run();
186+
}
163187
if (!size.getText().toString().equals(SOUtils.humanReadableByteCountBin((long) (to - from) * meta.logicalSectorSizeBytes)))
164188
size.setText(SOUtils.humanReadableByteCountBin((long) (to - from) * meta.logicalSectorSizeBytes));
165189
});
@@ -174,45 +198,26 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
174198
public void onNothingSelected(AdapterView<?> parent) {
175199
}
176200
});
201+
AtomicInteger xid = new AtomicInteger();
202+
start.setOnFocusChangeListener((view1, hasFocus) -> rs.run());
203+
end.setOnFocusChangeListener((view1, hasFocus) -> re.run());
177204
start.addTextChangedListener(new TextWatcher() {
205+
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
206+
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
178207
@Override
179-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
180-
}
181-
182-
@Override
183-
public void onTextChanged(CharSequence s, int start, int before, int count) {
184-
}
185-
186-
@Override
187-
public void afterTextChanged(Editable s) {
188-
if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) < slider.getValueFrom()) {
189-
slider.setValues(0f, 1f);
190-
} else if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) > slider.getValues().get(1)) {
191-
slider.setValues(slider.getValues().get(1) - 1, slider.getValues().get(1));
192-
} else {
193-
slider.setValues((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector), slider.getValues().get(1));
194-
}
195-
}
208+
public void afterTextChanged(Editable s) { int mid = xid.incrementAndGet(); new Handler().postDelayed(() -> {
209+
if (mid == xid.get())
210+
rs.run();
211+
}, 1000); }
196212
});
197213
end.addTextChangedListener(new TextWatcher() {
214+
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
215+
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { }
198216
@Override
199-
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
200-
}
201-
202-
@Override
203-
public void onTextChanged(CharSequence s, int start, int before, int count) {
204-
}
205-
206-
@Override
207-
public void afterTextChanged(Editable s) {
208-
if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) > slider.getValueTo()) {
209-
slider.setValues(slider.getValues().get(0), slider.getValueTo());
210-
} else if ((float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector) < slider.getValues().get(0)) {
211-
slider.setValues(slider.getValues().get(0) - 1, slider.getValues().get(0));
212-
} else {
213-
slider.setValues(slider.getValues().get(0), (float) (Long.parseLong(s.toString()) - meta.dumpS(id).startSector));
214-
}
215-
}
217+
public void afterTextChanged(Editable s) { int mid = xid.incrementAndGet(); new Handler().postDelayed(() -> {
218+
if (mid == xid.get())
219+
rs.run();
220+
}, 1000); }
216221
});
217222
dd.setAdapter(new ArrayAdapter<>(requireActivity(), android.R.layout.simple_spinner_dropdown_item, new String[]{getString(R.string.portable_part), getString(R.string.data_part), getString(R.string.meta_part), getString(R.string.system_part), getString(R.string.unknown_part)}));
218223
start.setText(String.valueOf(meta.dumpS(id).startSector));

0 commit comments

Comments
 (0)