add scroll to last added point

This commit is contained in:
Chumva 2018-06-26 19:06:17 +03:00
parent 6c449c7410
commit bc352c575a
2 changed files with 39 additions and 12 deletions

View file

@ -121,7 +121,7 @@
android:maxLines="1" android:maxLines="1"
android:paddingBottom="@dimen/context_menu_padding_margin_tiny" android:paddingBottom="@dimen/context_menu_padding_margin_tiny"
android:paddingLeft="@dimen/bottom_sheet_content_margin" android:paddingLeft="@dimen/bottom_sheet_content_margin"
android:paddingRight="@dimen/bottom_sheet_content_padding_small" android:paddingRight="@dimen/bottom_sheet_content_margin"
android:paddingTop="@dimen/context_menu_padding_margin_tiny" android:paddingTop="@dimen/context_menu_padding_margin_tiny"
android:text="@string/shared_string_cancel" android:text="@string/shared_string_cancel"
android:textColor="?attr/wikivoyage_active_color" android:textColor="?attr/wikivoyage_active_color"
@ -148,7 +148,7 @@
android:letterSpacing="@dimen/text_button_letter_spacing" android:letterSpacing="@dimen/text_button_letter_spacing"
android:maxLines="1" android:maxLines="1"
android:paddingBottom="@dimen/context_menu_padding_margin_tiny" android:paddingBottom="@dimen/context_menu_padding_margin_tiny"
android:paddingLeft="@dimen/bottom_sheet_content_padding_small" android:paddingLeft="@dimen/bottom_sheet_content_margin"
android:paddingRight="@dimen/bottom_sheet_content_margin" android:paddingRight="@dimen/bottom_sheet_content_margin"
android:paddingTop="@dimen/context_menu_padding_margin_tiny" android:paddingTop="@dimen/context_menu_padding_margin_tiny"
android:textColor="?attr/wikivoyage_active_color" android:textColor="?attr/wikivoyage_active_color"

View file

