55import android .content .Intent ;
66import android .net .Uri ;
77import android .os .Bundle ;
8+ import android .os .Handler ;
89import android .text .Editable ;
910import android .text .TextWatcher ;
1011import android .view .LayoutInflater ;
5253import java .util .ArrayList ;
5354import java .util .Arrays ;
5455import java .util .List ;
56+ import java .util .concurrent .atomic .AtomicInteger ;
5557import java .util .concurrent .atomic .AtomicReference ;
5658
5759import 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