Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20bb9481 authored by Stefan Niedermann's avatar Stefan Niedermann
Browse files

Material 3: First steps

parent 272bf451
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -101,7 +101,7 @@ dependencies {
    implementation 'androidx.recyclerview:recyclerview:1.2.1'
    implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
    implementation 'androidx.work:work-runtime:2.7.1'
    implementation 'com.google.android.material:material:1.6.1'
    implementation 'com.google.android.material:material:1.7.0'

    // Database
    implementation 'androidx.room:room-runtime:2.4.3'
+4 −7
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.accountswitcher;

import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable;

import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
@@ -8,14 +10,11 @@ import android.net.Uri;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment;
import androidx.lifecycle.LiveData;

import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;

import java.util.List;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;

import it.niedermann.owncloud.notes.R;
import it.niedermann.owncloud.notes.branding.BrandedDialogFragment;
@@ -24,8 +23,6 @@ import it.niedermann.owncloud.notes.manageaccounts.ManageAccountsActivity;
import it.niedermann.owncloud.notes.persistence.NotesRepository;
import it.niedermann.owncloud.notes.persistence.entity.Account;

import static it.niedermann.owncloud.notes.branding.BrandingUtil.applyBrandToLayerDrawable;

/**
 * Displays all available {@link Account} entries and provides basic operations for them, like adding or switching
 */
@@ -104,7 +101,7 @@ public class AccountSwitcherDialog extends BrandedDialogFragment {
            dismiss();
        });

        return new AlertDialog.Builder(requireContext())
        return new MaterialAlertDialogBuilder(requireContext())
                .setView(binding.getRoot())
                .create();
    }
+4 −2
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.branding;

import static it.niedermann.owncloud.notes.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme;

import android.content.Context;
import android.content.DialogInterface;
import android.widget.Button;
@@ -9,9 +11,9 @@ import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AlertDialog;

import static it.niedermann.owncloud.notes.branding.BrandingUtil.getSecondaryForegroundColorDependingOnTheme;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;

public class BrandedAlertDialogBuilder extends AlertDialog.Builder implements Branded {
public class BrandedAlertDialogBuilder extends MaterialAlertDialogBuilder implements Branded {

    protected AlertDialog dialog;

+24 −6
Original line number Diff line number Diff line
package it.niedermann.owncloud.notes.branding;

import static it.niedermann.owncloud.notes.NotesApplication.isDarkThemeActive;
import static it.niedermann.owncloud.notes.branding.BrandingUtil.getAttribute;
import static it.niedermann.owncloud.notes.branding.BrandingUtil.readBrandMainColor;
import static it.niedermann.owncloud.notes.shared.util.NotesColorUtil.contrastRatioIsSufficient;

import android.graphics.Color;
import android.view.View;

import androidx.annotation.ColorInt;
import androidx.annotation.NonNull;
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.owncloud.notes.R;

public class BrandedSnackbar {

    @NonNull
    public static Snackbar make(@NonNull View view, @NonNull CharSequence text, @Snackbar.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);
        final int color = BrandingUtil.readBrandMainColor(view.getContext());
        snackbar.setActionTextColor(ColorUtil.INSTANCE.isColorDark(color) ? Color.WHITE : color);

        @ColorInt final int backgroundColor = getAttribute(view.getContext(), R.attr.colorSurfaceInverse);
        @ColorInt final int color = readBrandMainColor(view.getContext());

        if (contrastRatioIsSufficient(backgroundColor, color)) {
            snackbar.setActionTextColor(color);
        } else {
            if (isDarkThemeActive(view.getContext())) {
                snackbar.setActionTextColor(Color.BLACK);
            } else {
                snackbar.setActionTextColor(Color.WHITE);
            }
        }

        return snackbar;
    }

    @NonNull
    public static Snackbar make(@NonNull View view, @StringRes int resId, @Snackbar.Duration int duration) {
    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
+9 −0
Original line number Diff line number Diff line
@@ -7,9 +7,11 @@ import android.graphics.Color;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.LayerDrawable;
import android.util.Log;
import android.util.TypedValue;
import android.view.MenuItem;
import android.widget.EditText;

import androidx.annotation.AttrRes;
import androidx.annotation.ColorInt;
import androidx.annotation.IdRes;
import androidx.annotation.NonNull;
@@ -161,4 +163,11 @@ public class BrandingUtil {
            DrawableCompat.setTint(drawable, mainColor);
        }
    }

    @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;
    }
}
Loading