Fix RTL step 2

This commit is contained in:
Nazar-Kutz 2020-04-28 10:52:14 +03:00
parent 8e4a99a82a
commit f675b8d640
31 changed files with 240 additions and 89 deletions

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<nine-patch android:src="@drawable/bg_contextmenu_shadow_left_light" />
</item>
<item>
<shape>
<solid
android:color="@color/list_background_color_dark" />
</shape>
</item>
</layer-list>

View file

@ -0,0 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<nine-patch android:src="@drawable/bg_contextmenu_shadow_left_light" />
</item>
<item>
<shape>
<solid
android:color="@color/list_background_color_light" />
</shape>
</item>
</layer-list>

View file

@ -20,7 +20,10 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:minHeight="@dimen/list_item_height" android:minHeight="@dimen/list_item_height"
android:paddingLeft="@dimen/list_content_padding" android:paddingLeft="@dimen/list_content_padding"
android:paddingStart="@dimen/list_content_padding"> android:paddingStart="@dimen/list_content_padding"
android:paddingRight="0dp"
android:paddingEnd="0dp">
<CheckBox <CheckBox
android:id="@+id/check_local_index" android:id="@+id/check_local_index"
android:layout_width="wrap_content" android:layout_width="wrap_content"

View file

@ -40,8 +40,8 @@
android:layout_marginLeft="@dimen/context_menu_buttons_padding_bottom" android:layout_marginLeft="@dimen/context_menu_buttons_padding_bottom"
android:layout_marginRight="@dimen/context_menu_buttons_padding_bottom" android:layout_marginRight="@dimen/context_menu_buttons_padding_bottom"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingStart="40dp" android:paddingStart="@dimen/route_info_app_modes_padding"
android:paddingLeft="40dp" android:paddingLeft="@dimen/route_info_app_modes_padding"
android:paddingEnd="@dimen/route_info_app_modes_padding" android:paddingEnd="@dimen/route_info_app_modes_padding"
android:paddingRight="@dimen/route_info_app_modes_padding" android:paddingRight="@dimen/route_info_app_modes_padding"
android:layout_marginStart="@dimen/context_menu_buttons_padding_bottom" android:layout_marginStart="@dimen/context_menu_buttons_padding_bottom"

View file

@ -21,7 +21,9 @@
android:descendantFocusability="blocksDescendants" android:descendantFocusability="blocksDescendants"
android:orientation="horizontal" android:orientation="horizontal"
android:paddingLeft="@dimen/list_content_padding" android:paddingLeft="@dimen/list_content_padding"
android:paddingStart="@dimen/list_content_padding"> android:paddingStart="@dimen/list_content_padding"
android:paddingRight="0dp"
android:paddingEnd="0dp">
<ImageView <ImageView
android:id="@+id/icon" android:id="@+id/icon"

View file

@ -34,6 +34,7 @@
<attr name="ctx_menu_divider" format="reference" /> <attr name="ctx_menu_divider" format="reference" />
<attr name="bottom_menu_view_bg" format="reference" /> <attr name="bottom_menu_view_bg" format="reference" />
<attr name="left_menu_view_bg" format="reference" /> <attr name="left_menu_view_bg" format="reference" />
<attr name="right_menu_view_bg" format="reference" />
<attr name="stroked_buttons_and_links_outline" format="color" /> <attr name="stroked_buttons_and_links_outline" format="color" />
<attr name="dashboard_divider" format="reference" /> <attr name="dashboard_divider" format="reference" />

View file

@ -20,17 +20,19 @@
<item name="typeface">@string/font_roboto_medium</item> <item name="typeface">@string/font_roboto_medium</item>
<item name="android:textColor">?android:textColorSecondary</item> <item name="android:textColor">?android:textColorSecondary</item>
<item name="android:layout_marginLeft">@dimen/subHeaderMarginLeft</item> <item name="android:layout_marginLeft">@dimen/subHeaderMarginLeft</item>
<item name="android:layout_marginStart">@dimen/subHeaderMarginLeft</item>
</style> </style>
<style name="DashboardGeneralButton"> <style name="DashboardGeneralButton">
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">wrap_content</item>
<item name="android:gravity">center_vertical|right</item> <item name="android:gravity">center_vertical|end</item>
<item name="android:layout_height">@dimen/showAllButtonHeight</item> <item name="android:layout_height">@dimen/showAllButtonHeight</item>
<item name="android:layout_gravity">center_vertical</item> <item name="android:layout_gravity">center_vertical</item>
<item name="android:textSize">@dimen/default_sub_text_size</item> <item name="android:textSize">@dimen/default_sub_text_size</item>
<item name="typeface">@string/font_roboto_medium</item> <item name="typeface">@string/font_roboto_medium</item>
<item name="android:textColor">?attr/dashboard_general_button_text_color</item> <item name="android:textColor">?attr/dashboard_general_button_text_color</item>
<item name="android:layout_marginRight">@dimen/showAllButtonMarginRight</item> <item name="android:layout_marginRight">@dimen/showAllButtonMarginRight</item>
<item name="android:layout_marginEnd">@dimen/showAllButtonMarginRight</item>
<item name="android:background">?attr/dashboard_button</item> <item name="android:background">?attr/dashboard_button</item>
</style> </style>
@ -430,6 +432,7 @@
<item name="bg_map_context_menu">@drawable/bg_map_context_menu_dark</item> <item name="bg_map_context_menu">@drawable/bg_map_context_menu_dark</item>
<item name="bottom_menu_view_bg">@drawable/bg_bottom_menu_dark</item> <item name="bottom_menu_view_bg">@drawable/bg_bottom_menu_dark</item>
<item name="left_menu_view_bg">@drawable/bg_left_menu_dark</item> <item name="left_menu_view_bg">@drawable/bg_left_menu_dark</item>
<item name="right_menu_view_bg">@drawable/bg_right_menu_dark</item>
<item name="bg_point_editor_view">@drawable/bg_point_editor_view_dark</item> <item name="bg_point_editor_view">@drawable/bg_point_editor_view_dark</item>
<item name="dashboard_divider">@color/divider_color_dark</item> <item name="dashboard_divider">@color/divider_color_dark</item>
<item name="divider_color">@color/divider_color_dark</item> <item name="divider_color">@color/divider_color_dark</item>
@ -683,7 +686,9 @@
<style name="create_poi_text_field"> <style name="create_poi_text_field">
<item name="android:layout_marginTop">8dp</item> <item name="android:layout_marginTop">8dp</item>
<item name="android:layout_marginRight">16dp</item> <item name="android:layout_marginRight">16dp</item>
<item name="android:layout_marginEnd">16dp</item>
<item name="android:layout_marginLeft">68dp</item> <item name="android:layout_marginLeft">68dp</item>
<item name="android:layout_marginStart">68dp</item>
<item name="android:layout_width">match_parent</item> <item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item> <item name="android:layout_weight">1</item>
@ -692,6 +697,7 @@
<style name="edit_poi_imageview_style"> <style name="edit_poi_imageview_style">
<item name="android:layout_marginTop">16dp</item> <item name="android:layout_marginTop">16dp</item>
<item name="android:layout_marginLeft">16dp</item> <item name="android:layout_marginLeft">16dp</item>
<item name="android:layout_marginStart">16dp</item>
<item name="android:layout_width">wrap_content</item> <item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item> <item name="android:layout_height">wrap_content</item>
</style> </style>

View file

