From 6da1079ce51258714002f13d8e40ff9b551f866b Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 1 Nov 2018 09:34:15 +0100 Subject: [PATCH 01/13] WiP Signed-off-by: Andy Scherzinger --- .../ui/activity/ParticipateActivity.java | 5 +- .../ui/activity/UploadFilesActivity.java | 6 +- .../ui/dialog/SortingOrderDialogFragment.java | 4 +- ...SyncedFolderPreferencesDialogFragment.java | 6 +- .../ui/fragment/ShareFileFragment.java | 8 +- .../ContactsBackupFragment.java | 8 +- src/main/res/layout-land/account_setup.xml | 4 +- src/main/res/layout/account_setup.xml | 4 +- src/main/res/layout/activity_manage_space.xml | 2 +- .../layout/activity_sso_grant_permission.xml | 4 +- src/main/res/layout/contactlist_fragment.xml | 2 +- .../res/layout/contacts_backup_fragment.xml | 4 +- src/main/res/layout/files_folder_picker.xml | 6 +- src/main/res/layout/generic_explanation.xml | 13 +-- src/main/res/layout/log_send_file.xml | 4 +- src/main/res/layout/participate_layout.xml | 2 +- src/main/res/layout/passcodelock.xml | 2 +- src/main/res/layout/share_file_layout.xml | 4 +- .../res/layout/sorting_order_fragment.xml | 2 +- .../res/layout/ssl_untrusted_cert_layout.xml | 79 +++++++++--------- src/main/res/layout/ssl_validator_layout.xml | 81 ++++++++++--------- .../layout/synced_folders_settings_layout.xml | 6 +- src/main/res/layout/upload_files_layout.xml | 9 ++- src/main/res/layout/uploader_layout.xml | 7 +- src/main/res/layout/whats_new_activity.xml | 2 +- src/main/res/values/styles.xml | 38 ++++----- 26 files changed, 158 insertions(+), 154 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/activity/ParticipateActivity.java b/src/main/java/com/owncloud/android/ui/activity/ParticipateActivity.java index 8463ff1624b7..8c37ea293853 100644 --- a/src/main/java/com/owncloud/android/ui/activity/ParticipateActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/ParticipateActivity.java @@ -30,12 +30,11 @@ import android.view.View; import android.widget.TextView; +import com.google.android.material.button.MaterialButton; import com.owncloud.android.R; import com.owncloud.android.utils.DisplayUtils; import com.owncloud.android.utils.ThemeUtils; -import androidx.appcompat.widget.AppCompatButton; - /** * Activity providing information about ways to participate in the app's development. */ @@ -93,7 +92,7 @@ private void setupContent() { ThemeUtils.colorToHexString(ThemeUtils.primaryColor(this, true)), getString(R.string.contributing_link))))); - AppCompatButton reportButton = findViewById(R.id.participate_testing_report); + MaterialButton reportButton = findViewById(R.id.participate_testing_report); reportButton.getBackground().setColorFilter(ThemeUtils.primaryAccentColor(this), PorterDuff.Mode.SRC_ATOP); reportButton.setOnClickListener(v -> DisplayUtils.startLinkIntent(this, R.string.report_issue_link)); } diff --git a/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java b/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java index 045da70850c4..88d72c1c5bcd 100644 --- a/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java +++ b/src/main/java/com/owncloud/android/ui/activity/UploadFilesActivity.java @@ -42,6 +42,7 @@ import android.widget.Spinner; import android.widget.TextView; +import com.google.android.material.button.MaterialButton; import com.owncloud.android.R; import com.owncloud.android.db.PreferenceManager; import com.owncloud.android.lib.common.utils.Log_OC; @@ -62,7 +63,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.widget.AppCompatButton; import androidx.appcompat.widget.AppCompatSpinner; import androidx.appcompat.widget.SearchView; import androidx.core.view.MenuItemCompat; @@ -160,7 +160,7 @@ public void onCreate(Bundle savedInstanceState) { if (mLocalFolderPickerMode) { findViewById(R.id.upload_options).setVisibility(View.GONE); - ((AppCompatButton) findViewById(R.id.upload_files_btn_upload)) + ((MaterialButton) findViewById(R.id.upload_files_btn_upload)) .setText(R.string.uploader_btn_alternative_text); } @@ -169,7 +169,7 @@ public void onCreate(Bundle savedInstanceState) { // Set input controllers findViewById(R.id.upload_files_btn_cancel).setOnClickListener(this); - mUploadBtn = (AppCompatButton) findViewById(R.id.upload_files_btn_upload); + mUploadBtn = (MaterialButton) findViewById(R.id.upload_files_btn_upload); mUploadBtn.getBackground().setColorFilter(ThemeUtils.primaryAccentColor(this), PorterDuff.Mode.SRC_ATOP); mUploadBtn.setOnClickListener(this); diff --git a/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.java index d5c64ea2e254..2059004f1787 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/SortingOrderDialogFragment.java @@ -30,13 +30,13 @@ import android.widget.ImageButton; import android.widget.TextView; +import com.google.android.material.button.MaterialButton; import com.owncloud.android.R; import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.utils.FileSortOrder; import com.owncloud.android.utils.ThemeUtils; import androidx.annotation.NonNull; -import androidx.appcompat.widget.AppCompatButton; import androidx.fragment.app.DialogFragment; /** @@ -51,7 +51,7 @@ public class SortingOrderDialogFragment extends DialogFragment { private View mView; private View[] mTaggedViews; - private AppCompatButton mCancel; + private MaterialButton mCancel; private String mCurrentSortOrderName; public static SortingOrderDialogFragment newInstance(FileSortOrder sortOrder) { diff --git a/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.java index 1d24176989f8..b395e0742a8a 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/SyncedFolderPreferencesDialogFragment.java @@ -34,6 +34,7 @@ import android.view.ViewGroup; import android.widget.TextView; +import com.google.android.material.button.MaterialButton; import com.owncloud.android.R; import com.owncloud.android.datamodel.MediaFolderType; import com.owncloud.android.datamodel.SyncedFolderDisplayItem; @@ -49,7 +50,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AlertDialog; -import androidx.appcompat.widget.AppCompatButton; import androidx.appcompat.widget.AppCompatCheckBox; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.DialogFragment; @@ -78,8 +78,8 @@ public class SyncedFolderPreferencesDialogFragment extends DialogFragment { private TextView mRemoteFolderSummary; private SyncedFolderParcelable mSyncedFolder; - private AppCompatButton mCancel; - private AppCompatButton mSave; + private MaterialButton mCancel; + private MaterialButton mSave; private boolean behaviourDialogShown; private AlertDialog behaviourDialog; diff --git a/src/main/java/com/owncloud/android/ui/fragment/ShareFileFragment.java b/src/main/java/com/owncloud/android/ui/fragment/ShareFileFragment.java index a6e283df400c..4da0dd719947 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/ShareFileFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/ShareFileFragment.java @@ -39,6 +39,7 @@ import android.widget.ScrollView; import android.widget.TextView; +import com.google.android.material.button.MaterialButton; import com.google.android.material.snackbar.Snackbar; import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; @@ -60,7 +61,6 @@ import java.util.List; import androidx.annotation.NonNull; -import androidx.appcompat.widget.AppCompatButton; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; @@ -717,7 +717,7 @@ private void updatePublicShareSection() { } // GetLink button - AppCompatButton getLinkButton = getGetLinkButton(); + MaterialButton getLinkButton = getGetLinkButton(); getLinkButton.getBackground().setColorFilter(ThemeUtils.primaryAccentColor(getContext()), PorterDuff.Mode.SRC_ATOP); getLinkButton.setVisibility(View.VISIBLE); @@ -873,8 +873,8 @@ private View getHideFileListingPermissionSection() { return getView().findViewById(R.id.shareViaLinkHideFileListingPermissionSection); } - private AppCompatButton getGetLinkButton() { - return (AppCompatButton) getView().findViewById(R.id.shareViaLinkGetLinkButton); + private MaterialButton getGetLinkButton() { + return (MaterialButton) getView().findViewById(R.id.shareViaLinkGetLinkButton); } /** diff --git a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java index aeb5a138fe71..462f51bf1238 100644 --- a/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java +++ b/src/main/java/com/owncloud/android/ui/fragment/contactsbackup/ContactsBackupFragment.java @@ -39,6 +39,7 @@ import com.evernote.android.job.JobRequest; import com.evernote.android.job.util.support.PersistableBundleCompat; +import com.google.android.material.button.MaterialButton; import com.google.android.material.snackbar.Snackbar; import com.owncloud.android.R; import com.owncloud.android.datamodel.ArbitraryDataProvider; @@ -63,7 +64,6 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.ActionBar; -import androidx.appcompat.widget.AppCompatButton; import androidx.appcompat.widget.SwitchCompat; import androidx.fragment.app.Fragment; import butterknife.BindView; @@ -81,13 +81,13 @@ public class ContactsBackupFragment extends FileFragment implements DatePickerDi public SwitchCompat backupSwitch; @BindView(R.id.contacts_datepicker) - public AppCompatButton contactsDatePickerBtn; + public MaterialButton contactsDatePickerBtn; @BindView(R.id.contacts_last_backup_timestamp) public TextView lastBackup; @BindView(R.id.contacts_backup_now) - public AppCompatButton backupNow; + public MaterialButton backupNow; private Date selectedDate; private boolean calendarPickerOpen; @@ -183,7 +183,7 @@ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { contactsDatePickerBtn.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP); contactsDatePickerBtn.setTextColor(fontColor); - AppCompatButton chooseDate = view.findViewById(R.id.contacts_datepicker); + MaterialButton chooseDate = view.findViewById(R.id.contacts_datepicker); chooseDate.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP); chooseDate.setTextColor(ThemeUtils.fontColor(getContext())); diff --git a/src/main/res/layout-land/account_setup.xml b/src/main/res/layout-land/account_setup.xml index 770459261621..2cddd7519649 100644 --- a/src/main/res/layout-land/account_setup.xml +++ b/src/main/res/layout-land/account_setup.xml @@ -58,7 +58,7 @@ android:orientation="vertical" android:padding="@dimen/standard_half_padding" > - - - - - - - - - - - - - - - - - - - - @@ -110,11 +110,11 @@ - - @@ -130,15 +130,15 @@ @color/primary_dark - - - @@ -153,7 +153,7 @@ - - - - - @@ -226,7 +226,7 @@ @null - - - + + - - @@ -171,7 +171,6 @@ @drawable/launch_screen - - From 1fa9f39a0de2e5ec2ac1adf858c39f78f20198ae Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Thu, 20 Dec 2018 17:15:18 +0100 Subject: [PATCH 06/13] add OutlinedBox styling for wrapper EditTexts including theming Signed-off-by: Andy Scherzinger --- .../android/ui/components/CustomEditText.java | 3 +- .../android/ui/dialog/NoteDialogFragment.java | 11 ++++-- .../owncloud/android/utils/ThemeUtils.java | 21 +++++++++++ src/main/res/layout-land/account_setup.xml | 8 ++--- src/main/res/layout/account_setup.xml | 14 ++++---- src/main/res/layout/choose_template.xml | 2 +- src/main/res/layout/edit_box_dialog.xml | 2 +- src/main/res/layout/note_dialog.xml | 36 +++++++++++-------- src/main/res/layout/passcodelock.xml | 10 +++--- src/main/res/layout/password_dialog.xml | 5 +-- .../res/layout/setup_encryption_dialog.xml | 2 +- src/main/res/layout/upload_file_dialog.xml | 2 +- src/main/res/values/styles.xml | 6 ++-- 13 files changed, 79 insertions(+), 43 deletions(-) diff --git a/src/main/java/com/owncloud/android/ui/components/CustomEditText.java b/src/main/java/com/owncloud/android/ui/components/CustomEditText.java index 5ab3a1d06372..dc7463932de7 100644 --- a/src/main/java/com/owncloud/android/ui/components/CustomEditText.java +++ b/src/main/java/com/owncloud/android/ui/components/CustomEditText.java @@ -26,13 +26,14 @@ import android.text.TextUtils; import android.util.AttributeSet; +import com.google.android.material.textfield.TextInputEditText; import com.owncloud.android.R; import com.owncloud.android.authentication.AuthenticatorActivity; /** * Custom edit text to support fixed suffix or prefix */ -public class CustomEditText extends androidx.appcompat.widget.AppCompatEditText { +public class CustomEditText extends TextInputEditText { private Rect fixedRect = new Rect(); private String fixedText = ""; private boolean isPrefixFixed; diff --git a/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java b/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java index af70fe712798..69c102edf5e6 100644 --- a/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java +++ b/src/main/java/com/owncloud/android/ui/dialog/NoteDialogFragment.java @@ -24,6 +24,8 @@ import android.annotation.SuppressLint; import android.app.Dialog; import android.content.DialogInterface; +import android.content.res.ColorStateList; +import android.graphics.Color; import android.graphics.PorterDuff; import android.os.Bundle; import android.view.LayoutInflater; @@ -32,6 +34,8 @@ import android.view.WindowManager.LayoutParams; import android.widget.EditText; +import com.google.android.material.textfield.TextInputEditText; +import com.google.android.material.textfield.TextInputLayout; import com.owncloud.android.R; import com.owncloud.android.lib.resources.shares.OCShare; import com.owncloud.android.ui.activity.ComponentsGetter; @@ -58,8 +62,11 @@ public class NoteDialogFragment extends DialogFragment implements DialogInterfac private OCShare share; private Unbinder unbinder; + @BindView(R.id.user_input_container) + TextInputLayout noteEditTextInputLayout; + @BindView(R.id.user_input) - EditText noteEditText; + TextInputEditText noteEditText; public static NoteDialogFragment newInstance(OCShare share) { NoteDialogFragment frag = new NoteDialogFragment(); @@ -107,7 +114,7 @@ public Dialog onCreateDialog(Bundle savedInstanceState) { // Setup layout noteEditText.setText(share.getNote()); noteEditText.requestFocus(); - noteEditText.getBackground().setColorFilter(accentColor, PorterDuff.Mode.SRC_ATOP); + ThemeUtils.colorTextInputLayout(noteEditTextInputLayout, accentColor); // Build the dialog AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()); diff --git a/src/main/java/com/owncloud/android/utils/ThemeUtils.java b/src/main/java/com/owncloud/android/utils/ThemeUtils.java index b0dae44e3c44..aacc2d3c1042 100644 --- a/src/main/java/com/owncloud/android/utils/ThemeUtils.java +++ b/src/main/java/com/owncloud/android/utils/ThemeUtils.java @@ -40,6 +40,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.snackbar.Snackbar; +import com.google.android.material.textfield.TextInputLayout; import com.owncloud.android.MainApp; import com.owncloud.android.R; import com.owncloud.android.authentication.AccountUtils; @@ -367,6 +368,26 @@ public static void colorToolbarProgressBar(FragmentActivity activity, int progre } } + /** + * Sets the color of the TextInputLayout to {@code color} for hint text and box stroke. + * + * @param textInputLayout the TextInputLayout instance + * @param color the color to be used for the hint text and box stroke + */ + public static void colorTextInputLayout(TextInputLayout textInputLayout, int color) { + textInputLayout.setBoxStrokeColor(color); + textInputLayout.setDefaultHintTextColor(new ColorStateList( + new int[][]{ + new int[]{-android.R.attr.state_focused}, + new int[]{android.R.attr.state_focused}, + }, + new int[]{ + Color.GRAY, + color + } + )); + } + public static void tintCheckbox(AppCompatCheckBox checkBox, int color) { CompoundButtonCompat.setButtonTintList(checkBox, new ColorStateList( new int[][]{ diff --git a/src/main/res/layout-land/account_setup.xml b/src/main/res/layout-land/account_setup.xml index 2cddd7519649..2a469c871035 100644 --- a/src/main/res/layout-land/account_setup.xml +++ b/src/main/res/layout-land/account_setup.xml @@ -175,7 +175,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - - - @@ -168,7 +168,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content"> - - - - - - . --> - - + + + style="@style/TextInputLayout" + android:hint="@string/hint_note"> + + + + diff --git a/src/main/res/layout/passcodelock.xml b/src/main/res/layout/passcodelock.xml index 2b0d545e0ea2..2248d066c9c8 100644 --- a/src/main/res/layout/passcodelock.xml +++ b/src/main/res/layout/passcodelock.xml @@ -51,7 +51,7 @@ android:layout_height="wrap_content" android:gravity="center_horizontal" > - - + - - - - - + diff --git a/src/main/res/layout/setup_encryption_dialog.xml b/src/main/res/layout/setup_encryption_dialog.xml index 82c67ab31ea2..c76a88e004c1 100644 --- a/src/main/res/layout/setup_encryption_dialog.xml +++ b/src/main/res/layout/setup_encryption_dialog.xml @@ -41,7 +41,7 @@ android:textIsSelectable="true" android:visibility="gone" /> - - - + + - - @@ -237,6 +252,7 @@ 1 + false + +