From ba94657badcc5a05214a057fa938124bdf1ad47a Mon Sep 17 00:00:00 2001 From: cyBerta Date: Wed, 4 Jul 2018 23:42:45 +0200 Subject: #8886 add layout for tablets and improve tablet and phone layouts in general by implementing dynamic layout changes when keyboard appears --- .../se/leap/bitmaskclient/AddProviderActivity.java | 127 +++++---------- .../bitmaskclient/AddProviderBaseActivity.java | 113 +++++++++++++ .../bitmaskclient/ConfigWizardBaseActivity.java | 181 ++++++++++++++++++--- .../se/leap/bitmaskclient/utils/ViewHelper.java | 18 ++ .../bitmaskclient/views/ProviderHeaderView.java | 109 +++++++++++++ .../res/layout-sw600dp-port/a_add_provider.xml | 46 ++++++ .../layout-sw600dp-port/a_provider_credentials.xml | 57 +------ .../res/layout-sw600dp-port/a_provider_detail.xml | 49 +----- .../res/layout-sw600dp-port/a_provider_list.xml | 38 +---- app/src/main/res/layout-xlarge/a_add_provider.xml | 46 ++++++ .../res/layout-xlarge/a_provider_credentials.xml | 56 +------ .../main/res/layout-xlarge/a_provider_detail.xml | 49 +----- app/src/main/res/layout-xlarge/a_provider_list.xml | 38 +---- .../main/res/layout-xlarge/v_provider_header.xml | 13 +- app/src/main/res/layout/a_add_provider.xml | 65 +++++--- .../layout/a_add_provider_tablet_scrollview.xml | 91 +++++++++++ app/src/main/res/layout/a_provider_credentials.xml | 4 +- ...a_provider_credentials_tablet_linear_layout.xml | 57 +++++++ app/src/main/res/layout/a_provider_detail.xml | 4 +- .../a_provider_detail_tablet_linear_layout.xml | 51 ++++++ app/src/main/res/layout/a_provider_list.xml | 5 +- .../a_provider_list_tablet_linear_layout.xml | 40 +++++ app/src/main/res/layout/v_provider_header.xml | 9 +- app/src/main/res/values-sw600dp/dimens.xml | 4 + app/src/main/res/values-sw600dp/styles.xml | 11 -- app/src/main/res/values-w820dp/dimens.xml | 4 + app/src/main/res/values/dimens.xml | 8 +- .../se/leap/bitmaskclient/AddProviderActivity.java | 92 +---------- 28 files changed, 866 insertions(+), 519 deletions(-) create mode 100644 app/src/main/java/se/leap/bitmaskclient/AddProviderBaseActivity.java create mode 100644 app/src/main/java/se/leap/bitmaskclient/utils/ViewHelper.java create mode 100644 app/src/main/java/se/leap/bitmaskclient/views/ProviderHeaderView.java create mode 100644 app/src/main/res/layout-sw600dp-port/a_add_provider.xml create mode 100644 app/src/main/res/layout-xlarge/a_add_provider.xml create mode 100644 app/src/main/res/layout/a_add_provider_tablet_scrollview.xml create mode 100644 app/src/main/res/layout/a_provider_credentials_tablet_linear_layout.xml create mode 100644 app/src/main/res/layout/a_provider_detail_tablet_linear_layout.xml create mode 100644 app/src/main/res/layout/a_provider_list_tablet_linear_layout.xml delete mode 100644 app/src/main/res/values-sw600dp/styles.xml (limited to 'app') diff --git a/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java b/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java index a63174c8..10608a14 100644 --- a/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java +++ b/app/src/insecure/java/se/leap/bitmaskclient/AddProviderActivity.java @@ -1,126 +1,89 @@ package se.leap.bitmaskclient; -import android.content.Intent; import android.os.Bundle; -import android.support.design.widget.TextInputEditText; -import android.support.design.widget.TextInputLayout; -import android.text.Editable; -import android.text.TextWatcher; import android.view.View; import android.widget.Button; import android.widget.CheckBox; - -import javax.inject.Inject; +import android.widget.LinearLayout; +import android.widget.RelativeLayout; import butterknife.InjectView; +import butterknife.Optional; import se.leap.bitmaskclient.ProviderListContent.ProviderItem; -public class AddProviderActivity extends ConfigWizardBaseActivity { - - final public static String TAG = "AddProviderActivity"; - final public static String EXTRAS_KEY_NEW_URL = "NEW_URL"; +import static android.widget.RelativeLayout.BELOW; +import static android.widget.RelativeLayout.LEFT_OF; - @InjectView(R.id.text_uri_error) - TextInputLayout urlError; +public class AddProviderActivity extends AddProviderBaseActivity { - @InjectView(R.id.text_uri) - TextInputEditText editUrl; + final public static String TAG = "AddProviderActivity"; @InjectView(R.id.danger_checkbox) CheckBox checkboxDanger; + @InjectView(R.id.button_save) + Button saveButton; + + @Optional + @InjectView(R.id.button_container) + LinearLayout buttonContainer; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.a_add_provider); - if (this.getIntent().getExtras() != null) { - editUrl.setText(this.getIntent().getExtras().getString(ProviderListBaseActivity.EXTRAS_KEY_INVALID_URL)); - } + init(); checkboxDanger.setVisibility(View.VISIBLE); checkboxDanger.setText(R.string.danger_checkbox); checkboxDanger.setChecked(preferences.getBoolean(ProviderItem.DANGER_ON, false)); + } - final Button saveButton = findViewById(R.id.button_save); + @Override + public void setupSaveButton() { saveButton.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { preferences.edit().putBoolean(ProviderItem.DANGER_ON, checkboxDanger.isChecked()).apply(); saveProvider(); } }); - - final Button cancelButton = findViewById(R.id.button_cancel); - cancelButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - finish(); - } - }); - setUpListeners(); - setUpInitialUI(); } - private void setUpInitialUI() { - setProviderHeaderText(R.string.add_provider); - hideProgressBar(); + @Override + protected void showCompactLayout() { + if (isCompactLayout) { + return; + } + super.showCompactLayout(); + showCompactButtonLayout(); } - private void saveProvider() { - String entered_url = getURL(); - if (validURL(entered_url)) { - Intent intent = this.getIntent(); - intent.putExtra(EXTRAS_KEY_NEW_URL, entered_url); - setResult(RESULT_OK, intent); - finish(); - } else { - editUrl.setText(""); - urlError.setError(getString(R.string.not_valid_url_entered)); + @Override + protected void showStandardLayout() { + if (!isCompactLayout) { + return; } + super.showStandardLayout(); + showStandardButtonLayout(); } - private void setUpListeners() { - - editUrl.addTextChangedListener(new TextWatcher() { - @Override - public void beforeTextChanged(CharSequence s, int start, int count, int after) { - } - - @Override - public void onTextChanged(CharSequence s, int start, int before, int count) { - } + private void showCompactButtonLayout() { + RelativeLayout.LayoutParams phoneButtonContainerParams = (RelativeLayout.LayoutParams) buttonContainer.getLayoutParams(); + phoneButtonContainerParams.addRule(BELOW, 0); + buttonContainer.setLayoutParams(phoneButtonContainerParams); - @Override - public void afterTextChanged(Editable s) { - if (!validURL(getURL())) { - urlError.setError(getString(R.string.not_valid_url_entered)); - } else { - urlError.setError(null); - } - } - }); + RelativeLayout.LayoutParams checkBoxParams = (RelativeLayout.LayoutParams) checkboxDanger.getLayoutParams(); + checkBoxParams.addRule(LEFT_OF, R.id.button_container); + checkboxDanger.setLayoutParams(checkBoxParams); } - private String getURL() { - String entered_url = editUrl.getText().toString().trim(); - if (entered_url.contains("www.")) entered_url = entered_url.replaceFirst("www.", ""); - if (!entered_url.startsWith("https://")) { - if (entered_url.startsWith("http://")) { - entered_url = entered_url.substring("http://".length()); - } - entered_url = "https://".concat(entered_url); - } - return entered_url; - } + private void showStandardButtonLayout() { + RelativeLayout.LayoutParams phoneButtonContainerParams = (RelativeLayout.LayoutParams) buttonContainer.getLayoutParams(); + phoneButtonContainerParams.addRule(BELOW, R.id.danger_checkbox); + buttonContainer.setLayoutParams(phoneButtonContainerParams); - /** - * Checks if the entered url is valid or not. - * - * @param enteredUrl - * @return true if it's not empty nor contains only the protocol. - */ - boolean validURL(String enteredUrl) { - return android.util.Patterns.WEB_URL.matcher(enteredUrl).matches(); + RelativeLayout.LayoutParams checkBoxParams = (RelativeLayout.LayoutParams) checkboxDanger.getLayoutParams(); + checkBoxParams.addRule(LEFT_OF, 0); + checkboxDanger.setLayoutParams(checkBoxParams); } - - } diff --git a/app/src/main/java/se/leap/bitmaskclient/AddProviderBaseActivity.java b/app/src/main/java/se/leap/bitmaskclient/AddProviderBaseActivity.java new file mode 100644 index 00000000..703b6ef0 --- /dev/null +++ b/app/src/main/java/se/leap/bitmaskclient/AddProviderBaseActivity.java @@ -0,0 +1,113 @@ +package se.leap.bitmaskclient; + +import android.content.Intent; +import android.support.design.widget.TextInputEditText; +import android.support.design.widget.TextInputLayout; +import android.text.Editable; +import android.text.TextWatcher; +import android.view.View; +import android.widget.Button; + +import butterknife.InjectView; + +/** + * Created by cyberta on 30.06.18. + */ + +public abstract class AddProviderBaseActivity extends ConfigWizardBaseActivity { + + final public static String EXTRAS_KEY_NEW_URL = "NEW_URL"; + + @InjectView(R.id.text_uri_error) + TextInputLayout urlError; + + @InjectView(R.id.text_uri) + TextInputEditText editUrl; + + @InjectView(R.id.button_cancel) + Button cancelButton; + + + protected void init() { + if (this.getIntent().getExtras() != null) { + editUrl.setText(this.getIntent().getExtras().getString(ProviderListBaseActivity.EXTRAS_KEY_INVALID_URL)); + } + + setupSaveButton(); + setupCancelButton(); + setUpListeners(); + setUpInitialUI(); + } + + public abstract void setupSaveButton(); + + private void setupCancelButton() { + cancelButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + finish(); + } + }); + } + + private void setUpInitialUI() { + setProviderHeaderText(R.string.add_provider); + hideProgressBar(); + } + + protected void saveProvider() { + String entered_url = getURL(); + if (validURL(entered_url)) { + Intent intent = this.getIntent(); + intent.putExtra(EXTRAS_KEY_NEW_URL, entered_url); + setResult(RESULT_OK, intent); + finish(); + } else { + editUrl.setText(""); + urlError.setError(getString(R.string.not_valid_url_entered)); + } + } + + private void setUpListeners() { + + editUrl.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + if (!validURL(getURL())) { + urlError.setError(getString(R.string.not_valid_url_entered)); + } else { + urlError.setError(null); + } + } + }); + } + + private String getURL() { + String entered_url = editUrl.getText().toString().trim(); + if (entered_url.contains("www.")) entered_url = entered_url.replaceFirst("www.", ""); + if (!entered_url.startsWith("https://")) { + if (entered_url.startsWith("http://")) { + entered_url = entered_url.substring("http://".length()); + } + entered_url = "https://".concat(entered_url); + } + return entered_url; + } + + /** + * Checks if the entered url is valid or not. + * + * @param enteredUrl + * @return true if it's not empty nor contains only the protocol. + */ + boolean validURL(String enteredUrl) { + return android.util.Patterns.WEB_URL.matcher(enteredUrl).matches(); + } +} diff --git a/app/src/main/java/se/leap/bitmaskclient/ConfigWizardBaseActivity.java b/app/src/main/java/se/leap/bitmaskclient/ConfigWizardBaseActivity.java index f0e2de85..227c8cf4 100644 --- a/app/src/main/java/se/leap/bitmaskclient/ConfigWizardBaseActivity.java +++ b/app/src/main/java/se/leap/bitmaskclient/ConfigWizardBaseActivity.java @@ -2,21 +2,28 @@ package se.leap.bitmaskclient; import android.content.SharedPreferences; import android.graphics.PorterDuff; +import android.graphics.Rect; import android.os.Build; import android.os.Bundle; import android.support.annotation.DrawableRes; import android.support.annotation.Nullable; import android.support.annotation.StringRes; +import android.support.constraint.ConstraintLayout; +import android.support.constraint.Guideline; import android.support.v4.content.ContextCompat; -import android.support.v7.widget.AppCompatImageView; import android.support.v7.widget.AppCompatTextView; +import android.util.Log; import android.view.View; import android.view.ViewGroup; +import android.view.ViewTreeObserver; import android.widget.LinearLayout; import android.widget.ProgressBar; import butterknife.InjectView; +import butterknife.Optional; +import se.leap.bitmaskclient.views.ProviderHeaderView; +import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static se.leap.bitmaskclient.Constants.PROVIDER_KEY; @@ -30,28 +37,44 @@ import static se.leap.bitmaskclient.Constants.SHARED_PREFERENCES; public abstract class ConfigWizardBaseActivity extends ButterKnifeActivity { + private static final String TAG = ConfigWizardBaseActivity.class.getName(); + public static final float GUIDE_LINE_COMPACT_DELTA = 0.1f; protected SharedPreferences preferences; - @InjectView(R.id.provider_header_logo) - AppCompatImageView providerHeaderLogo; - - @InjectView(R.id.provider_header_text) - AppCompatTextView providerHeaderText; + @InjectView(R.id.header) + ProviderHeaderView providerHeaderView; + //Add provider screen has no loading screen + @Optional @InjectView(R.id.loading_screen) protected LinearLayout loadingScreen; + @Optional @InjectView(R.id.progressbar) protected ProgressBar progressBar; + @Optional @InjectView(R.id.progressbar_description) protected AppCompatTextView progressbarText; + //Only tablet layouts have guidelines as they are based on a ConstraintLayout + @Optional + @InjectView(R.id.guideline_top) + protected Guideline guideline_top; + + @Optional + @InjectView(R.id.guideline_bottom) + protected Guideline guideline_bottom; + @InjectView(R.id.content) protected LinearLayout content; protected Provider provider; + protected boolean isCompactLayout = false; + private float defaultGuidelineTopPercentage; + private float defaultGuidelineBottomPercentage; + @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -63,33 +86,44 @@ public abstract class ConfigWizardBaseActivity extends ButterKnifeActivity { @Override public void setContentView(View view) { super.setContentView(view); - if (provider != null) - setProviderHeaderText(provider.getName()); - setProgressbarColorForPreLollipop(); + initContentView(); } @Override public void setContentView(int layoutResID) { super.setContentView(layoutResID); - if (provider != null) - setProviderHeaderText(provider.getName()); - setProgressbarColorForPreLollipop(); + initContentView(); } @Override public void setContentView(View view, ViewGroup.LayoutParams params) { super.setContentView(view, params); - if (provider != null) + initContentView(); + } + + private void initContentView() { + if (provider != null) { setProviderHeaderText(provider.getName()); + } setProgressbarColorForPreLollipop(); + setDefaultGuidelineValues(); + setGlobalLayoutChangeListener(); + } + + private void setDefaultGuidelineValues() { + if (isTabletLayout()) { + defaultGuidelineTopPercentage = ((ConstraintLayout.LayoutParams) guideline_top.getLayoutParams()).guidePercent; + defaultGuidelineBottomPercentage = ((ConstraintLayout.LayoutParams) guideline_bottom.getLayoutParams()).guidePercent; + } } private void setProgressbarColorForPreLollipop() { - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - progressBar.getIndeterminateDrawable().setColorFilter( - ContextCompat.getColor(this, R.color.colorPrimary), - PorterDuff.Mode.SRC_IN); + if (progressBar == null || Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + return; } + progressBar.getIndeterminateDrawable().setColorFilter( + ContextCompat.getColor(this, R.color.colorPrimary), + PorterDuff.Mode.SRC_IN); } @@ -108,33 +142,134 @@ public abstract class ConfigWizardBaseActivity extends ButterKnifeActivity { } protected void setProviderHeaderLogo(@DrawableRes int providerHeaderLogo) { - this.providerHeaderLogo.setImageResource(providerHeaderLogo); + providerHeaderView.setLogo(providerHeaderLogo); } protected void setProviderHeaderText(String providerHeaderText) { - this.providerHeaderText.setText(providerHeaderText); + providerHeaderView.setTitle(providerHeaderText); } protected void setProviderHeaderText(@StringRes int providerHeaderText) { - this.providerHeaderText.setText(providerHeaderText); + providerHeaderView.setTitle(providerHeaderText); } protected void hideProgressBar() { + if (loadingScreen == null) { + return; + } loadingScreen.setVisibility(GONE); content.setVisibility(VISIBLE); } protected void showProgressBar() { + if (loadingScreen == null) { + return; + } content.setVisibility(GONE); loadingScreen.setVisibility(VISIBLE); } - protected void setProgressbarText(String progressbarText) { + protected void setProgressbarText(@StringRes int progressbarText) { + if (this.progressbarText == null) { + return; + } this.progressbarText.setText(progressbarText); } - protected void setProgressbarText(@StringRes int progressbarText) { - this.progressbarText.setText(progressbarText); + + protected void showCompactLayout() { + if (isCompactLayout) { + return; + } + + if (isTabletLayoutInLandscape() || isPhoneLayout()) { + providerHeaderView.showCompactLayout(); + } + + showIncreasedTabletContentArea(); + isCompactLayout = true; + } + + protected void showStandardLayout() { + if (!isCompactLayout) { + return; + } + providerHeaderView.showStandardLayout(); + showStandardTabletContentArea(); + isCompactLayout = false; + } + + private boolean isTabletLayoutInLandscape() { + // TabletLayout is based on a ConstraintLayout and uses Guidelines whereas the phone layout + // has no such elements in it's layout xml file + return guideline_top != null && + guideline_bottom != null && + getResources().getConfiguration().orientation == ORIENTATION_LANDSCAPE; + } + + protected boolean isPhoneLayout() { + return guideline_top == null && guideline_bottom == null; + } + + protected boolean isTabletLayout() { + return guideline_top != null && guideline_bottom != null; + } + + /** + * Increases the white content area in tablet layouts + */ + private void showIncreasedTabletContentArea() { + if (isPhoneLayout()) { + return; + } + ConstraintLayout.LayoutParams guideLineTopParams = (ConstraintLayout.LayoutParams) guideline_top.getLayoutParams(); + float increasedTopPercentage = defaultGuidelineTopPercentage - GUIDE_LINE_COMPACT_DELTA; + guideLineTopParams.guidePercent = increasedTopPercentage > 0f ? increasedTopPercentage : 0f; + guideline_top.setLayoutParams(guideLineTopParams); + + ConstraintLayout.LayoutParams guideLineBottomParams = (ConstraintLayout.LayoutParams) guideline_bottom.getLayoutParams(); + float increasedBottomPercentage = defaultGuidelineBottomPercentage + GUIDE_LINE_COMPACT_DELTA; + guideLineBottomParams.guidePercent = increasedBottomPercentage < 1f ? increasedBottomPercentage : 1f; + guideline_bottom.setLayoutParams(guideLineBottomParams); + } + + /** + * Restores the default size of the white content area in tablet layouts + */ + private void showStandardTabletContentArea() { + if (isPhoneLayout()) { + return; + } + ConstraintLayout.LayoutParams guideLineTopParams = (ConstraintLayout.LayoutParams) guideline_top.getLayoutParams(); + guideLineTopParams.guidePercent = defaultGuidelineTopPercentage; + guideline_top.setLayoutParams(guideLineTopParams); + + ConstraintLayout.LayoutParams guideLineBottomParams = (ConstraintLayout.LayoutParams) guideline_bottom.getLayoutParams(); + guideLineBottomParams.guidePercent = defaultGuidelineBottomPercentage; + guideline_bottom.setLayoutParams(guideLineBottomParams); + } + + /** + * Checks if the keyboard is shown and switches between the standard layout and the compact layout + */ + private void setGlobalLayoutChangeListener() { + final View rootView = content.getRootView(); + rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { + @Override + public void onGlobalLayout() { + Rect r = new Rect(); + //r will be populated with the coordinates of your view that area still visible. + rootView.getWindowVisibleDisplayFrame(r); + + float deltaHiddenScreen = 1f - ((float) (r.bottom - r.top) / (float) rootView.getHeight()); + if (deltaHiddenScreen > 0.25f) { + // if more than 1/4 of the screen is hidden + showCompactLayout(); + } else { + showStandardLayout(); + } + } + }); } } diff --git a/app/src/main/java/se/leap/bitmaskclient/utils/ViewHelper.java b/app/src/main/java/se/leap/bitmaskclient/utils/ViewHelper.java new file mode 100644 index 00000000..86af3479 --- /dev/null +++ b/app/src/main/java/se/leap/bitmaskclient/utils/ViewHelper.java @@ -0,0 +1,18 @@ +package se.leap.bitmaskclient.utils; + +import android.content.Context; +import android.content.res.Resources; +import android.support.annotation.DimenRes; +import android.util.DisplayMetrics; + +/** + * Created by cyberta on 29.06.18. + */ + +public class ViewHelper { + + public static int convertDimensionToPx(Context context, @DimenRes int dimension) { + return context.getResources().getDimensionPixelSize(dimension); + } + +} diff --git a/app/src/main/java/se/leap/bitmaskclient/views/ProviderHeaderView.java b/app/src/main/java/se/leap/bitmaskclient/views/ProviderHeaderView.java new file mode 100644 index 00000000..ab5d6bc8 --- /dev/null +++ b/app/src/main/java/se/leap/bitmaskclient/views/ProviderHeaderView.java @@ -0,0 +1,109 @@ +package se.leap.bitmaskclient.views; + +import android.content.Context; +import android.support.annotation.DrawableRes; +import android.support.annotation.RequiresApi; +import android.support.annotation.StringRes; +import android.support.v7.widget.AppCompatImageView; +import android.support.v7.widget.AppCompatTextView; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.RelativeLayout; + +import se.leap.bitmaskclient.R; + +import static se.leap.bitmaskclient.utils.ViewHelper.convertDimensionToPx; + +/** + * Created by cyberta on 29.06.18. + */ + +public class ProviderHeaderView extends RelativeLayout { + private int stdPadding; + private int compactPadding; + private int stdImageSize; + private int compactImageSize; + + AppCompatImageView providerHeaderLogo; + AppCompatTextView providerHeaderText; + + public ProviderHeaderView(Context context) { + super(context); + initLayout(context); + } + + public ProviderHeaderView(Context context, AttributeSet attrs) { + super(context, attrs); + initLayout(context); + } + + public ProviderHeaderView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + initLayout(context); + } + + @RequiresApi(21) + public ProviderHeaderView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + initLayout(context); + } + + + void initLayout(Context context) { + LayoutInflater inflater = (LayoutInflater) context + .getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View rootview = inflater.inflate(R.layout.v_provider_header, this, true); + providerHeaderLogo = rootview.findViewById(R.id.provider_header_logo); + providerHeaderText = rootview.findViewById(R.id.provider_header_text); + + stdPadding = convertDimensionToPx(context, R.dimen.stdpadding); + compactPadding = convertDimensionToPx(context, R.dimen.compact_padding); + stdImageSize = convertDimensionToPx(context, R.dimen.bitmask_logo); + compactImageSize = convertDimensionToPx(context, R.dimen.bitmask_logo_compact); + } + + public void setTitle(String title) { + providerHeaderText.setText(title); + } + + public void setTitle(@StringRes int stringRes) { + providerHeaderText.setText(stringRes); + } + + public void setLogo(@DrawableRes int drawableRes) { + providerHeaderLogo.setImageResource(drawableRes); + } + + public void showCompactLayout() { + LayoutParams logoLayoutParams = (LayoutParams) providerHeaderLogo.getLayoutParams(); + logoLayoutParams.width = compactImageSize; + logoLayoutParams.height = compactImageSize; + providerHeaderLogo.setLayoutParams(logoLayoutParams); + + LayoutParams textLayoutParams = (LayoutParams) providerHeaderText.getLayoutParams(); + textLayoutParams.addRule(RIGHT_OF, R.id.provider_header_logo); + textLayoutParams.addRule(BELOW, 0); + textLayoutParams.addRule(ALIGN_TOP, R.id.provider_header_logo); + textLayoutParams.setMargins(compactPadding, compactPadding, compactPadding, compactPadding); + + providerHeaderText.setLayoutParams(textLayoutParams); + providerHeaderText.setMaxLines(2); + } + + public void showStandardLayout() { + LayoutParams logoLayoutParams = (LayoutParams) providerHeaderLogo.getLayoutParams(); + logoLayoutParams.width = stdImageSize; + logoLayoutParams.height = stdImageSize; + providerHeaderLogo.setLayoutParams(logoLayoutParams); + + LayoutParams textLayoutParams = (LayoutParams) providerHeaderText.getLayoutParams(); + textLayoutParams.addRule(RIGHT_OF, 0); + textLayoutParams.addRule(BELOW, R.id.provider_header_logo); + textLayoutParams.addRule(ALIGN_TOP, 0); + textLayoutParams.setMargins(stdPadding, stdPadding, stdPadding, stdPadding); + providerHeaderText.setLayoutParams(textLayoutParams); + providerHeaderText.setMaxLines(1); + } + +} diff --git a/app/src/main/res/layout-sw600dp-port/a_add_provider.xml b/app/src/main/res/layout-sw600dp-port/a_add_provider.xml new file mode 100644 index 00000000..6f43778b --- /dev/null +++ b/app/src/main/res/layout-sw600dp-port/a_add_provider.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-sw600dp-port/a_provider_credentials.xml b/app/src/main/res/layout-sw600dp-port/a_provider_credentials.xml index 1d689db6..0aae8ede 100644 --- a/app/src/main/res/layout-sw600dp-port/a_provider_credentials.xml +++ b/app/src/main/res/layout-sw600dp-port/a_provider_credentials.xml @@ -42,60 +42,5 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.725" /> - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout-sw600dp-port/a_provider_detail.xml b/app/src/main/res/layout-sw600dp-port/a_provider_detail.xml index 6d7c97ae..67ac1cfd 100644 --- a/app/src/main/res/layout-sw600dp-port/a_provider_detail.xml +++ b/app/src/main/res/layout-sw600dp-port/a_provider_detail.xml @@ -43,52 +43,5 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.725" /> - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout-sw600dp-port/a_provider_list.xml b/app/src/main/res/layout-sw600dp-port/a_provider_list.xml index 818ce864..fbfba403 100644 --- a/app/src/main/res/layout-sw600dp-port/a_provider_list.xml +++ b/app/src/main/res/layout-sw600dp-port/a_provider_list.xml @@ -43,41 +43,5 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.725" /> - - - - - - - - - - - - + diff --git a/app/src/main/res/layout-xlarge/a_add_provider.xml b/app/src/main/res/layout-xlarge/a_add_provider.xml new file mode 100644 index 00000000..1bca612e --- /dev/null +++ b/app/src/main/res/layout-xlarge/a_add_provider.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/a_provider_credentials.xml b/app/src/main/res/layout-xlarge/a_provider_credentials.xml index 79045082..f55f142c 100644 --- a/app/src/main/res/layout-xlarge/a_provider_credentials.xml +++ b/app/src/main/res/layout-xlarge/a_provider_credentials.xml @@ -42,59 +42,5 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.85" /> - - - - - - - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/a_provider_detail.xml b/app/src/main/res/layout-xlarge/a_provider_detail.xml index c1eeb0e0..ea677786 100644 --- a/app/src/main/res/layout-xlarge/a_provider_detail.xml +++ b/app/src/main/res/layout-xlarge/a_provider_detail.xml @@ -43,52 +43,5 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.85" /> - - - - - - - - - - - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout-xlarge/a_provider_list.xml b/app/src/main/res/layout-xlarge/a_provider_list.xml index 9150466a..4e666a90 100644 --- a/app/src/main/res/layout-xlarge/a_provider_list.xml +++ b/app/src/main/res/layout-xlarge/a_provider_list.xml @@ -43,41 +43,5 @@ android:orientation="horizontal" app:layout_constraintGuide_percent="0.85" /> - - - - - - - - - - - - + diff --git a/app/src/main/res/layout-xlarge/v_provider_header.xml b/app/src/main/res/layout-xlarge/v_provider_header.xml index 45f8302b..6c06111a 100644 --- a/app/src/main/res/layout-xlarge/v_provider_header.xml +++ b/app/src/main/res/layout-xlarge/v_provider_header.xml @@ -1,11 +1,13 @@ - @@ -14,9 +16,12 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:text="" + android:ellipsize="end" + android:layout_below="@id/provider_header_logo" + android:gravity="center_vertical" android:textAppearance="@style/Base.TextAppearance.AppCompat.Headline" android:layout_marginTop="@dimen/standard_margin" android:layout_marginBottom="@dimen/standard_margin" /> - \ No newline at end of file + \ No newline at end of file diff --git a/app/src/main/res/layout/a_add_provider.xml b/app/src/main/res/layout/a_add_provider.xml index fd515bf3..7d14ea96 100644 --- a/app/src/main/res/layout/a_add_provider.xml +++ b/app/src/main/res/layout/a_add_provider.xml @@ -4,13 +4,10 @@ xmlns:tools="http://schemas.android.com/tools" style="@style/BitmaskActivity" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="wrap_content" android:padding="@dimen/stdpadding" tools:context=".AddProviderActivity"> - - - - + - - - - + android:layout_height="wrap_content"> -