@ -14,6 +14,7 @@ import android.graphics.Matrix;
import android.graphics.Paint; import android.graphics.Paint;
import android.graphics.PointF; import android.graphics.PointF;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ClipDrawable; import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.LayerDrawable;
@ -662,6 +663,13 @@ public class AndroidUtils {
} }
} }
public static Drawable[] getCompoundDrawables(@NonNull TextView tv){
if (isSupportRTL()) {
return tv.getCompoundDrawablesRelative();
}
return tv.getCompoundDrawables();
}
public static void setPadding(View view, int start, int top, int end, int bottom) { public static void setPadding(View view, int start, int top, int end, int bottom) {
if (isSupportRTL()) { if (isSupportRTL()) {
view.setPaddingRelative(start, top, end, bottom); view.setPaddingRelative(start, top, end, bottom);
@ -684,14 +692,67 @@ public class AndroidUtils {
} }
public static int getNavigationIconResId(@NonNull Context ctx) { public static int getNavigationIconResId(@NonNull Context ctx) {
return getLayoutDirection(ctx) == ViewCompat.LAYOUT_DIRECTION_RTL ? return isLayoutRtl(ctx) ? R.drawable.ic_arrow_forward : R.drawable.ic_arrow_back;
R.drawable.ic_arrow_forward : R.drawable.ic_arrow_back; }
public static Drawable getDrawableForDirection(@NonNull Context ctx,
@NonNull Drawable drawable) {
return isLayoutRtl(ctx) ? getMirroredDrawable(ctx, drawable) : drawable;
}
public static Drawable getMirroredDrawable(@NonNull Context ctx,
@NonNull Drawable drawable) {
Bitmap bitmap = drawableToBitmap(drawable);
return new BitmapDrawable(ctx.getResources(), flipBitmapHorizontally(bitmap));
}
public static Bitmap drawableToBitmap(Drawable drawable) {
if (drawable instanceof BitmapDrawable) {
BitmapDrawable bitmapDrawable = (BitmapDrawable) drawable;
if(bitmapDrawable.getBitmap() != null) {
return bitmapDrawable.getBitmap();
}
}
Bitmap bitmap = null;
if(drawable.getIntrinsicWidth() <= 0 || drawable.getIntrinsicHeight() <= 0) {
bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888);
} else {
bitmap = Bitmap.createBitmap(drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
}
Canvas canvas = new Canvas(bitmap);
drawable.setBounds(0, 0, canvas.getWidth(), canvas.getHeight());
drawable.draw(canvas);
return bitmap;
}
public static Bitmap flipBitmapHorizontally(Bitmap source) {
Matrix matrix = new Matrix();
matrix.preScale(-1.0f, 1.0f, source.getWidth() / 2f, source.getHeight() / 2f);
return Bitmap.createBitmap(source, 0, 0, source.getWidth(), source.getHeight(), matrix, true);
}
public static void setTextHorizontalGravity(@NonNull TextView tv, int hGravity) {
if (tv.getContext() != null) {
boolean isLayoutRtl = AndroidUtils.isLayoutRtl(tv.getContext());
int gravity = Gravity.LEFT;
if (isLayoutRtl && (hGravity == Gravity.START)
|| !isLayoutRtl && hGravity == Gravity.END) {
gravity = Gravity.RIGHT;
}
tv.setGravity(gravity);
}
} }
public static boolean isSupportRTL() { public static boolean isSupportRTL() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1; return Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1;
} }
public static boolean isLayoutRtl(Context ctx) {
return isSupportRTL() && getLayoutDirection(ctx) == ViewCompat.LAYOUT_DIRECTION_RTL;
}
public static ArrayList<View> getChildrenViews(ViewGroup vg) { public static ArrayList<View> getChildrenViews(ViewGroup vg) {
ArrayList<View> result = new ArrayList<>(); ArrayList<View> result = new ArrayList<>();
for (int i = 0; i < vg.getChildCount(); i++) { for (int i = 0; i < vg.getChildCount(); i++) {

View file

@ -145,7 +145,7 @@ public class SecondSplashScreenFragment extends BaseOsmAndFragment {
} else { } else {
elementsPaddingLeft = getNavigationBarWidth(); elementsPaddingLeft = getNavigationBarWidth();
} }
logoLayoutParams.setMargins(0, logoMarginTop, 0, 0); AndroidUtils.setMargins(logoLayoutParams, 0, logoMarginTop, 0, 0);
logo.setPadding(elementsPaddingLeft, 0, elementsPaddingRight, 0); logo.setPadding(elementsPaddingLeft, 0, elementsPaddingRight, 0);
logo.setLayoutParams(logoLayoutParams); logo.setLayoutParams(logoLayoutParams);
view.addView(logo); view.addView(logo);

View file

@ -23,7 +23,6 @@ import android.view.WindowManager;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.ColorInt; import androidx.annotation.ColorInt;
@ -619,10 +618,10 @@ public class UiUtilities {
return new ContextThemeWrapper(context, nightMode ? darkStyle : lightStyle); return new ContextThemeWrapper(context, nightMode ? darkStyle : lightStyle);
} }
public static void setMargins(View v, int l, int t, int r, int b) { public static void setMargins(View v, int s, int t, int e, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) { if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams(); ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b); AndroidUtils.setMargins(p, s, t, e, b);
v.requestLayout(); v.requestLayout();
} }
} }

View file

@ -1951,11 +1951,13 @@ public class MapActivity extends OsmandActionBarActivity implements DownloadEven
if (settings.DO_NOT_USE_ANIMATIONS.get()) { if (settings.DO_NOT_USE_ANIMATIONS.get()) {
if (event.getAction() == MotionEvent.ACTION_DOWN) { if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (drawerLayout.isDrawerOpen(Gravity.START)) { if (drawerLayout.isDrawerOpen(Gravity.START)) {
int width = AndroidUtils.dpToPx(this, 280); int drawerWidth = AndroidUtils.dpToPx(this, 280);
if (event.getRawX() > width) { int screenWidth = AndroidUtils.getScreenWidth(MapActivity.this);
boolean isLayoutRtl = AndroidUtils.isLayoutRtl(app);
if ((!isLayoutRtl && event.getRawX() > drawerWidth)
|| (isLayoutRtl && event.getRawX() <= screenWidth - drawerWidth)) {
closeDrawer(); closeDrawer();
} }
} }
} }
} }

View file

