diff options
author | Stefan Niedermann <info@niedermann.it> | 2022-11-04 12:25:13 +0300 |
---|---|---|
committer | Stefan Niedermann <info@niedermann.it> | 2022-11-04 12:25:13 +0300 |
commit | 7183470a252173adc4231bd5373c6805c3709b11 (patch) | |
tree | 99e8ffe0b9d709ef6553988f228dc2503eb77cd0 /app/src/main/java | |
parent | 6a14c4f6ce235807241694f0290f3bd2f312bfc2 (diff) |
Fix #1330 Update to The Material Design 3
Signed-off-by: Stefan Niedermann <info@niedermann.it>
Diffstat (limited to 'app/src/main/java')
21 files changed, 100 insertions, 62 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 7e25beeb9..8d91048cd 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 @@ -39,7 +39,6 @@ import android.net.Uri; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; -import android.util.TypedValue; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -54,7 +53,6 @@ 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; @@ -70,6 +68,7 @@ import androidx.viewpager2.widget.ViewPager2; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.navigation.NavigationView.OnNavigationItemSelectedListener; import com.google.android.material.snackbar.Snackbar; import com.google.android.material.tabs.TabLayoutMediator; @@ -114,6 +113,7 @@ 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.BrandedSnackbar; +import it.niedermann.nextcloud.deck.ui.branding.BrandingUtil; import it.niedermann.nextcloud.deck.ui.card.CardAdapter; import it.niedermann.nextcloud.deck.ui.card.CreateCardListener; import it.niedermann.nextcloud.deck.ui.card.NewCardDialog; @@ -196,10 +196,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen Thread.setDefaultUncaughtExceptionHandler(new ExceptionHandler(this)); setTheme(R.style.AppTheme); - - final var typedValue = new TypedValue(); - getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true); - colorAccent = typedValue.data; + colorAccent = BrandingUtil.getAttribute(this, R.attr.colorAccent); binding = ActivityMainBinding.inflate(getLayoutInflater()); headerBinding = NavHeaderMainBinding.bind(binding.navigationView.getHeaderView(0)); @@ -501,6 +498,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen IResponseCallback.super.onError(error); runOnUiThread(() -> BrandedSnackbar.make(binding.coordinatorLayout, Objects.requireNonNull(error.getLocalizedMessage()), Snackbar.LENGTH_LONG) .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(error, mainViewModel.getCurrentAccount()).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())) + .setAnchorView(binding.fab) .show()); } }); @@ -551,6 +549,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen IResponseCallback.super.onError(throwable); runOnUiThread(() -> BrandedSnackbar.make(binding.coordinatorLayout, R.string.synchronization_failed, Snackbar.LENGTH_LONG) .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(throwable, mainViewModel.getCurrentAccount()).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())) + .setAnchorView(binding.fab) .show()); } }); @@ -750,7 +749,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen final var stack = stackAdapter.getItem(binding.viewPager.getCurrentItem()); final var stackLocalId = stack.getLocalId(); mainViewModel.countCardsInStack(mainViewModel.getCurrentAccount().getId(), stackLocalId, (numberOfCards) -> runOnUiThread(() -> - new AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(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 @@ -857,13 +856,15 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen if (!response.isMaintenanceEnabled()) { if (response.getDeckVersion().isSupported()) { runOnUiThread(() -> { - final var importSnackbar = BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_is_getting_imported, Snackbar.LENGTH_INDEFINITE); + final var importSnackbar = BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_is_getting_imported, Snackbar.LENGTH_INDEFINITE) + .setAnchorView(binding.fab); importSnackbar.show(); importSyncManager.synchronize(new ResponseCallback<>(createdAccount) { @Override public void onResponse(Boolean syncSuccess) { importSnackbar.dismiss(); runOnUiThread(() -> BrandedSnackbar.make(binding.coordinatorLayout, getString(R.string.account_imported), Snackbar.LENGTH_LONG) + .setAnchorView(binding.fab) .setAction(R.string.simple_switch, (a) -> { createdAccount.setColor(response.getColor()); mainViewModel.setSyncManager(importSyncManager); @@ -884,7 +885,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 AlertDialog.Builder(MainActivity.this) + runOnUiThread(() -> new MaterialAlertDialogBuilder(MainActivity.this) .setTitle(R.string.update_deck) .setMessage(getString(R.string.deck_outdated_please_update, response.getDeckVersion().getOriginalVersion())) .setNegativeButton(R.string.simple_discard, null) @@ -898,7 +899,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen } } else { DeckLog.warn("Cannot import account because server version is currently in maintenance mode."); - runOnUiThread(() -> new AlertDialog.Builder(MainActivity.this) + runOnUiThread(() -> new MaterialAlertDialogBuilder(MainActivity.this) .setTitle(R.string.maintenance_mode) .setMessage(getString(R.string.maintenance_mode_explanation, createdAccount.getUrl())) .setPositiveButton(R.string.simple_close, null) @@ -913,7 +914,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 AlertDialog.Builder(MainActivity.this) + runOnUiThread(() -> new MaterialAlertDialogBuilder(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) @@ -930,7 +931,9 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen IResponseCallback.super.onError(error); if (error instanceof SQLiteConstraintException) { DeckLog.warn("Account already added"); - BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_already_added, Snackbar.LENGTH_LONG).show(); + BrandedSnackbar.make(binding.coordinatorLayout, R.string.account_already_added, Snackbar.LENGTH_LONG) + .setAnchorView(binding.fab) + .show(); } else { ExceptionDialogFragment.newInstance(error, accountToCreate).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName()); } @@ -1020,6 +1023,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen /** * Find a StackFragment by it's ID, may return null. + * * @param stackId ID of the stack to find * @return Instance of StackFragment */ @@ -1030,6 +1034,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen /** * This method is called when a new Card is created + * * @param createdCard The new Card's data */ @Override @@ -1116,7 +1121,8 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen if (binding != null) { // Can be null in case the activity has been destroyed before the synchronization process has been finished BrandedSnackbar.make(binding.coordinatorLayout, R.string.synchronization_failed, Snackbar.LENGTH_LONG) .setAction(R.string.simple_more, v -> ExceptionDialogFragment.newInstance(throwable, mainViewModel.getCurrentAccount()).show(getSupportFragmentManager(), ExceptionDialogFragment.class.getSimpleName())) - .show(); + .setAnchorView(binding.fab) + .show(); } }); } @@ -1142,12 +1148,13 @@ 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 AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(this) .setTitle(R.string.clone_board) .setMultiChoiceItems(animals, checkedItems, (dialog, which, isChecked) -> checkedItems[0] = isChecked) .setPositiveButton(R.string.simple_clone, (dialog, which) -> { binding.drawerLayout.closeDrawer(GravityCompat.START); - final var snackbar = BrandedSnackbar.make(binding.coordinatorLayout, getString(R.string.cloning_board, board.getTitle()), Snackbar.LENGTH_INDEFINITE); + final var snackbar = BrandedSnackbar.make(binding.coordinatorLayout, getString(R.string.cloning_board, board.getTitle()), Snackbar.LENGTH_INDEFINITE) + .setAnchorView(binding.fab); snackbar.show(); mainViewModel.cloneBoard(board.getAccountId(), board.getLocalId(), board.getAccountId(), board.getColor(), checkedItems[0], new IResponseCallback<>() { @Override @@ -1157,6 +1164,7 @@ public class MainActivity extends AppCompatActivity implements DeleteStackListen setCurrentBoard(response.getBoard()); BrandedSnackbar.make(binding.coordinatorLayout, getString(R.string.successfully_cloned_board, response.getBoard().getTitle()), Snackbar.LENGTH_LONG) .setAction(R.string.edit, v -> EditBoardDialogFragment.newInstance(response.getLocalId()).show(getSupportFragmentManager(), EditBoardDialogFragment.class.getSimpleName())) + .setAnchorView(binding.fab) .show(); }); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java index 98690e0ca..12150641a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/accountswitcher/AccountSwitcherDialog.java @@ -8,12 +8,12 @@ import android.os.Bundle; import android.text.TextUtils; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.nextcloud.android.sso.AccountImporter; import com.nextcloud.android.sso.exceptions.AndroidGetAccountsPermissionNotGranted; import com.nextcloud.android.sso.exceptions.NextcloudFilesAppNotInstalledException; @@ -93,7 +93,7 @@ public class AccountSwitcherDialog extends DialogFragment { dismiss(); }); - return new AlertDialog.Builder(requireContext()) + return new MaterialAlertDialogBuilder(requireContext()) .setView(binding.getRoot()) .create(); } 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 075439b15..b81c6471e 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 @@ -5,7 +5,6 @@ import android.content.Context; import android.os.Bundle; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import it.niedermann.nextcloud.deck.R; @@ -38,12 +37,12 @@ public class DeleteBoardDialogFragment extends DialogFragment { @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { - AlertDialog.Builder builder = new DeleteAlertDialogBuilder(requireContext()) + return 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)) - .setNeutralButton(android.R.string.cancel, null); - return builder.create(); + .setNeutralButton(android.R.string.cancel, null) + .create(); } public static DialogFragment newInstance(@NonNull Board 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 c6f47fbb1..894f0d835 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 @@ -12,11 +12,12 @@ import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import java.util.Objects; import it.niedermann.nextcloud.deck.R; @@ -50,7 +51,7 @@ public class EditBoardDialogFragment extends DialogFragment { super.onCreate(savedInstanceState); binding = DialogTextColorInputBinding.inflate(requireActivity().getLayoutInflater()); - final var builder = new AlertDialog.Builder(requireContext()) + final var builder = new MaterialAlertDialogBuilder(requireContext()) .setView(binding.getRoot()) .setNeutralButton(android.R.string.cancel, null); 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 17f8e6891..74c0ad2a3 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 @@ -12,10 +12,10 @@ import android.widget.AdapterView.OnItemClickListener; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.snackbar.Snackbar; import java.util.List; @@ -66,7 +66,7 @@ public class AccessControlDialogFragment extends DialogFragment implements Acces super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); - final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); + final var dialogBuilder = new MaterialAlertDialogBuilder(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 b372e04c7..1b8c1e0b1 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 @@ -7,9 +7,10 @@ import android.content.Context; import android.os.Bundle; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogTextColorInputBinding; import it.niedermann.nextcloud.deck.model.Label; @@ -53,7 +54,7 @@ public class EditLabelDialogFragment extends BrandedDialogFragment { super.onCreate(savedInstanceState); binding = DialogTextColorInputBinding.inflate(requireActivity().getLayoutInflater()); - final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); + final var dialogBuilder = new MaterialAlertDialogBuilder(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 34abebf8e..53cbe09b9 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 @@ -13,10 +13,11 @@ import androidx.annotation.AnyThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import java.util.Random; import it.niedermann.nextcloud.deck.DeckLog; @@ -62,7 +63,7 @@ public class ManageLabelsDialogFragment extends BrandedDialogFragment implements super.onCreate(savedInstanceState); viewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class); - final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(requireContext()); + final var dialogBuilder = new MaterialAlertDialogBuilder(requireContext()); binding = DialogBoardManageLabelsBinding.inflate(requireActivity().getLayoutInflater()); colors = getResources().getStringArray(R.array.board_default_colors); adapter = new ManageLabelsAdapter(this, requireContext()); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDialogFragment.java index 28d4da9ee..4b35351b4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedDialogFragment.java @@ -1,19 +1,17 @@ package it.niedermann.nextcloud.deck.ui.branding; -import android.content.Context; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; import androidx.annotation.Nullable; import androidx.fragment.app.DialogFragment; -import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; - public abstract class BrandedDialogFragment extends DialogFragment implements Branded { @Override public void onStart() { super.onStart(); - @Nullable Context context = getContext(); + @Nullable final var context = getContext(); if (context != null) { applyBrand(readBrandMainColor(context)); } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java index 125c9dc23..adc4ea65f 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/BrandedSnackbar.java @@ -1,6 +1,9 @@ package it.niedermann.nextcloud.deck.ui.branding; +import static it.niedermann.nextcloud.deck.DeckApplication.isDarkTheme; +import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.getAttribute; import static it.niedermann.nextcloud.deck.ui.branding.BrandingUtil.readBrandMainColor; +import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSufficient; import android.graphics.Color; import android.view.View; @@ -12,16 +15,27 @@ import androidx.annotation.StringRes; import com.google.android.material.snackbar.BaseTransientBottomBar; import com.google.android.material.snackbar.Snackbar; -import it.niedermann.android.util.ColorUtil; +import it.niedermann.nextcloud.deck.R; public class BrandedSnackbar { @NonNull - public static Snackbar make( - @NonNull View view, @NonNull CharSequence text, @BaseTransientBottomBar.Duration int duration) { + public static Snackbar make(@NonNull View view, @NonNull CharSequence text, @BaseTransientBottomBar.Duration int duration) { final var snackbar = Snackbar.make(view, text, duration); + + @ColorInt final int backgroundColor = getAttribute(view.getContext(), R.attr.colorSurfaceInverse); @ColorInt final int color = readBrandMainColor(view.getContext()); - snackbar.setActionTextColor(ColorUtil.INSTANCE.isColorDark(color) ? Color.WHITE : color); + + if (contrastRatioIsSufficient(backgroundColor, color)) { + snackbar.setActionTextColor(color); + } else { + if (isDarkTheme(view.getContext())) { + snackbar.setActionTextColor(Color.BLACK); + } else { + snackbar.setActionTextColor(Color.WHITE); + } + } + return snackbar; } @@ -29,5 +43,4 @@ public class BrandedSnackbar { public static Snackbar make(@NonNull View view, @StringRes int resId, @BaseTransientBottomBar.Duration int duration) { return make(view, view.getResources().getText(resId), duration); } - }
\ No newline at end of file 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 fea7b31d2..3fd5c50e4 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 @@ -7,8 +7,10 @@ import static it.niedermann.nextcloud.deck.util.DeckColorUtil.contrastRatioIsSuf import android.content.Context; import android.content.res.ColorStateList; import android.graphics.Color; +import android.util.TypedValue; import android.view.MenuItem; +import androidx.annotation.AttrRes; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.core.content.ContextCompat; @@ -96,4 +98,11 @@ public abstract class BrandingUtil { menuItem.setIcon(drawable); } } + + @ColorInt + public static int getAttribute(@NonNull Context context, @AttrRes int id) { + final var typedValue = new TypedValue(); + context.getTheme().resolveAttribute(id, typedValue, true); + return typedValue.data; + } } diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/DeleteAlertDialogBuilder.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/DeleteAlertDialogBuilder.java index ea53f4461..e769797b4 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/DeleteAlertDialogBuilder.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/branding/DeleteAlertDialogBuilder.java @@ -7,9 +7,11 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import it.niedermann.nextcloud.deck.R; -public class DeleteAlertDialogBuilder extends AlertDialog.Builder { +public class DeleteAlertDialogBuilder extends MaterialAlertDialogBuilder { protected AlertDialog dialog; 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 433d87549..9fa8c3200 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,12 +15,12 @@ import android.view.MenuItem; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; import androidx.core.content.ContextCompat; import androidx.core.graphics.drawable.DrawableCompat; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; @@ -134,7 +134,7 @@ public class EditActivity extends AppCompatActivity { invalidateOptionsMenu(); observeOnce(viewModel.getFullCardWithProjectsByLocalId(account.getId(), cardLocalId), EditActivity.this, (fullCard) -> { if (fullCard == null) { - new AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(this) .setTitle(R.string.card_not_found) .setMessage(R.string.card_not_found_message) .setPositiveButton(R.string.simple_close, (a, b) -> super.finish()) @@ -198,7 +198,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 AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(this) .setTitle(R.string.title_is_mandatory) .setMessage(R.string.provide_at_least_a_title_or_description) .setPositiveButton(android.R.string.ok, null) @@ -264,7 +264,7 @@ public class EditActivity extends AppCompatActivity { @Override public void finish() { if (!viewModel.hasChanges() && viewModel.canEdit()) { - new AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(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/NewCardDialog.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java index 49daf2b32..e6aea3b9a 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/card/NewCardDialog.java @@ -19,11 +19,12 @@ import android.widget.Toast; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.MutableLiveData; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.api.IResponseCallback; import it.niedermann.nextcloud.deck.databinding.DialogNewCardBinding; @@ -80,7 +81,7 @@ public class NewCardDialog extends DialogFragment implements DialogInterface.OnC public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { binding = DialogNewCardBinding.inflate(requireActivity().getLayoutInflater()); - final var dialog = new AlertDialog.Builder(requireActivity()) + final var dialog = new MaterialAlertDialogBuilder(requireActivity()) .setTitle(R.string.add_card) .setView(binding.getRoot()) .setPositiveButton(R.string.edit, null) 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 52aa36128..113c28932 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 @@ -12,13 +12,13 @@ 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; import androidx.swiperefreshlayout.widget.CircularProgressDrawable; import com.bumptech.glide.RequestBuilder; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogPreviewBinding; @@ -64,7 +64,7 @@ public class PreviewDialog extends DialogFragment { } }); - return new AlertDialog.Builder(requireContext()) + return new MaterialAlertDialogBuilder(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 b6f6df906..b26ee84c5 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 @@ -12,9 +12,10 @@ import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import java.util.Objects; import it.niedermann.nextcloud.deck.R; @@ -50,7 +51,7 @@ public class CardCommentsEditDialogFragment extends BrandedDialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { binding = DialogAddCommentBinding.inflate(requireActivity().getLayoutInflater()); - return new AlertDialog.Builder(requireActivity()) + return new MaterialAlertDialogBuilder(requireActivity()) .setView(binding.getRoot()) .setTitle(R.string.simple_comment) .setNeutralButton(android.R.string.cancel, null) 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 de9c3460c..398323429 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 @@ -7,10 +7,11 @@ import android.view.LayoutInflater; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import java.util.ArrayList; import java.util.List; import java.util.Objects; @@ -49,7 +50,7 @@ public class CardProjectResourcesDialog extends DialogFragment { binding = DialogProjectResourcesBinding.inflate(LayoutInflater.from(requireContext())); viewModel = new ViewModelProvider(requireActivity()).get(EditCardViewModel.class); - return new AlertDialog.Builder(requireContext()) + return new MaterialAlertDialogBuilder(requireContext()) .setTitle(projectName) .setView(binding.getRoot()) .setNeutralButton(R.string.simple_close, null) diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java index 987394b4b..58e104973 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/exception/ExceptionDialogFragment.java @@ -7,10 +7,11 @@ import android.view.View; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatDialogFragment; import androidx.fragment.app.DialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import it.niedermann.android.util.ClipboardUtil; import it.niedermann.nextcloud.deck.BuildConfig; import it.niedermann.nextcloud.deck.DeckLog; @@ -61,7 +62,7 @@ public class ExceptionDialogFragment extends AppCompatDialogFragment { adapter.setThrowable(requireContext(), account, throwable); - return new AlertDialog.Builder(requireActivity()) + return new MaterialAlertDialogBuilder(requireActivity()) .setView(binding.getRoot()) .setTitle(R.string.error_dialog_title) .setPositiveButton(android.R.string.copy, (a, b) -> { 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 a06a1c8f4..50e3a05c3 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 @@ -9,7 +9,6 @@ import android.os.Bundle; import androidx.annotation.ColorInt; import androidx.annotation.NonNull; -import androidx.appcompat.app.AlertDialog; import androidx.core.content.ContextCompat; import androidx.fragment.app.DialogFragment; import androidx.fragment.app.Fragment; @@ -17,6 +16,7 @@ import androidx.lifecycle.ViewModelProvider; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.google.android.material.tabs.TabLayoutMediator; import it.niedermann.android.util.ColorUtil; @@ -50,7 +50,7 @@ public class FilterDialogFragment extends BrandedDialogFragment { filterViewModel = new ViewModelProvider(requireActivity()).get(FilterViewModel.class); - final var dialogBuilder = new AlertDialog.Builder(context); + final var dialogBuilder = new MaterialAlertDialogBuilder(context); binding = DialogFilterBinding.inflate(requireActivity().getLayoutInflater()); binding.viewPager.setAdapter(new TabsPagerAdapter(this)); diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java index 26f37e88d..207db9006 100644 --- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java +++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/sharetarget/ShareProgressDialogFragment.java @@ -14,9 +14,10 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import it.niedermann.nextcloud.deck.BuildConfig; import it.niedermann.nextcloud.deck.R; import it.niedermann.nextcloud.deck.databinding.DialogShareProgressBinding; @@ -41,7 +42,7 @@ public class ShareProgressDialogFragment extends BrandedDialogFragment { public Dialog onCreateDialog(Bundle savedInstanceState) { binding = DialogShareProgressBinding.inflate(requireActivity().getLayoutInflater()); - return new AlertDialog.Builder(requireContext()) + return new MaterialAlertDialogBuilder(requireContext()) .setView(binding.getRoot()) .create(); } 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 f2b30fd1d..30e002c9c 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 @@ -13,9 +13,9 @@ import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.lifecycle.ViewModelProvider; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; import com.nextcloud.android.sso.exceptions.NextcloudHttpRequestFailedException; import java.io.File; @@ -65,7 +65,7 @@ public class ShareTargetActivity extends MainActivity implements SelectCardListe mStreamsToUpload.addAll(listOfParcelables); } } else { - new AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(this) .setTitle(R.string.error) .setMessage(R.string.operation_not_yet_supported) .setPositiveButton(R.string.simple_close, (a, b) -> finish()) @@ -149,7 +149,7 @@ public class ShareTargetActivity extends MainActivity implements SelectCardListe private void appendTextAndFinish(@NonNull FullCard fullCard, @NonNull String receivedText) { final String[] targets = {getString(R.string.append_text_to_description), getString(R.string.add_text_as_comment)}; - new AlertDialog.Builder(this) + new MaterialAlertDialogBuilder(this) .setOnCancelListener(dialog -> cardSelected = false) .setItems(targets, (dialog, which) -> { switch (which) { 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 9357fc380..eb0ad1e26 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 @@ -16,9 +16,10 @@ import android.view.inputmethod.EditorInfo; import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AlertDialog; import androidx.fragment.app.DialogFragment; +import com.google.android.material.dialog.MaterialAlertDialogBuilder; + import java.util.Objects; import it.niedermann.nextcloud.deck.R; @@ -47,7 +48,7 @@ public class EditStackDialogFragment extends BrandedDialogFragment implements Di public Dialog onCreateDialog(Bundle savedInstanceState) { binding = DialogStackCreateBinding.inflate(requireActivity().getLayoutInflater()); - final var builder = new AlertDialog.Builder(requireActivity()) + final var builder = new MaterialAlertDialogBuilder(requireActivity()) .setView(binding.getRoot()) .setNeutralButton(android.R.string.cancel, null); |