diff --git a/OsmAnd/res/drawable-hdpi/ic_action_mode_back.png b/OsmAnd/res/drawable-hdpi/ic_action_mode_back.png
deleted file mode 100644
index 6c36eae2f4..0000000000
Binary files a/OsmAnd/res/drawable-hdpi/ic_action_mode_back.png and /dev/null differ
diff --git a/OsmAnd/res/drawable-xhdpi/ic_action_mode_back.png b/OsmAnd/res/drawable-xhdpi/ic_action_mode_back.png
deleted file mode 100644
index 27bdcb79e3..0000000000
Binary files a/OsmAnd/res/drawable-xhdpi/ic_action_mode_back.png and /dev/null differ
diff --git a/OsmAnd/res/drawable-xxhdpi/ic_action_mode_back.png b/OsmAnd/res/drawable-xxhdpi/ic_action_mode_back.png
deleted file mode 100644
index c2d6a542cd..0000000000
Binary files a/OsmAnd/res/drawable-xxhdpi/ic_action_mode_back.png and /dev/null differ
diff --git a/OsmAnd/res/drawable-xxxhdpi/ic_action_mode_back.png b/OsmAnd/res/drawable-xxxhdpi/ic_action_mode_back.png
deleted file mode 100644
index 70c2040210..0000000000
Binary files a/OsmAnd/res/drawable-xxxhdpi/ic_action_mode_back.png and /dev/null differ
diff --git a/OsmAnd/res/drawable/bg_right_menu_dark.xml b/OsmAnd/res/drawable/bg_right_menu_dark.xml
new file mode 100644
index 0000000000..8ee6bc688b
--- /dev/null
+++ b/OsmAnd/res/drawable/bg_right_menu_dark.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/drawable/bg_right_menu_light.xml b/OsmAnd/res/drawable/bg_right_menu_light.xml
new file mode 100644
index 0000000000..d277dde63e
--- /dev/null
+++ b/OsmAnd/res/drawable/bg_right_menu_light.xml
@@ -0,0 +1,12 @@
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml b/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml
index 4463a2d1a6..ab5e850dd8 100644
--- a/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml
+++ b/OsmAnd/res/layout-land/fragment_direction_indication_dialog.xml
@@ -20,7 +20,9 @@
android:layout_height="@dimen/dashboard_map_toolbar"
android:minHeight="@dimen/dashboard_map_toolbar"
app:contentInsetLeft="54dp"
- app:contentInsetStart="54dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="72dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
diff --git a/OsmAnd/res/layout/bottom_sheet_item_toolbar_title.xml b/OsmAnd/res/layout/bottom_sheet_item_toolbar_title.xml
index dfc6c95148..c4cc113ff6 100644
--- a/OsmAnd/res/layout/bottom_sheet_item_toolbar_title.xml
+++ b/OsmAnd/res/layout/bottom_sheet_item_toolbar_title.xml
@@ -7,7 +7,9 @@
android:layout_height="@dimen/bottom_sheet_selected_item_title_height"
android:minHeight="@dimen/bottom_sheet_selected_item_title_height"
osmand:contentInsetLeft="54dp"
- osmand:contentInsetStart="54dp">
+ osmand:contentInsetStart="54dp"
+ osmand:contentInsetRight="0dp"
+ osmand:contentInsetEnd="0dp">
-
@@ -31,7 +31,7 @@
android:textColor="@color/gpx_chart_blue"
android:textStyle="bold"
android:ellipsize="end"
- android:singleLine="true"/>
+ android:maxLines="1"/>
+ android:maxLines="1"/>
@@ -74,7 +74,7 @@
android:textColor="@color/gpx_chart_orange"
android:textStyle="bold"
android:ellipsize="end"
- android:singleLine="true"/>
+ android:maxLines="1"/>
+ android:maxLines="1"/>
@@ -109,7 +109,7 @@
android:textColor="@color/gpx_chart_green"
android:textStyle="bold"
android:ellipsize="end"
- android:singleLine="true"/>
+ android:maxLines="1"/>
+ android:maxLines="1"/>
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/OsmAnd/res/layout/dashboard_toolbar.xml b/OsmAnd/res/layout/dashboard_toolbar.xml
index c893d6c493..59317ed639 100644
--- a/OsmAnd/res/layout/dashboard_toolbar.xml
+++ b/OsmAnd/res/layout/dashboard_toolbar.xml
@@ -8,7 +8,9 @@
android:layout_height="@dimen/dashboard_map_toolbar"
android:background="@color/app_bar_color_light"
app:contentInsetLeft="4dp"
- app:contentInsetStart="4dp">
+ app:contentInsetStart="4dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="@dimen/settings_divider_margin_start"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp"/>
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ android:src="@drawable/ic_arrow_back"/>
+ osmand:contentInsetStart="54dp"
+ osmand:contentInsetRight="0dp"
+ osmand:contentInsetEnd="0dp">
+ app:contentInsetStart="0dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ android:src="@drawable/ic_arrow_back" />
+ app:contentInsetStart="0dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ android:src="@drawable/ic_arrow_back" />
+ app:contentInsetStart="72dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp" />
diff --git a/OsmAnd/res/layout/map_context_menu_fragment.xml b/OsmAnd/res/layout/map_context_menu_fragment.xml
index 6089fbc5e2..6c87325935 100644
--- a/OsmAnd/res/layout/map_context_menu_fragment.xml
+++ b/OsmAnd/res/layout/map_context_menu_fragment.xml
@@ -548,7 +548,9 @@
android:layout_height="@dimen/dashboard_map_toolbar"
android:background="@color/app_bar_color_light"
app:contentInsetLeft="4dp"
- app:contentInsetStart="4dp">
+ app:contentInsetStart="4dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ android:src="@drawable/ic_arrow_back"/>
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp"/>
+ android:paddingStart="@dimen/list_content_padding"
+ android:paddingRight="0dp"
+ android:paddingEnd="0dp">
+
+ app:contentInsetStart="72dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
diff --git a/OsmAnd/res/layout/profile_preference_toolbar.xml b/OsmAnd/res/layout/profile_preference_toolbar.xml
index 45e7db5c82..0460fca8a2 100644
--- a/OsmAnd/res/layout/profile_preference_toolbar.xml
+++ b/OsmAnd/res/layout/profile_preference_toolbar.xml
@@ -7,6 +7,8 @@
android:minHeight="@dimen/dashboard_map_toolbar"
osmand:contentInsetLeft="0dp"
osmand:contentInsetStart="0dp"
+ osmand:contentInsetRight="0dp"
+ osmand:contentInsetEnd="0dp"
osmand:theme="@style/ThemeOverlay.AppCompat.ActionBar">
+ osmand:contentInsetStart="0dp"
+ osmand:contentInsetRight="0dp"
+ osmand:contentInsetEnd="0dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
@@ -40,6 +42,8 @@
android:visibility="gone"
app:contentInsetLeft="54dp"
app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp"
tools:visibility="visible">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
diff --git a/OsmAnd/res/layout/search_history_list_item.xml b/OsmAnd/res/layout/search_history_list_item.xml
index 3d639352d7..bf93b9ac4c 100644
--- a/OsmAnd/res/layout/search_history_list_item.xml
+++ b/OsmAnd/res/layout/search_history_list_item.xml
@@ -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">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+ app:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
diff --git a/OsmAnd/res/layout/wikipedia_dialog_fragment.xml b/OsmAnd/res/layout/wikipedia_dialog_fragment.xml
index dbc5444ea2..37429ac0eb 100644
--- a/OsmAnd/res/layout/wikipedia_dialog_fragment.xml
+++ b/OsmAnd/res/layout/wikipedia_dialog_fragment.xml
@@ -17,7 +17,9 @@
android:gravity="center_vertical"
android:minHeight="@dimen/toolbar_height"
osmand:contentInsetLeft="54dp"
- osmand:contentInsetStart="54dp">
+ osmand:contentInsetStart="54dp"
+ osmand:contentInsetRight="0dp"
+ osmand:contentInsetEnd="0dp">
+ osmand:contentInsetStart="54dp"
+ app:contentInsetRight="0dp"
+ app:contentInsetEnd="0dp">
+
diff --git a/OsmAnd/res/values/styles.xml b/OsmAnd/res/values/styles.xml
index 8298bc9957..3c0411b035 100644
--- a/OsmAnd/res/values/styles.xml
+++ b/OsmAnd/res/values/styles.xml
@@ -20,17 +20,19 @@
- @string/font_roboto_medium
- ?android:textColorSecondary
- @dimen/subHeaderMarginLeft
+ - @dimen/subHeaderMarginLeft
@@ -162,7 +164,7 @@
- @drawable/context_menu_controller_text_color_light
- @color/ctx_menu_buttons_divider_light
- @color/activity_background_color_dark
- - @drawable/ic_action_mode_back
+ - @drawable/ic_arrow_back
- @style/WhiteActionMode
- @color/color_white
- @drawable/switch_ex_background_light
@@ -194,7 +196,7 @@
- @color/app_bar_color_light
- @style/Widget.Styled.ActionBarLight
- - @drawable/ic_action_mode_back
+ - @drawable/ic_arrow_back
- @style/WhiteActionMode
- @color/color_white
- @style/OverflowMenuButton
@@ -430,6 +432,7 @@
- @drawable/bg_map_context_menu_dark
- @drawable/bg_bottom_menu_dark
- @drawable/bg_left_menu_dark
+ - @drawable/bg_right_menu_dark
- @drawable/bg_point_editor_view_dark
- @color/divider_color_dark
- @color/divider_color_dark
@@ -683,7 +686,9 @@
diff --git a/OsmAnd/src/net/osmand/AndroidUtils.java b/OsmAnd/src/net/osmand/AndroidUtils.java
index f16cc52e71..be5aa79e6c 100644
--- a/OsmAnd/src/net/osmand/AndroidUtils.java
+++ b/OsmAnd/src/net/osmand/AndroidUtils.java
@@ -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 getChildrenViews(ViewGroup vg) {
ArrayList result = new ArrayList<>();
for (int i = 0; i < vg.getChildCount(); i++) {
diff --git a/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java b/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java
index 527c1f6f60..30fa5381c6 100644
--- a/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java
+++ b/OsmAnd/src/net/osmand/SecondSplashScreenFragment.java
@@ -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);
diff --git a/OsmAnd/src/net/osmand/plus/UiUtilities.java b/OsmAnd/src/net/osmand/plus/UiUtilities.java
index 2c554c51da..30da1c855e 100644
--- a/OsmAnd/src/net/osmand/plus/UiUtilities.java
+++ b/OsmAnd/src/net/osmand/plus/UiUtilities.java
@@ -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;
@@ -620,10 +619,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();
}
}
diff --git a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
index 77a0af2fca..8e343fe5ce 100644
--- a/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
+++ b/OsmAnd/src/net/osmand/plus/activities/MapActivity.java
@@ -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();
}
-
}
}
}
diff --git a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java
index 530c769491..0c64258825 100644
--- a/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java
+++ b/OsmAnd/src/net/osmand/plus/activities/actions/StartGPSStatus.java
@@ -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);
diff --git a/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java
index 1e0b10ee31..343594a990 100644
--- a/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java
+++ b/OsmAnd/src/net/osmand/plus/base/ContextMenuFragment.java
@@ -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 {
diff --git a/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java b/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java
index cba81e6113..c4290f8355 100644
--- a/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/chooseplan/ChoosePlanDialogFragment.java
@@ -16,6 +16,7 @@ import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
+import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
@@ -187,7 +188,9 @@ public abstract class ChoosePlanDialogFragment extends BaseOsmAndDialogFragment
}
View view = inflate(R.layout.purchase_dialog_fragment, container);
- view.findViewById(R.id.button_back).setOnClickListener(new OnClickListener() {
+ ImageView buttonBack = view.findViewById(R.id.button_back);
+ buttonBack.setImageResource(AndroidUtils.getNavigationIconResId(ctx));
+ buttonBack.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashSearchFragment.java b/OsmAnd/src/net/osmand/plus/dashboard/DashSearchFragment.java
index 71ae75da3b..322521a880 100644
--- a/OsmAnd/src/net/osmand/plus/dashboard/DashSearchFragment.java
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashSearchFragment.java
@@ -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() {
diff --git a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
index 243750ecd8..fca947ca37 100644
--- a/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
+++ b/OsmAnd/src/net/osmand/plus/dashboard/DashboardOnMap.java
@@ -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;
}
diff --git a/OsmAnd/src/net/osmand/plus/dialogs/HelpArticleDialogFragment.java b/OsmAnd/src/net/osmand/plus/dialogs/HelpArticleDialogFragment.java
index 996ed1e80f..06a272263d 100644
--- a/OsmAnd/src/net/osmand/plus/dialogs/HelpArticleDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/dialogs/HelpArticleDialogFragment.java
@@ -14,6 +14,7 @@ import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.DialogFragment;
+import net.osmand.AndroidUtils;
import net.osmand.PlatformUtil;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandSettings;
@@ -58,6 +59,7 @@ public class HelpArticleDialogFragment extends DialogFragment {
final View view = inflater.inflate(R.layout.fragment_help_article, container, false);
Toolbar toolbar = (Toolbar) view.findViewById(R.id.toolbar);
+ toolbar.setNavigationIcon(AndroidUtils.getNavigationIconResId(getContext()));
toolbar.setNavigationContentDescription(R.string.access_shared_string_navigate_up);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/liveupdates/SubscriptionFragment.java b/OsmAnd/src/net/osmand/plus/liveupdates/SubscriptionFragment.java
index c51e62c988..7f8b0e4abc 100644
--- a/OsmAnd/src/net/osmand/plus/liveupdates/SubscriptionFragment.java
+++ b/OsmAnd/src/net/osmand/plus/liveupdates/SubscriptionFragment.java
@@ -2,6 +2,7 @@ package net.osmand.plus.liveupdates;
import android.app.Activity;
import android.app.ProgressDialog;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -98,7 +99,7 @@ public class SubscriptionFragment extends BaseOsmAndDialogFragment implements In
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
-
+ OsmandApplication app = getMyApplication();
String userName = settings.BILLING_USER_NAME.get();
String email = settings.BILLING_USER_EMAIL.get();
String countryDownloadName = settings.BILLING_USER_COUNTRY_DOWNLOAD_NAME.get();
@@ -122,7 +123,8 @@ public class SubscriptionFragment extends BaseOsmAndDialogFragment implements In
View view = inflater.inflate(R.layout.subscription_fragment, container, false);
ImageButton closeButton = (ImageButton) view.findViewById(R.id.closeButton);
- closeButton.setImageDrawable(getMyApplication().getUIUtilities().getIcon(R.drawable.ic_action_mode_back));
+ Drawable icBack = app.getUIUtilities().getIcon(AndroidUtils.getNavigationIconResId(app));
+ closeButton.setImageDrawable(icBack);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java
index ab8f716b4f..2ac283d347 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MapContextMenuFragment.java
@@ -320,7 +320,8 @@ public class MapContextMenuFragment extends BaseOsmAndFragment implements Downlo
if (menu.isLandscapeLayout()) {
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(menu.getLandscapeWidthPx(),
ViewGroup.LayoutParams.MATCH_PARENT));
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java
index 12ed950536..aa2d5de59b 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/MenuBuilder.java
@@ -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);
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportRouteController.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportRouteController.java
index 0b08118495..585ba61f62 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportRouteController.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/controllers/TransportRouteController.java
@@ -6,6 +6,7 @@ import android.view.View.OnClickListener;
import androidx.annotation.NonNull;
+import net.osmand.AndroidUtils;
import net.osmand.binary.OsmandOdb.TransportRouteStop;
import net.osmand.data.LatLon;
import net.osmand.data.PointDescription;
@@ -29,8 +30,10 @@ public class TransportRouteController extends MenuController {
super(new MenuBuilder(mapActivity), pointDescription, mapActivity);
this.transportRoute = transportRoute;
builder.setShowOnlinePhotos(false);
+ int navigationIconResId = AndroidUtils.getNavigationIconResId(mapActivity);
toolbarController = new ContextMenuToolbarController(this);
toolbarController.setTitle(getNameStr());
+ toolbarController.setBackBtnIconIds(navigationIconResId, navigationIconResId);
toolbarController.setOnBackButtonClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -66,7 +69,6 @@ public class TransportRouteController extends MenuController {
}
};
leftTitleButtonController.caption = mapActivity.getString(R.string.shared_string_previous);
- leftTitleButtonController.leftIconId = R.drawable.ic_arrow_back;
rightTitleButtonController = new TitleButtonController() {
@Override
@@ -78,7 +80,14 @@ public class TransportRouteController extends MenuController {
}
};
rightTitleButtonController.caption = mapActivity.getString(R.string.shared_string_next);
- rightTitleButtonController.rightIconId = R.drawable.ic_arrow_forward;
+
+ if (AndroidUtils.isLayoutRtl(mapActivity)) {
+ leftTitleButtonController.rightIconId = R.drawable.ic_arrow_forward;
+ rightTitleButtonController.leftIconId = R.drawable.ic_arrow_back;
+ } else {
+ leftTitleButtonController.leftIconId = R.drawable.ic_arrow_back;
+ rightTitleButtonController.rightIconId = R.drawable.ic_arrow_forward;
+ }
}
@NonNull
diff --git a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenuFragment.java b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenuFragment.java
index 1ee6d9ee03..fad7483291 100644
--- a/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenuFragment.java
+++ b/OsmAnd/src/net/osmand/plus/mapcontextmenu/other/TrackDetailsMenuFragment.java
@@ -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);
diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkerSelectionFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkerSelectionFragment.java
index fd63e7bd3e..993c5c1d93 100644
--- a/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkerSelectionFragment.java
+++ b/OsmAnd/src/net/osmand/plus/mapmarkers/MapMarkerSelectionFragment.java
@@ -1,6 +1,7 @@
package net.osmand.plus.mapmarkers;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
@@ -81,7 +82,8 @@ public class MapMarkerSelectionFragment extends BaseOsmAndDialogFragment {
View view = inflater.inflate(R.layout.map_marker_selection_fragment, container, false);
ImageButton closeButton = (ImageButton) view.findViewById(R.id.closeButton);
- closeButton.setImageDrawable(getMyApplication().getUIUtilities().getIcon(R.drawable.ic_action_mode_back));
+ Drawable icBack = app.getUIUtilities().getIcon(AndroidUtils.getNavigationIconResId(app));
+ closeButton.setImageDrawable(icBack);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
diff --git a/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java b/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java
index 6c23918c90..6446258faa 100644
--- a/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java
+++ b/OsmAnd/src/net/osmand/plus/mapmarkers/PlanRouteFragment.java
@@ -200,8 +200,9 @@ public class PlanRouteFragment extends BaseOsmAndFragment implements OsmAndLocat
}
});
+ int navigationIconResId = AndroidUtils.getNavigationIconResId(mapActivity);
toolbarController = new PlanRouteToolbarController();
- toolbarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
+ toolbarController.setBackBtnIconIds(navigationIconResId, navigationIconResId);
toolbarController.setTitle(getString(R.string.plan_route));
toolbarController.setOnBackButtonClickListener(new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
index c084448d7d..1299018bda 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/MeasurementToolFragment.java
@@ -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) {
@@ -394,7 +396,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
toolBarController = new MeasurementToolBarController(newGpxData);
if (editingCtx.getSelectedPointPosition() != -1) {
- toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
+ int navigationIconResId = AndroidUtils.getNavigationIconResId(mapActivity);
+ toolBarController.setBackBtnIconIds(navigationIconResId, navigationIconResId);
} else {
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
}
@@ -971,7 +974,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
private void switchMovePointMode(boolean enable) {
if (enable) {
- toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
+ int navigationIconResId = AndroidUtils.getNavigationIconResId(getMapActivity());
+ toolBarController.setBackBtnIconIds(navigationIconResId, navigationIconResId);
} else {
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
}
@@ -990,7 +994,8 @@ public class MeasurementToolFragment extends BaseOsmAndFragment {
private void switchAddPointBeforeAfterMode(boolean enable) {
if (enable) {
- toolBarController.setBackBtnIconIds(R.drawable.ic_action_mode_back, R.drawable.ic_action_mode_back);
+ int navigationIconResId = AndroidUtils.getNavigationIconResId(getMapActivity());
+ toolBarController.setBackBtnIconIds(navigationIconResId, navigationIconResId);
} else {
toolBarController.setBackBtnIconIds(R.drawable.ic_action_remove_dark, R.drawable.ic_action_remove_dark);
}
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/RecyclerViewFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/RecyclerViewFragment.java
index 771e641079..fca7c80377 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/RecyclerViewFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/RecyclerViewFragment.java
@@ -57,7 +57,8 @@ public class RecyclerViewFragment extends Fragment {
final int backgroundColor = ContextCompat.getColor(getActivity(),
nightMode ? R.color.activity_background_color_dark : R.color.activity_background_color_light);
final TypedValue typedValueAttr = new TypedValue();
- getActivity().getTheme().resolveAttribute(R.attr.left_menu_view_bg, typedValueAttr, true);
+ int bgAttrId = AndroidUtils.isLayoutRtl(getActivity()) ? R.attr.right_menu_view_bg : R.attr.left_menu_view_bg;
+ getActivity().getTheme().resolveAttribute(bgAttrId, typedValueAttr, true);
parent = new FrameLayout(mapActivity);
parent.setLayoutParams(new LayoutParams(width + AndroidUtils.dpToPx(getActivity(), 16), height));
diff --git a/OsmAnd/src/net/osmand/plus/measurementtool/SaveAsNewTrackBottomSheetDialogFragment.java b/OsmAnd/src/net/osmand/plus/measurementtool/SaveAsNewTrackBottomSheetDialogFragment.java
index b2498bda2f..a3a1741192 100644
--- a/OsmAnd/src/net/osmand/plus/measurementtool/SaveAsNewTrackBottomSheetDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/measurementtool/SaveAsNewTrackBottomSheetDialogFragment.java
@@ -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,8 @@ import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
+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 +29,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 +45,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 = app.getUIUtilities().getIcon(nightMode
? R.drawable.img_help_trip_route_points_night
: R.drawable.img_help_trip_route_points_day);
- lineImage.setImageResource(nightMode
+ Drawable lineDrawable = app.getUIUtilities().getIcon(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);
diff --git a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
index cd92b36ab9..8dbd3d3d0f 100644
--- a/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
+++ b/OsmAnd/src/net/osmand/plus/monitoring/OsmandMonitoringPlugin.java
@@ -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() {
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java
index e640f9da50..541df2c7f6 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/AdvancedEditPoiFragment.java
@@ -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)
});
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/BasicEditPoiFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/BasicEditPoiFragment.java
index c9455a9c15..dcf4846f7f 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/BasicEditPoiFragment.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/BasicEditPoiFragment.java
@@ -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
diff --git a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java
index b4c376f0cd..ce527c5ca0 100644
--- a/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java
+++ b/OsmAnd/src/net/osmand/plus/osmedit/EditPoiDialogFragment.java
@@ -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;
}
}
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/ChooseRouteFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/ChooseRouteFragment.java
index 77f4a1d442..4ecc22f17b 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/ChooseRouteFragment.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/ChooseRouteFragment.java
@@ -147,7 +147,8 @@ public class ChooseRouteFragment extends BaseOsmAndFragment implements ContextMe
solidToolbarView.setLayoutParams(new FrameLayout.LayoutParams(width, ViewGroup.LayoutParams.WRAP_CONTENT));
solidToolbarView.setVisibility(View.VISIBLE);
final TypedValue typedValueAttr = new TypedValue();
- mapActivity.getTheme().resolveAttribute(R.attr.left_menu_view_bg, typedValueAttr, true);
+ int bgAttrId = AndroidUtils.isLayoutRtl(mapActivity) ? R.attr.right_menu_view_bg : R.attr.left_menu_view_bg;
+ mapActivity.getTheme().resolveAttribute(bgAttrId, typedValueAttr, true);
view.findViewById(R.id.pager_container).setBackgroundResource(typedValueAttr.resourceId);
view.setLayoutParams(new FrameLayout.LayoutParams(getResources().getDimensionPixelSize(R.dimen.dashboard_land_width), ViewGroup.LayoutParams.MATCH_PARENT));
}
@@ -327,11 +328,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);
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java
index e16c872c91..1358390802 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenu.java
@@ -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());
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java
index b5e610c60b..fb59e8e148 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/MapRouteInfoMenuFragment.java
@@ -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;
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteDetailsFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteDetailsFragment.java
index a645fa64a5..f0a0550400 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteDetailsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/RouteDetailsFragment.java
@@ -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));
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/WaypointsFragment.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/WaypointsFragment.java
index 27918a081e..22ff37b4e7 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/WaypointsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/WaypointsFragment.java
@@ -162,13 +162,14 @@ public class WaypointsFragment extends BaseOsmAndFragment implements ObservableS
if (!portrait) {
final TypedValue typedValueAttr = new TypedValue();
- mapActivity.getTheme().resolveAttribute(R.attr.left_menu_view_bg, typedValueAttr, true);
+ int bgAttrId = AndroidUtils.isLayoutRtl(mapActivity) ? 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(getResources().getDimensionPixelSize(R.dimen.dashboard_land_width), ViewGroup.LayoutParams.MATCH_PARENT));
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);
}
diff --git a/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/PublicTransportCard.java b/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/PublicTransportCard.java
index c0deef7a6b..c75c522219 100644
--- a/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/PublicTransportCard.java
+++ b/OsmAnd/src/net/osmand/plus/routepreparationmenu/cards/PublicTransportCard.java
@@ -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;
}
diff --git a/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuItemsFragment.java b/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuItemsFragment.java
index 2daaeb855d..ab24d4b9cd 100644
--- a/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuItemsFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuItemsFragment.java
@@ -186,7 +186,9 @@ public class ConfigureMenuItemsFragment extends BaseOsmAndFragment
toolbarTitle.setTextColor(nightMode
? getResources().getColor(R.color.text_color_primary_dark)
: getResources().getColor(R.color.list_background_color_dark));
- toolbarButton.setImageDrawable(getPaintedContentIcon(R.drawable.ic_arrow_back, getResources().getColor(R.color.text_color_secondary_light)));
+ toolbarButton.setImageDrawable(getPaintedContentIcon(
+ AndroidUtils.getNavigationIconResId(app),
+ getResources().getColor(R.color.text_color_secondary_light)));
toolbarTitle.setText(screenType.titleRes);
toolbarButton.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuRootFragment.java b/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuRootFragment.java
index a45a72dc11..3588f6af27 100644
--- a/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuRootFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/ConfigureMenuRootFragment.java
@@ -103,7 +103,9 @@ public class ConfigureMenuRootFragment extends BaseOsmAndFragment {
? getResources().getColor(R.color.text_color_primary_dark)
: getResources().getColor(R.color.list_background_color_dark));
toolbarSubTitle.setTextColor(getResources().getColor(R.color.text_color_secondary_light));
- toolbarButton.setImageDrawable(getPaintedContentIcon(R.drawable.ic_arrow_back, getResources().getColor(R.color.text_color_secondary_light)));
+ toolbarButton.setImageDrawable(getPaintedContentIcon(
+ AndroidUtils.getNavigationIconResId(app),
+ getResources().getColor(R.color.text_color_secondary_light)));
toolbarButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
diff --git a/OsmAnd/src/net/osmand/plus/settings/ImportDuplicatesFragment.java b/OsmAnd/src/net/osmand/plus/settings/ImportDuplicatesFragment.java
index 0820b24052..9808881c46 100644
--- a/OsmAnd/src/net/osmand/plus/settings/ImportDuplicatesFragment.java
+++ b/OsmAnd/src/net/osmand/plus/settings/ImportDuplicatesFragment.java
@@ -283,7 +283,8 @@ public class ImportDuplicatesFragment extends BaseOsmAndFragment implements View
private void setupToolbar(Toolbar toolbar) {
toolbar.setTitle(R.string.import_duplicates_title);
- toolbar.setNavigationIcon(getPaintedContentIcon(R.drawable.ic_arrow_back,
+ toolbar.setNavigationIcon(getPaintedContentIcon(
+ AndroidUtils.getNavigationIconResId(app),
nightMode
? getResources().getColor(R.color.active_buttons_and_links_text_dark)
: getResources().getColor(R.color.active_buttons_and_links_text_light)));
diff --git a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java
index 1f4f32c4c2..af1e61053f 100644
--- a/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java
+++ b/OsmAnd/src/net/osmand/plus/views/OsmandMapTileView.java
@@ -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());
diff --git a/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java b/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java
index c59ebb37fa..63a43e56ad 100644
--- a/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java
+++ b/OsmAnd/src/net/osmand/plus/widgets/FlowLayout.java
@@ -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();