// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

package org.chromium.components.permissions;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.drawable.Drawable;
import android.text.TextUtils;

import androidx.annotation.Nullable;

/**
 * A class representing one data row in the dialog.
 */
public class DeviceItemRow {
    public final String mKey;
    public String mDescription;
    public Drawable mIcon;
    public String mIconDescription;

    /**
     * Creates a device item row which can be shown in the dialog.
     *
     * @param key Item unique identifier.
     * @param description Item description.
     * @param icon Item icon.
     * @param iconDescription Item icon description.
     */
    public DeviceItemRow(String key, String description, @Nullable Drawable icon,
            @Nullable String iconDescription) {
        mKey = key;
        mDescription = description;
        mIcon = icon;
        mIconDescription = iconDescription;
    }

    /**
     * Returns true if all parameters match the corresponding member.
     *
     * @param key Expected item unique identifier.
     * @param description Expected item description.
     * @param icon Expected item icon.
     */
    public boolean hasSameContents(String key, String description, @Nullable Drawable icon,
            @Nullable String iconDescription) {
        if (!TextUtils.equals(mKey, key)) return false;
        if (!TextUtils.equals(mDescription, description)) return false;
        if (!TextUtils.equals(mIconDescription, iconDescription)) return false;

        if (icon != null && mIcon != null) {
            Drawable myIcon = mIcon.getConstantState().newDrawable();
            Drawable theirIcon = icon.getConstantState().newDrawable();

            Bitmap myBitmap = Bitmap.createBitmap(myIcon.getIntrinsicWidth(),
                    myIcon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
            Canvas myCanvas = new Canvas();
            myCanvas.setBitmap(myBitmap);
            myIcon.setBounds(0, 0, myCanvas.getWidth(), myCanvas.getHeight());
            myIcon.draw(myCanvas);

            Bitmap theirBitmap = Bitmap.createBitmap(theirIcon.getIntrinsicWidth(),
                    theirIcon.getIntrinsicHeight(), Bitmap.Config.ARGB_8888);
            Canvas theirCanvas = new Canvas();
            theirCanvas.setBitmap(theirBitmap);
            theirIcon.setBounds(0, 0, theirCanvas.getWidth(), theirCanvas.getHeight());
            theirIcon.draw(theirCanvas);

            return myBitmap.sameAs(theirBitmap);
        }

        return icon == null && mIcon == null;
    }
}