@ -117,7 +117,7 @@ public class StartGPSStatus extends OsmAndAction {
final AppCompatCheckBox cb = new AppCompatCheckBox(activity); final AppCompatCheckBox cb = new AppCompatCheckBox(activity);
cb.setText(R.string.shared_string_remember_my_choice); cb.setText(R.string.shared_string_remember_my_choice);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
lp.setMargins(dp24, dp8, dp8, dp24); AndroidUtils.setMargins(lp, dp24, dp8, dp8, dp24);
cb.setLayoutParams(lp); cb.setLayoutParams(lp);
cb.setPadding(dp8, 0, 0, 0); cb.setPadding(dp8, 0, 0, 0);
int textColorPrimary = ContextCompat.getColor(activity, isNightMode() ? R.color.text_color_primary_dark : R.color.text_color_primary_light); int textColorPrimary = ContextCompat.getColor(activity, isNightMode() ? R.color.text_color_primary_dark : R.color.text_color_primary_light);

View file

@ -287,7 +287,8 @@ public abstract class ContextMenuFragment extends BaseOsmAndFragment {
currentMenuState = MenuState.FULL_SCREEN; currentMenuState = MenuState.FULL_SCREEN;
if (isSingleFragment()) { if (isSingleFragment()) {
final TypedValue typedValueAttr = new TypedValue(); final TypedValue typedValueAttr = new TypedValue();
mapActivity.getTheme().resolveAttribute(R.attr.left_menu_view_bg, typedValueAttr, true); int bgAttrId = AndroidUtils.isLayoutRtl(app) ? R.attr.right_menu_view_bg : R.attr.left_menu_view_bg;
mapActivity.getTheme().resolveAttribute(bgAttrId, typedValueAttr, true);
mainView.setBackgroundResource(typedValueAttr.resourceId); mainView.setBackgroundResource(typedValueAttr.resourceId);
mainView.setLayoutParams(new FrameLayout.LayoutParams(getLandscapeWidth(), ViewGroup.LayoutParams.MATCH_PARENT)); mainView.setLayoutParams(new FrameLayout.LayoutParams(getLandscapeWidth(), ViewGroup.LayoutParams.MATCH_PARENT));
} else { } else {

View file

@ -29,7 +29,8 @@ public class DashSearchFragment extends DashBaseFragment {
View view = getActivity().getLayoutInflater().inflate(R.layout.dash_search_fragment, container, false); View view = getActivity().getLayoutInflater().inflate(R.layout.dash_search_fragment, container, false);
TextView searchFor = (TextView) view.findViewById(R.id.search_for); TextView searchFor = (TextView) view.findViewById(R.id.search_for);
searchFor.setCompoundDrawablesWithIntrinsicBounds(getMyApplication().getUIUtilities().getThemedIcon(R.drawable.ic_action_search_dark), null, null, null); AndroidUtils.setCompoundDrawablesWithIntrinsicBounds(searchFor,
getMyApplication().getUIUtilities().getThemedIcon(R.drawable.ic_action_search_dark), null, null, null);
searchFor.setCompoundDrawablePadding(AndroidUtils.dpToPx(getActivity(), 16f)); searchFor.setCompoundDrawablePadding(AndroidUtils.dpToPx(getActivity(), 16f));
view.findViewById(R.id.search_card).setOnClickListener(new View.OnClickListener() { view.findViewById(R.id.search_card).setOnClickListener(new View.OnClickListener() {

View file

@ -395,9 +395,9 @@ public class DashboardOnMap implements ObservableScrollViewCallbacks, IRouteInfo
private FrameLayout.LayoutParams getActionButtonLayoutParams(int btnSizePx) { private FrameLayout.LayoutParams getActionButtonLayoutParams(int btnSizePx) {
int topPadPx = mapActivity.getResources().getDimensionPixelSize(R.dimen.dashboard_map_top_padding); int topPadPx = mapActivity.getResources().getDimensionPixelSize(R.dimen.dashboard_map_top_padding);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(btnSizePx, btnSizePx); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(btnSizePx, btnSizePx);
int marginRight = btnSizePx / 4; int marginEnd = btnSizePx / 4;
params.setMargins(0, landscape ? 0 : topPadPx - 2 * btnSizePx, marginRight, landscape ? marginRight : 0); AndroidUtils.setMargins(params, 0, landscape ? 0 : topPadPx - 2 * btnSizePx, marginEnd, landscape ? marginEnd : 0);
params.gravity = landscape ? Gravity.BOTTOM | Gravity.RIGHT : Gravity.TOP | Gravity.RIGHT; params.gravity = landscape ? Gravity.BOTTOM | Gravity.END : Gravity.TOP | Gravity.END;
return params; return params;
} }

View file

@ -1112,7 +1112,7 @@ public class MenuBuilder {
} else { } else {
button.setTextColor(ContextCompat.getColor(context, light ? R.color.text_color_primary_light : R.color.text_color_primary_dark)); button.setTextColor(ContextCompat.getColor(context, light ? R.color.text_color_primary_light : R.color.text_color_primary_dark));
} }
button.setGravity(Gravity.LEFT | Gravity.CENTER_VERTICAL); button.setGravity(Gravity.START | Gravity.CENTER_VERTICAL);
button.setSingleLine(singleLine); button.setSingleLine(singleLine);
button.setEllipsize(TextUtils.TruncateAt.END); button.setEllipsize(TextUtils.TruncateAt.END);

View file

@ -3,6 +3,7 @@ package net.osmand.plus.mapcontextmenu.other;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -195,7 +196,10 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
if (!landscapeLayout) { if (!landscapeLayout) {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark); AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
} else { } else {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_left_menu_light, R.drawable.bg_left_menu_dark); final TypedValue typedValueAttr = new TypedValue();
int bgAttrId = AndroidUtils.isLayoutRtl(ctx) ? R.attr.right_menu_view_bg : R.attr.left_menu_view_bg;
ctx.getTheme().resolveAttribute(bgAttrId, typedValueAttr, true);
mainView.setBackgroundResource(typedValueAttr.resourceId);
} }
AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.y_axis_title), nightMode); AndroidUtils.setTextPrimaryColor(ctx, (TextView) mainView.findViewById(R.id.y_axis_title), nightMode);

View file

@ -296,7 +296,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
undoBtn = ((ImageButton) mainView.findViewById(R.id.undo_point_button)); undoBtn = ((ImageButton) mainView.findViewById(R.id.undo_point_button));
redoBtn = ((ImageButton) mainView.findViewById(R.id.redo_point_button)); redoBtn = ((ImageButton) mainView.findViewById(R.id.redo_point_button));
undoBtn.setImageDrawable(getContentIcon(R.drawable.ic_action_undo_dark)); Drawable undoDrawable = getContentIcon(R.drawable.ic_action_undo_dark);
undoBtn.setImageDrawable(AndroidUtils.getDrawableForDirection(mapActivity, undoDrawable));
undoBtn.setOnClickListener(new View.OnClickListener() { undoBtn.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -316,7 +317,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
} }
}); });
redoBtn.setImageDrawable(getContentIcon(R.drawable.ic_action_redo_dark)); Drawable redoDrawable = getContentIcon(R.drawable.ic_action_redo_dark);
redoBtn.setImageDrawable(AndroidUtils.getDrawableForDirection(mapActivity, redoDrawable));
redoBtn.setOnClickListener(new View.OnClickListener() { redoBtn.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {

View file

@ -1,5 +1,6 @@
package net.osmand.plus.measurementtool; package net.osmand.plus.measurementtool;
import android.graphics.drawable.Drawable;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
@ -7,6 +8,10 @@ import android.view.MotionEvent;
import android.view.View; import android.view.View;
import android.widget.ImageView; import android.widget.ImageView;
import androidx.core.content.ContextCompat;
import net.osmand.AndroidUtils;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.base.MenuBottomSheetDialogFragment; import net.osmand.plus.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem; import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
@ -26,6 +31,11 @@ public class SaveAsNewTrackBottomSheetDialogFragment extends MenuBottomSheetDial
@Override @Override
public void createMenuItems(Bundle savedInstanceState) { public void createMenuItems(Bundle savedInstanceState) {
OsmandApplication app = getMyApplication();
if (app == null) {
return;
}
items.add(new TitleItem(getString(R.string.shared_string_save_as_gpx))); items.add(new TitleItem(getString(R.string.shared_string_save_as_gpx)));
items.add(new ShortDescriptionItem(getString(R.string.measurement_tool_save_as_new_track_descr))); items.add(new ShortDescriptionItem(getString(R.string.measurement_tool_save_as_new_track_descr)));
@ -37,12 +47,16 @@ public class SaveAsNewTrackBottomSheetDialogFragment extends MenuBottomSheetDial
final ImageView routePointImage = (ImageView) imagesRow.findViewById(R.id.route_point_image); final ImageView routePointImage = (ImageView) imagesRow.findViewById(R.id.route_point_image);
final ImageView lineImage = (ImageView) imagesRow.findViewById(R.id.line_image); final ImageView lineImage = (ImageView) imagesRow.findViewById(R.id.line_image);
routePointImage.setImageResource(nightMode Drawable routePointDrawable = ContextCompat.getDrawable(app, nightMode
? R.drawable.img_help_trip_route_points_night ? R.drawable.img_help_trip_route_points_night
: R.drawable.img_help_trip_route_points_day); : R.drawable.img_help_trip_route_points_day);
lineImage.setImageResource(nightMode Drawable lineDrawable = ContextCompat.getDrawable(app, nightMode
? R.drawable.img_help_trip_track_night ? R.drawable.img_help_trip_track_night
: R.drawable.img_help_trip_track_day); : R.drawable.img_help_trip_track_day);
if (routePointDrawable != null && lineDrawable != null) {
routePointImage.setImageDrawable(AndroidUtils.getDrawableForDirection(app, routePointDrawable));
lineImage.setImageDrawable(AndroidUtils.getDrawableForDirection(app, lineDrawable));
}
routePointImage.setOnClickListener(saveAsRoutePointOnClickListener); routePointImage.setOnClickListener(saveAsRoutePointOnClickListener);
lineImage.setOnClickListener(saveAsLineOnClickListener); lineImage.setOnClickListener(saveAsLineOnClickListener);

View file

@ -573,9 +573,9 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
cb.setTextColor(textColorPrimary); cb.setTextColor(textColorPrimary);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT); LayoutParams.WRAP_CONTENT);
lp.setMargins(dp24, dp8, dp24, 0); AndroidUtils.setMargins(lp, dp24, dp8, dp24, 0);
cb.setLayoutParams(lp); cb.setLayoutParams(lp);
cb.setPadding(dp8, 0, 0, 0); AndroidUtils.setPadding(cb, dp8, 0, 0, 0);
cb.setChecked(!choice.value); cb.setChecked(!choice.value);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override @Override
@ -590,7 +590,7 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
if (showTrackSelection) { if (showTrackSelection) {
View divider = new View(uiCtx); View divider = new View(uiCtx);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, AndroidUtils.dpToPx(uiCtx, 1f)); LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, AndroidUtils.dpToPx(uiCtx, 1f));
lp.setMargins(0, dp8 * 2, 0, 0); AndroidUtils.setMargins(lp, 0, dp8 * 2, 0, 0);
divider.setLayoutParams(lp); divider.setLayoutParams(lp);
divider.setBackgroundColor(uiCtx.getResources().getColor(nightMode ? R.color.divider_color_dark : R.color.divider_color_light)); divider.setBackgroundColor(uiCtx.getResources().getColor(nightMode ? R.color.divider_color_dark : R.color.divider_color_light));
ll.addView(divider); ll.addView(divider);
@ -600,9 +600,9 @@ public class OsmandMonitoringPlugin extends OsmandPlugin {
cb.setTextColor(textColorPrimary); cb.setTextColor(textColorPrimary);
lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, lp = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.WRAP_CONTENT); LayoutParams.WRAP_CONTENT);
lp.setMargins(dp24, dp8 * 2, dp24, 0); AndroidUtils.setMargins(lp, dp24, dp8 * 2, dp24, 0);
cb.setLayoutParams(lp); cb.setLayoutParams(lp);
cb.setPadding(dp8, 0, 0, 0); AndroidUtils.setPadding(cb, dp8, 0, 0, 0);
cb.setChecked(app.getSelectedGpxHelper().getSelectedCurrentRecordingTrack() != null); cb.setChecked(app.getSelectedGpxHelper().getSelectedCurrentRecordingTrack() != null);
cb.setOnCheckedChangeListener(new OnCheckedChangeListener() { cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

View file

@ -7,6 +7,7 @@ import android.text.Editable;
import android.text.InputFilter; import android.text.InputFilter;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.View.OnFocusChangeListener; import android.view.View.OnFocusChangeListener;
@ -21,6 +22,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.osm.AbstractPoiType; import net.osmand.osm.AbstractPoiType;
import net.osmand.osm.MapPoiTypes; import net.osmand.osm.MapPoiTypes;
@ -202,6 +204,7 @@ public class AdvancedEditPoiFragment extends BaseOsmAndFragment
.inflate(R.layout.poi_tag_list_item, null, false); .inflate(R.layout.poi_tag_list_item, null, false);
final AutoCompleteTextView tagEditText = final AutoCompleteTextView tagEditText =
(AutoCompleteTextView) convertView.findViewById(R.id.tagEditText); (AutoCompleteTextView) convertView.findViewById(R.id.tagEditText);
AndroidUtils.setTextHorizontalGravity(tagEditText, Gravity.START);
ImageButton deleteItemImageButton = ImageButton deleteItemImageButton =
(ImageButton) convertView.findViewById(R.id.deleteItemImageButton); (ImageButton) convertView.findViewById(R.id.deleteItemImageButton);
deleteItemImageButton.setImageDrawable(deleteDrawable); deleteItemImageButton.setImageDrawable(deleteDrawable);
@ -215,6 +218,7 @@ public class AdvancedEditPoiFragment extends BaseOsmAndFragment
}); });
final AutoCompleteTextView valueEditText = final AutoCompleteTextView valueEditText =
(AutoCompleteTextView) convertView.findViewById(R.id.valueEditText); (AutoCompleteTextView) convertView.findViewById(R.id.valueEditText);
AndroidUtils.setTextHorizontalGravity(valueEditText, Gravity.START);
valueEditText.setFilters(new InputFilter[] { valueEditText.setFilters(new InputFilter[] {
new InputFilter.LengthFilter(AMENITY_TEXT_LENGTH) new InputFilter.LengthFilter(AMENITY_TEXT_LENGTH)
}); });

