12cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/*
22cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Copyright (C) 2013 The Android Open Source Project
32cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *
42cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Licensed under the Apache License, Version 2.0 (the "License");
52cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * you may not use this file except in compliance with the License.
62cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * You may obtain a copy of the License at
72cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *
82cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *      http://www.apache.org/licenses/LICENSE-2.0
92cfe25aefb32ed215f1c661d9670baf276fb7776James Kung *
102cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * Unless required by applicable law or agreed to in writing, software
112cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * distributed under the License is distributed on an "AS IS" BASIS,
122cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * See the License for the specific language governing permissions and
142cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * limitations under the License.
152cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */
162cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
172cfe25aefb32ed215f1c661d9670baf276fb7776James Kungpackage com.android.colorpicker;
182cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
192cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport android.graphics.Color;
202cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
212cfe25aefb32ed215f1c661d9670baf276fb7776James Kungimport java.util.Comparator;
222cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
232cfe25aefb32ed215f1c661d9670baf276fb7776James Kung/**
242cfe25aefb32ed215f1c661d9670baf276fb7776James Kung * A color comparator which compares based on hue, saturation, and value.
252cfe25aefb32ed215f1c661d9670baf276fb7776James Kung */
262cfe25aefb32ed215f1c661d9670baf276fb7776James Kungpublic class HsvColorComparator implements Comparator<Integer> {
272cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
282cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    @Override
292cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    public int compare(Integer lhs, Integer rhs) {
302cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float[] hsv = new float[3];
312cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        Color.colorToHSV(lhs, hsv);
322cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float hue1 = hsv[0];
332cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float sat1 = hsv[1];
342cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float val1 = hsv[2];
352cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
362cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float[] hsv2 = new float[3];
372cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        Color.colorToHSV(rhs, hsv2);
382cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float hue2 = hsv2[0];
392cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float sat2 = hsv2[1];
402cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        float val2 = hsv2[2];
412cfe25aefb32ed215f1c661d9670baf276fb7776James Kung
422cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        if (hue1 < hue2) {
432cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            return 1;
442cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        } else if (hue1 > hue2) {
452cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            return -1;
462cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        } else {
472cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            if (sat1 < sat2) {
482cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                return 1;
492cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            } else if (sat1 > sat2) {
502cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                return -1;
512cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            } else {
522cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                if (val1 < val2) {
532cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                    return 1;
542cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                } else if (val1 > val2) {
552cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                    return -1;
562cfe25aefb32ed215f1c661d9670baf276fb7776James Kung                }
572cfe25aefb32ed215f1c661d9670baf276fb7776James Kung            }
582cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        }
592cfe25aefb32ed215f1c661d9670baf276fb7776James Kung        return 0;
602cfe25aefb32ed215f1c661d9670baf276fb7776James Kung    }
612cfe25aefb32ed215f1c661d9670baf276fb7776James Kung}
62