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 /app | |
parent | d63dd4b36701f2f993e671f8cc3c5424b787e43a (diff) |
#8886 add layout for tablets and improve tablet and phone layouts in general by implementing dynamic layout changes when keyboard appears
Diffstat (limited to 'app')
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(); - } - - } |