View file

@ -10,6 +10,7 @@ import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.ContextThemeWrapper; import android.view.ContextThemeWrapper;
import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -24,6 +25,7 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.osm.edit.OSMSettings; import net.osmand.osm.edit.OSMSettings;
import net.osmand.plus.R; import net.osmand.plus.R;
@ -104,6 +106,11 @@ public class BasicEditPoiFragment extends BaseOsmAndFragment
phoneEditText.setFilters(lengthLimit); phoneEditText.setFilters(lengthLimit);
webSiteEditText.setFilters(lengthLimit); webSiteEditText.setFilters(lengthLimit);
descriptionEditText.setFilters(lengthLimit); descriptionEditText.setFilters(lengthLimit);
AndroidUtils.setTextHorizontalGravity(streetEditText, Gravity.START);
AndroidUtils.setTextHorizontalGravity(houseNumberEditText, Gravity.START);
AndroidUtils.setTextHorizontalGravity(phoneEditText, Gravity.START);
AndroidUtils.setTextHorizontalGravity(webSiteEditText, Gravity.START);
AndroidUtils.setTextHorizontalGravity(descriptionEditText, Gravity.START);
Button addOpeningHoursButton = (Button) view.findViewById(R.id.addOpeningHoursButton); Button addOpeningHoursButton = (Button) view.findViewById(R.id.addOpeningHoursButton);
addOpeningHoursButton.setOnClickListener(new View.OnClickListener() { addOpeningHoursButton.setOnClickListener(new View.OnClickListener() {
@Override @Override

View file

@ -16,6 +16,7 @@ import android.text.Editable;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent; import android.view.KeyEvent;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.MotionEvent; import android.view.MotionEvent;
@ -247,6 +248,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
}); });
EditText poiNameEditText = (EditText) view.findViewById(R.id.poiNameEditText); EditText poiNameEditText = (EditText) view.findViewById(R.id.poiNameEditText);
AndroidUtils.setTextHorizontalGravity(poiNameEditText, Gravity.START);
poiNameEditText.addTextChangedListener(new TextWatcher() { poiNameEditText.addTextChangedListener(new TextWatcher() {
@Override @Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) { public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@ -273,6 +275,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
AndroidUtils.showSoftKeyboard(poiNameEditText); AndroidUtils.showSoftKeyboard(poiNameEditText);
poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout); poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout);
poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText); poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText);
AndroidUtils.setTextHorizontalGravity(poiTypeEditText, Gravity.START);
poiTypeEditText.setText(editPoiData.getPoiTypeString()); poiTypeEditText.setText(editPoiData.getPoiTypeString());
poiTypeEditText.addTextChangedListener(new TextWatcher() { poiTypeEditText.addTextChangedListener(new TextWatcher() {
@Override @Override
@ -301,12 +304,26 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
poiTypeEditText.setOnTouchListener(new View.OnTouchListener() { poiTypeEditText.setOnTouchListener(new View.OnTouchListener() {
@Override @Override
public boolean onTouch(final View v, MotionEvent event) { public boolean onTouch(final View v, MotionEvent event) {
Context ctx = getContext();
if (ctx == null) {
return false;
}
boolean isLayoutRtl = AndroidUtils.isLayoutRtl(getContext());
final EditText editText = (EditText) v; final EditText editText = (EditText) v;
final int DRAWABLE_RIGHT = 2;
if (event.getAction() == MotionEvent.ACTION_UP) { if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getX() >= (editText.getRight() final int DRAWABLE_END = 2;
- editText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width() int expandBtnWidth = AndroidUtils.getCompoundDrawables(editText)[DRAWABLE_END].getBounds().width();
- editText.getPaddingRight())) {
boolean expandButtonPressed = false;
if (isLayoutRtl) {
expandButtonPressed = event.getX() <= (editText.getLeft() + expandBtnWidth
+ editText.getPaddingLeft());
} else {
expandButtonPressed = event.getX() >= (editText.getRight() - expandBtnWidth
- editText.getPaddingRight());
}
if (expandButtonPressed) {
PoiCategory category = editPoiData.getPoiCategory(); PoiCategory category = editPoiData.getPoiCategory();
if (category != null) { if (category != null) {
PoiSubTypeDialogFragment dialogFragment = PoiSubTypeDialogFragment dialogFragment =
@ -319,7 +336,6 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
}); });
dialogFragment.show(getChildFragmentManager(), "PoiSubTypeDialogFragment"); dialogFragment.show(getChildFragmentManager(), "PoiSubTypeDialogFragment");
} }
return true; return true;
} }
} }

View file

@ -327,11 +327,11 @@ public class ChooseRouteFragment extends BaseOsmAndFragment implements ContextMe
active ? R.drawable.pages_active_light : R.drawable.pages_inactive_light, active ? R.drawable.pages_active_light : R.drawable.pages_inactive_light,
active ? R.drawable.pages_active_dark : R.drawable.pages_inactive_dark); active ? R.drawable.pages_active_dark : R.drawable.pages_inactive_dark);
if (i == 0) { if (i == 0) {
layoutParams.setMargins(itemMargin, 0, itemPadding, 0); AndroidUtils.setMargins(layoutParams, itemMargin, 0, itemPadding, 0);
} else if (i == routesCount - 1) { } else if (i == routesCount - 1) {
layoutParams.setMargins(0, 0, itemMargin, 0); AndroidUtils.setMargins(layoutParams, 0, 0, itemMargin, 0);
} else { } else {
layoutParams.setMargins(0, 0, itemPadding, 0); AndroidUtils.setMargins(layoutParams, 0, 0, itemPadding, 0);
} }
itemView.setLayoutParams(layoutParams); itemView.setLayoutParams(layoutParams);
pagesView.addView(itemView); pagesView.addView(itemView);

View file

@ -1004,7 +1004,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
optionsTitle.setVisibility(View.VISIBLE); optionsTitle.setVisibility(View.VISIBLE);
endPadding += AndroidUtils.getTextWidth(app.getResources().getDimensionPixelSize(R.dimen.text_button_text_size), app.getString(R.string.shared_string_options)); endPadding += AndroidUtils.getTextWidth(app.getResources().getDimensionPixelSize(R.dimen.text_button_text_size), app.getString(R.string.shared_string_options));
} }
if (AndroidUtils.getLayoutDirection(app) == View.LAYOUT_DIRECTION_RTL) { if (AndroidUtils.isLayoutRtl(app)) {
optionsContainer.setPadding(endPadding, optionsContainer.getPaddingTop(), optionsContainer.getPaddingRight(), optionsContainer.getPaddingBottom()); optionsContainer.setPadding(endPadding, optionsContainer.getPaddingTop(), optionsContainer.getPaddingRight(), optionsContainer.getPaddingBottom());
} else { // LTR } else { // LTR
optionsContainer.setPadding(optionsContainer.getPaddingLeft(), optionsContainer.getPaddingTop(), endPadding, optionsContainer.getPaddingBottom()); optionsContainer.setPadding(optionsContainer.getPaddingLeft(), optionsContainer.getPaddingTop(), endPadding, optionsContainer.getPaddingBottom());

View file

@ -128,10 +128,10 @@ public class MapRouteInfoMenuFragment extends ContextMenuFragment {
int widthNoShadow = getLandscapeNoShadowWidth(); int widthNoShadow = getLandscapeNoShadowWidth();
modesLayoutToolbar.setLayoutParams(new FrameLayout.LayoutParams(widthNoShadow, ViewGroup.LayoutParams.WRAP_CONTENT)); modesLayoutToolbar.setLayoutParams(new FrameLayout.LayoutParams(widthNoShadow, ViewGroup.LayoutParams.WRAP_CONTENT));
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(widthNoShadow, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(widthNoShadow, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.BOTTOM; params.gravity = Gravity.BOTTOM|Gravity.START;
view.findViewById(R.id.control_buttons).setLayoutParams(params); view.findViewById(R.id.control_buttons).setLayoutParams(params);
View appModesView = view.findViewById(R.id.app_modes); View appModesView = view.findViewById(R.id.app_modes);
appModesView.setPadding(0, 0, appModesView.getPaddingRight(), 0); AndroidUtils.setPadding(appModesView, 0, 0, appModesView.getPaddingRight(), 0);
} }
} }
return view; return view;

View file

@ -186,7 +186,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
view.findViewById(getBottomScrollViewId()).setBackgroundDrawable(null); view.findViewById(getBottomScrollViewId()).setBackgroundDrawable(null);
LinearLayout cardsContainer = getCardsContainer(); LinearLayout cardsContainer = getCardsContainer();
FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) cardsContainer.getLayoutParams(); FrameLayout.LayoutParams layoutParams = (FrameLayout.LayoutParams) cardsContainer.getLayoutParams();
layoutParams.setMargins(pageMarginPx, 0, pageMarginPx, 0); AndroidUtils.setMargins(layoutParams, pageMarginPx, 0, pageMarginPx, 0);
cardsContainer.setLayoutParams(layoutParams); cardsContainer.setLayoutParams(layoutParams);
updateCardsLayout(); updateCardsLayout();
} }
@ -459,7 +459,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
ImageView routeLine = new ImageView(view.getContext()); ImageView routeLine = new ImageView(view.getContext());
FrameLayout.LayoutParams routeLineParams = new FrameLayout.LayoutParams(dpToPx(8f), ViewGroup.LayoutParams.MATCH_PARENT); FrameLayout.LayoutParams routeLineParams = new FrameLayout.LayoutParams(dpToPx(8f), ViewGroup.LayoutParams.MATCH_PARENT);
routeLineParams.gravity = Gravity.START; routeLineParams.gravity = Gravity.START;
routeLineParams.setMargins(dpToPx(24), dpToPx(14), dpToPx(22), dpToPx(36)); AndroidUtils.setMargins(routeLineParams, dpToPx(24), dpToPx(14), dpToPx(22), dpToPx(36));
routeLine.setLayoutParams(routeLineParams); routeLine.setLayoutParams(routeLineParams);
int bgColor = transportStopRoute.getColor(app, isNightMode()); int bgColor = transportStopRoute.getColor(app, isNightMode());
routeLine.setBackgroundColor(bgColor); routeLine.setBackgroundColor(bgColor);
@ -595,7 +595,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
private View createImagesContainer(@NonNull Context context) { private View createImagesContainer(@NonNull Context context) {
LinearLayout imagesContainer = new LinearLayout(context); LinearLayout imagesContainer = new LinearLayout(context);
FrameLayout.LayoutParams imagesContainerParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT); FrameLayout.LayoutParams imagesContainerParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.MATCH_PARENT);
imagesContainer.setPadding(dpToPx(16), dpToPx(12), dpToPx(24), 0); AndroidUtils.setPadding(imagesContainer, dpToPx(16), dpToPx(12), dpToPx(24), 0);
imagesContainer.setOrientation(LinearLayout.VERTICAL); imagesContainer.setOrientation(LinearLayout.VERTICAL);
imagesContainer.setLayoutParams(imagesContainerParams); imagesContainer.setLayoutParams(imagesContainerParams);
return imagesContainer; return imagesContainer;
@ -745,7 +745,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
ImageView walkLineImage = new ImageView(container.getContext()); ImageView walkLineImage = new ImageView(container.getContext());
walkLineImage.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.walk_route_item_light)); walkLineImage.setImageDrawable(app.getUIUtilities().getIcon(R.drawable.walk_route_item_light));
LinearLayout.LayoutParams walkImageLayoutParams = new LinearLayout.LayoutParams(dpToPx(10), dpToPx(14)); LinearLayout.LayoutParams walkImageLayoutParams = new LinearLayout.LayoutParams(dpToPx(10), dpToPx(14));
walkImageLayoutParams.setMargins(dpToPx(7), dpToPx(6), 0, dpToPx(6)); AndroidUtils.setMargins(walkImageLayoutParams, dpToPx(7), dpToPx(6), 0, dpToPx(6));
walkLineImage.setLayoutParams(walkImageLayoutParams); walkLineImage.setLayoutParams(walkImageLayoutParams);
container.addView(walkLineImage); container.addView(walkLineImage);
} }
@ -862,12 +862,12 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
LinearLayout llIconCollapse = new LinearLayout(view.getContext()); LinearLayout llIconCollapse = new LinearLayout(view.getContext());
llIconCollapse.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dpToPx(48f))); llIconCollapse.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, dpToPx(48f)));
llIconCollapse.setOrientation(LinearLayout.HORIZONTAL); llIconCollapse.setOrientation(LinearLayout.HORIZONTAL);
llIconCollapse.setGravity(Gravity.CENTER_VERTICAL); llIconCollapse.setGravity(Gravity.CENTER_VERTICAL|Gravity.START);
ll.addView(llIconCollapse); ll.addView(llIconCollapse);
LinearLayout.LayoutParams llIconCollapseParams = new LinearLayout.LayoutParams(dpToPx(24f), dpToPx(24f)); LinearLayout.LayoutParams llIconCollapseParams = new LinearLayout.LayoutParams(dpToPx(24f), dpToPx(24f));
llIconCollapseParams.setMargins(0, dpToPx(12f), 0, dpToPx(12f)); AndroidUtils.setMargins(llIconCollapseParams,0, dpToPx(12f), 0, dpToPx(12f));
llIconCollapseParams.gravity = Gravity.CENTER_VERTICAL; llIconCollapseParams.gravity = Gravity.CENTER_VERTICAL|Gravity.START;
iconViewCollapse.setLayoutParams(llIconCollapseParams); iconViewCollapse.setLayoutParams(llIconCollapseParams);
iconViewCollapse.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iconViewCollapse.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
iconViewCollapse.setImageDrawable(getCollapseIcon(collapsableView.getContenView().getVisibility() == View.GONE)); iconViewCollapse.setImageDrawable(getCollapseIcon(collapsableView.getContenView().getVisibility() == View.GONE));
@ -934,13 +934,13 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
ImageView iconView = new ImageView(view.getContext()); ImageView iconView = new ImageView(view.getContext());
iconView.setImageDrawable(icon); iconView.setImageDrawable(icon);
FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(28), dpToPx(28)); FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(28), dpToPx(28));
imageViewLayoutParams.gravity = Gravity.TOP; imageViewLayoutParams.gravity = Gravity.TOP|Gravity.START;
iconView.setLayoutParams(imageViewLayoutParams); iconView.setLayoutParams(imageViewLayoutParams);
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageViewLayoutParams.setMargins(dpToPx(14), dpToPx(8), dpToPx(22), 0); AndroidUtils.setMargins(imageViewLayoutParams, dpToPx(14), dpToPx(8), dpToPx(22), 0);
iconView.setBackgroundResource(R.drawable.border_round_solid_light); iconView.setBackgroundResource(R.drawable.border_round_solid_light);
iconView.setPadding(dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2)); AndroidUtils.setPadding(iconView, dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2));
baseItemView.addView(iconView); baseItemView.addView(iconView);
} }
@ -957,9 +957,9 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
TextView timeView = new TextView(view.getContext()); TextView timeView = new TextView(view.getContext());
FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
timeViewParams.gravity = Gravity.END | Gravity.TOP; timeViewParams.gravity = Gravity.END | Gravity.TOP;
timeViewParams.setMargins(0, dpToPx(8), 0, 0); AndroidUtils.setMargins(timeViewParams,0, dpToPx(8), 0, 0);
timeView.setLayoutParams(timeViewParams); timeView.setLayoutParams(timeViewParams);
timeView.setPadding(0, 0, dpToPx(16), 0); AndroidUtils.setPadding(timeView,0, 0, dpToPx(16), 0);
timeView.setTextSize(16); timeView.setTextSize(16);
timeView.setTextColor(getMainFontColor()); timeView.setTextColor(getMainFontColor());
@ -1008,7 +1008,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
View routeBadge = createRouteBadge(mapActivity, transportStopRoute); View routeBadge = createRouteBadge(mapActivity, transportStopRoute);
LinearLayout.LayoutParams routeBadgeParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams routeBadgeParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
routeBadgeParams.setMargins(0, dpToPx(6), 0, dpToPx(8)); AndroidUtils.setMargins(routeBadgeParams, 0, dpToPx(6), 0, dpToPx(8));
routeBadge.setLayoutParams(routeBadgeParams); routeBadge.setLayoutParams(routeBadgeParams);
llText.addView(routeBadge); llText.addView(routeBadge);
@ -1045,13 +1045,13 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
ImageView iconView = new ImageView(view.getContext()); ImageView iconView = new ImageView(view.getContext());
iconView.setImageDrawable(icon); iconView.setImageDrawable(icon);
FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(28), dpToPx(28)); FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(28), dpToPx(28));
imageViewLayoutParams.gravity = Gravity.TOP; imageViewLayoutParams.gravity = Gravity.TOP|Gravity.START;
iconView.setLayoutParams(imageViewLayoutParams); iconView.setLayoutParams(imageViewLayoutParams);
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageViewLayoutParams.setMargins(dpToPx(14), dpToPx(8), dpToPx(22), 0); AndroidUtils.setMargins(imageViewLayoutParams, dpToPx(14), dpToPx(8), dpToPx(22), 0);
iconView.setBackgroundResource(R.drawable.border_round_solid_light); iconView.setBackgroundResource(R.drawable.border_round_solid_light);
iconView.setPadding(dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2)); AndroidUtils.setPadding(iconView, dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2));
baseItemView.addView(iconView); baseItemView.addView(iconView);
} }
@ -1068,9 +1068,9 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
TextView timeView = new TextView(view.getContext()); TextView timeView = new TextView(view.getContext());
FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
timeViewParams.gravity = Gravity.END | Gravity.TOP; timeViewParams.gravity = Gravity.END | Gravity.TOP;
timeViewParams.setMargins(0, dpToPx(8), 0, 0); AndroidUtils.setMargins(timeViewParams, 0, dpToPx(8), 0, 0);
timeView.setLayoutParams(timeViewParams); timeView.setLayoutParams(timeViewParams);
timeView.setPadding(0, 0, dpToPx(16), 0); AndroidUtils.setPadding(timeView, 0, 0, dpToPx(16), 0);
timeView.setTextSize(16); timeView.setTextSize(16);
timeView.setTextColor(getMainFontColor()); timeView.setTextColor(getMainFontColor());
@ -1127,16 +1127,16 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
Drawable icon = getPaintedContentIcon(R.drawable.ic_action_pedestrian_dark, getActiveColor()); Drawable icon = getPaintedContentIcon(R.drawable.ic_action_pedestrian_dark, getActiveColor());
ImageView iconView = new ImageView(view.getContext()); ImageView iconView = new ImageView(view.getContext());
iconView.setImageDrawable(icon); iconView.setImageDrawable(AndroidUtils.getDrawableForDirection(view.getContext(), icon));
FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(24), dpToPx(24)); FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(24), dpToPx(24));
imageViewLayoutParams.gravity = imagesContainer != null ? Gravity.TOP : Gravity.CENTER_VERTICAL; imageViewLayoutParams.gravity = Gravity.START| (imagesContainer != null ? Gravity.TOP : Gravity.CENTER_VERTICAL);
iconView.setLayoutParams(imageViewLayoutParams); iconView.setLayoutParams(imageViewLayoutParams);
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
if (imagesContainer != null) { if (imagesContainer != null) {
imagesContainer.addView(iconView); imagesContainer.addView(iconView);
} else { } else {
imageViewLayoutParams.setMargins(dpToPx(16), 0, dpToPx(24), 0); AndroidUtils.setMargins(imageViewLayoutParams, dpToPx(16), 0, dpToPx(24), 0);
baseItemView.addView(iconView); baseItemView.addView(iconView);
} }
@ -1183,7 +1183,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
if (imagesContainer != null) { if (imagesContainer != null) {
imagesContainer.addView(iconView); imagesContainer.addView(iconView);
} else { } else {
imageViewLayoutParams.setMargins(dpToPx(16), 0, dpToPx(24), 0); AndroidUtils.setMargins(imageViewLayoutParams, dpToPx(16), 0, dpToPx(24), 0);
baseItemView.addView(iconView); baseItemView.addView(iconView);
} }
} }
@ -1197,9 +1197,9 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
TextView timeView = new TextView(view.getContext()); TextView timeView = new TextView(view.getContext());
FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
timeViewParams.gravity = Gravity.END | Gravity.TOP; timeViewParams.gravity = Gravity.END | Gravity.TOP;
timeViewParams.setMargins(0, dpToPx(8), 0, 0); AndroidUtils.setMargins(timeViewParams, 0, dpToPx(8), 0, 0);
timeView.setLayoutParams(timeViewParams); timeView.setLayoutParams(timeViewParams);
timeView.setPadding(0, 0, dpToPx(16), 0); AndroidUtils.setPadding(timeView, 0, 0, dpToPx(16), 0);
timeView.setTextSize(16); timeView.setTextSize(16);
timeView.setTextColor(getMainFontColor()); timeView.setTextColor(getMainFontColor());
@ -1247,7 +1247,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
if (imagesContainer != null) { if (imagesContainer != null) {
imagesContainer.addView(iconView); imagesContainer.addView(iconView);
} else { } else {
imageViewLayoutParams.setMargins(dpToPx(16), 0, dpToPx(24), 0); AndroidUtils.setMargins(imageViewLayoutParams, dpToPx(16), 0, dpToPx(24), 0);
baseItemView.addView(iconView); baseItemView.addView(iconView);
} }
@ -1271,9 +1271,9 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
TextView timeView = new TextView(view.getContext()); TextView timeView = new TextView(view.getContext());
FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams timeViewParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
timeViewParams.gravity = Gravity.END | Gravity.TOP; timeViewParams.gravity = Gravity.END | Gravity.TOP;
timeViewParams.setMargins(0, dpToPx(8), 0, 0); AndroidUtils.setMargins(timeViewParams, 0, dpToPx(8), 0, 0);
timeView.setLayoutParams(timeViewParams); timeView.setLayoutParams(timeViewParams);
timeView.setPadding(0, 0, dpToPx(16), 0); AndroidUtils.setPadding(timeView, 0, 0, dpToPx(16), 0);
timeView.setTextSize(16); timeView.setTextSize(16);
timeView.setTextColor(getMainFontColor()); timeView.setTextColor(getMainFontColor());
@ -1315,13 +1315,13 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
ImageView iconView = new ImageView(view.getContext()); ImageView iconView = new ImageView(view.getContext());
iconView.setImageDrawable(icon); iconView.setImageDrawable(icon);
FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(22), dpToPx(22)); FrameLayout.LayoutParams imageViewLayoutParams = new FrameLayout.LayoutParams(dpToPx(22), dpToPx(22));
imageViewLayoutParams.gravity = Gravity.CENTER_VERTICAL; imageViewLayoutParams.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
iconView.setLayoutParams(imageViewLayoutParams); iconView.setLayoutParams(imageViewLayoutParams);
iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE); iconView.setScaleType(ImageView.ScaleType.CENTER_INSIDE);
imageViewLayoutParams.setMargins(dpToPx(17), 0, dpToPx(25), 0); AndroidUtils.setMargins(imageViewLayoutParams, dpToPx(17), 0, dpToPx(25), 0);
iconView.setBackgroundResource(R.drawable.border_round_solid_light_small); iconView.setBackgroundResource(R.drawable.border_round_solid_light_small);
iconView.setPadding(dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2)); AndroidUtils.setPadding(iconView, dpToPx(2), dpToPx(2), dpToPx(2), dpToPx(2));
baseItemView.addView(iconView); baseItemView.addView(iconView);
} }
@ -1366,7 +1366,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
OsmandApplication app = requireMyApplication(); OsmandApplication app = requireMyApplication();
TextViewEx titleView = new TextViewEx(container.getContext()); TextViewEx titleView = new TextViewEx(container.getContext());
FrameLayout.LayoutParams titleParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams titleParams = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
titleParams.gravity = Gravity.CENTER_VERTICAL; titleParams.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
titleView.setTypeface(FontCache.getRobotoRegular(container.getContext())); titleView.setTypeface(FontCache.getRobotoRegular(container.getContext()));
titleView.setLayoutParams(titleParams); titleView.setLayoutParams(titleParams);
titleView.setTextSize(16); titleView.setTextSize(16);
@ -1380,7 +1380,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
OsmandApplication app = requireMyApplication(); OsmandApplication app = requireMyApplication();
TextViewEx textViewDescription = new TextViewEx(container.getContext()); TextViewEx textViewDescription = new TextViewEx(container.getContext());
LinearLayout.LayoutParams descriptionParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams descriptionParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
descriptionParams.setMargins(0, dpToPx(paddingTop), 0, dpToPx(paddingBottom)); AndroidUtils.setMargins(descriptionParams, 0, dpToPx(paddingTop), 0, dpToPx(paddingBottom));
textViewDescription.setLayoutParams(descriptionParams); textViewDescription.setLayoutParams(descriptionParams);
textViewDescription.setTypeface(FontCache.getRobotoRegular(container.getContext())); textViewDescription.setTypeface(FontCache.getRobotoRegular(container.getContext()));
textViewDescription.setTextSize(14); textViewDescription.setTextSize(14);
@ -1394,7 +1394,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
llText.setOrientation(LinearLayout.VERTICAL); llText.setOrientation(LinearLayout.VERTICAL);
LinearLayout.LayoutParams llTextViewParams = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT); LinearLayout.LayoutParams llTextViewParams = new LinearLayout.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT);
llTextViewParams.weight = 1f; llTextViewParams.weight = 1f;
llTextViewParams.gravity = Gravity.CENTER_VERTICAL; llTextViewParams.gravity = Gravity.CENTER_VERTICAL | Gravity.START;
llText.setLayoutParams(llTextViewParams); llText.setLayoutParams(llTextViewParams);
return llText; return llText;
} }
@ -1406,7 +1406,7 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
ll.setMinimumHeight(dpToPx(minHeight)); ll.setMinimumHeight(dpToPx(minHeight));
ll.setLayoutParams(llParams); ll.setLayoutParams(llParams);
ll.setBackgroundResource(AndroidUtils.resolveAttribute(context, android.R.attr.selectableItemBackground)); ll.setBackgroundResource(AndroidUtils.resolveAttribute(context, android.R.attr.selectableItemBackground));
ll.setPadding(dpToPx(64f), 0, dpToPx(16f), 0); AndroidUtils.setPadding(ll, dpToPx(64f), 0, dpToPx(16f), 0);
ll.setOnLongClickListener(onLongClickListener); ll.setOnLongClickListener(onLongClickListener);
return ll; return ll;
} }
@ -1471,9 +1471,9 @@ public class RouteDetailsFragment extends ContextMenuFragment implements PublicT
OsmandApplication app = requireMyApplication(); OsmandApplication app = requireMyApplication();
View horizontalLine = new View(view.getContext()); View horizontalLine = new View(view.getContext());
LinearLayout.LayoutParams llHorLineParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpToPx(1f)); LinearLayout.LayoutParams llHorLineParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, dpToPx(1f));
llHorLineParams.gravity = Gravity.BOTTOM; llHorLineParams.gravity = Gravity.BOTTOM | Gravity.START;
if (needMargin) { if (needMargin) {
llHorLineParams.setMargins(dpToPx(64), 0, 0, 0); AndroidUtils.setMargins(llHorLineParams, dpToPx(64), 0, 0, 0);
} }
horizontalLine.setLayoutParams(llHorLineParams); horizontalLine.setLayoutParams(llHorLineParams);
horizontalLine.setBackgroundColor(ContextCompat.getColor(app, isNightMode() ? R.color.divider_color_dark : R.color.divider_color_light)); horizontalLine.setBackgroundColor(ContextCompat.getColor(app, isNightMode() ? R.color.divider_color_dark : R.color.divider_color_light));