@ -12,7 +12,6 @@ import android.graphics.drawable.Drawable;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Handler;
import android.support.annotation.ColorInt; import android.support.annotation.ColorInt;
import android.support.annotation.ColorRes; import android.support.annotation.ColorRes;
import android.support.annotation.DrawableRes; import android.support.annotation.DrawableRes;
@ -98,7 +97,8 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
private WptPt selectedWpt; private WptPt selectedWpt;
private SavingTrackHelper savingTrackHelper; private SavingTrackHelper savingTrackHelper;
private GpxSelectionHelper selectedGpxHelper; private GpxSelectionHelper selectedGpxHelper;
private RecyclerView recyclerView;
private View mainView; private View mainView;
private final List<EditTextEx> editTexts = new ArrayList<>(); private final List<EditTextEx> editTexts = new ArrayList<>();
private CoordinateInputAdapter adapter; private CoordinateInputAdapter adapter;
@ -363,12 +363,11 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
final View focusedView = getDialog().getCurrentFocus(); final View focusedView = getDialog().getCurrentFocus();
if (focusedView != null) { if (focusedView != null) {
AndroidUtils.softKeyboardDelayed(focusedView); AndroidUtils.softKeyboardDelayed(focusedView);
isSoftKeyboardShown = true;
} }
} }
}); });
adapter = new CoordinateInputAdapter(getMyApplication(), getGpx()); adapter = new CoordinateInputAdapter(getMyApplication(), getGpx());
final RecyclerView recyclerView = (RecyclerView) mainView.findViewById(R.id.markers_recycler_view); recyclerView = (RecyclerView) mainView.findViewById(R.id.markers_recycler_view);
recyclerView.setLayoutManager(new LinearLayoutManager(ctx)); recyclerView.setLayoutManager(new LinearLayoutManager(ctx));
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@ -496,6 +495,9 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
if (!isOsmandKeyboardOn() && isOsmandKeyboardCurrentlyVisible()) { if (!isOsmandKeyboardOn() && isOsmandKeyboardCurrentlyVisible()) {
changeOsmandKeyboardVisibility(false); changeOsmandKeyboardVisibility(false);
} }
if (isSoftKeyboardShown || isOsmandKeyboardCurrentlyVisible()) {
moveLastPointToTop();
}
mainView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { mainView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override @Override
@ -504,11 +506,34 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
mainView.getWindowVisibleDisplayFrame(r); mainView.getWindowVisibleDisplayFrame(r);
int screenHeight = mainView.getRootView().getHeight(); int screenHeight = mainView.getRootView().getHeight();
int keypadHeight = screenHeight - r.bottom; int keypadHeight = screenHeight - r.bottom;
if (!isSoftKeyboardShown) {
if (keypadHeight > screenHeight * 0.15) {
isSoftKeyboardShown = true;
moveLastPointToTop();
}
}
isSoftKeyboardShown = keypadHeight > screenHeight * 0.15; isSoftKeyboardShown = keypadHeight > screenHeight * 0.15;
} }
}); });
} }
private void moveLastPointToTop() {
final Context ctx = getContext();
if (ctx == null) {
return;
}
if (adapter.getItemCount() > 1) {
if (isOsmandKeyboardCurrentlyVisible()) {
View keyboardView = mainView.findViewById(R.id.keyboard_layout);
keyboardView.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
int height = keyboardView.getMeasuredHeight();
recyclerView.setPadding(0, AndroidUtils.dpToPx(ctx, 16), 0, height);
}
((LinearLayoutManager) recyclerView.getLayoutManager()).scrollToPositionWithOffset(adapter.getItemCount() - 1, 0);
}
}
private void setupKeyboardItems(View keyboardView, View.OnClickListener listener, @IdRes int... itemsIds) { private void setupKeyboardItems(View keyboardView, View.OnClickListener listener, @IdRes int... itemsIds) {
@DrawableRes int itemBg = lightTheme ? R.drawable.keyboard_item_light_bg : R.drawable.keyboard_item_dark_bg; @DrawableRes int itemBg = lightTheme ? R.drawable.keyboard_item_light_bg : R.drawable.keyboard_item_dark_bg;
@DrawableRes int controlItemBg = lightTheme ? R.drawable.keyboard_item_control_light_bg : R.drawable.keyboard_item_control_dark_bg; @DrawableRes int controlItemBg = lightTheme ? R.drawable.keyboard_item_control_light_bg : R.drawable.keyboard_item_control_dark_bg;
@ -613,7 +638,6 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
final View focusedView = getDialog().getCurrentFocus(); final View focusedView = getDialog().getCurrentFocus();
if (focusedView != null) { if (focusedView != null) {
if (!isOsmandKeyboardOn()) { if (!isOsmandKeyboardOn()) {
isSoftKeyboardShown = true;
AndroidUtils.softKeyboardDelayed(focusedView); AndroidUtils.softKeyboardDelayed(focusedView);
} }
} }
@ -893,7 +917,6 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
public void onFocusChange(View v, boolean hasFocus) { public void onFocusChange(View v, boolean hasFocus) {
if (!hasFocus && isOsmandKeyboardOn() && (isOsmandKeyboardCurrentlyVisible() || isSoftKeyboardShown)) { if (!hasFocus && isOsmandKeyboardOn() && (isOsmandKeyboardCurrentlyVisible() || isSoftKeyboardShown)) {
AndroidUtils.hideSoftKeyboard(getActivity(), v); AndroidUtils.hideSoftKeyboard(getActivity(), v);
isSoftKeyboardShown = false;
} }
} }
}); });
@ -941,10 +964,8 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
if (focusedView != null) { if (focusedView != null) {
if (useOsmandKeyboard) { if (useOsmandKeyboard) {
AndroidUtils.hideSoftKeyboard(getActivity(), focusedView); AndroidUtils.hideSoftKeyboard(getActivity(), focusedView);
isSoftKeyboardShown = false;
} else { } else {
AndroidUtils.softKeyboardDelayed(focusedView); AndroidUtils.softKeyboardDelayed(focusedView);
isSoftKeyboardShown = true;
} }
} }
changeEditTextSelections(); changeEditTextSelections();
@ -1072,6 +1093,11 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
} else { } else {
mainView.findViewById(R.id.keyboard_layout).setVisibility(visibility); mainView.findViewById(R.id.keyboard_layout).setVisibility(visibility);
} }
if (show) {
moveLastPointToTop();
} else {
recyclerView.setPadding(0, AndroidUtils.dpToPx(getMyApplication(), 16), 0, AndroidUtils.dpToPx(getMyApplication(), 72));
}
} }
private void switchEditText(int currentId, boolean toNext) { private void switchEditText(int currentId, boolean toNext) {
@ -1230,10 +1256,11 @@ public class CoordinateInputDialogFragment extends DialogFragment implements Osm
dismissEditingMode(); dismissEditingMode();
} else { } else {
addWpt(getGpx(), null, name, null, 0, lat, lon); addWpt(getGpx(), null, name, null, 0, lat, lon);
moveLastPointToTop();
} }
adapter.notifyDataSetChanged();
clearInputs();
} }
adapter.notifyDataSetChanged();
clearInputs();
} }
private String getStringCoordinate(boolean latitude) { private String getStringCoordinate(boolean latitude) {