| /* |
| * Copyright (C) 2020 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| package com.android.launcher3.folder; |
| |
| import android.text.TextUtils; |
| |
| import androidx.annotation.NonNull; |
| |
| import java.util.Arrays; |
| import java.util.Objects; |
| |
| /** |
| * Information about a label suggestions of a Folder. |
| */ |
| |
| public class FolderNameInfos { |
| public static final int SUCCESS = 1; |
| public static final int HAS_PRIMARY = 1 << 1; |
| public static final int HAS_SUGGESTIONS = 1 << 2; |
| public static final int ERROR_NO_PROVIDER = 1 << 3; |
| public static final int ERROR_APP_LOOKUP_FAILED = 1 << 4; |
| public static final int ERROR_ALL_APP_LOOKUP_FAILED = 1 << 5; |
| public static final int ERROR_NO_LABELS_GENERATED = 1 << 6; |
| public static final int ERROR_LABEL_LOOKUP_FAILED = 1 << 7; |
| public static final int ERROR_ALL_LABEL_LOOKUP_FAILED = 1 << 8; |
| public static final int ERROR_NO_PACKAGES = 1 << 9; |
| |
| private int mStatus; |
| private final CharSequence[] mLabels; |
| private final Float[] mScores; |
| |
| public FolderNameInfos() { |
| mStatus = 0; |
| mLabels = new CharSequence[FolderNameProvider.SUGGEST_MAX]; |
| mScores = new Float[FolderNameProvider.SUGGEST_MAX]; |
| } |
| |
| /** |
| * set the status of FolderNameInfos. |
| */ |
| public void setStatus(int statusBit) { |
| mStatus = mStatus | statusBit; |
| } |
| |
| /** |
| * returns status of FolderNameInfos generations. |
| */ |
| public int status() { |
| return mStatus; |
| } |
| |
| /** |
| * return true if the first suggestion is a Primary suggestion. |
| */ |
| public boolean hasPrimary() { |
| return (mStatus & HAS_PRIMARY) > 0 && (mLabels[0] != null); |
| } |
| |
| /** |
| * return true if there is at least one valid suggestion. |
| */ |
| public boolean hasSuggestions() { |
| for (CharSequence l : mLabels) { |
| if (l != null && !TextUtils.isEmpty(l)) return true; |
| } |
| return false; |
| } |
| |
| /** |
| * assign label and score in the specified index. |
| */ |
| public void setLabel(int index, CharSequence label, Float score) { |
| if (index < mLabels.length) { |
| mLabels[index] = label; |
| mScores[index] = score; |
| } |
| } |
| |
| /** |
| * returns true if the label is found in label suggestions/ |
| */ |
| public boolean contains(CharSequence label) { |
| return Arrays.stream(mLabels) |
| .filter(Objects::nonNull) |
| .anyMatch(l -> l.toString().equalsIgnoreCase(label.toString())); |
| } |
| |
| |
| public CharSequence[] getLabels() { |
| return mLabels; |
| } |
| |
| public Float[] getScores() { |
| return mScores; |
| } |
| |
| @Override |
| @NonNull |
| public String toString() { |
| return String.format("status=%s, labels=%s", Integer.toBinaryString(mStatus), |
| Arrays.toString(mLabels)); |
| } |
| } |
| |