View file

@ -168,7 +168,7 @@ public class WaypointsFragment extends BaseOsmAndFragment implements ObservableS
int width = getResources().getDimensionPixelSize(R.dimen.dashboard_land_width) - getResources().getDimensionPixelSize(R.dimen.dashboard_land_shadow_width); int width = getResources().getDimensionPixelSize(R.dimen.dashboard_land_width) - getResources().getDimensionPixelSize(R.dimen.dashboard_land_shadow_width);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, ViewGroup.LayoutParams.WRAP_CONTENT); FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(width, ViewGroup.LayoutParams.WRAP_CONTENT);
params.gravity = Gravity.BOTTOM; params.gravity = Gravity.BOTTOM|Gravity.START;
view.findViewById(R.id.control_buttons).setLayoutParams(params); view.findViewById(R.id.control_buttons).setLayoutParams(params);
} }

View file

@ -1,6 +1,7 @@
package net.osmand.plus.routepreparationmenu.cards; package net.osmand.plus.routepreparationmenu.cards;
import android.graphics.Typeface; import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.GradientDrawable;
import android.os.Build; import android.os.Build;
import android.text.SpannableString; import android.text.SpannableString;
@ -389,7 +390,8 @@ public class PublicTransportCard extends BaseCard {
TextView transportStopRouteTextView = (TextView) bageView.findViewById(R.id.transport_stop_route_text); TextView transportStopRouteTextView = (TextView) bageView.findViewById(R.id.transport_stop_route_text);
ImageView transportStopRouteImageView = (ImageView) bageView.findViewById(R.id.transport_stop_route_icon); ImageView transportStopRouteImageView = (ImageView) bageView.findViewById(R.id.transport_stop_route_icon);
transportStopRouteImageView.setImageDrawable(getActiveIcon(R.drawable.ic_action_pedestrian_dark)); Drawable icPedestrian = getActiveIcon(R.drawable.ic_action_pedestrian_dark);
transportStopRouteImageView.setImageDrawable(AndroidUtils.getDrawableForDirection(app, icPedestrian));
transportStopRouteTextView.setText(OsmAndFormatter.getFormattedDuration((int) walkTime, app)); transportStopRouteTextView.setText(OsmAndFormatter.getFormattedDuration((int) walkTime, app));
GradientDrawable gradientDrawableBg = (GradientDrawable) bageView.getBackground(); GradientDrawable gradientDrawableBg = (GradientDrawable) bageView.getBackground();
gradientDrawableBg.setColor(activeColor); gradientDrawableBg.setColor(activeColor);
@ -413,7 +415,8 @@ public class PublicTransportCard extends BaseCard {
private View createArrow() { private View createArrow() {
LinearLayout container = new LinearLayout(app); LinearLayout container = new LinearLayout(app);
ImageView arrow = new ImageView(app); ImageView arrow = new ImageView(app);
arrow.setImageDrawable(getContentIcon(R.drawable.ic_action_arrow_forward_16)); Drawable icArrow = getContentIcon(R.drawable.ic_action_arrow_forward_16);
arrow.setImageDrawable(AndroidUtils.getDrawableForDirection(app, icArrow));
container.addView(arrow, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, AndroidUtils.dpToPx(app, 28))); container.addView(arrow, new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, AndroidUtils.dpToPx(app, 28)));
return container; return container;
} }

