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:minHeight="@dimen/list_item_height"
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
android:id="@+id/check_local_index"
android:layout_width="wrap_content"

View file

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

View file

@ -21,7 +21,9 @@
android:descendantFocusability="blocksDescendants"
android:orientation="horizontal"
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
android:id="@+id/icon"

View file

@ -34,6 +34,7 @@
<attr name="ctx_menu_divider" format="reference" />
<attr name="bottom_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="dashboard_divider" format="reference" />

View file

@ -20,17 +20,19 @@
<item name="typeface">@string/font_roboto_medium</item>
<item name="android:textColor">?android:textColorSecondary</item>
<item name="android:layout_marginLeft">@dimen/subHeaderMarginLeft</item>
<item name="android:layout_marginStart">@dimen/subHeaderMarginLeft</item>
</style>
<style name="DashboardGeneralButton">
<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_gravity">center_vertical</item>
<item name="android:textSize">@dimen/default_sub_text_size</item>
<item name="typeface">@string/font_roboto_medium</item>
<item name="android:textColor">?attr/dashboard_general_button_text_color</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>
</style>
@ -430,6 +432,7 @@
<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="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="dashboard_divider">@color/divider_color_dark</item>
<item name="divider_color">@color/divider_color_dark</item>
@ -683,7 +686,9 @@
<style name="create_poi_text_field">
<item name="android:layout_marginTop">8dp</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_marginStart">68dp</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_weight">1</item>
@ -692,6 +697,7 @@
<style name="edit_poi_imageview_style">
<item name="android:layout_marginTop">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_height">wrap_content</item>
</style>

View file

