diff options
author | cyBerta <cyberta@riseup.net> | 2018-07-04 23:42:45 +0200 |
---|---|---|
committer | cyBerta <cyberta@riseup.net> | 2018-07-04 23:42:45 +0200 |
commit | ba94657badcc5a05214a057fa938124bdf1ad47a (patch) | |
tree | d2562627ba32973f0ffb5e29ff5578042c26acd0 | |
parent | d63dd4b36701f2f993e671f8cc3c5424b787e43a (diff) |
#8886 add layout for tablets and improve tablet and phone layouts in general by implementing dynamic layout changes when keyboard appears
28 files changed, 866 insertions, 519 deletions
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 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + style="@style/BitmaskActivity" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ProviderCredentialsBaseActivity"> + + <android.support.v7.widget.AppCompatImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + app:srcCompat="@drawable/ic_colorsquare" + android:scaleType="centerCrop" + /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.2" /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.8" /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_top" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_percent="0.275" /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_bottom" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_percent="0.725" /> + + <include layout="@layout/a_add_provider_tablet_scrollview"/> +</android.support.constraint.ConstraintLayout>
\ 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" /> - <LinearLayout - android:orientation="vertical" - style="@style/BitmaskActivity" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="@dimen/stdpadding" - android:padding="@dimen/stdpadding" - android:background="@color/colorBackground" - app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_right" - app:layout_constraintHeight_min="411dp" - app:layout_constraintStart_toStartOf="@+id/guideline_left" - app:layout_constraintTop_toTopOf="@+id/guideline_top" - app:layout_constraintWidth_min="731dp" - > - - <include layout="@layout/v_loading_screen" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:id="@+id/content" - android:orientation="vertical"> - - <include - layout="@layout/v_provider_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - - <ScrollView - android:layout_height="match_parent" - android:layout_width="match_parent" - android:isScrollContainer="true" - > - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - <include - layout="@layout/v_provider_credentials" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - <android.support.v7.widget.AppCompatButton - android:id="@+id/button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:text="@string/login_button" /> - - </LinearLayout> - </ScrollView> - </LinearLayout> - </LinearLayout> + <include layout="@layout/a_provider_credentials_tablet_linear_layout"/> </android.support.constraint.ConstraintLayout>
\ 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" /> - <LinearLayout - android:orientation="vertical" - android:padding="@dimen/stdpadding" - style="@style/BitmaskActivity" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="@dimen/stdpadding" - android:background="@color/colorBackground" - app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_right" - app:layout_constraintHeight_min="411dp" - app:layout_constraintStart_toStartOf="@+id/guideline_left" - app:layout_constraintTop_toTopOf="@+id/guideline_top" - app:layout_constraintWidth_min="731dp"> - - <include layout="@layout/v_loading_screen" /> - - <LinearLayout - android:id="@+id/content" - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <include - layout="@layout/v_provider_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - <android.support.v7.widget.AppCompatTextView - android:id="@+id/provider_detail_description" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textStyle="normal" - android:textAppearance="?android:attr/textAppearanceMedium" - android:layout_marginTop="@dimen/standard_margin" - android:layout_marginBottom="@dimen/standard_margin" - /> - - <ListView - android:id="@+id/provider_detail_options" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/list_view_margin_top" - android:drawSelectorOnTop="false" - /> - - </LinearLayout> - </LinearLayout> + <include layout="@layout/a_provider_detail_tablet_linear_layout" /> </android.support.constraint.ConstraintLayout>
\ 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" /> - <LinearLayout - android:orientation="vertical" - android:padding="@dimen/stdpadding" - style="@style/BitmaskActivity" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="@dimen/stdpadding" - android:background="@color/colorBackground" - app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_right" - app:layout_constraintHeight_min="411dp" - app:layout_constraintStart_toStartOf="@+id/guideline_left" - app:layout_constraintTop_toTopOf="@+id/guideline_top" - app:layout_constraintWidth_min="731dp"> - - <include layout="@layout/v_loading_screen" /> - - <LinearLayout - android:id="@+id/content" - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <include layout="@layout/v_provider_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - <ListView - android:id="@+id/provider_list" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:drawSelectorOnTop="false" - android:layout_marginTop="@dimen/list_view_margin_top" - /> - - </LinearLayout> - </LinearLayout> + <include layout="@layout/a_provider_list_tablet_linear_layout" /> </android.support.constraint.ConstraintLayout> 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 @@ +<?xml version="1.0" encoding="utf-8"?> +<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + style="@style/BitmaskActivity" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".ProviderCredentialsBaseActivity"> + + <android.support.v7.widget.AppCompatImageView + android:layout_width="match_parent" + android:layout_height="match_parent" + app:srcCompat="@drawable/ic_colorsquare" + android:scaleType="centerCrop" + /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_left" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.2" /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_right" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_constraintGuide_percent="0.8" /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_top" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_percent="0.15" /> + + <android.support.constraint.Guideline + android:id="@+id/guideline_bottom" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:orientation="horizontal" + app:layout_constraintGuide_percent="0.85" /> + + <include layout="@layout/a_add_provider_tablet_scrollview"/> +</android.support.constraint.ConstraintLayout>
\ 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" /> - <LinearLayout - android:orientation="vertical" - style="@style/BitmaskActivity" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="@dimen/stdpadding" - android:padding="@dimen/stdpadding" - android:background="@color/colorBackground" - app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_right" - app:layout_constraintHeight_min="411dp" - app:layout_constraintStart_toStartOf="@+id/guideline_left" - app:layout_constraintTop_toTopOf="@+id/guideline_top" - app:layout_constraintWidth_min="731dp"> - - <include layout="@layout/v_loading_screen" /> - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="match_parent" - android:id="@+id/content" - android:orientation="vertical"> - - <include - layout="@layout/v_provider_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - - <ScrollView - android:layout_height="match_parent" - android:layout_width="match_parent" - android:isScrollContainer="true" - > - - <LinearLayout - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="vertical"> - <include - layout="@layout/v_provider_credentials" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - <android.support.v7.widget.AppCompatButton - android:id="@+id/button" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_gravity="end" - android:text="@string/login_button" /> - - </LinearLayout> - </ScrollView> - </LinearLayout> - </LinearLayout> + <include layout="@layout/a_provider_credentials_tablet_linear_layout"/> </android.support.constraint.ConstraintLayout>
\ 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" /> - <LinearLayout - android:orientation="vertical" - android:padding="@dimen/stdpadding" - style="@style/BitmaskActivity" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="@dimen/stdpadding" - android:background="@color/colorBackground" - app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_right" - app:layout_constraintHeight_min="411dp" - app:layout_constraintStart_toStartOf="@+id/guideline_left" - app:layout_constraintTop_toTopOf="@+id/guideline_top" - app:layout_constraintWidth_min="731dp"> - - <include layout="@layout/v_loading_screen" /> - - <LinearLayout - android:id="@+id/content" - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <include - layout="@layout/v_provider_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - <android.support.v7.widget.AppCompatTextView - android:id="@+id/provider_detail_description" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:textStyle="normal" - android:textAppearance="?android:attr/textAppearanceMedium" - android:layout_marginTop="@dimen/standard_margin" - android:layout_marginBottom="@dimen/standard_margin" - /> - - <ListView - android:id="@+id/provider_detail_options" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/list_view_margin_top" - android:drawSelectorOnTop="false" - /> - - </LinearLayout> - </LinearLayout> + <include layout="@layout/a_provider_detail_tablet_linear_layout" /> </android.support.constraint.ConstraintLayout>
\ 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" /> - <LinearLayout - android:orientation="vertical" - android:padding="@dimen/stdpadding" - style="@style/BitmaskActivity" - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_margin="@dimen/stdpadding" - android:background="@color/colorBackground" - app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" - app:layout_constraintEnd_toStartOf="@+id/guideline_right" - app:layout_constraintHeight_min="411dp" - app:layout_constraintStart_toStartOf="@+id/guideline_left" - app:layout_constraintTop_toTopOf="@+id/guideline_top" - app:layout_constraintWidth_min="731dp"> - - <include layout="@layout/v_loading_screen" /> - - <LinearLayout - android:id="@+id/content" - android:orientation="vertical" - android:layout_width="match_parent" - android:layout_height="wrap_content"> - - <include layout="@layout/v_provider_header" - android:layout_width="match_parent" - android:layout_height="wrap_content" /> - - <ListView - android:id="@+id/provider_list" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:drawSelectorOnTop="false" - android:layout_marginTop="@dimen/list_view_margin_top" - /> - - </LinearLayout> - </LinearLayout> + <include layout="@layout/a_provider_list_tablet_linear_layout" /> </android.support.constraint.ConstraintLayout> 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 @@ <?xml version="1.0" encoding="utf-8"?> -<merge xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_height="wrap_content" + android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" > <android.support.v7.widget.AppCompatImageView android:id="@+id/provider_header_logo" - android:layout_width="@dimen/bitmask_logo_tablet" - android:layout_height="@dimen/bitmask_logo_tablet" + android:layout_width="@dimen/bitmask_logo" + android:layout_height="@dimen/bitmask_logo" android:adjustViewBounds="true" app:srcCompat="@drawable/mask" /> @@ -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" /> -</merge>
\ No newline at end of file +</RelativeLayout>
\ 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"> - <!--Contains header information!??? --> - <include layout="@layout/v_add_provider" /> - <LinearLayout android:id="@+id/content" android:layout_width="match_parent" @@ -21,7 +18,10 @@ android:orientation="vertical"> <!-- the header contains the mask--> - <include layout="@layout/v_provider_header" /> + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> <android.support.design.widget.TextInputLayout android:id="@+id/text_uri_error" @@ -40,35 +40,46 @@ </android.support.design.widget.TextInputLayout> - - <CheckBox - android:id="@+id/danger_checkbox" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:visibility="gone" - android:layout_marginBottom="@dimen/add_button_margin"/> - - <LinearLayout + <RelativeLayout android:layout_width="match_parent" - android:layout_height="match_parent" - android:gravity="right" - android:orientation="horizontal"> + android:layout_height="wrap_content"> - <Button - android:id="@+id/button_cancel" + <CheckBox + android:id="@+id/danger_checkbox" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:text="@string/cancel" /> + android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" + android:visibility="gone" + android:layout_marginBottom="@dimen/add_button_margin" + /> - <Button - android:id="@+id/button_save" + <LinearLayout + android:id="@+id/button_container" android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:layout_marginLeft="@dimen/activity_horizontal_margin" - android:layout_marginStart="@dimen/activity_horizontal_margin" - android:text="@string/save" /> + android:layout_height="match_parent" + android:layout_alignParentRight="true" + android:layout_alignParentEnd="true" + android:gravity="right" + android:orientation="horizontal" + android:layout_below="@id/danger_checkbox"> + + <Button + android:id="@+id/button_cancel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/cancel" /> + + <Button + android:id="@+id/button_save" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginLeft="@dimen/add_button_margin" + android:layout_marginStart="@dimen/add_button_margin" + android:text="@string/save" /> - </LinearLayout> + </LinearLayout> + </RelativeLayout> </LinearLayout> </RelativeLayout> diff --git a/app/src/main/res/layout/a_add_provider_tablet_scrollview.xml b/app/src/main/res/layout/a_add_provider_tablet_scrollview.xml new file mode 100644 index 00000000..220aabeb --- /dev/null +++ b/app/src/main/res/layout/a_add_provider_tablet_scrollview.xml @@ -0,0 +1,91 @@ +<?xml version="1.0" encoding="utf-8"?> +<ScrollView + android:orientation="vertical" + style="@style/BitmaskActivity" + android:layout_width="0dp" + android:layout_height="0dp" + app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" + app:layout_constraintEnd_toStartOf="@+id/guideline_right" + app:layout_constraintHeight_min="411dp" + app:layout_constraintStart_toStartOf="@+id/guideline_left" + app:layout_constraintTop_toTopOf="@+id/guideline_top" + app:layout_constraintWidth_min="731dp" + android:layout_margin="@dimen/stdpadding" + android:padding="@dimen/stdpadding" + android:background="@color/colorBackground" + android:isScrollContainer="true" + android:fadeScrollbars="false" + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <LinearLayout + android:id="@+id/content" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + + <android.support.design.widget.TextInputLayout + android:id="@+id/text_uri_error" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/activity_vertical_margin" + android:hint="@string/new_provider_uri" + app:errorEnabled="true"> + + <android.support.design.widget.TextInputEditText + android:id="@+id/text_uri" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:ems="10" + android:inputType="text" /> + + </android.support.design.widget.TextInputLayout> + + <RelativeLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + > + <CheckBox + android:id="@+id/danger_checkbox" + android:layout_alignParentLeft="true" + android:layout_alignParentStart="true" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:visibility="gone" + android:layout_marginBottom="@dimen/add_button_margin"/> + + <LinearLayout + android:id="@+id/button_container" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:layout_alignParentEnd="true" + android:layout_alignParentRight="true" + android:gravity="right" + android:orientation="horizontal" + android:layout_below="@+id/danger_checkbox" + > + + <Button + android:id="@+id/button_cancel" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:minWidth="80dp" + android:text="@string/cancel" /> + + <Button + android:id="@+id/button_save" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:minWidth="80dp" + android:layout_marginLeft="@dimen/add_button_margin" + android:layout_marginStart="@dimen/add_button_margin" + android:text="@string/save" /> + </LinearLayout> + </RelativeLayout> + </LinearLayout> +</ScrollView>
\ No newline at end of file diff --git a/app/src/main/res/layout/a_provider_credentials.xml b/app/src/main/res/layout/a_provider_credentials.xml index 5fefb2a3..3edad07b 100644 --- a/app/src/main/res/layout/a_provider_credentials.xml +++ b/app/src/main/res/layout/a_provider_credentials.xml @@ -16,8 +16,8 @@ android:layout_height="match_parent" > - <include - layout="@layout/v_provider_header" + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" android:layout_width="match_parent" android:layout_height="wrap_content" /> diff --git a/app/src/main/res/layout/a_provider_credentials_tablet_linear_layout.xml b/app/src/main/res/layout/a_provider_credentials_tablet_linear_layout.xml new file mode 100644 index 00000000..5df57d8e --- /dev/null +++ b/app/src/main/res/layout/a_provider_credentials_tablet_linear_layout.xml @@ -0,0 +1,57 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:orientation="vertical" + style="@style/BitmaskActivity" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="@dimen/stdpadding" + android:padding="@dimen/stdpadding" + android:background="@color/colorBackground" + app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" + app:layout_constraintEnd_toStartOf="@+id/guideline_right" + app:layout_constraintHeight_min="411dp" + app:layout_constraintStart_toStartOf="@+id/guideline_left" + app:layout_constraintTop_toTopOf="@+id/guideline_top" + app:layout_constraintWidth_min="731dp"> + + <include layout="@layout/v_loading_screen" /> + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="match_parent" + android:id="@+id/content" + android:orientation="vertical"> + + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + + <ScrollView + android:layout_height="match_parent" + android:layout_width="match_parent" + android:isScrollContainer="true" + > + + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical"> + <include + layout="@layout/v_provider_credentials" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> + + <android.support.v7.widget.AppCompatButton + android:id="@+id/button" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_gravity="end" + android:text="@string/login_button" /> + + </LinearLayout> + </ScrollView> + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/a_provider_detail.xml b/app/src/main/res/layout/a_provider_detail.xml index 56b38ada..11f4957d 100644 --- a/app/src/main/res/layout/a_provider_detail.xml +++ b/app/src/main/res/layout/a_provider_detail.xml @@ -15,8 +15,8 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - <include - layout="@layout/v_provider_header" + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" android:layout_width="match_parent" android:layout_height="wrap_content" /> diff --git a/app/src/main/res/layout/a_provider_detail_tablet_linear_layout.xml b/app/src/main/res/layout/a_provider_detail_tablet_linear_layout.xml new file mode 100644 index 00000000..17006d9c --- /dev/null +++ b/app/src/main/res/layout/a_provider_detail_tablet_linear_layout.xml @@ -0,0 +1,51 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + android:orientation="vertical" + android:padding="@dimen/stdpadding" + style="@style/BitmaskActivity" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="@dimen/stdpadding" + android:background="@color/colorBackground" + app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" + app:layout_constraintEnd_toStartOf="@+id/guideline_right" + app:layout_constraintHeight_min="411dp" + app:layout_constraintStart_toStartOf="@+id/guideline_left" + app:layout_constraintTop_toTopOf="@+id/guideline_top" + app:layout_constraintWidth_min="731dp" + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <include layout="@layout/v_loading_screen" /> + + <LinearLayout + android:id="@+id/content" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + + <android.support.v7.widget.AppCompatTextView + android:id="@+id/provider_detail_description" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:textStyle="normal" + android:textAppearance="?android:attr/textAppearanceMedium" + android:layout_marginTop="@dimen/standard_margin" + android:layout_marginBottom="@dimen/standard_margin" + /> + + <ListView + android:id="@+id/provider_detail_options" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="@dimen/list_view_margin_top" + android:drawSelectorOnTop="false" + /> + + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/a_provider_list.xml b/app/src/main/res/layout/a_provider_list.xml index aa8cdfbb..2e2573eb 100644 --- a/app/src/main/res/layout/a_provider_list.xml +++ b/app/src/main/res/layout/a_provider_list.xml @@ -15,7 +15,10 @@ android:layout_height="match_parent" android:orientation="vertical"> - <include layout="@layout/v_provider_header" /> + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> <ListView android:id="@+id/provider_list" diff --git a/app/src/main/res/layout/a_provider_list_tablet_linear_layout.xml b/app/src/main/res/layout/a_provider_list_tablet_linear_layout.xml new file mode 100644 index 00000000..3c2b150d --- /dev/null +++ b/app/src/main/res/layout/a_provider_list_tablet_linear_layout.xml @@ -0,0 +1,40 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout android:orientation="vertical" + android:padding="@dimen/stdpadding" + style="@style/BitmaskActivity" + android:layout_width="0dp" + android:layout_height="0dp" + android:layout_margin="@dimen/stdpadding" + android:background="@color/colorBackground" + app:layout_constraintBottom_toTopOf="@+id/guideline_bottom" + app:layout_constraintEnd_toStartOf="@+id/guideline_right" + app:layout_constraintHeight_min="411dp" + app:layout_constraintStart_toStartOf="@+id/guideline_left" + app:layout_constraintTop_toTopOf="@+id/guideline_top" + app:layout_constraintWidth_min="731dp" + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto"> + + <include layout="@layout/v_loading_screen" /> + + <LinearLayout + android:id="@+id/content" + android:orientation="vertical" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <se.leap.bitmaskclient.views.ProviderHeaderView + android:id="@+id/header" + android:layout_width="match_parent" + android:layout_height="wrap_content"/> + + <ListView + android:id="@+id/provider_list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:drawSelectorOnTop="false" + android:layout_marginTop="@dimen/list_view_margin_top" + /> + + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/v_provider_header.xml b/app/src/main/res/layout/v_provider_header.xml index 6b08976c..d089b205 100644 --- a/app/src/main/res/layout/v_provider_header.xml +++ b/app/src/main/res/layout/v_provider_header.xml @@ -1,5 +1,7 @@ <?xml version="1.0" encoding="utf-8"?> -<merge xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_height="wrap_content" + android:layout_width="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" > <android.support.v7.widget.AppCompatImageView @@ -13,10 +15,13 @@ android:id="@+id/provider_header_text" android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_below="@id/provider_header_logo" android:text="" + android:ellipsize="end" + android:gravity="center_vertical" android:textAppearance="@style/Base.TextAppearance.AppCompat.Headline" android:layout_marginTop="@dimen/standard_margin" android:layout_marginBottom="@dimen/standard_margin" /> -</merge> +</RelativeLayout> diff --git a/app/src/main/res/values-sw600dp/dimens.xml b/app/src/main/res/values-sw600dp/dimens.xml index 100861fc..ec877dc8 100644 --- a/app/src/main/res/values-sw600dp/dimens.xml +++ b/app/src/main/res/values-sw600dp/dimens.xml @@ -6,5 +6,9 @@ <resources> <bool name="logSildersAlwaysVisible">true</bool> + <dimen name="bitmask_logo">72dp</dimen> + <dimen name="bitmask_logo_compact">56dp</dimen> + <dimen name="stdpadding">16dp</dimen> + <dimen name="compact_padding">6dp</dimen> </resources>
\ No newline at end of file diff --git a/app/src/main/res/values-sw600dp/styles.xml b/app/src/main/res/values-sw600dp/styles.xml deleted file mode 100644 index 387b2a81..00000000 --- a/app/src/main/res/values-sw600dp/styles.xml +++ /dev/null @@ -1,11 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (c) 2012-2016 Arne Schwabe - ~ Distributed under the GNU GPL v2 with additional terms. For full terms see the file doc/LICENSE.txt - --> - -<resources> - - <dimen name="stdpadding">16dp</dimen> - -</resources>
\ No newline at end of file diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml index 63fc8164..654ea948 100644 --- a/app/src/main/res/values-w820dp/dimens.xml +++ b/app/src/main/res/values-w820dp/dimens.xml @@ -3,4 +3,8 @@ (such as screen margins) for screens with more than 820dp of available width. This would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). --> <dimen name="activity_horizontal_margin">64dp</dimen> + <dimen name="bitmask_logo">72dp</dimen> + <dimen name="bitmask_logo_compact">56dp</dimen> + <dimen name="compact_padding">6dp</dimen> + <dimen name="stdpadding">16dp</dimen> </resources> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index f160487b..10c32471 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -6,6 +6,7 @@ <resources> <dimen name="paddingItemsSidebarLog">20dp</dimen> <dimen name="stdpadding">8dp</dimen> + <dimen name="compact_padding">3dp</dimen> <dimen name="standard_margin">8dp</dimen> <dimen name="mainbutton_padding">20dp</dimen> <bool name="logSildersAlwaysVisible">false</bool> @@ -32,5 +33,10 @@ <dimen name="loading_screen_icon_vertical_margin">16dp</dimen> <dimen name="bitmask_logo">56dp</dimen> - <dimen name="bitmask_logo_tablet">72dp</dimen> + <dimen name="bitmask_logo_compact">42dp</dimen> + + <dimen name="constraint_top_std">0.15</dimen> + <dimen name="constraint_bottom_std">0.85</dimen> + <dimen name="constraint_top_compact">0.1</dimen> + <dimen name="constraint_bottom_compact">0.9</dimen> </resources>
\ No newline at end of file diff --git a/app/src/production/java/se/leap/bitmaskclient/AddProviderActivity.java b/app/src/production/java/se/leap/bitmaskclient/AddProviderActivity.java index 13e4e06d..32c78c38 100644 --- a/app/src/production/java/se/leap/bitmaskclient/AddProviderActivity.java +++ b/app/src/production/java/se/leap/bitmaskclient/AddProviderActivity.java @@ -11,103 +11,29 @@ import android.widget.Button; import butterknife.InjectView; -public class AddProviderActivity extends ConfigWizardBaseActivity { +public class AddProviderActivity extends AddProviderBaseActivity { final public static String TAG = "AddProviderActivity"; - 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_save) + Button saveButton; @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)); - } - final Button saveButton = findViewById(R.id.button_save); - saveButton.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - 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(); - } + init(); - 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)); - } } - 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); - } + @Override + public void setupSaveButton() { + saveButton.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + saveProvider(); } }); } - - 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(); - } - - } |