View file

@ -28,6 +28,7 @@ import android.view.View;
import android.view.WindowManager; import android.view.WindowManager;
import android.widget.Toast; import android.widget.Toast;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil; import net.osmand.PlatformUtil;
import net.osmand.access.AccessibilityActionsProvider; import net.osmand.access.AccessibilityActionsProvider;
import net.osmand.core.android.MapRendererView; import net.osmand.core.android.MapRendererView;
@ -632,7 +633,8 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
} else if (mapPosition == OsmandSettings.LANDSCAPE_MIDDLE_RIGHT_CONSTANT) { } else if (mapPosition == OsmandSettings.LANDSCAPE_MIDDLE_RIGHT_CONSTANT) {
ratiox = 0.7f; ratiox = 0.7f;
} else { } else {
ratiox = mapPositionX == 0 ? 0.5f : 0.75f; boolean isLayoutRtl = AndroidUtils.isLayoutRtl(application);
ratiox = mapPositionX == 0 ? 0.5f : (isLayoutRtl ? 0.25f : 0.75f);
} }
final int cy = (int) (ratioy * view.getHeight()); final int cy = (int) (ratioy * view.getHeight());
final int cx = (int) (ratiox * view.getWidth()); final int cx = (int) (ratiox * view.getWidth());

View file