@ -14,6 +14,7 @@ import android.graphics.Matrix;
import android.graphics.Paint;
import android.graphics.PointF;
import android.graphics.Typeface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ClipDrawable;
import android.graphics.drawable.Drawable;
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) {
if (isSupportRTL()) {
view.setPaddingRelative(start, top, end, bottom);
@ -684,14 +692,67 @@ public class AndroidUtils {
}
public static int getNavigationIconResId(@NonNull Context ctx) {
return getLayoutDirection(ctx) == ViewCompat.LAYOUT_DIRECTION_RTL ?
R.drawable.ic_arrow_forward : R.drawable.ic_arrow_back;
return isLayoutRtl(ctx) ? 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() {
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) {
ArrayList<View> result = new ArrayList<>();
for (int i = 0; i < vg.getChildCount(); i++) {

View file

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

View file

@ -23,7 +23,6 @@ import android.view.WindowManager;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import androidx.annotation.ColorInt;
@ -619,10 +618,10 @@ public class UiUtilities {
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) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
AndroidUtils.setMargins(p, s, t, e, b);
v.requestLayout();
}
}

View file

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

View file

@ -117,7 +117,7 @@ public class StartGPSStatus extends OsmAndAction {
final AppCompatCheckBox cb = new AppCompatCheckBox(activity);
cb.setText(R.string.shared_string_remember_my_choice);
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.setPadding(dp8, 0, 0, 0);
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;
if (isSingleFragment()) {
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.setLayoutParams(new FrameLayout.LayoutParams(getLandscapeWidth(), ViewGroup.LayoutParams.MATCH_PARENT));
} else {

View file

@ -29,7 +29,8 @@ public class DashSearchFragment extends DashBaseFragment {
View view = getActivity().getLayoutInflater().inflate(R.layout.dash_search_fragment, container, false);
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));
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) {
int topPadPx = mapActivity.getResources().getDimensionPixelSize(R.dimen.dashboard_map_top_padding);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(btnSizePx, btnSizePx);
int marginRight = btnSizePx / 4;
params.setMargins(0, landscape ? 0 : topPadPx - 2 * btnSizePx, marginRight, landscape ? marginRight : 0);
params.gravity = landscape ? Gravity.BOTTOM | Gravity.RIGHT : Gravity.TOP | Gravity.RIGHT;
int marginEnd = btnSizePx / 4;
AndroidUtils.setMargins(params, 0, landscape ? 0 : topPadPx - 2 * btnSizePx, marginEnd, landscape ? marginEnd : 0);
params.gravity = landscape ? Gravity.BOTTOM | Gravity.END : Gravity.TOP | Gravity.END;
return params;
}

View file

@ -1112,7 +1112,7 @@ public class MenuBuilder {
} else {
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.setEllipsize(TextUtils.TruncateAt.END);

View file

@ -3,6 +3,7 @@ package net.osmand.plus.mapcontextmenu.other;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@ -195,7 +196,10 @@ public class TrackDetailsMenuFragment extends BaseOsmAndFragment {
if (!landscapeLayout) {
AndroidUtils.setBackground(ctx, mainView, nightMode, R.drawable.bg_bottom_menu_light, R.drawable.bg_bottom_menu_dark);
} 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);

View file

@ -296,7 +296,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
undoBtn = ((ImageButton) mainView.findViewById(R.id.undo_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() {
@Override
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() {
@Override
public void onClick(View view) {

View file

@ -1,5 +1,6 @@
package net.osmand.plus.measurementtool;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.view.ContextThemeWrapper;
@ -7,6 +8,10 @@ import android.view.MotionEvent;
import android.view.View;
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.base.MenuBottomSheetDialogFragment;
import net.osmand.plus.base.bottomsheetmenu.BaseBottomSheetItem;
@ -26,6 +31,11 @@ public class SaveAsNewTrackBottomSheetDialogFragment extends MenuBottomSheetDial
@Override
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 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 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_day);
lineImage.setImageResource(nightMode
Drawable lineDrawable = ContextCompat.getDrawable(app, nightMode
? R.drawable.img_help_trip_track_night
: 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);
lineImage.setOnClickListener(saveAsLineOnClickListener);

View file

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

View file

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

View file

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

View file

@ -16,6 +16,7 @@ import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.TypedValue;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@ -247,6 +248,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
});
EditText poiNameEditText = (EditText) view.findViewById(R.id.poiNameEditText);
AndroidUtils.setTextHorizontalGravity(poiNameEditText, Gravity.START);
poiNameEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
@ -273,6 +275,7 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
AndroidUtils.showSoftKeyboard(poiNameEditText);
poiTypeTextInputLayout = (TextInputLayout) view.findViewById(R.id.poiTypeTextInputLayout);
poiTypeEditText = (AutoCompleteTextView) view.findViewById(R.id.poiTypeEditText);
AndroidUtils.setTextHorizontalGravity(poiTypeEditText, Gravity.START);
poiTypeEditText.setText(editPoiData.getPoiTypeString());
poiTypeEditText.addTextChangedListener(new TextWatcher() {
@Override
@ -301,12 +304,26 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
poiTypeEditText.setOnTouchListener(new View.OnTouchListener() {
@Override
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 int DRAWABLE_RIGHT = 2;
if (event.getAction() == MotionEvent.ACTION_UP) {
if (event.getX() >= (editText.getRight()
- editText.getCompoundDrawables()[DRAWABLE_RIGHT].getBounds().width()
- editText.getPaddingRight())) {
final int DRAWABLE_END = 2;
int expandBtnWidth = AndroidUtils.getCompoundDrawables(editText)[DRAWABLE_END].getBounds().width();
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();
if (category != null) {
PoiSubTypeDialogFragment dialogFragment =
@ -319,7 +336,6 @@ public class EditPoiDialogFragment extends BaseOsmAndDialogFragment {
});
dialogFragment.show(getChildFragmentManager(), "PoiSubTypeDialogFragment");
}
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_dark : R.drawable.pages_inactive_dark);
if (i == 0) {
layoutParams.setMargins(itemMargin, 0, itemPadding, 0);
AndroidUtils.setMargins(layoutParams, itemMargin, 0, itemPadding, 0);
} else if (i == routesCount - 1) {
layoutParams.setMargins(0, 0, itemMargin, 0);
AndroidUtils.setMargins(layoutParams, 0, 0, itemMargin, 0);
} else {
layoutParams.setMargins(0, 0, itemPadding, 0);
AndroidUtils.setMargins(layoutParams, 0, 0, itemPadding, 0);
}
itemView.setLayoutParams(layoutParams);
pagesView.addView(itemView);

View file

@ -1004,7 +1004,7 @@ public class MapRouteInfoMenu implements IRouteInformationListener, CardListener
optionsTitle.setVisibility(View.VISIBLE);
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());
} else { // LTR
optionsContainer.setPadding(optionsContainer.getPaddingLeft(), optionsContainer.getPaddingTop(), endPadding, optionsContainer.getPaddingBottom());

View file

@ -128,10 +128,10 @@ public class MapRouteInfoMenuFragment extends ContextMenuFragment {
int widthNoShadow = getLandscapeNoShadowWidth();
modesLayoutToolbar.setLayoutParams(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 appModesView = view.findViewById(R.id.app_modes);
appModesView.setPadding(0, 0, appModesView.getPaddingRight(), 0);
AndroidUtils.setPadding(appModesView, 0, 0, appModesView.getPaddingRight(), 0);
}
}
return view;

View file

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

@ -1,6 +1,7 @@
package net.osmand.plus.routepreparationmenu.cards;
import android.graphics.Typeface;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.GradientDrawable;
import android.os.Build;
import android.text.SpannableString;
@ -389,7 +390,8 @@ public class PublicTransportCard extends BaseCard {
TextView transportStopRouteTextView = (TextView) bageView.findViewById(R.id.transport_stop_route_text);
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));
GradientDrawable gradientDrawableBg = (GradientDrawable) bageView.getBackground();
gradientDrawableBg.setColor(activeColor);
@ -413,7 +415,8 @@ public class PublicTransportCard extends BaseCard {
private View createArrow() {
LinearLayout container = new LinearLayout(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)));
return container;
}

View file

@ -28,6 +28,7 @@ import android.view.View;
import android.view.WindowManager;
import android.widget.Toast;
import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.access.AccessibilityActionsProvider;
import net.osmand.core.android.MapRendererView;
@ -632,7 +633,8 @@ public class OsmandMapTileView implements IMapDownloaderCallback {
} else if (mapPosition == OsmandSettings.LANDSCAPE_MIDDLE_RIGHT_CONSTANT) {
ratiox = 0.7f;
} 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 cx = (int) (ratiox * view.getWidth());

View file

@ -6,10 +6,11 @@ import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import net.osmand.AndroidUtils;
public class FlowLayout extends ViewGroup {
private int line_height;
private boolean rtl = false;
public static class LayoutParams extends ViewGroup.LayoutParams {
@ -91,12 +92,10 @@ public class FlowLayout extends ViewGroup {
@Override
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 width = r - l;
int xpos = rtl ? width - getPaddingRight() : getPaddingLeft();
boolean isLayoutRtl = AndroidUtils.isLayoutRtl(getContext());
int xpos = isLayoutRtl ? width - getPaddingRight() : getPaddingLeft();
int ypos = getPaddingTop();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
@ -104,13 +103,13 @@ public class FlowLayout extends ViewGroup {
final int childw = child.getMeasuredWidth();
final int childh = child.getMeasuredHeight();
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
if (rtl) {
if (isLayoutRtl) {
if (xpos - childw < l) {
xpos = width - getPaddingRight();
ypos += line_height;
}
child.layout(xpos - childw, ypos, xpos, ypos + childh);
xpos -= childw - lp.horizontal_spacing;
xpos -= childw + lp.horizontal_spacing;
} else {
if (xpos + childw > width) {
xpos = getPaddingLeft();