1 /* 2 * Copyright (C) 2023 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 17 package com.google.android.car.kitchensink.radio; 18 19 import android.annotation.Nullable; 20 import android.hardware.radio.RadioAlert; 21 import android.hardware.radio.RadioManager; 22 import android.util.SparseArray; 23 24 import com.android.car.broadcastradio.support.platform.ProgramSelectorExt; 25 26 import java.util.Iterator; 27 import java.util.Map; 28 29 final class RadioTestFragmentUtils { 30 RadioTestFragmentUtils()31 private RadioTestFragmentUtils() { 32 throw new UnsupportedOperationException("RadioTestFragmentUtils class is noninstantiable"); 33 } 34 getDabChannelName(RadioManager.ProgramInfo info, SparseArray<String> dabFrequencyToLabelMap)35 static String getDabChannelName(RadioManager.ProgramInfo info, 36 SparseArray<String> dabFrequencyToLabelMap) { 37 StringBuilder channelTextBuilder = new StringBuilder(); 38 channelTextBuilder.append("DAB"); 39 40 int dabFrequency = ProgramSelectorExt.getFrequency(info.getSelector()); 41 if (dabFrequency != ProgramSelectorExt.INVALID_IDENTIFIER_VALUE) { 42 channelTextBuilder.append(' ').append(dabFrequencyToLabelMap.get(dabFrequency, "")); 43 } 44 45 int dabEnsemble = ProgramSelectorExt.getDabEnsemble(info.getSelector()); 46 if (dabEnsemble != ProgramSelectorExt.INVALID_IDENTIFIER_VALUE) { 47 channelTextBuilder.append(" Ensemble:0x").append(Integer.toHexString(dabEnsemble)); 48 } 49 return channelTextBuilder.toString(); 50 } 51 getDabFrequencyToLabelMap(Map<String, Integer> dabFrequencyTable)52 static SparseArray<String> getDabFrequencyToLabelMap(Map<String, Integer> dabFrequencyTable) { 53 SparseArray<String> dabFrequencyToLabelMap = new SparseArray<>(); 54 if (dabFrequencyTable == null) { 55 return dabFrequencyToLabelMap; 56 } 57 Iterator<Map.Entry<String, Integer>> it = dabFrequencyTable.entrySet().iterator(); 58 while (it.hasNext()) { 59 Map.Entry<String, Integer> dabFrequencyEntry = it.next(); 60 dabFrequencyToLabelMap.put(dabFrequencyEntry.getValue(), dabFrequencyEntry.getKey()); 61 } 62 return dabFrequencyToLabelMap; 63 } 64 65 @Nullable alertStatusToString(@adioAlert.AlertStatus int status)66 static String alertStatusToString(@RadioAlert.AlertStatus int status) { 67 switch (status) { 68 case RadioAlert.STATUS_ACTUAL: 69 return "ACTUAL"; 70 case RadioAlert.STATUS_EXERCISE: 71 return "EXERCISE"; 72 case RadioAlert.STATUS_TEST: 73 return "TEST"; 74 default: 75 return null; 76 } 77 } 78 79 80 @Nullable alertMessageTypeToString(@adioAlert.AlertMessageType int messageType)81 static String alertMessageTypeToString(@RadioAlert.AlertMessageType int messageType) { 82 switch (messageType) { 83 case RadioAlert.MESSAGE_TYPE_ALERT: 84 return "ALERT"; 85 case RadioAlert.MESSAGE_TYPE_UPDATE: 86 return "UPDATE"; 87 case RadioAlert.MESSAGE_TYPE_CANCEL: 88 return "CANCEL"; 89 default: 90 return null; 91 } 92 } 93 94 @Nullable alertCategoryToString(@adioAlert.AlertCategory int category)95 static String alertCategoryToString(@RadioAlert.AlertCategory int category) { 96 switch (category) { 97 case RadioAlert.CATEGORY_GEO: 98 return "GEO"; 99 case RadioAlert.CATEGORY_MET: 100 return "MET"; 101 case RadioAlert.CATEGORY_SAFETY: 102 return "SAFETY"; 103 case RadioAlert.CATEGORY_SECURITY: 104 return "SECURITY"; 105 case RadioAlert.CATEGORY_RESCUE: 106 return "RESCUE"; 107 case RadioAlert.CATEGORY_FIRE: 108 return "FIRE"; 109 case RadioAlert.CATEGORY_HEALTH: 110 return "HEALTH"; 111 case RadioAlert.CATEGORY_ENV: 112 return "ENV"; 113 case RadioAlert.CATEGORY_TRANSPORT: 114 return "TRANSPORT"; 115 case RadioAlert.CATEGORY_INFRA: 116 return "INFRA"; 117 case RadioAlert.CATEGORY_CBRNE: 118 return "CBRNE"; 119 case RadioAlert.CATEGORY_OTHER: 120 return "OTHER"; 121 default: 122 return null; 123 } 124 } 125 126 @Nullable alertUrgencyToString(@adioAlert.AlertUrgency int urgency)127 static String alertUrgencyToString(@RadioAlert.AlertUrgency int urgency) { 128 switch (urgency) { 129 case RadioAlert.URGENCY_IMMEDIATE: 130 return "IMMEDIATE"; 131 case RadioAlert.URGENCY_EXPECTED: 132 return "EXPECTED"; 133 case RadioAlert.URGENCY_FUTURE: 134 return "FUTURE"; 135 case RadioAlert.URGENCY_PAST: 136 return "PAST"; 137 case RadioAlert.URGENCY_UNKNOWN: 138 return "UNKNOWN"; 139 default: 140 return null; 141 } 142 } 143 144 @Nullable alertSeverityToString(@adioAlert.AlertSeverity int alertSeverity)145 static String alertSeverityToString(@RadioAlert.AlertSeverity int alertSeverity) { 146 switch (alertSeverity) { 147 case RadioAlert.SEVERITY_EXTREME: 148 return "EXTREME"; 149 case RadioAlert.SEVERITY_SEVERE: 150 return "SEVERE"; 151 case RadioAlert.SEVERITY_MODERATE: 152 return "MODERATE"; 153 case RadioAlert.SEVERITY_MINOR: 154 return "MINOR"; 155 case RadioAlert.SEVERITY_UNKNOWN: 156 return "UNKNOWN"; 157 default: 158 return null; 159 } 160 } 161 162 @Nullable alertCertaintyToString(@adioAlert.AlertCertainty int alertCertainty)163 static String alertCertaintyToString(@RadioAlert.AlertCertainty int alertCertainty) { 164 switch (alertCertainty) { 165 case RadioAlert.CERTAINTY_OBSERVED: 166 return "OBSERVED"; 167 case RadioAlert.CERTAINTY_LIKELY: 168 return "LIKELY"; 169 case RadioAlert.CERTAINTY_POSSIBLE: 170 return "POSSIBLE"; 171 case RadioAlert.CERTAINTY_UNLIKELY: 172 return "UNLIKELY"; 173 case RadioAlert.CERTAINTY_UNKNOWN: 174 return "UNKNOWN"; 175 default: 176 return null; 177 } 178 } 179 } 180