1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 package com.android.launcher3.util; 17 18 import java.text.Collator; 19 import java.util.Comparator; 20 21 /** 22 * Extension of {@link java.text.Collator} with special handling for digits. Used for comparing 23 * user visible labels. 24 */ 25 public class LabelComparator implements Comparator<String> { 26 27 private final Collator mCollator = Collator.getInstance(); 28 29 @Override compare(String titleA, String titleB)30 public int compare(String titleA, String titleB) { 31 // Ensure that we de-prioritize any titles that don't start with a 32 // linguistic letter or digit 33 boolean aStartsWithLetter = (titleA.length() > 0) && 34 Character.isLetterOrDigit(titleA.codePointAt(0)); 35 boolean bStartsWithLetter = (titleB.length() > 0) && 36 Character.isLetterOrDigit(titleB.codePointAt(0)); 37 if (aStartsWithLetter && !bStartsWithLetter) { 38 return -1; 39 } else if (!aStartsWithLetter && bStartsWithLetter) { 40 return 1; 41 } 42 43 // Order by the title in the current locale 44 return mCollator.compare(titleA, titleB); 45 } 46 } 47