diff options
Diffstat (limited to 'app')
30 files changed, 261 insertions, 250 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java index ee3be1cb9..80ae13790 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/MainActivity.java @@ -27,6 +27,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; import androidx.appcompat.app.ActionBarDrawerToggle; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; @@ -84,7 +85,6 @@ import it.niedermann.nextcloud.deck.ui.board.ArchiveBoardListener; import it.niedermann.nextcloud.deck.ui.board.DeleteBoardListener; import it.niedermann.nextcloud.deck.ui.board.EditBoardDialogFragment; import it.niedermann.nextcloud.deck.ui.board.EditBoardListener; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar; import it.niedermann.nextcloud.deck.ui.card.CardAdapter; import it.niedermann.nextcloud.deck.ui.card.EditActivity; @@ -717,7 +717,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen final Stack stack = stackAdapter.getItem(binding.viewPager.getCurrentItem()); final long stackLocalId = stack.getLocalId(); observeOnce(mainViewModel.countCardsInStack(mainViewModel.getCurrentAccount().getId(), stackLocalId), MainActivity.this, (numberOfCards) -> { - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setTitle(R.string.archive_cards) .setMessage(getString(FilterInformation.hasActiveFilter(filterViewModel.getFilterInformation().getValue()) ? R.string.do_you_want_to_archive_all_cards_of_the_filtered_list @@ -865,7 +865,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen }); } else { DeckLog.warn("Cannot import account because server version is too low (" + response.getDeckVersion() + "). Minimum server version is currently", Version.minimumSupported()); - runOnUiThread(() -> new BrandedAlertDialogBuilder(MainActivity.this) + runOnUiThread(() -> new AlertDialog.Builder(MainActivity.this) .setTitle(R.string.update_deck) .setMessage(getString(R.string.deck_outdated_please_update, response.getDeckVersion().getOriginalVersion())) .setNegativeButton(R.string.simple_discard, null) @@ -879,7 +879,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen } } else { DeckLog.warn("Cannot import account because server version is currently in maintenance mode."); - runOnUiThread(() -> new BrandedAlertDialogBuilder(MainActivity.this) + runOnUiThread(() -> new AlertDialog.Builder(MainActivity.this) .setTitle(R.string.maintenance_mode) .setMessage(getString(R.string.maintenance_mode_explanation, createdAccount.getUrl())) .setPositiveButton(R.string.simple_close, null) @@ -894,7 +894,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen mainViewModel.deleteAccount(createdAccount.getId()); if (throwable instanceof OfflineException) { DeckLog.warn("Cannot import account because device is currently offline."); - runOnUiThread(() -> new BrandedAlertDialogBuilder(MainActivity.this) + runOnUiThread(() -> new AlertDialog.Builder(MainActivity.this) .setTitle(R.string.you_are_currently_offline) .setMessage(R.string.you_have_to_be_connected_to_the_internet_in_order_to_add_an_account) .setPositiveButton(R.string.simple_close, null) @@ -1078,7 +1078,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen public void onClone(Board board) { final String[] animals = {getString(R.string.clone_cards)}; final boolean[] checkedItems = {false}; - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setTitle(R.string.clone_board) .setMultiChoiceItems(animals, checkedItems, (dialog, which, isChecked) -> checkedItems[0] = isChecked) .setPositiveButton(R.string.simple_clone, (dialog, which) -> { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/DeleteBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/DeleteBoardDialogFragment.java index ee9519489..075439b15 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/DeleteBoardDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/DeleteBoardDialogFragment.java @@ -10,7 +10,7 @@ import androidx.fragment.app.DialogFragment; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.Board; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; +import it.niedermann.nextcloud.deck.ui.branding.DeleteAlertDialogBuilder; public class DeleteBoardDialogFragment extends DialogFragment { @@ -38,7 +38,7 @@ public class DeleteBoardDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new BrandedDeleteAlertDialogBuilder(requireContext()) + AlertDialog.Builder builder = new DeleteAlertDialogBuilder(requireContext()) .setTitle(getString(R.string.delete_something, board.getTitle())) .setMessage(R.string.delete_board_message) .setPositiveButton(R.string.simple_delete, (dialog, which) -> deleteBoardListener.onBoardDeleted(board)) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java index 9da836c4c..d084e65b9 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/EditBoardDialogFragment.java @@ -15,12 +15,10 @@ import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogTextColorInputBinding; import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.ui.MainViewModel; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; -public class EditBoardDialogFragment extends BrandedDialogFragment { +public class EditBoardDialogFragment extends DialogFragment { private DialogTextColorInputBinding binding; @@ -48,7 +46,7 @@ public class EditBoardDialogFragment extends BrandedDialogFragment { final Bundle args = getArguments(); - AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); if (args != null && args.containsKey(KEY_BOARD_ID)) { dialogBuilder.setTitle(R.string.edit_board); @@ -64,6 +62,7 @@ public class EditBoardDialogFragment extends BrandedDialogFragment { String title = this.fullBoard.getBoard().getTitle(); binding.input.setText(title); binding.input.setSelection(title.length()); + applyBrandToEditTextInputLayout(fb.getBoard().getColor(), binding.inputWrapper); binding.colorChooser.selectColor(fullBoard.getBoard().getColor()); } }); @@ -94,9 +93,4 @@ public class EditBoardDialogFragment extends BrandedDialogFragment { public static DialogFragment newInstance() { return newInstance(null); } - - @Override - public void applyBrand(int mainColor) { - applyBrandToEditText(mainColor, binding.input); - } }
\ No newline at end of file diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java index 44bbcfe19..f3232c95e 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/accesscontrol/AccessControlDialogFragment.java @@ -25,7 +25,6 @@ import it.niedermann.nextcloud.deck.model.User; import it.niedermann.nextcloud.deck.model.full.FullBoard; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.ui.MainViewModel; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import it.niedermann.nextcloud.deck.ui.branding.BrandedSnackbar; import it.niedermann.nextcloud.deck.ui.card.UserAutoCompleteAdapter; @@ -67,7 +66,7 @@ public class AccessControlDialogFragment extends BrandedDialogFragment implement super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); - final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); binding = DialogBoardShareBinding.inflate(requireActivity().getLayoutInflater()); adapter = new AccessControlAdapter(viewModel.getCurrentAccount(), this, requireContext()); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java index 2dacfe6ac..6c83ea8cb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/EditLabelDialogFragment.java @@ -11,7 +11,6 @@ import androidx.fragment.app.DialogFragment; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogTextColorInputBinding; import it.niedermann.nextcloud.deck.model.Label; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; @@ -54,7 +53,7 @@ public class EditLabelDialogFragment extends BrandedDialogFragment { super.onCreate(savedInstanceState); binding = DialogTextColorInputBinding.inflate(requireActivity().getLayoutInflater()); - AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); dialogBuilder.setTitle(getString(R.string.edit_tag, label.getTitle())); dialogBuilder.setPositiveButton(R.string.simple_save, (dialog, which) -> { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java index 79870514a..6d367b8c2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/board/managelabels/ManageLabelsDialogFragment.java @@ -23,12 +23,11 @@ import it.niedermann.nextcloud.deck.databinding.DialogBoardManageLabelsBinding; import it.niedermann.nextcloud.deck.model.Label; import it.niedermann.nextcloud.deck.persistence.sync.SyncManager; import it.niedermann.nextcloud.deck.ui.MainViewModel; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; +import it.niedermann.nextcloud.deck.ui.branding.DeleteAlertDialogBuilder; import static it.niedermann.nextcloud.deck.persistence.sync.adapters.db.util.LiveDataHelper.observeOnce; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; public class ManageLabelsDialogFragment extends BrandedDialogFragment implements ManageLabelListener, EditLabelListener { @@ -64,7 +63,7 @@ public class ManageLabelsDialogFragment extends BrandedDialogFragment implements super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); - final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); binding = DialogBoardManageLabelsBinding.inflate(requireActivity().getLayoutInflater()); colors = getResources().getStringArray(R.array.board_default_colors); adapter = new ManageLabelsAdapter(this, requireContext()); @@ -116,7 +115,7 @@ public class ManageLabelsDialogFragment extends BrandedDialogFragment implements @Override public void applyBrand(int mainColor) { applyBrandToFAB(mainColor, binding.fab); - applyBrandToEditText(mainColor, binding.addLabelTitle); + applyBrandToEditTextInputLayout(mainColor, binding.addLabelTitleWrapper); } public static DialogFragment newInstance(long boardLocalId) { @@ -133,7 +132,7 @@ public class ManageLabelsDialogFragment extends BrandedDialogFragment implements public void requestDelete(@NonNull Label label) { observeOnce(viewModel.countCardsWithLabel(label.getLocalId()), this, (count) -> { if (count > 0) { - new BrandedDeleteAlertDialogBuilder(requireContext()) + new DeleteAlertDialogBuilder(requireContext()) .setTitle(getString(R.string.delete_something, label.getTitle())) .setMessage(getResources().getQuantityString(R.plurals.do_you_want_to_delete_the_label, count, count)) .setPositiveButton(R.string.simple_delete, (dialog, which) -> deleteLabel(label)) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedAlertDialogBuilder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedAlertDialogBuilder.java deleted file mode 100644 index 880e21073..000000000 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedAlertDialogBuilder.java +++ /dev/null @@ -1,48 +0,0 @@ -package it.niedermann.nextcloud.deck.ui.branding; - -import android.content.Context; -import android.content.DialogInterface; -import android.widget.Button; - -import androidx.annotation.CallSuper; -import androidx.annotation.ColorInt; -import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; - -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; - -public class BrandedAlertDialogBuilder extends AlertDialog.Builder implements Branded { - - protected AlertDialog dialog; - - public BrandedAlertDialogBuilder(Context context) { - super(context); - } - - @NonNull - @Override - public AlertDialog create() { - this.dialog = super.create(); - - @NonNull Context context = getContext(); - @ColorInt final int mainColor = readBrandMainColor(context); - applyBrand(mainColor); - dialog.setOnShowListener(dialog -> applyBrand(mainColor)); - return dialog; - } - - @CallSuper - @Override - public void applyBrand(int mainColor) { - final Button[] buttons = new Button[3]; - buttons[0] = dialog.getButton(DialogInterface.BUTTON_POSITIVE); - buttons[1] = dialog.getButton(DialogInterface.BUTTON_NEGATIVE); - buttons[2] = dialog.getButton(DialogInterface.BUTTON_NEUTRAL); - for (Button button : buttons) { - if (button != null) { - button.setTextColor(getSecondaryForegroundColorDependingOnTheme(button.getContext(), mainColor)); - } - } - } -} diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java index 768ba13e0..b20e437f8 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandingUtil.java @@ -16,6 +16,7 @@ import androidx.preference.PreferenceManager; import com.google.android.material.floatingactionbutton.FloatingActionButton; import com.google.android.material.tabs.TabLayout; +import com.google.android.material.textfield.TextInputLayout; import it.niedermann.android.util.ColorUtil; import it.niedermann.nextcloud.deck.DeckLog; @@ -99,6 +100,11 @@ public abstract class BrandingUtil { )); } + public static void applyBrandToEditTextInputLayout(@ColorInt int color, @NonNull TextInputLayout til) { + til.setBoxStrokeColor(contrastRatioIsSufficientBigAreas(color, ContextCompat.getColor(til.getContext(), R.color.primary)) ? color : ContextCompat.getColor(til.getContext(), R.color.accent)); + til.setHintTextColor(ColorStateList.valueOf(contrastRatioIsSufficient(color, ContextCompat.getColor(til.getContext(), R.color.primary)) ? color : ContextCompat.getColor(til.getContext(), R.color.accent))); + } + public static void tintMenuIcon(@NonNull MenuItem menuItem, @ColorInt int color) { Drawable drawable = menuItem.getIcon(); if (drawable != null) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDeleteAlertDialogBuilder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/DeleteAlertDialogBuilder.java index d88fdd6cc..377c34363 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDeleteAlertDialogBuilder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/DeleteAlertDialogBuilder.java @@ -4,21 +4,30 @@ import android.content.Context; import android.content.DialogInterface; import android.widget.Button; -import androidx.annotation.CallSuper; +import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import it.niedermann.nextcloud.deck.R; -public class BrandedDeleteAlertDialogBuilder extends BrandedAlertDialogBuilder { +public class DeleteAlertDialogBuilder extends AlertDialog.Builder { - public BrandedDeleteAlertDialogBuilder(Context context) { + protected AlertDialog dialog; + + public DeleteAlertDialogBuilder(Context context) { super(context); } - @CallSuper + @NonNull @Override - public void applyBrand(int mainColor) { - super.applyBrand(mainColor); + public AlertDialog create() { + this.dialog = super.create(); + applyBrand(); + dialog.setOnShowListener(dialog -> applyBrand()); + return dialog; + } + + public void applyBrand() { final Button positiveButton = dialog.getButton(DialogInterface.BUTTON_POSITIVE); if (positiveButton != null) { positiveButton.setTextColor(ContextCompat.getColor(getContext(), R.color.danger)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java index 4ecd914fe..9646bae56 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/EditActivity.java @@ -15,6 +15,7 @@ import android.view.WindowManager; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; @@ -30,7 +31,6 @@ import it.niedermann.nextcloud.deck.model.Account; import it.niedermann.nextcloud.deck.model.Card; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.ocs.Version; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.exception.ExceptionHandler; import it.niedermann.nextcloud.deck.util.CardUtil; @@ -138,7 +138,7 @@ public class EditActivity extends AppCompatActivity { } else { observeOnce(viewModel.getFullCardWithProjectsByLocalId(account.getId(), cardId), EditActivity.this, (fullCard) -> { if (fullCard == null) { - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setTitle(R.string.card_not_found) .setMessage(R.string.card_not_found_message) .setPositiveButton(R.string.simple_close, (a, b) -> super.finish()) @@ -225,7 +225,7 @@ public class EditActivity extends AppCompatActivity { viewModel.getFullCard().getCard().setTitle(viewModel.getFullCard().getCard().getTitle().trim()); binding.title.setText(viewModel.getFullCard().getCard().getTitle()); if (viewModel.getFullCard().getCard().getTitle().isEmpty()) { - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setTitle(R.string.title_is_mandatory) .setMessage(R.string.provide_at_least_a_title_or_description) .setPositiveButton(android.R.string.ok, null) @@ -303,7 +303,7 @@ public class EditActivity extends AppCompatActivity { @Override public void finish() { if (!viewModel.hasChanges() && viewModel.canEdit()) { - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setTitle(R.string.simple_save) .setMessage(R.string.do_you_want_to_save_your_changes) .setPositiveButton(R.string.simple_save, (dialog, whichButton) -> saveAndFinish()) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java index db24f8112..c86807cb2 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/assignee/CardAssigneeDialog.java @@ -21,7 +21,7 @@ import java.io.Serializable; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogPreviewBinding; import it.niedermann.nextcloud.deck.model.User; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; +import it.niedermann.nextcloud.deck.ui.branding.DeleteAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; import it.niedermann.nextcloud.deck.ui.card.attachments.previewdialog.PreviewDialog; @@ -69,7 +69,7 @@ public class CardAssigneeDialog extends DialogFragment { binding = DialogPreviewBinding.inflate(LayoutInflater.from(requireContext())); viewModel = new ViewModelProvider(requireActivity()).get(EditCardViewModel.class); - AlertDialog.Builder dialogBuilder = new BrandedDeleteAlertDialogBuilder(requireContext()); + AlertDialog.Builder dialogBuilder = new DeleteAlertDialogBuilder(requireContext()); if (viewModel.canEdit() && cardAssigneeListener != null) { dialogBuilder.setPositiveButton(R.string.simple_unassign, (d, w) -> cardAssigneeListener.onUnassignUser(user)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DeleteAttachmentDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DeleteAttachmentDialogFragment.java index 02cec5771..270c0a138 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DeleteAttachmentDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/DeleteAttachmentDialogFragment.java @@ -10,7 +10,7 @@ import androidx.fragment.app.DialogFragment; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.model.Attachment; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; +import it.niedermann.nextcloud.deck.ui.branding.DeleteAlertDialogBuilder; public class DeleteAttachmentDialogFragment extends DialogFragment { @@ -40,7 +40,7 @@ public class DeleteAttachmentDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new BrandedDeleteAlertDialogBuilder(requireContext()) + AlertDialog.Builder builder = new DeleteAlertDialogBuilder(requireContext()) .setTitle(getString(R.string.delete_something, attachment.getFilename())) .setMessage(R.string.attachment_delete_message) .setPositiveButton(R.string.simple_delete, (dialog, whichButton) -> deleteAttachmentListener.onAttachmentDeleted(attachment)) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java index e2f2f3e28..1f425f728 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/attachments/previewdialog/PreviewDialog.java @@ -9,6 +9,7 @@ import android.text.TextUtils; import android.view.LayoutInflater; import androidx.annotation.NonNull; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.LiveData; import androidx.lifecycle.ViewModelProvider; @@ -18,7 +19,6 @@ import com.bumptech.glide.RequestBuilder; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogPreviewBinding; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -65,7 +65,7 @@ public class PreviewDialog extends DialogFragment { } }); - return new BrandedAlertDialogBuilder(requireContext()) + return new AlertDialog.Builder(requireContext()) .setPositiveButton(R.string.simple_attach, (d, w) -> { viewModel.setResult(true); dismiss(); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java index 692f8eb8f..a61d7c1ba 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsEditDialogFragment.java @@ -10,16 +10,16 @@ import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import java.util.Objects; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogAddCommentBinding; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; public class CardCommentsEditDialogFragment extends BrandedDialogFragment { private static final String BUNDLE_KEY_COMMENT_ID = "commentId"; @@ -50,7 +50,7 @@ public class CardCommentsEditDialogFragment extends BrandedDialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { binding = DialogAddCommentBinding.inflate(requireActivity().getLayoutInflater()); - return new BrandedAlertDialogBuilder(requireActivity()) + return new AlertDialog.Builder(requireActivity()) .setView(binding.getRoot()) .setTitle(R.string.simple_comment) .setNeutralButton(android.R.string.cancel, null) @@ -80,7 +80,7 @@ public class CardCommentsEditDialogFragment extends BrandedDialogFragment { @Override public void applyBrand(int mainColor) { - applyBrandToEditText(mainColor, binding.input); + applyBrandToEditTextInputLayout(mainColor, binding.inputWrapper); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java index a091b852d..33a19fe2d 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/comments/CardCommentsFragment.java @@ -33,6 +33,7 @@ import it.niedermann.nextcloud.deck.util.ViewUtil; import static android.view.View.GONE; import static android.view.View.VISIBLE; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToFAB; public class CardCommentsFragment extends Fragment implements CommentEditedListener, CommentDeletedListener, CommentSelectAsReplyListener { @@ -160,6 +161,7 @@ public class CardCommentsFragment extends Fragment implements CommentEditedListe private void applyBrand(int mainColor) { applyBrandToEditText(mainColor, binding.message); applyBrandToFAB(mainColor, binding.fab); + applyBrandToEditTextInputLayout(mainColor, binding.messageWrapper); } @Override diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java index 06fe1cd40..173b2d8fb 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/details/CardDetailsFragment.java @@ -59,8 +59,9 @@ import it.niedermann.nextcloud.deck.ui.card.assignee.CardAssigneeListener; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; import static android.view.View.GONE; +import static android.view.View.INVISIBLE; import static android.view.View.VISIBLE; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; public class CardDetailsFragment extends Fragment implements OnDateSetListener, OnTimeSetListener, CardAssigneeListener { @@ -132,10 +133,11 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, private void applyBrand(@ColorInt int boardColor) { // TODO apply correct branding on the BrandedDatePicker - applyBrandToEditText(boardColor, binding.labels); - applyBrandToEditText(boardColor, binding.dueDateDate); - applyBrandToEditText(boardColor, binding.dueDateTime); - applyBrandToEditText(boardColor, binding.people); + applyBrandToEditTextInputLayout(boardColor, binding.labelsWrapper); + applyBrandToEditTextInputLayout(boardColor, binding.dueDateDateWrapper); + applyBrandToEditTextInputLayout(boardColor, binding.dueDateTimeWrapper); + applyBrandToEditTextInputLayout(boardColor, binding.peopleWrapper); + applyBrandToEditTextInputLayout(boardColor, binding.descriptionEditorWrapper); binding.descriptionEditor.setSearchColor(boardColor); binding.descriptionViewer.setSearchColor(boardColor); } @@ -143,19 +145,16 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, private void setupDescription() { if (viewModel.canEdit()) { binding.descriptionViewer.setMovementMethod(LinkMovementMethod.getInstance()); - binding.descriptionBar.setOnClickListener((v) -> binding.descriptionEditor.requestFocus()); binding.descriptionToggle.setOnClickListener((v) -> { editorActive = !editorActive; if (editorActive) { binding.descriptionEditor.setMarkdownString(viewModel.getFullCard().getCard().getDescription()); - binding.descriptionBar.setOnClickListener((view) -> binding.descriptionEditor.requestFocus()); - binding.descriptionEditor.setVisibility(VISIBLE); + binding.descriptionEditorWrapper.setVisibility(VISIBLE); binding.descriptionViewer.setVisibility(GONE); binding.descriptionToggle.setImageResource(R.drawable.ic_baseline_eye_24); } else { binding.descriptionViewer.setMarkdownString(viewModel.getFullCard().getCard().getDescription()); - binding.descriptionBar.setOnClickListener(null); - binding.descriptionEditor.setVisibility(GONE); + binding.descriptionEditorWrapper.setVisibility(GONE); binding.descriptionViewer.setVisibility(VISIBLE); binding.descriptionToggle.setImageResource(R.drawable.ic_edit_grey600_24dp); } @@ -168,13 +167,13 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, } else { ExceptionDialogFragment.newInstance(new IllegalStateException(FullCard.class.getSimpleName() + " was empty when trying to setup description"), viewModel.getAccount()).show(getChildFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); } - binding.descriptionToggle.setVisibility(TextUtils.isEmpty(description) ? GONE : VISIBLE); + binding.descriptionToggle.setVisibility(TextUtils.isEmpty(description) ? INVISIBLE : VISIBLE); }; binding.descriptionEditor.getMarkdownString().observe(getViewLifecycleOwner(), descriptionObserver); binding.descriptionViewer.getMarkdownString().observe(getViewLifecycleOwner(), descriptionObserver); } else { binding.descriptionEditor.setEnabled(false); - binding.descriptionEditor.setVisibility(VISIBLE); + binding.descriptionEditorWrapper.setVisibility(VISIBLE); binding.descriptionViewer.setEnabled(false); binding.descriptionViewer.setVisibility(GONE); binding.descriptionViewer.setMarkdownString(viewModel.getFullCard().getCard().getDescription()); @@ -282,7 +281,7 @@ public class CardDetailsFragment extends Fragment implements OnDateSetListener, } binding.labelsGroup.setVisibility(VISIBLE); } else { - binding.labelsGroup.setVisibility(View.INVISIBLE); + binding.labelsGroup.setVisibility(INVISIBLE); } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java index 7434b6518..a6c1df4fe 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/projectresources/CardProjectResourcesDialog.java @@ -18,7 +18,6 @@ import java.util.Objects; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogProjectResourcesBinding; import it.niedermann.nextcloud.deck.model.ocs.projects.OcsProjectResource; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.card.EditCardViewModel; public class CardProjectResourcesDialog extends DialogFragment { @@ -50,7 +49,7 @@ public class CardProjectResourcesDialog extends DialogFragment { binding = DialogProjectResourcesBinding.inflate(LayoutInflater.from(requireContext())); viewModel = new ViewModelProvider(requireActivity()).get(EditCardViewModel.class); - AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); return dialogBuilder .setTitle(projectName) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java index bc730363e..6bdd7a588 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/filter/FilterDialogFragment.java @@ -23,7 +23,6 @@ import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogFilterBinding; import it.niedermann.nextcloud.deck.model.enums.EDueType; import it.niedermann.nextcloud.deck.model.internal.FilterInformation; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme; @@ -51,7 +50,7 @@ public class FilterDialogFragment extends BrandedDialogFragment { filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class); - final AlertDialog.Builder dialogBuilder = new BrandedAlertDialogBuilder(requireContext()); + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater()); binding.viewPager.setAdapter(new TabsPagerAdapter(this)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java index 332c3f194..fec92f7d4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareTargetActivity.java @@ -11,6 +11,7 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; +import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; @@ -31,7 +32,6 @@ import it.niedermann.nextcloud.deck.model.Board; import it.niedermann.nextcloud.deck.model.full.FullCard; import it.niedermann.nextcloud.deck.model.ocs.comment.DeckComment; import it.niedermann.nextcloud.deck.ui.MainActivity; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.card.SelectCardListener; import it.niedermann.nextcloud.deck.ui.exception.ExceptionDialogFragment; import it.niedermann.nextcloud.deck.util.MimeTypeUtil; @@ -67,7 +67,7 @@ public class ShareTargetActivity extends MainActivity implements SelectCardListe mStreamsToUpload.addAll(listOfParcelables); } } else { - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setTitle(R.string.error) .setMessage(R.string.operation_not_yet_supported) .setPositiveButton(R.string.simple_close, (a, b) -> finish()) @@ -151,7 +151,7 @@ public class ShareTargetActivity extends MainActivity implements SelectCardListe private void appendTextAndFinish(@NonNull FullCard fullCard, @NonNull String receivedText) { final String[] animals = {getString(R.string.append_text_to_description), getString(R.string.add_text_as_comment)}; - new BrandedAlertDialogBuilder(this) + new AlertDialog.Builder(this) .setOnCancelListener(dialog -> cardSelected = false) .setItems(animals, (dialog, which) -> { switch (which) { diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackDialogFragment.java index 066fb82d8..f32be185a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/DeleteStackDialogFragment.java @@ -9,7 +9,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import it.niedermann.nextcloud.deck.R; -import it.niedermann.nextcloud.deck.ui.branding.BrandedDeleteAlertDialogBuilder; +import it.niedermann.nextcloud.deck.ui.branding.DeleteAlertDialogBuilder; public class DeleteStackDialogFragment extends DialogFragment { @@ -42,7 +42,7 @@ public class DeleteStackDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new BrandedDeleteAlertDialogBuilder(requireContext()) + AlertDialog.Builder builder = new DeleteAlertDialogBuilder(requireContext()) .setTitle(R.string.delete_list) .setMessage(getResources().getQuantityString(R.plurals.do_you_want_to_delete_the_current_list, numberCards, numberCards)) .setPositiveButton(R.string.simple_delete, (dialog, whichButton) -> deleteStackListener.onStackDeleted(stackId)) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java index 6bedd0a0f..391c40c09 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/stack/EditStackDialogFragment.java @@ -17,11 +17,10 @@ import java.util.Objects; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogStackCreateBinding; -import it.niedermann.nextcloud.deck.ui.branding.BrandedAlertDialogBuilder; import it.niedermann.nextcloud.deck.ui.branding.BrandedDialogFragment; import static it.niedermann.nextcloud.deck.DeckApplication.NO_STACK_ID; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditText; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.applyBrandToEditTextInputLayout; public class EditStackDialogFragment extends BrandedDialogFragment { private static final String KEY_STACK_ID = "stack_id"; @@ -46,7 +45,7 @@ public class EditStackDialogFragment extends BrandedDialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { binding = DialogStackCreateBinding.inflate(requireActivity().getLayoutInflater()); - AlertDialog.Builder builder = new BrandedAlertDialogBuilder(requireActivity()) + final AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity()) .setView(binding.getRoot()) .setNeutralButton(android.R.string.cancel, null); if (getArguments() == null) { @@ -91,6 +90,6 @@ public class EditStackDialogFragment extends BrandedDialogFragment { @Override public void applyBrand(int mainColor) { - applyBrandToEditText(mainColor, binding.input); + applyBrandToEditTextInputLayout(mainColor, binding.inputWrapper); } } diff --git a/app/src/main/res/color/text_input_layout_color.xml b/app/src/main/res/color/text_input_layout_color.xml new file mode 100644 index 000000000..a6dc6e706 --- /dev/null +++ b/app/src/main/res/color/text_input_layout_color.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android"> + <item android:color="@color/accent" /> +</selector> diff --git a/app/src/main/res/layout/activity_edit.xml b/app/src/main/res/layout/activity_edit.xml index 4d59b296f..447cfefb8 100644 --- a/app/src/main/res/layout/activity_edit.xml +++ b/app/src/main/res/layout/activity_edit.xml @@ -21,6 +21,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginEnd="16dp" + android:hint="@string/simple_title" android:importantForAutofill="no" android:inputType="textMultiLine" android:maxLines="5" diff --git a/app/src/main/res/layout/dialog_add_comment.xml b/app/src/main/res/layout/dialog_add_comment.xml index 1172943f4..8d84816a0 100644 --- a/app/src/main/res/layout/dialog_add_comment.xml +++ b/app/src/main/res/layout/dialog_add_comment.xml @@ -1,16 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<com.google.android.material.textfield.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/inputWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" + android:hint="@string/simple_comment" + android:labelFor="@id/input" android:padding="?attr/dialogPreferredPadding"> <EditText android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/simple_comment" android:imeOptions="actionDone" android:importantForAutofill="no" android:inputType="text" /> -</FrameLayout>
\ No newline at end of file +</com.google.android.material.textfield.TextInputLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/dialog_board_manage_labels.xml b/app/src/main/res/layout/dialog_board_manage_labels.xml index ccd4481bc..2d3afa3ab 100644 --- a/app/src/main/res/layout/dialog_board_manage_labels.xml +++ b/app/src/main/res/layout/dialog_board_manage_labels.xml @@ -13,15 +13,24 @@ android:layout_marginBottom="@dimen/spacer_2x" android:orientation="horizontal"> - <EditText - android:id="@+id/add_label_title" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/addLabelTitleWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="0dp" android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/spacer_1x" android:layout_weight="1" android:hint="@string/add_tag" - android:imeOptions="actionSend" - android:importantForAutofill="no" - android:inputType="text" /> + android:labelFor="@id/add_label_title"> + + <EditText + android:id="@+id/add_label_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionSend" + android:importantForAutofill="no" + android:inputType="text" /> + </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" @@ -29,6 +38,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:contentDescription="@string/add_comment" + android:translationY="@dimen/spacer_1qx" app:backgroundTint="@color/defaultBrand" app:fabSize="mini" app:srcCompat="@drawable/ic_send_white_24dp" /> diff --git a/app/src/main/res/layout/dialog_stack_create.xml b/app/src/main/res/layout/dialog_stack_create.xml index 2f8a273b4..8c14e4177 100644 --- a/app/src/main/res/layout/dialog_stack_create.xml +++ b/app/src/main/res/layout/dialog_stack_create.xml @@ -1,16 +1,18 @@ <?xml version="1.0" encoding="utf-8"?> -<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" +<com.google.android.material.textfield.TextInputLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:id="@+id/inputWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" + android:hint="@string/simple_title" + android:labelFor="@id/input" android:padding="?attr/dialogPreferredPadding"> <EditText android:id="@+id/input" android:layout_width="match_parent" android:layout_height="wrap_content" - android:hint="@string/simple_title" android:imeOptions="actionDone" android:importantForAutofill="no" android:inputType="text" /> - -</FrameLayout>
\ No newline at end of file +</com.google.android.material.textfield.TextInputLayout>
\ No newline at end of file diff --git a/app/src/main/res/layout/dialog_text_color_input.xml b/app/src/main/res/layout/dialog_text_color_input.xml index fdaed6874..b7f482b4c 100644 --- a/app/src/main/res/layout/dialog_text_color_input.xml +++ b/app/src/main/res/layout/dialog_text_color_input.xml @@ -6,17 +6,26 @@ android:orientation="vertical" android:padding="?attr/dialogPreferredPadding"> - <EditText - android:id="@+id/input" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/inputWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/simple_title" - android:imeOptions="actionDone" - android:importantForAutofill="no" - android:inputType="text"> + android:labelFor="@id/input"> - <requestFocus /> - </EditText> + <EditText + android:id="@+id/input" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:imeOptions="actionDone" + android:importantForAutofill="no" + android:inputType="text"> + + <requestFocus /> + </EditText> + + </com.google.android.material.textfield.TextInputLayout> <it.niedermann.nextcloud.deck.ui.view.ColorChooser android:id="@+id/colorChooser" diff --git a/app/src/main/res/layout/fragment_card_edit_tab_comments.xml b/app/src/main/res/layout/fragment_card_edit_tab_comments.xml index 3897cef37..f1c52d220 100644 --- a/app/src/main/res/layout/fragment_card_edit_tab_comments.xml +++ b/app/src/main/res/layout/fragment_card_edit_tab_comments.xml @@ -109,7 +109,10 @@ android:layout_height="wrap_content" android:clipToPadding="false" android:orientation="horizontal" - android:padding="@dimen/spacer_2x"> + android:paddingStart="@dimen/spacer_2x" + android:paddingTop="@dimen/spacer_1x" + android:paddingEnd="@dimen/spacer_2x" + android:paddingBottom="@dimen/spacer_1x"> <ImageView android:id="@+id/avatar" @@ -118,27 +121,34 @@ android:layout_gravity="center" android:layout_margin="@dimen/spacer_1x" android:contentDescription="@null" + android:translationY="@dimen/spacer_1qx" app:srcCompat="@drawable/ic_person_grey600_24dp" tools:srcCompat="@tools:sample/avatars" /> - <EditText - android:id="@+id/message" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/messageWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_gravity="center" android:layout_marginStart="@dimen/spacer_1x" android:layout_marginEnd="@dimen/spacer_2x" android:layout_weight="1" - android:autofillHints="@null" android:hint="@string/add_comment" - android:imeOptions="flagNoExtractUi|actionSend" - android:inputType="text" - android:maxLength="@integer/comment_max_length" - android:paddingEnd="@dimen/spacer_1x" - tools:ignore="RtlSymmetry"> + android:labelFor="@id/message"> + + <EditText + android:id="@+id/message" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:autofillHints="@null" + android:imeOptions="flagNoExtractUi|actionSend" + android:inputType="text" + android:maxLength="@integer/comment_max_length"> - <requestFocus /> - </EditText> + <requestFocus /> + </EditText> + </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.floatingactionbutton.FloatingActionButton android:id="@+id/fab" @@ -146,6 +156,7 @@ android:layout_height="wrap_content" android:layout_gravity="center" android:contentDescription="@string/add_comment" + android:translationY="@dimen/spacer_1qx" app:backgroundTint="@color/defaultBrand" app:fabSize="mini" app:srcCompat="@drawable/ic_send_white_24dp" /> diff --git a/app/src/main/res/layout/fragment_card_edit_tab_details.xml b/app/src/main/res/layout/fragment_card_edit_tab_details.xml index a2f5e5b21..66b58dbd9 100644 --- a/app/src/main/res/layout/fragment_card_edit_tab_details.xml +++ b/app/src/main/res/layout/fragment_card_edit_tab_details.xml @@ -17,33 +17,28 @@ android:orientation="vertical" android:padding="@dimen/spacer_2x"> - <LinearLayout + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/labelsWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacer_2x" - android:orientation="horizontal"> - - <ImageView - android:layout_width="@dimen/icon_size_details" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/spacer_2x" - android:contentDescription="@null" - app:srcCompat="@drawable/ic_label_grey600_24dp" /> + android:hint="@string/label_labels" + app:startIconDrawable="@drawable/ic_label_grey600_24dp"> <it.niedermann.nextcloud.deck.ui.view.ToggleAutoCompleteTextView android:id="@+id/labels" + style="@style/Widget.MaterialComponents.AutoCompleteTextView.OutlinedBox.Dense" android:layout_width="match_parent" android:layout_height="wrap_content" android:completionThreshold="1" - android:hint="@string/label_labels" android:inputType="text" /> - </LinearLayout> + </com.google.android.material.textfield.TextInputLayout> <com.google.android.material.chip.ChipGroup android:id="@+id/labelsGroup" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="40dp" android:animateLayoutChanges="true" /> <LinearLayout @@ -52,135 +47,148 @@ android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacer_2x"> - - <ImageView - android:layout_width="@dimen/icon_size_details" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/spacer_2x" - android:contentDescription="@null" - app:srcCompat="@drawable/calendar_blank_grey600_24dp" /> - - <EditText - android:id="@+id/dueDateDate" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/dueDateDateWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="2" - android:enabled="true" - android:focusable="false" android:hint="@string/hint_due_date_date" - android:importantForAutofill="no" - android:inputType="date" - android:maxLines="1" - tools:text="01/07/2020" /> - - <EditText - android:id="@+id/dueDateTime" + android:labelFor="@id/dueDateDate" + android:paddingStart="0dp" + android:paddingEnd="@dimen/spacer_2x" + app:startIconDrawable="@drawable/calendar_blank_grey600_24dp"> + + <EditText + android:id="@+id/dueDateDate" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:enabled="true" + android:focusable="false" + android:importantForAutofill="no" + android:inputType="date" + android:maxLines="1" + tools:text="01/07/2020" /> + </com.google.android.material.textfield.TextInputLayout> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/dueDateTimeWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="wrap_content" - android:layout_height="wrap_content" + android:layout_height="match_parent" android:layout_gravity="center_horizontal" android:layout_weight="1" - android:enabled="true" - android:focusable="false" android:hint="@string/hint_due_date_time" - android:importantForAutofill="no" - android:inputType="datetime" - android:maxLines="1" - android:minLines="0" - android:textAlignment="center" - tools:text="11:45" /> + android:labelFor="@id/dueDateTime"> + + <EditText + android:id="@+id/dueDateTime" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:enabled="true" + android:focusable="false" + android:importantForAutofill="no" + android:inputType="datetime" + android:maxLines="1" + android:minLines="0" + android:textAlignment="center" + tools:text="11:45" /> + </com.google.android.material.textfield.TextInputLayout> <ImageView android:id="@+id/clearDueDate" android:layout_width="wrap_content" - android:layout_height="match_parent" + android:layout_height="wrap_content" + android:layout_gravity="center" android:contentDescription="@string/label_clear_due_date" - android:paddingStart="@dimen/spacer_1x" + android:paddingStart="@dimen/spacer_2x" + android:paddingTop="@dimen/spacer_1x" android:paddingEnd="@dimen/spacer_1x" + android:paddingBottom="@dimen/spacer_1x" + android:translationY="@dimen/spacer_1hx" app:srcCompat="@drawable/ic_close_circle_grey600" /> </LinearLayout> - <LinearLayout + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/peopleWrapper" + style="@style/TextInputLayoutStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/spacer_2x" - android:orientation="horizontal"> - - <ImageView - android:layout_width="@dimen/icon_size_details" - android:layout_height="match_parent" - android:layout_marginEnd="@dimen/spacer_2x" - android:contentDescription="@null" - app:srcCompat="@drawable/ic_person_grey600_24dp" /> + android:hint="@string/hint_assign_people" + app:startIconDrawable="@drawable/ic_person_grey600_24dp"> <it.niedermann.nextcloud.deck.ui.view.ToggleAutoCompleteTextView android:id="@+id/people" + style="@style/Widget.MaterialComponents.AutoCompleteTextView.OutlinedBox.Dense" android:layout_width="match_parent" android:layout_height="wrap_content" android:completionThreshold="1" - android:hint="@string/hint_assign_people" android:inputType="text" /> - </LinearLayout> + </com.google.android.material.textfield.TextInputLayout> <androidx.recyclerview.widget.RecyclerView android:id="@+id/assignees" android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_marginStart="40dp" android:layout_marginTop="@dimen/spacer_1x" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" tools:listitem="@tools:sample/avatars" /> - <LinearLayout - android:id="@+id/descriptionBar" + <RelativeLayout android:layout_width="match_parent" - android:layout_height="wrap_content" - android:orientation="horizontal"> - - <ImageView - android:layout_width="@dimen/icon_size_details" - android:layout_height="wrap_content" - android:layout_marginEnd="@dimen/spacer_2x" - android:contentDescription="@null" - app:srcCompat="@drawable/ic_baseline_subject_24" /> + android:layout_height="wrap_content"> - <LinearLayout - android:layout_width="0dp" + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/descriptionEditorWrapper" + style="@style/TextInputLayoutStyle" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:layout_weight="1" - android:gravity="end" - android:orientation="horizontal"> + android:layout_marginTop="@dimen/spacer_1x" + android:hint="@string/label_description"> - <ImageView - android:id="@+id/descriptionToggle" - android:layout_width="wrap_content" + <it.niedermann.android.markdown.MarkdownEditorImpl + android:id="@+id/descriptionEditor" + android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="?attr/selectableItemBackgroundBorderless" - android:contentDescription="@string/edit_description" - android:paddingStart="@dimen/spacer_1x" - android:paddingEnd="@dimen/spacer_1x" - android:visibility="gone" - app:srcCompat="@drawable/ic_baseline_eye_24" - tools:visibility="gone" /> - </LinearLayout> - </LinearLayout> + android:layout_marginTop="@dimen/spacer_1x" + android:padding="@dimen/spacer_2x" + android:textColor="?attr/colorAccent" + android:textSize="@dimen/font_size_description" /> - <it.niedermann.android.markdown.MarkdownEditorImpl - android:id="@+id/descriptionEditor" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacer_1x" - android:textColor="?attr/colorAccent" - android:textSize="@dimen/font_size_description" /> + </com.google.android.material.textfield.TextInputLayout> - <it.niedermann.android.markdown.MarkdownViewerImpl - android:id="@+id/descriptionViewer" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="@dimen/spacer_2x" - android:textColor="?attr/colorAccent" - android:textIsSelectable="true" - android:textSize="@dimen/font_size_description" - android:visibility="gone" /> + <it.niedermann.android.markdown.MarkdownViewerImpl + android:id="@+id/descriptionViewer" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:padding="@dimen/spacer_2x" + android:textColor="?attr/colorAccent" + android:textIsSelectable="true" + android:textSize="@dimen/font_size_description" + android:translationY="1dp" + android:visibility="gone" /> + + <ImageButton + android:id="@+id/descriptionToggle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_alignParentTop="true" + android:layout_alignParentEnd="true" + android:layout_gravity="bottom" + android:layout_marginEnd="6dp" + android:background="?attr/colorPrimary" + android:contentDescription="@string/edit_description" + android:paddingStart="@dimen/spacer_1hx" + android:paddingTop="@dimen/spacer_1x" + android:paddingEnd="@dimen/spacer_1hx" + android:paddingBottom="@dimen/spacer_1hx" + android:translationY="-7dp" + android:visibility="invisible" + app:srcCompat="@drawable/ic_baseline_eye_24" + tools:visibility="visible" /> + </RelativeLayout> </LinearLayout> <TextView diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 9881f8e76..9f0cfdff8 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -8,6 +8,8 @@ <item name="android:windowBackground">?attr/colorPrimary</item> <item name="textAppearanceHeadline1">@style/Deck.TextAppearance.Headline1</item> <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item> + <item name="android:colorControlNormal">?attr/colorAccent</item> + <item name="android:colorControlActivated">?attr/colorAccent</item> </style> <style name="AppBottomSheetDialogTheme" parent="Theme.MaterialComponents.DayNight.BottomSheetDialog"> @@ -22,6 +24,11 @@ <item name="android:background">?attr/colorPrimary</item> </style> + <style name="TextInputLayoutStyle" parent="Widget.MaterialComponents.TextInputLayout.OutlinedBox.Dense"> + <item name="boxStrokeColor">@color/text_input_layout_color</item> + <item name="hintTextColor">@color/text_input_layout_color</item> + </style> + <!-- Default is a light theme with the dark blue brand --> <style name="AppTheme" parent="BaseTheme" /> |