diff --git a/app/src/main/java/rebus/header/view/sample/MainActivity.java b/app/src/main/java/rebus/header/view/sample/MainActivity.java index a7a3c38..2622b88 100644 --- a/app/src/main/java/rebus/header/view/sample/MainActivity.java +++ b/app/src/main/java/rebus/header/view/sample/MainActivity.java @@ -123,7 +123,6 @@ public void run() { headerView.setDialogTitle("Choose account"); //headerView.setShowArrow(false); headerView.setFragmentManager(getFragmentManager()); - headerView.setCallback(new HeaderCallback() { @Override diff --git a/app/src/main/res/layout/header_drawer.xml b/app/src/main/res/layout/header_drawer.xml index 658e520..ff1958c 100644 --- a/app/src/main/res/layout/header_drawer.xml +++ b/app/src/main/res/layout/header_drawer.xml @@ -27,7 +27,7 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/header_view" app:hv_add_status_bar_height="true" - app:hv_style="normal" + app:hv_style="compact" app:hv_theme="light" app:hv_highlight_color="@color/colorAccent" app:hv_dialog_title="@string/account" diff --git a/build.gradle b/build.gradle index 765fee3..974f905 100644 --- a/build.gradle +++ b/build.gradle @@ -30,7 +30,7 @@ buildscript { buildTools: "25.0.2", minSdk : 11, targetSdk : 25, - version : "2.0.0-BETA-2", + version : "2.0.0-BETA-3", supportLib: "25.1.0" ] } diff --git a/library/src/main/java/rebus/header/view/HeaderView.java b/library/src/main/java/rebus/header/view/HeaderView.java index 5be1545..999f7d0 100644 --- a/library/src/main/java/rebus/header/view/HeaderView.java +++ b/library/src/main/java/rebus/header/view/HeaderView.java @@ -24,6 +24,7 @@ package rebus.header.view; +import android.annotation.SuppressLint; import android.app.FragmentManager; import android.content.Context; import android.content.res.TypedArray; @@ -102,6 +103,7 @@ public class HeaderView extends ViewGroup implements ProfileChooserCallback { @DrawableRes private int hvAddIconDrawable; private String hvDialogTitle; + private boolean hvIsRTL; private SparseArray profileSparseArray = new SparseArray<>(); private ArrayList itemArrayList = new ArrayList<>(); @@ -535,6 +537,7 @@ private void setupAttributeSet(AttributeSet attrs, int defStyle) { } private void setupResources() { + hvIsRTL = getResources().getBoolean(R.bool.is_right_to_left); statusBarHeight = Utils.getStatusBarHeight(getContext()); hvAvatarDimen = getResources().getDimensionPixelSize(R.dimen.hv_avatar); hvAvatarMiniDimen = getResources().getDimensionPixelSize(R.dimen.hv_avatar_mini); @@ -576,20 +579,22 @@ private void addAvatar() { addView(avatar, 3, layoutParams); } + @SuppressLint("RtlHardcoded") private void addUsername() { username = new TextView(getContext()); username.setTextColor(hvTextColor); username.setTypeface(Typeface.DEFAULT_BOLD); - username.setGravity(Gravity.CENTER_VERTICAL); + username.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); username.setMaxLines(1); username.setEllipsize(TextUtils.TruncateAt.END); addView(username, 4); } + @SuppressLint("RtlHardcoded") private void addEmail() { email = new TextView(getContext()); email.setTextColor(hvTextColor); - email.setGravity(Gravity.CENTER_VERTICAL); + email.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); email.setMaxLines(1); email.setEllipsize(TextUtils.TruncateAt.END); addView(email, 5); @@ -636,53 +641,99 @@ private void addAvatar3() { @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { Log.d(TAG, "onLayout changed [" + changed + "]"); + Log.d(TAG, "is_right_to_left [" + getResources().getBoolean(R.bool.is_right_to_left) + "]"); if (!changed) return; background.layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); if (hvShowGradient) { gradient.layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); } selector.layout(0, 0, getMeasuredWidth(), getMeasuredHeight()); - avatar.layout(hvMarginDimen, - getDimensionFix(hvMarginDimen), - hvMarginDimen + hvAvatarDimen, - getDimensionFix(hvAvatarDimen + hvMarginDimen)); - if (hvStyle == STYLE_NORMAL) { - avatar2.layout(getMeasuredWidth() - hvMarginDimen - hvAvatarMiniDimen, + if (hvIsRTL) { + avatar.layout(getMeasuredWidth() - hvMarginDimen - hvAvatarDimen, getDimensionFix(hvMarginDimen), getMeasuredWidth() - hvMarginDimen, - getDimensionFix(hvAvatarMiniDimen + hvMarginDimen)); - avatar3.layout(avatar2.getLeft() - hvMarginDimen - hvAvatarMiniDimen, + getDimensionFix(hvAvatarDimen + hvMarginDimen)); + if (hvStyle == STYLE_NORMAL) { + avatar2.layout(hvMarginDimen, + getDimensionFix(hvMarginDimen), + hvAvatarMiniDimen + hvMarginDimen, + getDimensionFix(hvAvatarMiniDimen + hvMarginDimen)); + avatar3.layout(avatar2.getRight() + hvMarginDimen, + getDimensionFix(hvMarginDimen), + avatar2.getRight() + hvAvatarMiniDimen + hvMarginDimen, + getDimensionFix(hvAvatarMiniDimen + hvMarginDimen)); + arrow.layout(0, + getMeasuredHeight() - hvArrowDimen, + hvArrowDimen, + getMeasuredHeight()); + username.layout(arrow.getRight(), + avatar.getBottom() + hvMarginDimen, + getMeasuredWidth() - hvMarginDimen, + avatar.getBottom() + hvMarginDimen + hvTextDimen); + email.layout(arrow.getRight(), + username.getBottom(), + getMeasuredWidth() - hvMarginDimen, + username.getBottom() + hvTextDimen); + } + if (hvStyle == STYLE_COMPACT) { + avatar3.layout(0, 0, 0, 0); + avatar2.layout(0, 0, 0, 0); + arrow.layout(0, + getDimensionFix(getMeasuredHeight()) / 2 - hvArrowDimen / 2, + hvArrowDimen, + getDimensionFix(getMeasuredHeight()) / 2 + hvArrowDimen / 2); + username.layout(arrow.getRight(), + getDimensionFix(getMeasuredHeight()) / 2 - hvTextDimen, + avatar.getLeft() - hvMarginDimen, + getDimensionFix(getMeasuredHeight()) / 2); + email.layout(arrow.getRight(), + getDimensionFix(getMeasuredHeight()) / 2, + avatar.getLeft() - hvMarginDimen, + getDimensionFix(getMeasuredHeight()) / 2 + hvTextDimen); + } + } else { + avatar.layout(hvMarginDimen, getDimensionFix(hvMarginDimen), - avatar2.getLeft() - hvMarginDimen, - getDimensionFix(hvAvatarMiniDimen + hvMarginDimen)); - arrow.layout(getMeasuredWidth() - hvArrowDimen, - getMeasuredHeight() - hvArrowDimen, - getMeasuredWidth(), - getMeasuredHeight()); - username.layout(hvMarginDimen, - avatar.getBottom() + hvMarginDimen, - arrow.getLeft(), - avatar.getBottom() + hvMarginDimen + hvTextDimen); - email.layout(hvMarginDimen, - username.getBottom(), - arrow.getLeft(), - username.getBottom() + hvTextDimen); - } - if (hvStyle == STYLE_COMPACT) { - avatar3.layout(0, 0, 0, 0); - avatar2.layout(0, 0, 0, 0); - arrow.layout(getMeasuredWidth() - hvArrowDimen, - getDimensionFix(getMeasuredHeight()) / 2 - hvArrowDimen / 2, - getMeasuredWidth(), - getDimensionFix(getMeasuredHeight()) / 2 + hvArrowDimen / 2); - username.layout(avatar.getRight() + hvMarginDimen, - getDimensionFix(getMeasuredHeight()) / 2 - hvTextDimen, - arrow.getLeft(), - getDimensionFix(getMeasuredHeight()) / 2); - email.layout(avatar.getRight() + hvMarginDimen, - getDimensionFix(getMeasuredHeight()) / 2, - arrow.getLeft(), - getDimensionFix(getMeasuredHeight()) / 2 + hvTextDimen); + hvMarginDimen + hvAvatarDimen, + getDimensionFix(hvAvatarDimen + hvMarginDimen)); + if (hvStyle == STYLE_NORMAL) { + avatar2.layout(getMeasuredWidth() - hvMarginDimen - hvAvatarMiniDimen, + getDimensionFix(hvMarginDimen), + getMeasuredWidth() - hvMarginDimen, + getDimensionFix(hvAvatarMiniDimen + hvMarginDimen)); + avatar3.layout(avatar2.getLeft() - hvMarginDimen - hvAvatarMiniDimen, + getDimensionFix(hvMarginDimen), + avatar2.getLeft() - hvMarginDimen, + getDimensionFix(hvAvatarMiniDimen + hvMarginDimen)); + arrow.layout(getMeasuredWidth() - hvArrowDimen, + getMeasuredHeight() - hvArrowDimen, + getMeasuredWidth(), + getMeasuredHeight()); + username.layout(hvMarginDimen, + avatar.getBottom() + hvMarginDimen, + arrow.getLeft(), + avatar.getBottom() + hvMarginDimen + hvTextDimen); + email.layout(hvMarginDimen, + username.getBottom(), + arrow.getLeft(), + username.getBottom() + hvTextDimen); + } + if (hvStyle == STYLE_COMPACT) { + avatar3.layout(0, 0, 0, 0); + avatar2.layout(0, 0, 0, 0); + arrow.layout(getMeasuredWidth() - hvArrowDimen, + getDimensionFix(getMeasuredHeight()) / 2 - hvArrowDimen / 2, + getMeasuredWidth(), + getDimensionFix(getMeasuredHeight()) / 2 + hvArrowDimen / 2); + username.layout(avatar.getRight() + hvMarginDimen, + getDimensionFix(getMeasuredHeight()) / 2 - hvTextDimen, + arrow.getLeft(), + getDimensionFix(getMeasuredHeight()) / 2); + email.layout(avatar.getRight() + hvMarginDimen, + getDimensionFix(getMeasuredHeight()) / 2, + arrow.getLeft(), + getDimensionFix(getMeasuredHeight()) / 2 + hvTextDimen); + } } } diff --git a/library/src/main/java/rebus/header/view/ProfileChooser.java b/library/src/main/java/rebus/header/view/ProfileChooser.java index 5d6b39e..af8195b 100644 --- a/library/src/main/java/rebus/header/view/ProfileChooser.java +++ b/library/src/main/java/rebus/header/view/ProfileChooser.java @@ -25,6 +25,7 @@ package rebus.header.view; +import android.annotation.SuppressLint; import android.app.Dialog; import android.content.Context; import android.util.SparseArray; @@ -46,10 +47,12 @@ class ProfileChooser extends Dialog { private ProfileChooserCallback callback; + @SuppressLint("RtlHardcoded") ProfileChooser(Context context, SparseArray profileSparseArray, ArrayList items, int accent, boolean showAdd, String titleValue, int icon) { super(context); this.requestWindowFeature(Window.FEATURE_NO_TITLE); this.setContentView(R.layout.hw_account_chooser); + boolean hvIsRTL = context.getResources().getBoolean(R.bool.is_right_to_left); LinearLayout linearLayout = (LinearLayout) findViewById(R.id.hw_profile_container); LinearLayout linearLayout1 = (LinearLayout) findViewById(R.id.hw_action_container); TextView title = (TextView) findViewById(R.id.hw_dialog_title); @@ -57,6 +60,7 @@ class ProfileChooser extends Dialog { add.setImageResource(icon); title.setTextColor(Utils.getTextColorPrimary(context)); title.setText(titleValue); + title.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); add.setVisibility(showAdd ? View.VISIBLE : View.INVISIBLE); add.setColorFilter(Utils.getTextColorPrimary(context)); add.setBackgroundResource(Utils.selectableItemBackgroundBorderless(context)); @@ -96,7 +100,7 @@ public void onClick(View v) { textView.setBackgroundResource(Utils.selectableItemBackground(context)); textView.setPadding(padding, padding / 2, padding, padding / 2); textView.setTextColor(Utils.getTextColorSecondary(context)); - textView.setGravity(Gravity.CENTER_VERTICAL); + textView.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/library/src/main/java/rebus/header/view/ProfileChooserFragment.java b/library/src/main/java/rebus/header/view/ProfileChooserFragment.java index 7c324db..15dc6b6 100644 --- a/library/src/main/java/rebus/header/view/ProfileChooserFragment.java +++ b/library/src/main/java/rebus/header/view/ProfileChooserFragment.java @@ -24,6 +24,7 @@ package rebus.header.view; +import android.annotation.SuppressLint; import android.app.DialogFragment; import android.os.Bundle; import android.support.annotation.Nullable; @@ -53,6 +54,7 @@ public class ProfileChooserFragment extends DialogFragment { private ImageView add; private ProfileChooserCallback callback; + private boolean hvIsRTL; public static ProfileChooserFragment newInstance(SparseArray profileSparseArray, ArrayList items, int accent, boolean showAdd, String titleValue, int icon) { Bundle bundle = new Bundle(); @@ -75,9 +77,11 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa linearLayout1 = (LinearLayout) rootView.findViewById(R.id.hw_action_container); title = (TextView) rootView.findViewById(R.id.hw_dialog_title); add = (ImageView) rootView.findViewById(R.id.hv_add_profile); + hvIsRTL = getResources().getBoolean(R.bool.is_right_to_left); return rootView; } + @SuppressLint("RtlHardcoded") @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -92,6 +96,7 @@ public void onViewCreated(View view, Bundle savedInstanceState) { add.setImageResource(icon); title.setTextColor(Utils.getTextColorPrimary(getActivity())); title.setText(titleValue); + title.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); add.setVisibility(showAdd ? View.VISIBLE : View.INVISIBLE); add.setColorFilter(Utils.getTextColorPrimary(getActivity())); add.setBackgroundResource(Utils.selectableItemBackgroundBorderless(getActivity())); @@ -134,7 +139,7 @@ public void onClick(View v) { textView.setBackgroundResource(Utils.selectableItemBackground(getActivity())); textView.setPadding(padding, padding / 2, padding, padding / 2); textView.setTextColor(Utils.getTextColorSecondary(getActivity())); - textView.setGravity(Gravity.CENTER_VERTICAL); + textView.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { diff --git a/library/src/main/java/rebus/header/view/RowProfileView.java b/library/src/main/java/rebus/header/view/RowProfileView.java index 1888908..4a5a086 100644 --- a/library/src/main/java/rebus/header/view/RowProfileView.java +++ b/library/src/main/java/rebus/header/view/RowProfileView.java @@ -24,6 +24,7 @@ package rebus.header.view; +import android.annotation.SuppressLint; import android.content.Context; import android.graphics.Color; import android.graphics.Typeface; @@ -58,6 +59,7 @@ class RowProfileView extends ViewGroup { private Profile hvProfile; private boolean hvActive; + private boolean hvIsRTL; private int accent = Color.BLACK; @@ -116,6 +118,7 @@ public void setProfile(Profile profile, boolean active) { ImageLoader.loadImage(hvProfile.getAvatarUri(), avatar, ImageLoader.AVATAR); } + @SuppressLint("RtlHardcoded") private void addViews() { LayoutParams avatarLayoutParams = new LayoutParams(hvAvatarRowDimen, hvAvatarRowDimen); LayoutParams checkLayoutParams = new LayoutParams(hvRowCheckDimen, hvRowCheckDimen); @@ -127,12 +130,12 @@ private void addViews() { check.setColorFilter(accent); username = new TextView(getContext()); username.setTextColor(Utils.getTextColorPrimary(getContext())); - username.setGravity(Gravity.CENTER_VERTICAL); + username.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); username.setMaxLines(1); username.setEllipsize(TextUtils.TruncateAt.END); email = new TextView(getContext()); email.setTextColor(Utils.getTextColorSecondary(getContext())); - email.setGravity(Gravity.CENTER_VERTICAL); + email.setGravity(Gravity.CENTER_VERTICAL | (hvIsRTL ? Gravity.RIGHT : Gravity.LEFT)); email.setMaxLines(1); email.setEllipsize(TextUtils.TruncateAt.END); addView(avatar, avatarLayoutParams); @@ -143,6 +146,7 @@ private void addViews() { private void setupResources() { accent = Color.BLACK; + hvIsRTL = getResources().getBoolean(R.bool.is_right_to_left); hvAvatarRowDimen = getResources().getDimensionPixelSize(R.dimen.hv_row_avatar); hvRowHeightDimen = getResources().getDimensionPixelSize(R.dimen.hv_row_height); hvRowMarginDimen = getResources().getDimensionPixelSize(R.dimen.hv_row_margin); @@ -160,22 +164,41 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { @Override protected void onLayout(boolean changed, int l, int t, int r, int b) { if (!changed) return; - avatar.layout(hvRowMarginDimen, - getMeasuredHeight() / 2 - hvAvatarRowDimen / 2, - hvRowMarginDimen + hvAvatarRowDimen, - getMeasuredHeight() / 2 + hvAvatarRowDimen / 2); - check.layout(getMeasuredWidth() - hvRowMarginDimen - hvRowCheckDimen, - getMeasuredHeight() / 2 - hvRowCheckDimen / 2, - getMeasuredWidth() - hvRowMarginDimen, - getMeasuredHeight() / 2 + hvRowCheckDimen / 2); - username.layout(avatar.getRight() + hvRowMarginTextDimen, - getMeasuredHeight() / 2 - hvTextDimen, - check.getLeft() - hvRowMarginTextDimen, - getMeasuredHeight() / 2); - email.layout(avatar.getRight() + hvRowMarginTextDimen, - getMeasuredHeight() / 2, - check.getLeft() - hvRowMarginTextDimen, - getMeasuredHeight() / 2 + hvTextDimen); + if (hvIsRTL) { + avatar.layout(getMeasuredWidth() - hvRowMarginDimen - hvAvatarRowDimen, + getMeasuredHeight() / 2 - hvAvatarRowDimen / 2, + getMeasuredWidth() - hvRowMarginDimen, + getMeasuredHeight() / 2 + hvAvatarRowDimen / 2); + check.layout(hvRowMarginDimen, + getMeasuredHeight() / 2 - hvRowCheckDimen / 2, + hvRowCheckDimen + hvRowMarginDimen, + getMeasuredHeight() / 2 + hvRowCheckDimen / 2); + username.layout(check.getRight() + hvRowMarginTextDimen, + getMeasuredHeight() / 2 - hvTextDimen, + avatar.getLeft() - hvRowMarginTextDimen, + getMeasuredHeight() / 2); + email.layout(check.getRight() + hvRowMarginTextDimen, + getMeasuredHeight() / 2, + avatar.getLeft() - hvRowMarginTextDimen, + getMeasuredHeight() / 2 + hvTextDimen); + } else { + avatar.layout(hvRowMarginDimen, + getMeasuredHeight() / 2 - hvAvatarRowDimen / 2, + hvRowMarginDimen + hvAvatarRowDimen, + getMeasuredHeight() / 2 + hvAvatarRowDimen / 2); + check.layout(getMeasuredWidth() - hvRowMarginDimen - hvRowCheckDimen, + getMeasuredHeight() / 2 - hvRowCheckDimen / 2, + getMeasuredWidth() - hvRowMarginDimen, + getMeasuredHeight() / 2 + hvRowCheckDimen / 2); + username.layout(avatar.getRight() + hvRowMarginTextDimen, + getMeasuredHeight() / 2 - hvTextDimen, + check.getLeft() - hvRowMarginTextDimen, + getMeasuredHeight() / 2); + email.layout(avatar.getRight() + hvRowMarginTextDimen, + getMeasuredHeight() / 2, + check.getLeft() - hvRowMarginTextDimen, + getMeasuredHeight() / 2 + hvTextDimen); + } } } diff --git a/library/src/main/java/rebus/header/view/Utils.java b/library/src/main/java/rebus/header/view/Utils.java index 400c683..92b6bac 100644 --- a/library/src/main/java/rebus/header/view/Utils.java +++ b/library/src/main/java/rebus/header/view/Utils.java @@ -34,6 +34,8 @@ import android.text.Spanned; import android.util.TypedValue; +import java.util.Locale; + /** * Created by raphaelbussa on 13/01/17. */ diff --git a/library/src/main/res/values-ldrtl/bools.xml b/library/src/main/res/values-ldrtl/bools.xml new file mode 100644 index 0000000..c99fee6 --- /dev/null +++ b/library/src/main/res/values-ldrtl/bools.xml @@ -0,0 +1,30 @@ + + + + + + true + + \ No newline at end of file diff --git a/library/src/main/res/values/bools.xml b/library/src/main/res/values/bools.xml new file mode 100644 index 0000000..7a6b1ea --- /dev/null +++ b/library/src/main/res/values/bools.xml @@ -0,0 +1,30 @@ + + + + + + false + + \ No newline at end of file