@ -6,10 +6,11 @@ import android.util.AttributeSet;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import net.osmand.AndroidUtils;
public class FlowLayout extends ViewGroup { public class FlowLayout extends ViewGroup {
private int line_height; private int line_height;
private boolean rtl = false;
public static class LayoutParams extends ViewGroup.LayoutParams { public static class LayoutParams extends ViewGroup.LayoutParams {
@ -91,12 +92,10 @@ public class FlowLayout extends ViewGroup {
@Override @Override
protected void onLayout(boolean changed, int l, int t, int r, int b) { protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
rtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
}
final int count = getChildCount(); final int count = getChildCount();
final int width = r - l; final int width = r - l;
int xpos = rtl ? width - getPaddingRight() : getPaddingLeft(); boolean isLayoutRtl = AndroidUtils.isLayoutRtl(getContext());
int xpos = isLayoutRtl ? width - getPaddingRight() : getPaddingLeft();
int ypos = getPaddingTop(); int ypos = getPaddingTop();
for (int i = 0; i < count; i++) { for (int i = 0; i < count; i++) {
final View child = getChildAt(i); final View child = getChildAt(i);
@ -104,13 +103,13 @@ public class FlowLayout extends ViewGroup {
final int childw = child.getMeasuredWidth(); final int childw = child.getMeasuredWidth();
final int childh = child.getMeasuredHeight(); final int childh = child.getMeasuredHeight();
final LayoutParams lp = (LayoutParams) child.getLayoutParams(); final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (rtl) { if (isLayoutRtl) {
if (xpos - childw < l) { if (xpos - childw < l) {
xpos = width - getPaddingRight(); xpos = width - getPaddingRight();
ypos += line_height; ypos += line_height;
} }
child.layout(xpos - childw, ypos, xpos, ypos + childh); child.layout(xpos - childw, ypos, xpos, ypos + childh);
xpos -= childw - lp.horizontal_spacing; xpos -= childw + lp.horizontal_spacing;
} else { } else {
if (xpos + childw > width) { if (xpos + childw > width) {
xpos = getPaddingLeft(); xpos = getPaddingLeft();